0001-Exit-walsender-before-confirming-remote-flush-in-log.patch
application/octet-stream
Filename: 0001-Exit-walsender-before-confirming-remote-flush-in-log.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch 0001
Subject: Exit walsender before confirming remote flush in logical replication
| File | + | − |
|---|---|---|
| src/backend/replication/walsender.c | 14 | 4 |
From cc444e339af93bf4a27ac644f5d65b0466b65126 Mon Sep 17 00:00:00 2001
From: Hayato Kuroda <kuroda.hayato@fujitsu.com>
Date: Thu, 22 Dec 2022 02:49:48 +0000
Subject: [PATCH] Exit walsender before confirming remote flush in logical
replication
---
src/backend/replication/walsender.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index c11bb3716f..08d4a9861f 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -3099,8 +3099,9 @@ XLogSendLogical(void)
* NB: This should only be called when the shutdown signal has been received
* from postmaster.
*
- * Note that if we determine that there's still more data to send, this
- * function will return control to the caller.
+ * Note that if we determine that there's still more data to send or we are in
+ * the physical replication more, this function will return control to the
+ * caller.
*/
static void
WalSndDone(WalSndSendDataCallback send_data)
@@ -3118,8 +3119,17 @@ WalSndDone(WalSndSendDataCallback send_data)
replicatedPtr = XLogRecPtrIsInvalid(MyWalSnd->flush) ?
MyWalSnd->write : MyWalSnd->flush;
- if (WalSndCaughtUp && sentPtr == replicatedPtr &&
- !pq_is_send_pending())
+ /*
+ * Exit if we are in the convenient time.
+ *
+ * Note that in case of logical replication, we don't have to wait that all
+ * sent data to be flushed on the subscriber. It will request to send WALs
+ * from the last received point, and we cannot support clean switchover in
+ * logical replication.
+ */
+ if (WalSndCaughtUp &&
+ (send_data == XLogSendLogical ||
+ (sentPtr == replicatedPtr && !pq_is_send_pending())))
{
QueryCompletion qc;
--
2.27.0