mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 20:36:16 +01:00 
			
		
		
		
	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>
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
--source include/galera_cluster.inc
 | 
						|
--source include/have_innodb.inc
 | 
						|
--source include/have_debug_sync.inc
 | 
						|
--source include/galera_have_debug_sync.inc
 | 
						|
 | 
						|
#
 | 
						|
# Testing CREATE TABLE statement having foreign key constraint,
 | 
						|
# while having concurrent DML for the referenced parent table.
 | 
						|
#
 | 
						|
# The replication of CREATE TABLE should have all referenced table names
 | 
						|
# appended in the key set, and DML on the parent table should be considered as
 | 
						|
# conflicting.
 | 
						|
# 
 | 
						|
# There are related test scenarios in test mysql-wsrep#332, where a regular table
 | 
						|
# is altered by adding new foreign key reference.
 | 
						|
#
 | 
						|
# We use concurrency facility of test MW-369 to setup the conflict between DDL and DML
 | 
						|
#
 | 
						|
 | 
						|
# Open connection node_1a here, we will use it later
 | 
						|
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
 | 
						|
 | 
						|
# create FK parent table
 | 
						|
--connection node_1
 | 
						|
CREATE TABLE p (id INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
 | 
						|
 | 
						|
# setup conflicting queries
 | 
						|
--let $mw_369_parent_query = INSERT INTO p VALUES(1,0)
 | 
						|
--let $mw_369_child_query = CREATE TABLE c(id INT NOT NULL PRIMARY KEY, p_id INT,  FOREIGN KEY (p_id)  REFERENCES p(id)  ON DELETE CASCADE) ENGINE=InnoDB
 | 
						|
 | 
						|
--connection node_1
 | 
						|
SET AUTOCOMMIT=ON;
 | 
						|
START TRANSACTION;
 | 
						|
--eval $mw_369_parent_query
 | 
						|
 | 
						|
#
 | 
						|
# Block the $mw_369_child_query from node_2
 | 
						|
#
 | 
						|
# --connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
 | 
						|
--connection node_1a
 | 
						|
SET SESSION wsrep_sync_wait = 0;
 | 
						|
--let $galera_sync_point = apply_monitor_slave_enter_sync
 | 
						|
--source include/galera_set_sync_point.inc
 | 
						|
 | 
						|
#
 | 
						|
# insert client row, which will make it impossible to replay the
 | 
						|
# delete on parent
 | 
						|
#
 | 
						|
--connection node_2
 | 
						|
--eval $mw_369_child_query
 | 
						|
 | 
						|
#
 | 
						|
# Wait until $mw_369_child_query from node_2 reaches the sync point and
 | 
						|
# block the 'COMMIT' from node_1 before it certifies.
 | 
						|
#
 | 
						|
--connection node_1a
 | 
						|
--source include/galera_wait_sync_point.inc
 | 
						|
--source include/galera_clear_sync_point.inc
 | 
						|
 | 
						|
--connection node_1
 | 
						|
--send COMMIT
 | 
						|
 | 
						|
--connection node_1a
 | 
						|
--let $galera_sync_point = apply_monitor_slave_enter_sync
 | 
						|
--source include/galera_signal_sync_point.inc
 | 
						|
--source include/galera_clear_sync_point.inc
 | 
						|
 | 
						|
# Expect certification failure
 | 
						|
--connection node_1
 | 
						|
--error ER_LOCK_DEADLOCK
 | 
						|
--reap
 | 
						|
 | 
						|
--connection node_1a
 | 
						|
SET SESSION DEBUG_SYNC = "RESET";
 | 
						|
 | 
						|
--connection node_2
 | 
						|
SELECT * FROM p;
 | 
						|
SELECT * FROM c;
 | 
						|
 | 
						|
DROP TABLE c;
 | 
						|
DROP TABLE p;
 |