From 91741b7cb7b5e0f0eb5100a548798b5a395cd3b5 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Mon, 13 Apr 2026 09:21:34 +0530 Subject: [PATCH] Fix excessive logging in idle slotsync worker. The slotsync worker was incorrectly identifying no-op states as successful updates, triggering a busy loop to sync slots that logged messages every 200ms. This patch corrects the logic to properly classify these states, enabling the worker to respect normal sleep intervals when no work is performed. Reported-by: Fujii Masao Author: Zhijie Hou Reviewed-by: Amit Kapila Reviewed-by: shveta malik Backpatch-through: 17, where it was introduced Discussion: https://postgr.es/m/CAHGQGwF6zG9Z8ws1yb3hY1VqV-WT7hR0qyXCn2HdbjvZQKufDw@mail.gmail.com --- src/backend/replication/logical/slotsync.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/backend/replication/logical/slotsync.c b/src/backend/replication/logical/slotsync.c index 0b48f55d057..1ee37871bca 100644 --- a/src/backend/replication/logical/slotsync.c +++ b/src/backend/replication/logical/slotsync.c @@ -267,9 +267,15 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid, if (found_consistent_snapshot) *found_consistent_snapshot = true; + + updated_xmin_or_lsn = true; } else { + XLogRecPtr old_confirmed_lsn = slot->data.confirmed_flush; + XLogRecPtr old_restart_lsn = slot->data.restart_lsn; + XLogRecPtr old_catalog_xmin = slot->data.catalog_xmin; + LogicalSlotAdvanceAndCheckSnapState(remote_slot->confirmed_lsn, found_consistent_snapshot); @@ -281,9 +287,16 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid, errdetail_internal("Remote slot has LSN %X/%X but local slot has LSN %X/%X.", LSN_FORMAT_ARGS(remote_slot->confirmed_lsn), LSN_FORMAT_ARGS(slot->data.confirmed_flush))); - } - updated_xmin_or_lsn = true; + /* + * It is possible that the slot's xmin or LSNs are not updated, + * when the synced slot has reached consistent snapshot state or + * cannot build one at all. + */ + updated_xmin_or_lsn = (old_confirmed_lsn != slot->data.confirmed_flush || + old_restart_lsn != slot->data.restart_lsn || + old_catalog_xmin != slot->data.catalog_xmin); + } } if (remote_dbid != slot->data.database ||