| Server IP : 88.99.149.37 / Your IP : 216.73.216.141 Web Server : nginx/1.31.2 System : Linux server-88-99-149-37 6.12.0-124.56.5.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 15 06:12:08 EDT 2026 x86_64 User : muralimurth ( 1015) PHP Version : 8.4.23 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/local/mysql/mysql-test/suite/galera/t/ |
Upload File : |
# # BF-BF conflict on MDL locks between DDL and insert query # when multi-level foreign key like t3 -> t2 -> t1 # are present. # # If bug is present, expect the wait condition # to timeout and when the INSERT applies, it # will be granted a MDL lock of type SHARED_READ # for table t1. When resumed, the DROP/ALTER/CREATE/OPTIMIZE # TABLE will also try to MDL lock t1, causing a BF-BF conflict # on that MDL lock. --source include/galera_cluster.inc --source include/have_innodb.inc --source include/have_debug.inc --source include/have_debug_sync.inc --source include/have_perfschema.inc --echo # --echo # 1. BF-BF conflict on MDL locks between: DROP TABLE t4 and INSERT t1 --echo # with foreign key references as below: --echo # - t1<-t2<-t3<-t4 --echo # # # Setup # --connection node_2 SET GLOBAL wsrep_slave_threads=2; CREATE TABLE t1 ( id INTEGER PRIMARY KEY, f2 INTEGER ); CREATE TABLE t2 ( id INT PRIMARY KEY, t1_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t1_id(t1_id), CONSTRAINT key_t1_id FOREIGN KEY (t1_id) REFERENCES t1 (id) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE TABLE t3 ( id INT PRIMARY KEY, t2_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t2_id(t2_id), CONSTRAINT key_t2_id FOREIGN KEY (t2_id) REFERENCES t2 (id) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE TABLE t4 ( id INT PRIMARY KEY, t3_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t3_id(t3_id), CONSTRAINT key_t3_id FOREIGN KEY (t3_id) REFERENCES t3 (id) ON UPDATE CASCADE ON DELETE CASCADE ); INSERT INTO t1 VALUES (1,0); INSERT INTO t1 VALUES (2,0); INSERT INTO t2 VALUES (1,1,1234); INSERT INTO t2 VALUES (2,2,1234); INSERT INTO t3 VALUES (1,1,1234); INSERT INTO t3 VALUES (2,2,1234); INSERT INTO t4 VALUES (1,1,1234); INSERT INTO t4 VALUES (2,2,1234); --let $fk_parent_query = DROP TABLE t4 --let $fk_child_query = INSERT INTO t1 VALUES (3,0) --let $fk_mdl_lock_num = 2 --source galera_multi_level_foreign_key_insert.inc # # Verify insert and drop table has succeded. # --connection node_2 --let $wait_condition = SELECT COUNT(*) = 3 FROM test.t1 --source include/wait_condition.inc select * from t1; select * from t2; select * from t3; --error ER_NO_SUCH_TABLE select * from t4; --connection node_1 select * from t1; select * from t2; select * from t3; --error ER_NO_SUCH_TABLE select * from t4; # # Cleanup # DROP TABLE t3, t2, t1; --echo # --echo # 2. BF-BF conflict on MDL locks between: --echo # ALTER TABLE t4 (whose parent table are t4 -> t3 -> t2 -> t1), and --echo # INSERT on t1. --echo # # # Setup # --connection node_2 SET GLOBAL wsrep_slave_threads=2; CREATE TABLE t1 ( id INTEGER PRIMARY KEY, f2 INTEGER ); CREATE TABLE t2 ( id INT PRIMARY KEY, t1_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t1_id(t1_id), CONSTRAINT key_t1_id FOREIGN KEY (t1_id) REFERENCES t1 (id) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE TABLE t3 ( id INT PRIMARY KEY, t2_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t2_id(t2_id), CONSTRAINT key_t2_id FOREIGN KEY (t2_id) REFERENCES t2 (id) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE TABLE t4 ( id INT PRIMARY KEY, t3_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t3_id(t3_id) ); INSERT INTO t1 VALUES (1,0); INSERT INTO t1 VALUES (2,0); INSERT INTO t2 VALUES (1,1,1234); INSERT INTO t2 VALUES (2,2,1234); INSERT INTO t3 VALUES (1,1,1234); INSERT INTO t3 VALUES (2,2,1234); INSERT INTO t4 VALUES (1,1,1234); INSERT INTO t4 VALUES (2,2,1234); # # ALTER TABLE t3 and wait for it to reach node_2 # --let $fk_parent_query = ALTER TABLE t4 ADD CONSTRAINT key_t3_id FOREIGN KEY (t3_id) REFERENCES t3 (id) ON UPDATE CASCADE ON DELETE CASCADE # # Issue a INSERT to table that references t1 # --let $fk_child_query = INSERT INTO t1 VALUES (3,0) --let $fk_mdl_lock_num = 2 --source galera_multi_level_foreign_key_insert.inc # # Verify insert has succeded. # --connection node_2 --let $wait_condition = SELECT COUNT(*) = 3 FROM test.t1 --source include/wait_condition.inc select * from t1; select * from t2; select * from t3; --connection node_1 select * from t1; select * from t2; select * from t3; # # Cleanup # DROP TABLE t4, t3, t2, t1; --echo # --echo # 3. BF-BF conflict on MDL locks between: --echo # CREATE TABLE t3 (whose parent table are t4 -> t3 -> t2 -> t1), and --echo # INSERT on t1. --echo # # # Setup # --connection node_2 SET GLOBAL wsrep_slave_threads=2; CREATE TABLE t1 ( id INTEGER PRIMARY KEY, f2 INTEGER ); CREATE TABLE t2 ( id INT PRIMARY KEY, t1_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t1_id(t1_id), CONSTRAINT key_t1_id FOREIGN KEY (t1_id) REFERENCES t1 (id) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE TABLE t3 ( id INT PRIMARY KEY, t2_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t2_id(t2_id), CONSTRAINT key_t2_id FOREIGN KEY (t2_id) REFERENCES t2 (id) ON UPDATE CASCADE ON DELETE CASCADE ); INSERT INTO t1 VALUES (1,0); INSERT INTO t1 VALUES (2,0); INSERT INTO t2 VALUES (1,1,1234); INSERT INTO t2 VALUES (2,2,1234); INSERT INTO t3 VALUES (1,1,1234); INSERT INTO t3 VALUES (2,2,1234); --let $fk_parent_query = CREATE TABLE t4 (id INT PRIMARY KEY, t3_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t3_id(t3_id), CONSTRAINT key_t3_id FOREIGN KEY (t3_id) REFERENCES t3 (id) ON UPDATE CASCADE ON DELETE CASCADE) --let $fk_child_query = INSERT INTO t1 VALUES (3,0) --let $fk_mdl_lock_num = 2 --source galera_multi_level_foreign_key_insert.inc # # Verify insert has succeded. # --connection node_2 --let $wait_condition = SELECT COUNT(*) = 3 FROM test.t1 --source include/wait_condition.inc select * from t1; select * from t2; select * from t3; --connection node_1 select * from t1; select * from t2; select * from t3; # # Cleanup # DROP TABLE t4, t3, t2, t1; --echo # --echo # 4. BF-BF conflict on MDL locks between: --echo # OPTIMIZE TABLE t2 (whose parent table are t2 -> t1), and --echo # INSERT t1. --echo # # # Setup # --connection node_2 SET GLOBAL wsrep_slave_threads=2; CREATE TABLE t1 ( id INTEGER PRIMARY KEY, f2 INTEGER ); CREATE TABLE t2 ( id INT PRIMARY KEY, t1_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t1_id(t1_id), CONSTRAINT key_t1_id FOREIGN KEY (t1_id) REFERENCES t1 (id) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE TABLE t3 ( id INT PRIMARY KEY, t2_id INT NOT NULL, f2 INTEGER NOT NULL, KEY key_t2_id(t2_id), CONSTRAINT key_t2_id FOREIGN KEY (t2_id) REFERENCES t2 (id) ON UPDATE CASCADE ON DELETE CASCADE ); INSERT INTO t1 VALUES (1,0); INSERT INTO t1 VALUES (2,0); INSERT INTO t2 VALUES (1,1,1234); INSERT INTO t2 VALUES (2,2,1234); INSERT INTO t3 VALUES (1,1,1234); INSERT INTO t3 VALUES (2,2,1234); --let $fk_parent_query = OPTIMIZE TABLE t3 --let $fk_child_query = INSERT INTO t1 VALUES (3,0) --let $fk_mdl_lock_num = 2 --source galera_multi_level_foreign_key_insert.inc # # Verify insert has succeded. # --connection node_2 --let $wait_condition = SELECT COUNT(*) = 3 FROM test.t1 --source include/wait_condition.inc select * from t1; select * from t2; --connection node_1 select * from t1; select * from t2; # # Cleanup # DROP TABLE t3, t2, t1;