mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 19:06:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			95 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| --echo # MDEV-31448 OOO finish event group by killed worker
 | |
| # The test demonstrates how a killed worker access gco lists
 | |
| # in finish_event_group() out-of-order to fire
 | |
| #       DBUG_ASSERT(!tmp_gco->next_gco || tmp_gco->last_sub_id > sub_id);
 | |
| # in the buggy version.
 | |
| 
 | |
| --echo # Initialize test data
 | |
| --connection master
 | |
| create table t1 (a int) engine=innodb;
 | |
| create table t2 (a int) engine=innodb;
 | |
| 
 | |
| insert into t1 values (1);
 | |
| --source include/save_master_gtid.inc
 | |
| 
 | |
| --connection slave
 | |
| call mtr.add_suppression("Connection was killed");
 | |
| call mtr.add_suppression("Can.t find record");
 | |
| 
 | |
| --source include/sync_with_master_gtid.inc
 | |
| --source include/stop_slave.inc
 | |
| set @save.slave_parallel_threads= @@global.slave_parallel_threads;
 | |
| set @save.slave_parallel_mode= @@global.slave_parallel_mode;
 | |
| set @@global.slave_parallel_threads= 3;
 | |
| set @@global.slave_parallel_mode= OPTIMISTIC;
 | |
| 
 | |
| --connection slave1
 | |
| begin;
 | |
| update t1 set a=2 where a=1;
 | |
| 
 | |
| --connection master
 | |
| set @old_dbug= @@session.debug_dbug;
 | |
| set @@session.debug_dbug="+d,binlog_force_commit_id";
 | |
| 
 | |
| # GCO 1
 | |
| set @commit_id= 10000;
 | |
| # T1
 | |
| update t1 set a=2 where a=1;
 | |
| 
 | |
| if (!$killed_trx_commits)
 | |
| {
 | |
| set @commit_id= 10001;
 | |
| # T2
 | |
| set statement skip_parallel_replication=1 for  insert into t2 values (1);
 | |
| }
 | |
| 
 | |
| if ($killed_trx_commits)
 | |
| {
 | |
| insert into t2 values (1);
 | |
| }
 | |
| # GCO 2
 | |
| # T3
 | |
| drop table t2;
 | |
| 
 | |
| --connection slave
 | |
| --source include/start_slave.inc
 | |
| 
 | |
| --echo # wait for T1
 | |
| # Wildcard for `state` as it depends on whether WSREP is compiled in or not.
 | |
| --let $wait_condition= SELECT count(*)=1 FROM information_schema.processlist WHERE state LIKE 'Update_rows_log_event::find_row(%' and  command LIKE 'Slave_worker';
 | |
| --source include/wait_condition.inc
 | |
| 
 | |
| --echo # wait for T2
 | |
| --let $wait_condition= SELECT count(*)=1 FROM information_schema.processlist WHERE state LIKE 'Waiting for prior transaction to commit%' and  command LIKE 'Slave_worker';
 | |
| --source include/wait_condition.inc
 | |
| --let $t2_tid= `SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Waiting for prior transaction to commit%' and  command LIKE 'Slave_worker'`
 | |
| --echo # wait for T3
 | |
| --let $wait_condition= SELECT count(*)=1 FROM information_schema.processlist WHERE state LIKE  'Waiting for prior transaction to start commit%' and  command LIKE 'Slave_worker';
 | |
| --source include/wait_condition.inc
 | |
| 
 | |
| --evalp kill $t2_tid
 | |
| # give some little time for T2 to re-sink into the same state
 | |
| --let $slave_param=Last_Errno
 | |
| --let $slave_param_value=1927
 | |
| --source include/wait_for_slave_param.inc
 | |
| --connection slave1
 | |
| commit;
 | |
| 
 | |
| --connection slave
 | |
| --let $slave_sql_errno=1032
 | |
| --source include/wait_for_slave_sql_error.inc
 | |
| 
 | |
| update t1 set a=1 where a=2;
 | |
| set @@global.slave_parallel_threads = @save.slave_parallel_threads;
 | |
| set @@global.slave_parallel_mode = @save.slave_parallel_mode;
 | |
| --source include/start_slave.inc
 | |
| 
 | |
| --echo #
 | |
| --echo # Cleanup
 | |
| --connection master
 | |
| drop table t1;
 | |
| --source include/save_master_gtid.inc
 | |
| 
 | |
| --connection slave
 | |
| --source include/sync_with_master_gtid.inc
 | |
| 
 | 
