polardbxengine/mysql-test/suite/innodb_undo/t/undo_tablespace_debug.test

151 lines
6.1 KiB
Plaintext

--echo #
--echo # Inject failures in order to get code coverage.
--echo # Use explicit undo tablespaces and make the implicit spaces inactive.
--echo #
--source include/have_debug.inc
--source include/have_innodb_default_undo_tablespaces.inc
LET $MYSQLD_DATADIR = `select @@datadir`;
# Do a slow shutdown and restart to clear out the undo logs
SET GLOBAL innodb_fast_shutdown = 0;
--let $shutdown_server_timeout = 300
--source include/restart_mysqld.inc
--disable_query_log
call mtr.add_suppression("\\[Warning\\] .* Failed to truncate undo tablespace");
call mtr.add_suppression("\\[Warning\\] .* Purge reached the head of the history list");
call mtr.add_suppression("\\[ERROR\\] .* Error 65 opening newly created undo tablespace");
call mtr.add_suppression("\\[ERROR\\] .* Cannot create truncate log for undo tablespace");
--enable_query_log
CREATE UNDO TABLESPACE undo_003 ADD DATAFILE 'undo_003.ibu';
CREATE UNDO TABLESPACE undo_004 ADD DATAFILE 'undo_004.ibu';
CREATE UNDO TABLESPACE undo_005 ADD DATAFILE 'undo_005.ibu';
ALTER UNDO TABLESPACE innodb_undo_001 SET INACTIVE;
let $inactive_undo_space = innodb_undo_001;
source include/wait_until_undo_space_is_empty.inc;
ALTER UNDO TABLESPACE innodb_undo_002 SET INACTIVE;
let $inactive_undo_space = innodb_undo_002;
source include/wait_until_undo_space_is_empty.inc;
SELECT NAME, SPACE_TYPE, STATE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE SPACE_TYPE = 'Undo' ORDER BY NAME;
SELECT TABLESPACE_NAME, FILE_TYPE, FILE_NAME FROM INFORMATION_SCHEMA.FILES
WHERE FILE_NAME LIKE '%undo%' ORDER BY TABLESPACE_NAME;
--echo #
--echo # Bug#28966457: IF CREATE UNDO TABLESPACE FAILS, INCOMPLETE UNDO
--echo # TABLESPACE SHOULD BE CLEANED UP
--echo #
--list_files $MYSQLD_DATADIR/ undo_006.ibu
SET GLOBAL DEBUG="+d,ib_undo_tablespace_create_fail";
--error ER_CREATE_FILEGROUP_FAILED
CREATE UNDO TABLESPACE undo_006 ADD DATAFILE 'undo_006.ibu';
SET GLOBAL DEBUG="-d,ib_undo_tablespace_create_fail";
SELECT NAME, SPACE_TYPE, STATE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE SPACE_TYPE = 'Undo' ORDER BY NAME;
SELECT TABLESPACE_NAME, FILE_TYPE, FILE_NAME FROM INFORMATION_SCHEMA.FILES
WHERE FILE_NAME LIKE '%undo%' ORDER BY TABLESPACE_NAME;
--echo # Make sure file is not left behind in datadir
--list_files $MYSQLD_DATADIR/ undo_006.ibu
--echo #
--echo # Inject a failure to open an undo tablespace after it is created.
--echo # The file remains on disk along with the truncate log file.
--echo #
--list_files $MYSQLD_DATADIR/ undo_006.ibu
SET GLOBAL DEBUG="+d,ib_undo_tablespace_open_fail";
--error ER_CREATE_FILEGROUP_FAILED
CREATE UNDO TABLESPACE undo_006 ADD DATAFILE 'undo_006.ibu';
SET GLOBAL DEBUG="-d,ib_undo_tablespace_open_fail";
SELECT NAME, SPACE_TYPE, STATE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE SPACE_TYPE = 'Undo' ORDER BY NAME;
SELECT TABLESPACE_NAME, FILE_TYPE, FILE_NAME FROM INFORMATION_SCHEMA.FILES
WHERE FILE_NAME LIKE '%undo%' ORDER BY TABLESPACE_NAME;
--echo # Make sure file is not left behind in datadir
--list_files $MYSQLD_DATADIR/ undo_006.ibu
--echo #
--echo # Inject a failure to get the MDL during undo truncate.
--echo #
SET GLOBAL DEBUG="+d,ib_undo_trunc_fail_get_mdl";
ALTER UNDO TABLESPACE undo_003 SET INACTIVE;
let $inactive_undo_space = undo_003;
source include/wait_until_undo_space_is_empty.inc;
ALTER UNDO TABLESPACE undo_003 SET ACTIVE;
SELECT NAME, SPACE_TYPE, STATE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE SPACE_TYPE = 'Undo' ORDER BY NAME;
--echo #
--echo # Inject a failure to locate the undo space during undo truncate.
--echo #
SET GLOBAL DEBUG="+d,ib_undo_trunc_fail_marked_space";
ALTER UNDO TABLESPACE undo_003 SET INACTIVE;
let $inactive_undo_space = undo_003;
source include/wait_until_undo_space_is_empty.inc;
ALTER UNDO TABLESPACE undo_003 SET ACTIVE;
SELECT NAME, SPACE_TYPE, STATE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE SPACE_TYPE = 'Undo' ORDER BY NAME;
--echo #
--echo # Inject a failure to write the undo trunc log file.
--echo #
SET GLOBAL DEBUG="+d,ib_undo_trunc_fail_start_logging";
ALTER UNDO TABLESPACE undo_003 SET INACTIVE;
let $inactive_undo_space = undo_003;
source include/wait_until_undo_space_is_empty.inc;
ALTER UNDO TABLESPACE undo_003 SET ACTIVE;
SELECT NAME, SPACE_TYPE, STATE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE SPACE_TYPE = 'Undo' ORDER BY NAME;
--echo #
--echo # Inject a simulated fast shutdown during undo truncate. The injection
--echo # does't really shutdown, it just does not finish the truncate.
--echo #
SET GLOBAL DEBUG="+d,ib_undo_trunc_fail_fast_shutdown";
ALTER UNDO TABLESPACE undo_003 SET INACTIVE;
let $inactive_undo_space = undo_003;
source include/wait_until_undo_space_is_empty.inc;
ALTER UNDO TABLESPACE undo_003 SET ACTIVE;
SELECT NAME, SPACE_TYPE, STATE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE SPACE_TYPE = 'Undo' ORDER BY NAME;
--echo #
--echo # Inject a failure to actually truncate the undo space.
--echo #
SET GLOBAL DEBUG="+d,ib_undo_trunc_fail_truncate";
ALTER UNDO TABLESPACE undo_003 SET INACTIVE;
let $inactive_undo_space = undo_003;
source include/wait_until_undo_space_is_empty.inc;
ALTER UNDO TABLESPACE undo_003 SET ACTIVE;
SELECT NAME, SPACE_TYPE, STATE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES
WHERE SPACE_TYPE = 'Undo' ORDER BY NAME;
--echo #
--echo # Cleanup
--echo #
SET GLOBAL DEBUG="-d,ib_undo_trunc_fail_get_mdl";
SET GLOBAL DEBUG="-d,ib_undo_trunc_fail_marked_space";
SET GLOBAL DEBUG="-d,ib_undo_trunc_fail_start_logging";
SET GLOBAL DEBUG="-d,ib_undo_trunc_fail_fast_shutdown";
SET GLOBAL DEBUG="-d,ib_undo_trunc_fail_truncate";
ALTER UNDO TABLESPACE innodb_undo_001 SET ACTIVE;
ALTER UNDO TABLESPACE innodb_undo_002 SET ACTIVE;
ALTER UNDO TABLESPACE undo_003 SET INACTIVE;
ALTER UNDO TABLESPACE undo_004 SET INACTIVE;
ALTER UNDO TABLESPACE undo_005 SET INACTIVE;
let $inactive_undo_space = undo_003;
source include/wait_until_undo_space_is_empty.inc;
let $inactive_undo_space = undo_004;
source include/wait_until_undo_space_is_empty.inc;
let $inactive_undo_space = undo_005;
source include/wait_until_undo_space_is_empty.inc;
DROP UNDO TABLESPACE undo_003;
DROP UNDO TABLESPACE undo_004;
DROP UNDO TABLESPACE undo_005;