summaryrefslogtreecommitdiff
path: root/mysql-test/suite/binlog/include/binlog_expire_logs_seconds.inc
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/binlog/include/binlog_expire_logs_seconds.inc')
-rw-r--r--mysql-test/suite/binlog/include/binlog_expire_logs_seconds.inc109
1 files changed, 109 insertions, 0 deletions
diff --git a/mysql-test/suite/binlog/include/binlog_expire_logs_seconds.inc b/mysql-test/suite/binlog/include/binlog_expire_logs_seconds.inc
new file mode 100644
index 00000000000..3b3fef552db
--- /dev/null
+++ b/mysql-test/suite/binlog/include/binlog_expire_logs_seconds.inc
@@ -0,0 +1,109 @@
+#
+# WL#9237: Add a new variable binlog_expire_logs_seconds
+
+# Here we will test purging of binary logs when either one or both of these variables are set
+# - binlog_expire_logs_seconds
+# - expire_logs_days
+
+# The three scenarios being tested for are:
+# 1. FLUSH LOGS
+# 2. Rotation of logs because of binlog growing bigger than max_binlog_size
+# 3. Server restart
+#
+# Usuage: --let $binlog_expire_logs_seconds=
+# --let $expire_logs_days=
+#
+# --source suite/binlog/include/binlog_expire_logs_seconds.inc
+
+--let $expire_logs_seconds= `SELECT @@global.binlog_expire_logs_seconds`
+
+CREATE TABLE t1(s LONGBLOB );
+
+--let $max_binlog_size_save= `SELECT @@GLOBAL.MAX_BINLOG_SIZE`
+
+--let $case= 0
+
+while ($case < 3)
+{
+ --echo Case:$case
+ --let $first_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
+
+ # rotates the log, thence the first log will be closed, and depending upon
+ # the expire time the purge will/will not happen.
+
+ FLUSH LOGS;
+
+ INSERT INTO t1 VALUES('a');
+
+ --let $second_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
+
+ FLUSH LOGS;
+
+
+ # This is done to avoid time out in cases where the expire time is more.
+ # What we do is in those cases modify the timestamp of the oldest log file
+ # to be the same as expire time so when we execute the next flush log command
+ # the oldest log will be purged.
+
+ # Only change the timestamp of binlog file when the expire_logs_seconds which is the total
+ # time for expiring log is greater than 30 seconds
+
+ if (`SELECT $expire_logs_seconds > 30`)
+ {
+ --let _EXPIRE_TIME= `SELECT $expire_logs_seconds + 60`
+ --let _FIRST_BINLOG_FILE= $MYSQLD_DATADIR/$first_binlog_file
+--perl
+ use strict;
+ use warnings;
+ my $expire_time = $ENV{'_EXPIRE_TIME'};
+ my $first_binlog_file = $ENV{'_FIRST_BINLOG_FILE'};
+ my $epoch = (stat($first_binlog_file))[9];
+ my $mtime = $epoch - $expire_time;
+ utime $mtime, $mtime, $first_binlog_file;
+ EOF
+ }
+
+ # Checking this ensures that nothing is purged so far.
+ --file_exists $MYSQLD_DATADIR/$first_binlog_file
+
+ if ($case == 0)
+ {
+ --echo #### 1. FLUSH LOGS
+
+ FLUSH LOGS;
+ }
+ if ($case == 1)
+ {
+ --echo #### 2. Binlog_size > max_binlog_size
+
+ SET @@GLOBAL.MAX_BINLOG_SIZE= 4096;
+
+ INSERT INTO t1 (s) VALUES (REPEAT('s',50000));
+ }
+ if ($case == 2)
+ {
+ --echo #### 3. Server restart
+
+ --let $restart_parameters=--binlog_expire_logs_seconds=$expire_logs_seconds
+ --source include/restart_mysqld.inc
+ }
+
+ if (`SELECT $expire_logs_seconds != 0`)
+ {
+ --error 1
+ --file_exists $MYSQLD_DATADIR/$first_binlog_file
+ }
+ if ($expire_logs_seconds == 0)
+ {
+ --file_exists $MYSQLD_DATADIR/$first_binlog_file
+ }
+ --file_exists $MYSQLD_DATADIR/$second_binlog_file
+
+ --inc $case
+ RESET MASTER;
+}
+--echo ##### Cleanup #####
+--eval SET @@GLOBAL.MAX_BINLOG_SIZE= $max_binlog_size_save;
+DROP TABLE t1;
+RESET MASTER;
+