mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-25 18:38:00 +03:00 
			
		
		
		
	 2bfbe2cd84
			
		
	
	2bfbe2cd84
	
	
	
		
			
			A test case was waiting for a fixed number of seconds for a specific state of the slave IO thread to take place. Fixed by waiting in a loop for that specific thread state instead (or timeout).
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # The slave is started with relay_log_space_limit=10 bytes,
 | |
| # to force the deadlock after one event.
 | |
| 
 | |
| source include/master-slave.inc;
 | |
| connection slave;
 | |
| stop slave;
 | |
| connection master;
 | |
| # This will generate a master's binlog > 10 bytes
 | |
| create table t1 (a int);
 | |
| drop table t1;
 | |
| create table t1 (a int);
 | |
| drop table t1;
 | |
| connection slave;
 | |
| reset slave;
 | |
| start slave io_thread;
 | |
| # Give the I/O thread time to block.
 | |
| let $run= 1;
 | |
| let $counter= 300;
 | |
| while ($run)
 | |
| {
 | |
|   let $io_state= query_get_value("SHOW SLAVE STATUS", Slave_IO_State, 1);
 | |
|   if (`SELECT '$io_state' = 'Waiting for the slave SQL thread to free enough relay log space'`){
 | |
|     let $run= 0;
 | |
|   }
 | |
|   sleep 0.1;
 | |
|   if (!$counter){
 | |
|    --echo "Failed while waiting for slave IO thread block"
 | |
|    SHOW SLAVE STATUS;
 | |
|    exit;
 | |
|   }
 | |
|   dec $counter;
 | |
| }
 | |
| sleep 2;
 | |
| # A bug caused the I/O thread to refuse stopping.
 | |
| stop slave io_thread;
 | |
| reset slave;
 | |
| start slave;
 | |
| # The I/O thread stops filling the relay log when
 | |
| # it's >10b. And the SQL thread cannot purge this relay log
 | |
| # as purge is done only when the SQL thread switches to another
 | |
| # relay log, which does not exist here.
 | |
| # So we should have a deadlock.
 | |
| # if it is not resolved automatically we'll detect
 | |
| # it with master_pos_wait that waits for farther than 1Ob;
 | |
| # it will timeout after 10 seconds;
 | |
| # also the slave will probably not cooperate to shutdown
 | |
| # (as 2 threads are locked)
 | |
| select master_pos_wait('master-bin.001',200,6)=-1;
 | |
| 
 | |
| # End of 4.1 tests
 |