311 lines
7.6 KiB
Plaintext
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
|