Re: Refactoring postmaster's code to cleanup after child exit - Mailing list pgsql-hackers

From Andres Freund
Subject Re: Refactoring postmaster's code to cleanup after child exit
Date
Msg-id poxjp7ireyrvk37o4rq3vm2b3otzhmg3ui4ptnfilyiemns4jt@pbqmi2u5y5rb
Whole thread Raw
In response to Re: Refactoring postmaster's code to cleanup after child exit  (Heikki Linnakangas <hlinnaka@iki.fi>)
List pgsql-hackers
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



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: [PATCH] Add CANONICAL option to xmlserialize
Next
From: Daniel Gustafsson
Date:
Subject: Re: Converting README documentation to Markdown