diff options
Diffstat (limited to 'mysql-test/t/partition_debug_sync.test')
-rw-r--r-- | mysql-test/t/partition_debug_sync.test | 73 |
1 files changed, 59 insertions, 14 deletions
diff --git a/mysql-test/t/partition_debug_sync.test b/mysql-test/t/partition_debug_sync.test index df4901ab78f..f9858f6fcd7 100644 --- a/mysql-test/t/partition_debug_sync.test +++ b/mysql-test/t/partition_debug_sync.test @@ -5,6 +5,8 @@ # --source include/have_partition.inc --source include/have_debug_sync.inc +--source include/have_debug.inc +--source include/have_innodb.inc SET DEBUG_SYNC= 'RESET'; @@ -13,7 +15,9 @@ SET DEBUG_SYNC= 'RESET'; --echo # Test when remove partitioning is done while drop table is waiting --echo # for the table. --echo # After MDL was introduced, there is no longer any race, so test is done ---echo # by adding a small sleep to verify that the delete waits. +--echo # by adding a small sleep to verify that the delete waits. This happens +--echo # only until ALTER tries to upgrade its MDL lock, which ends up in MDL +--echo # deadlock which is correctly reported. connect(con1, localhost, root,,); --echo # Con 1 SET DEBUG_SYNC= 'RESET'; @@ -27,21 +31,19 @@ ENGINE = MYISAM PARTITION p1 VALUES LESS THAN (20), PARTITION p2 VALUES LESS THAN (100), PARTITION p3 VALUES LESS THAN MAXVALUE ) */; -SET @save_dbug=@@debug_dbug; -SET SESSION debug_dbug= "+d,sleep_before_create_table_no_lock"; SET DEBUG_SYNC= 'alter_table_before_create_table_no_lock SIGNAL removing_partitioning WAIT_FOR waiting_for_alter'; -SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL partitioning_removed'; +SET DEBUG_SYNC= 'mdl_acquire_lock_wait SIGNAL waiting_for_upgrade'; --send ALTER TABLE t1 REMOVE PARTITIONING connection default; --echo # Con default SET DEBUG_SYNC= 'now WAIT_FOR removing_partitioning'; SET DEBUG_SYNC= 'mdl_acquire_lock_wait SIGNAL waiting_for_alter'; -SET DEBUG_SYNC= 'rm_table_no_locks_before_delete_table WAIT_FOR partitioning_removed'; +SET DEBUG_SYNC= 'rm_table_no_locks_before_delete_table WAIT_FOR waiting_for_upgrade'; DROP TABLE IF EXISTS t1; --echo # Con 1 connection con1; +--error ER_LOCK_DEADLOCK --reap -SET SESSION debug_dbug=@save_dbug; connection default; SET DEBUG_SYNC= 'RESET'; connection con1; @@ -58,31 +60,74 @@ CREATE TABLE t2 b INTEGER NOT NULL, KEY (b)) ENGINE = MYISAM -/*!50100 PARTITION BY RANGE (a) -(PARTITION p0 VALUES LESS THAN (2), - PARTITION p1 VALUES LESS THAN (20), - PARTITION p2 VALUES LESS THAN (100), - PARTITION p3 VALUES LESS THAN MAXVALUE ) */; +PARTITION BY RANGE (a) (PARTITION p0 VALUES LESS THAN (2), + PARTITION p1 VALUES LESS THAN (20), + PARTITION p2 VALUES LESS THAN (100), + PARTITION p3 VALUES LESS THAN MAXVALUE); SET DEBUG_SYNC= 'alter_table_before_open_tables SIGNAL removing_partitions WAIT_FOR waiting_for_alter'; SET DEBUG_SYNC= 'alter_table_before_rename_result_table WAIT_FOR delete_done'; --send ALTER TABLE t2 REMOVE PARTITIONING connection default; --echo # Con default -SET @save_dbug=@@debug_dbug; -SET SESSION debug_dbug= "+d,sleep_before_no_locks_delete_table"; SET DEBUG_SYNC= 'now WAIT_FOR removing_partitions'; SET DEBUG_SYNC= 'rm_table_no_locks_before_delete_table SIGNAL waiting_for_alter'; SET DEBUG_SYNC= 'rm_table_no_locks_before_binlog SIGNAL delete_done'; DROP TABLE IF EXISTS t2; -SET SESSION debug_dbug=@save_dbug; --echo # Con 1 connection con1; --error ER_NO_SUCH_TABLE --reap SET DEBUG_SYNC= 'RESET'; disconnect con1; +--source include/wait_until_disconnected.inc connection default; --echo # Con default SET DEBUG_SYNC= 'RESET'; --echo End of 5.1 tests + +--echo # +--echo # Coverage test for non pruned ha_partition::store_lock() +--echo # +CREATE TABLE t1 (a int) ENGINE = InnoDB; +CREATE TABLE t2 (a int PRIMARY KEY) +ENGINE = InnoDB PARTITION BY HASH (a) PARTITIONS 3; + +HANDLER t1 OPEN; + +--echo # Con1 +connect (con1, localhost, root,,); + +LOCK TABLES t1 WRITE, t2 READ; + +--echo # Default +connection default; + +SET DEBUG_SYNC="wait_for_lock SIGNAL locking"; +send INSERT INTO t2 VALUES (1), (2), (3); + +--echo # Con1 +connection con1; +SET DEBUG_SYNC="now WAIT_FOR locking"; + +send ALTER TABLE t1 ADD COLUMN b int; + +--echo # Default +connection default; +--error ER_LOCK_ABORTED +--reap + +SELECT 1; + +--echo # Con1 +connection con1; +--reap + +UNLOCK TABLES; +--disconnect con1 + +--echo # Default +connection default; +SET DEBUG_SYNC = 'RESET'; + +DROP TABLE t1, t2; |