Commit 0dfbb05c authored by Nikita Malyavin's avatar Nikita Malyavin Committed by Sergei Golubchik

MDEV-16329 [1/5] add THD::binlog_get_cache_mngr

parent f5e50137
...@@ -1763,12 +1763,11 @@ binlog_trans_log_truncate(THD *thd, my_off_t pos) ...@@ -1763,12 +1763,11 @@ binlog_trans_log_truncate(THD *thd, my_off_t pos)
DBUG_ENTER("binlog_trans_log_truncate"); DBUG_ENTER("binlog_trans_log_truncate");
DBUG_PRINT("enter", ("pos: %lu", (ulong) pos)); DBUG_PRINT("enter", ("pos: %lu", (ulong) pos));
DBUG_ASSERT(thd_get_ha_data(thd, binlog_hton) != NULL); DBUG_ASSERT(thd->binlog_get_cache_mngr() != NULL);
/* Only true if binlog_trans_log_savepos() wasn't called before */ /* Only true if binlog_trans_log_savepos() wasn't called before */
DBUG_ASSERT(pos != ~(my_off_t) 0); DBUG_ASSERT(pos != ~(my_off_t) 0);
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
cache_mngr->trx_cache.restore_savepoint(pos); cache_mngr->trx_cache.restore_savepoint(pos);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
...@@ -1808,8 +1807,7 @@ int binlog_init(void *p) ...@@ -1808,8 +1807,7 @@ int binlog_init(void *p)
static int binlog_close_connection(handlerton *hton, THD *thd) static int binlog_close_connection(handlerton *hton, THD *thd)
{ {
DBUG_ENTER("binlog_close_connection"); DBUG_ENTER("binlog_close_connection");
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
#ifdef WITH_WSREP #ifdef WITH_WSREP
if (WSREP(thd) && cache_mngr && !cache_mngr->trx_cache.empty()) { if (WSREP(thd) && cache_mngr && !cache_mngr->trx_cache.empty()) {
IO_CACHE* cache= cache_mngr->get_binlog_cache_log(true); IO_CACHE* cache= cache_mngr->get_binlog_cache_log(true);
...@@ -2265,8 +2263,7 @@ int binlog_commit(THD *thd, bool all, bool ro_1pc) ...@@ -2265,8 +2263,7 @@ int binlog_commit(THD *thd, bool all, bool ro_1pc)
PSI_stage_info org_stage; PSI_stage_info org_stage;
DBUG_ENTER("binlog_commit"); DBUG_ENTER("binlog_commit");
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
if (!cache_mngr) if (!cache_mngr)
{ {
...@@ -2368,8 +2365,7 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all) ...@@ -2368,8 +2365,7 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all)
DBUG_ENTER("binlog_rollback"); DBUG_ENTER("binlog_rollback");
int error= 0; int error= 0;
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
if (!cache_mngr) if (!cache_mngr)
{ {
...@@ -2463,7 +2459,7 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all) ...@@ -2463,7 +2459,7 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all)
void binlog_reset_cache(THD *thd) void binlog_reset_cache(THD *thd)
{ {
binlog_cache_mngr *const cache_mngr= opt_bin_log ? binlog_cache_mngr *const cache_mngr= opt_bin_log ?
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton) : 0; thd->binlog_get_cache_mngr() : 0;
DBUG_ENTER("binlog_reset_cache"); DBUG_ENTER("binlog_reset_cache");
if (cache_mngr) if (cache_mngr)
{ {
...@@ -5791,8 +5787,7 @@ bool MYSQL_BIN_LOG::is_query_in_union(THD *thd, query_id_t query_id_param) ...@@ -5791,8 +5787,7 @@ bool MYSQL_BIN_LOG::is_query_in_union(THD *thd, query_id_t query_id_param)
bool bool
trans_has_updated_trans_table(const THD* thd) trans_has_updated_trans_table(const THD* thd)
{ {
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
return (cache_mngr ? !cache_mngr->trx_cache.empty() : 0); return (cache_mngr ? !cache_mngr->trx_cache.empty() : 0);
} }
...@@ -5841,8 +5836,7 @@ bool use_trans_cache(const THD* thd, bool is_transactional) ...@@ -5841,8 +5836,7 @@ bool use_trans_cache(const THD* thd, bool is_transactional)
{ {
if (is_transactional) if (is_transactional)
return 1; return 1;
binlog_cache_mngr *const cache_mngr= auto *const cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
return ((thd->is_current_stmt_binlog_format_row() || return ((thd->is_current_stmt_binlog_format_row() ||
thd->variables.binlog_direct_non_trans_update) ? 0 : thd->variables.binlog_direct_non_trans_update) ? 0 :
...@@ -6008,7 +6002,7 @@ void THD::set_binlog_start_alter_seq_no(uint64 s_no) ...@@ -6008,7 +6002,7 @@ void THD::set_binlog_start_alter_seq_no(uint64 s_no)
void void
THD::binlog_start_trans_and_stmt() THD::binlog_start_trans_and_stmt()
{ {
binlog_cache_mngr *cache_mngr= (binlog_cache_mngr*) thd_get_ha_data(this, binlog_hton); binlog_cache_mngr *cache_mngr= binlog_get_cache_mngr();
DBUG_ENTER("binlog_start_trans_and_stmt"); DBUG_ENTER("binlog_start_trans_and_stmt");
DBUG_PRINT("enter", ("cache_mngr: %p cache_mngr->trx_cache.get_prev_position(): %lu", DBUG_PRINT("enter", ("cache_mngr: %p cache_mngr->trx_cache.get_prev_position(): %lu",
cache_mngr, cache_mngr,
...@@ -6095,8 +6089,7 @@ THD::binlog_start_trans_and_stmt() ...@@ -6095,8 +6089,7 @@ THD::binlog_start_trans_and_stmt()
} }
void THD::binlog_set_stmt_begin() { void THD::binlog_set_stmt_begin() {
binlog_cache_mngr *cache_mngr= binlog_cache_mngr *cache_mngr= binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(this, binlog_hton);
/* /*
The call to binlog_trans_log_savepos() might create the cache_mngr The call to binlog_trans_log_savepos() might create the cache_mngr
...@@ -6106,7 +6099,7 @@ void THD::binlog_set_stmt_begin() { ...@@ -6106,7 +6099,7 @@ void THD::binlog_set_stmt_begin() {
*/ */
my_off_t pos= 0; my_off_t pos= 0;
binlog_trans_log_savepos(this, &pos); binlog_trans_log_savepos(this, &pos);
cache_mngr= (binlog_cache_mngr*) thd_get_ha_data(this, binlog_hton); cache_mngr= binlog_get_cache_mngr();
cache_mngr->trx_cache.set_prev_position(pos); cache_mngr->trx_cache.set_prev_position(pos);
} }
...@@ -6265,8 +6258,7 @@ bool THD::binlog_write_table_map(TABLE *table, bool with_annotate) ...@@ -6265,8 +6258,7 @@ bool THD::binlog_write_table_map(TABLE *table, bool with_annotate)
Table_map_log_event Table_map_log_event
the_event(this, table, table->s->table_map_id, is_transactional); the_event(this, table, table->s->table_map_id, is_transactional);
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(this, binlog_hton);
binlog_cache_data *cache_data= (cache_mngr-> binlog_cache_data *cache_data= (cache_mngr->
get_binlog_cache_data(is_transactional)); get_binlog_cache_data(is_transactional));
IO_CACHE *file= &cache_data->cache_log; IO_CACHE *file= &cache_data->cache_log;
...@@ -6305,6 +6297,12 @@ bool THD::binlog_write_table_map(TABLE *table, bool with_annotate) ...@@ -6305,6 +6297,12 @@ bool THD::binlog_write_table_map(TABLE *table, bool with_annotate)
} }
binlog_cache_mngr *THD::binlog_get_cache_mngr() const
{
return (binlog_cache_mngr*) thd_get_ha_data(this, binlog_hton);
}
/** /**
This function retrieves a pending row event from a cache which is This function retrieves a pending row event from a cache which is
specified through the parameter @c is_transactional. Respectively, when it specified through the parameter @c is_transactional. Respectively, when it
...@@ -6320,8 +6318,7 @@ Rows_log_event* ...@@ -6320,8 +6318,7 @@ Rows_log_event*
THD::binlog_get_pending_rows_event(bool is_transactional) const THD::binlog_get_pending_rows_event(bool is_transactional) const
{ {
Rows_log_event* rows= NULL; Rows_log_event* rows= NULL;
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(this, binlog_hton);
/* /*
This is less than ideal, but here's the story: If there is no cache_mngr, This is less than ideal, but here's the story: If there is no cache_mngr,
...@@ -6376,8 +6373,7 @@ MYSQL_BIN_LOG::remove_pending_rows_event(THD *thd, bool is_transactional) ...@@ -6376,8 +6373,7 @@ MYSQL_BIN_LOG::remove_pending_rows_event(THD *thd, bool is_transactional)
{ {
DBUG_ENTER("MYSQL_BIN_LOG::remove_pending_rows_event"); DBUG_ENTER("MYSQL_BIN_LOG::remove_pending_rows_event");
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
DBUG_ASSERT(cache_mngr); DBUG_ASSERT(cache_mngr);
...@@ -6412,8 +6408,7 @@ MYSQL_BIN_LOG::flush_and_set_pending_rows_event(THD *thd, ...@@ -6412,8 +6408,7 @@ MYSQL_BIN_LOG::flush_and_set_pending_rows_event(THD *thd,
DBUG_ASSERT(WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open()); DBUG_ASSERT(WSREP_EMULATE_BINLOG(thd) || mysql_bin_log.is_open());
DBUG_PRINT("enter", ("event: %p", event)); DBUG_PRINT("enter", ("event: %p", event));
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
DBUG_ASSERT(cache_mngr); DBUG_ASSERT(cache_mngr);
...@@ -11817,7 +11812,7 @@ mysql_bin_log_commit_pos(THD *thd, ulonglong *out_pos, const char **out_file) ...@@ -11817,7 +11812,7 @@ mysql_bin_log_commit_pos(THD *thd, ulonglong *out_pos, const char **out_file)
{ {
binlog_cache_mngr *cache_mngr; binlog_cache_mngr *cache_mngr;
if (opt_bin_log && if (opt_bin_log &&
(cache_mngr= (binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton))) (cache_mngr= thd->binlog_get_cache_mngr()))
{ {
*out_file= cache_mngr->last_commit_pos_file; *out_file= cache_mngr->last_commit_pos_file;
*out_pos= (ulonglong)(cache_mngr->last_commit_pos_offset); *out_pos= (ulonglong)(cache_mngr->last_commit_pos_offset);
...@@ -11930,7 +11925,7 @@ TC_LOG_BINLOG::set_status_variables(THD *thd) ...@@ -11930,7 +11925,7 @@ TC_LOG_BINLOG::set_status_variables(THD *thd)
binlog_cache_mngr *cache_mngr; binlog_cache_mngr *cache_mngr;
if (thd && opt_bin_log) if (thd && opt_bin_log)
cache_mngr= (binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton); cache_mngr= thd->binlog_get_cache_mngr();
else else
cache_mngr= 0; cache_mngr= 0;
...@@ -12055,8 +12050,7 @@ maria_declare_plugin_end; ...@@ -12055,8 +12050,7 @@ maria_declare_plugin_end;
IO_CACHE *wsrep_get_cache(THD * thd, bool is_transactional) IO_CACHE *wsrep_get_cache(THD * thd, bool is_transactional)
{ {
DBUG_ASSERT(binlog_hton->slot != HA_SLOT_UNDEF); DBUG_ASSERT(binlog_hton->slot != HA_SLOT_UNDEF);
binlog_cache_mngr *cache_mngr = (binlog_cache_mngr*) binlog_cache_mngr *cache_mngr = thd->binlog_get_cache_mngr();
thd_get_ha_data(thd, binlog_hton);
if (cache_mngr) if (cache_mngr)
return cache_mngr->get_binlog_cache_log(is_transactional); return cache_mngr->get_binlog_cache_log(is_transactional);
...@@ -12072,8 +12066,7 @@ void wsrep_thd_binlog_trx_reset(THD * thd) ...@@ -12072,8 +12066,7 @@ void wsrep_thd_binlog_trx_reset(THD * thd)
/* /*
todo: fix autocommit select to not call the caller todo: fix autocommit select to not call the caller
*/ */
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
if (cache_mngr) if (cache_mngr)
{ {
cache_mngr->reset(false, true); cache_mngr->reset(false, true);
...@@ -12091,8 +12084,7 @@ void wsrep_thd_binlog_stmt_rollback(THD * thd) ...@@ -12091,8 +12084,7 @@ void wsrep_thd_binlog_stmt_rollback(THD * thd)
{ {
DBUG_ENTER("wsrep_thd_binlog_stmt_rollback"); DBUG_ENTER("wsrep_thd_binlog_stmt_rollback");
WSREP_DEBUG("wsrep_thd_binlog_stmt_rollback"); WSREP_DEBUG("wsrep_thd_binlog_stmt_rollback");
binlog_cache_mngr *const cache_mngr= binlog_cache_mngr *const cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
if (cache_mngr) if (cache_mngr)
{ {
thd->binlog_remove_pending_rows_event(TRUE, TRUE); thd->binlog_remove_pending_rows_event(TRUE, TRUE);
...@@ -12117,8 +12109,7 @@ void wsrep_register_binlog_handler(THD *thd, bool trx) ...@@ -12117,8 +12109,7 @@ void wsrep_register_binlog_handler(THD *thd, bool trx)
back a statement or a transaction. However, notifications do not happen back a statement or a transaction. However, notifications do not happen
if the binary log is set as read/write. if the binary log is set as read/write.
*/ */
binlog_cache_mngr *cache_mngr= binlog_cache_mngr *cache_mngr= thd->binlog_get_cache_mngr();
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
/* cache_mngr may be missing e.g. in mtr test ev51914.test */ /* cache_mngr may be missing e.g. in mtr test ev51914.test */
if (cache_mngr) if (cache_mngr)
{ {
......
...@@ -2964,6 +2964,7 @@ class THD: public THD_count, /* this must be first */ ...@@ -2964,6 +2964,7 @@ class THD: public THD_count, /* this must be first */
/* /*
Member functions to handle pending event for row-level logging. Member functions to handle pending event for row-level logging.
*/ */
binlog_cache_mngr *binlog_get_cache_mngr() const;
template <class RowsEventT> Rows_log_event* template <class RowsEventT> Rows_log_event*
binlog_prepare_pending_rows_event(TABLE* table, uint32 serv_id, binlog_prepare_pending_rows_event(TABLE* table, uint32 serv_id,
size_t needed, size_t needed,
......
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