You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.1 KiB
138 lines
4.1 KiB
--source include/have_debug.inc
|
|
--source include/have_debug_sync.inc
|
|
# Some parts of the test require enabled binary log.
|
|
--source include/have_log_bin.inc
|
|
|
|
--echo #
|
|
--echo # Bug#22653180:ASSERT DD::CACHE::SHARED_MULTI_MAP<T>::
|
|
--echo # PUT(CONST K*, CONST T*, DD::CACHE::CACHE
|
|
--echo #
|
|
|
|
CREATE TABLE t1(i int);
|
|
--echo # Force rename_table to fail after update has been applied to dd cache
|
|
SET SESSION debug="+d,abort_rename_after_update";
|
|
|
|
--echo # rename table will fail with dummy error
|
|
--error ER_ERROR_ON_WRITE
|
|
RENAME TABLE t1 to t2;
|
|
|
|
SET SESSION debug="-d,abort_rename_after_update";
|
|
|
|
SELECT * FROM t1;
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo #
|
|
--echo # Part of test coverage for WL#9826 "Allow RENAME TABLES under
|
|
--echo # LOCK TABLES" which needs debug build and debug_sync facility.
|
|
--echo #
|
|
--echo # The main part of coverage for this WL resides in rename.test.
|
|
--echo # This file only contains subtests which require debug/debug_sync
|
|
--echo # facilities, hence their odd numbering.
|
|
|
|
--enable_connect_log
|
|
SET @old_lock_wait_timeout= @@lock_wait_timeout;
|
|
connect (con1, localhost, root,,);
|
|
SET @old_lock_wait_timeout= @@lock_wait_timeout;
|
|
connection default;
|
|
|
|
--echo #
|
|
--echo # 1) Requirements on table locking for tables renamed and
|
|
--echo # target table names.
|
|
--echo #
|
|
--echo #
|
|
--echo # 1.2) Locking of target table.
|
|
CREATE TABLE t1 (i INT);
|
|
CREATE TABLE t2 (j INT);
|
|
--echo # RENAME TABLE under LOCK TABLES acquires X metadata
|
|
--echo # lock on target table name.
|
|
connection con1;
|
|
--echo # Ensure that table is cached in Table and Table Definition Caches.
|
|
SELECT * FROM t1;
|
|
SET DEBUG_SYNC='open_tables_after_open_and_process_table SIGNAL opened WAIT_FOR go';
|
|
--send SHOW CREATE TABLE t1
|
|
connection default;
|
|
--echo # Wait until SHOW CREATE TABLE acquires SH MDL on t1 and
|
|
--echo # starts waiting.
|
|
SET DEBUG_SYNC='now WAIT_FOR opened';
|
|
LOCK TABLES t2 WRITE;
|
|
--echo # RENAME TABLE fails due to lock timeout since it tries
|
|
--echo # to acquire X metadata lock on t1, on which SH metadata
|
|
--echo # lock is held in con1.
|
|
SET @@lock_wait_timeout= 1;
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
RENAME TABLE t2 TO t1;
|
|
SET @@lock_wait_timeout= @old_lock_wait_timeout;
|
|
UNLOCK TABLES;
|
|
|
|
--echo #
|
|
--echo # 2) Failure to acquire/upgrade locks on tables involved.
|
|
--echo #
|
|
--echo # Failure to upgrade metadata lock on source table to X mode.
|
|
--echo # (note that con1 still holds SH lock on it).
|
|
LOCK TABLE t1 WRITE;
|
|
SET @@lock_wait_timeout= 1;
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
RENAME TABLE t1 TO t3;
|
|
SET @@lock_wait_timeout= @old_lock_wait_timeout;
|
|
UNLOCK TABLES;
|
|
|
|
--echo #
|
|
--echo # Failure to acquire X metadata lock on target table name.
|
|
LOCK TABLES t2 WRITE;
|
|
SET @@lock_wait_timeout= 1;
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
RENAME TABLE t2 TO t1;
|
|
UNLOCK TABLES;
|
|
--echo # Unblock and reap SHOW CREATE TABLE.
|
|
SET DEBUG_SYNC='now SIGNAL go';
|
|
connection con1;
|
|
--reap
|
|
connection default;
|
|
SET DEBUG_SYNC='RESET';
|
|
DROP TABLES t1, t2;
|
|
|
|
--echo #
|
|
--echo # 5) RENAME TABLES under LOCK TABLES and views.
|
|
--echo #
|
|
--echo # 5.1) Requirements on locking is similar to tables.
|
|
CREATE TABLE t1 (i INT);
|
|
CREATE TABLE t2 (j INT);
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
CREATE VIEW v2 AS SELECT * FROM t2;
|
|
--echo #
|
|
--echo # RENAME TABLE on view under LOCK TABLES acquires X metadata
|
|
--echo # lock on target name.
|
|
connection con1;
|
|
SET DEBUG_SYNC='open_tables_after_open_and_process_table SIGNAL opened WAIT_FOR go';
|
|
--send SHOW CREATE VIEW v2
|
|
connection default;
|
|
--echo # Wait until SHOW CREATE VIEW acquires SH MDL on v2 and
|
|
--echo # starts waiting.
|
|
SET DEBUG_SYNC='now WAIT_FOR opened';
|
|
LOCK TABLES v1 WRITE;
|
|
--echo # RENAME TABLE fails due to lock timeout since it tries
|
|
--echo # to acquire X metadata lock on v2, on which SH metadata
|
|
--echo # lock is held in con1.
|
|
SET @@lock_wait_timeout= 1;
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
RENAME TABLE v1 TO v2;
|
|
SET @@lock_wait_timeout= @old_lock_wait_timeout;
|
|
UNLOCK TABLES;
|
|
--echo # Unblock and reap SHOW CREATE VIEW.
|
|
SET DEBUG_SYNC='now SIGNAL go';
|
|
connection con1;
|
|
--reap
|
|
connection default;
|
|
SET DEBUG_SYNC='RESET';
|
|
DROP VIEW v1;
|
|
DROP VIEW v2;
|
|
DROP TABLES t1, t2;
|
|
|
|
--echo # Clean-up.
|
|
connection con1;
|
|
disconnect con1;
|
|
--source include/wait_until_disconnected.inc
|
|
connection default;
|
|
--disable_connect_log
|
|
|