From: Andrei Elkin Date: March 27 2011 9:53am Subject: bzr commit into mysql-trunk branch (andrei.elkin:3311) Bug#11748510 List-Archive: http://lists.mysql.com/commits/133955 X-Bug: 11748510 Message-Id: <201103270953.p2R9rDf8031356@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0359576707==" --===============0359576707== 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/bug11748510_36524-deadlock_overdram/ based on revid:magne.mahre@stripped 3311 Andrei Elkin 2011-03-27 bug#11748510 incident of deadlock on slave is overdramatized In cases of temporary errors in replication event execution (deadlock, timeout) the error log gained an overreacting error message whereas just a warning would be fine. Fixed with checking of the temporary status of the error inside Slave_reporting_capability::report() to demote the error to the warning level if needed. The warning gets converted into the error whenever number of successive attempts to re-apply the event(s) gets equal to @@global.slave_trans_retries. The patch also changes the slave service error gathering and reporting as the following. Slave_reporting_capability::report() populates thd->main_da the standard placeholder for the errors and calls the stderr writers for errors and lesser severity levels as specified by @@global_system_variables.log_warnings. That said report() mimics my_error(). Slave_reporting_capability::display() is introduced to display errors through show-slave-status interfaces. The latter mimics send_error(). Overall the changes a. print out all errors that SQL thread met during a failing execution, b. make Last_SQL_error more informative to list all the errors. Some number of test result files got affected and in some cases the new results revealed issues in the old versions. This patch contains a limited part dealing with the tests. See the following commit that completes the fixes. @ mysql-test/extra/rpl_tests/rpl_deadlock.test regression test is added to prove a temporary failure warning is escalated. @ mysql-test/extra/rpl_tests/rpl_loaddata.test More sensible Unknown error rather than one with code 0 is reported by the server. @ mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test More sensible Unknown error rather than one with code 0 is reported by the server. @ mysql-test/suite/rpl/r/rpl_binlog_errors.result results get updated. @ mysql-test/suite/rpl/r/rpl_checksum.result results get updated. @ mysql-test/suite/rpl/r/rpl_deadlock_innodb.result results get updated. @ mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result results get updated. @ mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result results get updated. @ mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result results get updated. @ mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result results get updated. @ mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result results get updated. @ mysql-test/suite/rpl/r/rpl_idempotency.result results get updated. @ mysql-test/suite/rpl/r/rpl_init_slave_errors.result results get updated. @ mysql-test/suite/rpl/r/rpl_known_bugs_detection.result results get updated. @ mysql-test/suite/rpl/r/rpl_loaddata.result results get updated. @ mysql-test/suite/rpl/r/rpl_packet.result results get updated. @ mysql-test/suite/rpl/r/rpl_row_conflicts.result results get updated. @ mysql-test/suite/rpl/r/rpl_stm_EE_err2.result results get updated. @ mysql-test/suite/rpl/r/rpl_stm_conflicts.result results get updated. @ mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result More sensible Unknown error rather than one with code 0 is reported by the server. @ mysql-test/suite/rpl/t/rpl_idempotency.test the final print-out of SQL thread diag area revealed messages that are benign and needs suppression. @ sql/log_event.cc treating rli->report() as an error reporting similar to my_error(). Gathering errors in the diag area should be completed with displaying via rli->display() each time a slave thread breaks the applying loop. Relocating clear_all_errors() definition into rpl_slave.cc. @ sql/rpl_reporting.cc report() method is turned to be a wrapper of functions dealing with the diag area like my_error() and ones with the error log. One of its use case to register an error and print it out the error log. A new display() method copies the gathered errors the area of the Show Slave Status when a slave thread is about to exit. A special caution (not perfect, todo is written) is done to not bring in unreferrable objects to the embedded library. @ sql/rpl_reporting.h a new display() method added as well as comments for report(). @ sql/rpl_slave.cc exporting has_temporary_error() to be used in rpl_reporting.cc; docking definition of clear_all_errors() to use in both modules; run-out-of-tries case is finished with raising on the fatal error flag; finalizing the error branch of events execution with display() to make gathered error be saved in show-slave-status area; deploying display() at the end of io-thread and sql-thread. The farewell print-out of the gathered errors at error branch of handle_slave_sql() is removed as redundant. @ sql/rpl_slave.h exporting functions shared with slave.cc, rpl_reporting.cc, log_event.cc. modified: mysql-test/extra/rpl_tests/rpl_deadlock.test mysql-test/extra/rpl_tests/rpl_loaddata.test mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test mysql-test/suite/rpl/r/rpl_binlog_errors.result mysql-test/suite/rpl/r/rpl_checksum.result mysql-test/suite/rpl/r/rpl_deadlock_innodb.result mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result mysql-test/suite/rpl/r/rpl_idempotency.result mysql-test/suite/rpl/r/rpl_init_slave_errors.result mysql-test/suite/rpl/r/rpl_known_bugs_detection.result mysql-test/suite/rpl/r/rpl_loaddata.result mysql-test/suite/rpl/r/rpl_packet.result mysql-test/suite/rpl/r/rpl_row_conflicts.result mysql-test/suite/rpl/r/rpl_stm_EE_err2.result mysql-test/suite/rpl/r/rpl_stm_conflicts.result mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result mysql-test/suite/rpl/t/rpl_idempotency.test sql/log_event.cc sql/rpl_reporting.cc sql/rpl_reporting.h sql/rpl_slave.cc sql/rpl_slave.h === modified file 'mysql-test/extra/rpl_tests/rpl_deadlock.test' --- a/mysql-test/extra/rpl_tests/rpl_deadlock.test 2010-12-19 17:07:28 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_deadlock.test 2011-03-27 09:53:06 +0000 @@ -10,6 +10,10 @@ --source include/master-slave.inc +connection slave; +call mtr.add_suppression("Could not execute Write_rows event on table test.t1,handler error HA_ERR_LOCK_WAIT_TIMEOUT"); +connection master; + # 0) Prepare tables and data --echo *** Prepare tables and data *** @@ -123,6 +127,58 @@ SELECT * FROM t3; source include/check_slave_is_running.inc; --echo +# +# bug#11748510/36524 incident of deadlock on slave is overdramatized +# +# Observe that the slave stopped when the number of transation retries +# exceeds @@global.slave_transaction_retries +# +connection master; + +--echo *** Test the deadlock warning to be escalated into the error *** + +delete from t1; +delete from t2; +delete from t3; + +sync_slave_with_master; + +# make sure slave's unilateral row gone as well +delete from t1; +delete from t2; +delete from t3; + +# the first attempt to run a deadlock scenario of p 1) leads to the error +set @save.slave_transaction_retries= @@global.slave_transaction_retries; +set @@global.slave_transaction_retries= 0; +source include/stop_slave.inc; + +connection master; + +BEGIN; +INSERT INTO t1 VALUES (1); +# We make a long transaction here +INSERT INTO t2 VALUES (2), (2), (2), (2), (2), (2), (2), (2), (2), (2); +INSERT INTO t3 VALUES (3); +COMMIT; + +connection slave; +BEGIN; +SELECT count(*) as zero FROM t1 FOR UPDATE; + +start slave; + +--echo *** Now the slave must be stopped due to deadlock *** + +# slow slave environment can report ER_LOCK_TIMEOUT +let $slave_sql_errno= 1213, 1205; # ER_LOCK_DEADLOCK or TIMEOUT +let $show_slave_sql_error= 0; +source include/wait_for_slave_sql_error.inc; + +rollback; + +set @@global.slave_transaction_retries= @save.slave_transaction_retries; +source include/start_slave.inc; # Clean up --echo *** Clean up *** connection master; === modified file 'mysql-test/extra/rpl_tests/rpl_loaddata.test' --- a/mysql-test/extra/rpl_tests/rpl_loaddata.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_loaddata.test 2011-03-27 09:53:06 +0000 @@ -70,7 +70,7 @@ save_master_pos; connection slave; # 1062 = ER_DUP_ENTRY call mtr.add_suppression("Slave SQL.*Error .Duplicate entry .10. for key .b.. on query.* Error_code: 1062"); -call mtr.add_suppression("Slave SQL.*Query caused different errors on master and slave.*Error on master:.*error code=1062.*Error on slave:.*Error_code: 0"); +call mtr.add_suppression("Slave SQL.*Query caused different errors on master and slave.*Error on master:.*error code=1062.*Error on slave:.*Error_code: 1105"); --let $slave_sql_errno= 1062 --source include/wait_for_slave_sql_error_and_skip.inc @@ -157,7 +157,7 @@ if (`SELECT @@global.binlog_format != 'R { # Query causes error on master but not on slave. This causes the slave to # stop with error code 0 (which is wrong: see BUG#57287) - --let $slave_sql_errno= 0 + --let $slave_sql_errno= 1105 --source include/wait_for_slave_sql_error.inc drop table t1, t2; } === modified file 'mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test' --- a/mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test 2011-03-27 09:53:06 +0000 @@ -24,9 +24,9 @@ insert into t1 values(1),(2); drop table t1; connection slave; -call mtr.add_suppression("Slave SQL.*Query caused different errors on master and slave.*Error on master:.* error code=1062.*Error on slave:.* Error_code: 0"); +call mtr.add_suppression("Slave SQL.*Query caused different errors on master and slave.*Error on master:.* error code=1062.*Error on slave:.* Error_code: 1105"); --echo (expect different error codes on master and slave) ---let $slave_sql_errno= 0 +--let $slave_sql_errno= 1105 --let $show_slave_sql_error= 1 --source include/wait_for_slave_sql_error.inc drop table t1; === modified file 'mysql-test/suite/rpl/r/rpl_binlog_errors.result' --- a/mysql-test/suite/rpl/r/rpl_binlog_errors.result 2010-12-22 09:17:12 +0000 +++ b/mysql-test/suite/rpl/r/rpl_binlog_errors.result 2011-03-27 09:53:06 +0000 @@ -234,7 +234,8 @@ include/stop_slave.inc SET GLOBAL debug="+d,error_unique_log_filename"; START SLAVE io_thread; include/wait_for_slave_io_error.inc [errno=1595] -Last_IO_Error = 'Relay log write failure: could not queue event from master' +Last_IO_Error = 'Can't generate a unique log-filename slave-relay-bin.(1-999) +, Error_code: 1098; Relay log write failure: could not queue event from master, Error_code: 1595; Relay log write failure: could not queue event from master' SET GLOBAL debug="-d,error_unique_log_filename"; SET GLOBAL debug=@old_debug; include/rpl_restart_server.inc [server_number=2] @@ -244,7 +245,7 @@ include/stop_slave.inc SET GLOBAL debug="+d,fault_injection_new_file_rotate_event"; START SLAVE io_thread; include/wait_for_slave_io_error.inc [errno=1595] -Last_IO_Error = 'Relay log write failure: could not queue event from master' +Last_IO_Error = 'Can't open file: 'slave-relay-bin' (errno: 2), Error_code: 1026; Relay log write failure: could not queue event from master, Error_code: 1595; Relay log write failure: could not queue event from master' SET GLOBAL debug="-d,fault_injection_new_file_rotate_event"; SET GLOBAL debug=@old_debug; include/rpl_restart_server.inc [server_number=2] @@ -254,7 +255,7 @@ include/stop_slave.inc SET GLOBAL debug="+d,fault_injection_registering_index"; START SLAVE io_thread; include/wait_for_slave_io_error.inc [errno=1595] -Last_IO_Error = 'Relay log write failure: could not queue event from master' +Last_IO_Error = 'Can't open file: './slave-relay-bin.000006' (errno: 1), Error_code: 1016; Relay log write failure: could not queue event from master, Error_code: 1595; Relay log write failure: could not queue event from master' SET GLOBAL debug="-d,fault_injection_registering_index"; SET GLOBAL debug=@old_debug; include/rpl_restart_server.inc [server_number=2] @@ -264,7 +265,7 @@ include/stop_slave.inc SET GLOBAL debug="+d,fault_injection_openning_index"; START SLAVE io_thread; include/wait_for_slave_io_error.inc [errno=1595] -Last_IO_Error = 'Relay log write failure: could not queue event from master' +Last_IO_Error = 'Can't open file: './slave-relay-bin.index' (errno: 1), Error_code: 1016; Relay log write failure: could not queue event from master, Error_code: 1595; Relay log write failure: could not queue event from master' SET GLOBAL debug="-d,fault_injection_openning_index"; SET GLOBAL debug=@old_debug; include/rpl_restart_server.inc [server_number=2] === modified file 'mysql-test/suite/rpl/r/rpl_checksum.result' --- a/mysql-test/suite/rpl/r/rpl_checksum.result 2011-03-08 19:12:46 +0000 +++ b/mysql-test/suite/rpl/r/rpl_checksum.result 2011-03-27 09:53:06 +0000 @@ -81,7 +81,7 @@ create table t2 (a int); set @@global.debug='d,simulate_checksum_test_failure'; start slave io_thread; include/wait_for_slave_io_error.inc [errno=1595] -Last_IO_Error = 'Relay log write failure: could not queue event from master' +Last_IO_Error = 'Replication event checksum verification failed while reading from network., Error_code: 1722; Relay log write failure: could not queue event from master' set @@global.debug=''; start slave io_thread; include/wait_for_slave_param.inc [Read_Master_Log_Pos] === modified file 'mysql-test/suite/rpl/r/rpl_deadlock_innodb.result' --- a/mysql-test/suite/rpl/r/rpl_deadlock_innodb.result 2010-12-19 17:22:30 +0000 +++ b/mysql-test/suite/rpl/r/rpl_deadlock_innodb.result 2011-03-27 09:53:06 +0000 @@ -1,5 +1,6 @@ include/master-slave.inc [connection master] +call mtr.add_suppression("Could not execute Write_rows event on table test.t1,handler error HA_ERR_LOCK_WAIT_TIMEOUT"); *** Prepare tables and data *** CREATE TABLE t1 (a INT NOT NULL, KEY(a)) ENGINE=innodb; CREATE TABLE t2 (a INT) ENGINE=innodb; @@ -103,6 +104,31 @@ a 3 include/check_slave_is_running.inc +*** Test the deadlock warning to be escalated into the error *** +delete from t1; +delete from t2; +delete from t3; +delete from t1; +delete from t2; +delete from t3; +set @save.slave_transaction_retries= @@global.slave_transaction_retries; +set @@global.slave_transaction_retries= 0; +include/stop_slave.inc +BEGIN; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (2), (2), (2), (2), (2), (2), (2), (2), (2), (2); +INSERT INTO t3 VALUES (3); +COMMIT; +BEGIN; +SELECT count(*) as zero FROM t1 FOR UPDATE; +zero +0 +start slave; +*** Now the slave must be stopped due to deadlock *** +include/wait_for_slave_sql_error.inc [errno=1213, 1205] +rollback; +set @@global.slave_transaction_retries= @save.slave_transaction_retries; +include/start_slave.inc *** Clean up *** DROP TABLE t1,t2,t3; SET global max_relay_log_size= @my_max_relay_log_size; === modified file 'mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result' --- a/mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result 2011-03-27 09:53:06 +0000 @@ -613,7 +613,7 @@ c1 c3 hex(c4) c5 c6 * Bug30415 * ************ include/wait_for_slave_sql_error.inc [errno=1091] -Last_SQL_Error = 'Error 'Can't DROP 'c7'; check that column/key exists' on query. Default database: 'test'. Query: 'ALTER TABLE t14 DROP COLUMN c7'' +Last_SQL_Error = 'Can't DROP 'c7'; check that column/key exists, Error_code: 1091; Error 'Can't DROP 'c7'; check that column/key exists' on query. Default database: 'test'. Query: 'ALTER TABLE t14 DROP COLUMN c7'' STOP SLAVE; RESET SLAVE; @@ -662,7 +662,7 @@ c1 hex(c4) c5 c6 c7 c2 ******************************************** include/wait_for_slave_sql_error.inc [errno=1054] -Last_SQL_Error = 'Error 'Unknown column 'c7' in 't15'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7'' +Last_SQL_Error = 'Unknown column 'c7' in 't15', Error_code: 1054; Error 'Unknown column 'c7' in 't15'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7'' STOP SLAVE; RESET SLAVE; @@ -711,7 +711,7 @@ c1 hex(c4) c5 c6 c7 ***************** include/wait_for_slave_sql_error.inc [errno=1072] -Last_SQL_Error = 'Error 'Key column 'c6' doesn't exist in table' on query. Default database: 'test'. Query: 'CREATE INDEX part_of_c6 ON t16 (c6)'' +Last_SQL_Error = 'Key column 'c6' doesn't exist in table, Error_code: 1072; Error 'Key column 'c6' doesn't exist in table' on query. Default database: 'test'. Query: 'CREATE INDEX part_of_c6 ON t16 (c6)'' STOP SLAVE; RESET SLAVE; === modified file 'mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result' --- a/mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result 2011-03-27 09:53:06 +0000 @@ -613,7 +613,7 @@ c1 c3 hex(c4) c5 c6 * Bug30415 * ************ include/wait_for_slave_sql_error.inc [errno=1091] -Last_SQL_Error = 'Error 'Can't DROP 'c7'; check that column/key exists' on query. Default database: 'test'. Query: 'ALTER TABLE t14 DROP COLUMN c7'' +Last_SQL_Error = 'Can't DROP 'c7'; check that column/key exists, Error_code: 1091; Error 'Can't DROP 'c7'; check that column/key exists' on query. Default database: 'test'. Query: 'ALTER TABLE t14 DROP COLUMN c7'' STOP SLAVE; RESET SLAVE; @@ -662,7 +662,7 @@ c1 hex(c4) c5 c6 c7 c2 ******************************************** include/wait_for_slave_sql_error.inc [errno=1054] -Last_SQL_Error = 'Error 'Unknown column 'c7' in 't15'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7'' +Last_SQL_Error = 'Unknown column 'c7' in 't15', Error_code: 1054; Error 'Unknown column 'c7' in 't15'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7'' STOP SLAVE; RESET SLAVE; @@ -711,7 +711,7 @@ c1 hex(c4) c5 c6 c7 ***************** include/wait_for_slave_sql_error.inc [errno=1072] -Last_SQL_Error = 'Error 'Key column 'c6' doesn't exist in table' on query. Default database: 'test'. Query: 'CREATE INDEX part_of_c6 ON t16 (c6)'' +Last_SQL_Error = 'Key column 'c6' doesn't exist in table, Error_code: 1072; Error 'Key column 'c6' doesn't exist in table' on query. Default database: 'test'. Query: 'CREATE INDEX part_of_c6 ON t16 (c6)'' STOP SLAVE; RESET SLAVE; === modified file 'mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result' --- a/mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result 2011-03-27 09:53:06 +0000 @@ -488,7 +488,7 @@ ALTER TABLE t15 ADD COLUMN c6 INT AFTER *** Expect slave to fail with Error 1060 *** ******************************************** include/wait_for_slave_sql_error_and_skip.inc [errno=1060] -Last_SQL_Error = 'Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'' +Last_SQL_Error = 'Duplicate column name 'c6', Error_code: 1060; Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'' *** Try to insert in master **** INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2); SELECT * FROM t15 ORDER BY c1; === modified file 'mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result' --- a/mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result 2011-03-27 09:53:06 +0000 @@ -488,7 +488,7 @@ ALTER TABLE t15 ADD COLUMN c6 INT AFTER *** Expect slave to fail with Error 1060 *** ******************************************** include/wait_for_slave_sql_error_and_skip.inc [errno=1060] -Last_SQL_Error = 'Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'' +Last_SQL_Error = 'Duplicate column name 'c6', Error_code: 1060; Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'' *** Try to insert in master **** INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2); SELECT * FROM t15 ORDER BY c1; === modified file 'mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result' --- a/mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result 2011-02-23 09:31:37 +0000 +++ b/mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result 2011-03-27 09:53:06 +0000 @@ -45,52 +45,52 @@ UPDATE t7 LEFT JOIN (t8, t4, t1) ON (t7. call mtr.add_suppression("Slave SQL.*Error .Table .test.t[47]. doesn.t exist. on query.* Error_code: 1146"); UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0 where t1.id=1'' +Last_SQL_Error = 'Table 'test.t4' doesn't exist, Error_code: 1146; Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0 where t1.id=1'' UPDATE t1 LEFT JOIN (t4, t7) ON (t1.id=t4.id and t1.id=t7.id) SET a=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t7) ON (t1.id=t4.id and t1.id=t7.id) SET a=0 where t1.id=1'' +Last_SQL_Error = 'Table 'test.t4' doesn't exist, Error_code: 1146; Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t7) ON (t1.id=t4.id and t1.id=t7.id) SET a=0 where t1.id=1'' UPDATE t1 LEFT JOIN (t2, t4, t7) ON (t1.id=t2.id and t1.id=t4.id and t1.id=t7.id) SET a=0, b=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t2, t4, t7) ON (t1.id=t2.id and t1.id=t4.id and t1.id=t7.id) SET a=0, b=0 where t1.id=1'' +Last_SQL_Error = 'Table 'test.t4' doesn't exist, Error_code: 1146; Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t2, t4, t7) ON (t1.id=t2.id and t1.id=t4.id and t1.id=t7.id) SET a=0, b=0 where t1.id=1'' UPDATE t1 LEFT JOIN (t2, t3, t7) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t7.id) SET a=0, b=0, c=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t2, t3, t7) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t7.id) SET a=0, b=0, c=0 where t1.id=1'' +Last_SQL_Error = 'Table 'test.t7' doesn't exist, Error_code: 1146; Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t2, t3, t7) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t7.id) SET a=0, b=0, c=0 where t1.id=1'' UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET a=0, g=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET a=0, g=0 where t1.id=1'' +Last_SQL_Error = 'Table 'test.t7' doesn't exist, Error_code: 1146; Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET a=0, g=0 where t1.id=1'' UPDATE t7 LEFT JOIN t1 ON (t1.id=t7.id) SET a=0, g=0 where t7.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN t1 ON (t1.id=t7.id) SET a=0, g=0 where t7.id=1'' +Last_SQL_Error = 'Table 'test.t7' doesn't exist, Error_code: 1146; Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN t1 ON (t1.id=t7.id) SET a=0, g=0 where t7.id=1'' UPDATE t1 LEFT JOIN (t4, t5, t7) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t7.id) SET a=0, g=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t5, t7) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t7.id) SET a=0, g=0 where t1.id=1'' +Last_SQL_Error = 'Table 'test.t4' doesn't exist, Error_code: 1146; Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t5, t7) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t7.id) SET a=0, g=0 where t1.id=1'' UPDATE t1 LEFT JOIN (t4, t7, t8) ON (t1.id=t4.id and t1.id=t7.id and t1.id=t8.id) SET a=0, g=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t7, t8) ON (t1.id=t4.id and t1.id=t7.id and t1.id=t8.id) SET a=0, g=0 where t1.id=1'' +Last_SQL_Error = 'Table 'test.t4' doesn't exist, Error_code: 1146; Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t7, t8) ON (t1.id=t4.id and t1.id=t7.id and t1.id=t8.id) SET a=0, g=0 where t1.id=1'' UPDATE t1 LEFT JOIN (t7, t8, t9) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t9.id) SET a=0, g=0, h=0, i=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t7, t8, t9) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t9.id) SET a=0, g=0, h=0, i=0 where t1.id=1'' +Last_SQL_Error = 'Table 'test.t7' doesn't exist, Error_code: 1146; Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t7, t8, t9) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t9.id) SET a=0, g=0, h=0, i=0 where t1.id=1'' UPDATE t7 LEFT JOIN (t1, t2, t3) ON (t7.id=t1.id and t7.id=t2.id and t7.id=t3.id) SET g=0, a=0, b=0, c=0 where t7.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t1, t2, t3) ON (t7.id=t1.id and t7.id=t2.id and t7.id=t3.id) SET g=0, a=0, b=0, c=0 where t7.id=1'' +Last_SQL_Error = 'Table 'test.t7' doesn't exist, Error_code: 1146; Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t1, t2, t3) ON (t7.id=t1.id and t7.id=t2.id and t7.id=t3.id) SET g=0, a=0, b=0, c=0 where t7.id=1'' UPDATE t7 LEFT JOIN (t4, t5, t3) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t3.id) SET g=0, c=0 where t7.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t4, t5, t3) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t3.id) SET g=0, c=0 where t7.id=1'' +Last_SQL_Error = 'Table 'test.t7' doesn't exist, Error_code: 1146; Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t4, t5, t3) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t3.id) SET g=0, c=0 where t7.id=1'' UPDATE t7 LEFT JOIN (t8, t9, t3) ON (t7.id=t8.id and t7.id=t9.id and t7.id=t3.id) SET g=0, h=0, i=0, c=0 where t7.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t8, t9, t3) ON (t7.id=t8.id and t7.id=t9.id and t7.id=t3.id) SET g=0, h=0, i=0, c=0 where t7.id=1'' +Last_SQL_Error = 'Table 'test.t7' doesn't exist, Error_code: 1146; Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t8, t9, t3) ON (t7.id=t8.id and t7.id=t9.id and t7.id=t3.id) SET g=0, h=0, i=0, c=0 where t7.id=1'' UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0, d=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0, d=0 where t1.id=1'' +Last_SQL_Error = 'Table 'test.t4' doesn't exist, Error_code: 1146; Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0, d=0 where t1.id=1'' UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET a=0, d=0, e=0, f=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET a=0, d=0, e=0, f=0 where t1.id=1'' +Last_SQL_Error = 'Table 'test.t4' doesn't exist, Error_code: 1146; Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET a=0, d=0, e=0, f=0 where t1.id=1'' UPDATE t4 LEFT JOIN (t1, t5, t6) ON (t4.id=t1.id and t4.id=t5.id and t4.id=t6.id) SET a=0, e=0, f=0 where t4.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t4 LEFT JOIN (t1, t5, t6) ON (t4.id=t1.id and t4.id=t5.id and t4.id=t6.id) SET a=0, e=0, f=0 where t4.id=1'' +Last_SQL_Error = 'Table 'test.t4' doesn't exist, Error_code: 1146; Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t4 LEFT JOIN (t1, t5, t6) ON (t4.id=t1.id and t4.id=t5.id and t4.id=t6.id) SET a=0, e=0, f=0 where t4.id=1'' UPDATE t7 LEFT JOIN (t1, t4, t2) ON (t7.id=t1.id and t7.id=t4.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] -Last_SQL_Error = 'Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t1, t4, t2) ON (t7.id=t1.id and t7.id=t4.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1'' +Last_SQL_Error = 'Table 'test.t7' doesn't exist, Error_code: 1146; Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t1, t4, t2) ON (t7.id=t1.id and t7.id=t4.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1'' [on slave] show tables like 't%'; Tables_in_test (t%) === modified file 'mysql-test/suite/rpl/r/rpl_idempotency.result' --- a/mysql-test/suite/rpl/r/rpl_idempotency.result 2011-02-23 11:54:58 +0000 +++ b/mysql-test/suite/rpl/r/rpl_idempotency.result 2011-03-27 09:53:06 +0000 @@ -4,6 +4,8 @@ call mtr.add_suppression("Slave SQL.*Can call mtr.add_suppression("Slave SQL.*Cannot delete or update a parent row: a foreign key constraint fails .* Error_code: 1451"); call mtr.add_suppression("Slave SQL.*Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452"); call mtr.add_suppression("Slave SQL.*Could not execute Write_rows event on table test.* Duplicate entry .1. for key .PRIMARY.* Error_code: 1062"); +call mtr.add_suppression("Slave SQL: Could not execute Delete_rows event"); +call mtr.add_suppression("Slave SQL: Could not execute Update_rows event"); CREATE TABLE t1 (a INT PRIMARY KEY); CREATE TABLE t2 (a INT); INSERT INTO t1 VALUES (-1),(-2),(-3); === 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-27 09:53:06 +0000 @@ -12,7 +12,7 @@ reset slave; SET GLOBAL init_slave= "garbage"; start slave; include/wait_for_slave_sql_error.inc [errno=1064] -Last_SQL_Error = 'Slave SQL thread aborted. Can't execute init_slave query' +Last_SQL_Error = 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'garbage' at line 1, Error_code: 1064; Slave SQL thread aborted. Can't execute init_slave query' SET GLOBAL init_slave= ""; include/stop_slave_io.inc RESET SLAVE; === modified file 'mysql-test/suite/rpl/r/rpl_known_bugs_detection.result' --- a/mysql-test/suite/rpl/r/rpl_known_bugs_detection.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_known_bugs_detection.result 2011-03-27 09:53:06 +0000 @@ -9,7 +9,7 @@ a b 2 2 call mtr.add_suppression("Slave SQL.*suffer.*http:..bugs.mysql.com.bug.php.id=24432"); include/wait_for_slave_sql_error.inc [errno=1105] -Last_SQL_Error = 'Error 'master may suffer from http://bugs.mysql.com/bug.php?id=24432 so slave stops; check error log on slave for more info' on query. Default database: 'test'. Query: 'INSERT INTO t1(b) VALUES(1),(1),(2) ON DUPLICATE KEY UPDATE t1.b=10'' +Last_SQL_Error = 'master may suffer from http://bugs.mysql.com/bug.php?id=24432 so slave stops; check error log on slave for more info, Error_code: 1105; According to the master's version ('5.0.34'), it is probable that master suffers from this bug: http://bugs.mysql.com/bug.php?id=24432 and thus replicating the current binary log event may make the slave's data become different from the master's data. To take no risk, slave refuses to replicate this event and stops. We recommend that all updates be stopped on the master and slave, that the data of both be manually synchronized, that master's binary logs be deleted, that master be upgraded to a version at l, Error_code: 1105; Error 'master may suffer from http://bugs.mysql.com/bug.php?id=24432 so slave stops; check error log on slave for more info' on query. Default database: 'test'. Query: 'INSERT INTO t1(b) VALUES(1),(1),(2) ON DUPLICATE KEY UPDATE t1.b=10'' SELECT * FROM t1; a b stop slave; @@ -57,7 +57,7 @@ id field_1 field_2 field_3 5 5 e 5e 6 6 f 6f include/wait_for_slave_sql_error.inc [errno=1105] -Last_SQL_Error = 'Error 'master may suffer from http://bugs.mysql.com/bug.php?id=24432 so slave stops; check error log on slave for more info' on query. Default database: 'test'. Query: 'INSERT INTO t1 (field_1, field_2, field_3) +Last_SQL_Error = 'master may suffer from http://bugs.mysql.com/bug.php?id=24432 so slave stops; check error log on slave for more info, Error_code: 1105; According to the master's version ('5.0.34'), it is probable that master suffers from this bug: http://bugs.mysql.com/bug.php?id=24432 and thus replicating the current binary log event may make the slave's data become different from the master's data. To take no risk, slave refuses to replicate this event and stops. We recommend that all updates be stopped on the master and slave, that the data of both be manually synchronized, that master's binary logs be deleted, that master be upgraded to a version at l, Error_code: 1105; Error 'master may suffer from http://bugs.mysql.com/bug.php?id=24432 so slave stops; check error log on slave for more info' on query. Default database: 'test'. Query: 'INSERT INTO t1 (field_1, field_2, field_3) SELECT t2.field_a, t2.field_b, t2.field_c FROM t2 ON DUPLICATE KEY UPDATE === modified file 'mysql-test/suite/rpl/r/rpl_loaddata.result' --- a/mysql-test/suite/rpl/r/rpl_loaddata.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_loaddata.result 2011-03-27 09:53:06 +0000 @@ -28,7 +28,7 @@ create table t1(a int, b int, unique(b)) insert into t1 values(1,10); load data infile '../../std_data/rpl_loaddata.dat' into table t1; call mtr.add_suppression("Slave SQL.*Error .Duplicate entry .10. for key .b.. on query.* Error_code: 1062"); -call mtr.add_suppression("Slave SQL.*Query caused different errors on master and slave.*Error on master:.*error code=1062.*Error on slave:.*Error_code: 0"); +call mtr.add_suppression("Slave SQL.*Query caused different errors on master and slave.*Error on master:.*error code=1062.*Error on slave:.*Error_code: 1105"); include/wait_for_slave_sql_error_and_skip.inc [errno=1062] include/check_slave_no_error.inc set sql_log_bin=0; @@ -72,7 +72,7 @@ load data infile '../../std_data/rpl_loa terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by '\n##\n' starting by '>' ignore 1 lines; ERROR 23000: Duplicate entry '2003-03-22' for key 'day' -include/wait_for_slave_sql_error.inc [errno=0] +include/wait_for_slave_sql_error.inc [errno=1105] drop table t1, t2; drop table t1, t2; CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=INNODB; === modified file 'mysql-test/suite/rpl/r/rpl_packet.result' --- a/mysql-test/suite/rpl/r/rpl_packet.result 2010-12-19 17:22:30 +0000 +++ b/mysql-test/suite/rpl/r/rpl_packet.result 2011-03-27 09:53:06 +0000 @@ -30,7 +30,7 @@ include/start_slave.inc CREATE TABLE `t1` (`f1` LONGTEXT) ENGINE=MyISAM; INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048'); include/wait_for_slave_io_error.inc [errno=1153] -Last_IO_Error = 'Got a packet bigger than 'max_allowed_packet' bytes' +Last_IO_Error = 'Got a packet bigger than 'max_allowed_packet' bytes, Error_code: 1153; Got a packet bigger than 'max_allowed_packet' bytes' include/stop_slave_sql.inc include/rpl_reset.inc DROP TABLE t1; @@ -65,7 +65,7 @@ CREATE TABLE t1 (a TEXT) ENGINE=MyISAM; INSERT INTO t1 VALUES (REPEAT('a', 2048)); # 1153 = ER_NET_PACKET_TOO_LARGE include/wait_for_slave_io_error.inc [errno=1153] -Last_IO_Error = 'Got a packet bigger than 'max_allowed_packet' bytes' +Last_IO_Error = 'Got a packet bigger than 'max_allowed_packet' bytes, Error_code: 1153; Got a packet bigger than 'max_allowed_packet' bytes' # Record Read_Master_Log_Pos for the Table_map_log_event SET @@global.max_allowed_packet=1048576; WARNING: The range of printed events ends with a row event or a table map event that does not have the STMT_END_F flag set. This might be because the last statement was not fully written to the log, or because you are using a --stop-position or --stop-datetime that refers to an event in the middle of a statement. The event(s) from the partial statement have not been written to output. === modified file 'mysql-test/suite/rpl/r/rpl_row_conflicts.result' --- a/mysql-test/suite/rpl/r/rpl_row_conflicts.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_conflicts.result 2011-03-27 09:53:06 +0000 @@ -22,7 +22,7 @@ a ---- Wait until slave stops with an error ---- include/wait_for_slave_sql_error.inc [errno=1062] Last_SQL_Error (expected "duplicate key" error) -Could not execute Write_rows event on table test.t1; Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log master-bin.000001, end_log_pos END_LOG_POS +Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; Could not execute Write_rows event on table test.t1; Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log master-bin.000001, end_log_pos END_LOG_POS call mtr.add_suppression("Slave SQL.*Duplicate entry .1. for key .PRIMARY.* Error_code: 1062"); SELECT * FROM t1; a @@ -53,7 +53,7 @@ a call mtr.add_suppression("Slave SQL.*Can.t find record in .t1., Error_code: 1032"); include/wait_for_slave_sql_error.inc [errno=1032] Last_SQL_Error (expected "duplicate key" error) -Could not execute Delete_rows event on table test.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-bin.000001, end_log_pos END_LOG_POS +Can't find record in 't1', Error_code: 1032; Could not execute Delete_rows event on table test.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-bin.000001, end_log_pos END_LOG_POS SELECT * FROM t1; a ---- Resolve the conflict on the slave and restart SQL thread ---- === modified file 'mysql-test/suite/rpl/r/rpl_stm_EE_err2.result' --- a/mysql-test/suite/rpl/r/rpl_stm_EE_err2.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_stm_EE_err2.result 2011-03-27 09:53:06 +0000 @@ -7,9 +7,9 @@ set sql_log_bin=1; insert into t1 values(1),(2); ERROR 23000: Duplicate entry '2' for key 'a' drop table t1; -call mtr.add_suppression("Slave SQL.*Query caused different errors on master and slave.*Error on master:.* error code=1062.*Error on slave:.* Error_code: 0"); +call mtr.add_suppression("Slave SQL.*Query caused different errors on master and slave.*Error on master:.* error code=1062.*Error on slave:.* Error_code: 1105"); (expect different error codes on master and slave) -include/wait_for_slave_sql_error.inc [errno=0] +include/wait_for_slave_sql_error.inc [errno=1105] Last_SQL_Error = 'Query caused different errors on master and slave. Error on master: message (format)='Duplicate entry '%-.192s' for key %d' error code=1062 ; Error on slave: actual message='no error', error code=0. Default database: 'test'. Query: 'insert into t1 values(1),(2)'' drop table t1; include/stop_slave.inc === modified file 'mysql-test/suite/rpl/r/rpl_stm_conflicts.result' --- a/mysql-test/suite/rpl/r/rpl_stm_conflicts.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_stm_conflicts.result 2011-03-27 09:53:06 +0000 @@ -17,7 +17,7 @@ a ---- Wait until slave stops with an error ---- include/wait_for_slave_sql_error.inc [errno=1062] Last_SQL_Error (expected "duplicate key" error) -Error 'Duplicate entry '1' for key 'PRIMARY'' on query. Default database: 'test'. Query: 'INSERT INTO t1 VALUES (1)' +Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; Error 'Duplicate entry '1' for key 'PRIMARY'' on query. Default database: 'test'. Query: 'INSERT INTO t1 VALUES (1)' call mtr.add_suppression("Slave SQL.*Duplicate entry .1. for key .PRIMARY.* Error_code: 1062"); SELECT * FROM t1; a === modified file 'mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result' --- a/mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result 2011-03-27 09:53:06 +0000 @@ -44,7 +44,7 @@ create table t1(a int, b int, unique(b)) insert into t1 values(1,10); load data CONCURRENT infile '../../std_data/rpl_loaddata.dat' into table t1; call mtr.add_suppression("Slave SQL.*Error .Duplicate entry .10. for key .b.. on query.* Error_code: 1062"); -call mtr.add_suppression("Slave SQL.*Query caused different errors on master and slave.*Error on master:.*error code=1062.*Error on slave:.*Error_code: 0"); +call mtr.add_suppression("Slave SQL.*Query caused different errors on master and slave.*Error on master:.*error code=1062.*Error on slave:.*Error_code: 1105"); include/wait_for_slave_sql_error_and_skip.inc [errno=1062] include/check_slave_no_error.inc set sql_log_bin=0; @@ -88,7 +88,7 @@ load data CONCURRENT infile '../../std_d terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by '\n##\n' starting by '>' ignore 1 lines; ERROR 23000: Duplicate entry '2003-03-22' for key 'day' -include/wait_for_slave_sql_error.inc [errno=0] +include/wait_for_slave_sql_error.inc [errno=1105] drop table t1, t2; drop table t1, t2; CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=INNODB; === modified file 'mysql-test/suite/rpl/t/rpl_idempotency.test' --- a/mysql-test/suite/rpl/t/rpl_idempotency.test 2011-02-23 11:54:58 +0000 +++ b/mysql-test/suite/rpl/t/rpl_idempotency.test 2011-03-27 09:53:06 +0000 @@ -8,6 +8,8 @@ call mtr.add_suppression("Slave SQL.*Can call mtr.add_suppression("Slave SQL.*Cannot delete or update a parent row: a foreign key constraint fails .* Error_code: 1451"); call mtr.add_suppression("Slave SQL.*Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452"); call mtr.add_suppression("Slave SQL.*Could not execute Write_rows event on table test.* Duplicate entry .1. for key .PRIMARY.* Error_code: 1062"); +call mtr.add_suppression("Slave SQL: Could not execute Delete_rows event"); +call mtr.add_suppression("Slave SQL: Could not execute Update_rows event"); connection master; CREATE TABLE t1 (a INT PRIMARY KEY); === modified file 'sql/log_event.cc' --- a/sql/log_event.cc 2011-03-14 17:09:16 +0000 +++ b/sql/log_event.cc 2011-03-27 09:53:06 +0000 @@ -293,13 +293,6 @@ static void pretty_print_str(IO_CACHE* c #if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) -static void clear_all_errors(THD *thd, Relay_log_info *rli) -{ - thd->is_slave_error = 0; - thd->clear_error(); - rli->clear_error(); -} - inline int idempotent_error_code(int err_code) { int ret= 0; @@ -3700,7 +3693,7 @@ compare_errors: !ignored_error_code(actual_error) && !ignored_error_code(expected_error)) { - rli->report(ERROR_LEVEL, 0, + rli->report(ERROR_LEVEL, ER_UNKNOWN_ERROR, "\ Query caused different errors on master and slave. \ Error on master: message (format)='%s' error code=%d ; \ === modified file 'sql/rpl_reporting.cc' --- a/sql/rpl_reporting.cc 2010-08-05 17:45:25 +0000 +++ b/sql/rpl_reporting.cc 2011-03-27 09:53:06 +0000 @@ -17,6 +17,7 @@ #include "rpl_reporting.h" #include "log.h" // sql_print_error, sql_print_warning, // sql_print_information +#include "rpl_slave.h" Slave_reporting_capability::Slave_reporting_capability(char const *thread_name) : m_thread_name(thread_name) @@ -25,54 +26,159 @@ Slave_reporting_capability::Slave_report &err_lock, MY_MUTEX_INIT_FAST); } +/** + The method treats a supplied message depending on the level: + + - an error is queued in the diagnostic area + to be recorded eventually in Show Slave status area and + in the error log. + - a warning or an info level are optinally (log_warnings) + stored into the error log + + @param level severity of the message. + @param err_code the user level error code + @param msg the format string of the message, + can be followed with more arguments + providing the data for the format string + + @note Queueing in the da is protected by @err_lock mutex + to collabote with a concurrent reader from the da. +*/ void Slave_reporting_capability::report(loglevel level, int err_code, const char *msg, ...) const { +/* + todo: sort out embedded building dependencies to avoid this module + to be compiled altogether. +*/ +#if !defined(EMBEDDED_LIBRARY) + THD *thd= current_thd; void (*report_function)(const char *, ...); - char buff[MAX_SLAVE_ERRMSG]; + char buff[sizeof(m_last_error.message)]; char *pbuff= buff; - uint pbuffsize= sizeof(buff); va_list args; + + if (level == ERROR_LEVEL && has_temporary_error(thd, err_code)) + level= WARNING_LEVEL; + va_start(args, msg); + my_vsnprintf(pbuff, sizeof(buff), msg, args); + va_end(args); mysql_mutex_lock(&err_lock); switch (level) { case ERROR_LEVEL: /* - It's an error, it must be reported in Last_error and Last_errno in SHOW - SLAVE STATUS. + It's an error, it goes in a slave thread's main_da. */ - pbuff= m_last_error.message; - pbuffsize= sizeof(m_last_error.message); - m_last_error.number = err_code; + m_last_error.number= err_code; m_last_error.update_timestamp(); + if (err_code > 0) + { + if (thd->stmt_da->is_set()) + thd->stmt_da->can_overwrite_status= TRUE; + my_printf_error(err_code, "%s", MYF(0), pbuff); + if (thd->stmt_da->can_overwrite_status) + thd->stmt_da->can_overwrite_status= FALSE; + } report_function= sql_print_error; break; case WARNING_LEVEL: - report_function= sql_print_warning; + report_function= global_system_variables.log_warnings? + sql_print_warning : NULL; break; case INFORMATION_LEVEL: - report_function= sql_print_information; + report_function= global_system_variables.log_warnings? + sql_print_information : NULL; break; default: DBUG_ASSERT(0); // should not come here return; // don't crash production builds, just do nothing } - my_vsnprintf(pbuff, pbuffsize, msg, args); - + /* If the msg string ends with '.', do not add a ',' it would be ugly */ + if (report_function) + report_function("Slave %s: %s%s Error_code: %d", + m_thread_name, pbuff, + (pbuff[0] && *(strend(pbuff) - 1) == '.') ? "" : ",", + err_code); mysql_mutex_unlock(&err_lock); +#endif +} + +/** + compose Last_Error to be shown by SHOW SLAVE STATUS + + @param err_code The summary error code to display. If zero + the last reported default will be set to Last*Errno + + @param msg The summary message's format string optinally followed + by arguments. It can be NULL. + + @note The method tries gathering all queued *error-level* messages + into the limited-size buffer and may not compose the whole + list. In that case the rest can be found anyway in the error log. + The Last_Error's code corresponds to the last queued error if + the supplied @c err_code is zero. + + The gathering procedure is protected by @c err_lock + to provide collaboration with a concurrent reader such as + show slave status. +*/ +void +Slave_reporting_capability::display(int err_code, const char *msg, ...) const +{ +#if !defined(EMBEDDED_LIBRARY) + THD *thd= current_thd; + uint len, size= sizeof(m_last_error.message); + char *slider, *buff= m_last_error.message, *buff_end= buff + size; + List_iterator_fast it(thd->warning_info->warn_list()); + MYSQL_ERROR *err; + uint32 err_number; + const char err_code_fmt[]= ", Error_code: %d; "; + va_list args; + + va_start(args, msg); + len= msg == NULL? 0 : my_vsnprintf(buff, size, msg, args); va_end(args); - /* If the msg string ends with '.', do not add a ',' it would be ugly */ - report_function("Slave %s: %s%s Error_code: %d", - m_thread_name, pbuff, - (pbuff[0] && *(strend(pbuff)-1) == '.') ? "" : ",", - err_code); + if (thd->is_error()) + { + mysql_mutex_lock(&err_lock); + /* + In case of multiple errors the error codes are printed along with msgs ... + */ + for (err= it++, err_number= 0, slider= buff + len; err; + slider += len, err= it++) + { + if (err->get_level() != MYSQL_ERROR::WARN_LEVEL_ERROR) + continue; + if (err_number != 0) + { + len= my_snprintf(slider, buff_end - slider, err_code_fmt, err_number); + slider += len; + } + err_number= err->get_sql_errno(); // Last*Errno is of the error level + if (slider < buff_end) + len= my_snprintf(slider, buff_end - slider,"%s", err->get_message_text()); + } + m_last_error.number= err_code == 0? err_number : err_code; + /* + ... except for the last error if its code is equal to @c err_code + the supplied summary's. + */ + if ((err_number != 0 && err_number != m_last_error.number) && + slider < buff_end) + my_snprintf(slider, buff_end - slider, err_code_fmt, err_number); + + mysql_mutex_unlock(&err_lock); + } +#endif } + Slave_reporting_capability::~Slave_reporting_capability() { mysql_mutex_destroy(&err_lock); === modified file 'sql/rpl_reporting.h' --- a/sql/rpl_reporting.h 2010-08-05 17:45:25 +0000 +++ b/sql/rpl_reporting.h 2011-03-27 09:53:06 +0000 @@ -43,8 +43,7 @@ public: Slave_reporting_capability(char const *thread_name); /** - Writes a message and, if it's an error message, to Last_Error - (which will be displayed by SHOW SLAVE STATUS). + Writes a message into diag area and/or/either the error log @param level The severity level @param err_code The error code @@ -56,6 +55,14 @@ public: ATTRIBUTE_FORMAT(printf, 4, 5); /** + compose Last_Error to be shown by SHOW SLAVE STATUS + @param err_code The summary code to display instead of the last reported + @param msg A summary message to set afront of the reported errors + */ + void display(int err_code, const char *msg, ...) const + ATTRIBUTE_FORMAT(printf, 3, 4); + + /** Clear errors. They will not show up under SHOW SLAVE STATUS. */ === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2011-03-17 13:20:36 +0000 +++ b/sql/rpl_slave.cc 2011-03-27 09:53:06 +0000 @@ -2514,15 +2514,23 @@ static ulong read_event(MYSQL* mysql, Ma DBUG_RETURN(len - 1); } -/* +/** Check if the current error is of temporary nature of not. Some errors are temporary in nature, such as ER_LOCK_DEADLOCK and ER_LOCK_WAIT_TIMEOUT. Ndb also signals that the error is temporary by pushing a warning with the error code ER_GET_TEMPORARY_ERRMSG, if the originating error is temporary. + + @param thd a THD instance, typically of the slave SQL thread's. + @error_arg the error code for assessment. + defaults to zero which makes the function check the top + of the reported errors stack. + + @return 1 as the positive and 0 as the negative verdict */ -static int has_temporary_error(THD *thd) +int has_temporary_error(THD *thd, uint error_arg) { + uint error; DBUG_ENTER("has_temporary_error"); DBUG_EXECUTE_IF("all_errors_are_temporary_errors", @@ -2537,16 +2545,17 @@ static int has_temporary_error(THD *thd) error or not. This is currently the case for Incident_log_event, which sets no message. Return FALSE. */ - if (!thd->is_error()) + if (thd->is_fatal_error || !thd->is_error()) DBUG_RETURN(0); + error= (error_arg == 0)? thd->stmt_da->sql_errno() : error_arg; + /* Temporary error codes: currently, InnoDB deadlock detected by InnoDB or lock wait timeout (innodb_lock_wait_timeout exceeded */ - if (thd->stmt_da->sql_errno() == ER_LOCK_DEADLOCK || - thd->stmt_da->sql_errno() == ER_LOCK_WAIT_TIMEOUT) + if (error == ER_LOCK_DEADLOCK || error == ER_LOCK_WAIT_TIMEOUT) DBUG_RETURN(1); #ifdef HAVE_NDB_BINLOG @@ -2637,6 +2646,13 @@ static int sql_delay_event(Log_event *ev DBUG_RETURN(0); } +void clear_all_errors(THD *thd, Relay_log_info *rli) +{ + thd->is_slave_error = 0; + thd->clear_error(); + rli->clear_error(); +} + /** Applies the given event and advances the relay log position. @@ -3007,10 +3023,13 @@ static int exec_relay_log_event(THD* thd } } else + { sql_print_error("Slave SQL thread retried transaction %lu time(s) " "in vain, giving up. Consider raising the value of " "the slave_transaction_retries variable.", slave_trans_retries); + thd->is_fatal_error= 1; // to force has_temporary_error() return 0 + } } else if ((exec_res && !temp_err) || (opt_using_transactions && @@ -3049,6 +3068,12 @@ static bool check_io_slave_killed(THD *t { if (info && global_system_variables.log_warnings) sql_print_information("%s", info); + /* + don't expose internal errors such as ER_NET_READ_ERROR 1158. + The thread is gracefully stopped. + */ + if (mi->abort_slave) + thd->clear_error(); return TRUE; } return FALSE; @@ -3240,14 +3265,15 @@ pthread_handler_t handle_slave_io(void * connected: - DBUG_EXECUTE_IF("dbug.before_get_running_status_yes", - { - const char act[]= - "now " - "wait_for signal.io_thread_let_running"; - DBUG_ASSERT(opt_debug_sync_timeout > 0); - DBUG_ASSERT(!debug_sync_set_action(thd, - STRING_WITH_LEN(act))); + thd->clear_error(); + DBUG_EXECUTE_IF("dbug.before_get_running_status_yes", + { + const char act[]= + "now " + "wait_for signal.io_thread_let_running"; + DBUG_ASSERT(opt_debug_sync_timeout > 0); + DBUG_ASSERT(!debug_sync_set_action(thd, + STRING_WITH_LEN(act))); };); mysql_mutex_lock(&mi->run_lock); mi->slave_running= MYSQL_SLAVE_RUN_CONNECT; @@ -3491,6 +3517,7 @@ err: mi->mysql=0; } write_ignored_events_info_to_relay_log(thd, mi); + mi->display(0, NULL); thd_proc_info(thd, "Waiting for slave mutex on exit"); mysql_mutex_lock(&mi->run_lock); @@ -3776,53 +3803,22 @@ log '%s' at position %s, relay log '%s' if (!sql_slave_killed(thd,rli)) { /* - retrieve as much info as possible from the thd and, error - codes and warnings and print this to the error log as to - allow the user to locate the error + Reporting all gather errors while executing exec_relay_log_event() + analogously send_error() + */ + rli->display(0, NULL); + + /* + Any warnings issued has been already printed. + Take a special care of UDF. */ - uint32 const last_errno= rli->last_error().number; - - if (thd->is_error()) - { - char const *const errmsg= thd->stmt_da->message(); - - DBUG_PRINT("info", - ("thd->stmt_da->sql_errno()=%d; rli->last_error.number=%d", - thd->stmt_da->sql_errno(), last_errno)); - if (last_errno == 0) - { - /* - This function is reporting an error which was not reported - while executing exec_relay_log_event(). - */ - rli->report(ERROR_LEVEL, thd->stmt_da->sql_errno(), "%s", errmsg); - } - else if (last_errno != thd->stmt_da->sql_errno()) - { - /* - * An error was reported while executing exec_relay_log_event() - * however the error code differs from what is in the thread. - * This function prints out more information to help finding - * what caused the problem. - */ - sql_print_error("Slave (additional info): %s Error_code: %d", - errmsg, thd->stmt_da->sql_errno()); - } - } - - /* Print any warnings issued */ List_iterator_fast it(thd->warning_info->warn_list()); MYSQL_ERROR *err; - /* - Added controlled slave thread cancel for replication - of user-defined variables. - */ bool udf_error = false; while ((err= it++)) { if (err->get_sql_errno() == ER_CANT_OPEN_LIBRARY) udf_error = true; - sql_print_warning("Slave: %s Error_code: %d", err->get_message_text(), err->get_sql_errno()); } if (udf_error) sql_print_error("Error loading user-defined library, slave SQL " @@ -3839,6 +3835,14 @@ llstr(rli->get_group_master_log_pos(), l } goto err; } + else + { + /* + Event applying succeeded, reset errors and diag area status + */ + clear_all_errors(thd, const_cast(rli)); + thd->stmt_da->reset_diagnostics_area(); + } } /* Thread stopped. Print the current replication position to the log */ @@ -3849,6 +3853,7 @@ llstr(rli->get_group_master_log_pos(), l err: + rli->display(0, NULL); /* Some events set some playgrounds, which won't be cleared because thread stops. Stopping of this thread may not be known to these events ("stop" === modified file 'sql/rpl_slave.h' --- a/sql/rpl_slave.h 2011-02-16 17:13:30 +0000 +++ b/sql/rpl_slave.h 2011-03-27 09:53:06 +0000 @@ -213,6 +213,8 @@ void set_slave_thread_options(THD* thd); void set_slave_thread_default_charset(THD *thd, Relay_log_info const *rli); int apply_event_and_update_pos(Log_event* ev, THD* thd, Relay_log_info* rli); int rotate_relay_log(Master_info* mi); +int has_temporary_error(THD *thd, uint err= 0); +void clear_all_errors(THD *thd, Relay_log_info *rli); pthread_handler_t handle_slave_io(void *arg); pthread_handler_t handle_slave_sql(void *arg); --===============0359576707== 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\ # /bug11748510_36524-deadlock_overdram/ # testament_sha1: 01102fb23916ee3c1d03b6786b2b48c7f9c2d415 # timestamp: 2011-03-27 12:53:12 +0300 # base_revision_id: magne.mahre@stripped\ # y6p1m9y730lssgf7 # # Begin bundle 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 U6uicc4cFEyZf3i7kinChINPRjSI --===============0359576707==--