From: Andrei Elkin Date: March 25 2011 10:29am Subject: bzr commit into mysql-trunk branch (andrei.elkin:3311) Bug#11748510 List-Archive: http://lists.mysql.com/commits/133862 X-Bug: 11748510 Message-Id: <201103251029.p2PATrj7029061@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0281033427==" --===============0281033427== 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-25 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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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-25 10:29:46 +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 have been 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-25 10:29:46 +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); --===============0281033427== 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: b1078c42f062f9712a11d8653ac5bf946e1151db # timestamp: 2011-03-25 12:29:53 +0200 # base_revision_id: magne.mahre@stripped\ # y6p1m9y730lssgf7 # # Begin bundle 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 wA== --===============0281033427==--