diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index ff3a6d067d4e86c3547b778d7a288c7d1297ad8e..fee6a091e58436d530cb0c26332ed0b80680fcce 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -178,7 +178,6 @@ void toku_hton_update_primary_key_bytes_inserted(uint64_t row_size) { increment_partitioned_counter(tokudb_primary_key_bytes_inserted, row_size); } -static ulonglong tokudb_lock_timeout; static void tokudb_lock_timeout_callback(DB *db, uint64_t requesting_txnid, const DBT *left_key, const DBT *right_key, uint64_t blocking_txnid); static ulong tokudb_cleaner_period; static ulong tokudb_cleaner_iterations; @@ -476,7 +475,7 @@ static int tokudb_init_func(void *p) { r = db_env->cleaner_set_iterations(db_env, tokudb_cleaner_iterations); assert(r == 0); - r = db_env->set_lock_timeout(db_env, tokudb_lock_timeout); + r = db_env->set_lock_timeout(db_env, DEFAULT_TOKUDB_LOCK_TIMEOUT, tokudb_get_lock_wait_time_callback); assert(r == 0); r = db_env->get_engine_status_num_rows (db_env, &toku_global_status_max_rows); @@ -1156,20 +1155,6 @@ static void tokudb_cleanup_log_files(void) { // system variables - -static void tokudb_lock_timeout_update(THD * thd, struct st_mysql_sys_var * sys_var, void * var, const void * save) { - ulonglong *timeout = (ulonglong *) var; - *timeout = *(const ulonglong *) save; - db_env->set_lock_timeout(db_env, *timeout); -} - -#define DEFAULT_LOCK_TIMEOUT_MSEC 4000 - -static MYSQL_SYSVAR_ULONGLONG(lock_timeout, tokudb_lock_timeout, - 0, "TokuDB lock timeout", - NULL, tokudb_lock_timeout_update, DEFAULT_LOCK_TIMEOUT_MSEC, - 0, ~0ULL, 0); - static void tokudb_cleaner_period_update(THD * thd, struct st_mysql_sys_var * sys_var, void * var, const void * save) { ulong * cleaner_period = (ulong *) var; *cleaner_period = *(const ulonglong *) save; diff --git a/storage/tokudb/hatoku_hton.h b/storage/tokudb/hatoku_hton.h index 0cdd64d0b48856c4c60569258a107cc5c6658e6f..19550491630e8b74d11ddfe03f66d45e6eac5b21 100644 --- a/storage/tokudb/hatoku_hton.h +++ b/storage/tokudb/hatoku_hton.h @@ -341,6 +341,25 @@ static MYSQL_THDVAR_STR(last_lock_timeout, PLUGIN_VAR_MEMALLOC, "last TokuDB loc static MYSQL_THDVAR_BOOL(hide_default_row_format, 0, "hide the default row format", NULL /*check*/, NULL /*update*/, false); +#define DEFAULT_TOKUDB_LOCK_TIMEOUT 4000 /*milliseconds*/ + +static MYSQL_THDVAR_ULONGLONG(lock_timeout, + 0, + "lock timeout", + NULL, + NULL, + DEFAULT_TOKUDB_LOCK_TIMEOUT, /*default*/ + 0, /*min*/ + ~0ULL, /*max*/ + 1 /*blocksize*/ +); + +static uint64_t tokudb_get_lock_wait_time_callback(uint64_t default_wait_time) { + THD *thd = current_thd; + uint64_t wait_time = THDVAR(thd, lock_timeout); + return wait_time; +} + extern HASH tokudb_open_tables; extern pthread_mutex_t tokudb_mutex; extern pthread_mutex_t tokudb_meta_mutex;