Hi,
On 2024-08-12 12:55:00 +0300, Heikki Linnakangas wrote:
> @@ -2864,6 +2777,8 @@ PostmasterStateMachine(void)
> */
> if (pmState == PM_STOP_BACKENDS)
> {
> + uint32 targetMask;
> +
> /*
> * Forget any pending requests for background workers, since we're no
> * longer willing to launch any new workers. (If additional requests
> @@ -2871,29 +2786,27 @@ PostmasterStateMachine(void)
> */
> ForgetUnstartedBackgroundWorkers();
>
> - /* Signal all backend children except walsenders and dead-end backends */
> - SignalSomeChildren(SIGTERM,
> - BACKEND_TYPE_ALL & ~(1 << B_WAL_SENDER | 1 << B_DEAD_END_BACKEND));
> + /* Signal all backend children except walsenders */
> + /* dead-end children are not signalled yet */
> + targetMask = (1 << B_BACKEND);
> + targetMask |= (1 << B_BG_WORKER);
> +
> /* and the autovac launcher too */
> - if (AutoVacPID != 0)
> - signal_child(AutoVacPID, SIGTERM);
> + targetMask |= (1 << B_AUTOVAC_LAUNCHER);
> /* and the bgwriter too */
> - if (BgWriterPID != 0)
> - signal_child(BgWriterPID, SIGTERM);
> + targetMask |= (1 << B_BG_WRITER);
> /* and the walwriter too */
> - if (WalWriterPID != 0)
> - signal_child(WalWriterPID, SIGTERM);
> + targetMask |= (1 << B_WAL_WRITER);
> /* If we're in recovery, also stop startup and walreceiver procs */
> - if (StartupPID != 0)
> - signal_child(StartupPID, SIGTERM);
> - if (WalReceiverPID != 0)
> - signal_child(WalReceiverPID, SIGTERM);
> - if (WalSummarizerPID != 0)
> - signal_child(WalSummarizerPID, SIGTERM);
> - if (SlotSyncWorkerPID != 0)
> - signal_child(SlotSyncWorkerPID, SIGTERM);
> + targetMask |= (1 << B_STARTUP);
> + targetMask |= (1 << B_WAL_RECEIVER);
> +
> + targetMask |= (1 << B_WAL_SUMMARIZER);
> + targetMask |= (1 << B_SLOTSYNC_WORKER);
> /* checkpointer, archiver, stats, and syslogger may continue for now */
>
> + SignalSomeChildren(SIGTERM, targetMask);
> +
> /* Now transition to PM_WAIT_BACKENDS state to wait for them to die */
> pmState = PM_WAIT_BACKENDS;
> }
I think this might now omit shutting down at least autovac workers, which
afaict previously were included.
Greetings,
Andres Freund