Commit a65d9efc authored by Zardosht Kasheff's avatar Zardosht Kasheff Committed by Yoni Fogel

[t:2549], add Martin option

git-svn-id: file:///svn/mysql/tokudb-engine/tokudb-engine@19652 c7de825b-a66e-492c-adef-691d508d4ae1
parent 19d70153
......@@ -2814,16 +2814,17 @@ bool ha_tokudb::may_table_be_empty() {
}
void ha_tokudb::start_bulk_insert(ha_rows rows) {
TOKUDB_DBUG_ENTER("ha_tokudb::start_bulk_insert");
THD* thd = ha_thd();
delay_updating_ai_metadata = true;
ai_metadata_update_required = false;
abort_loader = false;
if (share->try_table_lock) {
if (tokudb_prelock_empty && may_table_be_empty()) {
if (using_ignore) {
if (using_ignore || get_load_save_space(thd)) {
acquire_table_lock(transaction, lock_write);
}
else {
THD* thd = ha_thd();
u_int32_t mult_put_flags[MAX_KEY + 1] = {DB_YESOVERWRITE};
u_int32_t mult_dbt_flags[MAX_KEY + 1] = {DB_DBT_REALLOC};
uint curr_num_DBs = table->s->keys + test(hidden_primary_key);
......@@ -2858,6 +2859,7 @@ void ha_tokudb::start_bulk_insert(ha_rows rows) {
share->try_table_lock = false;
pthread_mutex_unlock(&share->mutex);
}
DBUG_VOID_RETURN;
}
//
......@@ -2866,6 +2868,7 @@ void ha_tokudb::start_bulk_insert(ha_rows rows) {
// this is guaranteed to be called.
//
int ha_tokudb::end_bulk_insert() {
TOKUDB_DBUG_ENTER("ha_tokudb::end_bulk_insert");
int error = 0;
if (ai_metadata_update_required) {
pthread_mutex_lock(&share->mutex);
......@@ -2916,7 +2919,7 @@ int ha_tokudb::end_bulk_insert() {
if (error || loader_error) {
my_errno = error ? error : loader_error;
}
return error ? error : loader_error;
TOKUDB_DBUG_RETURN(error ? error : loader_error);
}
......@@ -6239,6 +6242,7 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) {
DB_TXN* txn = NULL;
THD* thd = ha_thd();
DB_LOADER* loader = NULL;
u_int32_t loader_flags = (get_load_save_space(thd)) ? LOADER_USE_PUTS : 0;
u_int32_t mult_put_flags[MAX_KEY + 1] = {DB_YESOVERWRITE};
u_int32_t mult_dbt_flags[MAX_KEY + 1] = {DB_DBT_REALLOC};
struct loader_context lc = {0};
......@@ -6352,7 +6356,7 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) {
&share->key_file[curr_num_DBs],
mult_put_flags,
mult_dbt_flags,
0
loader_flags
);
if (error) { goto cleanup; }
......
......@@ -84,6 +84,14 @@ static MYSQL_THDVAR_UINT(pk_insert_mode,
1 // blocksize
);
static MYSQL_THDVAR_BOOL(load_save_space,
0,
"if on, intial loads are slower but take less space",
NULL,
NULL,
FALSE
);
static void tokudb_print_error(const DB_ENV * db_env, const char *db_errpfx, const char *buffer);
static void tokudb_cleanup_log_files(void);
......@@ -486,6 +494,10 @@ uint get_pk_insert_mode(THD* thd) {
return THDVAR(thd, pk_insert_mode);
}
bool get_load_save_space(THD* thd) {
return (THDVAR(thd, load_save_space) != 0);
}
typedef struct txn_progress_info {
char status[200];
......@@ -1159,6 +1171,7 @@ static struct st_mysql_sys_var *tokudb_system_variables[] = {
MYSQL_SYSVAR(write_lock_wait),
MYSQL_SYSVAR(read_lock_wait),
MYSQL_SYSVAR(pk_insert_mode),
MYSQL_SYSVAR(load_save_space),
MYSQL_SYSVAR(version),
MYSQL_SYSVAR(init_flags),
MYSQL_SYSVAR(checkpointing_period),
......
......@@ -14,6 +14,7 @@ extern DB *metadata_db;
ulonglong get_write_lock_wait_time (THD* thd);
ulonglong get_read_lock_wait_time (THD* thd);
uint get_pk_insert_mode(THD* thd);
bool get_load_save_space(THD* thd);
extern HASH tokudb_open_tables;
extern pthread_mutex_t tokudb_mutex;
......
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