From: Andrei Elkin Date: March 29 2011 1:44pm Subject: bzr commit into mysql-trunk branch (andrei.elkin:3342) List-Archive: http://lists.mysql.com/commits/134168 Message-Id: <201103291344.p2TDiiCq029439@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1604245042==" --===============1604245042== 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/MERGE/mysql-trunk/ based on revid:gkodinov@stripped 3342 Andrei Elkin 2011-03-29 [merge] merge from local bugfixing branch to local mysql-trunk prior to push modified: mysql-test/extra/rpl_tests/rpl_get_master_version_and_clock.test mysql-test/extra/rpl_tests/rpl_stop_middle_group.test mysql-test/suite/rpl/r/rpl_corruption.result mysql-test/suite/rpl/r/rpl_init_slave_errors.result mysql-test/suite/rpl/r/rpl_stm_stop_middle_group.result mysql-test/suite/rpl/t/rpl_corruption.test mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test mysql-test/suite/rpl/t/rpl_init_slave_errors.test mysql-test/suite/rpl/t/rpl_show_slave_running.test sql/rpl_slave.cc === modified file 'mysql-test/extra/rpl_tests/rpl_get_master_version_and_clock.test' --- a/mysql-test/extra/rpl_tests/rpl_get_master_version_and_clock.test 2010-12-19 17:22:30 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_get_master_version_and_clock.test 2011-03-17 18:13:10 +0000 @@ -71,6 +71,13 @@ source include/wait_for_slave_io_error.i # now to avoid restarting IO-thread to re-enter it. # There will be a new IO thread forked out with its @@session.debug # unset. + +# +# Note, due to # Bug#11765758 - 58754 +# make sure the slave threads stand still (SQL thread in this context) +# while @@global.debug is being updated. +# + eval set @@global.debug = "-d,$dbug_sync_point"; --let $rpl_server_number= 1 === modified file 'mysql-test/extra/rpl_tests/rpl_stop_middle_group.test' --- a/mysql-test/extra/rpl_tests/rpl_stop_middle_group.test 2011-03-17 13:20:36 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_stop_middle_group.test 2011-03-29 13:44:23 +0000 @@ -47,6 +47,7 @@ source include/wait_for_slave_sql_to_sto --let $assert_cond= [SELECT COUNT(*) AS Val FROM ti, Val, 1] = 1 --source include/assert.inc +--source include/stop_slave.inc set @@global.debug="-d"; # @@ -104,12 +105,15 @@ let $slave_sql_errno= 1593; # ER_SLAVE_F --let $assert_cond= [SELECT COUNT(*) AS Val FROM ti, Val, 1] = 0 --source include/assert.inc +--source include/stop_slave.inc set @@global.debug="-d"; # # The mixed multi-table update # -stop slave; + +# above tests for Bug#11765758 - 58754 made sure slave is down + truncate table tm; source include/start_slave.inc; @@ -146,6 +150,7 @@ let $slave_sql_errno= 1593; # ER_SLAVE_F --let $assert_cond= [SELECT MAX(a) AS Val FROM ti, Val, 1] = 1 --source include/assert.inc +--source include/stop_slave.inc set @@global.debug="-d"; # === modified file 'mysql-test/suite/rpl/r/rpl_corruption.result' --- a/mysql-test/suite/rpl/r/rpl_corruption.result 2011-03-13 19:56:40 +0000 +++ b/mysql-test/suite/rpl/r/rpl_corruption.result 2011-03-17 18:13:10 +0000 @@ -12,32 +12,32 @@ SET @old_master_verify_checksum = @@mast CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(10), c VARCHAR(100)); include/stop_slave.inc # 2. Corruption in master binlog and SHOW BINLOG EVENTS -SET GLOBAL debug="d,corrupt_read_log_event_char"; +SET GLOBAL debug="+d,corrupt_read_log_event_char"; SHOW BINLOG EVENTS; ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error -SET GLOBAL debug=""; +SET GLOBAL debug="-d,corrupt_read_log_event_char"; # 3. Master read a corrupted event from binlog and send the error to slave -SET GLOBAL debug="d,corrupt_read_log_event"; +SET GLOBAL debug="+d,corrupt_read_log_event"; START SLAVE IO_THREAD; include/wait_for_slave_io_error.inc [errno=1236] -SET GLOBAL debug=""; +SET GLOBAL debug="-d,corrupt_read_log_event"; # 4. Master read a corrupted event from binlog and send it to slave SET GLOBAL master_verify_checksum=0; -SET GLOBAL debug="d,corrupt_read_log_event"; +SET GLOBAL debug="+d,corrupt_read_log_event"; START SLAVE IO_THREAD; include/wait_for_slave_io_error.inc [errno=1595,1722] -SET GLOBAL debug=""; +SET GLOBAL debug="-d,corrupt_read_log_event"; SET GLOBAL master_verify_checksum=1; # 5. Slave. Corruption in network -SET GLOBAL debug="d,corrupt_queue_event"; +SET GLOBAL debug="+d,corrupt_queue_event"; START SLAVE IO_THREAD; include/wait_for_slave_io_error.inc [errno=1595,1722] -SET GLOBAL debug=""; +SET GLOBAL debug="-d,corrupt_queue_event"; # 6. Slave. Corruption in relay log -SET GLOBAL debug="d,corrupt_read_log_event_char"; -START SLAVE; +SET GLOBAL debug="+d,corrupt_read_log_event_char"; +START SLAVE SQL_THREAD; include/wait_for_slave_sql_error.inc [errno=1593] -SET GLOBAL debug=""; +SET GLOBAL debug="-d,corrupt_read_log_event_char"; # 7. Seek diff for tables on master and slave include/start_slave.inc include/diff_tables.inc [master:t1, slave:t1] === modified file 'mysql-test/suite/rpl/r/rpl_init_slave_errors.result' --- a/mysql-test/suite/rpl/r/rpl_init_slave_errors.result 2011-02-23 09:31:37 +0000 +++ b/mysql-test/suite/rpl/r/rpl_init_slave_errors.result 2011-03-21 16:04:11 +0000 @@ -7,6 +7,7 @@ start slave; include/wait_for_slave_sql_error.inc [errno=1593] Last_SQL_Error = 'Failed during slave thread initialization' call mtr.add_suppression("Failed during slave.* thread initialization"); +# Asserted this: SHOW SLAVE STATUS should return No IO thread running status SET GLOBAL debug= ""; reset slave; SET GLOBAL init_slave= "garbage"; === modified file 'mysql-test/suite/rpl/r/rpl_stm_stop_middle_group.result' --- a/mysql-test/suite/rpl/r/rpl_stm_stop_middle_group.result 2011-03-17 13:20:36 +0000 +++ b/mysql-test/suite/rpl/r/rpl_stm_stop_middle_group.result 2011-03-29 13:44:23 +0000 @@ -18,6 +18,7 @@ include/check_slave_no_error.inc include/assert.inc [Everything that was read, was executed] include/assert.inc [There is one row in table tm] include/assert.inc [There is one row in table ti] +include/stop_slave.inc set @@global.debug="-d"; include/start_slave.inc truncate table tm; @@ -35,8 +36,8 @@ Last_SQL_Error = 'Fatal error: ... Slave include/assert.inc [Not everything that was read, was executed] include/assert.inc [There is one row in table tm] include/assert.inc [There is no row in table ti] +include/stop_slave.inc set @@global.debug="-d"; -stop slave; truncate table tm; include/start_slave.inc set @@global.debug="+d,stop_slave_middle_group"; @@ -47,6 +48,7 @@ Last_SQL_Error = 'Fatal error: ... Slave include/assert.inc [Not everything that was read, was executed] include/assert.inc [The max value for field 'a' is 2] include/assert.inc [The max value for field 'a' is 1] +include/stop_slave.inc set @@global.debug="-d"; include/rpl_reset.inc drop table tm, ti; === modified file 'mysql-test/suite/rpl/t/rpl_corruption.test' --- a/mysql-test/suite/rpl/t/rpl_corruption.test 2011-03-13 19:56:40 +0000 +++ b/mysql-test/suite/rpl/t/rpl_corruption.test 2011-03-17 18:13:10 +0000 @@ -7,6 +7,14 @@ # - in relay log ############################################################ +# +# The tests intensively utilize @@global.debug. Note, +# Bug#11765758 - 58754, +# @@global.debug is read by the slave threads through dbug-interface. +# Hence, before a client thread set @@global.debug we have to ensure that: +# (a) the slave threads are stopped, or (b) the slave threads are in +# sync and waiting. + --source include/have_debug.inc --source include/master-slave.inc @@ -56,17 +64,10 @@ while ($i) { } --enable_query_log -# -# Bug #58630 shows `+d' syntax has a side effect Andrei changed it to -# unsigned `d' version which does not affect the tests logics. -# todo: -# restore *all* following `SET GLOBAL debug' back to `+|-d' when Bug -# #58630, OBug#11765758 sorted out -# # Emulate corruption in binlog file when SHOW BINLOG EVENTS is executing --echo # 2. Corruption in master binlog and SHOW BINLOG EVENTS -SET GLOBAL debug="d,corrupt_read_log_event_char"; +SET GLOBAL debug="+d,corrupt_read_log_event_char"; --echo SHOW BINLOG EVENTS; --disable_query_log send_eval SHOW BINLOG EVENTS FROM $pos; @@ -74,50 +75,50 @@ send_eval SHOW BINLOG EVENTS FROM $pos; --error ER_ERROR_WHEN_EXECUTING_COMMAND reap; -# see above comments on `+d' syntax -SET GLOBAL debug=""; +SET GLOBAL debug="-d,corrupt_read_log_event_char"; # Emulate corruption on master with crc checking on master --echo # 3. Master read a corrupted event from binlog and send the error to slave -SET GLOBAL debug="d,corrupt_read_log_event"; +SET GLOBAL debug="+d,corrupt_read_log_event"; --connection slave START SLAVE IO_THREAD; let $slave_io_errno= 1236; --source include/wait_for_slave_io_error.inc --connection master -SET GLOBAL debug=""; +SET GLOBAL debug="-d,corrupt_read_log_event"; # Emulate corruption on master without crc checking on master --echo # 4. Master read a corrupted event from binlog and send it to slave --connection master SET GLOBAL master_verify_checksum=0; -SET GLOBAL debug="d,corrupt_read_log_event"; +SET GLOBAL debug="+d,corrupt_read_log_event"; --connection slave START SLAVE IO_THREAD; let $slave_io_errno= 1595,1722; --source include/wait_for_slave_io_error.inc --connection master -SET GLOBAL debug=""; +SET GLOBAL debug="-d,corrupt_read_log_event"; SET GLOBAL master_verify_checksum=1; # Emulate corruption in network --echo # 5. Slave. Corruption in network --connection slave -SET GLOBAL debug="d,corrupt_queue_event"; +SET GLOBAL debug="+d,corrupt_queue_event"; START SLAVE IO_THREAD; let $slave_io_errno= 1595,1722; --source include/wait_for_slave_io_error.inc -SET GLOBAL debug=""; +SET GLOBAL debug="-d,corrupt_queue_event"; # Emulate corruption in relay log --echo # 6. Slave. Corruption in relay log -SET GLOBAL debug="d,corrupt_read_log_event_char"; -START SLAVE; +SET GLOBAL debug="+d,corrupt_read_log_event_char"; + +START SLAVE SQL_THREAD; let $slave_sql_errno= 1593; --source include/wait_for_slave_sql_error.inc -SET GLOBAL debug=""; +SET GLOBAL debug="-d,corrupt_read_log_event_char"; # Start normal replication and compare same table on master # and slave === modified file 'mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test' --- a/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test 2010-12-19 17:22:30 +0000 +++ b/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test 2011-03-17 18:13:10 +0000 @@ -47,6 +47,11 @@ let $dbug_sync_point= 'dbug.before_get_M let $debug_sync_action= 'now SIGNAL signal.get_master_uuid'; source extra/rpl_tests/rpl_get_master_version_and_clock.test; +# +# Note, due to # Bug#11765758 - 58754 +# make sure the slave threads stand still (SQL thread in this context) +# while @@global.debug is being updated. +# eval set global debug= '$debug_saved'; #Test case 4: This test checks that the slave I/O thread refuses to start === modified file 'mysql-test/suite/rpl/t/rpl_init_slave_errors.test' --- a/mysql-test/suite/rpl/t/rpl_init_slave_errors.test 2011-02-23 09:31:37 +0000 +++ b/mysql-test/suite/rpl/t/rpl_init_slave_errors.test 2011-03-21 16:04:11 +0000 @@ -60,6 +60,14 @@ start slave; call mtr.add_suppression("Failed during slave.* thread initialization"); +# Bug#11765758 - 58754 +# above tests part logics make sure the IO thread is down to allow +# safe updating to @@global.debug + +--let $assert_text= SHOW SLAVE STATUS should return No IO thread running status +--let $assert_cond= "[SHOW SLAVE STATUS, Slave_IO_Running, 1]" like "No" +--source include/rpl_assert.inc + SET GLOBAL debug= ""; ###################################################################### === modified file 'mysql-test/suite/rpl/t/rpl_show_slave_running.test' --- a/mysql-test/suite/rpl/t/rpl_show_slave_running.test 2010-12-19 17:22:30 +0000 +++ b/mysql-test/suite/rpl/t/rpl_show_slave_running.test 2011-03-17 18:13:10 +0000 @@ -76,9 +76,17 @@ echo Slave_SQL_Running= $status; # cleanup -connection slave; +connection master; + +# Bug#11765758 - 58754 +# @@global.debug is read by the slave threads through dbug-interface. +# Hence, before a client thread set @@global.debug we have to ensure that: +# (a) the slave threads are stopped, or (b) the slave threads are in +# sync and waiting. +sync_slave_with_master; eval set global debug= '$debug_saved'; + SET DEBUG_SYNC= 'RESET'; --echo End of tests --source include/rpl_end.inc === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2011-03-17 17:39:31 +0000 +++ b/sql/rpl_slave.cc 2011-03-29 13:44:23 +0000 @@ -4376,7 +4376,7 @@ static int queue_event(Master_info* mi,c int debug_cor_pos = rand() % (event_len - BINLOG_CHECKSUM_LEN); debug_event_buf_c[debug_cor_pos] =~ debug_event_buf_c[debug_cor_pos]; DBUG_PRINT("info", ("Corrupt the event at queue_event: byte on position %d", debug_cor_pos)); - DBUG_SET(""); + DBUG_SET("-d,corrupt_queue_event"); } ); --===============1604245042== 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/MERGE/mysql-\ # trunk/ # testament_sha1: 73983c5353029af06c732807871cfb3a9a8f750d # timestamp: 2011-03-29 16:44:44 +0300 # source_branch: file:///home/andrei/MySQL/BZR/2a-23May/FIXES\ # /bug11765758-rpl_corruption/ # base_revision_id: gkodinov@stripped # # Begin bundle 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 --===============1604245042==--