diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:04:16 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:04:16 +0000 |
commit | a68fb2d8219f6bccc573009600e9f23e89226a5e (patch) | |
tree | d742d35d14ae816e99293d2b01face30e9f3a46b /mysql-test/main/partition_debug_sync.test | |
parent | Initial commit. (diff) | |
download | mariadb-10.6-upstream.tar.xz mariadb-10.6-upstream.zip |
Adding upstream version 1:10.6.11.upstream/1%10.6.11upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mysql-test/main/partition_debug_sync.test')
-rw-r--r-- | mysql-test/main/partition_debug_sync.test | 96 |
1 files changed, 96 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 00000000..bc49153f --- /dev/null +++ b/mysql-test/main/partition_debug_sync.test @@ -0,0 +1,96 @@ +#--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 + +SET DEBUG_SYNC= 'RESET'; + +--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 WAIT_FOR mtr_continue'; +SET DEBUG_SYNC= 'rm_table_no_locks_before_binlog SIGNAL delete_done'; +--send DROP TABLE IF EXISTS t2 + +--echo # Create a new connection thread to orchestrate the ALTER and DROP +--echo # threads' DEBUG_SYNC points to avoid lost signals +connect(con2,localhost,root,,); +let $wait_condition= select count(*)=0 from information_schema.processlist where state like "debug sync point: alter_table_before_open_tables"; +source include/wait_condition.inc; +SET DEBUG_SYNC= 'now SIGNAL mtr_continue'; + +# Return execution for DROP TABLE +connection default; +--reap + +# Return execution for ALTER TABLE +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 |