diff options
author | Kristian Nielsen <knielsen@knielsen-hq.org> | 2016-10-14 11:18:33 +0200 |
---|---|---|
committer | Kristian Nielsen <knielsen@knielsen-hq.org> | 2016-10-14 23:15:59 +0200 |
commit | 814880711f0084f5cb1d8b1342b15ac819935742 (patch) | |
tree | cd2a4ca0f321c84efa28195d7ec8f6b7204d3795 /mysql-test/extra/rpl_tests | |
parent | 851c401c0d2db3d02f5312989da8034e647fecb8 (diff) | |
download | mariadb-git-814880711f0084f5cb1d8b1342b15ac819935742.tar.gz |
BUG#56442: Slave executes delayed statements when STOP SLAVE is issued
Problem:
When using the delayed slave feature, and the SQL thread is delaying,
and the user issues STOP SLAVE, the event we wait for was executed.
It should not be executed.
Fix:
Check the return value from the delay function,
slave.cc:slave_sleep(). If the return value is 1, it means the thread
has been stopped, in this case we don't execute the statement.
Also, refactored the test case for delayed slave a little: added the
test script include/rpl_assert.inc, which asserts that a condition holds
and prints a message if not. Made rpl_delayed_slave.test use this. The
advantage is that the test file is much easier to read and maintain,
because it is clear what is an assertion and what is not, and also the
expected result can be found in the test file, you don't have to compare
it to the result file.
Manually merged into MariaDB from MySQL commit
fd2b210383358fe7697f201e19ac9779879ba72a
Signed-off-by: Kristian Nielsen <knielsen@knielsen-hq.org>
Diffstat (limited to 'mysql-test/extra/rpl_tests')
-rw-r--r-- | mysql-test/extra/rpl_tests/delayed_slave_wait_on_query.inc | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/mysql-test/extra/rpl_tests/delayed_slave_wait_on_query.inc b/mysql-test/extra/rpl_tests/delayed_slave_wait_on_query.inc index 5d04d14edf3..ffdcb7f60bb 100644 --- a/mysql-test/extra/rpl_tests/delayed_slave_wait_on_query.inc +++ b/mysql-test/extra/rpl_tests/delayed_slave_wait_on_query.inc @@ -10,21 +10,32 @@ # - After one and a half delay, check the status. It should not be # delaying and the query should be executed. # +# # ==== Usage ==== # +# --let $query_number= 4 # --source extra/rpl_tests/delayed_slave_wait_on_query.inc +# +# Parameters: +# $query_number +# The value of the 'b' column in t1 for the row inserted by the query +# we are waiting for. connection master; + --echo [on slave] --let $slave_timeout= $time1 - --source include/sync_slave_io_with_master.inc --echo # sleep 1*T --sleep $time1 ---echo # Expect query not executed and status is 'Waiting until MASTER_DELAY...' -SELECT * FROM t1 ORDER BY b DESC LIMIT 1; ---source include/show_delayed_slave_state.inc +--let $assert_text= Query $query_number should not be executed +--let $assert_cond= MAX(b) < $query_number FROM t1 +--source include/rpl_assert.inc + +--let $assert_text= Status should be 'Waiting until MASTER_DELAY...' +--let $assert_cond= "[SHOW SLAVE STATUS, Slave_SQL_Running_State, 1]" LIKE "Waiting until MASTER_DELAY%" +--source include/rpl_assert.inc --echo # sleep 1*T --sleep $time1 @@ -32,8 +43,13 @@ SELECT * FROM t1 ORDER BY b DESC LIMIT 1; --echo # sync with master (with timeout 1*T) --source include/sync_with_master.inc ---echo # Expect query executed and status is 'Has read all relay log...' -SELECT * FROM t1 ORDER BY b DESC LIMIT 1; ---source include/show_delayed_slave_state.inc +--let $assert_text= Query $query_number should be executed +--let $assert_cond= MAX(b) = $query_number FROM t1 +--source include/rpl_assert.inc + +--let $assert_text= Status should be 'Has read all relay log...' +--let $assert_cond= "[SHOW SLAVE STATUS, Slave_SQL_Running_State, 1]" LIKE "Slave has read all relay log%" +--source include/rpl_assert.inc + --source include/check_slave_is_running.inc |