mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 20:36:16 +01:00 
			
		
		
		
	Test was using after certification sync point when it was intended to use before certification sync point. This caused sporadic failures. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
		
			
				
	
	
		
			246 lines
		
	
	
	
		
			7.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
	
		
			7.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
connection node_2;
 | 
						|
connection node_1;
 | 
						|
connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
 | 
						|
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) ON DELETE CASCADE);
 | 
						|
INSERT INTO p VALUES (1, 0);
 | 
						|
INSERT INTO p VALUES (2, 0);
 | 
						|
INSERT INTO c VALUES (1, 1, 0);
 | 
						|
connection node_1a;
 | 
						|
connection node_1;
 | 
						|
SET AUTOCOMMIT=ON;
 | 
						|
START TRANSACTION;
 | 
						|
UPDATE c 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 p WHERE f1 = 1;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
 | 
						|
connection node_1;
 | 
						|
SET SESSION DEBUG_SYNC = "wsrep_before_certification SIGNAL before_certification_reached WAIT_FOR continue_before_certification";
 | 
						|
COMMIT;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR before_certification_reached";
 | 
						|
SET SESSION DEBUG_SYNC = 'now SIGNAL continue_before_certification';
 | 
						|
SET SESSION 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
 | 
						|
SET DEBUG_SYNC = 'RESET';
 | 
						|
connection node_2;
 | 
						|
SELECT * FROM p;
 | 
						|
f1	f2
 | 
						|
2	0
 | 
						|
SELECT * FROM c;
 | 
						|
f1	p_id	f2
 | 
						|
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) ON UPDATE CASCADE);
 | 
						|
INSERT INTO p VALUES (1, 0);
 | 
						|
INSERT INTO p VALUES (2, 0);
 | 
						|
INSERT INTO c VALUES (1, 1, 0);
 | 
						|
connection node_1a;
 | 
						|
connection node_1;
 | 
						|
SET AUTOCOMMIT=ON;
 | 
						|
START TRANSACTION;
 | 
						|
UPDATE c SET f2=2 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 p set f1=11 WHERE f1 = 1;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
 | 
						|
connection node_1;
 | 
						|
SET SESSION DEBUG_SYNC = "wsrep_before_certification SIGNAL before_certification_reached WAIT_FOR continue_before_certification";
 | 
						|
COMMIT;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR before_certification_reached";
 | 
						|
SET SESSION DEBUG_SYNC = 'now SIGNAL continue_before_certification';
 | 
						|
SET SESSION 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
 | 
						|
SET DEBUG_SYNC = 'RESET';
 | 
						|
connection node_2;
 | 
						|
SELECT * FROM p;
 | 
						|
f1	f2
 | 
						|
2	0
 | 
						|
11	0
 | 
						|
SELECT * FROM c;
 | 
						|
f1	p_id	f2
 | 
						|
1	11	0
 | 
						|
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) ON UPDATE CASCADE);
 | 
						|
INSERT INTO p VALUES (1, 0);
 | 
						|
INSERT INTO p VALUES (2, 0);
 | 
						|
INSERT INTO c VALUES (1, 1, 0);
 | 
						|
connection node_1a;
 | 
						|
connection node_1;
 | 
						|
SET AUTOCOMMIT=ON;
 | 
						|
START TRANSACTION;
 | 
						|
UPDATE c SET p_id=2 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 p set f1=11 WHERE f1 = 1;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
 | 
						|
connection node_1;
 | 
						|
SET SESSION DEBUG_SYNC = "wsrep_before_certification SIGNAL before_certification_reached WAIT_FOR continue_before_certification";
 | 
						|
COMMIT;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR before_certification_reached";
 | 
						|
SET SESSION DEBUG_SYNC = 'now SIGNAL continue_before_certification';
 | 
						|
SET SESSION 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
 | 
						|
SET DEBUG_SYNC = 'RESET';
 | 
						|
connection node_2;
 | 
						|
SELECT * FROM p;
 | 
						|
f1	f2
 | 
						|
2	0
 | 
						|
11	0
 | 
						|
SELECT * FROM c;
 | 
						|
f1	p_id	f2
 | 
						|
1	11	0
 | 
						|
connection node_1a;
 | 
						|
connection node_1;
 | 
						|
SET AUTOCOMMIT=ON;
 | 
						|
START TRANSACTION;
 | 
						|
UPDATE p set f1=21 WHERE f1 = 11;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION wsrep_sync_wait = 0;
 | 
						|
SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb";
 | 
						|
connection node_2;
 | 
						|
UPDATE c SET p_id=2 where f1=1;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
 | 
						|
connection node_1;
 | 
						|
SET SESSION DEBUG_SYNC = "wsrep_before_certification SIGNAL before_certification_reached WAIT_FOR continue_before_certification";
 | 
						|
COMMIT;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR before_certification_reached";
 | 
						|
SET SESSION DEBUG_SYNC = 'now SIGNAL continue_before_certification';
 | 
						|
SET SESSION 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
 | 
						|
SET DEBUG_SYNC = 'RESET';
 | 
						|
connection node_2;
 | 
						|
SELECT * FROM p;
 | 
						|
f1	f2
 | 
						|
2	0
 | 
						|
11	0
 | 
						|
SELECT * FROM c;
 | 
						|
f1	p_id	f2
 | 
						|
1	2	0
 | 
						|
DROP TABLE c;
 | 
						|
DROP TABLE p;
 | 
						|
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));
 | 
						|
INSERT INTO p1 VALUES (1, 0);
 | 
						|
INSERT INTO p2 VALUES (1, 0);
 | 
						|
INSERT INTO c VALUES (1, 1, 1, 0);
 | 
						|
connection node_1a;
 | 
						|
connection node_1;
 | 
						|
SET AUTOCOMMIT=ON;
 | 
						|
START TRANSACTION;
 | 
						|
UPDATE p2 SET f2=2 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 p1 WHERE f1 = 1;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
 | 
						|
connection node_1;
 | 
						|
SET SESSION DEBUG_SYNC = "wsrep_before_certification SIGNAL before_certification_reached WAIT_FOR continue_before_certification";
 | 
						|
COMMIT;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR before_certification_reached";
 | 
						|
SET SESSION DEBUG_SYNC = 'now SIGNAL continue_before_certification';
 | 
						|
SET SESSION DEBUG_SYNC = 'now SIGNAL signal.wsrep_apply_cb';
 | 
						|
SET GLOBAL DEBUG_DBUG = "";
 | 
						|
SET DEBUG_SYNC = 'RESET';
 | 
						|
connection node_1;
 | 
						|
SET DEBUG_SYNC = 'RESET';
 | 
						|
connection node_2;
 | 
						|
SELECT * FROM p1;
 | 
						|
f1	f2
 | 
						|
SELECT * FROM p2;
 | 
						|
f1	f2
 | 
						|
1	2
 | 
						|
SELECT * FROM c;
 | 
						|
f1	p1_id	p2_id	f2
 | 
						|
DROP TABLE c;
 | 
						|
DROP TABLE p1;
 | 
						|
DROP TABLE p2;
 | 
						|
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);
 | 
						|
connection node_1a;
 | 
						|
connection node_1;
 | 
						|
SET AUTOCOMMIT=ON;
 | 
						|
START TRANSACTION;
 | 
						|
DELETE FROM p2 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 p1 WHERE f1=1;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
 | 
						|
connection node_1;
 | 
						|
SET SESSION DEBUG_SYNC = "wsrep_before_certification SIGNAL before_certification_reached WAIT_FOR continue_before_certification";
 | 
						|
COMMIT;
 | 
						|
connection node_1a;
 | 
						|
SET SESSION DEBUG_SYNC = "now WAIT_FOR before_certification_reached";
 | 
						|
SET SESSION DEBUG_SYNC = 'now SIGNAL continue_before_certification';
 | 
						|
SET SESSION 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
 | 
						|
SET DEBUG_SYNC = 'RESET';
 | 
						|
connection node_2;
 | 
						|
SELECT * FROM p1;
 | 
						|
f1	f2
 | 
						|
SELECT * FROM p2;
 | 
						|
f1	f2
 | 
						|
1	0
 | 
						|
SELECT * FROM c;
 | 
						|
f1	p1_id	p2_id	f2
 | 
						|
DROP TABLE c,p1,p2;
 |