diff options
Diffstat (limited to 'mysql-test/main/partition_sync.test')
-rw-r--r-- | mysql-test/main/partition_sync.test | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/mysql-test/main/partition_sync.test b/mysql-test/main/partition_sync.test new file mode 100644 index 00000000..9b75ab79 --- /dev/null +++ b/mysql-test/main/partition_sync.test @@ -0,0 +1,120 @@ +--source include/have_partition.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc +# Save the initial number of concurrent sessions. +--source include/count_sessions.inc + +--echo # +--echo # Bug #43867 ALTER TABLE on a partitioned table +--echo # causes unnecessary deadlocks +--echo # + +CREATE TABLE t1 (a int) PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (1), + PARTITION p1 VALUES LESS THAN (2)); + +INSERT INTO t1 VALUES (0),(1); + +connect(con1,localhost,root); + +connection con1; +BEGIN; +SELECT * FROM t1; + +connection default; +--error ER_PARTITION_DOES_NOT_EXIST +ALTER TABLE t1 DROP PARTITION p3; + +connection con1; +--echo # This failed with deadlock and should not do so. +SELECT * FROM t1; + +connection default; +disconnect con1; +DROP TABLE t1; + + +--echo # +--echo # Bug #46654 False deadlock on concurrent DML/DDL +--echo # with partitions, inconsistent behavior +--echo # + +--disable_warnings +DROP TABLE IF EXISTS tbl_with_partitions; +--enable_warnings + +CREATE TABLE tbl_with_partitions ( i INT ) + PARTITION BY HASH(i); +INSERT INTO tbl_with_partitions VALUES (1); + +connect(con2,localhost,root); +connect(con3,localhost,root); + +connection con3; +LOCK TABLE tbl_with_partitions READ; + +--echo # Access table with disabled autocommit +connection default; +SET AUTOCOMMIT = 0; +SELECT * FROM tbl_with_partitions; + +--echo # Alter table, abort after prepare +connection con2; +set session debug_dbug="+d,abort_copy_table"; +--error ER_LOCK_WAIT_TIMEOUT +ALTER TABLE tbl_with_partitions ADD COLUMN f INT; + +--echo # Try accessing the table after Alter aborted. +--echo # This used to give ER_LOCK_DEADLOCK. +connection default; +SELECT * FROM tbl_with_partitions; + +connection con3; +UNLOCK TABLES; + +--echo # Cleanup +connection default; +disconnect con2; +disconnect con3; +DROP TABLE tbl_with_partitions; + +--echo # +--echo # MDEV-15465 Server crash or ASAN heap-use-after-free in Item_func_match::cleanup +--echo # upon using FT search with partitioning. +--echo # + +--connect (con1,localhost,root,,test) +CREATE OR REPLACE TABLE t1 (c CHAR(8)) ENGINE=MyISAM PARTITION BY KEY(c); + +--connection default +set debug_sync= 'execute_command_after_close_tables SIGNAL opened WAIT_FOR go'; +--send +DELETE FROM t1 WHERE MATCH(c) AGAINST ('foo' IN BOOLEAN MODE); + +--connection con1 +set debug_sync= 'now WAIT_FOR opened'; +FLUSH TABLES; +set debug_sync= 'now SIGNAL go'; + +--connection default +--reap +set debug_sync= 'execute_command_after_close_tables SIGNAL opened WAIT_FOR go'; +--send +SELECT * FROM t1 WHERE MATCH(c) AGAINST ('foo' IN BOOLEAN MODE); + +--connection con1 +set debug_sync= 'now WAIT_FOR opened'; +FLUSH TABLES; +set debug_sync= 'now SIGNAL go'; + +# Cleanup +--disconnect con1 +--connection default +--reap +DROP TABLE t1; +set debug_sync= 'RESET'; + + +# Check that all connections opened by test cases in this file are really +# gone so execution of other tests won't be affected by their presence. +--source include/wait_until_count_sessions.inc |