mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 03:47:17 +02:00
Patch backported: bzr diff '-rrevid:alfranio.correia@oracle.com-20101121143257-se3vpqus73l4mum0 ..revid:luis.soares@oracle.com-20101124111752-9b8260bd1qak87hr' --old=lp:mysql-server --new=lp:mysql-server
247 lines
7.2 KiB
Text
247 lines
7.2 KiB
Text
# WL2540 replication events checksum
|
|
# Testing configuration parameters
|
|
|
|
--source include/master-slave.inc
|
|
--source include/have_debug.inc
|
|
--source include/have_binlog_format_mixed.inc
|
|
|
|
call mtr.add_suppression('Slave can not handle replication events with the checksum that master is configured to log');
|
|
call mtr.add_suppression('Replication event checksum verification failed');
|
|
# due to C failure simulation
|
|
call mtr.add_suppression('Relay log write failure: could not queue event from master');
|
|
call mtr.add_suppression('Master is configured to log replication events with checksum, but will not send such events to slaves that cannot process them');
|
|
|
|
# A. read/write access to the global vars:
|
|
# binlog_checksum master_verify_checksum slave_sql_verify_checksum
|
|
|
|
connection master;
|
|
|
|
set @master_save_binlog_checksum= @@global.binlog_checksum;
|
|
set @save_master_verify_checksum = @@global.master_verify_checksum;
|
|
|
|
select @@global.binlog_checksum as 'must be CRC32 because of the command line option';
|
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
|
select @@session.binlog_checksum as 'no session var';
|
|
|
|
select @@global.master_verify_checksum as 'must be zero because of default';
|
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
|
select @@session.master_verify_checksum as 'no session var';
|
|
|
|
connection slave;
|
|
|
|
set @slave_save_binlog_checksum= @@global.binlog_checksum;
|
|
set @save_slave_sql_verify_checksum = @@global.slave_sql_verify_checksum;
|
|
|
|
select @@global.slave_sql_verify_checksum as 'must be one because of default';
|
|
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
|
select @@session.slave_sql_verify_checksum as 'no session var';
|
|
|
|
connection master;
|
|
|
|
source include/show_binary_logs.inc;
|
|
set @@global.binlog_checksum = NONE;
|
|
--echo *** must be rotations seen ***
|
|
source include/show_binary_logs.inc;
|
|
|
|
set @@global.binlog_checksum = default;
|
|
|
|
# testing lack of side-effects in non-effective update of binlog_checksum:
|
|
set @@global.binlog_checksum = CRC32;
|
|
set @@global.binlog_checksum = CRC32;
|
|
|
|
set @@global.master_verify_checksum = 0;
|
|
set @@global.master_verify_checksum = default;
|
|
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
set @@global.binlog_checksum = ADLER32;
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
set @@global.master_verify_checksum = 2; # the var is of bool type
|
|
|
|
connection slave;
|
|
|
|
set @@global.slave_sql_verify_checksum = 0;
|
|
set @@global.slave_sql_verify_checksum = default;
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
set @@global.slave_sql_verify_checksum = 2; # the var is of bool type
|
|
|
|
#
|
|
# B. Old Slave to New master conditions
|
|
#
|
|
# while master does not send a checksum-ed binlog the Old Slave can
|
|
# work with the New Master
|
|
|
|
connection master;
|
|
|
|
set @@global.binlog_checksum = NONE;
|
|
create table t1 (a int);
|
|
|
|
# testing that binlog rotation preserves opt_binlog_checksum value
|
|
flush logs;
|
|
flush logs;
|
|
flush logs;
|
|
|
|
sync_slave_with_master;
|
|
#connection slave;
|
|
# checking that rotation on the slave side leaves slave stable
|
|
flush logs;
|
|
flush logs;
|
|
flush logs;
|
|
select count(*) as zero from t1;
|
|
|
|
source include/stop_slave.inc;
|
|
|
|
connection master;
|
|
set @@global.binlog_checksum = CRC32;
|
|
insert into t1 values (1) /* will not be applied on slave due to simulation */;
|
|
|
|
# instruction to the dump thread
|
|
### set @@global.debug='d,simulate_slave_unaware_checksum'; # merge todo: +/- d syntax fails in my clone
|
|
|
|
connection slave;
|
|
set @@global.debug='d,simulate_slave_unaware_checksum'; # merge todo: +/- d syntax fails in my clone
|
|
start slave;
|
|
source include/wait_for_slave_io_to_stop.inc;
|
|
|
|
let $errno= query_get_value(SHOW SLAVE STATUS, Last_IO_Errno, 1);
|
|
let $error= query_get_value(SHOW SLAVE STATUS, Last_IO_Error, 1);
|
|
--echo *** Got IO thread error code: $errno, text: $error ***
|
|
|
|
select count(*) as zero from t1;
|
|
|
|
###connection master;
|
|
set @@global.debug=''; # merge todo: +/- d syntax fails in my clone
|
|
|
|
connection slave;
|
|
source include/start_slave.inc;
|
|
|
|
#
|
|
# C. checksum failure simulations
|
|
#
|
|
|
|
# C1. Failure by a client thread
|
|
connection master;
|
|
set @@global.master_verify_checksum = 1;
|
|
set @@session.debug='d,simulate_checksum_test_failure'; # merge todo deploy +/- syntax
|
|
--error ER_ERROR_WHEN_EXECUTING_COMMAND
|
|
show binlog events;
|
|
set @@session.debug=''; # merge todo: +/- d syntax fails in my clone
|
|
set @@global.master_verify_checksum = default;
|
|
|
|
#connection master;
|
|
sync_slave_with_master;
|
|
|
|
connection slave;
|
|
source include/stop_slave.inc;
|
|
|
|
connection master;
|
|
create table t2 (a int);
|
|
let $pos_master= query_get_value(SHOW MASTER STATUS, Position, 1);
|
|
|
|
connection slave;
|
|
|
|
# C2. Failure by IO thread
|
|
# instruction to io thread
|
|
set @@global.debug='d,simulate_checksum_test_failure'; # merge todo deploy +/- syntax
|
|
start slave io_thread;
|
|
source include/wait_for_slave_io_to_stop.inc;
|
|
let $errno= query_get_value(SHOW SLAVE STATUS, Last_IO_Errno, 1);
|
|
let $error= query_get_value(SHOW SLAVE STATUS, Last_IO_Error, 1);
|
|
--echo *** Got IO thread error code: $errno, text: $error ***
|
|
set @@global.debug=''; # todo: merge
|
|
|
|
# to make IO thread re-read it again w/o the failure
|
|
start slave io_thread;
|
|
let $slave_param= Read_Master_Log_Pos;
|
|
let $slave_param_value= $pos_master;
|
|
source include/wait_for_slave_param.inc;
|
|
|
|
# C3. Failure by SQL thread
|
|
# instruction to sql thread;
|
|
set @@global.slave_sql_verify_checksum = 1;
|
|
|
|
set @@global.debug='d,simulate_checksum_test_failure'; # merge todo deploy +/- syntax
|
|
|
|
start slave sql_thread;
|
|
source include/wait_for_slave_sql_to_stop.inc;
|
|
let $errno= query_get_value(SHOW SLAVE STATUS, Last_SQL_Errno, 1);
|
|
let $error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Error, 1);
|
|
--echo *** Got SQL thread error code: $errno, text: $error ***
|
|
|
|
# resuming SQL thread to parse out the event w/o the failure
|
|
|
|
set @@global.debug='';
|
|
source include/start_slave.inc;
|
|
|
|
connection master;
|
|
sync_slave_with_master;
|
|
|
|
#connection slave;
|
|
select count(*) as 'must be zero' from t2;
|
|
|
|
#
|
|
# D. Reset slave, Change-Master, Binlog & Relay-log rotations with
|
|
# random value on binlog_checksum on both master and slave
|
|
#
|
|
connection slave;
|
|
stop slave;
|
|
reset slave;
|
|
|
|
# randomize slave server's own checksum policy
|
|
set @@global.binlog_checksum= IF(floor((rand()*1000)%2), "CRC32", "NONE");
|
|
flush logs;
|
|
|
|
connection master;
|
|
set @@global.binlog_checksum= CRC32;
|
|
reset master;
|
|
flush logs;
|
|
create table t3 (a int, b char(5));
|
|
|
|
connection slave;
|
|
source include/start_slave.inc;
|
|
|
|
connection master;
|
|
sync_slave_with_master;
|
|
|
|
#connection slave;
|
|
select count(*) as 'must be zero' from t3;
|
|
source include/stop_slave.inc;
|
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
|
eval change master to master_host='127.0.0.1',master_port=$MASTER_MYPORT, master_user='root';
|
|
|
|
connection master;
|
|
flush logs;
|
|
reset master;
|
|
insert into t3 value (1, @@global.binlog_checksum);
|
|
|
|
connection slave;
|
|
source include/start_slave.inc;
|
|
flush logs;
|
|
|
|
connection master;
|
|
sync_slave_with_master;
|
|
|
|
#connection slave;
|
|
select count(*) as 'must be one' from t3;
|
|
|
|
connection master;
|
|
set @@global.binlog_checksum= IF(floor((rand()*1000)%2), "CRC32", "NONE");
|
|
insert into t3 value (1, @@global.binlog_checksum);
|
|
sync_slave_with_master;
|
|
|
|
#connection slave;
|
|
|
|
#clean-up
|
|
|
|
connection master;
|
|
drop table t1, t2, t3;
|
|
set @@global.binlog_checksum = @master_save_binlog_checksum;
|
|
set @@global.master_verify_checksum = @save_master_verify_checksum;
|
|
|
|
#connection slave;
|
|
sync_slave_with_master;
|
|
set @@global.binlog_checksum = @slave_save_binlog_checksum;
|
|
set @@global.slave_sql_verify_checksum = @save_slave_sql_verify_checksum;
|
|
|
|
--echo End of tests
|
|
|
|
--source include/rpl_end.inc
|