StartupXLOG: Call CleanupAfterArchiveRecovery after XLogReportParameters.
authorRobert Haas <[email protected]>
Mon, 25 Oct 2021 13:49:46 +0000 (09:49 -0400)
committerRobert Haas <[email protected]>
Mon, 25 Oct 2021 14:02:36 +0000 (10:02 -0400)
This does a better job grouping related operations together, since
all of the WAL records that we need to write prior to allowing WAL
writes generally and written by a single uninterrupted stretch of code.

Since CleanupAfterArchiveRecovery() just (1) runs recovery_end_command,
(2) removes non-parent xlog files, and (3) archives any final partial
segment, this should be safe, because all of those things are pretty
much unrelated to the WAL record written by XLogReportParameters().

Amul Sul, per a suggestion from me

Discussion: http://postgr.es/m/CAAJ_b97fysj6sRSQEfOHj-y8Jfd5uPqOgO74qast89B4WfD+TA@mail.gmail.com

src/backend/access/transam/xlog.c

index 62862255fca97d2af9ffd192b454279261031e5f..121577667245d39bfddd54a109944e5cd0897876 100644 (file)
@@ -8094,10 +8094,6 @@ StartupXLOG(void)
        if (!XLogRecPtrIsInvalid(XLogCtl->lastReplayedEndRecPtr))
                promoted = PerformRecoveryXLogAction();
 
-       /* If this is archive recovery, perform post-recovery cleanup actions. */
-       if (ArchiveRecoveryRequested)
-               CleanupAfterArchiveRecovery(EndOfLogTLI, EndOfLog);
-
        /*
         * If any of the critical GUCs have changed, log them before we allow
         * backends to write WAL.
@@ -8105,6 +8101,10 @@ StartupXLOG(void)
        LocalSetXLogInsertAllowed();
        XLogReportParameters();
 
+       /* If this is archive recovery, perform post-recovery cleanup actions. */
+       if (ArchiveRecoveryRequested)
+               CleanupAfterArchiveRecovery(EndOfLogTLI, EndOfLog);
+
        /*
         * Local WAL inserts enabled, so it's time to finish initialization of
         * commit timestamp.