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
