mirror of
https://github.com/MariaDB/server.git
synced 2025-01-21 22:34:18 +01:00
3889dffcc0
Problem 1: The test waits for an error in the slave sql thread, then resolves the error and issues 'start slave'. However, there is a gap between when the error is reported and the slave sql thread stops. If this gap was long, the slave would still be running when 'start slave' happened, so 'start slave' would fail and cause a test failure. Fix 1: Made wait_for_slave_sql_error wait for the slave to stop instead of wait for error in the IO thread. After stopping, the error code is verified. If the error code is wrong, debug info is printed. To print debug info, the debug printing code in wait_for_slave_param.inc was moved out to a new file, show_rpl_debug_info.inc. Problem 2: rpl_stm_mystery22 is a horrible name, the comments in the file didn't explain anything useful, the test was generally hard to follow, and the test was essentially duplicated between rpl_stm_mystery22 and rpl_row_mystery22. Fix 2: The test is about conflicts in the slave SQL thread, hence I renamed the tests to rpl_{stm,row}_conflicts. Refactored the test so that the work is done in extra/rpl_tests/rpl_conflicts.inc, and rpl.rpl_{row,stm}_conflicts merely sets some variables and then sourced extra/rpl_tests/rpl_conflicts.inc. The tests have been rewritten and comments added. Problem 3: When calling wait_for_slave_sql_error.inc, you always want to verify that the sql thread stops because of the expected error and not because of some other error. Currently, wait_for_slave_sql_error.inc allows the caller to omit the error code, in which case all error codes are accepted. Fix 3: Made wait_for_slave_sql_error.inc fail if no error code is given. Updated rpl_filter_tables_not_exist accordingly. Problem 4: rpl_filter_tables_not_exist had a typo, the dollar sign was missing in a 'let' statement. Fix 4: Added dollar sign. Problem 5: When replicating from other servers than the one named 'master', the wait_for_slave_* macros were unable to print debug info on the master. Fix 5: Replace parameter $slave_keep_connection by $master_connection.
124 lines
2.5 KiB
Text
124 lines
2.5 KiB
Text
# This test checks that in a dual-head setup
|
|
# A->B->A, where A has --log-slave-updates (why would it?
|
|
# assume that there is a C as slave of A),
|
|
# then the Exec_master_log_pos of SHOW SLAVE STATUS does
|
|
# not stay too low on B(BUG#13023 due to events ignored because
|
|
# of their server id).
|
|
# It also will test BUG#13861.
|
|
|
|
source include/master-slave.inc;
|
|
source include/have_innodb.inc;
|
|
|
|
|
|
# set up "dual head"
|
|
|
|
# Needed for debug info in wait_for_slave_sql_to_stop.
|
|
let $master_connection= slave;
|
|
connection slave;
|
|
reset master;
|
|
|
|
connection master;
|
|
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
|
eval change master to master_host="127.0.0.1",master_port=$SLAVE_MYPORT,master_user="root";
|
|
|
|
start slave;
|
|
|
|
# now we test it
|
|
|
|
connection slave;
|
|
|
|
create table t1 (n int);
|
|
|
|
save_master_pos;
|
|
connection master;
|
|
sync_with_master;
|
|
|
|
#
|
|
# BUG#13861 - START SLAVE UNTIL may stop 1 evnt too late if
|
|
# log-slave-updates and circul repl
|
|
#
|
|
stop slave;
|
|
|
|
create table t2 (n int); # create one ignored event
|
|
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
|
|
connection slave;
|
|
|
|
show tables;
|
|
|
|
save_master_pos;
|
|
|
|
create table t3 (n int) engine=innodb;
|
|
set @a=1;
|
|
insert into t3 values(@a);
|
|
begin;
|
|
insert into t3 values(2);
|
|
insert into t3 values(3);
|
|
commit;
|
|
insert into t3 values(4);
|
|
|
|
|
|
connection master;
|
|
|
|
# bug is that START SLAVE UNTIL may stop too late, we test that by
|
|
# asking it to stop before creation of t3.
|
|
|
|
start slave until master_log_file="slave-bin.000001",master_log_pos=195;
|
|
--source include/wait_for_slave_sql_to_stop.inc
|
|
|
|
# then BUG#13861 causes t3 to show up below (because stopped too
|
|
# late).
|
|
|
|
show tables;
|
|
|
|
# ensure that we do not break set @a=1; insert into t3 values(@a);
|
|
start slave until master_log_file="slave-bin.000001",master_log_pos=438;
|
|
--source include/wait_for_slave_sql_to_stop.inc
|
|
select * from t3;
|
|
|
|
# ensure that we do not break transaction
|
|
start slave until master_log_file="slave-bin.000001",master_log_pos=663;
|
|
--source include/wait_for_slave_sql_to_stop.inc
|
|
select * from t3;
|
|
|
|
start slave;
|
|
|
|
# BUG#13023 is that Exec_master_log_pos may stay too low "forever":
|
|
|
|
connection master;
|
|
|
|
create table t4 (n int); # create 3 ignored events
|
|
create table t5 (n int);
|
|
create table t6 (n int);
|
|
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
|
|
connection slave;
|
|
|
|
save_master_pos;
|
|
|
|
connection master;
|
|
|
|
# then BUG#13023 caused hang below ("master" looks behind, while it's
|
|
# not in terms of updates done).
|
|
|
|
sync_with_master;
|
|
|
|
show tables;
|
|
|
|
# cleanup
|
|
|
|
stop slave;
|
|
reset slave;
|
|
drop table t1,t2,t3,t4,t5,t6;
|
|
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
|
|
# End of 4.1 tests
|