Re: Parallel query hangs after a smart shutdown is issued - Mailing list pgsql-hackers

From Thomas Munro
Subject Re: Parallel query hangs after a smart shutdown is issued
Date
Msg-id CA+hUKGLumqKAy6s8zDhnMfZ6D1_NpmvirL=cB19MFgJVsyY+GQ@mail.gmail.com
Whole thread Raw
In response to Re: Parallel query hangs after a smart shutdown is issued  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Parallel query hangs after a smart shutdown is issued
List pgsql-hackers
On Thu, Aug 13, 2020 at 8:59 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> I wrote:
> > Oh, excellent point!  I'd not thought to look at tests of the Shutdown
> > variable, but yeah, those should be <= SmartShutdown if we want autovac
> > to continue to operate in this state.
>
> On looking closer, there's another problem: setting start_autovac_launcher
> isn't enough to get the AV launcher to run, because ServerLoop() won't
> launch it except in PM_RUN state.  Likewise, the other "relaunch a dead
> process" checks in ServerLoop() need to be generalized to support
> relaunching background processes while we're waiting out the foreground
> clients.  So that leads me to the attached v3.  I had to re-instantiate
> PM_WAIT_READONLY as an alternate state to PM_WAIT_CLIENTS; these states
> are about the same so far as PostmasterStateMachine is concerned, but
> some of the should-we-launch-FOO checks care about the difference.

I think we also need:

@@ -2459,6 +2459,9 @@ canAcceptConnections(int backend_type)
        {
                if (pmState == PM_WAIT_BACKUP)
                        result = CAC_WAITBACKUP;        /* allow
superusers only */
+               else if (Shutdown <= SmartShutdown &&
+                                backend_type == BACKEND_TYPE_AUTOVAC)
+                       result = CAC_OK;
                else if (Shutdown > NoShutdown)
                        return CAC_SHUTDOWN;    /* shutdown is pending */
                else if (!FatalError &&


Retesting the original complaint, I think we need:

@@ -5911,11 +5912,11 @@ bgworker_should_start_now(BgWorkerStartTime start_time)
                case PM_SHUTDOWN_2:
                case PM_SHUTDOWN:
                case PM_WAIT_BACKENDS:
-               case PM_WAIT_READONLY:
-               case PM_WAIT_CLIENTS:
                case PM_WAIT_BACKUP:
                        break;

+               case PM_WAIT_READONLY:
+               case PM_WAIT_CLIENTS:
                case PM_RUN:
                        if (start_time == BgWorkerStart_RecoveryFinished)
                                return true;



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Parallel query hangs after a smart shutdown is issued
Next
From: Alvaro Herrera
Date:
Subject: Re: Dependencies for partitioned indexes are still a mess