diff options
Diffstat (limited to 'mysql-test/main/partition_debug_sync.test')
-rw-r--r-- | mysql-test/main/partition_debug_sync.test | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/mysql-test/main/partition_debug_sync.test b/mysql-test/main/partition_debug_sync.test new file mode 100644 index 00000000000..f085ea3fb83 --- /dev/null +++ b/mysql-test/main/partition_debug_sync.test @@ -0,0 +1,84 @@ +#--disable_abort_on_error +# +# Test for the partition storage engine which require DEBUG_SYNC feature to +# Created by Mattias Jonsson +# +--source include/have_partition.inc +--source include/have_debug_sync.inc +--source include/have_debug.inc +--source include/have_innodb.inc + +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +SET DEBUG_SYNC= 'RESET'; +--enable_warnings + +--echo # +--echo # Bug#42438: Crash ha_partition::change_table_ptr +--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. 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,,); +SET DEBUG_SYNC= 'RESET'; +CREATE TABLE t1 +(a INTEGER, + 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 ) */; +SET DEBUG_SYNC= 'alter_table_before_create_table_no_lock SIGNAL removing_partitioning WAIT_FOR waiting_for_alter'; +SET DEBUG_SYNC= 'mdl_acquire_lock_wait SIGNAL waiting_for_upgrade'; +--send ALTER TABLE t1 REMOVE PARTITIONING +connection 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 waiting_for_upgrade'; +DROP TABLE IF EXISTS t1; +connection con1; +--error ER_LOCK_DEADLOCK +--reap +connection default; +SET DEBUG_SYNC= 'RESET'; +connection con1; +SET DEBUG_SYNC= 'RESET'; + +--echo # +--echo # Bug#42438: Crash ha_partition::change_table_ptr +--echo # Test when remove partitioning is failing due to drop table is already +--echo # in progress. +--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 alter waits. +CREATE TABLE t2 +(a INTEGER, + b INTEGER NOT NULL, + KEY (b)) +ENGINE = MYISAM +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; +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; +connection con1; +--error ER_NO_SUCH_TABLE +--reap +SET DEBUG_SYNC= 'RESET'; +disconnect con1; +--source include/wait_until_disconnected.inc +connection default; +SET DEBUG_SYNC= 'RESET'; + +--echo End of 5.1 tests |