165 lines
5.9 KiB
PHP
165 lines
5.9 KiB
PHP
# ==== Purpose ====
|
|
#
|
|
# This file is an engine to process commands like
|
|
# rpl_mixing_engines.inc. It has the same set of commands, and in
|
|
# addition the extra command 'recovery'. The 'configure' and 'clean'
|
|
# commands are also extended version of the same commands in
|
|
# rpl_mixing_engines.inc.
|
|
#
|
|
# ==== Usage ====
|
|
#
|
|
# See rpl_mixing_engines.inc.
|
|
#
|
|
# ==== Implementation ====
|
|
#
|
|
# This file has its own code for 'configure' and 'clean'. Other
|
|
# commands are delegated to rpl_mixing_engines.inc.
|
|
|
|
--let $rmcs_initial_commands= $commands
|
|
|
|
#
|
|
# Creates tables used throughout the test and changes the type of the
|
|
# mysql.slave_relay_log_info to Innodb.
|
|
#
|
|
if ($commands == configure)
|
|
{
|
|
--echo ==== begin rpl_mts_crash_safe.inc:configure ====
|
|
--let $count_database= 1
|
|
while ($count_database <= $max_workers)
|
|
{
|
|
--echo ---- begin configure database test_$count_database ----
|
|
--connection master
|
|
--let $commands= configure
|
|
--let $database_name= test_$count_database
|
|
--source extra/rpl_tests/rpl_mixing_engines.inc
|
|
--echo ---- end configure database test_$count_database ----
|
|
inc $count_database;
|
|
}
|
|
|
|
--sync_slave_with_master
|
|
--source include/stop_slave.inc
|
|
let $saved_workers= `SELECT @@global.slave_parallel_workers`;
|
|
let $saved_checkpoint= `SELECT @@global.slave_checkpoint_period`;
|
|
|
|
SHOW CREATE TABLE mysql.slave_master_info;
|
|
SHOW CREATE TABLE mysql.slave_relay_log_info;
|
|
SHOW CREATE TABLE mysql.slave_worker_info;
|
|
ALTER TABLE mysql.slave_master_info ENGINE= Innodb;
|
|
ALTER TABLE mysql.slave_relay_log_info ENGINE= Innodb;
|
|
ALTER TABLE mysql.slave_worker_info ENGINE= Innodb;
|
|
SHOW CREATE TABLE mysql.slave_master_info;
|
|
SHOW CREATE TABLE mysql.slave_relay_log_info;
|
|
SHOW CREATE TABLE mysql.slave_worker_info;
|
|
--let $commands=
|
|
--echo ==== end rpl_mts_crash_safe.inc:configure ====
|
|
}
|
|
|
|
if ($commands == clean)
|
|
{
|
|
--echo ==== begin rpl_mts_crash_safe.inc:clean ====
|
|
--connection slave
|
|
--source include/stop_slave.inc
|
|
--disable_query_log
|
|
eval SET @@global.slave_parallel_workers= $saved_workers;
|
|
eval SET @@global.slave_checkpoint_period= $saved_checkpoint;
|
|
--enable_query_log
|
|
--source include/start_slave.inc
|
|
|
|
--connection master
|
|
--let $count_database= 1
|
|
while ($count_database <= $max_workers)
|
|
{
|
|
--echo ---- begin clean database test_$count_database ----
|
|
--let $commands= clean
|
|
--let $database_name= test_$count_database
|
|
--source extra/rpl_tests/rpl_mixing_engines.inc
|
|
--echo ---- end clean database test_$count_database ----
|
|
inc $count_database;
|
|
}
|
|
--let $commands=
|
|
--echo ==== end rpl_mts_crash_safe.inc:clean ====
|
|
}
|
|
|
|
if ($commands == recovery)
|
|
{
|
|
--echo ==== begin rpl_mts_crash_safe.inc:recovery ====
|
|
--connection master
|
|
let $m_before_master_file= query_get_value("SHOW MASTER STATUS", "File", 1);
|
|
let $m_before_master_pos= query_get_value("SHOW MASTER STATUS", "Position", 1);
|
|
|
|
#### Guaranteeing that all events in the binary log are transfered to the slave ######
|
|
--connection slave
|
|
let $saved_current_workers= `SELECT @@global.slave_parallel_workers`;
|
|
let $saved_current_checkpoint= `SELECT @@global.slave_checkpoint_period`;
|
|
SET GLOBAL debug="d,rotate_slave_debug_group";
|
|
--source include/start_slave_io.inc
|
|
let $wait_condition=SELECT Master_log_pos = $m_before_master_pos AND Master_log_name = "$m_before_master_file" FROM mysql.slave_master_info;
|
|
let $show_rpl_debug_info= 1;
|
|
--source include/wait_condition_or_abort.inc
|
|
|
|
#### Crashing server after assigning and processing jobs ######
|
|
--connection slave
|
|
|
|
--let $mts_run=`select @@global.slave_parallel_workers > 0`
|
|
eval SET @@global.slave_checkpoint_group= $count_debug_groups;
|
|
SET GLOBAL debug="d,check_slave_debug_group";
|
|
SET GLOBAL debug="+d,mts_distribute_round_robin";
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
|
--error 0, 2013
|
|
START SLAVE SQL_THREAD;
|
|
--source include/wait_until_disconnected.inc
|
|
|
|
#### MTS can not relay-log-recover in presense of gaps that the test creates
|
|
#### The server has to be restarted with --relay-log-recovery = 0 followed by
|
|
#### START SLAVE UNTIL SQL_AFTER_MTS_GAPS.
|
|
|
|
if ($mts_run)
|
|
{
|
|
--echo ** fixing gaps **
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0
|
|
|
|
--source include/rpl_start_server.inc
|
|
|
|
START SLAVE UNTIL SQL_AFTER_MTS_GAPS;
|
|
--let $slave_param= Until_Condition
|
|
--let $slave_param_value= DONE
|
|
--source include/wait_for_slave_param.inc
|
|
# there's a chance it will hang at this point (thanks to pre-exec UNTIL check)
|
|
--source include/wait_for_slave_sql_to_stop.inc
|
|
}
|
|
|
|
--echo ** regular restart **
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --skip-slave-start --slave-transaction-retries=0 --sync-master-info=1
|
|
--source include/rpl_restart_server.inc
|
|
|
|
#### Checking if the recovery worked and the coordinator has an updated state. ####
|
|
--connection slave
|
|
--source include/start_slave_io.inc
|
|
let $wait_condition=SELECT Master_log_pos = $m_before_master_pos AND Master_log_name = "$m_before_master_file" FROM mysql.slave_master_info;
|
|
--source include/wait_condition_or_abort.inc
|
|
--enable_query_log
|
|
|
|
--source include/start_slave_sql.inc
|
|
let $wait_condition=SELECT Master_log_pos = $m_before_master_pos AND Master_log_name = "$m_before_master_file" FROM mysql.slave_relay_log_info;
|
|
--source include/wait_condition_or_abort.inc
|
|
|
|
--source include/stop_slave.inc
|
|
eval SET @@global.slave_parallel_workers= $saved_current_workers;
|
|
eval SET @@global.slave_checkpoint_period= $saved_current_checkpoint;
|
|
|
|
--let $commands=
|
|
--echo ==== end rpl_mts_crash_safe.inc:recovery ====
|
|
}
|
|
|
|
if ($commands != '')
|
|
{
|
|
--echo ==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ====
|
|
--connection master
|
|
--source extra/rpl_tests/rpl_mixing_engines.inc
|
|
--echo ==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ====
|
|
}
|
|
|
|
--let $commands= $rmcs_initial_commands
|