diff options
Diffstat (limited to 'mysql-test/t/truncate_coverage.test')
-rw-r--r-- | mysql-test/t/truncate_coverage.test | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/mysql-test/t/truncate_coverage.test b/mysql-test/t/truncate_coverage.test index 9870fbb5ebf..b7c08b03c8b 100644 --- a/mysql-test/t/truncate_coverage.test +++ b/mysql-test/t/truncate_coverage.test @@ -23,14 +23,14 @@ DROP TABLE IF EXISTS t1; CREATE TABLE t1 (c1 INT); INSERT INTO t1 VALUES (1); # -# Start a transaction and execute a DML in it. Since 5.4.4 this leaves -# a shared meta data lock (MDL) behind. TRUNCATE shall block on it. +# Acquire a shared metadata lock on table by opening HANDLER for it and wait. +# TRUNCATE shall block on this metadata lock. +# We can't use normal DML as such statements would also block LOCK TABLES. # --echo # --echo # connection con1 --connect (con1, localhost, root,,) -START TRANSACTION; -INSERT INTO t1 VALUES (2); +HANDLER t1 OPEN; # # Get connection id of default connection. # Lock the table and start TRUNCATE, which will block on MDL upgrade. @@ -48,12 +48,17 @@ send TRUNCATE TABLE t1; # from wait_while_table_is_used(). # --echo # ---echo # connection con1 ---connection con1 +--echo # connection con2 +--connect (con2, localhost, root,,) SET DEBUG_SYNC='now WAIT_FOR waiting'; let $invisible_assignment_in_select = `SELECT @id := $ID`; KILL QUERY @id; -COMMIT; +--disconnect con2 +--echo # +--echo # connection con1 +--connection con1 +--echo # Release shared metadata lock by closing HANDLER. +HANDLER t1 CLOSE; --disconnect con1 --echo # --echo # connection default @@ -69,14 +74,14 @@ SET DEBUG_SYNC='RESET'; CREATE TABLE t1 (c1 INT); INSERT INTO t1 VALUES (1); # -# Start a transaction and execute a DML in it. Since 5.4.4 this leaves -# a shared meta data lock (MDL) behind. TRUNCATE shall block on it. +# Acquire a shared metadata lock on table by opening HANDLER for it and wait. +# TRUNCATE shall block on this metadata lock. +# We can't use normal DML as such statements would also block LOCK TABLES. # --echo # --echo # connection con1 --connect (con1, localhost, root,,) -START TRANSACTION; -INSERT INTO t1 VALUES (2); +HANDLER t1 OPEN; # # Lock the table and start TRUNCATE, which will block on MDL upgrade. # @@ -91,11 +96,15 @@ send TRUNCATE TABLE t1; # Commit to let TRUNCATE continue. # --echo # ---echo # connection con1 ---connection con1 +--echo # connection con2 +--connect (con2, localhost, root,,) SET DEBUG_SYNC='now WAIT_FOR waiting'; --remove_file $MYSQLD_DATADIR/test/t1.frm -COMMIT; +--disconnect con2 +--echo # +--echo # connection con1 +--connection con1 +HANDLER t1 CLOSE; --disconnect con1 --echo # --echo # connection default @@ -129,7 +138,7 @@ INSERT INTO t1 VALUES (2); --echo # connection default --connection default let $ID= `SELECT @id := CONNECTION_ID()`; -SET DEBUG_SYNC='mdl_acquire_exclusive_locks_wait SIGNAL waiting'; +SET DEBUG_SYNC='mdl_acquire_lock_wait SIGNAL waiting'; send TRUNCATE TABLE t1; # # Get the default connection ID into a variable in an invisible statement. |