Commit eb2302ec authored by unknown's avatar unknown

MDEV-5825: Assertion `! is_set() || m_can_overwrite_status' fails in...

MDEV-5825: Assertion `! is_set() || m_can_overwrite_status' fails in Diagnostics_area::set_error_status on executing rpl.rpl_parallel test

In parallel replication, there was an error case where we could call
my_error() in-between events. This causes the assertion, as the previous event
has reported ok status, but the following event has not yet reset the
diagnostics area. This happened when a worker thread detects that the SQL
driver thread is aborting, and when it gets an error from a prior commit at
the same time in wait_for_prior_commit().

Since this is already an error case, the code should be using
unregister_wait_for_prior_commit() instead of wait_for_prior_commit(). But
unregister is already done a bit later (from finish_event_group()), so just
removing the redundant call to wait_for_prior_commit() fixes the issue.
parent ce3c457e
...@@ -576,7 +576,6 @@ handle_rpl_parallel_thread(void *arg) ...@@ -576,7 +576,6 @@ handle_rpl_parallel_thread(void *arg)
half-processed event group. half-processed event group.
*/ */
mysql_mutex_unlock(&rpt->LOCK_rpl_thread); mysql_mutex_unlock(&rpt->LOCK_rpl_thread);
thd->wait_for_prior_commit();
signal_error_to_sql_driver_thread(thd, group_rgi, 1); signal_error_to_sql_driver_thread(thd, group_rgi, 1);
finish_event_group(thd, group_rgi->gtid_sub_id, finish_event_group(thd, group_rgi->gtid_sub_id,
group_rgi->parallel_entry, group_rgi); group_rgi->parallel_entry, group_rgi);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment