## Clone command test # These variables can to be set before sourcing this file. Currently we used # to test both local and remote clone. # # 1. Clone command is expected to return error # --let clone_err= # # 2. Test Remote Clone command. Default is local clone. # --let remote_clone = 1 # # 3. Remote Clone command is expected to return error and the error number # is different from local clone. # --let clone_remote_err = # # 4. Skip clone_valid_donor_list configuration for testing error cases # --let skip_donor_config = 1 # # 5. Test clone automatic tuning of threads # --let clone_auto_tune = 1 # # 6. Test clone command forcing SSL [REQUIRES SSL] # --let clone_require_ssl = 1 # # 7. Test clone command forcing insecure connection [REQUIRES NO SSL] # --let clone_require_no_ssl = 1 # # 8. Test clone command forcing SSL certificate validation # --let clone_require_ssl_certificate = 1 # --let $remote_dir_clause = DATA DIRECTORY = '$CLONE_DATADIR' if ($clone_remote_replace) { --let $remote_dir_clause = --let $remote_clone = 1 } if ($clone_err != ER_PLUGIN_IS_NOT_LOADED) { if (!$clone_auto_tune) { SET GLOBAL clone_autotune_concurrency = OFF; SET GLOBAL clone_max_concurrency = 8; } if ($clone_throttle) { SET GLOBAL clone_max_data_bandwidth = 5; SET GLOBAL clone_max_network_bandwidth = 4; } if($remote_clone) { if(!$skip_donor_config) { --replace_result $HOST HOST $PORT PORT --eval SET GLOBAL clone_valid_donor_list = '$HOST:$PORT' } } } if($remote_clone) { # Increase network timeout for valgrind test if ($VALGRIND_TEST) { --disable_query_log SET GLOBAL net_read_timeout = 300; SET LOCAL net_read_timeout = 300; SET GLOBAL net_write_timeout = 300; SET LOCAL net_write_timeout = 300; --enable_query_log } # Execute Remote Clone command with error if ($clone_remote_err) { --replace_result $CLONE_DATADIR CLONE_DATADIR $HOST HOST $PORT PORT $USER USER if ($clone_require_no_ssl) { --error $clone_remote_err --eval CLONE INSTANCE FROM $USER@$HOST:$PORT IDENTIFIED BY '' $remote_dir_clause REQUIRE NO SSL } if(!$clone_require_no_ssl) { --error $clone_remote_err --eval CLONE INSTANCE FROM $USER@$HOST:$PORT IDENTIFIED BY '' $remote_dir_clause } } if (!$clone_remote_err) { if ($clone_err) { if ($clone_err == ER_FILE_EXISTS_ERROR) { --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $HOST HOST $PORT PORT $USER USER --error $clone_err --eval CLONE INSTANCE FROM $USER@$HOST:$PORT IDENTIFIED BY '' $remote_dir_clause } if ($clone_err != ER_FILE_EXISTS_ERROR) { --replace_regex /\([0-9]+\)\./(socket errno)./ --replace_result $CLONE_DATADIR CLONE_DATADIR $HOST HOST $PORT PORT $USER USER --error $clone_err --eval CLONE INSTANCE FROM $USER@$HOST:$PORT IDENTIFIED BY '' $remote_dir_clause } } # Execute Remote Clone command if (!$clone_err) { # Execute Remote Clone command if($clone_require_ssl) { if($clone_require_ssl_certificate) { SHOW VARIABLES LIKE "%clone_ssl%"; --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --eval SET GLOBAL clone_ssl_ca = '$MYSQL_TEST_DIR/std_data/cacert.pem' --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --eval SET GLOBAL clone_ssl_cert = '$MYSQL_TEST_DIR/std_data/client-cert.pem' --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --eval SET GLOBAL clone_ssl_key = '$MYSQL_TEST_DIR/std_data/client-key.pem' } --replace_result $CLONE_DATADIR CLONE_DATADIR $HOST HOST $PORT PORT $USER USER --eval CLONE INSTANCE FROM $USER@$HOST:$PORT IDENTIFIED BY '' $remote_dir_clause REQUIRE SSL } --replace_result $CLONE_DATADIR CLONE_DATADIR $HOST HOST $PORT PORT $USER USER if(!$clone_require_ssl) { if ($clone_require_no_ssl) { --eval CLONE INSTANCE FROM $USER@$HOST:$PORT IDENTIFIED BY '' $remote_dir_clause REQUIRE NO SSL } if(!$clone_require_no_ssl) { --eval CLONE INSTANCE FROM $USER@$HOST:$PORT IDENTIFIED BY '' $remote_dir_clause } } } } # For remote replace, wait for server to restart if ($clone_remote_replace) { --source include/wait_until_disconnected.inc --enable_reconnect --source include/wait_until_connected_again.inc --disable_reconnect if (!$clone_recovery_error) { --disable_query_log use test; --enable_query_log } } if ($VALGRIND_TEST) { --disable_query_log SET GLOBAL net_read_timeout = default; SET LOCAL net_read_timeout = default; SET GLOBAL net_write_timeout = default; SET LOCAL net_write_timeout = default; --enable_query_log } } if (!$remote_clone) { # Execute Local Clone command with error if ($clone_err) { if ($clone_err == ER_FILE_EXISTS_ERROR) { --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR --error $clone_err --eval CLONE LOCAL DATA DIRECTORY = '$CLONE_DATADIR' } if ($clone_err != ER_FILE_EXISTS_ERROR) { --replace_result $CLONE_DATADIR CLONE_DATADIR --error $clone_err --eval CLONE LOCAL DATA DIRECTORY = '$CLONE_DATADIR' } } # Execute Local Clone command if (!$clone_err) { --replace_result $CLONE_DATADIR CLONE_DATADIR --eval CLONE LOCAL DATA DIRECTORY = '$CLONE_DATADIR' } } # PFS views are not available if clone plugin is not installed if ($clone_err != ER_PLUGIN_IS_NOT_LOADED) { if (!$clone_recovery_error) { select ID, STATE, ERROR_NO from performance_schema.clone_status; } if ($clone_recovery_error) { select ID, STATE, ERROR_NO, ERROR_MESSAGE from performance_schema.clone_status; } select ID, STAGE, STATE from performance_schema.clone_progress; # For covering the code fetching all columns if ($clone_auto_tune) { --disable_query_log CREATE TABLE dup_status as select * from performance_schema.clone_status; CREATE TABLE dup_progress as select * from performance_schema.clone_progress; DROP TABLE dup_status; DROP TABLE dup_progress; --enable_query_log } }