mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 19:06:14 +01:00 
			
		
		
		
	 0f266bc80e
			
		
	
	
	0f266bc80e
	
	
	
		
			
			Fix yet another race in the rpl_gtid_startpos test case. Implement include/wait_for_purge.inc to purge binary logs; we need to retry the purge multiple times until it succeeds in removing all the logs we want, as binlog dump threads can be slow to stop on loaded machines and hold back purge of logs that are still referenced by the thread.
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| # include/wait_for_purge.inc
 | |
| #
 | |
| # SUMMARY
 | |
| #
 | |
| #    Repeatedly attempt to purge binlogs up to a specific point, until
 | |
| #    SHOW BINARY LOGS shows it has succeeded.
 | |
| #    This can be useful to avoid races where slaves are stopped but the
 | |
| #    corresponding binlog dump thread on the master has not yet terminated.
 | |
| #    Async binlog checkpoints can also delay purge.
 | |
| #
 | |
| #    Note that it may be necessary to inject at least one event in the binlog
 | |
| #    after stopping slaves, or master may not detect stop of slave for a long
 | |
| #    time (or forever), depending on details of test case, if replication
 | |
| #    heartbeat is enabled, etc.
 | |
| #
 | |
| # USAGE:
 | |
| #
 | |
| #    --let $purge_binlogs_to=master-bin.000003
 | |
| #    --source include/wait_for_purge.inc
 | |
| #
 | |
| # SIDE EFFECTS:
 | |
| #
 | |
| #    Disables --query_log while running, enables it afterwards.
 | |
| 
 | |
| --echo include/wait_for_purge.inc "$purge_binlogs_to"
 | |
| 
 | |
| let $_wait_count= 300;
 | |
| let $_done= 0;
 | |
| 
 | |
| --disable_query_log
 | |
| while ($_wait_count)
 | |
| {
 | |
|   dec $_wait_count;
 | |
|   eval PURGE BINARY LOGS TO "$purge_binlogs_to";
 | |
|   let $_cur_binlog= query_get_value(SHOW BINARY LOGS, Log_name, 1);
 | |
|   if (`SELECT "$_cur_binlog" = "$purge_binlogs_to"`)
 | |
|   {
 | |
|     let $_done= 1;
 | |
|     let $_wait_count= 0;
 | |
|   }
 | |
|   if ($_wait_count)
 | |
|   {
 | |
|     real_sleep 0.1;
 | |
|   }
 | |
| }
 | |
| 
 | |
| if (!$_done)
 | |
| {
 | |
|   SHOW FULL PROCESSLIST;
 | |
|   eval SHOW BINARY LOGS;
 | |
|   --die ERROR: failed while waiting for binlog purge to $purge_binlogs_to
 | |
| }
 | |
| --enable_query_log
 |