Commit 64527cc8 authored by Rich Prohaska's avatar Rich Prohaska Committed by Yoni Fogel

#3162 implement key_block_size in the handlerton closes[t:3162]

git-svn-id: file:///svn/mysql/tokudb-engine/tokudb-engine@26853 c7de825b-a66e-492c-adef-691d508d4ae1
parent 72f9f9f8
...@@ -5593,7 +5593,7 @@ int toku_dbt_up(DB*, ...@@ -5593,7 +5593,7 @@ int toku_dbt_up(DB*,
return 0; return 0;
} }
static int create_sub_table(const char *table_name, DBT* row_descriptor, DB_TXN* txn, uint32_t tokudb_block_size) { static int create_sub_table(const char *table_name, DBT* row_descriptor, DB_TXN* txn, uint32_t block_size) {
TOKUDB_DBUG_ENTER("create_sub_table"); TOKUDB_DBUG_ENTER("create_sub_table");
int error; int error;
DB *file = NULL; DB *file = NULL;
...@@ -5612,10 +5612,10 @@ static int create_sub_table(const char *table_name, DBT* row_descriptor, DB_TXN* ...@@ -5612,10 +5612,10 @@ static int create_sub_table(const char *table_name, DBT* row_descriptor, DB_TXN*
goto exit; goto exit;
} }
if (tokudb_block_size != 0) { if (block_size != 0) {
error = file->set_pagesize(file, tokudb_block_size); error = file->set_pagesize(file, block_size);
if (error != 0) { if (error != 0) {
DBUG_PRINT("error", ("Got error: %d when setting block size %u for table '%s'", error, tokudb_block_size, table_name)); DBUG_PRINT("error", ("Got error: %d when setting block size %u for table '%s'", error, block_size, table_name));
goto exit; goto exit;
} }
} }
...@@ -5737,8 +5737,8 @@ int ha_tokudb::create_secondary_dictionary(const char* name, TABLE* form, KEY* k ...@@ -5737,8 +5737,8 @@ int ha_tokudb::create_secondary_dictionary(const char* name, TABLE* form, KEY* k
KEY* prim_key = NULL; KEY* prim_key = NULL;
char dict_name[MAX_DICT_NAME_LEN]; char dict_name[MAX_DICT_NAME_LEN];
u_int32_t max_row_desc_buff_size; u_int32_t max_row_desc_buff_size;
THD* thd = ha_thd();
uint hpk= (form->s->primary_key >= MAX_KEY) ? TOKUDB_HIDDEN_PRIMARY_KEY_LENGTH : 0; uint hpk= (form->s->primary_key >= MAX_KEY) ? TOKUDB_HIDDEN_PRIMARY_KEY_LENGTH : 0;
uint32_t block_size;
bzero(&row_descriptor, sizeof(row_descriptor)); bzero(&row_descriptor, sizeof(row_descriptor));
...@@ -5797,7 +5797,13 @@ int ha_tokudb::create_secondary_dictionary(const char* name, TABLE* form, KEY* k ...@@ -5797,7 +5797,13 @@ int ha_tokudb::create_secondary_dictionary(const char* name, TABLE* form, KEY* k
row_descriptor.size = ptr - row_desc_buff; row_descriptor.size = ptr - row_desc_buff;
assert(row_descriptor.size <= max_row_desc_buff_size); assert(row_descriptor.size <= max_row_desc_buff_size);
error = create_sub_table(newname, &row_descriptor, txn, get_tokudb_block_size(thd)); block_size = key_info->block_size << 10;
if (block_size == 0) {
THD* thd = ha_thd();
block_size = get_tokudb_block_size(thd);
}
error = create_sub_table(newname, &row_descriptor, txn, block_size);
cleanup: cleanup:
my_free(newname, MYF(MY_ALLOW_ZERO_PTR)); my_free(newname, MYF(MY_ALLOW_ZERO_PTR));
my_free(row_desc_buff, MYF(MY_ALLOW_ZERO_PTR)); my_free(row_desc_buff, MYF(MY_ALLOW_ZERO_PTR));
...@@ -5816,8 +5822,8 @@ int ha_tokudb::create_main_dictionary(const char* name, TABLE* form, DB_TXN* txn ...@@ -5816,8 +5822,8 @@ int ha_tokudb::create_main_dictionary(const char* name, TABLE* form, DB_TXN* txn
char* newname = NULL; char* newname = NULL;
KEY* prim_key = NULL; KEY* prim_key = NULL;
u_int32_t max_row_desc_buff_size; u_int32_t max_row_desc_buff_size;
THD* thd = ha_thd();
uint hpk= (form->s->primary_key >= MAX_KEY) ? TOKUDB_HIDDEN_PRIMARY_KEY_LENGTH : 0; uint hpk= (form->s->primary_key >= MAX_KEY) ? TOKUDB_HIDDEN_PRIMARY_KEY_LENGTH : 0;
uint32_t block_size;
bzero(&row_descriptor, sizeof(row_descriptor)); bzero(&row_descriptor, sizeof(row_descriptor));
max_row_desc_buff_size = 2*(form->s->fields * 6)+10; // upper bound of key comparison descriptor max_row_desc_buff_size = 2*(form->s->fields * 6)+10; // upper bound of key comparison descriptor
...@@ -5867,8 +5873,16 @@ int ha_tokudb::create_main_dictionary(const char* name, TABLE* form, DB_TXN* txn ...@@ -5867,8 +5873,16 @@ int ha_tokudb::create_main_dictionary(const char* name, TABLE* form, DB_TXN* txn
row_descriptor.size = ptr - row_desc_buff; row_descriptor.size = ptr - row_desc_buff;
assert(row_descriptor.size <= max_row_desc_buff_size); assert(row_descriptor.size <= max_row_desc_buff_size);
block_size = 0;
if (prim_key)
block_size = prim_key->block_size << 10;
if (block_size == 0) {
THD* thd = ha_thd();
block_size = get_tokudb_block_size(thd);
}
/* Create the main table that will hold the real rows */ /* Create the main table that will hold the real rows */
error = create_sub_table(newname, &row_descriptor, txn, get_tokudb_block_size(thd)); error = create_sub_table(newname, &row_descriptor, txn, block_size);
cleanup: cleanup:
my_free(newname, MYF(MY_ALLOW_ZERO_PTR)); my_free(newname, MYF(MY_ALLOW_ZERO_PTR));
my_free(row_desc_buff, MYF(MY_ALLOW_ZERO_PTR)); my_free(row_desc_buff, MYF(MY_ALLOW_ZERO_PTR));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment