Details
-
Bug
-
Status: Open (View Workflow)
-
Major
-
Resolution: Unresolved
-
10.5, 10.6, 10.11, 11.1(EOL), 11.2, 10.4(EOL), 11.0(EOL), 11.3(EOL)
-
None
Description
If the IO thread received ignored events (say by IGNORE_DOMAIN_IDS from CHANGE MASTER TO), if the IO thread is stopped while actively logging a transaction to the relay log (i.e. the transaction start event was logged, but no end event), the function write_ignored_events_info_to_relay_log() in the IO thread's stop logic will write a Gtid_list_log_event. There is a DBUG_ASSERT which tries to catch this, but uses the wrong condition, and it should also be updated:
diff --git a/sql/slave.cc b/sql/slave.cc
|
index f4d76e447cd..b4f3e829070 100644
|
--- a/sql/slave.cc
|
+++ b/sql/slave.cc
|
@@ -2687,7 +2687,7 @@ static void write_ignored_events_info_to_relay_log(THD *thd, Master_info *mi)
|
}
|
if (rli->ign_gtids.count())
|
{
|
- DBUG_ASSERT(!rli->is_in_group()); // Ensure no active transaction
|
+ DBUG_ASSERT(!mi->events_queued_since_last_gtid); // Ensure no active transaction
|
glev= new Gtid_list_log_event(&rli->ign_gtids,
|
Gtid_list_log_event::FLAG_IGN_GTIDS);
|
rli->ign_gtids.reset();
|
A couple suggested fixes from Andrei are
Anything that would cause SQL thread to stop, and retry later from the beginning of the group.
Maybe Incident.
Should be converted to an error.
The Glle should not be logged, and perhaps the right way is to log a ROLLBACK instead in this case.
Attachments
Issue Links
- relates to
-
MDEV-9670 server_id mysteriously set to 0 in binlog causes GTID & multisource replication to break
- Closed