bug#27571 merging. Fixing offsets and moving tests to the corrent

destination. Removing wrong (local temp) tests.
parent c2b0410c
...@@ -70,9 +70,10 @@ select * from t2 /* must be (1,2), (2,2) */; ...@@ -70,9 +70,10 @@ select * from t2 /* must be (1,2), (2,2) */;
a b a b
1 2 1 2
2 2 2 2
show master status /* must have the update event more to FD */; must have the update event more to FD
File Position Binlog_Do_DB Binlog_Ignore_DB show binlog events from <binlog_start>;
master-bin.000001 211 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 select
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
is not null; is not null;
...@@ -98,9 +99,9 @@ select * from t2 /* must be (1,2), (2,2) */; ...@@ -98,9 +99,9 @@ select * from t2 /* must be (1,2), (2,2) */;
a b a b
1 1 1 1
2 2 2 2
show master status /* must have the update event more to FD */; must have the update event more to FD
File Position Binlog_Do_DB Binlog_Ignore_DB show binlog events from <binlog_start>;
master-bin.000001 98 Log_name Pos Event_type Server_id End_log_pos Info
select select
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
is not null; is not null;
......
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 <binlog_start>;
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
...@@ -216,11 +216,12 @@ connection con2; ...@@ -216,11 +216,12 @@ connection con2;
--error ER_QUERY_INTERRUPTED --error ER_QUERY_INTERRUPTED
reap; reap;
select * from t2 /* must be (1,2), (2,2) */; 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 # 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 --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval select eval select
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) (@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
...@@ -256,11 +257,12 @@ connection con2; ...@@ -256,11 +257,12 @@ connection con2;
--error ER_QUERY_INTERRUPTED --error ER_QUERY_INTERRUPTED
reap; reap;
select * from t2 /* must be (1,2), (2,2) */; 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 # 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 --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval select eval select
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) (@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
......
-- source include/have_binlog_format_mixed_or_statement.inc
# #
# bug#27571 asynchronous setting mysql_$query()'s local error and # bug#27571 asynchronous setting mysql_$query()'s local error and
# Query_log_event::error_code # Query_log_event::error_code
...@@ -18,8 +19,10 @@ reset master; ...@@ -18,8 +19,10 @@ reset master;
update t1 set a=2 /* will be "killed" after work has been done */; update t1 set a=2 /* will be "killed" after work has been done */;
# a proof the query is binlogged with no error # a proof the query is binlogged with no error
#todo: introduce a suite private macro that provides numeric values
--exec $MYSQL_BINLOG --start-position=98 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog # 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 --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval select eval select
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) (@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
......
--loose-debug=d,stop_after_row_loop_done
--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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment