# 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