From 5672c2e57ca82b5a446dd8d2d39caa9f23a6bb72 Mon Sep 17 00:00:00 2001 From: unknown <aelkin/elkin@koti.dsl.inet.fi> Date: Mon, 5 Nov 2007 22:10:25 +0200 Subject: [PATCH] bug#27571 asynchronous setting mysql_`query`::error and Query_log_e::error_code refining tests as they appear to be non-deterministic. mysql-test/suite/binlog/r/binlog_killed.result: results changed mysql-test/suite/binlog/t/binlog_killed.test: restructuring the test to deliver more deterministic outcome. order-by for update and delete did not guaratee the order of scanning. --error are masked with zero in order to catch more info if killing really will happen to be non-deterministic on some platform (witnessed something like that on dl145j) mysql-test/suite/binlog/t/binlog_killed_simulate.test: important guard added --- .../suite/binlog/r/binlog_killed.result | 55 +++++++++++-------- mysql-test/suite/binlog/t/binlog_killed.test | 50 ++++++++++------- .../binlog/t/binlog_killed_simulate.test | 1 + 3 files changed, 64 insertions(+), 42 deletions(-) diff --git a/mysql-test/suite/binlog/r/binlog_killed.result b/mysql-test/suite/binlog/r/binlog_killed.result index 60b2ff6cfc..9e8f9828d9 100644 --- a/mysql-test/suite/binlog/r/binlog_killed.result +++ b/mysql-test/suite/binlog/r/binlog_killed.result @@ -17,8 +17,7 @@ update t1 set b=11 where a=2; update t1 set b=b+10; kill query ID; rollback; -ERROR 70100: Query execution was interrupted -select * from t1 /* must be the same as before (1,1),(2,2) */; +select * from t1 order by a /* must be the same as before (1,1),(2,2) */; a b 1 1 2 2 @@ -27,8 +26,7 @@ delete from t1 where a=2; delete from t1 where a=2; kill query ID; rollback; -ERROR 70100: Query execution was interrupted -select * from t1 /* must be the same as before (1,1),(2,2) */; +select * from t1 order by a /* must be the same as before (1,1),(2,2) */; a b 1 1 2 2 @@ -41,39 +39,45 @@ begin; insert into t1 select * from t4 for update; kill query ID; rollback; -ERROR 70100: Query execution was interrupted rollback; select * from t1 /* must be the same as before (1,1),(2,2) */; a b 1 1 2 2 drop table t4; +create table t4 (a int, b int) ENGINE=MyISAM /* for killing update and delete */; create function bug27563(n int) RETURNS int(11) DETERMINISTIC begin -if n > 1 then +if @b > 0 then select get_lock("a", 10) into @a; +else +set @b= 1; end if; return n; end| -delete from t2; -insert into t2 values (1,1), (2,2); +delete from t4; +insert into t4 values (1,1), (1,1); reset master; select get_lock("a", 20); get_lock("a", 20) 1 -update t2 set b=b + bug27563(b) order by a; +set @b= 0; +update t4 set b=b + bug27563(b); kill query ID; -ERROR 70100: Query execution was interrupted -select * from t2 /* must be (1,2), (2,2) */; +select * from t4 order by b /* must be (1,1), (1,2) */; a b +1 1 1 2 -2 2 -must have the update event more to FD +select @b /* must be 1 at the end of a stmt calling bug27563() */; +@b +1 +must have the update query event more to FD show binlog events from <binlog_start>; 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 +master-bin.000001 # User var # # @`b`=0 +master-bin.000001 # Query # # use `test`; update t4 set b=b + bug27563(b) select (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) is not null; @@ -86,22 +90,26 @@ select 0 /* must return 0 to mean the killed query is in */; select RELEASE_LOCK("a"); RELEASE_LOCK("a") 1 -delete from t2; -insert into t2 values (1,1), (2,2); +delete from t4; +insert into t4 values (1,1), (2,2); reset master; select get_lock("a", 20); get_lock("a", 20) 1 -delete from t2 where a=1 or a=bug27563(2) order by a; +set @b= 0; +delete from t4 where b=bug27563(1) or b=bug27563(2); kill query ID; -ERROR 70100: Query execution was interrupted -select * from t2 /* must be (1,2), (2,2) */; -a b -1 1 -2 2 -must have the update event more to FD +select count(*) from t4 /* must be 1 */; +count(*) +1 +select @b /* must be 1 at the end of a stmt calling bug27563() */; +@b +1 +must have the delete query event more to FD show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # User var # # @`b`=0 +master-bin.000001 # Query # # use `test`; delete from t4 where b=bug27563(1) or b=bug27563(2) select (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) is not null; @@ -114,6 +122,7 @@ select 0 /* must return 0 to mean the killed query is in */; select RELEASE_LOCK("a"); RELEASE_LOCK("a") 1 +drop table t4; drop function bug27563; drop table t1,t2,t3; 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 792b7a3dc5..4c2e6fbdc3 100644 --- a/mysql-test/suite/binlog/t/binlog_killed.test +++ b/mysql-test/suite/binlog/t/binlog_killed.test @@ -68,7 +68,6 @@ select @result /* must be zero either way */; delete from t1; delete from t2; insert into t1 values (1,1),(2,2); -let $ID= `select connection_id()`; # # simple update @@ -77,6 +76,7 @@ connection con1; begin; update t1 set b=11 where a=2; connection con2; +let $ID= `select connection_id()`; send update t1 set b=b+10; connection con1; @@ -85,9 +85,9 @@ eval kill query $ID; rollback; connection con2; ---error ER_QUERY_INTERRUPTED +--error 0,ER_QUERY_INTERRUPTED reap; -select * from t1 /* must be the same as before (1,1),(2,2) */; +select * from t1 order by a /* must be the same as before (1,1),(2,2) */; # # multi update @@ -120,6 +120,7 @@ connection con1; begin; delete from t1 where a=2; connection con2; +let $ID= `select connection_id()`; send delete from t1 where a=2; connection con1; @@ -128,9 +129,9 @@ eval kill query $ID; rollback; connection con2; ---error ER_QUERY_INTERRUPTED +--error 0,ER_QUERY_INTERRUPTED reap; -select * from t1 /* must be the same as before (1,1),(2,2) */; +select * from t1 order by a /* must be the same as before (1,1),(2,2) */; # # multi delete @@ -163,6 +164,7 @@ insert into t4 values (3, 3); begin; insert into t1 values (3, 3); connection con2; +let $ID= `select connection_id()`; begin; send insert into t1 select * from t4 for update; @@ -172,7 +174,7 @@ eval kill query $ID; rollback; connection con2; ---error ER_QUERY_INTERRUPTED +--error 0,ER_QUERY_INTERRUPTED reap; rollback; select * from t1 /* must be the same as before (1,1),(2,2) */; @@ -182,13 +184,17 @@ drop table t4; # cleanup for the sub-case ### ## non-ta table case: killing must be recorded in binlog ### +create table t4 (a int, b int) ENGINE=MyISAM /* for killing update and delete */; + delimiter |; create function bug27563(n int) RETURNS int(11) DETERMINISTIC begin - if n > 1 then + if @b > 0 then select get_lock("a", 10) into @a; + else + set @b= 1; end if; return n; end| @@ -198,25 +204,27 @@ delimiter ;| # update # -delete from t2; -insert into t2 values (1,1), (2,2); +delete from t4; +insert into t4 values (1,1), (1,1); reset master; connection con1; select get_lock("a", 20); connection con2; let $ID= `select connection_id()`; -send update t2 set b=b + bug27563(b) order by a; +set @b= 0; +send update t4 set b=b + bug27563(b); connection con1; --replace_result $ID ID eval kill query $ID; connection con2; ---error ER_QUERY_INTERRUPTED +--error 0,ER_QUERY_INTERRUPTED reap; -select * from t2 /* must be (1,2), (2,2) */; ---echo must have the update event more to FD +select * from t4 order by b /* must be (1,1), (1,2) */; +select @b /* must be 1 at the end of a stmt calling bug27563() */; +--echo must have the update query event more to FD source include/show_binlog_events.inc; # a proof the query is binlogged with an error @@ -239,25 +247,27 @@ select RELEASE_LOCK("a"); # delete # -delete from t2; -insert into t2 values (1,1), (2,2); +delete from t4; +insert into t4 values (1,1), (2,2); reset master; connection con1; select get_lock("a", 20); connection con2; let $ID= `select connection_id()`; -send delete from t2 where a=1 or a=bug27563(2) order by a; +set @b= 0; +send delete from t4 where b=bug27563(1) or b=bug27563(2); connection con1; --replace_result $ID ID eval kill query $ID; connection con2; ---error ER_QUERY_INTERRUPTED +--error 0,ER_QUERY_INTERRUPTED reap; -select * from t2 /* must be (1,2), (2,2) */; ---echo must have the update event more to FD +select count(*) from t4 /* must be 1 */; +select @b /* must be 1 at the end of a stmt calling bug27563() */; +--echo must have the delete query event more to FD source include/show_binlog_events.inc; # a proof the query is binlogged with an error @@ -276,6 +286,8 @@ connection con1; select RELEASE_LOCK("a"); --remove_file $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog +drop table t4; + # # load data - see simulation tests # diff --git a/mysql-test/suite/binlog/t/binlog_killed_simulate.test b/mysql-test/suite/binlog/t/binlog_killed_simulate.test index 772736d89e..2121a90dc8 100644 --- a/mysql-test/suite/binlog/t/binlog_killed_simulate.test +++ b/mysql-test/suite/binlog/t/binlog_killed_simulate.test @@ -1,3 +1,4 @@ +-- source include/have_debug.inc -- source include/have_binlog_format_mixed_or_statement.inc # # bug#27571 asynchronous setting mysql_$query()'s local error and -- 2.30.9