Commit 79e9ff44 authored by Kristian Nielsen's avatar Kristian Nielsen

MDEV-7458: Deadlock in parallel replication can allow following transaction to...

MDEV-7458: Deadlock in parallel replication can allow following transaction to start replicating too early

In parallel replication, don't rollback inside ha_commit_trans() in case of
error.

The rollback will be done later, but the parallel replication code needs to
run unmark_start_commit() before the rollback to properly control the
sequencing of transactions.

I did not manage to come up with a reliable automatic test case for this, but
I tested it manually.
parent 41cfdc83
......@@ -1445,7 +1445,13 @@ int ha_commit_trans(THD *thd, bool all)
/* Come here if error and we need to rollback. */
err:
error= 1; /* Transaction was rolled back */
ha_rollback_trans(thd, all);
/*
In parallel replication, rollback is delayed, as there is extra replication
book-keeping to be done before rolling back and allowing a conflicting
transaction to continue (MDEV-7458).
*/
if (!(thd->rgi_slave && thd->rgi_slave->is_parallel_exec))
ha_rollback_trans(thd, all);
end:
if (rw_trans && mdl_request.ticket)
......
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