From: Andrei Elkin Date: May 25 2011 7:35am Subject: bzr commit into mysql-next-mr-wl5569 branch (andrei.elkin:3280) WL#5569 WL#5754 List-Archive: http://lists.mysql.com/commits/138046 Message-Id: <201105250735.p4P7ZxWL010571@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1904226154==" --===============1904226154== 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 is 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:35:49 +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:35:49 +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:35:49 +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:35:49 +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:35:49 +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:35:49 +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:35:49 +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, --===============1904226154== 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: 6e6fd029b3896a5c5de70cfe81a71b43893d3047 # timestamp: 2011-05-25 10:35:59 +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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 fJ0OHSRBHd/8XckU4UJBbE+IdA== --===============1904226154==--