Commit 21cabe3c authored by Kristian Nielsen's avatar Kristian Nielsen

MDEV-34042: Deadlock kill of XA PREPARE can break replication /...

MDEV-34042: Deadlock kill of XA PREPARE can break replication / rpl.rpl_parallel_multi_domain_xa sporadic failure

Clear any pending deadlock kill after completing XA PREPARE, and before
updating the mysql.gtid_slave_pos table in a separate transaction.
Reviewed-by: default avatarAndrei Elkin <andrei.elkin@mariadb.com>
Signed-off-by: default avatarKristian Nielsen <knielsen@knielsen-hq.org>
parent 4a6fae49
......@@ -4547,6 +4547,19 @@ int XA_prepare_log_event::do_commit()
else
res= trans_xa_commit(thd);
if (thd->rgi_slave->is_parallel_exec)
{
/*
Since the transaction is prepared/committed without updating the GTID pos
(MDEV-32020...), we need here to clear any pending deadlock kill.
Otherwise if the kill happened after the prepare/commit completed, it
might end up killing the subsequent GTID position update, causing the
slave to fail with error.
*/
wait_for_pending_deadlock_kill(thd, thd->rgi_slave);
thd->reset_killed();
}
return res;
}
#endif // HAVE_REPLICATION
......
......@@ -131,7 +131,7 @@ handle_queued_pos_update(THD *thd, rpl_parallel_thread::queued_event *qev)
asynchronously, we need to be sure they will be completed before starting a
new transaction. Otherwise the new transaction might suffer a spurious kill.
*/
static void
void
wait_for_pending_deadlock_kill(THD *thd, rpl_group_info *rgi)
{
PSI_stage_info old_stage;
......
......@@ -518,6 +518,7 @@ struct rpl_parallel {
extern struct rpl_parallel_thread_pool global_rpl_thread_pool;
extern void wait_for_pending_deadlock_kill(THD *thd, rpl_group_info *rgi);
extern int rpl_parallel_resize_pool_if_no_slaves(void);
extern int rpl_parallel_activate_pool(rpl_parallel_thread_pool *pool);
extern int rpl_parallel_inactivate_pool(rpl_parallel_thread_pool *pool);
......
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