mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 02:46:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| --source include/galera_cluster.inc
 | |
| --source include/big_test.inc
 | |
| --source include/have_debug_sync.inc
 | |
| 
 | |
| #
 | |
| # To have real concurrent CTAS this test uses DEBUG_SYNC
 | |
| #
 | |
| 
 | |
| --connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
 | |
| --connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1
 | |
| --connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
 | |
| --connect node_2b, 127.0.0.1, root, , test, $NODE_MYPORT_2
 | |
| 
 | |
| --connection node_1
 | |
| #
 | |
| # Send CTAS it will block before open_tables call
 | |
| #
 | |
| SET DEBUG_SYNC = 'wsrep_create_table_as_select WAIT_FOR continue';
 | |
| --send CREATE table t1 as SELECT SLEEP(0.1);
 | |
| 
 | |
| --connection node_1a
 | |
| #
 | |
| # Wait for CTAS to block
 | |
| #
 | |
| --echo # Wait until CTAS is on debug sync point
 | |
| --let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'debug sync point: wsrep_create_table_as_select'
 | |
| --source include/wait_condition.inc
 | |
| 
 | |
| --connection node_1b
 | |
| #
 | |
| # Block node_1 applier
 | |
| #
 | |
| SET SESSION wsrep_sync_wait = 0;
 | |
| SET GLOBAL debug_dbug = '+d,sync.wsrep_apply_cb';
 | |
| 
 | |
| #
 | |
| # Send concurrent CTAS it will block on applier
 | |
| #
 | |
| --connection node_2
 | |
| --send CREATE table t1 as SELECT SLEEP(0.2);
 | |
| 
 | |
| #
 | |
| # Wait until second CTAS is blocked
 | |
| #
 | |
| --connection node_1b
 | |
| SET SESSION debug_sync = 'now WAIT_FOR sync.wsrep_apply_cb_reached';
 | |
| 
 | |
| --echo # Signal first CTAS to continue and wait until CTAS has executed
 | |
| SET DEBUG_SYNC= 'now SIGNAL continue';
 | |
| --let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'Creating table	CREATE table t1 as SELECT SLEEP(0.1)'
 | |
| --source include/wait_condition.inc
 | |
| 
 | |
| --connection node_2b
 | |
| --echo # Wait first CTAS to replicate
 | |
| --let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'
 | |
| --source include/wait_condition.inc
 | |
| SELECT * FROM t1;
 | |
| 
 | |
| --connection node_1b
 | |
| #
 | |
| # Release second CTAS and cleanup
 | |
| #
 | |
| SET GLOBAL debug_dbug= '';
 | |
| SET DEBUG_SYNC = 'now SIGNAL signal.wsrep_apply_cb';
 | |
| #
 | |
| # Wait until second CTAS continues
 | |
| #
 | |
| --let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'debug sync point: now%'
 | |
| --source include/wait_condition.inc
 | |
| #
 | |
| # Wait until second CTAS finishes
 | |
| #
 | |
| --connection node_2a
 | |
| --let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'Creating table	CREATE table t1 as SELECT SLEEP(0.2)'
 | |
| --source include/wait_condition.inc
 | |
| #
 | |
| # Cleanup
 | |
| #
 | |
| --connection node_1b
 | |
| SET DEBUG_SYNC= 'RESET';
 | |
| #
 | |
| # Verify that at least one is successful
 | |
| #
 | |
| --connection node_2
 | |
| --reap
 | |
| SELECT * FROM t1;
 | |
| 
 | |
| --connection node_1
 | |
| --error 0,ER_QUERY_INTERRUPTED,ER_LOCK_DEADLOCK
 | |
| --reap
 | |
| SELECT * FROM t1;
 | |
| DROP TABLE t1;
 | |
| 
 | |
| --disconnect node_1a
 | |
| --disconnect node_1b
 | |
| --disconnect node_2a
 | |
| --disconnect node_2b
 | |
| 
 | |
| --source include/galera_end.inc
 | |
| --echo # End of test
 | 
