mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-27962 Instant DDL downgrades the MDL when table is empty
- Server incorrectly downgrading the MDL after prepare phase when
table is empty. mdl_exclusive_after_prepare is being set in
prepare phase only. But mdl_exclusive_after_prepare condition was
misplaced and checked before prepare phase by
commit d270525dfd
and it is now
changed to check after prepare phase.
- main.innodb_mysql_sync test case was changed to avoid locking
optimization when table is empty.
This commit is contained in:
@ -176,6 +176,7 @@ DROP DATABASE db1;
|
||||
--echo # Test 2: Primary index (implicit), should block writes.
|
||||
|
||||
CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb;
|
||||
INSERT INTO t1 VALUES(1, 2);
|
||||
SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
|
||||
--echo # Sending:
|
||||
--send ALTER TABLE t1 ADD UNIQUE INDEX(a), LOCK=SHARED
|
||||
@ -185,13 +186,13 @@ SET DEBUG_SYNC= "now WAIT_FOR manage";
|
||||
USE test;
|
||||
SELECT * FROM t1;
|
||||
--echo # Sending:
|
||||
--send UPDATE t1 SET a=NULL
|
||||
--send UPDATE t1 SET a=3
|
||||
|
||||
connection con2;
|
||||
--echo # Waiting for SELECT to be blocked by the metadata lock on t1
|
||||
let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist
|
||||
WHERE state= 'Waiting for table metadata lock'
|
||||
AND info='UPDATE t1 SET a=NULL';
|
||||
AND info='UPDATE t1 SET a=3';
|
||||
--source include/wait_condition.inc
|
||||
SET DEBUG_SYNC= "now SIGNAL query";
|
||||
|
||||
@ -200,7 +201,7 @@ connection default;
|
||||
--reap
|
||||
|
||||
connection con1;
|
||||
--echo # Reaping: UPDATE t1 SET a=NULL
|
||||
--echo # Reaping: UPDATE t1 SET a=3
|
||||
--reap
|
||||
|
||||
--echo # Test 3: Primary index (explicit), should block writes.
|
||||
@ -215,13 +216,13 @@ connection con1;
|
||||
SET DEBUG_SYNC= "now WAIT_FOR manage";
|
||||
SELECT * FROM t1;
|
||||
--echo # Sending:
|
||||
--send UPDATE t1 SET a=NULL
|
||||
--send UPDATE t1 SET a=4
|
||||
|
||||
connection con2;
|
||||
--echo # Waiting for SELECT to be blocked by the metadata lock on t1
|
||||
let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist
|
||||
WHERE state= 'Waiting for table metadata lock'
|
||||
AND info='UPDATE t1 SET a=NULL';
|
||||
AND info='UPDATE t1 SET a=4';
|
||||
--source include/wait_condition.inc
|
||||
SET DEBUG_SYNC= "now SIGNAL query";
|
||||
|
||||
@ -230,7 +231,7 @@ connection default;
|
||||
--reap
|
||||
|
||||
connection con1;
|
||||
--echo # Reaping: UPDATE t1 SET a=NULL
|
||||
--echo # Reaping: UPDATE t1 SET a=4
|
||||
--reap
|
||||
|
||||
--echo # Test 4: Secondary unique index, should not block reads.
|
||||
|
Reference in New Issue
Block a user