# # BUG#45214 # The common part of the "rpl_get_master_version_and_clock" test. # Restart slave under network disconnection between slave and master # following the steps: # 0 - Set DEBUG_SYNC_ACTION to wait # before call mysql_real_query(...) function in get_master_version_and_clock(...) # function and hang here # 1 - activate a sync-point through the $dbug_sync_point argument of the test # 2 - shutdown master server for simulating network disconnection # 3 - signal to the IO thread through $debug_sync_action to unhold from the sync-point # 4 - check if the slave I/O thread tries to reconnect to master. # # Note: make sure to initialize the $debug_sync_action and $dbug_sync_point # before calling the test script. # # Pattern of usage: # # The caller test supplies the DBUG_EXECUTE_IF name # # let $dbug_sync_point = 'dbug_execute_if_name'; # # as well as the action list for DEBUG_SYNC # # let $debug_sync_action= 'now signal signal_name'; # # The $dbug_sync_point becomes the value of @@global.debug generating # a newly started IO-slave thread's session value. # Notice incremental operations to add and remove dbug_execute_if_name # from the global variable allows propagation more dbug arguments # out of mtr. # The action list is to fire at proper time according to test logics # (see pp 0-4 above). # connection slave; if (!$debug_sync_action) { --die Cannot continue. Please set value for debug_sync_action. } # Restart slave --source include/stop_slave.inc eval SET @@global.debug= "+d,$dbug_sync_point"; --source include/start_slave.inc --echo slave is going to hang in get_master_version_and_clock --let $rpl_server_number= 1 --source include/rpl_stop_server.inc --echo slave is unblocked eval SET DEBUG_SYNC=$debug_sync_action; # Show slave last IO errno connection slave; --echo Check network error happened here # '2013' CR_SERVER_LOST # '2003' CR_CONN_HOST_ERROR # '2002' CR_CONNECTION_ERROR # '2006' CR_SERVER_GONE_ERROR # '1040' ER_CON_COUNT_ERROR # '1053' ER_SERVER_SHUTDOWN let $slave_io_errno= 1040, 1053, 2002, 2003, 2006, 2013; --let $slave_io_error_is_nonfatal= 1 source include/wait_for_slave_io_error.inc; # deactivate the sync point of get_master_version_and_clock() # now to avoid restarting IO-thread to re-enter it. # There will be a new IO thread forked out with its @@session.debug # unset. eval set @@global.debug = "-d,$dbug_sync_point"; --let $rpl_server_number= 1 --source include/rpl_start_server.inc # We don't source include/wait_for_slave_io_to_start.inc, because the # IO thread has an error and wait_for_slave_io_to_start.inc fails if # the IO thread has an error. --let $slave_param= Slave_IO_Running --let $slave_param_value= Yes --source include/wait_for_slave_param.inc