diff options
Diffstat (limited to '')
-rw-r--r-- | mysql-test/suite/innodb/t/innodb-wl5522-debug.test | 1401 |
1 files changed, 1401 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb/t/innodb-wl5522-debug.test b/mysql-test/suite/innodb/t/innodb-wl5522-debug.test new file mode 100644 index 00000000..e642a949 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb-wl5522-debug.test @@ -0,0 +1,1401 @@ +# mysql-test-run.pl --embedded cannot restart the server. +--source include/not_embedded.inc + +# Adding big test option for this test. +--source include/big_test.inc + +# This test case needs to crash the server. Needs a debug server. +--source include/have_debug.inc + +# Don't test this under valgrind, memory leaks will occur. +--source include/not_valgrind.inc + +# Avoid CrashReporter popup on Mac +--source include/not_crashrep.inc + +--source include/have_innodb.inc +--source include/default_charset.inc +--source include/have_sequence.inc + +let $restart_noprint=2; +call mtr.add_suppression("InnoDB: Operating system error number .* in a file operation."); +call mtr.add_suppression("InnoDB: Error number \\d+ means"); +call mtr.add_suppression("InnoDB: Cannot open datafile for read-only: .*"); +call mtr.add_suppression("InnoDB: Ignoring tablespace .* because it could not be opened."); +call mtr.add_suppression("InnoDB: Tablespace for table .* is set as discarded."); +call mtr.add_suppression("InnoDB: Cannot calculate statistics for table .*"); +call mtr.add_suppression("InnoDB: Page 0 at offset 0 looks corrupted in file"); +call mtr.add_suppression("InnoDB: Page for tablespace "); +call mtr.add_suppression("InnoDB: Invalid FSP_SPACE_FLAGS="); +call mtr.add_suppression("InnoDB: Unknown index id .* on page"); +call mtr.add_suppression("InnoDB: Cannot save statistics for table `test`\\.`t1` because the \\.ibd file is missing"); +call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*ibdata1' page"); +call mtr.add_suppression("InnoDB: File '.*ibdata1' is corrupted"); +FLUSH TABLES; + +let MYSQLD_DATADIR =`SELECT @@datadir`; +let $strerrfix=/ (\(.+\))//; +SET GLOBAL innodb_file_per_table = 1; + +CREATE TABLE t1 (c1 INT) ENGINE = InnoDB; +INSERT INTO t1 VALUES(1),(2),(3); + +--let $_expect_file_name= `select regexp_replace(@@tmpdir, '^.*/','')` +--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/$_expect_file_name.expect + +--exec echo wait > $_expect_file_name +SET SESSION debug_dbug="+d,ib_discard_before_commit_crash"; +--error 2013 +ALTER TABLE t1 DISCARD TABLESPACE; + +--source include/start_mysqld.inc + +DROP TABLE t1; + +SET GLOBAL innodb_file_per_table = 1; + +CREATE TABLE t1 (c1 INT) ENGINE = InnoDB; +INSERT INTO t1 VALUES(1),(2),(3); + +--exec echo wait > $_expect_file_name +SET SESSION debug_dbug="+d,ib_discard_after_commit_crash"; +--error 2013 +ALTER TABLE t1 DISCARD TABLESPACE; + +--source include/start_mysqld.inc + +DROP TABLE t1; + +SET GLOBAL innodb_file_per_table = 1; + +# Create the table that we will use for crash recovery (during IMPORT) +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1), (2), (3), (4); + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_backup_tablespaces("test", "t1"); +EOF +UNLOCK TABLES; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +--error ER_TABLESPACE_DISCARDED +SELECT * FROM t1; + +--exec echo wait > $_expect_file_name +SET SESSION debug_dbug="+d,ib_import_before_commit_crash"; +--error 2013 +ALTER TABLE t1 IMPORT TABLESPACE; + +--source include/start_mysqld.inc + +# Check that the DD is consistent after recovery + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +--exec echo wait > $_expect_file_name +SET SESSION debug_dbug="+d,ib_import_before_checkpoint_crash"; +--error 2013 +ALTER TABLE t1 IMPORT TABLESPACE; + +# After the above test the results are non-deterministic, +# delete the old tablespace files and drop the table, +# recreate the table and do a proper import. +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +--source include/start_mysqld.inc + +DROP TABLE t1; + +SET @file_per_table= @@innodb_file_per_table; +SET GLOBAL innodb_file_per_table = 1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; + +ALTER TABLE t1 DISCARD TABLESPACE; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +ALTER TABLE t1 IMPORT TABLESPACE; +CHECK TABLE t1; + +SELECT COUNT(*) FROM t1; + +INSERT INTO t1 VALUES(400), (500), (600); + +SELECT * FROM t1; + +DROP TABLE t1; + +# Test IO Write error(s), flush tables doesn't return an error message +# so we have to make do with the error/warning pushed by the server +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET @saved_debug_dbug = @@SESSION.debug_dbug; +SET SESSION debug_dbug="+d,ib_export_io_write_failure_1"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_2"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_3"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_4"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_5"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_6"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_7"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_8"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_9"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_10"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_11"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +SET SESSION debug_dbug="+d,ib_export_io_write_failure_12"; + +--replace_regex /, .*\).*t1.cfg/, Bad file descriptor) t1.cfg/ + +FLUSH TABLES t1 FOR EXPORT; + +UNLOCK TABLES; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +# Create a table and save the tablespace and .cfg file +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (100), (200), (300); +SELECT COUNT(*) FROM t1; +FLUSH TABLES t1 FOR EXPORT; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_backup_tablespaces("test", "t1"); +EOF + +UNLOCK TABLES; + +DROP TABLE t1; + +# Test IO Read error(s) +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +SET SESSION debug_dbug="+d,ib_import_io_read_error_1"; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_cfg_files("test", "t1"); +EOF + +--replace_regex $strerrfix + +--error ER_IO_READ_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +SET SESSION debug_dbug="+d,ib_import_io_read_error_2"; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_cfg_files("test", "t1"); +EOF + +--replace_regex $strerrfix + +--error ER_IO_READ_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +SET SESSION debug_dbug="+d,ib_import_io_read_error_3"; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_cfg_files("test", "t1"); +EOF + +--replace_regex $strerrfix + +--error ER_IO_READ_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +SET SESSION debug_dbug="+d,ib_import_io_read_error_4"; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_cfg_files("test", "t1"); +EOF + +--replace_regex $strerrfix + +--error ER_IO_READ_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +SET SESSION debug_dbug="+d,ib_import_io_read_error_5"; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_cfg_files("test", "t1"); +EOF + +--replace_regex $strerrfix + +--error ER_IO_READ_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +SET SESSION debug_dbug="+d,ib_import_io_read_error_6"; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_cfg_files("test", "t1"); +EOF + +--replace_regex $strerrfix + +--error ER_IO_READ_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +SET SESSION debug_dbug="+d,ib_import_io_read_error_7"; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_cfg_files("test", "t1"); +EOF + +--replace_regex $strerrfix + +--error ER_IO_READ_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +SET SESSION debug_dbug="+d,ib_import_io_read_error_8"; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_cfg_files("test", "t1"); +EOF + +--replace_regex $strerrfix + +--error ER_IO_READ_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +SET SESSION debug_dbug="+d,ib_import_io_read_error_9"; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_cfg_files("test", "t1"); +EOF + +--replace_regex $strerrfix + +--error ER_IO_READ_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +# Test string read failure +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +SET SESSION debug_dbug="+d,ib_import_string_read_error"; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_cfg_files("test", "t1"); +EOF + +--replace_regex $strerrfix + +--error ER_IO_READ_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +# Test OOM error during import + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_OOM_1"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_OOM_2"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_OOM_4"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_OOM_5"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_OOM_6"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_OOM_7"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_OOM_8"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_OOM_9"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_OOM_10"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_OUT_OF_RESOURCES +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +#### +# Test handling of internal failure error +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +# Test failure after reset of space id and LSN in the tablespace +SET SESSION debug_dbug="+d,ib_import_internal_error"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_INTERNAL_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +ALTER TABLE t1 IMPORT TABLESPACE; + +DROP TABLE t1; + + +# Test failure after reset of space id and LSN in the tablespace +CREATE TABLE t1 (c1 INT) ENGINE = Innodb; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +# Test failure after reset of space id and LSN in the tablespace +SET SESSION debug_dbug="+d,ib_import_reset_space_and_lsn_failure"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_INTERNAL_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Test failure after attempting a tablespace open +SET SESSION debug_dbug="+d,ib_import_open_tablespace_failure"; + +--replace_result \\ / +--error ER_GET_ERRMSG +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +# Test failure after ibuf check +SET SESSION debug_dbug="+d,ib_import_check_bitmap_failure"; + +# Need proper mapping of error codes :-( +--error ER_NOT_KEYFILE +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +# Test failure after adjusting the cluster index root page +SET SESSION debug_dbug="+d,ib_import_cluster_root_adjust_failure"; + +--error ER_NOT_KEYFILE +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +# Test failure after importing the cluster index +SET SESSION debug_dbug="+d,ib_import_cluster_failure"; + +--error ER_NOT_KEYFILE +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +# Test failure after importing the secondary index(es) +SET SESSION debug_dbug="+d,ib_import_sec_root_adjust_failure"; + +--error ER_NOT_KEYFILE +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +ALTER TABLE t1 IMPORT TABLESPACE; +DROP TABLE t1; + +# +# Create a large table with delete marked records, disable purge during +# the update so that we can test the IMPORT purge code. +# +CREATE TABLE t1 ( + c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + c2 BIGINT, + c3 VARCHAR(2048), + c4 VARCHAR(2048), + INDEX idx1(c2), + INDEX idx2(c3(512)), + INDEX idx3(c4(512))) Engine=InnoDB; + +# Stop purge so that it doesn't remove the delete marked entries. +connect (purge_control,localhost,root); +START TRANSACTION WITH CONSISTENT SNAPSHOT; +connection default; + +INSERT INTO t1 +SELECT 1 + seq, 1 + (seq MOD 4), + REPEAT(SUBSTR('abcd', 1 + (seq MOD 4), 1), 2048), + REPEAT(SUBSTR('abcd', 1 + (seq MOD 4), 1), 2048) +FROM seq_0_to_127; + +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c2 = c2 + c1; +UPDATE t1 SET c3 = REPEAT("c2", 1024); +UPDATE t1 SET c4 = REPEAT("c4", 1024); + +SHOW CREATE TABLE t1; + +SELECT c1, c2 FROM t1; +SELECT COUNT(*) FROM t1; +SELECT SUM(c2) FROM t1; + +FLUSH TABLES t1 FOR EXPORT; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_backup_tablespaces("test", "t1"); +EOF + +UNLOCK TABLES; + +# Enable normal operation +connection purge_control; +COMMIT; +disconnect purge_control; +connection default; + +DROP TABLE t1; + +CREATE TABLE t1 ( + c1 BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + c2 BIGINT, + c3 VARCHAR(2048), + c4 VARCHAR(2048), + INDEX idx1(c2), + INDEX idx2(c3(512)), + INDEX idx3(c4(512))) Engine=InnoDB; + +SELECT c1, c2 FROM t1; + +ALTER TABLE t1 DISCARD TABLESPACE; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +ALTER TABLE t1 IMPORT TABLESPACE; +CHECK TABLE t1; + +SELECT c1,c2 FROM t1; +SELECT COUNT(*) FROM t1; +SELECT SUM(c2) FROM t1; + +SHOW CREATE TABLE t1; + +DROP TABLE t1; + +#### +# Create a table and save the tablespace and .cfg file, we need to create +# a Btree that has several levels +CREATE TABLE t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; + +INSERT IGNORE INTO t1 VALUES + (100, REPEAT('Karanbir', 899), REPEAT('Ajeeth', 2731)); + +INSERT INTO t1 +SELECT 100, REPEAT('Karanbir', 128), REPEAT('Ajeeth', 1200) +FROM seq_1_to_256; +FLUSH TABLES t1 FOR EXPORT; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_backup_tablespaces("test", "t1"); +EOF + +UNLOCK TABLES; + +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_trigger_corruption_1"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_INTERNAL_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +# + +CREATE TABLE t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +let INNODB_PAGE_SIZE=`select @@innodb_page_size`; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +my $page; +my $ps = $ENV{INNODB_PAGE_SIZE}; +my $file = "$ENV{MYSQLD_DATADIR}/test/t1.ibd"; +open(FILE, "+<$file") || die "Unable to open $file"; +binmode FILE; +sysseek(FILE, 3*$ps, 0) || die "Unable to seek $file\n"; +die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps; +substr($page,24,2)='42'; +sysseek(FILE, 3*$ps, 0) || die "Unable to rewind $file\n"; +syswrite(FILE, $page, $ps)==$ps || die "Unable to write $file\n"; +close(FILE) || die "Unable to close $file"; +EOF + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_NOT_KEYFILE +ALTER TABLE t1 IMPORT TABLESPACE; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +# +CREATE TABLE t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_trigger_corruption_2"; + +--error ER_INNODB_INDEX_CORRUPT +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF +# + +CREATE TABLE t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,ib_import_trigger_corruption_3"; + +--error ER_NOT_KEYFILE +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +CREATE TABLE t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; + +SET SESSION debug_dbug="+d,ib_import_create_index_failure_1"; + +--error ER_RECORD_FILE_FULL +ALTER TABLE t1 ADD INDEX idx(c1); + +SET SESSION debug_dbug=@saved_debug_dbug; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +ALTER TABLE t1 ADD INDEX idx(c1); + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +# + +CREATE TABLE t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,fil_space_create_failure"; + +--replace_result \\ / +--error ER_GET_ERRMSG +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +# + +CREATE TABLE t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,dict_tf_to_fsp_flags_failure"; + +--replace_result \\ / +--error ER_GET_ERRMSG +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +# + +CREATE TABLE t1 (c1 INT, c2 VARCHAR(1024), c3 BLOB) ENGINE = Innodb; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--error ER_TABLESPACE_DISCARDED +SELECT COUNT(*) FROM t1; + +# Restore files +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_restore_tablespaces("test", "t1"); +EOF + +SET SESSION debug_dbug="+d,fsp_flags_is_valid_failure"; + +--replace_regex /'.*t1.cfg'/'t1.cfg'/ + +--error ER_NOT_KEYFILE +ALTER TABLE t1 IMPORT TABLESPACE; + +SET SESSION debug_dbug=@saved_debug_dbug; + +DROP TABLE t1; + +perl; +do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl"; +ib_unlink_tablespace("test", "t1"); +EOF + +--disable_query_log +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles!"); +call mtr.add_suppression("'Resource temporarily unavailable'"); +call mtr.add_suppression("Got error -1 when reading table '.*'"); +call mtr.add_suppression("InnoDB: Table '.*' tablespace is set as discarded."); +call mtr.add_suppression("InnoDB: Tablespace '.*' exists in the cache.*"); +call mtr.add_suppression("InnoDB: Freeing existing tablespace '.*' entry from the cache with id.*"); +call mtr.add_suppression("InnoDB: The table .* doesn't have a corresponding tablespace, it was discarded"); +call mtr.add_suppression(".*There was an error writing to the meta data file.*"); +call mtr.add_suppression("InnoDB: Trying to import a tablespace, but could not open the tablespace file"); +call mtr.add_suppression("Unsupported tablespace format"); +call mtr.add_suppression("Page is marked as free"); +call mtr.add_suppression("t1.ibd: Page .* at offset .* looks corrupted"); +call mtr.add_suppression("but tablespace with that id or name does not exist"); +call mtr.add_suppression("Could not find a valid tablespace file for '.*t1'"); +call mtr.add_suppression("while reading index meta-data, expected to read 44 bytes but read only 0 bytes"); +call mtr.add_suppression("Index for table 't1' is corrupt; try to repair it"); +--enable_query_log + +#cleanup +--remove_file $MYSQLTEST_VARDIR/tmp/t1.cfg +--remove_file $MYSQLTEST_VARDIR/tmp/t1.ibd + +SET GLOBAL INNODB_FILE_PER_TABLE=@file_per_table; |