Re: Subscription tests fail under CLOBBER_CACHE_ALWAYS

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Subscription tests fail under CLOBBER_CACHE_ALWAYS
Дата
Msg-id 194914.1621641288@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Subscription tests fail under CLOBBER_CACHE_ALWAYS  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
I wrote:
> BTW, I wonder whether it wouldn't be a good idea for the
> postmaster to log something along the lines of "stopping
> because restart_after_crash is off".  The present behavior
> can be quite mysterious otherwise (it certainly confused me).

Concretely, I suggest the attached.

While checking the other ExitPostmaster calls to see if any of
them lacked suitable log messages, I noticed that there's one
after a call to AuxiliaryProcessMain, which is marked
pg_attribute_noreturn().  So that's dead code, and if it
weren't dead it'd be wrong, because we shouldn't use
ExitPostmaster to exit a child process.

            regards, tom lane

diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 5327859472..5a050898fe 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -3973,7 +3973,11 @@ PostmasterStateMachine(void)
             if (ReachedNormalRunning)
                 CancelBackup();

-            /* Normal exit from the postmaster is here */
+            /*
+             * Normal exit from the postmaster is here.  We don't need to log
+             * anything here, since the UnlinkLockFiles proc_exit callback
+             * will do so, and that should be the last user-visible action.
+             */
             ExitPostmaster(0);
         }
     }
@@ -3985,9 +3989,21 @@ PostmasterStateMachine(void)
      * startup process fails, because more than likely it will just fail again
      * and we will keep trying forever.
      */
-    if (pmState == PM_NO_CHILDREN &&
-        (StartupStatus == STARTUP_CRASHED || !restart_after_crash))
-        ExitPostmaster(1);
+    if (pmState == PM_NO_CHILDREN)
+    {
+        if (StartupStatus == STARTUP_CRASHED)
+        {
+            ereport(LOG,
+                    (errmsg("shutting down due to startup process failure")));
+            ExitPostmaster(1);
+        }
+        if (!restart_after_crash)
+        {
+            ereport(LOG,
+                    (errmsg("shutting down because restart_after_crash is off")));
+            ExitPostmaster(1);
+        }
+    }

     /*
      * If we need to recover from a crash, wait for all non-syslogger children
@@ -5439,8 +5455,7 @@ StartChildProcess(AuxProcType type)
         MemoryContextDelete(PostmasterContext);
         PostmasterContext = NULL;

-        AuxiliaryProcessMain(ac, av);
-        ExitPostmaster(0);
+        AuxiliaryProcessMain(ac, av);    /* does not return */
     }
 #endif                            /* EXEC_BACKEND */


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: seawasp failing, maybe in glibc allocator
Следующее
От: Andres Freund
Дата:
Сообщение: Re: seawasp failing, maybe in glibc allocator