From 3daa8cb2ec596d5cb528a84a777a6d5ee4581746 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Fri, 5 Jul 2024 12:09:39 +0530 Subject: [PATCH v3] To improve the code, move the error check in logical_read_xlog_page(). Commit 0fdab27ad6 changed the code to wait for WAL to be available before determining the timeline but forgot to move the failure check. This change is to make the related code easier to understand and enhance otherwise there is no bug in the current code. Author: Peter Smith Reviewed-by: Bertrand Drouvot, Amit Kapila Discussion: https://postgr.es/m/CAHut+PvqX49fusLyXspV1Mmd_EekPtXG0oT146vZjcb9XDvNgw@mail.gmail.com --- src/backend/replication/walsender.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 754f505c13..e9c88b94c2 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -1062,6 +1062,10 @@ logical_read_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, int req */ flushptr = WalSndWaitForWal(targetPagePtr + reqLen); + /* Fail if not enough (implies we are going to shut down) */ + if (flushptr < targetPagePtr + reqLen) + return -1; + /* * Since logical decoding is also permitted on a standby server, we need * to check if the server is in recovery to decide how to get the current @@ -1081,10 +1085,6 @@ logical_read_xlog_page(XLogReaderState *state, XLogRecPtr targetPagePtr, int req sendTimeLineValidUpto = state->currTLIValidUntil; sendTimeLineNextTLI = state->nextTLI; - /* fail if not (implies we are going to shut down) */ - if (flushptr < targetPagePtr + reqLen) - return -1; - if (targetPagePtr + XLOG_BLCKSZ <= flushptr) count = XLOG_BLCKSZ; /* more than one block available */ else -- 2.39.1