summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorLuis Soares <luis.soares@sun.com>2009-12-24 02:26:29 +0000
committerLuis Soares <luis.soares@sun.com>2009-12-24 02:26:29 +0000
commitd5925fb1d0da2eb0e9ab1dfd9a43e4452192d8ce (patch)
tree031070e378ef8fd64d34f8e5025279fe4c197721 /mysql-test
parent081bcb3b8bc861bc5609a4ce92c8eb3528ffc078 (diff)
parent9c23a442b257c0ddb9066930c7bf9b0aac6cacdd (diff)
downloadmariadb-git-d5925fb1d0da2eb0e9ab1dfd9a43e4452192d8ce.tar.gz
BUG#48738: merge local branch into mysql-5.0-bugteam latest.
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/binlog_delete_and_flush_index.result44
-rw-r--r--mysql-test/t/binlog_delete_and_flush_index.test176
2 files changed, 220 insertions, 0 deletions
diff --git a/mysql-test/r/binlog_delete_and_flush_index.result b/mysql-test/r/binlog_delete_and_flush_index.result
new file mode 100644
index 00000000000..153900f3081
--- /dev/null
+++ b/mysql-test/r/binlog_delete_and_flush_index.result
@@ -0,0 +1,44 @@
+RESET MASTER;
+CREATE TABLE t1 (a int);
+### assertion: index file contains regular entries
+SET @index=LOAD_FILE('MYSQLD_DATADIR/master-bin.index');
+master-bin.000001
+
+### assertion: show original binlogs
+show binary logs;
+Log_name File_size
+master-bin.000001 #
+### assertion: binlog contents from regular entries
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a int)
+FLUSH LOGS;
+### assertion: index file contains renamed binlog and the new one
+SET @index=LOAD_FILE('MYSQLD_DATADIR/master-bin.index');
+master-bin-b34582.000001
+master-bin.000002
+
+### assertion: original binlog content still exists, despite we
+### renamed and changed the index file
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin-b34582.000001 # Query # # use `test`; CREATE TABLE t1 (a int)
+### assertion: user changed binlog index shows correct entries
+show binary logs;
+Log_name File_size
+master-bin-b34582.000001 #
+master-bin.000002 #
+DROP TABLE t1;
+### assertion: purging binlogs up to binlog created after instrumenting index file should work
+PURGE BINARY LOGS TO 'master-bin.000002';
+### assertion: show binary logs should only contain latest binlog
+show binary logs;
+Log_name File_size
+master-bin.000002 #
+### assertion: assert that binlog files were indeed purged (using file_exists calls)
+### assertion: assert that not purged binlog file exists
+### assertion: show index file contents and these should match show binary logs issued above
+SET @index=LOAD_FILE('MYSQLD_DATADIR/master-bin.index');
+master-bin.000002
+
+RESET MASTER;
diff --git a/mysql-test/t/binlog_delete_and_flush_index.test b/mysql-test/t/binlog_delete_and_flush_index.test
new file mode 100644
index 00000000000..6784043386d
--- /dev/null
+++ b/mysql-test/t/binlog_delete_and_flush_index.test
@@ -0,0 +1,176 @@
+# BUG#34582: FLUSH LOGS does not close and reopen the binlog index
+# file
+#
+# WHAT
+# ====
+#
+# We want to test that FLUSH LOGS closes and reopens binlog index
+# file.
+#
+# HOW
+# ===
+#
+# PREPARE:
+# 1. create some binlog events
+# 2. show index content, binlog events and binlog contents
+# for mysql-bin.000001
+# 3. copy the mysql-bin.000001 to mysql-bin-b34582.000001
+# 4. change the index file so that mysql-bin.000001 is replaced
+# with mysql-bin-b34582.000001
+# 5. FLUSH the logs so that new index is closed and reopened
+#
+# ASSERTIONS:
+# 1. index file contents shows mysql-bin-b34582.000001 and
+# mysql-bin.000002
+# 1. show binary logs shows current index entries
+# 2. binlog contents for mysql-bin-b34582.000001 are displayed
+# 3. Purge binlogs up to the latest one succeeds
+# 4. SHOW BINARY LOGS presents the latest one only after purging
+# 5. Purged binlogs files don't exist in the filesystem
+# 6. Not purged binlog file exists in the filesystem
+#
+# CLEAN UP:
+# 1. RESET MASTER
+#
+
+-- source include/have_log_bin.inc
+
+RESET MASTER;
+
+-- let $datadir= $MYSQLTEST_VARDIR/log
+-- let $index=$datadir/master-bin.index
+-- chmod 0666 $index
+
+# action: issue one command so that binlog gets some event
+CREATE TABLE t1 (a int);
+
+-- echo ### assertion: index file contains regular entries
+-- replace_regex /[\\\/].*master/MYSQLD_DATADIR\/master/
+-- eval SET @index=LOAD_FILE('$index')
+if (`SELECT convert(@@version_compile_os using latin1)
+ IN ('Win32','Win64','Windows')`)
+{
+ -- disable_query_log
+ -- disable_result_log
+ -- let $a= `SELECT REPLACE (@index, '$datadir\', '')`
+ -- enable_result_log
+ -- enable_query_log
+
+ -- echo $a
+
+}
+if (!`SELECT convert(@@version_compile_os using latin1)
+ IN ('Win32','Win64','Windows')`)
+{
+ -- disable_query_log
+ -- disable_result_log
+ -- let $a= `SELECT REPLACE (@index, '$datadir/', '')`
+ -- enable_result_log
+ -- enable_query_log
+
+ -- echo $a
+}
+
+--echo ### assertion: show original binlogs
+-- source include/show_binary_logs.inc
+
+--echo ### assertion: binlog contents from regular entries
+-- source include/show_binlog_events.inc
+
+# action: copy binlogs to other names and change entries in index file
+-- copy_file $datadir/master-bin.000001 $datadir/master-bin-b34582.000001
+-- let newbinfile=$datadir/master-bin-b34582.000001
+let INDEX_FILE=$index;
+perl;
+$newbinfile= $ENV{'newbinfile'};
+$file= $ENV{'INDEX_FILE'};
+open(FILE, ">$file") || die "Unable to open $file.";
+truncate(FILE,0);
+print FILE $newbinfile . "\n";
+close ($file);
+EOF
+
+# action: should cause rotation, and creation of new binlogs
+FLUSH LOGS;
+
+# file is not used anymore - remove it (mysql closed on flush logs).
+-- remove_file $datadir/master-bin.000001
+
+-- echo ### assertion: index file contains renamed binlog and the new one
+-- replace_regex /[\\\/].*master/MYSQLD_DATADIR\/master/
+-- eval SET @index=LOAD_FILE('$index')
+if (`SELECT convert(@@version_compile_os using latin1)
+ IN ('Win32','Win64','Windows')`)
+{
+ -- disable_query_log
+ -- disable_result_log
+ -- let $a= `SELECT REPLACE (@index, '$datadir\', '')`
+ -- enable_result_log
+ -- enable_query_log
+
+ -- echo $a
+
+}
+if (!`SELECT convert(@@version_compile_os using latin1)
+ IN ('Win32','Win64','Windows')`)
+{
+ -- disable_query_log
+ -- disable_result_log
+ -- let $a= `SELECT REPLACE (@index, '$datadir/', '')`
+ -- enable_result_log
+ -- enable_query_log
+
+ -- echo $a
+}
+
+-- echo ### assertion: original binlog content still exists, despite we
+-- echo ### renamed and changed the index file
+-- source include/show_binlog_events.inc
+
+-- echo ### assertion: user changed binlog index shows correct entries
+-- source include/show_binary_logs.inc
+
+DROP TABLE t1;
+
+-- echo ### assertion: purging binlogs up to binlog created after instrumenting index file should work
+-- let $current_binlog= query_get_value(SHOW MASTER STATUS, File, 1)
+-- eval PURGE BINARY LOGS TO '$current_binlog'
+
+-- echo ### assertion: show binary logs should only contain latest binlog
+-- source include/show_binary_logs.inc
+
+-- echo ### assertion: assert that binlog files were indeed purged (using file_exists calls)
+-- error 1
+-- file_exists $datadir/master-bin-b34852.000001
+
+-- echo ### assertion: assert that not purged binlog file exists
+-- file_exists $datadir/$current_binlog
+
+-- echo ### assertion: show index file contents and these should match show binary logs issued above
+-- replace_regex /[\\\/].*master/MYSQLD_DATADIR\/master/
+-- eval SET @index=LOAD_FILE('$index')
+if (`SELECT convert(@@version_compile_os using latin1)
+ IN ('Win32','Win64','Windows')`)
+{
+ -- disable_query_log
+ -- disable_result_log
+ -- let $a= `SELECT REPLACE (@index, '$datadir\', '')`
+ -- enable_result_log
+ -- enable_query_log
+
+ -- echo $a
+
+}
+if (!`SELECT convert(@@version_compile_os using latin1)
+ IN ('Win32','Win64','Windows')`)
+{
+ -- disable_query_log
+ -- disable_result_log
+ -- let $a= `SELECT REPLACE (@index, '$datadir/', '')`
+ -- enable_result_log
+ -- enable_query_log
+
+ -- echo $a
+}
+
+RESET MASTER;