diff options
author | unknown <aelkin/elkin@dsl-hkibras1-ff5dc300-70.dhcp.inet.fi> | 2007-05-29 16:27:55 +0300 |
---|---|---|
committer | unknown <aelkin/elkin@dsl-hkibras1-ff5dc300-70.dhcp.inet.fi> | 2007-05-29 16:27:55 +0300 |
commit | 00710d17bbfac52eaac4a5283f4e08e8ffeefaf9 (patch) | |
tree | eb2c05e6c7fba87e2cd4f32cb43af1ac256aab2f | |
parent | f27bf2b4635202d73b2da712c2bb0f522083cc24 (diff) | |
download | mariadb-git-00710d17bbfac52eaac4a5283f4e08e8ffeefaf9.tar.gz |
Bug#22725 Replication outages from ER_SERVER_SHUTDOWN (1053) set in replication events
Refining the tests since pb revealed the older version's fragality - the error from SF() due to killed
may be different on different env:s.
DBUG_ASSERT instead of assert.
mysql-test/r/binlog_killed.result:
new result file
mysql-test/t/binlog_killed.test:
regression for bug#22725 simplified. tests for bug27563, BUG#27565 made inactive.
sql/sql_insert.cc:
DBUG_ASSERT
-rw-r--r-- | mysql-test/r/binlog_killed.result | 94 | ||||
-rw-r--r-- | mysql-test/t/binlog_killed.test | 70 | ||||
-rw-r--r-- | sql/sql_insert.cc | 2 |
3 files changed, 54 insertions, 112 deletions
diff --git a/mysql-test/r/binlog_killed.result b/mysql-test/r/binlog_killed.result index 196400eaf9e..cb5683a4792 100644 --- a/mysql-test/r/binlog_killed.result +++ b/mysql-test/r/binlog_killed.result @@ -1,106 +1,22 @@ -create function bug27563() -RETURNS int(11) -DETERMINISTIC -begin -select get_lock("a", 10) into @a; -return 1; -end| -create function bug27565() -RETURNS int(11) -DETERMINISTIC -begin -select a from t1 where a=1 into @a for update; -return 1; -end| create table t1 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB; create table t2 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=MyISAM; create table t3 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB; -reset master; select get_lock("a", 20); get_lock("a", 20) 1 -insert into t1 values (bug27563(),1); -kill query 3; -affected rows: 1 -show master status /* must be only FD event unless Bug#27563 */; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 260 -select count(*) from t1 /* must be zero unless Bug#27563 */; -count(*) -1 -begin; -insert into t1 values (bug27563(),1); -kill query 3; -affected rows: 1 -select count(*) from t1 /* must be zero unless Bug#27563 */; -count(*) -2 -commit; reset master; -insert into t2 values (bug27563(),1); +insert into t2 values (null, null), (null, get_lock("a", 10)),(null, get_lock("a", 10)); kill query 3; -select count(*) from t2 /* must be one */; +select count(*) from t2 /* must be 3 */; count(*) -1 -show master status /* must have the insert event more to FD */; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 225 -select RELEASE_LOCK("a"); -RELEASE_LOCK("a") -1 -delete from t1; -delete from t2; -insert into t1 values (1,1); -insert into t2 values (1,1); -begin; -update t1 set b=0 where a=1; -update t2 set b=bug27565()-1 where a=1; -kill query 3; -commit; -Got one of the listed errors -select * from t1 /* must be: (1,0) */; -a b -1 0 -select * from t2 /* must be as before: (1,1) */; -a b -1 1 -delete from t3; -reset master; -begin; -update t1 set b=0 where a=1; -insert into t3 values (0,0),(1,bug27565()); -kill query 3; -rollback; -Got one of the listed errors -select count(*) from t3 /* must be zero */; -count(*) -0 -show master status /* nothing in binlog */; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 98 -delete from t2; -reset master; -begin; -update t1 set b=0 where a=1; -insert into t2 values (0,0),(1,bug27565()) /* non-ta t2 */; -kill query 3; -rollback; -Got one of the listed errors -select count(*) from t2 /* count must be one */; -count(*) -1 -show master status /* insert into non-ta must be in binlog */; -File Position Binlog_Do_DB Binlog_Ignore_DB -master-bin.000001 247 +3 select (@a:=load_file("MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog")) is not null; (@a:=load_file("MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog")) is not null 1 -select @a like "%#%error_code=1317%" /* must return 1 */; +select @a like "%#%error_code=1317%" /* must return 0 */; @a like "%#%error_code=1317%" -1 +0 drop table t1,t2,t3; -drop function bug27563; -drop function bug27565; diff --git a/mysql-test/t/binlog_killed.test b/mysql-test/t/binlog_killed.test index 4e92632c218..0bba72df867 100644 --- a/mysql-test/t/binlog_killed.test +++ b/mysql-test/t/binlog_killed.test @@ -2,18 +2,51 @@ ### ### bug#22725 : incorrect killed error in binlogged query -### and -### Bug#27563 killing noticed in SF() stack but the error gets missed in action -### Bug#27565 killed query of SF() is not reported correctly and ### connect (con1, localhost, root,,); connect (con2, localhost, root,,); -# the function is *insensitive* to killing - TO FIX IN BUG#27563 -# the function is used in the test anyway with `TODO' left -# to correct results afterwards +create table t1 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB; +create table t2 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=MyISAM; +create table t3 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB; + +# +# effective test for bug#22725 +# + +connection con1; +select get_lock("a", 20); + +connection con2; +let $ID= `select connection_id()`; +reset master; +send insert into t2 values (null, null), (null, get_lock("a", 10)),(null, get_lock("a", 10)); + + +connection con1; +eval kill query $ID; + +connection con2; +reap; +select count(*) from t2 /* must be 3 */; +--exec $MYSQL_BINLOG --start-position=126 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval select +(@a:=load_file("$MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog")) +is not null; +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +eval select @a like "%#%error_code=0%" /* must return 1 */; +eval select @a like "%insert%" /* must return 1 */; +# the functions are either *insensitive* to killing or killing can cause +# strange problmes with the error propagation out of SF's stack +# Bug#27563, Bug#27565, BUG#24971 +# +# TODO: use if's block as regression test for the bugs or remove +# +if (0) +{ delimiter |; create function bug27563() RETURNS int(11) @@ -36,9 +69,6 @@ begin end| delimiter ;| -create table t1 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB; -create table t2 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=MyISAM; -create table t3 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB; reset master; @@ -60,7 +90,7 @@ connection con2; --enable_info # todo: remove 0 return after fixing Bug#27563 --error 0,ER_QUERY_INTERRUPTED -reap; +reap; ### pb: wrong error --disable_info ###--replace_column 2 # 5 # ### show binlog events from 98 /* nothing in binlog unless Bug#27563 */; @@ -137,7 +167,7 @@ connection con2; # remove 1105 (wrong) #--error ER_QUERY_INTERRUPTED --error 1105,ER_QUERY_INTERRUPTED -reap; +reap; ### pb: wrong error select * from t1 /* must be: (1,0) */; select * from t2 /* must be as before: (1,1) */; @@ -163,7 +193,7 @@ connection con2; # remove 1105 (wrong) #--error ER_QUERY_INTERRUPTED --error 1105,ER_QUERY_INTERRUPTED -reap; +reap; ### pb: wrong error select count(*) from t3 /* must be zero */; show master status /* nothing in binlog */; @@ -187,20 +217,16 @@ connection con2; # remove 1105 (wrong) #--error ER_QUERY_INTERRUPTED --error 1105,ER_QUERY_INTERRUPTED -reap; +reap; ### pb: wrong error select count(*) from t2 /* count must be one */; show master status /* insert into non-ta must be in binlog */; ---exec $MYSQL_BINLOG --start-position=126 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR -eval select -(@a:=load_file("$MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog")) -is not null; ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR -eval select @a like "%#%error_code=1317%" /* must return 1 */; -system rm $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog ; -drop table t1,t2,t3; drop function bug27563; drop function bug27565; +} + +system rm $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog ; + +drop table t1,t2,t3; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 647681cdc1a..bf37a3d6d69 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -898,7 +898,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, Query_log_event qinfo(thd, thd->query, thd->query_length, transactional_table, FALSE, (error>0) ? thd->killed : THD::NOT_KILLED); - assert(thd->killed != THD::KILL_BAD_DATA || error > 0); + DBUG_ASSERT(thd->killed != THD::KILL_BAD_DATA || error > 0); if (mysql_bin_log.write(&qinfo) && transactional_table) error=1; } |