Bug#34891 sp_notembedded.test fails sporadically

The problem is that since MyISAM's concurrent_insert is on by
default some concurrent SELECT statements might not see changes
made by INSERT statements in other connections, even if the
INSERT statement has returned.

The solution is to disable concurrent_insert so that INSERT
statements returns after the data is actually visible to other
statements.
parent 34d9dfb2
set @old_concurrent_insert= @@global.concurrent_insert;
set @@global.concurrent_insert= 0; set @@global.concurrent_insert= 0;
drop table if exists t1; drop table if exists t1;
create table t1 (kill_id int); create table t1 (kill_id int);
...@@ -8,3 +9,4 @@ select ((@id := kill_id) - kill_id) from t1; ...@@ -8,3 +9,4 @@ select ((@id := kill_id) - kill_id) from t1;
0 0
kill connection @id; kill connection @id;
drop table t1; drop table t1;
set @@global.concurrent_insert= @old_concurrent_insert;
set @old_concurrent_insert= @@global.concurrent_insert;
set @@global.concurrent_insert= 0; set @@global.concurrent_insert= 0;
drop table if exists t1, t2, t3; drop table if exists t1, t2, t3;
create table t1 (kill_id int); create table t1 (kill_id int);
...@@ -137,3 +138,4 @@ KILL CONNECTION_ID(); ...@@ -137,3 +138,4 @@ KILL CONNECTION_ID();
# of close of the connection socket # of close of the connection socket
SELECT 1; SELECT 1;
Got one of the listed errors Got one of the listed errors
set @@global.concurrent_insert= @old_concurrent_insert;
set @old_concurrent_insert= @@global.concurrent_insert;
set @@global.concurrent_insert= 0;
drop table if exists t1,t3; drop table if exists t1,t3;
drop procedure if exists bug4902| drop procedure if exists bug4902|
create procedure bug4902() create procedure bug4902()
...@@ -17,11 +19,11 @@ begin ...@@ -17,11 +19,11 @@ begin
show processlist; show processlist;
end| end|
call bug4902_2()| call bug4902_2()|
Id User Host db Command Time State Info show warnings|
# root localhost test Query # NULL show processlist Level Code Message
call bug4902_2()| call bug4902_2()|
Id User Host db Command Time State Info show warnings|
# root localhost test Query # NULL show processlist Level Code Message
drop procedure bug4902_2| drop procedure bug4902_2|
drop table if exists t1| drop table if exists t1|
create table t1 ( create table t1 (
...@@ -68,7 +70,7 @@ c ...@@ -68,7 +70,7 @@ c
2 2
show status like 'Qcache_hits'| show status like 'Qcache_hits'|
Variable_name Value Variable_name Value
Qcache_hits 2 Qcache_hits 0
set global query_cache_size = @x| set global query_cache_size = @x|
flush status| flush status|
flush query cache| flush query cache|
...@@ -208,3 +210,27 @@ GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION ...@@ -208,3 +210,27 @@ GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
drop user mysqltest_1@localhost; drop user mysqltest_1@localhost;
drop procedure 15298_1; drop procedure 15298_1;
drop procedure 15298_2; drop procedure 15298_2;
drop table if exists t1;
drop procedure if exists p1;
create table t1 (value varchar(15));
create procedure p1() update t1 set value='updated' where value='old';
call p1();
insert into t1 (value) values ("old");
select get_lock('b26162',120);
get_lock('b26162',120)
1
select 'rl_acquirer', value from t1 where get_lock('b26162',120);;
set session low_priority_updates=on;
call p1();;
select 'rl_contender', value from t1;
rl_contender value
rl_contender old
select release_lock('b26162');
release_lock('b26162')
1
rl_acquirer value
rl_acquirer old
drop procedure p1;
drop table t1;
set session low_priority_updates=default;
set @@global.concurrent_insert= @old_concurrent_insert;
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
# Disable concurrent inserts to avoid test failures when reading the # Disable concurrent inserts to avoid test failures when reading the
# connection id which was inserted into a table by another thread. # connection id which was inserted into a table by another thread.
set @old_concurrent_insert= @@global.concurrent_insert;
set @@global.concurrent_insert= 0; set @@global.concurrent_insert= 0;
connect (con1,localhost,root,,); connect (con1,localhost,root,,);
...@@ -58,3 +59,7 @@ reap; ...@@ -58,3 +59,7 @@ reap;
connection con2; connection con2;
drop table t1; drop table t1;
connection default;
# Restore global concurrent_insert value
set @@global.concurrent_insert= @old_concurrent_insert;
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
# Disable concurrent inserts to avoid test failures when reading the # Disable concurrent inserts to avoid test failures when reading the
# connection id which was inserted into a table by another thread. # connection id which was inserted into a table by another thread.
set @old_concurrent_insert= @@global.concurrent_insert;
set @@global.concurrent_insert= 0; set @@global.concurrent_insert= 0;
connect (con1, localhost, root,,); connect (con1, localhost, root,,);
...@@ -326,3 +327,9 @@ KILL CONNECTION_ID(); ...@@ -326,3 +327,9 @@ KILL CONNECTION_ID();
--echo # of close of the connection socket --echo # of close of the connection socket
--error 2013, 2006 --error 2013, 2006
SELECT 1; SELECT 1;
--connection default
###########################################################################
# Restore global concurrent_insert value. Keep in the end of the test file.
set @@global.concurrent_insert= @old_concurrent_insert;
# Can't test with embedded server # Can't test with embedded server
-- source include/not_embedded.inc -- source include/not_embedded.inc
# Disable concurrent inserts to avoid test failures
set @old_concurrent_insert= @@global.concurrent_insert;
set @@global.concurrent_insert= 0;
--sleep 2
--disable_warnings --disable_warnings
drop table if exists t1,t3; drop table if exists t1,t3;
--enable_warnings --enable_warnings
...@@ -39,10 +41,14 @@ create procedure bug4902_2() ...@@ -39,10 +41,14 @@ create procedure bug4902_2()
begin begin
show processlist; show processlist;
end| end|
--replace_column 1 # 6 # 3 localhost --disable_result_log
call bug4902_2()| call bug4902_2()|
--replace_column 1 # 6 # 3 localhost --enable_result_log
show warnings|
--disable_result_log
call bug4902_2()| call bug4902_2()|
--enable_result_log
show warnings|
drop procedure bug4902_2| drop procedure bug4902_2|
# #
...@@ -268,69 +274,72 @@ drop procedure 15298_1; ...@@ -268,69 +274,72 @@ drop procedure 15298_1;
drop procedure 15298_2; drop procedure 15298_2;
# #
# Test case disabled due to Bug#34891: sp_notembedded.test fails sporadically. # Bug#29936 Stored Procedure DML ignores low_priority_updates setting
# #
# #
# # Bug#29936 Stored Procedure DML ignores low_priority_updates setting --disable_warnings
# # drop table if exists t1;
# drop procedure if exists p1;
# --disable_warnings --enable_warnings
# drop table if exists t1;
# drop procedure if exists p1; create table t1 (value varchar(15));
# --enable_warnings create procedure p1() update t1 set value='updated' where value='old';
#
# create table t1 (value varchar(15)); # load the procedure into sp cache and execute once
# create procedure p1() update t1 set value='updated' where value='old'; call p1();
#
# # load the procedure into sp cache and execute once insert into t1 (value) values ("old");
# call p1();
# connect (rl_holder, localhost, root,,);
# insert into t1 (value) values ("old"); connect (rl_acquirer, localhost, root,,);
# connect (rl_contender, localhost, root,,);
# connect (rl_holder, localhost, root,,); connect (rl_wait, localhost, root,,);
# connect (rl_acquirer, localhost, root,,);
# connect (rl_contender, localhost, root,,); connection rl_holder;
# connect (rl_wait, localhost, root,,); select get_lock('b26162',120);
#
# connection rl_holder; connection rl_acquirer;
# select get_lock('b26162',120); --send select 'rl_acquirer', value from t1 where get_lock('b26162',120);
#
# connection rl_acquirer; # we must wait till this select opens and locks the tables
# --send select 'rl_acquirer', value from t1 where get_lock('b26162',120); connection rl_wait;
# let $wait_condition=
# # we must wait till this select opens and locks the tables select count(*) = 1 from information_schema.processlist
# connection rl_wait; where state = "User lock" and
# let $wait_condition= info = "select 'rl_acquirer', value from t1 where get_lock('b26162',120)";
# select count(*) = 1 from information_schema.processlist --source include/wait_condition.inc
# where state = "User lock" and
# info = "select 'rl_acquirer', value from t1 where get_lock('b26162',120)"; connection default;
# --source include/wait_condition.inc set session low_priority_updates=on;
# --send call p1();
# connection default;
# set session low_priority_updates=on; connection rl_wait;
# --send call p1(); let $wait_condition=
# select count(*) = 1 from information_schema.processlist
# connection rl_wait; where state = "Locked" and
# let $wait_condition= info = "update t1 set value='updated' where value='old'";
# select count(*) = 1 from information_schema.processlist --source include/wait_condition.inc
# where state = "Locked" and
# info = "update t1 set value='updated' where value='old'"; connection rl_contender;
# --source include/wait_condition.inc select 'rl_contender', value from t1;
#
# connection rl_contender; connection rl_holder;
# select 'rl_contender', value from t1; select release_lock('b26162');
#
# connection rl_holder; connection rl_acquirer;
# select release_lock('b26162'); --reap
connection default;
--reap
disconnect rl_holder;
disconnect rl_acquirer;
disconnect rl_wait;
drop procedure p1;
drop table t1;
set session low_priority_updates=default;
# #
# connection rl_acquirer; # Restore global concurrent_insert value. Keep in the end of the test file.
# --reap
# connection default;
# --reap
# #
# disconnect rl_holder;
# disconnect rl_acquirer; set @@global.concurrent_insert= @old_concurrent_insert;
# disconnect rl_wait;
# drop procedure p1;
# drop table t1;
# set session low_priority_updates=default;
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