mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-31655: Parallel replication deadlock victim preference code errorneously removed
Restore code to make InnoDB choose the second transaction as a deadlock victim if two transactions deadlock that need to commit in-order for parallel replication. This code was erroneously removed when VATS was implemented in InnoDB. Also add a test case for InnoDB choosing the right deadlock victim. Also fixes this bug, with testcase that reliably reproduces: MDEV-28776: rpl.rpl_mark_optimize_tbl_ddl fails with timeout on sync_with_master Reviewed-by: Marko Mäkelä <marko.makela@mariadb.com> Signed-off-by: Kristian Nielsen <knielsen@knielsen-hq.org>
This commit is contained in:
@ -1301,6 +1301,11 @@ handle_rpl_parallel_thread(void *arg)
|
||||
bool did_enter_cond= false;
|
||||
PSI_stage_info old_stage;
|
||||
|
||||
DBUG_EXECUTE_IF("rpl_parallel_delay_gtid_0_x_100_start", {
|
||||
if (rgi->current_gtid.domain_id==0 &&
|
||||
rgi->current_gtid.seq_no == 100)
|
||||
my_sleep(10000);
|
||||
});
|
||||
#ifdef ENABLED_DEBUG_SYNC
|
||||
DBUG_EXECUTE_IF("hold_worker_on_schedule", {
|
||||
if (rgi->current_gtid.domain_id == 0 &&
|
||||
@ -1480,8 +1485,13 @@ handle_rpl_parallel_thread(void *arg)
|
||||
err= dbug_simulate_tmp_error(rgi, thd););
|
||||
if (unlikely(err))
|
||||
{
|
||||
ulong max_retries= slave_trans_retries;
|
||||
convert_kill_to_deadlock_error(rgi);
|
||||
if (has_temporary_error(thd) && slave_trans_retries > 0)
|
||||
DBUG_EXECUTE_IF("rpl_mdev31655_zero_retries",
|
||||
if ((rgi->current_gtid.seq_no % 1000) == 0)
|
||||
max_retries= 0;
|
||||
);
|
||||
if (has_temporary_error(thd) && max_retries > 0)
|
||||
err= retry_event_group(rgi, rpt, qev);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user