mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
BUG#11877568 - RPL_SEMI_SYNC FAILS IN PB
Currently, rpl_semi_sync is failing in PB due to the warning message: "Slave SQL: slave SQL thread is being stopped in the middle of " "applying of a group having updated a non-transaction table; " "waiting for the group completion ..." The problem started happening after the fix for BUG#11762407 what was automatically suppressing some warning messages. To fix the current issue, we suppress the aforementioned warning message and exploit the opportunity to make the sentence clearer.
This commit is contained in:
@ -23,8 +23,8 @@ insert into tm set a=null; # to simulate killed status on the slave
|
||||
commit;
|
||||
|
||||
connection slave;
|
||||
call mtr.add_suppression("Slave SQL.*slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table");
|
||||
call mtr.add_suppression("Slave SQL.*The slave SQL is stopped, leaving the current group of events unfinished with a non-transaction table changed.");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
call mtr.add_suppression("Slave SQL.*Slave SQL Thread stopped with incomplete event group having non-transactional changes");
|
||||
|
||||
# slave will catch the killed status but won't shut down immediately
|
||||
# only after the whole group has done (commit)
|
||||
|
@ -5,7 +5,7 @@ include/rpl_init.inc [topology=1->2->3->4->1]
|
||||
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=InnoDB;
|
||||
include/rpl_sync.inc
|
||||
call mtr.add_suppression("Slave SQL.*slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
|
||||
*** Testing schema A->B->C->D->A ***
|
||||
|
||||
|
@ -207,7 +207,7 @@ CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10), c LONGTEXT);
|
||||
INSERT INTO t1 VALUES (1, 'on slave', NULL);
|
||||
INSERT INTO t1 VALUES (1, 'on master', NULL);
|
||||
call mtr.add_suppression("Slave SQL.*Duplicate entry .1. for key .PRIMARY.. on query.* Error_code: 1062");
|
||||
call mtr.add_suppression("Slave SQL.*slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
Heartbeat events are received while sql thread stopped (1 means 'yes'): 1
|
||||
include/stop_slave.inc
|
||||
DROP TABLE t1;
|
||||
|
@ -1,7 +1,7 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
||||
call mtr.add_suppression("Slave SQL: slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table; waiting for the group completion");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
include/stop_slave.inc
|
||||
SET @old_log_output= @@log_output;
|
||||
SET GLOBAL log_output= 'TABLE';
|
||||
|
@ -70,6 +70,6 @@ include/start_slave.inc
|
||||
# Clean up
|
||||
DROP TABLE t1;
|
||||
SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit;
|
||||
call mtr.add_suppression("Slave SQL.*slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit;
|
||||
include/rpl_end.inc
|
||||
|
@ -11,8 +11,8 @@ insert into tm set a=null;
|
||||
Warnings:
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
|
||||
commit;
|
||||
call mtr.add_suppression("Slave SQL.*slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table");
|
||||
call mtr.add_suppression("Slave SQL.*The slave SQL is stopped, leaving the current group of events unfinished with a non-transaction table changed.");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
call mtr.add_suppression("Slave SQL.*Slave SQL Thread stopped with incomplete event group having non-transactional changes");
|
||||
include/wait_for_slave_sql_to_stop.inc
|
||||
SELECT "NO" AS Last_SQL_Error, @check as `true`;
|
||||
Last_SQL_Error true
|
||||
@ -36,9 +36,9 @@ Warnings:
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
|
||||
commit;
|
||||
include/wait_for_slave_sql_to_stop.inc
|
||||
SELECT "Fatal error: ... The slave SQL is stopped, leaving the current group of events unfinished with a non-transaction table changed. If the group consists solely of Row-based events, you can try restarting the slave with --slave-exec-mode=IDEMPOTENT, which ignores duplicate key, key not found, and similar errors (see documentation for details)." AS Last_SQL_Error, @check as `true`;
|
||||
SELECT "Fatal error: ... Slave SQL Thread stopped with incomplete event group having non-transactional changes. If the group consists solely of row-based events, you can try to restart the slave with --slave-exec-mode=IDEMPOTENT, which ignores duplicate key, key not found, and similar errors (see documentation for details)." AS Last_SQL_Error, @check as `true`;
|
||||
Last_SQL_Error true
|
||||
Fatal error: ... The slave SQL is stopped, leaving the current group of events unfinished with a non-transaction table changed. If the group consists solely of Row-based events, you can try restarting the slave with --slave-exec-mode=IDEMPOTENT, which ignores duplicate key, key not found, and similar errors (see documentation for details). 1
|
||||
Fatal error: ... Slave SQL Thread stopped with incomplete event group having non-transactional changes. If the group consists solely of row-based events, you can try to restart the slave with --slave-exec-mode=IDEMPOTENT, which ignores duplicate key, key not found, and similar errors (see documentation for details). 1
|
||||
select count(*) as one from tm;
|
||||
one
|
||||
1
|
||||
@ -53,9 +53,9 @@ set @@global.debug="+d,stop_slave_middle_group";
|
||||
set @@global.debug="+d,incomplete_group_in_relay_log";
|
||||
update tm as t1, ti as t2 set t1.a=t1.a * 2, t2.a=t2.a * 2;
|
||||
include/wait_for_slave_sql_to_stop.inc
|
||||
SELECT "Fatal error: ... The slave SQL is stopped, leaving the current group of events unfinished with a non-transaction table changed. If the group consists solely of Row-based events, you can try restarting the slave with --slave-exec-mode=IDEMPOTENT, which ignores duplicate key, key not found, and similar errors (see documentation for details)." AS Last_SQL_Error, @check as `true`;
|
||||
SELECT "Fatal error: ... Slave SQL Thread stopped with incomplete event group having non-transactional changes. If the group consists solely of row-based events, you can try to restart the slave with --slave-exec-mode=IDEMPOTENT, which ignores duplicate key, key not found, and similar errors (see documentation for details)." AS Last_SQL_Error, @check as `true`;
|
||||
Last_SQL_Error true
|
||||
Fatal error: ... The slave SQL is stopped, leaving the current group of events unfinished with a non-transaction table changed. If the group consists solely of Row-based events, you can try restarting the slave with --slave-exec-mode=IDEMPOTENT, which ignores duplicate key, key not found, and similar errors (see documentation for details). 1
|
||||
Fatal error: ... Slave SQL Thread stopped with incomplete event group having non-transactional changes. If the group consists solely of row-based events, you can try to restart the slave with --slave-exec-mode=IDEMPOTENT, which ignores duplicate key, key not found, and similar errors (see documentation for details). 1
|
||||
select max(a) as two from tm;
|
||||
two
|
||||
2
|
||||
|
@ -75,7 +75,7 @@ include/wait_for_slave_sql_to_start.inc
|
||||
# Test end
|
||||
SET GLOBAL debug= '$debug_save';
|
||||
include/restart_slave.inc
|
||||
call mtr.add_suppression("Slave SQL.*slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
[connection master]
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
@ -30,7 +30,7 @@ CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL,
|
||||
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=InnoDB;
|
||||
--source include/rpl_sync.inc
|
||||
--connection server_4
|
||||
call mtr.add_suppression("Slave SQL.*slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
--echo
|
||||
|
||||
#
|
||||
|
@ -320,7 +320,7 @@ INSERT INTO t1 VALUES (1, 'on slave', NULL);
|
||||
INSERT INTO t1 VALUES (1, 'on master', NULL);
|
||||
--connection slave
|
||||
call mtr.add_suppression("Slave SQL.*Duplicate entry .1. for key .PRIMARY.. on query.* Error_code: 1062");
|
||||
call mtr.add_suppression("Slave SQL.*slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
let $slave_errno= ER_DUP_ENTRY
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
let $rcvd_heartbeats_before= query_get_value(SHOW STATUS LIKE 'slave_received_heartbeats', Value, 1);
|
||||
|
@ -15,6 +15,7 @@ call mtr.add_suppression("Unsafe statement written to the binary log using state
|
||||
connection slave;
|
||||
call mtr.add_suppression("Master server does not support semi-sync");
|
||||
call mtr.add_suppression("Semi-sync slave .* reply");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
enable_query_log;
|
||||
connection master;
|
||||
|
||||
|
@ -29,8 +29,7 @@ source include/master-slave.inc;
|
||||
source include/have_binlog_format_statement.inc;
|
||||
|
||||
CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
||||
call mtr.add_suppression("Slave SQL: slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table; waiting for the group completion");
|
||||
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
|
||||
# Prepare slave for different long_query_time we need to stop the slave
|
||||
# and restart it as long_query_time variable is dynamic and, after
|
||||
|
@ -19,7 +19,7 @@ SET @@session.binlog_direct_non_transactional_updates= FALSE;
|
||||
# clean up
|
||||
--connection slave
|
||||
SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit;
|
||||
call mtr.add_suppression("Slave SQL.*slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
--connection master
|
||||
SET @@global.innodb_flush_log_at_trx_commit= @old_innodb_flush_log_at_trx_commit;
|
||||
|
||||
|
@ -48,7 +48,7 @@ SET GLOBAL debug= '$debug_save';
|
||||
source include/restart_slave_sql.inc;
|
||||
|
||||
connection slave;
|
||||
call mtr.add_suppression("Slave SQL.*slave SQL thread is being stopped in the middle of applying of a group having updated a non-transaction table");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
connection master;
|
||||
|
||||
--source include/rpl_connection_master.inc
|
||||
|
20
sql/slave.cc
20
sql/slave.cc
@ -903,18 +903,18 @@ static bool sql_slave_killed(THD* thd, Relay_log_info* rli)
|
||||
&& rli->is_in_group())
|
||||
{
|
||||
char msg_stopped[]=
|
||||
"... The slave SQL is stopped, leaving the current group "
|
||||
"of events unfinished with a non-transaction table changed. "
|
||||
"If the group consists solely of Row-based events, you can try "
|
||||
"restarting the slave with --slave-exec-mode=IDEMPOTENT, which "
|
||||
"... Slave SQL Thread stopped with incomplete event group "
|
||||
"having non-transactional changes. "
|
||||
"If the group consists solely of row-based events, you can try "
|
||||
"to restart the slave with --slave-exec-mode=IDEMPOTENT, which "
|
||||
"ignores duplicate key, key not found, and similar errors (see "
|
||||
"documentation for details).";
|
||||
|
||||
if (rli->abort_slave)
|
||||
{
|
||||
DBUG_PRINT("info", ("Slave SQL thread is being stopped in the middle of"
|
||||
" a group having updated a non-trans table, giving"
|
||||
" it some grace period"));
|
||||
DBUG_PRINT("info", ("Request to stop slave SQL Thread received while "
|
||||
"applying a group that has non-transactional "
|
||||
"changes; waiting for completion of the group ... "));
|
||||
|
||||
/*
|
||||
Slave sql thread shutdown in face of unfinished group modified
|
||||
@ -938,9 +938,9 @@ static bool sql_slave_killed(THD* thd, Relay_log_info* rli)
|
||||
if (ret == 0)
|
||||
{
|
||||
rli->report(WARNING_LEVEL, 0,
|
||||
"slave SQL thread is being stopped in the middle "
|
||||
"of applying of a group having updated a non-transaction "
|
||||
"table; waiting for the group completion ... ");
|
||||
"Request to stop slave SQL Thread received while "
|
||||
"applying a group that has non-transactional "
|
||||
"changes; waiting for completion of the group ... ");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user