Re: BUG #19093: Behavioral change in walreceiver termination between PostgreSQL 14.17 and 14.18
Noah Misch <noah@leadboat.com>
From: Noah Misch <noah@leadboat.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Xuneng Zhou <xunengzhou@gmail.com>, ryanzxg@gmail.com, pgsql-bugs@lists.postgresql.org, Euler Taveira <euler@eulerto.com>
Date: 2025-11-08T20:03:07Z
Lists: pgsql-bugs
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add assertions checking for the startup process in WAL replay routines
- 2fc31079624e 19 (unreleased) landed
-
Add assertion check for WAL receiver state during stream-archive transition
- 65f4976189b6 19 (unreleased) landed
-
Add WalRcvGetState() to retrieve the state of a WAL receiver
- e0ca61e7c4d5 19 (unreleased) landed
-
Fix unconditional WAL receiver shutdown during stream-archive transition
- 25b484080f14 13.23 landed
- a1b8b3b2e385 14.20 landed
- da5ea6c70bc4 15.15 landed
- 9b61096074af 16.11 landed
- e7340b484c34 17.7 landed
- a14201073965 18.1 landed
- 17b2d5ec759c 19 (unreleased) landed
-
Add test tracking WAL receiver shutdown for primary_conninfo updates
- c9e38a569c5f 19 (unreleased) landed
-
Reset InstallXLogFileSegmentActive after walreceiver self-initiated exit.
- 3635a0a35aaf 14.18 cited
- b4f584f9d2a1 16.0 cited
-
Replace durable_rename_excl() by durable_rename(), take two
- 1f95181b44c8 14.16 cited
-
Split xlog.c into xlog.c and xlogrecovery.c.
- 70e81861fadd 15.0 cited
On Fri, Oct 31, 2025 at 12:16:21PM +0900, Michael Paquier wrote: > On Fri, Oct 31, 2025 at 12:07:01AM +0800, Xuneng Zhou wrote: > > I’ve incorporated both tests and the assertion into the patch applied to master. > > For earlier stable branches, the test in > > 040_standby_failover_slots_sync.pl and the assertion for > > WAL receiver state checking are not included (if Noah agrees too). Please check. > > Thanks for doing that. I have extracted the test to check the "valid" > WAL receiver shutdown case, and applied that separately. > > Noah, what do you think? This just now got to the top of my queue. Given your commits, you may no longer need answers to these and other questions on the thread. If anything of $SUBJECT is still waiting on me, let me know. commit 17b2d5e wrote: > Fix unconditional WAL receiver shutdown during stream-archive transition > > Commit b4f584f9d2a1 (affecting v15~, later backpatched down to 13 as of > 3635a0a35aaf) introduced an unconditional WAL receiver shutdown when > switching from streaming to archive WAL sources. This causes problems > during a timeline switch, when a WAL receiver enters WALRCV_WAITING > state but remains alive, waiting for instructions. > This commit changes the WAL receiver behavior so as the shutdown becomes > conditional, with InstallXLogFileSegmentActive being always reset to > prevent the regression fixed by b4f584f9d2a1: only terminate the WAL > receiver when it is actively streaming (WALRCV_STREAMING, > WALRCV_STARTING, or WALRCV_RESTARTING). When in WALRCV_WAITING state, > just reset InstallXLogFileSegmentActive flag to allow archive > restoration without killing the process. WALRCV_STOPPED and > WALRCV_STOPPING are not reachable states in this code path. For the archives, I think the last sentence is incorrect about WALRCV_STOPPED. Observing WALRCV_STOPPED at this location was the original motivation for commit b4f584f9d2a1, per its report (https://www.postgresql.org/message-id/CAFiTN-sE3ry=ycMPVtC+Djw4Fd7gbUGVv_qqw6qfzp=JLvqT3g@mail.gmail.com). Commit 17b2d5e will handle that case fine, though.