Commit b6545b30 authored by Sven Sandberg's avatar Sven Sandberg

BUG#37717: rpl.rpl_stm_until 'stmt' fails sporadically on pushbuild

Problem: After START SLAVE, the Slave_IO_Status column of
SHOW SLAVE STATUS goes from No to Yes asynchronously. That
caused sporadic failures on pushbuild in rpl_stm_until since
the test contains SHOW SLAVE STATUS right after START SLAVE.
Fix: Wait until Slave_IO_Status becomes Yes after each
START SLAVE.
parent 818802a6
# ==== Purpose ====
#
# Waits until the IO thread of the current connection has started and
# connected to the master (i.e., until SHOW SLAVE STATUS returns Yes
# in the Slave_IO_Running field), or until a timeout is reached.
#
# ==== Usage ====
#
# source include/wait_for_slave_io_to_start.inc;
#
# Parameters to this macro are $slave_timeout and
# $slave_keep_connection. See wait_for_slave_param.inc for
# descriptions.
let $slave_param= Slave_IO_Running;
let $slave_param_value= Yes;
let $slave_error_message= Failed while waiting for slave IO thread to start;
source include/wait_for_slave_param.inc;
let $slave_error_message= ;
...@@ -4,7 +4,10 @@ reset master; ...@@ -4,7 +4,10 @@ reset master;
reset slave; reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave; start slave;
[on slave]
include/stop_slave.inc include/stop_slave.inc
==== Create some events on master ====
[on master]
create table t1(n int not null auto_increment primary key); create table t1(n int not null auto_increment primary key);
insert into t1 values (1),(2),(3),(4); insert into t1 values (1),(2),(3),(4);
drop table t1; drop table t1;
...@@ -12,6 +15,8 @@ create table t2(n int not null auto_increment primary key); ...@@ -12,6 +15,8 @@ create table t2(n int not null auto_increment primary key);
insert into t2 values (1),(2); insert into t2 values (1),(2);
insert into t2 values (3),(4); insert into t2 values (3),(4);
drop table t2; drop table t2;
==== Replicate one event at a time on slave ====
[on slave]
start slave until master_log_file='master-bin.000001', master_log_pos=323; start slave until master_log_file='master-bin.000001', master_log_pos=323;
select * from t1; select * from t1;
n n
...@@ -149,6 +154,8 @@ Last_IO_Error # ...@@ -149,6 +154,8 @@ Last_IO_Error #
Last_SQL_Errno 0 Last_SQL_Errno 0
Last_SQL_Error Last_SQL_Error
start slave; start slave;
[on master]
[on slave]
include/stop_slave.inc include/stop_slave.inc
start slave until master_log_file='master-bin.000001', master_log_pos=776; start slave until master_log_file='master-bin.000001', master_log_pos=776;
SHOW SLAVE STATUS; SHOW SLAVE STATUS;
...@@ -190,6 +197,7 @@ Last_IO_Errno # ...@@ -190,6 +197,7 @@ Last_IO_Errno #
Last_IO_Error # Last_IO_Error #
Last_SQL_Errno 0 Last_SQL_Errno 0
Last_SQL_Error Last_SQL_Error
==== Test various error conditions ====
start slave until master_log_file='master-bin', master_log_pos=561; start slave until master_log_file='master-bin', master_log_pos=561;
ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
start slave until master_log_file='master-bin.000001', master_log_pos=561, relay_log_pos=12; start slave until master_log_file='master-bin.000001', master_log_pos=561, relay_log_pos=12;
......
# ==== Purpose ====
#
# Verify that START SLAVE UNTIL replicates until the given binlog
# position but not longer. Verify that START SLAVE UNTIL with various
# incorrect arguments gives an error.
#
# ==== Method ====
#
# On master, create a table and insert some rows. On slave, START
# SLAVE UNTIL so that it reads one event at a time, and check the
# table and the slave status each time.
#
# Then, on slave, run START SLAVE UNTIL with incorrect arguments and
# verify that it gives an error.
#
# ==== Related bugs ====
#
# Bug in this test: BUG#37717: rpl.rpl_stm_until 'stmt' fails sporadically on pushbuild
-- source include/have_binlog_format_mixed_or_statement.inc -- source include/have_binlog_format_mixed_or_statement.inc
-- source include/master-slave.inc -- source include/master-slave.inc
# Test is dependent on binlog positions # Test is dependent on binlog positions
# prepare version for substitutions # Stop slave before it starts replication. Also sync with master
let $VERSION=`select version()`; # to avoid nondeterministic behaviour.
--echo [on slave]
# stop slave before he will start replication also sync with master
# for avoiding undetermenistic behaviour
sync_slave_with_master; sync_slave_with_master;
--source include/stop_slave.inc --source include/stop_slave.inc
--echo ==== Create some events on master ====
--echo [on master]
connection master; connection master;
# create some events on master
create table t1(n int not null auto_increment primary key); create table t1(n int not null auto_increment primary key);
insert into t1 values (1),(2),(3),(4); insert into t1 values (1),(2),(3),(4);
drop table t1; drop table t1;
...@@ -21,9 +40,13 @@ insert into t2 values (1),(2); ...@@ -21,9 +40,13 @@ insert into t2 values (1),(2);
insert into t2 values (3),(4); insert into t2 values (3),(4);
drop table t2; drop table t2;
--echo ==== Replicate one event at a time on slave ====
# try to replicate all queries until drop of t1 # try to replicate all queries until drop of t1
--echo [on slave]
connection slave; connection slave;
start slave until master_log_file='master-bin.000001', master_log_pos=323; start slave until master_log_file='master-bin.000001', master_log_pos=323;
--source include/wait_for_slave_io_to_start.inc
--source include/wait_for_slave_sql_to_stop.inc --source include/wait_for_slave_sql_to_stop.inc
# here table should be still not deleted # here table should be still not deleted
select * from t1; select * from t1;
...@@ -31,6 +54,7 @@ source include/show_slave_status2.inc; ...@@ -31,6 +54,7 @@ source include/show_slave_status2.inc;
# this should fail right after start # this should fail right after start
start slave until master_log_file='master-no-such-bin.000001', master_log_pos=291; start slave until master_log_file='master-no-such-bin.000001', master_log_pos=291;
--source include/wait_for_slave_io_to_start.inc
--source include/wait_for_slave_sql_to_stop.inc --source include/wait_for_slave_sql_to_stop.inc
# again this table should be still not deleted # again this table should be still not deleted
select * from t1; select * from t1;
...@@ -38,24 +62,28 @@ source include/show_slave_status2.inc; ...@@ -38,24 +62,28 @@ source include/show_slave_status2.inc;
# try replicate all up to and not including the second insert to t2; # try replicate all up to and not including the second insert to t2;
start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=746; start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=746;
--source include/wait_for_slave_io_to_start.inc
--source include/wait_for_slave_sql_to_stop.inc --source include/wait_for_slave_sql_to_stop.inc
select * from t2; select * from t2;
source include/show_slave_status2.inc; source include/show_slave_status2.inc;
# clean up # clean up
start slave; start slave;
--echo [on master]
connection master; connection master;
--echo [on slave]
sync_slave_with_master; sync_slave_with_master;
--source include/stop_slave.inc --source include/stop_slave.inc
# this should stop immediately as we are already there # this should stop immediately as we are already there
start slave until master_log_file='master-bin.000001', master_log_pos=776; start slave until master_log_file='master-bin.000001', master_log_pos=776;
--source include/wait_for_slave_io_to_start.inc
--source include/wait_for_slave_sql_to_stop.inc --source include/wait_for_slave_sql_to_stop.inc
# here the sql slave thread should be stopped
--replace_result bin.000005 bin.000004 bin.000006 bin.000004 bin.000007 bin.000004 --replace_result bin.000005 bin.000004 bin.000006 bin.000004 bin.000007 bin.000004
source include/show_slave_status2.inc; source include/show_slave_status2.inc;
#testing various error conditions --echo ==== Test various error conditions ====
--error 1277 --error 1277
start slave until master_log_file='master-bin', master_log_pos=561; start slave until master_log_file='master-bin', master_log_pos=561;
--error 1277 --error 1277
...@@ -70,4 +98,3 @@ start slave until relay_log_file='slave-relay-bin.000002', master_log_pos=561; ...@@ -70,4 +98,3 @@ start slave until relay_log_file='slave-relay-bin.000002', master_log_pos=561;
start slave sql_thread; start slave sql_thread;
start slave until master_log_file='master-bin.000001', master_log_pos=776; start slave until master_log_file='master-bin.000001', master_log_pos=776;
# End of 4.1 tests
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment