polardbxengine/mysql-test/suite/clone/t/error_ddl.test

311 lines
7.6 KiB
Plaintext

# Test clone error with concurrent DDL
--source include/have_debug_sync.inc
--source include/count_sessions.inc
--let $CLONE_DATADIR = $MYSQL_TMP_DIR/data_new
--let $CLONE_DATADIR2 = $MYSQL_TMP_DIR/data_new2
--let $MYSQLD_DATADIR= `select @@datadir;`
--let $ddl_err = ER_CLONE_DDL_IN_PROGRESS
if($remote_clone) {
--let $ddl_err = ER_CLONE_DONOR
}
--replace_result $CLONE_PLUGIN CLONE_PLUGIN
--eval INSTALL PLUGIN clone SONAME '$CLONE_PLUGIN'
SHOW VARIABLES LIKE 'clone_ddl_timeout';
--echo # Disable backup lock
SET GLOBAL clone_ddl_timeout = 0;
SHOW VARIABLES LIKE 'clone_ddl_timeout';
--echo # 1. CREATE TABLE while clone in progress
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_ddl WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc
connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl';
--echo # 1A. TOO MANY CLONE IN PROGRESS
--let $CLONE_DATADIR = $CLONE_DATADIR2
--let $clone_err = ER_CLONE_TOO_MANY_CONCURRENT_CLONES
--source ../include/clone_command.inc
--let $clone_err = 0
--let $CLONE_DATADIR = $MYSQL_TMP_DIR/data_new
SET DEBUG_SYNC = 'clone_marked_abort SIGNAL resume_clone';
--send CREATE TABLE t1 (col1 INT PRIMARY KEY)
connection default;
--echo # In connection DEFAULT
--error $ddl_err
--reap
SET DEBUG_SYNC = 'RESET';
connection con1;
--echo # In connection CON1
--reap
SET DEBUG_SYNC = 'RESET';
SHOW CREATE TABLE t1;
--force-rmdir $CLONE_DATADIR
--echo # 2. ALTER TABLE ADD COLUMN [COPY] while clone in progress
connection default;
--echo # In connection DEFAULT
INSERT INTO t1 values(10), (20), (30);
SELECT * FROM t1 ORDER BY col1;
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_ddl WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl';
SET DEBUG_SYNC = 'clone_marked_abort SIGNAL resume_clone';
--send ALTER TABLE t1 ADD COLUMN col2 int, ALGORITHM=COPY
connection default;
--echo # In connection DEFAULT
--error $ddl_err
--reap
SET DEBUG_SYNC = 'RESET';
connection con1;
--echo # In connection CON1
--reap
SET DEBUG_SYNC = 'RESET';
SHOW CREATE TABLE t1;
SELECT * FROM t1 ORDER BY col1;
UPDATE t1 SET col2 = col1 + 1000;
--force-rmdir $CLONE_DATADIR
--echo # 2A. ALTER TABLE ADD COLUMN [INPLACE] while clone in progress
connection default;
--echo # In connection DEFAULT
SELECT * FROM t1 ORDER BY col1;
SET DEBUG_SYNC = 'clone_redo_copy SIGNAL start_ddl WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl';
SET DEBUG_SYNC = 'clone_marked_abort SIGNAL resume_clone';
--send ALTER TABLE t1 ADD COLUMN col3 int, ALGORITHM=INPLACE
connection default;
--echo # In connection DEFAULT
--error $ddl_err
--reap
SET DEBUG_SYNC = 'RESET';
connection con1;
--echo # In connection CON1
--reap
SET DEBUG_SYNC = 'RESET';
SHOW CREATE TABLE t1;
SELECT * FROM t1 ORDER BY col1;
UPDATE t1 SET col3 = col2 + 1000;
--force-rmdir $CLONE_DATADIR
--echo # 3A. ADD INDEX [COPY] while clone in progress
connection default;
--echo # In connection DEFAULT
SELECT * FROM t1 ORDER BY col1;
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_ddl WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl';
SET DEBUG_SYNC = 'clone_marked_abort SIGNAL resume_clone';
--send ALTER TABLE t1 ADD INDEX col2_idx(col2), ALGORITHM=COPY
connection default;
--echo # In connection DEFAULT
--error $ddl_err
--reap
SET DEBUG_SYNC = 'RESET';
connection con1;
--echo # In connection CON1
--reap
SET DEBUG_SYNC = 'RESET';
SHOW CREATE TABLE t1;
SELECT * FROM t1 ORDER BY col1;
--force-rmdir $CLONE_DATADIR
--echo # 3B. ADD INDEX [INPLACE] while clone in progress
connection default;
--echo # In connection DEFAULT
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_ddl WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl';
SET DEBUG_SYNC = 'clone_marked_abort SIGNAL resume_clone';
--send ALTER TABLE t1 ADD INDEX col3_idx(col3), ALGORITHM=INPLACE
connection default;
--echo # In connection DEFAULT
--error $ddl_err
--reap
SET DEBUG_SYNC = 'RESET';
connection con1;
--echo # In connection CON1
--reap
SET DEBUG_SYNC = 'RESET';
SHOW CREATE TABLE t1;
SELECT * FROM t1 ORDER BY col1;
--force-rmdir $CLONE_DATADIR
--echo # 4A. DROP INDEX [COPY] while clone in progress
connection default;
--echo # In connection DEFAULT
SET DEBUG_SYNC = 'clone_redo_copy SIGNAL start_ddl WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl';
SET DEBUG_SYNC = 'clone_marked_abort SIGNAL resume_clone';
--send ALTER TABLE t1 DROP INDEX col3_idx, ALGORITHM=COPY
connection default;
--echo # In connection DEFAULT
--error $ddl_err
--reap
SET DEBUG_SYNC = 'RESET';
connection con1;
--echo # In connection CON1
--reap
SET DEBUG_SYNC = 'RESET';
SHOW CREATE TABLE t1;
SELECT * FROM t1 ORDER BY col1;
--force-rmdir $CLONE_DATADIR
--echo # 4B. DROP INDEX [INPLACE] while clone in progress
connection default;
--echo # In connection DEFAULT
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_ddl WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl';
SET DEBUG_SYNC = 'clone_marked_abort SIGNAL resume_clone';
--send ALTER TABLE t1 DROP INDEX col2_idx, ALGORITHM=INPLACE
connection default;
--echo # In connection DEFAULT
--error $ddl_err
--reap
SET DEBUG_SYNC = 'RESET';
connection con1;
--echo # In connection CON1
--reap
SET DEBUG_SYNC = 'RESET';
SHOW CREATE TABLE t1;
SELECT * FROM t1 ORDER BY col1;
--force-rmdir $CLONE_DATADIR
--echo # 5. TRUNCATE TABLE while clone in progress
connection default;
--echo # In connection DEFAULT
SELECT * FROM t1 ORDER BY col1;
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_ddl WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl';
SET DEBUG_SYNC = 'clone_marked_abort SIGNAL resume_clone';
--send TRUNCATE TABLE t1
connection default;
--echo # In connection DEFAULT
--error $ddl_err
--reap
SET DEBUG_SYNC = 'RESET';
connection con1;
--echo # In connection CON1
--reap
SET DEBUG_SYNC = 'RESET';
SHOW CREATE TABLE t1;
SELECT * FROM t1 ORDER BY col1;
--force-rmdir $CLONE_DATADIR
--echo # 6. DROP TABLE while clone in progress
connection default;
--echo # In connection DEFAULT
INSERT INTO t1 values(10, 100, 1000);
SELECT * FROM t1 ORDER BY col1;
SET DEBUG_SYNC = 'clone_redo_copy SIGNAL start_ddl WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl';
SET DEBUG_SYNC = 'clone_marked_abort SIGNAL resume_clone';
--send DROP TABLE t1
connection default;
--echo # In connection DEFAULT
--error $ddl_err
--reap
connection con1;
--echo # In connection CON1
--reap
CREATE TABLE t1(col1 int);
--force-rmdir $CLONE_DATADIR
--echo # 7. KILL CLONE command while in progress
connection default;
--echo # In connection DEFAULT
--let $CON_ID= `SELECT CONNECTION_ID()`
INSERT INTO t1 values(10), (20), (30);
SELECT * FROM t1 ORDER BY col1;
SET DEBUG_SYNC = 'clone_redo_copy SIGNAL start_kill WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_kill';
--replace_result $CON_ID CON_ID
--eval KILL QUERY $CON_ID
SET DEBUG_SYNC= 'now SIGNAL resume_clone';
connection default;
--echo # In connection DEFAULT
--error ER_QUERY_INTERRUPTED
--reap
--force-rmdir $CLONE_DATADIR
--echo #Cleanup
connection default;
--echo # In connection DEFAULT
disconnect con1;
SET DEBUG_SYNC = 'RESET';
DROP TABLE t1;
UNINSTALL PLUGIN clone;
--source include/wait_until_count_sessions.inc