From: Andrei Elkin Date: June 20 2011 1:26pm Subject: bzr commit into mysql-next-mr-wl5569 branch (andrei.elkin:3311) WL#5569 List-Archive: http://lists.mysql.com/commits/139539 Message-Id: <201106201326.p5KDQgRG015762@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0327230338==" --===============0327230338== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/andrei/MySQL/BZR/2a-23May/WL/mysql-next-mr-wl5569/ based on revid:andrei.elkin@stripped 3311 Andrei Elkin 2011-06-20 wl#5569 MTS 1. mtr.add_suppression for all remained unattended tests that generate any error at applying by SQL thread or MTS' worker. An error by worker follows by a warning by coordinator. So it's suppressed. 2. kill of Coordinator is handled immediately without waiting for any ongoing group scheduling completion. So it can possibly create consistency issue. That is reported with an error. 3. Two tests are made to expect one of two errors depending on Single- or Multi-Threaded mode. @ mysql-test/extra/rpl_tests/rpl_conflicts.test An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/extra/rpl_tests/rpl_loaddata.test MTS reports an error that STS does not expect as bug#56287 notes. @ mysql-test/extra/rpl_tests/rpl_parallel_load.test cleanup. @ mysql-test/extra/rpl_tests/rpl_row_empty_imgs.test An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test MTS reports an error that STS does not expect as bug#56287 notes. @ mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/suite/rpl/r/rpl_heartbeat_basic.result An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/suite/rpl/r/rpl_loaddata.result results updated. @ mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/suite/rpl/t/rpl_heartbeat_basic.test An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/suite/rpl/t/rpl_loaddata_fatal.test An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/suite/rpl/t/rpl_parallel.test cleanup. @ mysql-test/suite/rpl/t/rpl_parallel_multi_db-master.opt making post-execution check for warning not to fail. @ mysql-test/suite/rpl/t/rpl_parallel_start_stop.test kill of Coordinator is handled immediately to possibly create consistency issue. That is reported with an error. @ mysql-test/suite/rpl/t/rpl_row_img_sanity.test An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/suite/rpl/t/rpl_show_errors.test An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/suite/rpl/t/rpl_slave_start.test An error by worker follows by a warning by coordinator. So it's suppressed. @ mysql-test/suite/rpl/t/rpl_stm_000001.test An error by worker follows by a warning by coordinator. So it's suppressed. @ sql/rpl_reporting.h a new method to help in finding out whether an error has been already reported. @ sql/rpl_slave.cc Refining conditions for Coordinator to report a warning or an error in cases a. it's killed b. worker errored out and reported it. In the case a. the error level message is issue and in the case b. the warning level one. modified: mysql-test/extra/rpl_tests/rpl_conflicts.test mysql-test/extra/rpl_tests/rpl_loaddata.test mysql-test/extra/rpl_tests/rpl_parallel_load.test mysql-test/extra/rpl_tests/rpl_row_empty_imgs.test mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result mysql-test/suite/rpl/r/rpl_heartbeat_basic.result mysql-test/suite/rpl/r/rpl_loaddata.result mysql-test/suite/rpl/r/rpl_loaddata_fatal.result mysql-test/suite/rpl/r/rpl_parallel.result mysql-test/suite/rpl/r/rpl_parallel_start_stop.result mysql-test/suite/rpl/r/rpl_row_conflicts.result mysql-test/suite/rpl/r/rpl_row_img_eng_full.result mysql-test/suite/rpl/r/rpl_row_img_sanity.result mysql-test/suite/rpl/r/rpl_row_inexist_tbl.result mysql-test/suite/rpl/r/rpl_sequential.result mysql-test/suite/rpl/r/rpl_show_errors.result mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result mysql-test/suite/rpl/r/rpl_slave_start.result mysql-test/suite/rpl/r/rpl_stm_000001.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_circular_for_4_hosts.test mysql-test/suite/rpl/t/rpl_heartbeat_basic.test mysql-test/suite/rpl/t/rpl_loaddata_fatal.test mysql-test/suite/rpl/t/rpl_parallel.test mysql-test/suite/rpl/t/rpl_parallel_multi_db-master.opt mysql-test/suite/rpl/t/rpl_parallel_multi_db-slave.opt mysql-test/suite/rpl/t/rpl_parallel_start_stop.test mysql-test/suite/rpl/t/rpl_row_img_sanity.test mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test mysql-test/suite/rpl/t/rpl_show_errors.test mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test mysql-test/suite/rpl/t/rpl_slave_start.test mysql-test/suite/rpl/t/rpl_stm_000001.test sql/rpl_reporting.h sql/rpl_slave.cc === modified file 'mysql-test/extra/rpl_tests/rpl_conflicts.test' --- a/mysql-test/extra/rpl_tests/rpl_conflicts.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_conflicts.test 2011-06-20 13:26:35 +0000 @@ -98,6 +98,7 @@ if (`SELECT @@global.binlog_format != 'R --eval SELECT "$err" as 'Last_SQL_Error (expected "duplicate key" error)' --enable_query_log call mtr.add_suppression("Slave SQL.*Duplicate entry .1. for key .PRIMARY.* Error_code: 1062"); + call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); SELECT * FROM t1; === modified file 'mysql-test/extra/rpl_tests/rpl_loaddata.test' --- a/mysql-test/extra/rpl_tests/rpl_loaddata.test 2011-06-17 18:01:58 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_loaddata.test 2011-06-20 13:26:35 +0000 @@ -158,10 +158,11 @@ 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= 0,1740 --source include/wait_for_slave_sql_error.inc drop table t1, t2; } + connection master; drop table t1, t2; === modified file 'mysql-test/extra/rpl_tests/rpl_parallel_load.test' --- a/mysql-test/extra/rpl_tests/rpl_parallel_load.test 2011-06-15 17:12:11 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_parallel_load.test 2011-06-20 13:26:35 +0000 @@ -252,15 +252,24 @@ let $wait_timeout= 600; let $wait_condition= SELECT count(*)+sleep(1) = 5 FROM test0.benchmark; source include/wait_condition.inc; +# cleanup for files that could not be removed in the end of previous invocation. +let $MYSQLD_DATADIR= `select @@datadir`; +--remove_files_wildcard $MYSQLD_DATADIR *.out + use test; -select * from test0.benchmark into outfile 'benchmark.out'; +let $benchmark_file= `select replace(concat("benchmark_",uuid(),".out"),"-","_")`; +--replace_regex /benchmark_.*.out/benchmark.out/ +eval select * from test0.benchmark into outfile '$benchmark_file'; select ts from test0.benchmark where state like 'master started load' into @m_0; select ts from test0.benchmark where state like 'master ends load' into @m_1; select ts from test0.benchmark where state like 'slave takes on load' into @s_0; select ts from test0.benchmark where state like 'slave ends load' into @s_1; -select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta_m', - time_to_sec(@s_1) - time_to_sec(@s_0) as 'delta_s' into outfile 'delta.out'; +let $delta_file= `select replace(concat("delta_",uuid(),".out"),"-","_")`; +--replace_regex /delta_.*.out/delta.out/ +eval select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta_m', + time_to_sec(@s_1) - time_to_sec(@s_0) as 'delta_s', + time_to_sec(@s_m1) - time_to_sec(@s_m0) as 'delta_sm' into outfile '$delta_file'; let $i = $databases + 1; while($i) === modified file 'mysql-test/extra/rpl_tests/rpl_row_empty_imgs.test' --- a/mysql-test/extra/rpl_tests/rpl_row_empty_imgs.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_row_empty_imgs.test 2011-06-20 13:26:35 +0000 @@ -206,6 +206,8 @@ if ($lower_engine == ndb) SET SQL_LOG_BIN=0; call mtr.add_suppression("Slave: Can\'t find record in \'t1\' Error_code: 1032"); call mtr.add_suppression("Slave SQL: Could not execute Update_rows event on table test.t1; Can.t find record in .t1.* Error_code: 1032"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + SET SQL_LOG_BIN=1; # NOTE: Because of BUG#52473, when using NDB this will make the test === 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-06-20 13:26:35 +0000 @@ -25,9 +25,13 @@ 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("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + --echo (expect different error codes on master and slave) ---let $slave_sql_errno= 0 ---let $show_slave_sql_error= 1 +--let $slave_sql_errno= 0,1740 +# can't print error text. MTS reports a separate error in this case. +# Todo: to fix single-threaded-slave BUG#57287. +--let $show_slave_sql_error= 0 --source include/wait_for_slave_sql_error.inc drop table t1; --source include/stop_slave.inc === modified file 'mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result' --- a/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result 2011-03-16 16:38:30 +0000 +++ b/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result 2011-06-20 13:26:35 +0000 @@ -6,6 +6,7 @@ CREATE TABLE t1 (a INT NOT NULL AUTO_INC CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=InnoDB; include/rpl_sync.inc call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); *** Testing schema A->B->C->D->A *** === modified file 'mysql-test/suite/rpl/r/rpl_heartbeat_basic.result' --- a/mysql-test/suite/rpl/r/rpl_heartbeat_basic.result 2011-03-17 13:20:36 +0000 +++ b/mysql-test/suite/rpl/r/rpl_heartbeat_basic.result 2011-06-20 13:26:35 +0000 @@ -1,6 +1,7 @@ include/master-slave.inc [connection master] call mtr.add_suppression("Slave I/O: The slave I/O thread stops because a fatal error is encountered when it tried to SET @master_binlog_checksum"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); *** Preparing *** include/stop_slave.inc === modified file 'mysql-test/suite/rpl/r/rpl_loaddata.result' --- a/mysql-test/suite/rpl/r/rpl_loaddata.result 2011-06-17 18:01:58 +0000 +++ b/mysql-test/suite/rpl/r/rpl_loaddata.result 2011-06-20 13:26:35 +0000 @@ -73,7 +73,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=0,1740 ] 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_loaddata_fatal.result' --- a/mysql-test/suite/rpl/r/rpl_loaddata_fatal.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_loaddata_fatal.result 2011-06-20 13:26:35 +0000 @@ -4,6 +4,7 @@ CREATE TABLE t1 (a INT, b INT); INSERT INTO t1 VALUES (1,10); LOAD DATA INFILE '../../std_data/rpl_loaddata.dat' INTO TABLE t1; call mtr.add_suppression("Slave SQL.*Fatal error: Not enough memory, Error_code: 1593"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); include/wait_for_slave_sql_error_and_skip.inc [errno=1593] Last_SQL_Error = 'Fatal error: Not enough memory' DROP TABLE t1; === modified file 'mysql-test/suite/rpl/r/rpl_parallel.result' --- a/mysql-test/suite/rpl/r/rpl_parallel.result 2011-06-15 23:27:20 +0000 +++ b/mysql-test/suite/rpl/r/rpl_parallel.result 2011-06-20 13:26:35 +0000 @@ -10,8 +10,7 @@ select ts from test0.benchmark where sta select ts from test0.benchmark where state like 'master ends load' into @m_1; select ts from test0.benchmark where state like 'slave takes on load' into @s_0; select ts from test0.benchmark where state like 'slave ends load' into @s_1; -select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta_m', -time_to_sec(@s_1) - time_to_sec(@s_0) as 'delta_s' into outfile 'delta.out'; +select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta.out'; include/diff_tables.inc [master:test15.v_tm_nk, slave:test15.v_tm_nk] include/diff_tables.inc [master:test15.v_ti_nk, slave:test15.v_ti_nk] include/diff_tables.inc [master:test15.v_tm_wk, slave:test15.v_tm_wk] === modified file 'mysql-test/suite/rpl/r/rpl_parallel_start_stop.result' --- a/mysql-test/suite/rpl/r/rpl_parallel_start_stop.result 2011-06-15 17:12:11 +0000 +++ b/mysql-test/suite/rpl/r/rpl_parallel_start_stop.result 2011-06-20 13:26:35 +0000 @@ -2,6 +2,7 @@ include/master-slave.inc [connection master] call mtr.add_suppression('Slave SQL: Could not execute Write_rows event on table test.t1'); call mtr.add_suppression('Slave SQL: Could not execute Update_rows event on table test.t1; Deadlock found when trying to get lock'); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); create view worker_proc_list as SELECT id from Information_Schema.processlist where state like 'Waiting for an event from sql thread%'; create view coord_proc_list as SELECT id from Information_Schema.processlist where state like 'Slave has read all relay log%'; @@ -15,7 +16,7 @@ include/wait_for_slave_sql_to_stop.inc include/start_slave.inc select id from coord_proc_list into @c_id; kill query @c_id; -include/wait_for_slave_sql_to_stop.inc +include/wait_for_slave_sql_error.inc [errno=1740] include/start_slave.inc CREATE TABLE t1 (a int primary key) engine=innodb; insert into t1 values (1),(2); === 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-06-20 13:26:35 +0000 @@ -24,6 +24,7 @@ include/wait_for_slave_sql_error.inc [er 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 call mtr.add_suppression("Slave SQL.*Duplicate entry .1. for key .PRIMARY.* Error_code: 1062"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); SELECT * FROM t1; a 1 === modified file 'mysql-test/suite/rpl/r/rpl_row_img_eng_full.result' --- a/mysql-test/suite/rpl/r/rpl_row_img_eng_full.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_img_eng_full.result 2011-06-20 13:26:35 +0000 @@ -3642,6 +3642,7 @@ c1 c2 SET SQL_LOG_BIN=0; call mtr.add_suppression("Slave: Can\'t find record in \'t1\' Error_code: 1032"); call mtr.add_suppression("Slave SQL: Could not execute Update_rows event on table test.t1; Can.t find record in .t1.* Error_code: 1032"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); SET SQL_LOG_BIN=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1032] DROP TABLE t1; @@ -3825,6 +3826,7 @@ c1 c2 SET SQL_LOG_BIN=0; call mtr.add_suppression("Slave: Can\'t find record in \'t1\' Error_code: 1032"); call mtr.add_suppression("Slave SQL: Could not execute Update_rows event on table test.t1; Can.t find record in .t1.* Error_code: 1032"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); SET SQL_LOG_BIN=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1032] DROP TABLE t1; === modified file 'mysql-test/suite/rpl/r/rpl_row_img_sanity.result' --- a/mysql-test/suite/rpl/r/rpl_row_img_sanity.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_img_sanity.result 2011-06-20 13:26:35 +0000 @@ -2,6 +2,7 @@ include/master-slave.inc [connection master] call mtr.add_suppression("Slave: Can\'t find record in \'t\' Error_code: 1032"); call mtr.add_suppression("Slave SQL: Could not execute Update_rows event on table test.t; Can.t find record in .t.* Error_code: 1032"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); SHOW VARIABLES LIKE 'binlog_row_image'; Variable_name Value binlog_row_image FULL === modified file 'mysql-test/suite/rpl/r/rpl_row_inexist_tbl.result' --- a/mysql-test/suite/rpl/r/rpl_row_inexist_tbl.result 2011-02-23 11:54:58 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_inexist_tbl.result 2011-06-20 13:26:35 +0000 @@ -11,6 +11,7 @@ INSERT INTO t1 VALUES (1); ==== Verify error on slave ==== [on slave] call mtr.add_suppression("Slave SQL.*Error executing row event: .Table .test.t1. doesn.t exist., Error_code: 1146"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); include/wait_for_slave_sql_error.inc [errno=1146] ==== Clean up ==== include/stop_slave_io.inc === modified file 'mysql-test/suite/rpl/r/rpl_sequential.result' --- a/mysql-test/suite/rpl/r/rpl_sequential.result 2011-06-15 17:41:33 +0000 +++ b/mysql-test/suite/rpl/r/rpl_sequential.result 2011-06-20 13:26:35 +0000 @@ -14,8 +14,7 @@ select ts from test0.benchmark where sta select ts from test0.benchmark where state like 'master ends load' into @m_1; select ts from test0.benchmark where state like 'slave takes on load' into @s_0; select ts from test0.benchmark where state like 'slave ends load' into @s_1; -select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta_m', -time_to_sec(@s_1) - time_to_sec(@s_0) as 'delta_s' into outfile 'delta.out'; +select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta.out'; include/diff_tables.inc [master:test15.v_tm_nk, slave:test15.v_tm_nk] include/diff_tables.inc [master:test15.v_ti_nk, slave:test15.v_ti_nk] include/diff_tables.inc [master:test15.v_tm_wk, slave:test15.v_tm_wk] === modified file 'mysql-test/suite/rpl/r/rpl_show_errors.result' --- a/mysql-test/suite/rpl/r/rpl_show_errors.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_show_errors.result 2011-06-20 13:26:35 +0000 @@ -4,6 +4,7 @@ CREATE TABLE t1 (a INT, b blob, PRIMARY DROP TABLE t1; DROP TABLE t1; call mtr.add_suppression("Slave SQL: Error .Unknown table .test.t1.. on query.* Error_code: 1051"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); include/wait_for_slave_sql_error.inc [errno=1051] include/assert.inc [Last_SQL_Error_Timestamp is not null and matches the expected format] include/stop_slave.inc === modified file 'mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result' --- a/mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result 2011-03-15 15:16:34 +0000 +++ b/mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result 2011-06-20 13:26:35 +0000 @@ -17,5 +17,6 @@ call mtr.add_suppression("Slave: Can't g call mtr.add_suppression("Slave SQL: Error .Can.t get stat of.* Error_code: 13"); call mtr.add_suppression("Slave: File.* not found.*"); call mtr.add_suppression("Slave SQL: Error .File.* not found.* Error_code: 29"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); SET @@GLOBAL.DEBUG = ''; include/rpl_end.inc === modified file 'mysql-test/suite/rpl/r/rpl_slave_start.result' --- a/mysql-test/suite/rpl/r/rpl_slave_start.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_slave_start.result 2011-06-20 13:26:35 +0000 @@ -7,6 +7,7 @@ include/master-slave.inc [on slave] CALL mtr.add_suppression("Slave: Table 't1' already exists Error_code: 1050"); CALL mtr.add_suppression("Slave SQL: Error .Table .t1. already exists. on query.* Error_code: 1050"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); # The statement makes SQL thread to fail. CREATE TABLE t1(c1 INT); [on master] === modified file 'mysql-test/suite/rpl/r/rpl_stm_000001.result' --- a/mysql-test/suite/rpl/r/rpl_stm_000001.result 2011-06-19 13:11:25 +0000 +++ b/mysql-test/suite/rpl/r/rpl_stm_000001.result 2011-06-20 13:26:35 +0000 @@ -1,6 +1,7 @@ include/master-slave.inc [connection master] CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); create table t1 (word char(20) not null); load data infile '../../std_data/words.dat' into table t1; load data local infile 'MYSQL_TEST_DIR/std_data/words.dat' into table t1; === 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-06-20 13:26:35 +0000 @@ -8,9 +8,9 @@ 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("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); (expect different error codes on master and slave) -include/wait_for_slave_sql_error.inc [errno=0] -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)'' +include/wait_for_slave_sql_error.inc [errno=0,1740] drop table t1; include/stop_slave.inc RESET SLAVE; === 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-06-20 13:26:35 +0000 @@ -19,6 +19,7 @@ include/wait_for_slave_sql_error.inc [er 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)' call mtr.add_suppression("Slave SQL.*Duplicate entry .1. for key .PRIMARY.* Error_code: 1062"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); SELECT * FROM t1; a 1 === modified file 'mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result' --- a/mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result 2011-06-17 18:01:58 +0000 +++ b/mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result 2011-06-20 13:26:35 +0000 @@ -89,7 +89,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=0,1740 ] 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_circular_for_4_hosts.test' --- a/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test 2011-03-17 13:20:36 +0000 +++ b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test 2011-06-20 13:26:35 +0000 @@ -31,6 +31,8 @@ CREATE TABLE t2 (a INT NOT NULL AUTO_INC --source include/rpl_sync.inc --connection server_4 call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + --echo # === modified file 'mysql-test/suite/rpl/t/rpl_heartbeat_basic.test' --- a/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test 2011-03-17 13:20:36 +0000 +++ b/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test 2011-06-20 13:26:35 +0000 @@ -18,6 +18,7 @@ --source include/have_binlog_format_mixed.inc call mtr.add_suppression("Slave I/O: The slave I/O thread stops because a fatal error is encountered when it tried to SET @master_binlog_checksum"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); --echo === modified file 'mysql-test/suite/rpl/t/rpl_loaddata_fatal.test' --- a/mysql-test/suite/rpl/t/rpl_loaddata_fatal.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/t/rpl_loaddata_fatal.test 2011-06-20 13:26:35 +0000 @@ -16,6 +16,8 @@ LOAD DATA INFILE '../../std_data/rpl_loa connection slave; call mtr.add_suppression("Slave SQL.*Fatal error: Not enough memory, Error_code: 1593"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + let $slave_sql_errno= 1593; let $show_slave_sql_error= 1; source include/wait_for_slave_sql_error_and_skip.inc; === modified file 'mysql-test/suite/rpl/t/rpl_parallel.test' --- a/mysql-test/suite/rpl/t/rpl_parallel.test 2011-06-15 17:12:11 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel.test 2011-06-20 13:26:35 +0000 @@ -27,7 +27,6 @@ # In the end there will be mysql-test/delta.{parallel,sequential}.log files. # -let $rpl_skip_reset_master_and_slave= 1; --source include/master-slave.inc connection master; === modified file 'mysql-test/suite/rpl/t/rpl_parallel_multi_db-master.opt' --- a/mysql-test/suite/rpl/t/rpl_parallel_multi_db-master.opt 2011-02-27 17:35:25 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_multi_db-master.opt 2011-06-20 13:26:35 +0000 @@ -1 +1 @@ ---thread_stack=512K +--thread_stack=512K --log-warnings=0 === modified file 'mysql-test/suite/rpl/t/rpl_parallel_multi_db-slave.opt' --- a/mysql-test/suite/rpl/t/rpl_parallel_multi_db-slave.opt 2011-05-30 10:05:07 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_multi_db-slave.opt 2011-06-20 13:26:35 +0000 @@ -1,2 +1,2 @@ ---thread_stack=512K --slave-transaction-retries=0 +--thread_stack=512K --slave-transaction-retries=0 --log-warnings=0 === modified file 'mysql-test/suite/rpl/t/rpl_parallel_start_stop.test' --- a/mysql-test/suite/rpl/t/rpl_parallel_start_stop.test 2011-06-15 17:12:11 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_start_stop.test 2011-06-20 13:26:35 +0000 @@ -15,6 +15,7 @@ connection slave; call mtr.add_suppression('Slave SQL: Could not execute Write_rows event on table test.t1'); call mtr.add_suppression('Slave SQL: Could not execute Update_rows event on table test.t1; Deadlock found when trying to get lock'); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); create view worker_proc_list as SELECT id from Information_Schema.processlist where state like 'Waiting for an event from sql thread%'; @@ -66,7 +67,8 @@ let $count= 0; let $table= worker_proc_list; source include/wait_until_rows_count.inc; -source include/wait_for_slave_sql_to_stop.inc; +let $slave_sql_errno= 1740; # ER_MTS_PARALLEL_INCONSISTENT_DATA +source include/wait_for_slave_sql_error.inc; source include/start_slave.inc; === modified file 'mysql-test/suite/rpl/t/rpl_row_img_sanity.test' --- a/mysql-test/suite/rpl/t/rpl_row_img_sanity.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/t/rpl_row_img_sanity.test 2011-06-20 13:26:35 +0000 @@ -25,6 +25,8 @@ -- connection slave call mtr.add_suppression("Slave: Can\'t find record in \'t\' Error_code: 1032"); call mtr.add_suppression("Slave SQL: Could not execute Update_rows event on table test.t; Can.t find record in .t.* Error_code: 1032"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + -- connection master ## assertion: check that default value for binlog-row-image == 'FULL' === modified file 'mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test' --- a/mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test 2011-06-20 13:26:35 +0000 @@ -31,6 +31,8 @@ connection slave; # slave should have stopped because can't find table t1 # 1146 = ER_NO_SUCH_TABLE call mtr.add_suppression("Slave SQL.*Error executing row event: .Table .test.t1. doesn.t exist., Error_code: 1146"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + --let $slave_sql_errno= 1146 --source include/wait_for_slave_sql_error.inc === modified file 'mysql-test/suite/rpl/t/rpl_show_errors.test' --- a/mysql-test/suite/rpl/t/rpl_show_errors.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/t/rpl_show_errors.test 2011-06-20 13:26:35 +0000 @@ -29,6 +29,8 @@ DROP TABLE t1; # remove a table that does not exist let $slave_sql_errno=1051; # ER_BAD_TABLE_ERROR call mtr.add_suppression("Slave SQL: Error .Unknown table .test.t1.. on query.* Error_code: 1051"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + -- source include/wait_for_slave_sql_error.inc --let $errts0= query_get_value("SHOW SLAVE STATUS", $field, 1) === modified file 'mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test' --- a/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test 2011-03-15 15:16:34 +0000 +++ b/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test 2011-06-20 13:26:35 +0000 @@ -72,6 +72,8 @@ call mtr.add_suppression("Slave: Can't g call mtr.add_suppression("Slave SQL: Error .Can.t get stat of.* Error_code: 13"); call mtr.add_suppression("Slave: File.* not found.*"); call mtr.add_suppression("Slave SQL: Error .File.* not found.* Error_code: 29"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + --let $rpl_only_running_threads= 1 eval SET @@GLOBAL.DEBUG = '$old_debug'; === modified file 'mysql-test/suite/rpl/t/rpl_slave_start.test' --- a/mysql-test/suite/rpl/t/rpl_slave_start.test 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/t/rpl_slave_start.test 2011-06-20 13:26:35 +0000 @@ -10,6 +10,8 @@ connection slave; CALL mtr.add_suppression("Slave: Table 't1' already exists Error_code: 1050"); CALL mtr.add_suppression("Slave SQL: Error .Table .t1. already exists. on query.* Error_code: 1050"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + --echo # The statement makes SQL thread to fail. CREATE TABLE t1(c1 INT); === modified file 'mysql-test/suite/rpl/t/rpl_stm_000001.test' --- a/mysql-test/suite/rpl/t/rpl_stm_000001.test 2011-06-19 13:11:25 +0000 +++ b/mysql-test/suite/rpl/t/rpl_stm_000001.test 2011-06-20 13:26:35 +0000 @@ -4,6 +4,8 @@ -- source include/master-slave.inc CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); + --let $engine_type= myisam # Load some data into t1 === modified file 'sql/rpl_reporting.h' --- a/sql/rpl_reporting.h 2011-06-09 15:27:47 +0000 +++ b/sql/rpl_reporting.h 2011-06-20 13:26:35 +0000 @@ -127,6 +127,7 @@ public: }; Error const& last_error() const { return m_last_error; } + bool is_error() const { return last_error().number != 0; } virtual ~Slave_reporting_capability()= 0; private: === modified file 'sql/rpl_slave.cc' --- a/sql/rpl_slave.cc 2011-06-19 08:04:19 +0000 +++ b/sql/rpl_slave.cc 2011-06-20 13:26:35 +0000 @@ -1073,7 +1073,7 @@ static bool io_slave_killed(THD* thd, Ma static bool sql_slave_killed(THD* thd, Relay_log_info* rli) { bool ret= FALSE; - bool is_parallel_group= FALSE; + bool is_parallel_warn= FALSE; DBUG_ENTER("sql_slave_killed"); @@ -1085,8 +1085,11 @@ static bool sql_slave_killed(THD* thd, R Slave can execute stop being in one of two MTS or Single-Threaded mode. The modes define different criteria to accept the stop. In particular that relates to the concept of groupping. + Killed Coordinator thread expects the worst so it warns on + possible consistency issue. */ - if ((is_parallel_group= rli->is_mts_in_group()) + if ((is_parallel_warn= (rli->is_parallel_exec() && + (rli->is_mts_in_group() || thd->killed))) || (!rli->is_parallel_exec() && thd->transaction.all.cannot_safely_rollback() && rli->is_in_group())) @@ -1136,7 +1139,7 @@ static bool sql_slave_killed(THD* thd, R if (!ret) { rli->report(WARNING_LEVEL, 0, - !is_parallel_group ? + !is_parallel_warn ? "Request to stop slave SQL Thread received while " "applying a group that has non-transactional " "changes; waiting for completion of the group ... " @@ -1148,8 +1151,9 @@ static bool sql_slave_killed(THD* thd, R } if (ret) { - if (is_parallel_group) - rli->report(WARNING_LEVEL, + if (is_parallel_warn) + rli->report(!rli->is_error() ? ERROR_LEVEL : + WARNING_LEVEL, // an error was reported by Worker ER_MTS_PARALLEL_INCONSISTENT_DATA, ER(ER_MTS_PARALLEL_INCONSISTENT_DATA), msg_stopped_mts); --===============0327230338== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/andrei.elkin@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: andrei.elkin@stripped # target_branch: file:///home/andrei/MySQL/BZR/2a-23May/WL/mysql-next-\ # mr-wl5569/ # testament_sha1: dfe58ba42c6619c3317689fab465a237c7396a14 # timestamp: 2011-06-20 16:26:42 +0300 # source_branch: file:///home/andrei/MySQL/BZR/2a-23May/mysql-trunk/ # base_revision_id: andrei.elkin@stripped\ # rn6x9fwsuuw0rxtw # # Begin bundle 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 4HDtcXvALW5m2OZ4/+Qf/i7kinChIeBQl5w= --===============0327230338==--