From: Andrei Elkin Date: March 21 2011 11:08am Subject: bzr commit into mysql-trunk branch (andrei.elkin:3772) List-Archive: http://lists.mysql.com/commits/133451 Message-Id: <201103211108.p2LB8SYe003590@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1692144961==" --===============1692144961== 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/FIXES/bug11765758-rpl_corruption/ based on revid:serge.kozlov@stripped 3772 Andrei Elkin 2011-03-21 [merge] merging from one bug fixing branch to another 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-02-23 20:01:27 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_stop_middle_group.test 2011-03-17 18:13:10 +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,6 +105,7 @@ 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"; # @@ -146,6 +148,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-17 18:13:10 +0000 @@ -7,6 +7,9 @@ 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"); +include/stop_slave_io.inc +Warnings: +Note 1255 Slave already has been stopped 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-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_stm_stop_middle_group.result 2011-03-17 18:13:10 +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,11 @@ Last_SQL_Error = 'Fatal error: ... The s 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; +Warnings: +Note 1255 Slave already has been stopped truncate table tm; include/start_slave.inc set @@global.debug="+d,stop_slave_middle_group"; @@ -47,6 +51,7 @@ Last_SQL_Error = 'Fatal error: ... The s 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-17 18:13:10 +0000 @@ -60,6 +60,9 @@ start slave; call mtr.add_suppression("Failed during slave.* thread initialization"); +# Bug#11765758 - 58754 +# make sure the IO thread is down to allow safe updating to @@global.debug +--source include/stop_slave_io.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-14 13:55:44 +0000 +++ b/sql/rpl_slave.cc 2011-03-17 18:13:10 +0000 @@ -4372,7 +4372,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"); } ); --===============1692144961== 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/FIXES\ # /bug11765758-rpl_corruption/ # testament_sha1: b440d5fb5026db6247e97efc2d756cfff295d664 # timestamp: 2011-03-21 13:08:28 +0200 # source_branch: file:///home/andrei/MySQL/BZR/2a-23May/mysql-trunk/ # base_revision_id: serge.kozlov@stripped\ # yz622trfrtij75jz # # Begin bundle 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 Gf8XckU4UJB1iiZL --===============1692144961==--