403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/local/mysql/mysql-test/suite/galera/t/galera_multi_level_fk_ddl_insert.test
#
# 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;

Youez - 2016 - github.com/yon3zu
LinuXploit