summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorunknown <knielsen@knielsen-hq.org>2013-03-29 11:49:54 +0100
committerunknown <knielsen@knielsen-hq.org>2013-03-29 11:49:54 +0100
commit0f266bc80ec0683ea9a784754a26c9d561b632b0 (patch)
treec655fc6581a83cecddf381f2b9e0cf78ac85f18e /mysql-test
parent5aaf73fcaac30ebfd45188c24de3b57aa0929c36 (diff)
downloadmariadb-git-0f266bc80ec0683ea9a784754a26c9d561b632b0.tar.gz
MDEV-26: Global transaction ID.
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.
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/include/wait_for_purge.inc53
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_startpos.result4
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_startpos.test8
3 files changed, 59 insertions, 6 deletions
diff --git a/mysql-test/include/wait_for_purge.inc b/mysql-test/include/wait_for_purge.inc
new file mode 100644
index 00000000000..8cd3c4394e1
--- /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
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_startpos.result b/mysql-test/suite/rpl/r/rpl_gtid_startpos.result
index 2428897345e..1e18f4506c7 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_startpos.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_startpos.result
@@ -19,7 +19,7 @@ include/stop_slave.inc
*** Test that master gives error when slave asks for empty gtid pos and binlog files have been purged. ***
FLUSH LOGS;
INSERT INTO t1 VALUES (2);
-PURGE BINARY LOGS TO 'master-bin.000003';
+include/wait_for_purge.inc "master-bin.000003"
show binary logs;
Log_name File_size
master-bin.000003 #
@@ -135,7 +135,7 @@ INSERT INTO t1 VALUES (4);
include/stop_slave.inc
FLUSH LOGS;
FLUSH LOGS;
-PURGE BINARY LOGS TO 'master-bin.000004';
+include/wait_for_purge.inc "master-bin.000004"
show binary logs;
Log_name File_size
master-bin.000004 #
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_startpos.test b/mysql-test/suite/rpl/t/rpl_gtid_startpos.test
index 88f0faebcb3..e2624051b69 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_startpos.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_startpos.test
@@ -35,10 +35,10 @@ SELECT * FROM t1;
--echo *** Test that master gives error when slave asks for empty gtid pos and binlog files have been purged. ***
--connection server_1
FLUSH LOGS;
---source include/wait_for_binlog_checkpoint.inc
INSERT INTO t1 VALUES (2);
--save_master_pos
-PURGE BINARY LOGS TO 'master-bin.000003';
+--let $purge_binlogs_to=master-bin.000003
+--source include/wait_for_purge.inc
--source include/show_binary_logs.inc
--connection server_2
@@ -226,8 +226,8 @@ INSERT INTO t1 VALUES (4);
--connection server_1
FLUSH LOGS;
FLUSH LOGS;
---source include/wait_for_binlog_checkpoint.inc
-PURGE BINARY LOGS TO 'master-bin.000004';
+--let $purge_binlogs_to=master-bin.000004
+--source include/wait_for_purge.inc
--source include/show_binary_logs.inc
INSERT INTO t1 VALUES (5);