mirror of
https://github.com/MariaDB/server.git
synced 2025-02-09 23:24:11 +01:00
![Jan Lindström](/assets/img/avatar_default.png)
Tests using MW-369.inc sometimes hanged after signaling two debug sync points inside a Galera library. Replaced Galera library sync point with server code sync point when possible and added more wait_conditions to make sure we are in correct state. Tests effected: MW-369, MW-402, MDEV-27276, and mysql-wsrep#332. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
270 lines
8 KiB
Text
270 lines
8 KiB
Text
connection node_2;
|
|
connection node_1;
|
|
CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
|
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER,
|
|
CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f1)) ;
|
|
INSERT INTO p VALUES (1, 0);
|
|
INSERT INTO p VALUES (2, 0);
|
|
connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
|
connection node_1;
|
|
SET AUTOCOMMIT=ON;
|
|
START TRANSACTION;
|
|
DELETE FROM p WHERE f1 = 1;
|
|
connection node_1a;
|
|
SET SESSION wsrep_sync_wait = 0;
|
|
SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb";
|
|
connection node_2;
|
|
INSERT INTO c VALUES (1, 1);
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
|
|
connection node_1;
|
|
SET DEBUG_SYNC = "wsrep_after_certification SIGNAL after_certification_reached WAIT_FOR continue_after_certification";
|
|
COMMIT;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR after_certification_reached";
|
|
SET DEBUG_SYNC = 'now SIGNAL continue_after_certification';
|
|
SET DEBUG_SYNC = 'now SIGNAL signal.wsrep_apply_cb';
|
|
SET GLOBAL DEBUG_DBUG = "";
|
|
SET DEBUG_SYNC = 'RESET';
|
|
connection node_1;
|
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
|
connection node_2;
|
|
SELECT * FROM p;
|
|
f1 f2
|
|
1 0
|
|
2 0
|
|
SELECT * FROM c;
|
|
f1 p_id
|
|
1 1
|
|
DROP TABLE c;
|
|
DROP TABLE p;
|
|
connection node_1;
|
|
CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
|
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER,
|
|
f2 INTEGER,
|
|
CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f1)) ;
|
|
INSERT INTO p VALUES (1, 0);
|
|
INSERT INTO p VALUES (2, 0);
|
|
INSERT INTO c VALUES (1, 1, 0);
|
|
connection node_1;
|
|
SET AUTOCOMMIT=ON;
|
|
START TRANSACTION;
|
|
UPDATE p SET f2 = 1 WHERE f1 = 1;
|
|
connection node_1a;
|
|
SET SESSION wsrep_sync_wait = 0;
|
|
SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb";
|
|
connection node_2;
|
|
UPDATE c SET f2 = 1 WHERE f1 = 1;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
|
|
connection node_1;
|
|
SET DEBUG_SYNC = "wsrep_after_certification SIGNAL after_certification_reached WAIT_FOR continue_after_certification";
|
|
COMMIT;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR after_certification_reached";
|
|
SET DEBUG_SYNC = 'now SIGNAL continue_after_certification';
|
|
SET DEBUG_SYNC = 'now SIGNAL signal.wsrep_apply_cb';
|
|
SET GLOBAL DEBUG_DBUG = "";
|
|
SET DEBUG_SYNC = 'RESET';
|
|
connection node_1;
|
|
connection node_2;
|
|
SELECT * FROM p;
|
|
f1 f2
|
|
1 1
|
|
2 0
|
|
SELECT * FROM c;
|
|
f1 p_id f2
|
|
1 1 1
|
|
DROP TABLE c;
|
|
DROP TABLE p;
|
|
connection node_1;
|
|
CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
|
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER,
|
|
CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f1)) ;
|
|
INSERT INTO p VALUES (1, 0);
|
|
INSERT INTO p VALUES (2, 0);
|
|
INSERT INTO c VALUES (1, 1);
|
|
connection node_1;
|
|
SET AUTOCOMMIT=ON;
|
|
START TRANSACTION;
|
|
UPDATE p SET f2 = 1 WHERE f1 = 1;
|
|
connection node_1a;
|
|
SET SESSION wsrep_sync_wait = 0;
|
|
SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb";
|
|
connection node_2;
|
|
DELETE FROM c WHERE f1 = 1;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
|
|
connection node_1;
|
|
SET DEBUG_SYNC = "wsrep_after_certification SIGNAL after_certification_reached WAIT_FOR continue_after_certification";
|
|
COMMIT;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR after_certification_reached";
|
|
SET DEBUG_SYNC = 'now SIGNAL continue_after_certification';
|
|
SET DEBUG_SYNC = 'now SIGNAL signal.wsrep_apply_cb';
|
|
SET GLOBAL DEBUG_DBUG = "";
|
|
SET DEBUG_SYNC = 'RESET';
|
|
connection node_1;
|
|
connection node_2;
|
|
SELECT * FROM p;
|
|
f1 f2
|
|
1 1
|
|
2 0
|
|
SELECT * FROM c;
|
|
f1 p_id
|
|
DROP TABLE c;
|
|
DROP TABLE p;
|
|
CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER UNIQUE KEY) ENGINE=INNODB;
|
|
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER,
|
|
CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f2)) ;
|
|
INSERT INTO p VALUES (1, 0);
|
|
connection node_1;
|
|
SET AUTOCOMMIT=ON;
|
|
START TRANSACTION;
|
|
UPDATE p SET f2 = 1 WHERE f1 = 1;
|
|
connection node_1a;
|
|
SET SESSION wsrep_sync_wait = 0;
|
|
SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb";
|
|
connection node_2;
|
|
INSERT INTO c VALUES (1, 0);;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
|
|
connection node_1;
|
|
SET DEBUG_SYNC = "wsrep_after_certification SIGNAL after_certification_reached WAIT_FOR continue_after_certification";
|
|
COMMIT;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR after_certification_reached";
|
|
SET DEBUG_SYNC = 'now SIGNAL continue_after_certification';
|
|
SET DEBUG_SYNC = 'now SIGNAL signal.wsrep_apply_cb';
|
|
SET GLOBAL DEBUG_DBUG = "";
|
|
SET DEBUG_SYNC = 'RESET';
|
|
connection node_1;
|
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
|
connection node_2;
|
|
SELECT * FROM p;
|
|
f1 f2
|
|
1 0
|
|
SELECT * FROM c;
|
|
f1 p_id
|
|
1 0
|
|
DROP TABLE c;
|
|
DROP TABLE p;
|
|
CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
|
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER, f2 INTEGER,
|
|
CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES p (f1)
|
|
ON DELETE CASCADE) ;
|
|
INSERT INTO p VALUES (1, 0);
|
|
INSERT INTO p VALUES (2, 0);
|
|
INSERT INTO c VALUES (1, 1, 0);
|
|
connection node_1;
|
|
SET AUTOCOMMIT=ON;
|
|
START TRANSACTION;
|
|
DELETE FROM p WHERE f1 = 1;
|
|
connection node_1a;
|
|
SET SESSION wsrep_sync_wait = 0;
|
|
SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb";
|
|
connection node_2;
|
|
UPDATE c SET f2 = 1 WHERE f1 = 1;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
|
|
connection node_1;
|
|
SET DEBUG_SYNC = "wsrep_after_certification SIGNAL after_certification_reached WAIT_FOR continue_after_certification";
|
|
COMMIT;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR after_certification_reached";
|
|
SET DEBUG_SYNC = 'now SIGNAL continue_after_certification';
|
|
SET DEBUG_SYNC = 'now SIGNAL signal.wsrep_apply_cb';
|
|
SET GLOBAL DEBUG_DBUG = "";
|
|
SET DEBUG_SYNC = 'RESET';
|
|
connection node_1;
|
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
|
connection node_2;
|
|
SELECT * FROM p;
|
|
f1 f2
|
|
1 0
|
|
2 0
|
|
SELECT * FROM c;
|
|
f1 p_id f2
|
|
1 1 1
|
|
DROP TABLE c;
|
|
DROP TABLE p;
|
|
#
|
|
# Start of 10.4 tests
|
|
#
|
|
connection node_1;
|
|
CREATE TABLE pf (f1 INTEGER PRIMARY KEY) ENGINE=INNODB;
|
|
CREATE TABLE cf (
|
|
f1 INTEGER PRIMARY KEY,
|
|
p_id INTEGER,
|
|
CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES pf (f1)
|
|
);
|
|
INSERT INTO pf VALUES (1);
|
|
connection node_1;
|
|
SET AUTOCOMMIT=ON;
|
|
START TRANSACTION;
|
|
INSERT INTO cf (f1, p_id) VALUES (10, 1);
|
|
connection node_1a;
|
|
SET SESSION wsrep_sync_wait = 0;
|
|
SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb";
|
|
connection node_2;
|
|
INSERT INTO cf (f1, p_id) VALUES (20, 1);
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
|
|
connection node_1;
|
|
SET DEBUG_SYNC = "wsrep_after_certification SIGNAL after_certification_reached WAIT_FOR continue_after_certification";
|
|
COMMIT;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR after_certification_reached";
|
|
SET DEBUG_SYNC = 'now SIGNAL continue_after_certification';
|
|
SET DEBUG_SYNC = 'now SIGNAL signal.wsrep_apply_cb';
|
|
SET GLOBAL DEBUG_DBUG = "";
|
|
SET DEBUG_SYNC = 'RESET';
|
|
connection node_1;
|
|
connection node_2;
|
|
SELECT * FROM pf;
|
|
f1
|
|
1
|
|
SELECT * FROM cf;
|
|
f1 p_id
|
|
10 1
|
|
20 1
|
|
DROP TABLE cf;
|
|
DROP TABLE pf;
|
|
connection node_1;
|
|
CREATE TABLE pg (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
|
CREATE TABLE cg (f1 INTEGER PRIMARY KEY, p_id INTEGER,
|
|
f2 INTEGER,
|
|
CONSTRAINT fk_1 FOREIGN KEY (p_id) REFERENCES pg (f1)) ;
|
|
INSERT INTO pg VALUES (1, 0);
|
|
INSERT INTO pg VALUES (2, 0);
|
|
connection node_1;
|
|
SET AUTOCOMMIT=ON;
|
|
START TRANSACTION;
|
|
UPDATE pg SET f2 = 1 WHERE f1 = 1;
|
|
connection node_1a;
|
|
SET SESSION wsrep_sync_wait = 0;
|
|
SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb";
|
|
connection node_2;
|
|
INSERT INTO cg VALUES (1, 1, 0);
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
|
|
connection node_1;
|
|
SET DEBUG_SYNC = "wsrep_after_certification SIGNAL after_certification_reached WAIT_FOR continue_after_certification";
|
|
COMMIT;
|
|
connection node_1a;
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR after_certification_reached";
|
|
SET DEBUG_SYNC = 'now SIGNAL continue_after_certification';
|
|
SET DEBUG_SYNC = 'now SIGNAL signal.wsrep_apply_cb';
|
|
SET GLOBAL DEBUG_DBUG = "";
|
|
SET DEBUG_SYNC = 'RESET';
|
|
connection node_1;
|
|
connection node_2;
|
|
SELECT * FROM pg;
|
|
f1 f2
|
|
1 1
|
|
2 0
|
|
SELECT * FROM cg;
|
|
f1 p_id f2
|
|
1 1 0
|
|
DROP TABLE cg;
|
|
DROP TABLE pg;
|