On Thu, Mar 5, 2026 at 5:04 PM Zhijie Hou (Fujitsu)
<[email protected]> wrote:
>
>
> Thanks for catching this, I changed it to check the increment before 
> reporting warning.
>

Thanks! I have changed comments atop sequencesync.c to get rid of old
implementation details (worker dependency upon INIT state) and
rephrased a little bit. Please take it if you find it okay.  Attaching
patch as txt file. It is a top-up for 0001.

thanks
Shveta
From 22a575bc2ab43795c72f2240485c189262672035 Mon Sep 17 00:00:00 2001
From: Shveta Malik <[email protected]>
Date: Fri, 6 Mar 2026 10:45:01 +0530
Subject: [PATCH] header comment improvement

---
 .../replication/logical/sequencesync.c        | 49 +++++++++----------
 1 file changed, 22 insertions(+), 27 deletions(-)

diff --git a/src/backend/replication/logical/sequencesync.c 
b/src/backend/replication/logical/sequencesync.c
index cde9eaba474..a80d5e5b335 100644
--- a/src/backend/replication/logical/sequencesync.c
+++ b/src/backend/replication/logical/sequencesync.c
@@ -19,37 +19,32 @@
  * CREATE SUBSCRIPTION
  * ALTER SUBSCRIPTION ... REFRESH PUBLICATION
  *
- * The apply worker periodically scans pg_subscription_rel for sequences in
- * INIT state. When such sequences are found, it spawns a sequencesync worker
- * to handle synchronization.
- *
- * A single sequencesync worker is responsible for synchronizing all sequences.
- * It begins by retrieving the list of sequences that are flagged for
- * synchronization, i.e., those in the INIT state. These sequences are then
- * processed in batches, allowing multiple entries to be synchronized within a
- * single transaction. The worker fetches the current sequence values and page
- * LSNs from the remote publisher, updates the corresponding sequences on the
- * local subscriber, and finally marks each sequence as READY upon successful
+ * The apply worker periodically scans pg_subscription_rel for sequences
+ * When sequences are found, it spawns a sequencesync worker to handle
  * synchronization.
  *
- * The sequencesync worker then fetches all sequences that are
- * in the READY state, queries the publisher for current sequence values, and
- * updates any sequences that have drifted and then goes to sleep. The sleep
- * interval starts as SEQSYNC_MIN_SLEEP_MS and doubles after each wake cycle
- * (up to SEQSYNC_MAX_SLEEP_MS). When drift is detected, the interval resets to
- * the minimum to ensure timely updates.
- *
- * After CREATE SUBSCRIPTION, sequences begin in the INIT state. Sequences
- * added through ALTER SUBSCRIPTION.. REFRESH PUBLICATION also start in the 
INIT
- * state. All INIT sequences are synchronized unconditionally, then transition
- * to the READY state. Once in the READY state, sequences are checked for drift
- * from the publisher and synchronized only when drift is detected.
+ * A single sequencesync worker is responsible for synchronizing all sequences
+ * for a subscription. It begins by retrieving the list of sequences. These
+ * sequences are then processed in batches, allowing multiple entries to be
+ * synchronized within a single transaction. The worker fetches the current
+ * sequence values and page LSNs from the remote publisher and updates the
+ * corresponding sequences on the local subscriber. Sequences in the INIT
+ * state are unconditionally updated to the latest values from the publisher
+ * and then moved to the READY state. For sequences already in the READY
+ * state, the worker checks for drift and updates them only when needed.
  *
  * Sequence state transitions follow this pattern:
- *  INIT --> READY ->-+
- *             ^      | (check/synchronize)
- *             |      |
- *             +--<---+
+
+ *       (synchronize)
+ *  INIT --------------> READY ->-+
+ *                         ^      | (check-drift/synchronize)
+ *                         |      |
+ *                         +--<---+
+ *
+ * Between cycles, the worker sleeps for SEQSYNC_MIN_SLEEP_MS. If no drift is
+ * observed in any sequence, the sleep interval doubles after each wake cycle
+ * up to SEQSYNC_MAX_SLEEP_MS. When drift is detected, the interval resets to
+ * the minimum to ensure timely updates.
  *
  * To avoid creating too many transactions, up to MAX_SEQUENCES_SYNC_PER_BATCH
  * sequences are synchronized per transaction. The locks on the sequence
-- 
2.34.1

Reply via email to