aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmit Kapila <akapila@postgresql.org>2023-01-07 11:52:41 +0530
committerAmit Kapila <akapila@postgresql.org>2023-01-07 11:52:41 +0530
commitb2cc5b81001ad5e856d7316bab11f08ce1386d4b (patch)
tree32c3bdd1e6494afe7b0b5a715532f61ce99b14a0
parent48599a18d07999c7503b9f47ec43c0f19b603001 (diff)
downloadpostgresql-b2cc5b81001ad5e856d7316bab11f08ce1386d4b.tar.gz
postgresql-b2cc5b81001ad5e856d7316bab11f08ce1386d4b.zip
Remove the streaming files for incomplete xacts after restart.
After restart, we try to stream the changes for large transactions that were not sent before server crash and restart. However, we forget to send the abort message for such transactions. This leads to spurious streaming files on the subscriber which won't be cleaned till the apply worker or the subscriber server restarts. Reported-by: Dilip Kumar Author: Hou Zhijie Reviewed-by: Dilip Kumar and Amit Kapila Backpatch-through: 14 Discussion: https://postgr.es/m/OS0PR01MB5716A773F46768A1B75BE24394FB9@OS0PR01MB5716.jpnprd01.prod.outlook.com
-rw-r--r--src/backend/replication/logical/reorderbuffer.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c
index 1d1649a22a8..709365fc8c6 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -2898,6 +2898,10 @@ ReorderBufferAbortOld(ReorderBuffer *rb, TransactionId oldestRunningXid)
{
elog(DEBUG2, "aborting old transaction %u", txn->xid);
+ /* Notify the remote node about the crash/immediate restart. */
+ if (rbtxn_is_streamed(txn))
+ rb->stream_abort(rb, txn, InvalidXLogRecPtr);
+
/* remove potential on-disk data, and deallocate this tx */
ReorderBufferCleanupTXN(rb, txn);
}