Hi, I was reading the walsender.c fileheader comment while studying another thread. I think if there is logical replication in progress then the PROCSIG_WALSND_INIT_STOPPING handler will *always* switch to a "stopping" state: e.g.,
/* * Handle PROCSIG_WALSND_INIT_STOPPING signal. */ void HandleWalSndInitStopping(void) { Assert(am_walsender); /* * If replication has not yet started, die like with SIGTERM. If * replication is active, only set a flag and wake up the main loop. It * will send any outstanding WAL, wait for it to be replicated to the * standby, and then exit gracefully. */ if (!replication_active) kill(MyProcPid, SIGTERM); else got_STOPPING = true; } ~~~ But the walsender.c fileheader comment seems to be saying something slightly different. IIUC, some minor rewording of the comment is needed so it describes the code better. HEAD ... * shutdown, if logical replication is in progress all existing WAL records * are processed followed by a shutdown. Otherwise this causes the walsender * to switch to the "stopping" state. In this state, the walsender will reject * any further replication commands. The checkpointer begins the shutdown ... SUGGESTION .. shutdown. If logical replication is in progress, the walsender switches to a "stopping" state. In this state, the walsender will reject any further replication commands - but all existing WAL records are processed - followed by a shutdown. ~~~ I attached a patch for the above-suggested change. Thoughts? ====== Kind Regards, Peter Smith. Fujitsu Australia
v1-0001-walsender-fileheader-comment.patch
Description: Binary data