diff options
Diffstat (limited to 'mysql-test/include/wait_for_purge.inc')
-rw-r--r-- | mysql-test/include/wait_for_purge.inc | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/mysql-test/include/wait_for_purge.inc b/mysql-test/include/wait_for_purge.inc new file mode 100644 index 00000000..8cd3c439 --- /dev/null +++ b/mysql-test/include/wait_for_purge.inc @@ -0,0 +1,53 @@ +# 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 |