From: Andrei Elkin Date: May 25 2011 7:36am Subject: bzr commit into mysql-next-mr-wl5569 branch (andrei.elkin:3280) WL#5569 WL#5754 List-Archive: http://lists.mysql.com/commits/138047 Message-Id: <201105250736.p4P7ahBE010587@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1783902696==" --===============1783902696== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/andrei/MySQL/BZR/2a-23May/WL/mysql-next-mr-wl5569/ based on revid:andrei.elkin@stripped 3280 Andrei Elkin 2011-05-25 WL#5569 MTS WL#5754 Query event parallel applying The current patch addresses concurrent updating slave_open_temp_tables status counter. The former declaration of the underlying server variable is changed from ulong to int32. While that might affect (shrink) the actual range, there has been no specified range and now after the number of bits is the same on all platforms the range cat be set to be [0, max(int32)] @ mysql-test/suite/rpl/r/rpl_parallel_temp_query.result results got updated. @ mysql-test/suite/rpl/t/rpl_parallel_temp_query.test Adding logics to watch Slave_open_temp_tables in face of its concurrent updating. @ sql/mysqld.cc Turning slave_open_temp_tables from ulong to int32 and adding atomic locks declaration for the counter updating. @ sql/mysqld.h Extern-lizing slave_open_temp_tables_lock; @ sql/rpl_rli.cc Initializing/destorying slave_open_temp_tables lock at the same time with Workers. @ sql/rpl_slave.cc Adding info message to the error log; improving comments. @ sql/sql_base.cc Replacing slave opened temp tables counter incr/decr with a function perfoming atomic locking in case Worker runs it. modified: mysql-test/suite/rpl/r/rpl_parallel_temp_query.result mysql-test/suite/rpl/t/rpl_parallel_temp_query.test sql/mysqld.cc sql/mysqld.h sql/rpl_rli.cc sql/rpl_slave.cc sql/sql_base.cc === modified file 'mysql-test/suite/rpl/r/rpl_parallel_temp_query.result' --- a/mysql-test/suite/rpl/r/rpl_parallel_temp_query.result 2011-02-27 17:35:25 +0000 +++ b/mysql-test/suite/rpl/r/rpl_parallel_temp_query.result 2011-05-25 07:36:36 +0000 @@ -1,6 +1,7 @@ include/master-slave.inc [connection master] call mtr.add_suppression('Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table.*'); +flush status; include/stop_slave.inc set @save.mts_slave_parallel_workers= @@global.mts_slave_parallel_workers; set @@global.mts_slave_parallel_workers= 4; === modified file 'mysql-test/suite/rpl/t/rpl_parallel_temp_query.test' --- a/mysql-test/suite/rpl/t/rpl_parallel_temp_query.test 2011-02-27 17:35:25 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_temp_query.test 2011-05-25 07:36:36 +0000 @@ -14,6 +14,8 @@ let $workers= 4; connection slave; +flush status; # to nullify Slave_open_temp_tables + # restart in Parallel source include/stop_slave.inc; set @save.mts_slave_parallel_workers= @@global.mts_slave_parallel_workers; @@ -41,7 +43,8 @@ while ($n) { let $temp_rows= `select round(rand()*$temp_tables) + 1`; let $k= $temp_rows; - eval create temporary table tt_$i (a int auto_increment primary key); + # create makes a table in explicit db + eval create temporary table d$n1.tt_$i (a int auto_increment primary key); while($k) { eval insert into tt_$i values (null); @@ -74,6 +77,7 @@ while ($n) { let $temp_rows= `select round(rand()*$temp_tables) + 1`; let $k= $temp_rows; + # create makes a table in the default db eval create temporary table tt_$i (a int auto_increment primary key); while($k) { @@ -93,6 +97,14 @@ while ($n) sync_slave_with_master; +if (`select variable_value - $workers*$temp_tables as must_be_zero from information_schema.global_status where variable_name like 'Slave_open_temp_tables'`) +{ + --let $actual_temps= `select variable_value from information_schema.global_status where variable_name like 'Slave_open_temp_tables'` + --let $exected= `select $workers*$temp_tables` + --echo *** Wrong value of Slave_open_temp_tables: got $actual_temps, expected $expected *** + --die +} + # # Consistency check # === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2011-02-27 17:35:25 +0000 +++ b/sql/mysqld.cc 2011-05-25 07:36:36 +0000 @@ -459,7 +459,8 @@ ulong thread_created; ulong back_log, connect_timeout, concurrency, server_id; ulong table_cache_size, table_def_size; ulong what_to_log; -ulong slow_launch_time, slave_open_temp_tables; +ulong slow_launch_time; +int32 slave_open_temp_tables; ulong open_files_limit, max_binlog_size, max_relay_log_size; ulong slave_trans_retries; uint slave_net_timeout; @@ -482,6 +483,7 @@ ulong refresh_version; /* Increments on query_id_t global_query_id; my_atomic_rwlock_t global_query_id_lock; my_atomic_rwlock_t thread_running_lock; +my_atomic_rwlock_t slave_open_temp_tables_lock; ulong aborted_threads, aborted_connects; ulong delayed_insert_timeout, delayed_insert_limit, delayed_queue_size; ulong delayed_insert_threads, delayed_insert_writes, delayed_rows_in_use; @@ -6734,7 +6736,7 @@ SHOW_VAR status_vars[]= { {"Select_range", (char*) offsetof(STATUS_VAR, select_range_count), SHOW_LONG_STATUS}, {"Select_range_check", (char*) offsetof(STATUS_VAR, select_range_check_count), SHOW_LONG_STATUS}, {"Select_scan", (char*) offsetof(STATUS_VAR, select_scan_count), SHOW_LONG_STATUS}, - {"Slave_open_temp_tables", (char*) &slave_open_temp_tables, SHOW_LONG}, + {"Slave_open_temp_tables", (char*) &slave_open_temp_tables, SHOW_INT}, #ifdef HAVE_REPLICATION {"Slave_retried_transactions",(char*) &show_slave_retried_trans, SHOW_FUNC}, {"Slave_heartbeat_period", (char*) &show_heartbeat_period, SHOW_FUNC}, === modified file 'sql/mysqld.h' --- a/sql/mysqld.h 2011-02-27 17:35:25 +0000 +++ b/sql/mysqld.h 2011-05-25 07:36:36 +0000 @@ -168,7 +168,7 @@ extern ulong delayed_insert_timeout; extern ulong delayed_insert_limit, delayed_queue_size; extern ulong delayed_insert_threads, delayed_insert_writes; extern ulong delayed_rows_in_use,delayed_insert_errors; -extern ulong slave_open_temp_tables; +extern int32 slave_open_temp_tables; extern ulong query_cache_size, query_cache_min_res_unit; extern ulong slow_launch_threads, slow_launch_time; extern ulong table_cache_size, table_def_size; @@ -360,6 +360,7 @@ extern mysql_cond_t COND_thread_count; extern mysql_cond_t COND_manager; extern int32 thread_running; extern my_atomic_rwlock_t thread_running_lock; +extern my_atomic_rwlock_t slave_open_temp_tables_lock; extern char *opt_ssl_ca, *opt_ssl_capath, *opt_ssl_cert, *opt_ssl_cipher, *opt_ssl_key; === modified file 'sql/rpl_rli.cc' --- a/sql/rpl_rli.cc 2011-05-24 14:29:35 +0000 +++ b/sql/rpl_rli.cc 2011-05-25 07:36:36 +0000 @@ -135,6 +135,7 @@ void Relay_log_info::init_workers(ulong mysql_mutex_init(key_mutex_mts_temp_tables_lock, &mts_temp_tables_lock, MY_MUTEX_INIT_FAST); my_init_dynamic_array(&workers, sizeof(Slave_worker *), slave_parallel_workers, 4); + my_atomic_rwlock_init(&slave_open_temp_tables_lock); } /** @@ -147,6 +148,7 @@ void Relay_log_info::deinit_workers() mysql_mutex_destroy(&mts_temp_tables_lock); delete_dynamic(&workers); + my_atomic_rwlock_destroy(&slave_open_temp_tables_lock); } Relay_log_info::~Relay_log_info() === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2011-05-24 14:29:35 +0000 +++ b/sql/rpl_slave.cc 2011-05-25 07:36:36 +0000 @@ -4345,7 +4345,11 @@ err: } /* - Worker threads ends one-by-one with synch through rli->pending_jobs + Ending Worker threads. + + Workers are notified with setting KILLED status + and waited for their acknowledgment as specified by + a "magic" (out-of-operational range) value of w->jobs.len. */ void slave_stop_workers(Relay_log_info *rli) { @@ -4368,6 +4372,7 @@ void slave_stop_workers(Relay_log_info * continue; } mysql_mutex_unlock(&w->jobs_lock); + sql_print_information("Notifying Worker %lu to exit", w->id); mysql_mutex_lock(&w->info_thd->LOCK_thd_data); w->info_thd->awake(THD::KILL_QUERY); === modified file 'sql/sql_base.cc' --- a/sql/sql_base.cc 2011-05-24 14:29:35 +0000 +++ b/sql/sql_base.cc 2011-05-25 07:36:36 +0000 @@ -125,6 +125,22 @@ static void init_tdc_psi_keys(void) } #endif /* HAVE_PSI_INTERFACE */ +static int32 incr_slave_open_temp_tables(THD *thd, int inc) +{ + int32 ret; + + if (thd->system_thread == SYSTEM_THREAD_SLAVE_WORKER) + { + my_atomic_rwlock_wrlock(&slave_open_temp_tables_lock); + ret= my_atomic_add32(&slave_open_temp_tables, inc); + my_atomic_rwlock_wrlock(&slave_open_temp_tables_unlock); + ret += inc; + } + else + ret= (slave_open_temp_tables += inc); + + return ret; +} /** Total number of TABLE instances for tables in the table definition cache @@ -2133,7 +2149,7 @@ void close_temporary_table(THD *thd, TAB { /* natural invariant of temporary_tables */ DBUG_ASSERT(slave_open_temp_tables || !thd->temporary_tables); - slave_open_temp_tables--; + incr_slave_open_temp_tables(thd, -1); } close_temporary(table, free_share, delete_table); DBUG_VOID_RETURN; @@ -5858,7 +5874,7 @@ TABLE *open_table_uncached(THD *thd, con thd->temporary_tables= tmp_table; thd->temporary_tables->prev= 0; if (thd->slave_thread) - slave_open_temp_tables++; + incr_slave_open_temp_tables(thd, 1); } tmp_table->pos_in_table_list= 0; DBUG_PRINT("tmptable", ("opened table: '%s'.'%s' 0x%lx", tmp_table->s->db.str, --===============1783902696== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/andrei.elkin@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: andrei.elkin@stripped # target_branch: file:///home/andrei/MySQL/BZR/2a-23May/WL/mysql-next-\ # mr-wl5569/ # testament_sha1: 8e57ec5dc35bb99d75471c2ebf4ab6bf0385138c # timestamp: 2011-05-25 10:36:43 +0300 # source_branch: file:///home/andrei/MySQL/BZR/2a-23May/mysql-trunk/ # base_revision_id: andrei.elkin@stripped\ # 0bcifpp0qvpa5sq7 # # Begin bundle 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 r6gYbFlST1HMvNuaZk3b/F3JFOFCQYE8XMw= --===============1783902696==--