Re: pg_recvlogical: Prevent flushed data from being re-sent after restarting replication
Chao Li <li.evan.chao@gmail.com>
From: Chao Li <li.evan.chao@gmail.com>
To: Fujii Masao <masao.fujii@gmail.com>
Cc: Mircea Cadariu <cadariu.mircea@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-01-14T08:47:11Z
Lists: pgsql-hackers
> On Jan 14, 2026, at 09:26, Fujii Masao <masao.fujii@gmail.com> wrote: > > On Mon, Jan 12, 2026 at 4:08 PM Chao Li <li.evan.chao@gmail.com> wrote: >> Thanks for the patch. Here are my comments on v4. > > Thanks for the review! > > >> 1 - 0001 >> ``` >> + /* >> + * Save the last flushed position as the replication start point. On >> + * reconnect, replication resumes from there to avoid re-sending flushed >> + * data. >> + */ >> + startpos = output_fsync_lsn; >> ``` >> >> Looking at function OutputFsync(), fsync() may fail and there a few branches to return early without fsync(), so should we only update startpos after fsync()? > > Maybe not, but I might be missing something. Could you clarify what > concrete scenario would be problematic with the current code? > I just reviewed the patch again, and I think I was wrong wrt this comment: * If fsync() fails, the process will fail out, no reconnect will happen, so wether or not updating startpos doesn’t matter; * if (fsync_interval <= 0), fsync is not required, but we still need to update startpos * if (!output_needs_fsync), meaning nothing new to fsync, but we still need to update startpos if startpos has not been updated So, I withdraw this comment. V5 LGTM. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
pg_recvlogical: remove unnecessary OutputFsync() return value checks.
- b98cc4a14e53 19 (unreleased) landed
-
Add test for pg_recvlogical reconnection behavior.
- d89b1d817513 19 (unreleased) landed
-
Add a new helper function wait_for_file() to Utils.pm.
- 0b10969db610 19 (unreleased) landed
-
pg_recvlogical: Prevent flushed data from being re-sent.
- 41cbdab0ab6d 19 (unreleased) landed