mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
#228 use thd_get/set_ha_data for tokudb_trx data
This commit is contained in:
@@ -120,14 +120,6 @@ extern "C" {
|
||||
#include "hatoku_defines.h"
|
||||
#include "hatoku_cmp.h"
|
||||
|
||||
static inline void *thd_data_get(THD *thd, int slot) {
|
||||
return thd->ha_data[slot].ha_ptr;
|
||||
}
|
||||
|
||||
static inline void thd_data_set(THD *thd, int slot, void *data) {
|
||||
thd->ha_data[slot].ha_ptr = data;
|
||||
}
|
||||
|
||||
static inline uint get_key_parts(const KEY *key);
|
||||
|
||||
#undef PACKAGE
|
||||
@@ -1016,8 +1008,7 @@ static uchar* pack_toku_field_blob(
|
||||
|
||||
static int create_tokudb_trx_data_instance(tokudb_trx_data** out_trx) {
|
||||
int error;
|
||||
tokudb_trx_data* trx = NULL;
|
||||
trx = (tokudb_trx_data *) tokudb_my_malloc(sizeof(*trx), MYF(MY_ZEROFILL));
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) tokudb_my_malloc(sizeof(*trx), MYF(MY_ZEROFILL));
|
||||
if (!trx) {
|
||||
error = ENOMEM;
|
||||
goto cleanup;
|
||||
@@ -1614,8 +1605,7 @@ int ha_tokudb::initialize_share(
|
||||
DB_TXN* txn = NULL;
|
||||
bool do_commit = false;
|
||||
THD* thd = ha_thd();
|
||||
tokudb_trx_data *trx = NULL;
|
||||
trx = (tokudb_trx_data *) thd_data_get(ha_thd(), tokudb_hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(ha_thd(), tokudb_hton);
|
||||
if (thd_sql_command(thd) == SQLCOM_CREATE_TABLE && trx && trx->sub_sp_level) {
|
||||
txn = trx->sub_sp_level;
|
||||
}
|
||||
@@ -3260,7 +3250,7 @@ void ha_tokudb::start_bulk_insert(ha_rows rows) {
|
||||
TOKUDB_HANDLER_DBUG_ENTER("%llu txn %p", (unsigned long long) rows, transaction);
|
||||
#endif
|
||||
THD* thd = ha_thd();
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
delay_updating_ai_metadata = true;
|
||||
ai_metadata_update_required = false;
|
||||
abort_loader = false;
|
||||
@@ -3328,7 +3318,7 @@ int ha_tokudb::end_bulk_insert(bool abort) {
|
||||
TOKUDB_HANDLER_DBUG_ENTER("");
|
||||
int error = 0;
|
||||
THD* thd = ha_thd();
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
bool using_loader = (loader != NULL);
|
||||
if (ai_metadata_update_required) {
|
||||
tokudb_pthread_mutex_lock(&share->mutex);
|
||||
@@ -4060,7 +4050,7 @@ int ha_tokudb::write_row(uchar * record) {
|
||||
}
|
||||
}
|
||||
|
||||
trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
if (!error) {
|
||||
added_rows++;
|
||||
trx->stmt_progress.inserted++;
|
||||
@@ -4117,7 +4107,7 @@ int ha_tokudb::update_row(const uchar * old_row, uchar * new_row) {
|
||||
THD* thd = ha_thd();
|
||||
DB_TXN* sub_trans = NULL;
|
||||
DB_TXN* txn = NULL;
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
uint curr_num_DBs;
|
||||
|
||||
LINT_INIT(error);
|
||||
@@ -4291,7 +4281,7 @@ int ha_tokudb::delete_row(const uchar * record) {
|
||||
bool has_null;
|
||||
THD* thd = ha_thd();
|
||||
uint curr_num_DBs;
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);;
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);;
|
||||
|
||||
ha_statistic_increment(&SSV::ha_delete_count);
|
||||
|
||||
@@ -4855,7 +4845,7 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_
|
||||
int error = 0;
|
||||
uint32_t flags = 0;
|
||||
THD* thd = ha_thd();
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);;
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);;
|
||||
struct smart_dbt_info info;
|
||||
struct index_read_info ir_info;
|
||||
|
||||
@@ -5333,7 +5323,7 @@ int ha_tokudb::get_next(uchar* buf, int direction, DBT* key_to_compare, bool do_
|
||||
int error = 0;
|
||||
uint32_t flags = SET_PRELOCK_FLAG(0);
|
||||
THD* thd = ha_thd();
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);;
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);;
|
||||
bool need_val;
|
||||
HANDLE_INVALID_CURSOR();
|
||||
|
||||
@@ -5486,7 +5476,7 @@ int ha_tokudb::index_first(uchar * buf) {
|
||||
struct smart_dbt_info info;
|
||||
uint32_t flags = SET_PRELOCK_FLAG(0);
|
||||
THD* thd = ha_thd();
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);;
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);;
|
||||
HANDLE_INVALID_CURSOR();
|
||||
|
||||
ha_statistic_increment(&SSV::ha_read_first_count);
|
||||
@@ -5529,7 +5519,7 @@ int ha_tokudb::index_last(uchar * buf) {
|
||||
struct smart_dbt_info info;
|
||||
uint32_t flags = SET_PRELOCK_FLAG(0);
|
||||
THD* thd = ha_thd();
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);;
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);;
|
||||
HANDLE_INVALID_CURSOR();
|
||||
|
||||
ha_statistic_increment(&SSV::ha_read_last_count);
|
||||
@@ -5620,7 +5610,7 @@ int ha_tokudb::rnd_next(uchar * buf) {
|
||||
|
||||
|
||||
void ha_tokudb::track_progress(THD* thd) {
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
if (trx) {
|
||||
ulonglong num_written = trx->stmt_progress.inserted + trx->stmt_progress.updated + trx->stmt_progress.deleted;
|
||||
bool update_status =
|
||||
@@ -6205,12 +6195,11 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) {
|
||||
}
|
||||
|
||||
int error = 0;
|
||||
tokudb_trx_data *trx = NULL;
|
||||
trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
if (!trx) {
|
||||
error = create_tokudb_trx_data_instance(&trx);
|
||||
if (error) { goto cleanup; }
|
||||
thd_data_set(thd, tokudb_hton->slot, trx);
|
||||
thd_set_ha_data(thd, tokudb_hton, trx);
|
||||
}
|
||||
if (trx->all == NULL) {
|
||||
trx->sp_level = NULL;
|
||||
@@ -6284,7 +6273,7 @@ int ha_tokudb::start_stmt(THD * thd, thr_lock_type lock_type) {
|
||||
TOKUDB_HANDLER_TRACE("q %s", thd->query());
|
||||
|
||||
int error = 0;
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
DBUG_ASSERT(trx);
|
||||
|
||||
/*
|
||||
@@ -6898,7 +6887,7 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in
|
||||
newname = (char *)tokudb_my_malloc(get_max_dict_name_path_length(name),MYF(MY_WME));
|
||||
if (newname == NULL){ error = ENOMEM; goto cleanup;}
|
||||
|
||||
trx = (tokudb_trx_data *) thd_data_get(ha_thd(), tokudb_hton->slot);
|
||||
trx = (tokudb_trx_data *) thd_get_ha_data(ha_thd(), tokudb_hton);
|
||||
if (trx && trx->sub_sp_level && thd_sql_command(thd) == SQLCOM_CREATE_TABLE) {
|
||||
txn = trx->sub_sp_level;
|
||||
}
|
||||
@@ -7088,7 +7077,7 @@ int ha_tokudb::delete_or_rename_table (const char* from_name, const char* to_nam
|
||||
|
||||
DB_TXN *parent_txn = NULL;
|
||||
tokudb_trx_data *trx = NULL;
|
||||
trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
if (thd_sql_command(ha_thd()) == SQLCOM_CREATE_TABLE && trx && trx->sub_sp_level) {
|
||||
parent_txn = trx->sub_sp_level;
|
||||
}
|
||||
@@ -8234,12 +8223,12 @@ void ha_tokudb::cleanup_txn(DB_TXN *txn) {
|
||||
}
|
||||
|
||||
void ha_tokudb::add_to_trx_handler_list() {
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(ha_thd(), tokudb_hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(ha_thd(), tokudb_hton);
|
||||
trx->handlers = list_add(trx->handlers, &trx_handler_list);
|
||||
}
|
||||
|
||||
void ha_tokudb::remove_from_trx_handler_list() {
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(ha_thd(), tokudb_hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(ha_thd(), tokudb_hton);
|
||||
trx->handlers = list_delete(trx->handlers, &trx_handler_list);
|
||||
}
|
||||
|
||||
|
||||
@@ -752,7 +752,7 @@ bool ha_tokudb::commit_inplace_alter_table(TABLE *altered_table, Alter_inplace_i
|
||||
|
||||
if (!commit) {
|
||||
// abort the alter transaction NOW so that any alters are rolled back. this allows the following restores to work.
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
assert(ctx->alter_txn == trx->stmt);
|
||||
assert(trx->tokudb_lock_count > 0);
|
||||
// for partitioned tables, we use a single transaction to do all of the partition changes. the tokudb_lock_count
|
||||
|
||||
@@ -814,7 +814,7 @@ int ha_tokudb::write_frm_data(const uchar *frm_data, size_t frm_len) {
|
||||
if (TOKU_PARTITION_WRITE_FRM_DATA || table->part_info == NULL) {
|
||||
// write frmdata to status
|
||||
THD *thd = ha_thd();
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
assert(trx);
|
||||
DB_TXN *txn = trx->stmt; // use alter table transaction
|
||||
assert(txn);
|
||||
|
||||
@@ -624,8 +624,7 @@ int tokudb_end(handlerton * hton, ha_panic_function type) {
|
||||
|
||||
static int tokudb_close_connection(handlerton * hton, THD * thd) {
|
||||
int error = 0;
|
||||
tokudb_trx_data* trx = NULL;
|
||||
trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
if (trx && trx->checkpoint_lock_taken) {
|
||||
error = db_env->checkpointing_resume(db_env);
|
||||
}
|
||||
@@ -723,7 +722,7 @@ static int tokudb_commit(handlerton * hton, THD * thd, bool all) {
|
||||
TOKUDB_DBUG_ENTER("");
|
||||
DBUG_PRINT("trans", ("ending transaction %s", all ? "all" : "stmt"));
|
||||
uint32_t syncflag = THDVAR(thd, commit_sync) ? 0 : DB_TXN_NOSYNC;
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, hton);
|
||||
DB_TXN **txn = all ? &trx->all : &trx->stmt;
|
||||
DB_TXN *this_txn = *txn;
|
||||
if (this_txn) {
|
||||
@@ -752,7 +751,7 @@ static int tokudb_commit(handlerton * hton, THD * thd, bool all) {
|
||||
static int tokudb_rollback(handlerton * hton, THD * thd, bool all) {
|
||||
TOKUDB_DBUG_ENTER("");
|
||||
DBUG_PRINT("trans", ("aborting transaction %s", all ? "all" : "stmt"));
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, hton);
|
||||
DB_TXN **txn = all ? &trx->all : &trx->stmt;
|
||||
DB_TXN *this_txn = *txn;
|
||||
if (this_txn) {
|
||||
@@ -782,7 +781,7 @@ static int tokudb_xa_prepare(handlerton* hton, THD* thd, bool all) {
|
||||
TOKUDB_DBUG_ENTER("");
|
||||
int r = 0;
|
||||
DBUG_PRINT("trans", ("preparing transaction %s", all ? "all" : "stmt"));
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, hton);
|
||||
DB_TXN* txn = all ? trx->all : trx->stmt;
|
||||
if (txn) {
|
||||
if (tokudb_debug & TOKUDB_DEBUG_TXN) {
|
||||
@@ -861,7 +860,7 @@ static int tokudb_savepoint(handlerton * hton, THD * thd, void *savepoint) {
|
||||
TOKUDB_DBUG_ENTER("");
|
||||
int error;
|
||||
SP_INFO save_info = (SP_INFO)savepoint;
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, hton);
|
||||
if (thd->in_sub_stmt) {
|
||||
assert(trx->stmt);
|
||||
error = txn_begin(db_env, trx->sub_sp_level, &(save_info->txn), DB_INHERIT_ISOLATION, thd);
|
||||
@@ -892,7 +891,7 @@ static int tokudb_rollback_to_savepoint(handlerton * hton, THD * thd, void *save
|
||||
DB_TXN* parent = NULL;
|
||||
DB_TXN* txn_to_rollback = save_info->txn;
|
||||
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, hton);
|
||||
parent = txn_to_rollback->parent;
|
||||
if (!(error = txn_to_rollback->abort(txn_to_rollback))) {
|
||||
if (save_info->in_sub_stmt) {
|
||||
@@ -914,7 +913,7 @@ static int tokudb_release_savepoint(handlerton * hton, THD * thd, void *savepoin
|
||||
DB_TXN* parent = NULL;
|
||||
DB_TXN* txn_to_commit = save_info->txn;
|
||||
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, hton);
|
||||
parent = txn_to_commit->parent;
|
||||
if (!(error = txn_to_commit->commit(txn_to_commit, 0))) {
|
||||
if (save_info->in_sub_stmt) {
|
||||
@@ -974,7 +973,7 @@ static int tokudb_discover3(handlerton *hton, THD* thd, const char *db, const ch
|
||||
bool do_commit;
|
||||
|
||||
#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
if (thd_sql_command(thd) == SQLCOM_CREATE_TABLE && trx && trx->sub_sp_level) {
|
||||
do_commit = false;
|
||||
txn = trx->sub_sp_level;
|
||||
@@ -1129,15 +1128,14 @@ static bool tokudb_show_engine_status(THD * thd, stat_print_fn * stat_print) {
|
||||
static void tokudb_checkpoint_lock(THD * thd) {
|
||||
int error;
|
||||
const char *old_proc_info;
|
||||
tokudb_trx_data* trx = NULL;
|
||||
trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
if (!trx) {
|
||||
error = create_tokudb_trx_data_instance(&trx);
|
||||
//
|
||||
// can only fail due to memory allocation, so ok to assert
|
||||
//
|
||||
assert(!error);
|
||||
thd_data_set(thd, tokudb_hton->slot, trx);
|
||||
thd_set_ha_data(thd, tokudb_hton, trx);
|
||||
}
|
||||
|
||||
if (trx->checkpoint_lock_taken) {
|
||||
@@ -1161,8 +1159,7 @@ cleanup:
|
||||
static void tokudb_checkpoint_unlock(THD * thd) {
|
||||
int error;
|
||||
const char *old_proc_info;
|
||||
tokudb_trx_data* trx = NULL;
|
||||
trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
|
||||
tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton);
|
||||
if (!trx) {
|
||||
error = 0;
|
||||
goto cleanup;
|
||||
|
||||
Reference in New Issue
Block a user