summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-06-26 12:07:17 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2019-07-18 17:01:59 +0300
commitadbab0d4cd80b10a1176f1ce8561aff3d5875a02 (patch)
tree1438c2ad697edf6170ba10164a4a468e5d2f1851
parent10ebdb7f1d7a3f6aa6a91b40a9d90f482da08e58 (diff)
downloadmariadb-git-adbab0d4cd80b10a1176f1ce8561aff3d5875a02.tar.gz
MDEV-13625: Add the test innodb.innodb-wl5980-debug
-rw-r--r--mysql-test/suite/innodb/r/innodb-wl5980-debug.result27
-rw-r--r--mysql-test/suite/innodb/t/innodb-wl5980-debug.test51
-rw-r--r--storage/innobase/fil/fil0fil.cc5
-rw-r--r--storage/xtradb/fil/fil0fil.cc5
4 files changed, 88 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb/r/innodb-wl5980-debug.result b/mysql-test/suite/innodb/r/innodb-wl5980-debug.result
new file mode 100644
index 00000000000..51cff4393aa
--- /dev/null
+++ b/mysql-test/suite/innodb/r/innodb-wl5980-debug.result
@@ -0,0 +1,27 @@
+call mtr.add_suppression("Cannot find space id [0-9]+ in the tablespace memory cache");
+call mtr.add_suppression("Cannot rename table 'test/t1' to 'test/t2' since the dictionary cache already contains 'test/t2'.");
+#
+# WL5980 Remote tablespace debug error injection tests.
+#
+CREATE TABLE t1 (a int KEY, b text) ENGINE=Innodb DATA DIRECTORY='MYSQL_TMP_DIR/alt_dir' ;
+INSERT INTO t1 VALUES (1, 'tablespace');
+SELECT * FROM t1;
+a b
+1 tablespace
+#
+# Test the second injection point in fil_rename_tablespace().
+# Make sure the table is useable after this failure.
+#
+SET @save_dbug=@@debug_dbug;
+SET debug_dbug="+d,fil_rename_tablespace_failure_2";
+RENAME TABLE t1 TO t2;
+SET debug_dbug=@save_dbug;
+INSERT INTO t1 VALUES (2, 'tablespace');
+SELECT * FROM t1;
+a b
+1 tablespace
+2 tablespace
+#
+# Cleanup
+#
+DROP TABLE t1;
diff --git a/mysql-test/suite/innodb/t/innodb-wl5980-debug.test b/mysql-test/suite/innodb/t/innodb-wl5980-debug.test
new file mode 100644
index 00000000000..2c5e2b48870
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb-wl5980-debug.test
@@ -0,0 +1,51 @@
+#
+# This testcase is to check the various debug injection points
+# to make sure error conditions react corectly and acheive
+# better code coverage.
+#
+
+# Not supported in embedded
+--source include/not_embedded.inc
+--source include/have_debug.inc
+--source include/have_innodb.inc
+
+# These messages are expected in the log
+call mtr.add_suppression("Cannot find space id [0-9]+ in the tablespace memory cache");
+call mtr.add_suppression("Cannot rename table 'test/t1' to 'test/t2' since the dictionary cache already contains 'test/t2'.");
+
+# Set up some variables
+LET $MYSQL_DATA_DIR = `select @@datadir`;
+LET $data_directory_clause = DATA DIRECTORY='$MYSQL_TMP_DIR/alt_dir';
+--enable_query_log
+
+--echo #
+--echo # WL5980 Remote tablespace debug error injection tests.
+--echo #
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE t1 (a int KEY, b text) ENGINE=Innodb $data_directory_clause ;
+INSERT INTO t1 VALUES (1, 'tablespace');
+SELECT * FROM t1;
+
+--echo #
+--echo # Test the second injection point in fil_rename_tablespace().
+--echo # Make sure the table is useable after this failure.
+--echo #
+SET @save_dbug=@@debug_dbug;
+SET debug_dbug="+d,fil_rename_tablespace_failure_2";
+--disable_result_log
+--error ER_ERROR_ON_RENAME
+RENAME TABLE t1 TO t2;
+--enable_result_log
+SET debug_dbug=@save_dbug;
+INSERT INTO t1 VALUES (2, 'tablespace');
+SELECT * FROM t1;
+
+--echo #
+--echo # Cleanup
+--echo #
+
+DROP TABLE t1;
+
+--rmdir $MYSQL_TMP_DIR/alt_dir/test
+--rmdir $MYSQL_TMP_DIR/alt_dir
diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc
index 8c4e1db6f51..7234a6c4102 100644
--- a/storage/innobase/fil/fil0fil.cc
+++ b/storage/innobase/fil/fil0fil.cc
@@ -3216,8 +3216,13 @@ fil_rename_tablespace(
space, node, new_name, new_path);
if (success) {
+ DBUG_EXECUTE_IF("fil_rename_tablespace_failure_2",
+ goto skip_second_rename; );
success = os_file_rename(
innodb_file_data_key, old_path, new_path);
+ DBUG_EXECUTE_IF("fil_rename_tablespace_failure_2",
+skip_second_rename:
+ success = FALSE; );
if (!success) {
/* We have to revert the changes we made
diff --git a/storage/xtradb/fil/fil0fil.cc b/storage/xtradb/fil/fil0fil.cc
index d3641efc062..254d0954397 100644
--- a/storage/xtradb/fil/fil0fil.cc
+++ b/storage/xtradb/fil/fil0fil.cc
@@ -3262,8 +3262,13 @@ fil_rename_tablespace(
space, node, new_name, new_path);
if (success) {
+ DBUG_EXECUTE_IF("fil_rename_tablespace_failure_2",
+ goto skip_second_rename; );
success = os_file_rename(
innodb_file_data_key, old_path, new_path);
+ DBUG_EXECUTE_IF("fil_rename_tablespace_failure_2",
+skip_second_rename:
+ success = FALSE; );
if (!success) {
/* We have to revert the changes we made