1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

MDEV-15149 Assert upon concurrent creating / querying sequences

Problem was that sequence_insert closed and reopened the like table
without proper locking.  Fixed by ensuring that the like table is
not reopened in sequence_insert
This commit is contained in:
Monty
2018-03-29 12:25:17 +03:00
parent e2664ee836
commit cd93eeeb1d
4 changed files with 69 additions and 0 deletions

View File

@ -0,0 +1,24 @@
CREATE SEQUENCE s1 ENGINE=InnoDB;
CREATE SEQUENCE s2 ENGINE=InnoDB;
connect con1,localhost,root,,test;
CREATE TABLE s3 LIKE s2;;
connection default;
CREATE SEQUENCE s4 ENGINE=InnoDB;
SELECT * from s1 WHERE start_value IN (SELECT start_value FROM s2);
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
1 1 9223372036854775806 1 1 1000 0 0
connection con1;
disconnect con1;
connection default;
DROP SEQUENCE s1, s2, s3, s4;
CREATE SEQUENCE s1 ENGINE=InnoDB;
PREPARE stmt FROM "CREATE TABLE s2 LIKE s1";
execute stmt;
drop table s2;
execute stmt;
drop table s2;
execute stmt;
select * from s2;
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
1 1 9223372036854775806 1 1 1000 0 0
DROP SEQUENCE s1, s2;

View File

@ -0,0 +1,40 @@
--source include/have_sequence.inc
--source include/have_innodb.inc
#
# MDEV-15149 Assorted assertion failures upon concurrent creating / querying
# sequences (same test case)
#
CREATE SEQUENCE s1 ENGINE=InnoDB;
CREATE SEQUENCE s2 ENGINE=InnoDB;
--connect (con1,localhost,root,,test)
--send CREATE TABLE s3 LIKE s2;
--connection default
CREATE SEQUENCE s4 ENGINE=InnoDB;
SELECT * from s1 WHERE start_value IN (SELECT start_value FROM s2);
--connection con1
--reap
# Cleanup
--disconnect con1
--connection default
DROP SEQUENCE s1, s2, s3, s4;
#
# Check prepared statements
#
CREATE SEQUENCE s1 ENGINE=InnoDB;
PREPARE stmt FROM "CREATE TABLE s2 LIKE s1";
execute stmt;
drop table s2;
execute stmt;
drop table s2;
execute stmt;
select * from s2;
DROP SEQUENCE s1, s2;