summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Soares <luis.soares@oracle.com>2011-12-01 00:54:54 +0000
committerLuis Soares <luis.soares@oracle.com>2011-12-01 00:54:54 +0000
commita899a4050b96928d5a048ce75f6909c3082dd028 (patch)
treecd83b5f0f3afff1c49565f60a1481f4fe5f7406b
parent2228d5a8b3530f6e42e83e4f902595650469e44d (diff)
downloadmariadb-git-a899a4050b96928d5a048ce75f6909c3082dd028.tar.gz
BUG#11745230
Refactored the test case: hardened and extended it. Created test inc file to abstract the task of relocating binlogs. Also, disabled it on windows for not cluttering the test case any further, as it depends heavily on doing filesystem operations and path handling. mysql-test/include/relocate_binlogs.inc: Auxiliar include file that performs the relocation of binary logs listed in an index file.
-rw-r--r--mysql-test/include/relocate_binlogs.inc137
-rw-r--r--mysql-test/suite/rpl/r/rpl_binlog_index.result13
-rw-r--r--mysql-test/suite/rpl/t/rpl_binlog_index.test111
3 files changed, 227 insertions, 34 deletions
diff --git a/mysql-test/include/relocate_binlogs.inc b/mysql-test/include/relocate_binlogs.inc
new file mode 100644
index 00000000000..d5d1135dda3
--- /dev/null
+++ b/mysql-test/include/relocate_binlogs.inc
@@ -0,0 +1,137 @@
+# ==== Purpose ====
+#
+# Relocates the relay logs and index file from
+# a directory into another. The logs relocated
+# are the one listed in the index file.
+#
+# ==== Usage ====
+#
+# [--let $relocate_disable_query_log= 1]
+# [--let $rpl_debug= 1]
+# [--let $relocate_is_windows= 0]
+# [--let $relocate_recreate_index= 0]
+# [--let $relocate_fix_relay_log_info= 0]
+# --let $relocate_from= DIR
+# --let $relocate_to= DIR
+# --let $relocate_index_file= FNAME
+# --source include/relocate_binlogs.inc
+
+if ($relocate_disable_query_log)
+{
+ --disable_query_log
+}
+
+--let $_path_separator=/
+if ($relocate_is_windows)
+{
+ --let $_path_separator=\
+}
+
+if ($relocate_index_file)
+{
+ SET SQL_LOG_BIN=0;
+ CREATE TEMPORARY TABLE tmp(id INT AUTO_INCREMENT PRIMARY KEY, filename VARCHAR(1024));
+
+ --let $write_var=
+ --let $_index_file= $relocate_index_file
+ --let $_index_file_basename= `SELECT RIGHT(RTRIM("$_index_file"), LOCATE("$_path_separator",REVERSE(RTRIM("$_index_file"))) -1)`
+ --let $_from= $relocate_from
+ --let $_to= $relocate_into
+
+ # chmod to allow the following LOAD DATA
+ --chmod 0666 $_index_file
+
+ --eval LOAD DATA INFILE '$_index_file' INTO TABLE tmp (filename)
+ --let $count= `SELECT count(*) FROM tmp`
+
+ while ($count)
+ {
+ --let $_filename= `select filename from tmp where id=$count`
+
+ --let $_filename= `SELECT RIGHT(RTRIM("$_filename"), LOCATE("$_path_separator",REVERSE(RTRIM("$_filename"))) -1)`
+ --move_file $_from/$_filename $_to/$_filename
+
+ if ($relocate_recreate_index)
+ {
+
+ if ($relocate_is_windows)
+ {
+ --let $_write_var=$_to\$_filename\n
+ }
+ if (!$relocate_is_windows)
+ {
+ --let $_write_var=$_to/$_filename\n
+ }
+ if (!$write_var)
+ {
+ --let $write_var=$_write_var
+ }
+
+ if (!`SELECT STRCMP('$write_var', '$_write_var') = 0`)
+ {
+ --let $write_var=$_write_var$write_var
+ }
+ }
+
+ --dec $count
+ }
+
+ if (!$relocate_recreate_index)
+ {
+ --move_file $_index_file $_to/$_index_file_basename
+ }
+
+ if ($relocate_recreate_index)
+ {
+ --let $write_to_file= $_to/$_index_file_basename
+ --source include/write_var_to_file.inc
+ --remove_file $_index_file
+ }
+
+ DROP TEMPORARY TABLE tmp;
+
+ if ($relocate_fix_relay_log_info)
+ {
+ CREATE TEMPORARY TABLE tmp(id INT AUTO_INCREMENT PRIMARY KEY, entry VARCHAR(1024));
+ --let $write_var=
+
+ # chmod to allow the following LOAD DATA
+ --chmod 0666 $relocate_fix_relay_log_info
+
+ --eval LOAD DATA INFILE '$relocate_fix_relay_log_info' INTO TABLE tmp (entry)
+ --let $count= `SELECT count(*) FROM tmp`
+
+ --let $_curr_entry= `SELECT entry FROM tmp WHERE id=1`
+ --let $_curr_entry_basename= `SELECT RIGHT(RTRIM("$_curr_entry"), LOCATE("$_path_separator",REVERSE(RTRIM("$_curr_entry"))) -1)`
+
+ if ($relocate_is_windows)
+ {
+ --eval UPDATE tmp SET entry='$_to\$_curr_entry_basename' WHERE id=1
+ }
+ if (!$relocate_is_windows)
+ {
+ --eval UPDATE tmp SET entry='$_to/$_curr_entry_basename' WHERE id=1
+ }
+
+ --remove_file $relocate_fix_relay_log_info
+
+ while($count)
+ {
+ --let $_write_var= `SELECT entry FROM tmp WHERE id= $count`
+ --let $write_var=$_write_var\n$write_var
+ --dec $count
+ }
+
+ --let $write_to_file= $relocate_fix_relay_log_info
+ --source include/write_var_to_file.inc
+
+ DROP TEMPORARY TABLE tmp;
+ }
+ SET SQL_LOG_BIN=1;
+}
+
+
+if ($relocate_disable_query_log)
+{
+ --enable_query_log
+}
diff --git a/mysql-test/suite/rpl/r/rpl_binlog_index.result b/mysql-test/suite/rpl/r/rpl_binlog_index.result
index 9861a156a62..6611a9ef2c0 100644
--- a/mysql-test/suite/rpl/r/rpl_binlog_index.result
+++ b/mysql-test/suite/rpl/r/rpl_binlog_index.result
@@ -15,12 +15,13 @@ include/rpl_stop_server.inc [server_number=1]
# Remove the unneeded master-bin.index file
# Restart master with log-bin option set to default
# Master has restarted successfully
+# stop slave
include/stop_slave.inc
-# Move the slave binlog and relay log files and index to the new place
-# Shutdown slave
include/rpl_stop_server.inc [server_number=2]
+# relocate binlogs
+# relocate relay logs
# Restart slave with options log-bin, relay-log set to the new paths
-# Slave has restarted successfully
+# Slave server has restarted successfully
include/start_slave.inc
include/stop_slave.inc
FLUSH LOGS;
@@ -33,3 +34,9 @@ FLUSH LOGS;
include/start_slave.inc
include/diff_tables.inc [master:t1,slave:t1]
DROP TABLE t1;
+include/stop_slave.inc
+include/rpl_stop_server.inc [server_number=2]
+# remove tmpdir
+# restarted with previous slave settings
+include/start_slave.inc
+include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_binlog_index.test b/mysql-test/suite/rpl/t/rpl_binlog_index.test
index 900a6819c2f..3147447227a 100644
--- a/mysql-test/suite/rpl/t/rpl_binlog_index.test
+++ b/mysql-test/suite/rpl/t/rpl_binlog_index.test
@@ -21,12 +21,20 @@ source include/master-slave.inc;
# There is no need to run this test case on all binlog format
source include/have_binlog_format_row.inc;
+# Since this test relies heavily on filesystem operations (like
+# moving files around, backslashes and so forth) we avoid messing
+# around with windows access violations for not cluttering the
+# test case any further. It is prepared to support windows, but
+# it is not 100% compliant.
+--source include/not_windows.inc
+
connection master;
--let $master_datadir= `select @@datadir`
connection slave;
--let $slave_datadir= `select @@datadir`
connection master;
---let $tmpdir= $MYSQLTEST_VARDIR/tmp/rpl_binlog_index
+--let $dirname= `select uuid()`
+--let $tmpdir= $MYSQLTEST_VARDIR/tmp/$dirname
--mkdir $tmpdir
CREATE TABLE t1 (a INT);
@@ -36,7 +44,6 @@ INSERT INTO t1 VALUES (1);
sync_slave_with_master;
-
#
# Test on master
#
@@ -69,11 +76,11 @@ source include/rpl_start_server.inc;
--let $write_to_file= $master_datadir/master-bin.index
if ($is_windows)
{
- --let $write_var= .\\master-bin.000001\n.\\master-bin.000002\n
+ --let $write_var= .\\\\master-bin.000001\n.\\\\master-bin.000002\n.\\\\master-bin.000003\n
}
if (!$is_windows)
{
- --let $write_var= ./master-bin.000001\n./master-bin.000002\n
+ --let $write_var= ./master-bin.000001\n./master-bin.000002\n./master-bin.000003\n
}
--disable_query_log
source include/write_var_to_file.inc;
@@ -86,6 +93,7 @@ source include/rpl_stop_server.inc;
--echo # Move back the master binlog files
--move_file $tmpdir/master-bin.000001 $master_datadir/master-bin.000001
--move_file $tmpdir/master-bin.000002 $master_datadir/master-bin.000002
+--move_file $tmpdir/master-bin.000003 $master_datadir/master-bin.000003
--echo # Remove the unneeded master-bin.index file
--remove_file $tmpdir/master-bin.index
@@ -99,41 +107,40 @@ source include/rpl_start_server.inc;
--echo # Master has restarted successfully
connection slave;
-source include/stop_slave.inc;
+--echo # stop slave
+--source include/stop_slave.inc
+--let $rpl_server_number= 2
+--source include/rpl_stop_server.inc
---disable_query_log
-# slave-relay-bin.* files can vary, so read the slave-relay-bin.index
-# to figure out the slave-relay-bin.* files
-CREATE TEMPORARY TABLE tmp (id INT AUTO_INCREMENT PRIMARY KEY, filename VARCHAR(1024));
-# chmod to allow the following LOAD DATA
---chmod 0666 $slave_datadir/slave-relay-bin.index
---eval LOAD DATA INFILE '$slave_datadir/slave-relay-bin.index' INTO TABLE tmp (filename)
---let $count= `SELECT count(*) FROM tmp`
---echo # Move the slave binlog and relay log files and index to the new place
---move_file $slave_datadir/slave-bin.index $tmpdir/slave-bin.index
---move_file $slave_datadir/slave-bin.000001 $tmpdir/slave-bin.000001
---move_file $slave_datadir/slave-relay-bin.index $tmpdir/slave-relay-bin.index
-while ($count)
-{
- --let $filename= `select filename from tmp where id=$count`
- --move_file $slave_datadir/$filename $tmpdir/$filename
- --dec $count
-}
-DROP TEMPORARY TABLE tmp;
---enable_query_log
+# switch to master because the slave has been shutdown
+# and relocate_binlogs requires a running server to do
+# SQL operations
+--connection master
---echo # Shutdown slave
---let $rpl_server_number=2
-source include/rpl_stop_server.inc;
+--let $relocate_disable_query_log= 1
+--let $relocate_is_windows= $is_windows
+--let $relocate_from=$slave_datadir
+--let $relocate_into=$tmpdir
+
+--echo # relocate binlogs
+--let $relocate_index_file=$slave_datadir/slave-bin.index
+--source include/relocate_binlogs.inc
+
+--echo # relocate relay logs
+--let $relocate_index_file=$slave_datadir/slave-relay-bin.index
+--source include/relocate_binlogs.inc
--echo # Restart slave with options log-bin, relay-log set to the new paths
--let $rpl_server_parameters=--log-bin=$tmpdir/slave-bin --relay-log=$tmpdir/slave-relay-bin
--let $keep_include_silent=1
+--let $rpl_server_number= 2
source include/rpl_start_server.inc;
--let $keep_include_silent=0
---echo # Slave has restarted successfully
-source include/start_slave.inc;
+--connection slave
+
+--echo # Slave server has restarted successfully
+--source include/start_slave.inc
--source include/stop_slave.inc
connection master;
@@ -155,6 +162,48 @@ source include/diff_tables.inc;
connection master;
DROP TABLE t1;
-sync_slave_with_master;
+--sync_slave_with_master
+--source include/stop_slave.inc
+--let $rpl_server_number= 2
+--source include/rpl_stop_server.inc
+
+--connection master
+
+--let $relocate_from=$tmpdir
+--let $relocate_into=$slave_datadir
+--let $relocate_recreate_index= 1
+
+# binlogs
+--let $relocate_index_file=$tmpdir/slave-bin.index
+--source include/relocate_binlogs.inc
+
+# relay logs
+
+# since the complete fix for the relocation of logs is
+# done in BUG#13428851 it does not help here to try
+# to start the slave as it would fail (relay-log.info is
+# tainted with the full path in the RELAY_LOG_FILE position).
+# Instead, we reset the slave and let the test clean up.
+--let $relocate_fix_relay_log_info= $slave_datadir/relay-log.info
+--let $relocate_index_file=$tmpdir/slave-relay-bin.index
+--source include/relocate_binlogs.inc
+
+--echo # remove tmpdir
--remove_files_wildcard $tmpdir *
--rmdir $tmpdir
+
+--echo # restarted with previous slave settings
+--let $rpl_server_parameters=--log-bin=$slave_datadir/slave-bin --relay-log=$slave_datadir/slave-relay-bin
+--let $keep_include_silent=1
+--let $rpl_server_number= 2
+--source include/rpl_start_server.inc
+--let $keep_include_silent=0
+
+--connection slave
+
+# The slave will restart if we have fixed the relay-log.info
+# correctly
+--source include/start_slave.inc
+
+--connection master
+--source include/rpl_end.inc