diff options
Diffstat (limited to 'sql/rpl_gtid.cc')
-rw-r--r-- | sql/rpl_gtid.cc | 77 |
1 files changed, 41 insertions, 36 deletions
diff --git a/sql/rpl_gtid.cc b/sql/rpl_gtid.cc index 6f2c01383ab..e4514e28e64 100644 --- a/sql/rpl_gtid.cc +++ b/sql/rpl_gtid.cc @@ -249,9 +249,10 @@ rpl_slave_state::rpl_slave_state() { mysql_mutex_init(key_LOCK_slave_state, &LOCK_slave_state, MY_MUTEX_INIT_SLOW); - my_hash_init(&hash, &my_charset_bin, 32, offsetof(element, domain_id), + my_hash_init(PSI_INSTRUMENT_ME, &hash, &my_charset_bin, 32, offsetof(element, domain_id), sizeof(uint32), NULL, rpl_slave_state_free_element, HASH_UNIQUE); - my_init_dynamic_array(>id_sort_array, sizeof(rpl_gtid), 8, 8, MYF(0)); + my_init_dynamic_array(PSI_INSTRUMENT_ME, >id_sort_array, sizeof(rpl_gtid), + 8, 8, MYF(0)); } @@ -334,7 +335,8 @@ rpl_slave_state::update(uint32 domain_id, uint32 server_id, uint64 sub_id, rgi->gtid_ignore_duplicate_state= rpl_group_info::GTID_DUPLICATE_NULL; } - if (!(list_elem= (list_element *)my_malloc(sizeof(*list_elem), MYF(MY_WME)))) + if (!(list_elem= (list_element *)my_malloc(PSI_INSTRUMENT_ME, + sizeof(*list_elem), MYF(MY_WME)))) return 1; list_elem->domain_id= domain_id; list_elem->server_id= server_id; @@ -368,7 +370,7 @@ rpl_slave_state::get_element(uint32 domain_id) if (elem) return elem; - if (!(elem= (element *)my_malloc(sizeof(*elem), MYF(MY_WME)))) + if (!(elem= (element *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*elem), MYF(MY_WME)))) return NULL; elem->list= NULL; elem->domain_id= domain_id; @@ -421,12 +423,14 @@ rpl_slave_state::truncate_state_table(THD *thd) TABLE_LIST tlist; int err= 0; - tmp_disable_binlog(thd); - tlist.init_one_table(&MYSQL_SCHEMA_NAME, &rpl_gtid_slave_state_table_name, NULL, TL_WRITE); - if (!(err= open_and_lock_tables(thd, &tlist, FALSE, 0))) + tlist.init_one_table(&MYSQL_SCHEMA_NAME, &rpl_gtid_slave_state_table_name, + NULL, TL_WRITE); + tlist.mdl_request.set_type(MDL_EXCLUSIVE); + if (!(err= open_and_lock_tables(thd, &tlist, FALSE, + MYSQL_OPEN_IGNORE_LOGGING_FORMAT))) { - tdc_remove_table(thd, TDC_RT_REMOVE_UNUSED, "mysql", - rpl_gtid_slave_state_table_name.str, false); + DBUG_ASSERT(!tlist.table->file->row_logging); + tlist.table->s->tdc->flush(thd, true); err= tlist.table->file->ha_truncate(); if (err) @@ -443,8 +447,6 @@ rpl_slave_state::truncate_state_table(THD *thd) } thd->release_transactional_locks(); } - - reenable_binlog(thd); return err; } @@ -505,7 +507,7 @@ rpl_slave_state::select_gtid_pos_table(THD *thd, LEX_CSTRING *out_tablename) Ha_trx_info *ha_info; uint count = 0; - for (ha_info= thd->transaction.all.ha_list; ha_info; ha_info= ha_info->next()) + for (ha_info= thd->transaction->all.ha_list; ha_info; ha_info= ha_info->next()) { void *trx_hton= ha_info->ht(); auto table_entry= list; @@ -674,6 +676,7 @@ rpl_slave_state::record_gtid(THD *thd, const rpl_gtid *gtid, uint64 sub_id, table_opened= true; table= tlist.table; hton= table->s->db_type(); + table->file->row_logging= 0; // No binary logging if ((err= gtid_check_rpl_slave_state_table(table))) goto end; @@ -1103,8 +1106,9 @@ rpl_slave_state::iterate(int (*cb)(rpl_gtid *, void *), void *data, int res= 1; bool locked= false; - my_hash_init(>id_hash, &my_charset_bin, 32, offsetof(rpl_gtid, domain_id), - sizeof(uint32), NULL, NULL, HASH_UNIQUE); + my_hash_init(PSI_INSTRUMENT_ME, >id_hash, &my_charset_bin, 32, + offsetof(rpl_gtid, domain_id), sizeof(uint32), NULL, NULL, + HASH_UNIQUE); for (i= 0; i < num_extra; ++i) if (extra_gtids[i].server_id == global_system_variables.server_id && my_hash_insert(>id_hash, (uchar *)(&extra_gtids[i]))) @@ -1321,7 +1325,7 @@ gtid_parse_string_to_list(const char *str, size_t str_len, uint32 *out_len) } if ((!list || len >= alloc_len) && !(list= - (rpl_gtid *)my_realloc(list, + (rpl_gtid *)my_realloc(PSI_INSTRUMENT_ME, list, (alloc_len= alloc_len*2) * sizeof(rpl_gtid), MYF(MY_FREE_ON_ERROR|MY_ALLOW_ZERO_PTR)))) return NULL; @@ -1455,10 +1459,8 @@ rpl_slave_state::alloc_gtid_pos_table(LEX_CSTRING *table_name, void *hton, struct gtid_pos_table *p; char *allocated_str; - if (!my_multi_malloc(MYF(MY_WME), - &p, sizeof(*p), - &allocated_str, table_name->length+1, - NULL)) + if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME), &p, sizeof(*p), + &allocated_str, table_name->length+1, NULL)) { my_error(ER_OUTOFMEMORY, MYF(0), (int)(sizeof(*p) + table_name->length+1)); return NULL; @@ -1475,9 +1477,9 @@ rpl_slave_state::alloc_gtid_pos_table(LEX_CSTRING *table_name, void *hton, void rpl_binlog_state::init() { - my_hash_init(&hash, &my_charset_bin, 32, offsetof(element, domain_id), + my_hash_init(PSI_INSTRUMENT_ME, &hash, &my_charset_bin, 32, offsetof(element, domain_id), sizeof(uint32), NULL, my_free, HASH_UNIQUE); - my_init_dynamic_array(>id_sort_array, sizeof(rpl_gtid), 8, 8, MYF(0)); + my_init_dynamic_array(PSI_INSTRUMENT_ME, >id_sort_array, sizeof(rpl_gtid), 8, 8, MYF(0)); mysql_mutex_init(key_LOCK_binlog_state, &LOCK_binlog_state, MY_MUTEX_INIT_SLOW); initialized= 1; @@ -1674,7 +1676,8 @@ rpl_binlog_state::element::update_element(const rpl_gtid *gtid) } /* Allocate a new GTID and insert it. */ - lookup_gtid= (rpl_gtid *)my_malloc(sizeof(*lookup_gtid), MYF(MY_WME)); + lookup_gtid= (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*lookup_gtid), + MYF(MY_WME)); if (!lookup_gtid) return 1; memcpy(lookup_gtid, gtid, sizeof(*lookup_gtid)); @@ -1695,12 +1698,13 @@ rpl_binlog_state::alloc_element_nolock(const rpl_gtid *gtid) rpl_gtid *lookup_gtid; /* First time we see this domain_id; allocate a new element. */ - elem= (element *)my_malloc(sizeof(*elem), MYF(MY_WME)); - lookup_gtid= (rpl_gtid *)my_malloc(sizeof(*lookup_gtid), MYF(MY_WME)); + elem= (element *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*elem), MYF(MY_WME)); + lookup_gtid= (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*lookup_gtid), + MYF(MY_WME)); if (elem && lookup_gtid) { elem->domain_id= gtid->domain_id; - my_hash_init(&elem->hash, &my_charset_bin, 32, + my_hash_init(PSI_INSTRUMENT_ME, &elem->hash, &my_charset_bin, 32, offsetof(rpl_gtid, server_id), sizeof(uint32), NULL, my_free, HASH_UNIQUE); elem->last_gtid= lookup_gtid; @@ -1773,14 +1777,15 @@ rpl_binlog_state::bump_seq_no_if_needed(uint32 domain_id, uint64 seq_no) } /* We need to allocate a new, empty element to remember the next seq_no. */ - if (!(elem= (element *)my_malloc(sizeof(*elem), MYF(MY_WME)))) + if (!(elem= (element *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*elem), + MYF(MY_WME)))) { res= 1; goto end; } elem->domain_id= domain_id; - my_hash_init(&elem->hash, &my_charset_bin, 32, + my_hash_init(PSI_INSTRUMENT_ME, &elem->hash, &my_charset_bin, 32, offsetof(rpl_gtid, server_id), sizeof(uint32), NULL, my_free, HASH_UNIQUE); elem->last_gtid= NULL; @@ -1995,8 +2000,8 @@ rpl_binlog_state::get_most_recent_gtid_list(rpl_gtid **list, uint32 *size) out_size= 0; mysql_mutex_lock(&LOCK_binlog_state); alloc_size= hash.records; - if (!(*list= (rpl_gtid *)my_malloc(alloc_size * sizeof(rpl_gtid), - MYF(MY_WME)))) + if (!(*list= (rpl_gtid *)my_malloc(PSI_INSTRUMENT_ME, + alloc_size * sizeof(rpl_gtid), MYF(MY_WME)))) { res= 1; goto end; @@ -2111,7 +2116,7 @@ rpl_binlog_state::drop_domain(DYNAMIC_ARRAY *ids, DBUG_ENTER("rpl_binlog_state::drop_domain"); - my_init_dynamic_array2(&domain_unique, + my_init_dynamic_array2(PSI_INSTRUMENT_ME, &domain_unique, sizeof(element*), domain_unique_buffer, sizeof(domain_unique_buffer) / sizeof(element*), 4, 0); @@ -2236,10 +2241,10 @@ end: slave_connection_state::slave_connection_state() { - my_hash_init(&hash, &my_charset_bin, 32, + my_hash_init(PSI_INSTRUMENT_ME, &hash, &my_charset_bin, 32, offsetof(entry, gtid) + offsetof(rpl_gtid, domain_id), sizeof(uint32), NULL, my_free, HASH_UNIQUE); - my_init_dynamic_array(>id_sort_array, sizeof(rpl_gtid), 8, 8, MYF(0)); + my_init_dynamic_array(PSI_INSTRUMENT_ME, >id_sort_array, sizeof(rpl_gtid), 8, 8, MYF(0)); } @@ -2283,7 +2288,7 @@ slave_connection_state::load(const char *slave_request, size_t len) return 0; for (;;) { - if (!(rec= (uchar *)my_malloc(sizeof(entry), MYF(MY_WME)))) + if (!(rec= (uchar *)my_malloc(PSI_INSTRUMENT_ME, sizeof(entry), MYF(MY_WME)))) return 1; gtid= &((entry *)rec)->gtid; if (gtid_parser_helper(&p, end, gtid)) @@ -2386,7 +2391,7 @@ slave_connection_state::update(const rpl_gtid *in_gtid) return 0; } - if (!(e= (entry *)my_malloc(sizeof(*e), MYF(MY_WME)))) + if (!(e= (entry *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*e), MYF(MY_WME)))) return 1; e->gtid= *in_gtid; e->flags= 0; @@ -2863,7 +2868,7 @@ free_hash_element(void *p) void gtid_waiting::init() { - my_hash_init(&hash, &my_charset_bin, 32, + my_hash_init(PSI_INSTRUMENT_ME, &hash, &my_charset_bin, 32, offsetof(hash_element, domain_id), sizeof(uint32), NULL, free_hash_element, HASH_UNIQUE); mysql_mutex_init(key_LOCK_gtid_waiting, &LOCK_gtid_waiting, 0); @@ -2900,7 +2905,7 @@ gtid_waiting::get_entry(uint32 domain_id) if ((e= (hash_element *)my_hash_search(&hash, (const uchar *)&domain_id, 0))) return e; - if (!(e= (hash_element *)my_malloc(sizeof(*e), MYF(MY_WME)))) + if (!(e= (hash_element *)my_malloc(PSI_INSTRUMENT_ME, sizeof(*e), MYF(MY_WME)))) return NULL; if (init_queue(&e->queue, 8, offsetof(queue_element, wait_seq_no), 0, |