On Thu, Aug 13, 2020 at 8:59 AM Tom Lane <t...@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;