MW-402 cascading FK issues, 5.6 version
Added one more test scenario for two cascading parent tables
This commit is contained in:
parent
c6251e36fc
commit
b5802888e3
@ -118,8 +118,10 @@ DROP TABLE c;
|
|||||||
DROP TABLE p;
|
DROP TABLE p;
|
||||||
CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||||
CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||||
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p1_id INTEGER, p2_id INTEGER, f2 INTEGER,
|
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p1_id INTEGER, p2_id INTEGER,
|
||||||
CONSTRAINT fk_1 FOREIGN KEY (p1_id) REFERENCES p1 (f1) ON DELETE CASCADE,
|
f2 INTEGER,
|
||||||
|
CONSTRAINT fk_1 FOREIGN KEY (p1_id) REFERENCES p1 (f1)
|
||||||
|
ON DELETE CASCADE,
|
||||||
CONSTRAINT fk_2 FOREIGN KEY (p2_id) REFERENCES p2 (f1));
|
CONSTRAINT fk_2 FOREIGN KEY (p2_id) REFERENCES p2 (f1));
|
||||||
INSERT INTO p1 VALUES (1, 0);
|
INSERT INTO p1 VALUES (1, 0);
|
||||||
INSERT INTO p2 VALUES (1, 0);
|
INSERT INTO p2 VALUES (1, 0);
|
||||||
@ -150,3 +152,41 @@ f1 p1_id p2_id f2
|
|||||||
DROP TABLE c;
|
DROP TABLE c;
|
||||||
DROP TABLE p1;
|
DROP TABLE p1;
|
||||||
DROP TABLE p2;
|
DROP TABLE p2;
|
||||||
|
CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||||
|
CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||||
|
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p1_id INTEGER, p2_id INTEGER,
|
||||||
|
f2 INTEGER,
|
||||||
|
CONSTRAINT fk_1 FOREIGN KEY (p1_id) REFERENCES p1 (f1)
|
||||||
|
ON DELETE CASCADE,
|
||||||
|
CONSTRAINT fk_2 FOREIGN KEY (p2_id) REFERENCES p2 (f1)
|
||||||
|
ON DELETE CASCADE);
|
||||||
|
INSERT INTO p1 VALUES (1, 0);
|
||||||
|
INSERT INTO p2 VALUES (1, 0);
|
||||||
|
INSERT INTO c VALUES (1, 1, 1, 0);
|
||||||
|
SET AUTOCOMMIT=ON;
|
||||||
|
START TRANSACTION;
|
||||||
|
DELETE FROM p2 WHERE f1=1;
|
||||||
|
SET SESSION wsrep_sync_wait = 0;
|
||||||
|
SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync';
|
||||||
|
DELETE FROM p1 WHERE f1=1;
|
||||||
|
SET SESSION wsrep_on = 0;
|
||||||
|
SET SESSION wsrep_on = 1;
|
||||||
|
SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||||
|
SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_enter_sync';
|
||||||
|
COMMIT;
|
||||||
|
SET SESSION wsrep_on = 0;
|
||||||
|
SET SESSION wsrep_on = 1;
|
||||||
|
SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync';
|
||||||
|
SET GLOBAL wsrep_provider_options = 'signal=local_monitor_enter_sync';
|
||||||
|
SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
SELECT * FROM p1;
|
||||||
|
f1 f2
|
||||||
|
SELECT * FROM p2;
|
||||||
|
f1 f2
|
||||||
|
1 0
|
||||||
|
SELECT * FROM c;
|
||||||
|
f1 p1_id p2_id f2
|
||||||
|
DROP TABLE c;
|
||||||
|
DROP TABLE p1;
|
||||||
|
DROP TABLE p2;
|
||||||
|
@ -137,7 +137,6 @@ SELECT * FROM c;
|
|||||||
DROP TABLE c;
|
DROP TABLE c;
|
||||||
DROP TABLE p;
|
DROP TABLE p;
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# CASCADE DELETE tests with two parent tables
|
# CASCADE DELETE tests with two parent tables
|
||||||
# Here we cause cascaded operation on child table through
|
# Here we cause cascaded operation on child table through
|
||||||
@ -153,11 +152,12 @@ DROP TABLE p;
|
|||||||
|
|
||||||
CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||||
CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||||
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p1_id INTEGER, p2_id INTEGER, f2 INTEGER,
|
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p1_id INTEGER, p2_id INTEGER,
|
||||||
CONSTRAINT fk_1 FOREIGN KEY (p1_id) REFERENCES p1 (f1) ON DELETE CASCADE,
|
f2 INTEGER,
|
||||||
|
CONSTRAINT fk_1 FOREIGN KEY (p1_id) REFERENCES p1 (f1)
|
||||||
|
ON DELETE CASCADE,
|
||||||
CONSTRAINT fk_2 FOREIGN KEY (p2_id) REFERENCES p2 (f1));
|
CONSTRAINT fk_2 FOREIGN KEY (p2_id) REFERENCES p2 (f1));
|
||||||
|
|
||||||
|
|
||||||
INSERT INTO p1 VALUES (1, 0);
|
INSERT INTO p1 VALUES (1, 0);
|
||||||
INSERT INTO p2 VALUES (1, 0);
|
INSERT INTO p2 VALUES (1, 0);
|
||||||
|
|
||||||
@ -173,7 +173,51 @@ INSERT INTO c VALUES (1, 1, 1, 0);
|
|||||||
--connection node_1
|
--connection node_1
|
||||||
--reap
|
--reap
|
||||||
|
|
||||||
# same as previous, but statements in different order
|
--connection node_2
|
||||||
|
SELECT * FROM p1;
|
||||||
|
SELECT * FROM p2;
|
||||||
|
SELECT * FROM c;
|
||||||
|
|
||||||
|
DROP TABLE c;
|
||||||
|
DROP TABLE p1;
|
||||||
|
DROP TABLE p2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# CASCADE DELETE tests with two parent tables
|
||||||
|
# Here we cause cascaded operation on child table through
|
||||||
|
# one parent table and issue other delete operation through the
|
||||||
|
# other parent table. The cascade progresses to same child table row where
|
||||||
|
# we should see the conflict to happen
|
||||||
|
#
|
||||||
|
# As a result, the update on p2 should fail
|
||||||
|
#
|
||||||
|
--connection node_1
|
||||||
|
|
||||||
|
CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||||
|
CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||||
|
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p1_id INTEGER, p2_id INTEGER,
|
||||||
|
f2 INTEGER,
|
||||||
|
CONSTRAINT fk_1 FOREIGN KEY (p1_id) REFERENCES p1 (f1)
|
||||||
|
ON DELETE CASCADE,
|
||||||
|
CONSTRAINT fk_2 FOREIGN KEY (p2_id) REFERENCES p2 (f1)
|
||||||
|
ON DELETE CASCADE);
|
||||||
|
|
||||||
|
INSERT INTO p1 VALUES (1, 0);
|
||||||
|
INSERT INTO p2 VALUES (1, 0);
|
||||||
|
|
||||||
|
INSERT INTO c VALUES (1, 1, 1, 0);
|
||||||
|
|
||||||
|
--let $mw_369_parent_query = DELETE FROM p2 WHERE f1=1
|
||||||
|
--let $mw_369_child_query = DELETE FROM p1 WHERE f1=1
|
||||||
|
|
||||||
|
--connection node_1a
|
||||||
|
--source MW-369.inc
|
||||||
|
|
||||||
|
# Commit succeeds
|
||||||
|
--connection node_1
|
||||||
|
--error ER_LOCK_DEADLOCK
|
||||||
|
--reap
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
SELECT * FROM p1;
|
SELECT * FROM p1;
|
||||||
SELECT * FROM p2;
|
SELECT * FROM p2;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user