mirror of
https://github.com/MariaDB/server.git
synced 2025-04-21 06:35:31 +02:00

In cases of a faulty master or an incorrect binlog event producer, that slave is working with, sends an incomplete group of events slave must react with an error to not to log into the relay-log any new events that do not belong to the incomplete group. Fixed with extending received event properties check when slave connects to master in gtid mode. Specifically for the event that can be a part of a group its relay-logging is permitted only when its position within the group is validated. Otherwise slave IO thread stops with ER_SLAVE_RELAY_LOG_WRITE_FAILURE.
54 lines
1.7 KiB
Text
54 lines
1.7 KiB
Text
include/master-slave.inc
|
|
[connection master]
|
|
connection slave;
|
|
call mtr.add_suppression("Unexpected break of being relay-logged GTID 0-27697-1000");
|
|
call mtr.add_suppression("Relay log write failure: could not queue event from master");
|
|
call mtr.add_suppression("The current group of events starts with a non-GTID");
|
|
include/stop_slave.inc
|
|
CHANGE MASTER TO MASTER_USE_GTID=slave_pos;
|
|
include/start_slave.inc
|
|
connection master;
|
|
CREATE TABLE t (a INT) ENGINE=innodb;
|
|
INSERT INTO t VALUES(1);
|
|
### A. Simulate an unnoticeable loss of Xid event
|
|
connection slave;
|
|
SET @@global.debug_dbug="+d,slave_discard_xid_for_gtid_0_x_1000";
|
|
connection master;
|
|
SET @@gtid_seq_no=1000;
|
|
set @@server_id=27697;
|
|
INSERT INTO t VALUES(1000);
|
|
set @@server_id=default;
|
|
INSERT INTO t VALUES(1001);
|
|
## Prove the error occurs.
|
|
connection slave;
|
|
include/wait_for_slave_io_error.inc [errno=1595]
|
|
## Prove the slave recovers after the simulation condtion is lifted.
|
|
SET @@global.debug_dbug=default;
|
|
include/start_slave.inc
|
|
### B. Do the same to GTID event.
|
|
connection slave;
|
|
SET @@global.debug_dbug="+d,slave_discard_gtid_0_x_1002";
|
|
connection master;
|
|
SET @@gtid_seq_no=1002;
|
|
set @@server_id=27697;
|
|
INSERT INTO t VALUES(1002);
|
|
set @@server_id=default;
|
|
INSERT INTO t VALUES(1003);
|
|
## Prove the error occurs.
|
|
connection slave;
|
|
include/wait_for_slave_io_error.inc [errno=1595]
|
|
## Prove the slave recovers after the simulation condtion is lifted.
|
|
SET @@global.debug_dbug=default;
|
|
include/start_slave.inc
|
|
connection master;
|
|
connection slave;
|
|
include/diff_tables.inc [master:t,slave:t]
|
|
"===== Clean up ====="
|
|
connection slave;
|
|
include/stop_slave.inc
|
|
CHANGE MASTER TO MASTER_USE_GTID=no;
|
|
include/start_slave.inc
|
|
connection master;
|
|
DROP TABLE t;
|
|
SET GLOBAL LOG_WARNINGS=default;
|
|
include/rpl_end.inc
|