mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-28550 improper handling of replication event group that contains
GTID_LIST_EVENT or INCIDENT_EVENT. It's legal to have either of the two inside a group. E.g Gtid_event, Gtid_log_list_event, Query_1, ... Xid_log_event is permitted. However, the slave IO thread treated both as the terminal even when the group represents a DDL query. That causes a premature Gtid state update so the slave IO would think the whole group has been collected while in fact Query_1 etc are yet to process. Fixed with correcting a condition to compute the terminal event of the group. Tested with rpl_mysqlbinlog_slave_consistency (of 10.9) and rpl_gtid_errorlog.test.
This commit is contained in:
@@ -6586,8 +6586,9 @@ dbug_gtid_accept:
|
||||
mi->using_gtid != Master_info::USE_GTID_NO &&
|
||||
mi->events_queued_since_last_gtid > 0 &&
|
||||
( (mi->last_queued_gtid_standalone &&
|
||||
!Log_event::is_part_of_group((Log_event_type)(uchar)
|
||||
buf[EVENT_TYPE_OFFSET])) ||
|
||||
(LOG_EVENT_IS_QUERY((Log_event_type)(uchar)
|
||||
buf[EVENT_TYPE_OFFSET]) ||
|
||||
(uchar)buf[EVENT_TYPE_OFFSET] == INCIDENT_EVENT)) ||
|
||||
(!mi->last_queued_gtid_standalone &&
|
||||
((uchar)buf[EVENT_TYPE_OFFSET] == XID_EVENT ||
|
||||
((uchar)buf[EVENT_TYPE_OFFSET] == QUERY_EVENT && /* QUERY_COMPRESSED_EVENT would never be commmit or rollback */
|
||||
|
Reference in New Issue
Block a user