diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 73b3837db6..fde4a25471 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -1491,6 +1491,7 @@ static void LogicalRepApplyLoop(XLogRecPtr last_received) { TimestampTz last_recv_timestamp = GetCurrentTimestamp(); + bool ping_sent = false; /* * Init the ApplyMessageContext which we clean up after each replication @@ -1503,6 +1504,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received) /* mark as idle, before starting to loop */ pgstat_report_activity(STATE_IDLE, NULL); + /* This outer loop iterates once per wait. */ for (;;) { pgsocket fd = PGINVALID_SOCKET; @@ -1510,7 +1512,6 @@ LogicalRepApplyLoop(XLogRecPtr last_received) int len; char *buf = NULL; bool endofstream = false; - bool ping_sent = false; long wait_time; CHECK_FOR_INTERRUPTS(); @@ -1521,7 +1522,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received) if (len != 0) { - /* Process the data */ + /* Loop to process all available data (without blocking). */ for (;;) { CHECK_FOR_INTERRUPTS(); @@ -1690,10 +1691,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received) ereport(ERROR, (errmsg("terminating logical replication worker due to timeout"))); - /* - * We didn't receive anything new, for half of receiver - * replication timeout. Ping the server. - */ + /* Check to see if it's time for a ping. */ if (!ping_sent) { timeout = TimestampTzPlusMilliseconds(last_recv_timestamp,