Skip to content

Commit 6999da9

Browse files
committed
Record BACKUP and SCHEMA namespaces order
1 parent 965db35 commit 6999da9

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

mysql-test/main/backup_lock_debug.result

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,28 @@ disconnect con1;
2626
connection default;
2727
DROP TABLE t1;
2828
SET DEBUG_SYNC= 'RESET';
29+
#
30+
# Demonstrates a deadlock if BACKUP namespace is reorder after SCHEMA.
31+
# Culprit is ALTER TABLE taking SCHEMA lock on target database after
32+
# BACKUP lock was acquired.
33+
#
34+
CREATE DATABASE test2;
35+
CREATE TABLE t1(a INT) ENGINE=InnoDB;
36+
SET DEBUG_SYNC='alter_opened_table SIGNAL ready WAIT_FOR go';
37+
ALTER TABLE t1 RENAME TO test2.t1;
38+
connect con1,localhost,root,,;
39+
SET DEBUG_SYNC='now WAIT_FOR ready';
40+
BACKUP STAGE START;
41+
SET DEBUG_SYNC='mdl_acquire_lock_wait SIGNAL ready1';
42+
BACKUP STAGE BLOCK_DDL;
43+
connect con2,localhost,root,,;
44+
SET DEBUG_SYNC='now WAIT_FOR ready1';
45+
SET DEBUG_SYNC='mdl_acquire_lock_wait SIGNAL go';
46+
DROP DATABASE test2;
47+
connection default;
48+
connection con1;
49+
disconnect con1;
50+
connection con2;
51+
disconnect con2;
52+
connection default;
53+
SET DEBUG_SYNC='reset';

mysql-test/main/backup_lock_debug.test

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
########################################################################
44

55
--source include/have_debug_sync.inc
6+
--source include/have_innodb.inc
67

78
--echo #
89
--echo # Make sure pending LOCK TABLES doesn't block BACKUP STAGE
@@ -38,3 +39,40 @@ disconnect con1;
3839
connection default;
3940
DROP TABLE t1;
4041
SET DEBUG_SYNC= 'RESET';
42+
43+
44+
--echo #
45+
--echo # Demonstrates a deadlock if BACKUP namespace is reorder after SCHEMA.
46+
--echo # Culprit is ALTER TABLE taking SCHEMA lock on target database after
47+
--echo # BACKUP lock was acquired.
48+
--echo #
49+
CREATE DATABASE test2;
50+
CREATE TABLE t1(a INT) ENGINE=InnoDB;
51+
52+
SET DEBUG_SYNC='alter_opened_table SIGNAL ready WAIT_FOR go';
53+
send ALTER TABLE t1 RENAME TO test2.t1;
54+
55+
connect (con1,localhost,root,,);
56+
SET DEBUG_SYNC='now WAIT_FOR ready';
57+
BACKUP STAGE START;
58+
SET DEBUG_SYNC='mdl_acquire_lock_wait SIGNAL ready1';
59+
send BACKUP STAGE BLOCK_DDL;
60+
61+
connect (con2,localhost,root,,);
62+
SET DEBUG_SYNC='now WAIT_FOR ready1';
63+
SET DEBUG_SYNC='mdl_acquire_lock_wait SIGNAL go';
64+
send DROP DATABASE test2;
65+
66+
connection default;
67+
reap;
68+
69+
connection con1;
70+
reap;
71+
disconnect con1;
72+
73+
connection con2;
74+
reap;
75+
disconnect con2;
76+
77+
connection default;
78+
SET DEBUG_SYNC='reset';

0 commit comments

Comments
 (0)