Checkpointer starts before bgwriter to avoid missing fsync requests.
authorSimon Riggs <simon@2ndQuadrant.com>
Fri, 1 Jun 2012 07:25:17 +0000 (08:25 +0100)
committerSimon Riggs <simon@2ndQuadrant.com>
Fri, 1 Jun 2012 07:25:17 +0000 (08:25 +0100)
Noted while testing Hot Standby startup.

src/backend/postmaster/postmaster.c

index e400f0a8e15e8d7e02b1d3f5724940c1dd323bf6..830a83f60e00d452b9076342a70b105b2925f80c 100644 (file)
@@ -1378,10 +1378,10 @@ ServerLoop(void)
        if (pmState == PM_RUN || pmState == PM_RECOVERY ||
            pmState == PM_HOT_STANDBY)
        {
-           if (BgWriterPID == 0)
-               BgWriterPID = StartBackgroundWriter();
            if (CheckpointerPID == 0)
                CheckpointerPID = StartCheckpointer();
+           if (BgWriterPID == 0)
+               BgWriterPID = StartBackgroundWriter();
        }
 
        /*
@@ -2372,10 +2372,10 @@ reaper(SIGNAL_ARGS)
             * when we entered consistent recovery state.  It doesn't matter
             * if this fails, we'll just try again later.
             */
-           if (BgWriterPID == 0)
-               BgWriterPID = StartBackgroundWriter();
            if (CheckpointerPID == 0)
                CheckpointerPID = StartCheckpointer();
+           if (BgWriterPID == 0)
+               BgWriterPID = StartBackgroundWriter();
            if (WalWriterPID == 0)
                WalWriterPID = StartWalWriter();
 
@@ -4239,10 +4239,10 @@ sigusr1_handler(SIGNAL_ARGS)
         * Crank up the background tasks.  It doesn't matter if this fails,
         * we'll just try again later.
         */
-       Assert(BgWriterPID == 0);
-       BgWriterPID = StartBackgroundWriter();
        Assert(CheckpointerPID == 0);
        CheckpointerPID = StartCheckpointer();
+       Assert(BgWriterPID == 0);
+       BgWriterPID = StartBackgroundWriter();
 
        pmState = PM_RECOVERY;
    }