mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 20:02:46 +03:00
Ensure to send a prepare after we detect concurrent abort during decoding.
It is possible that while decoding a prepared transaction, it gets aborted concurrently via a ROLLBACK PREPARED command. In that case, we were skipping all the changes and directly sending Rollback Prepared when we find the same in WAL. However, the downstream has no idea of the GID of such a transaction. So, ensure to send prepare even when a concurrent abort is detected. Author: Ajin Cherian Reviewed-by: Markus Wanner, Amit Kapila Discussion: https://postgr.es/m/f82133c6-6055-b400-7922-97dae9f2b50b@enterprisedb.com
This commit is contained in:
@ -2664,6 +2664,14 @@ ReorderBufferPrepare(ReorderBuffer *rb, TransactionId xid,
|
||||
|
||||
ReorderBufferReplay(txn, rb, xid, txn->final_lsn, txn->end_lsn,
|
||||
txn->commit_time, txn->origin_id, txn->origin_lsn);
|
||||
|
||||
/*
|
||||
* We send the prepare for the concurrently aborted xacts so that later
|
||||
* when rollback prepared is decoded and sent, the downstream should be
|
||||
* able to rollback such a xact. See comments atop DecodePrepare.
|
||||
*/
|
||||
if (txn->concurrent_abort)
|
||||
rb->prepare(rb, txn, txn->final_lsn);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user