mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
sporadic failures of rpl.rpl_semi_sync_fail_over
in the $case=2 - it's wrong to kill after the first binlog EOF, because that might happen between INSERT(4) and INSERT(5). So, wait for the slave to acknowledge INSERT(5) before killing the master, that is, both connection threads must pass repl_semisync_master.wait_after_sync()
This commit is contained in:
@ -117,13 +117,15 @@ connection server_2;
|
|||||||
#=================================================================
|
#=================================================================
|
||||||
connect conn_client,127.0.0.1,root,,test,$SERVER_MYPORT_2,;
|
connect conn_client,127.0.0.1,root,,test,$SERVER_MYPORT_2,;
|
||||||
SET DEBUG_SYNC= "commit_before_get_LOCK_commit_ordered SIGNAL con1_ready WAIT_FOR con1_go";
|
SET DEBUG_SYNC= "commit_before_get_LOCK_commit_ordered SIGNAL con1_ready WAIT_FOR con1_go";
|
||||||
|
SET DEBUG_SYNC= "commit_after_release_LOCK_after_binlog_sync WAIT_FOR con1_go1";
|
||||||
SET STATEMENT server_id=1 FOR INSERT INTO t1 VALUES (4, REPEAT("x", 4100));
|
SET STATEMENT server_id=1 FOR INSERT INTO t1 VALUES (4, REPEAT("x", 4100));
|
||||||
connect conn_client_2,127.0.0.1,root,,test,$SERVER_MYPORT_2,;
|
connect conn_client_2,127.0.0.1,root,,test,$SERVER_MYPORT_2,;
|
||||||
SET DEBUG_SYNC= "now WAIT_FOR con1_ready";
|
SET DEBUG_SYNC= "now WAIT_FOR con1_ready";
|
||||||
SET GLOBAL debug_dbug="d,Notify_binlog_EOF";
|
SET DEBUG_SYNC= "commit_before_get_LOCK_after_binlog_sync SIGNAL con1_go";
|
||||||
|
SET DEBUG_SYNC= "commit_before_get_LOCK_commit_ordered SIGNAL con2_ready";
|
||||||
INSERT INTO t1 VALUES (5, REPEAT("x", 4100));
|
INSERT INTO t1 VALUES (5, REPEAT("x", 4100));
|
||||||
connection server_2;
|
connection server_2;
|
||||||
SET DEBUG_SYNC= "now WAIT_FOR eof_reached";
|
SET DEBUG_SYNC= "now WAIT_FOR con2_ready";
|
||||||
# Kill the server
|
# Kill the server
|
||||||
connection server_1;
|
connection server_1;
|
||||||
include/wait_for_slave_param.inc [Slave_SQL_Running_State]
|
include/wait_for_slave_param.inc [Slave_SQL_Running_State]
|
||||||
|
@ -34,14 +34,16 @@ if ($case == 1)
|
|||||||
if ($case == 2)
|
if ($case == 2)
|
||||||
{
|
{
|
||||||
SET DEBUG_SYNC= "commit_before_get_LOCK_commit_ordered SIGNAL con1_ready WAIT_FOR con1_go";
|
SET DEBUG_SYNC= "commit_before_get_LOCK_commit_ordered SIGNAL con1_ready WAIT_FOR con1_go";
|
||||||
|
SET DEBUG_SYNC= "commit_after_release_LOCK_after_binlog_sync WAIT_FOR con1_go1";
|
||||||
--send_eval $query_to_crash
|
--send_eval $query_to_crash
|
||||||
--connect (conn_client_2,127.0.0.1,root,,test,$SERVER_MYPORT_2,)
|
--connect (conn_client_2,127.0.0.1,root,,test,$SERVER_MYPORT_2,)
|
||||||
# use the same signal with $query_to_crash
|
# use the same signal with $query_to_crash
|
||||||
SET DEBUG_SYNC= "now WAIT_FOR con1_ready";
|
SET DEBUG_SYNC= "now WAIT_FOR con1_ready";
|
||||||
SET GLOBAL debug_dbug="d,Notify_binlog_EOF";
|
SET DEBUG_SYNC= "commit_before_get_LOCK_after_binlog_sync SIGNAL con1_go";
|
||||||
|
SET DEBUG_SYNC= "commit_before_get_LOCK_commit_ordered SIGNAL con2_ready";
|
||||||
--send_eval $query2_to_crash
|
--send_eval $query2_to_crash
|
||||||
--connection server_$server_to_crash
|
--connection server_$server_to_crash
|
||||||
SET DEBUG_SYNC= "now WAIT_FOR eof_reached";
|
SET DEBUG_SYNC= "now WAIT_FOR con2_ready";
|
||||||
--source include/kill_mysqld.inc
|
--source include/kill_mysqld.inc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2828,12 +2828,6 @@ static int send_one_binlog_file(binlog_send_info *info,
|
|||||||
*/
|
*/
|
||||||
if (send_events(info, log, linfo, end_pos))
|
if (send_events(info, log, linfo, end_pos))
|
||||||
return 1;
|
return 1;
|
||||||
DBUG_EXECUTE_IF("Notify_binlog_EOF",
|
|
||||||
{
|
|
||||||
const char act[]= "now signal eof_reached";
|
|
||||||
DBUG_ASSERT(!debug_sync_set_action(current_thd,
|
|
||||||
STRING_WITH_LEN(act)));
|
|
||||||
};);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
Reference in New Issue
Block a user