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

286 lines
8.7 KiB
Plaintext

# Test clone with different table types with debug sync
--source include/have_debug_sync.inc
--source include/count_sessions.inc
--source include/not_windows.inc
## Install plugin
--let $CLONE_DATADIR = $MYSQL_TMP_DIR/data_new
--replace_result $CLONE_PLUGIN CLONE_PLUGIN
--eval INSTALL PLUGIN clone SONAME '$CLONE_PLUGIN'
## Create test schema
--source ../include/create_schema.inc
# Insert 150 rows
call execute_dml(0, 0, 150, 150, 10, 0);
# Check base rows
SHOW CREATE TABLE t1;
SELECT count(*) from t1;
SELECT col1, col2, col3, SUBSTRING(col4, 1000, 32) FROM t1 ORDER BY col1 LIMIT 10;
SELECT col1, col2, col3, SUBSTRING(col4, 1000, 32) FROM t1 ORDER BY col1 DESC LIMIT 10;
SHOW CREATE TABLE t2;
SELECT count(*) from t2;
SELECT col1, col2, col3, SUBSTRING(col4, 1000, 32) FROM t2 ORDER BY col1 LIMIT 10;
SELECT col1, col2, col3, SUBSTRING(col4, 1000, 32) FROM t2 ORDER BY col1 DESC LIMIT 10;
## Test-1: Clone with dirty pages and redo log [No zero copy/sendfile]
--echo # In connection default - Cloning database
SET global debug="+d,clone_no_zero_copy";
SET DEBUG_SYNC = 'RESET';
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_dml1 WAIT_FOR resume_clone1';
SET DEBUG_SYNC = 'clone_page_copy SIGNAL start_dml2 WAIT_FOR resume_clone2';
--source ../include/clone_command_send.inc
--echo # In connection con1 - Running Update Random [0 - 150 Key Range]
connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'now WAIT_FOR start_dml1';
START TRANSACTION;
CALL execute_dml(1, 0, 150, 200, 100, 1);
COMMIT;
--echo # Flush all dirty buffers
SET GLOBAL innodb_buf_flush_list_now = 1;
SET DEBUG_SYNC = 'now SIGNAL resume_clone1';
SET DEBUG_SYNC = 'now WAIT_FOR start_dml2';
START TRANSACTION;
CALL execute_dml(1, 0, 150, 200, 100, 1);
COMMIT;
SET DEBUG_SYNC = 'now SIGNAL resume_clone2';
connection default;
--echo # In connection default - Cloning database
--reap
SET global debug="-d,clone_no_zero_copy";
disconnect con1;
--echo # Restart cloned database
--replace_result $CLONE_DATADIR CLONE_DATADIR
--let restart_parameters="restart: --datadir=$CLONE_DATADIR"
--source include/restart_mysqld.inc
# Check table in cloned database
SHOW CREATE TABLE t1;
SELECT count(*) from t1;
SELECT col1, col3, SUBSTRING(col4, 1000, 32) FROM t1 ORDER BY col1 LIMIT 10;
SELECT col1, col3, SUBSTRING(col4, 1000, 32) FROM t1 ORDER BY col1 DESC LIMIT 10;
SHOW CREATE TABLE t2;
SELECT count(*) from t2;
SELECT col1, col3, SUBSTRING(col4, 1000, 32) FROM t2 ORDER BY col1 LIMIT 10;
SELECT col1, col3, SUBSTRING(col4, 1000, 32) FROM t2 ORDER BY col1 DESC LIMIT 10;
# Execute procedure to delete all rows and insert
call execute_dml(3, 0, 1, 1, 1, 0);
call execute_dml(0, 0, 150, 150, 100, 0);
SELECT col1, col2, col3, SUBSTRING(col4, 1000, 32) FROM t1 ORDER BY col1 LIMIT 10;
SELECT col1, col2, col3, SUBSTRING(col4, 1000, 32) FROM t1 ORDER BY col1 DESC LIMIT 10;
SELECT col1, col2, col3, SUBSTRING(col4, 1000, 32) FROM t2 ORDER BY col1 LIMIT 10;
SELECT col1, col2, col3, SUBSTRING(col4, 1000, 32) FROM t2 ORDER BY col1 DESC LIMIT 10;
# Restart and Remove cloned directory
--let restart_parameters="restart:"
--source include/restart_mysqld.inc
--force-rmdir $CLONE_DATADIR
## Test-2A: Clone with redo log ending at file boundary
SET DEBUG_SYNC = 'RESET';
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_dml1 WAIT_FOR resume_clone1';
SET DEBUG_SYNC = 'clone_page_copy SIGNAL start_dml2 WAIT_FOR resume_clone2';
--source ../include/clone_command_send.inc
--echo # In connection con1 - Running Update Random [0 - 10 Key Range]
connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'now WAIT_FOR start_dml1';
START TRANSACTION;
CALL execute_dml(1, 0, 10, 10, 10, 1);
COMMIT;
--echo # Flush all dirty buffers
SET GLOBAL innodb_buf_flush_list_now = 1;
SET DEBUG_SYNC = 'now SIGNAL resume_clone1';
SET DEBUG_SYNC = 'now WAIT_FOR start_dml2';
SET global debug="+d,clone_arch_log_stop_file_end";
START TRANSACTION;
# Execute procedure to delete all rows and insert 150 rows
call execute_dml(3, 0, 1, 1, 1, 0);
call execute_dml(0, 0, 150, 150, 10, 0);
COMMIT;
SET DEBUG_SYNC = 'now SIGNAL resume_clone2';
connection default;
--echo # In connection default - Cloning database
--reap
SET global debug="-d,clone_arch_log_stop_file_end";
# Removed cloned data
--force-rmdir $CLONE_DATADIR
## Test-2B: Clone with redo log ending at file boundary + some bytes
SET DEBUG_SYNC = 'RESET';
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_dml1 WAIT_FOR resume_clone1';
SET DEBUG_SYNC = 'clone_page_copy SIGNAL start_dml2 WAIT_FOR resume_clone2';
--source ../include/clone_command_send.inc
--echo # In connection con1 - Running Update Random [0 - 10 Key Range]
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_dml1';
START TRANSACTION;
CALL execute_dml(1, 0, 10, 10, 10, 1);
COMMIT;
--echo # Flush all dirty buffers
SET GLOBAL innodb_buf_flush_list_now = 1;
SET DEBUG_SYNC = 'now SIGNAL resume_clone1';
SET DEBUG_SYNC = 'now WAIT_FOR start_dml2';
SET global debug="+d,clone_arch_log_stop_file_end";
SET global debug="+d,clone_arch_log_extra_bytes";
START TRANSACTION;
# Execute procedure to delete all rows and insert 150 rows
call execute_dml(3, 0, 1, 1, 1, 0);
call execute_dml(0, 0, 150, 150, 10, 0);
COMMIT;
SET DEBUG_SYNC = 'now SIGNAL resume_clone2';
connection default;
--echo # In connection default - Cloning database
--reap
SET global debug="-d,clone_arch_log_stop_file_end";
SET global debug="-d,clone_arch_log_extra_bytes";
# Removed cloned data
--force-rmdir $CLONE_DATADIR
## Test-3A: Shutdown while Clone in progress [FILE_COPY]
SET DEBUG_SYNC = 'RESET';
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_dml1 WAIT_FOR resume_clone1';
--source ../include/clone_command_send.inc
--echo # In connection con1 - Running Update Random [0 - 10 Key Range]
connection con1;
SET DEBUG_SYNC = 'now WAIT_FOR start_dml1';
START TRANSACTION;
CALL execute_dml(1, 0, 10, 10, 10, 1);
COMMIT;
--source include/shutdown_mysqld.inc
connection default;
# During shutdown it is possible to get "2013" - Lost connection to server
--echo # In connection default - Cloning database
--error ER_QUERY_INTERRUPTED,2013,ER_CLONE_DONOR
--reap
disconnect con1;
# Removed cloned data
--force-rmdir $CLONE_DATADIR
--source include/start_mysqld.inc
## Test-3B: Shutdown while Clone in progress [PAGE_COPY]
SET DEBUG_SYNC = 'RESET';
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_dml1 WAIT_FOR resume_clone1';
SET DEBUG_SYNC = 'clone_page_copy SIGNAL start_dml2 WAIT_FOR resume_clone2';
--source ../include/clone_command_send.inc
--echo # In connection con1 - Running Update Random [0 - 10 Key Range]
connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'now WAIT_FOR start_dml1';
START TRANSACTION;
CALL execute_dml(1, 0, 10, 10, 10, 1);
COMMIT;
--echo # Flush all dirty buffers
SET GLOBAL innodb_buf_flush_list_now = 1;
SET DEBUG_SYNC = 'now SIGNAL resume_clone1';
SET DEBUG_SYNC = 'now WAIT_FOR start_dml2';
START TRANSACTION;
# Execute procedure to delete all rows and insert 50 rows
call execute_dml(3, 0, 1, 1, 1, 0);
call execute_dml(0, 0, 50, 50, 10, 0);
COMMIT;
--source include/shutdown_mysqld.inc
connection default;
--echo # In connection default - Cloning database
--error ER_QUERY_INTERRUPTED,2013,ER_CLONE_DONOR
--reap
disconnect con1;
# Removed cloned data
--force-rmdir $CLONE_DATADIR
--source include/start_mysqld.inc
## Test-3C: Shutdown while Clone in progress [REDO_COPY]
SET DEBUG_SYNC = 'RESET';
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_dml1 WAIT_FOR resume_clone1';
SET DEBUG_SYNC = 'clone_page_copy SIGNAL start_dml2 WAIT_FOR resume_clone2';
SET DEBUG_SYNC = 'clone_redo_copy SIGNAL start_dml3 WAIT_FOR resume_clone3';
--source ../include/clone_command_send.inc
--echo # In connection con1 - Running Update Random [0 - 10 Key Range]
connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'now WAIT_FOR start_dml1';
START TRANSACTION;
CALL execute_dml(1, 0, 10, 10, 10, 1);
COMMIT;
--echo # Flush all dirty buffers
SET GLOBAL innodb_buf_flush_list_now = 1;
SET DEBUG_SYNC = 'now SIGNAL resume_clone1';
SET DEBUG_SYNC = 'now WAIT_FOR start_dml2';
START TRANSACTION;
# Execute procedure to delete all rows and insert 50 rows
call execute_dml(3, 0, 1, 1, 1, 0);
call execute_dml(0, 0, 50, 50, 10, 0);
COMMIT;
--echo # Flush all dirty buffers
SET GLOBAL innodb_buf_flush_list_now = 1;
SET DEBUG_SYNC = 'now SIGNAL resume_clone2';
SET DEBUG_SYNC = 'now WAIT_FOR start_dml3';
START TRANSACTION;
# Execute procedure to delete all rows and insert 50 rows
call execute_dml(3, 0, 1, 1, 1, 0);
call execute_dml(0, 0, 50, 50, 10, 0);
COMMIT;
--source include/shutdown_mysqld.inc
connection default;
--echo # In connection default - Cloning database
--error ER_QUERY_INTERRUPTED,2013,ER_CLONE_DONOR
--reap
disconnect con1;
# Removed cloned data
--force-rmdir $CLONE_DATADIR
--source include/start_mysqld.inc
#Cleanup
--source ../include/drop_schema.inc
UNINSTALL PLUGIN clone;
SET DEBUG_SYNC = 'RESET';
--source include/wait_until_count_sessions.inc