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.
This commit is contained in:
parent
41cfdc838e
commit
79e9ff44d1
@ -1445,7 +1445,13 @@ done:
|
||||
/* 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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user