mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
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
This commit is contained in:
@ -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 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 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;
|
create table t3 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||||
reset master;
|
|
||||||
select get_lock("a", 20);
|
select get_lock("a", 20);
|
||||||
get_lock("a", 20)
|
get_lock("a", 20)
|
||||||
1
|
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;
|
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;
|
kill query 3;
|
||||||
select count(*) from t2 /* must be one */;
|
select count(*) from t2 /* must be 3 */;
|
||||||
count(*)
|
count(*)
|
||||||
1
|
3
|
||||||
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
|
|
||||||
select
|
select
|
||||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog"))
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog"))
|
||||||
is not null;
|
is not null;
|
||||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog"))
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog"))
|
||||||
is not null
|
is not null
|
||||||
1
|
1
|
||||||
select @a like "%#%error_code=1317%" /* must return 1 */;
|
select @a like "%#%error_code=1317%" /* must return 0 */;
|
||||||
@a like "%#%error_code=1317%"
|
@a like "%#%error_code=1317%"
|
||||||
1
|
0
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
drop function bug27563;
|
|
||||||
drop function bug27565;
|
|
||||||
|
@ -2,18 +2,51 @@
|
|||||||
|
|
||||||
###
|
###
|
||||||
### bug#22725 : incorrect killed error in binlogged query
|
### 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 (con1, localhost, root,,);
|
||||||
connect (con2, localhost, root,,);
|
connect (con2, localhost, root,,);
|
||||||
|
|
||||||
# the function is *insensitive* to killing - TO FIX IN BUG#27563
|
create table t1 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||||
# the function is used in the test anyway with `TODO' left
|
create table t2 (a int auto_increment, b int, PRIMARY KEY (a)) ENGINE=MyISAM;
|
||||||
# to correct results afterwards
|
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 |;
|
delimiter |;
|
||||||
create function bug27563()
|
create function bug27563()
|
||||||
RETURNS int(11)
|
RETURNS int(11)
|
||||||
@ -36,9 +69,6 @@ begin
|
|||||||
end|
|
end|
|
||||||
delimiter ;|
|
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;
|
reset master;
|
||||||
|
|
||||||
|
|
||||||
@ -60,7 +90,7 @@ connection con2;
|
|||||||
--enable_info
|
--enable_info
|
||||||
# todo: remove 0 return after fixing Bug#27563
|
# todo: remove 0 return after fixing Bug#27563
|
||||||
--error 0,ER_QUERY_INTERRUPTED
|
--error 0,ER_QUERY_INTERRUPTED
|
||||||
reap;
|
reap; ### pb: wrong error
|
||||||
--disable_info
|
--disable_info
|
||||||
###--replace_column 2 # 5 #
|
###--replace_column 2 # 5 #
|
||||||
### show binlog events from 98 /* nothing in binlog unless Bug#27563 */;
|
### show binlog events from 98 /* nothing in binlog unless Bug#27563 */;
|
||||||
@ -137,7 +167,7 @@ connection con2;
|
|||||||
# remove 1105 (wrong)
|
# remove 1105 (wrong)
|
||||||
#--error ER_QUERY_INTERRUPTED
|
#--error ER_QUERY_INTERRUPTED
|
||||||
--error 1105,ER_QUERY_INTERRUPTED
|
--error 1105,ER_QUERY_INTERRUPTED
|
||||||
reap;
|
reap; ### pb: wrong error
|
||||||
select * from t1 /* must be: (1,0) */;
|
select * from t1 /* must be: (1,0) */;
|
||||||
select * from t2 /* must be as before: (1,1) */;
|
select * from t2 /* must be as before: (1,1) */;
|
||||||
|
|
||||||
@ -163,7 +193,7 @@ connection con2;
|
|||||||
# remove 1105 (wrong)
|
# remove 1105 (wrong)
|
||||||
#--error ER_QUERY_INTERRUPTED
|
#--error ER_QUERY_INTERRUPTED
|
||||||
--error 1105,ER_QUERY_INTERRUPTED
|
--error 1105,ER_QUERY_INTERRUPTED
|
||||||
reap;
|
reap; ### pb: wrong error
|
||||||
select count(*) from t3 /* must be zero */;
|
select count(*) from t3 /* must be zero */;
|
||||||
show master status /* nothing in binlog */;
|
show master status /* nothing in binlog */;
|
||||||
|
|
||||||
@ -187,20 +217,16 @@ connection con2;
|
|||||||
# remove 1105 (wrong)
|
# remove 1105 (wrong)
|
||||||
#--error ER_QUERY_INTERRUPTED
|
#--error ER_QUERY_INTERRUPTED
|
||||||
--error 1105,ER_QUERY_INTERRUPTED
|
--error 1105,ER_QUERY_INTERRUPTED
|
||||||
reap;
|
reap; ### pb: wrong error
|
||||||
|
|
||||||
select count(*) from t2 /* count must be one */;
|
select count(*) from t2 /* count must be one */;
|
||||||
show master status /* insert into non-ta must be in binlog */;
|
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
|
drop function bug27563;
|
||||||
eval select
|
drop function bug27565;
|
||||||
(@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 ;
|
system rm $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog ;
|
||||||
|
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
drop function bug27563;
|
|
||||||
drop function bug27565;
|
|
||||||
|
|
||||||
|
@ -898,7 +898,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
Query_log_event qinfo(thd, thd->query, thd->query_length,
|
Query_log_event qinfo(thd, thd->query, thd->query_length,
|
||||||
transactional_table, FALSE,
|
transactional_table, FALSE,
|
||||||
(error>0) ? thd->killed : THD::NOT_KILLED);
|
(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)
|
if (mysql_bin_log.write(&qinfo) && transactional_table)
|
||||||
error=1;
|
error=1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user