diff --git a/mysql-test/suite/binlog/r/binlog_killed.result b/mysql-test/suite/binlog/r/binlog_killed.result index ddd80283eca..60b2ff6cfc4 100644 --- a/mysql-test/suite/binlog/r/binlog_killed.result +++ b/mysql-test/suite/binlog/r/binlog_killed.result @@ -70,9 +70,10 @@ select * from t2 /* must be (1,2), (2,2) */; a b 1 2 2 2 -show master status /* must have the update event more to FD */; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 211 +must have the update event more to FD +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `test`; update t2 set b=b + bug27563(b) order by a select (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) is not null; @@ -98,9 +99,9 @@ select * from t2 /* must be (1,2), (2,2) */; a b 1 1 2 2 -show master status /* must have the update event more to FD */; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 98 +must have the update event more to FD +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info select (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) is not null; diff --git a/mysql-test/suite/binlog/r/binlog_killed_simulate.result b/mysql-test/suite/binlog/r/binlog_killed_simulate.result new file mode 100644 index 00000000000..f6a5ddade51 --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_killed_simulate.result @@ -0,0 +1,33 @@ +drop table if exists t1,t2; +create table t1 (a int) engine=MyISAM; +insert into t1 set a=1; +reset master; +update t1 set a=2 /* will be "killed" after work has been done */; +select +(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) +is not null; +(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) +is not null +1 +select 1 /* must return 1 as query completed before got killed*/; +1 +1 +create table t2 (a int, b int) ENGINE=MyISAM; +reset master; +load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */; +ERROR 70100: Query execution was interrupted +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Begin_load_query # # ;file_id=1;block_len=12 +master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */ ;file_id=1 +select +(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) +is not null; +(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) +is not null +1 +select 0 /* must return 0 to mean the killed query is in */; +0 +0 +drop table t1,t2; +end of the tests diff --git a/mysql-test/suite/binlog/t/binlog_killed.test b/mysql-test/suite/binlog/t/binlog_killed.test index 89028d1c6b7..792b7a3dc57 100644 --- a/mysql-test/suite/binlog/t/binlog_killed.test +++ b/mysql-test/suite/binlog/t/binlog_killed.test @@ -216,11 +216,12 @@ connection con2; --error ER_QUERY_INTERRUPTED reap; select * from t2 /* must be (1,2), (2,2) */; -show master status /* must have the update event more to FD */; +--echo must have the update event more to FD +source include/show_binlog_events.inc; # a proof the query is binlogged with an error ---exec $MYSQL_BINLOG --start-position=98 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog +--exec $MYSQL_BINLOG --start-position=106 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval select (@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) @@ -256,11 +257,12 @@ connection con2; --error ER_QUERY_INTERRUPTED reap; select * from t2 /* must be (1,2), (2,2) */; -show master status /* must have the update event more to FD */; +--echo must have the update event more to FD +source include/show_binlog_events.inc; # a proof the query is binlogged with an error ---exec $MYSQL_BINLOG --start-position=98 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog +--exec $MYSQL_BINLOG --start-position=106 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval select (@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) diff --git a/mysql-test/t/binlog_killed_simulate-master.opt b/mysql-test/suite/binlog/t/binlog_killed_simulate-master.opt similarity index 100% rename from mysql-test/t/binlog_killed_simulate-master.opt rename to mysql-test/suite/binlog/t/binlog_killed_simulate-master.opt diff --git a/mysql-test/t/binlog_killed_simulate.test b/mysql-test/suite/binlog/t/binlog_killed_simulate.test similarity index 83% rename from mysql-test/t/binlog_killed_simulate.test rename to mysql-test/suite/binlog/t/binlog_killed_simulate.test index d6234d1bfd7..772736d89e9 100644 --- a/mysql-test/t/binlog_killed_simulate.test +++ b/mysql-test/suite/binlog/t/binlog_killed_simulate.test @@ -1,3 +1,4 @@ +-- source include/have_binlog_format_mixed_or_statement.inc # # bug#27571 asynchronous setting mysql_$query()'s local error and # Query_log_event::error_code @@ -18,8 +19,10 @@ reset master; update t1 set a=2 /* will be "killed" after work has been done */; # a proof the query is binlogged with no error - ---exec $MYSQL_BINLOG --start-position=98 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog +#todo: introduce a suite private macro that provides numeric values +# for some constants like the offset of the first real event +# that is different between severs versions. +--exec $MYSQL_BINLOG --start-position=106 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval select (@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) diff --git a/mysql-test/t/binlog_killed_bug27571-master.opt b/mysql-test/t/binlog_killed_bug27571-master.opt deleted file mode 100644 index d269cf246d5..00000000000 --- a/mysql-test/t/binlog_killed_bug27571-master.opt +++ /dev/null @@ -1 +0,0 @@ ---loose-debug=d,stop_after_row_loop_done diff --git a/mysql-test/t/binlog_killed_bug27571.test b/mysql-test/t/binlog_killed_bug27571.test deleted file mode 100644 index 6fa3c6d256f..00000000000 --- a/mysql-test/t/binlog_killed_bug27571.test +++ /dev/null @@ -1,68 +0,0 @@ ---source include/have_innodb.inc ---source include/not_embedded.inc ---source include/have_log_bin.inc - -# -# bug#27571 asynchronous setting mysql_`query`::error and Query_log_e::error_code -# -# Checking that if killing happens inbetween of the end of rows loop and -# recording into binlog that will not lead to recording any error incl -# the killed error. -# - -connect (looser, localhost, root,,); -connect (killer, localhost, root,,); - -create table t1 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB; - -delete from t1; -insert into t1 values (1,1),(2,2); -reset master; - -connection looser; -let $ID= `select connection_id()`; -send update t1 set b=11 where a=2; - -connection killer; -sleep 1; # let 1 second for the update to get to the sleeping point ---replace_result $ID ID -eval kill query $ID; - -connection looser; ---error 0 # zero even though the query must be got killed while it was sleepin for 5 secs -reap; - -# -# this is another possible artifact. The killed error was not caught -# as that is logical as killing was not effective: -# data are ok and well as binlog event is without killed error (further). -# The reason of the following `show error' is to prove that -# killing simulation was effective -# -show errors; - -connection killer; - -# nothing is rolled back - -select * from t1 where a=2 /* must be 11 */; - -# a proof the query is binlogged with an error - ---exec $MYSQL_BINLOG --start-position=98 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR -eval select -(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) -is not null; ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR -let $error_code= `select @a like "%#%error_code=0%"`; - -eval select $error_code /* must return 1*/; - -# -# cleanup -# - -drop table t1; - ---echo end of the tests