Extract code to describe recovery stop reason to a function.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Sat, 31 Jul 2021 06:49:30 +0000 (09:49 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Sat, 31 Jul 2021 06:49:30 +0000 (09:49 +0300)
StartupXLOG() is very long, this makes it a little bit more readable.

Reviewed-by: Andres Freund
Discussion: https://www.postgresql.org/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi

src/backend/access/transam/xlog.c

index fb4186ee10d082c82453a48843048ce00edd20d4..1e601d6282fcf0562be56dbf528ad87085f88801 100644 (file)
@@ -901,6 +901,7 @@ static void validateRecoveryParameters(void);
 static void exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog);
 static bool recoveryStopsBefore(XLogReaderState *record);
 static bool recoveryStopsAfter(XLogReaderState *record);
+static char *getRecoveryStopReason(void);
 static void ConfirmRecoveryPaused(void);
 static void recoveryPausesHere(bool endOfRecovery);
 static bool recoveryApplyDelay(XLogReaderState *record);
@@ -6059,6 +6060,42 @@ recoveryStopsAfter(XLogReaderState *record)
    return false;
 }
 
+/*
+ * Create a comment for the history file to explain why and where
+ * timeline changed.
+ */
+static char *
+getRecoveryStopReason(void)
+{
+   char        reason[200];
+
+   if (recoveryTarget == RECOVERY_TARGET_XID)
+       snprintf(reason, sizeof(reason),
+                "%s transaction %u",
+                recoveryStopAfter ? "after" : "before",
+                recoveryStopXid);
+   else if (recoveryTarget == RECOVERY_TARGET_TIME)
+       snprintf(reason, sizeof(reason),
+                "%s %s\n",
+                recoveryStopAfter ? "after" : "before",
+                timestamptz_to_str(recoveryStopTime));
+   else if (recoveryTarget == RECOVERY_TARGET_LSN)
+       snprintf(reason, sizeof(reason),
+                "%s LSN %X/%X\n",
+                recoveryStopAfter ? "after" : "before",
+                LSN_FORMAT_ARGS(recoveryStopLSN));
+   else if (recoveryTarget == RECOVERY_TARGET_NAME)
+       snprintf(reason, sizeof(reason),
+                "at restore point \"%s\"",
+                recoveryStopName);
+   else if (recoveryTarget == RECOVERY_TARGET_IMMEDIATE)
+       snprintf(reason, sizeof(reason), "reached consistency");
+   else
+       snprintf(reason, sizeof(reason), "no recovery target specified");
+
+   return pstrdup(reason);
+}
+
 /*
  * Wait until shared recoveryPauseState is set to RECOVERY_NOT_PAUSED.
  *
@@ -7756,7 +7793,7 @@ StartupXLOG(void)
    PrevTimeLineID = ThisTimeLineID;
    if (ArchiveRecoveryRequested)
    {
-       char        reason[200];
+       char       *reason;
        char        recoveryPath[MAXPGPATH];
 
        Assert(InArchiveRecovery);
@@ -7765,33 +7802,7 @@ StartupXLOG(void)
        ereport(LOG,
                (errmsg("selected new timeline ID: %u", ThisTimeLineID)));
 
-       /*
-        * Create a comment for the history file to explain why and where
-        * timeline changed.
-        */
-       if (recoveryTarget == RECOVERY_TARGET_XID)
-           snprintf(reason, sizeof(reason),
-                    "%s transaction %u",
-                    recoveryStopAfter ? "after" : "before",
-                    recoveryStopXid);
-       else if (recoveryTarget == RECOVERY_TARGET_TIME)
-           snprintf(reason, sizeof(reason),
-                    "%s %s\n",
-                    recoveryStopAfter ? "after" : "before",
-                    timestamptz_to_str(recoveryStopTime));
-       else if (recoveryTarget == RECOVERY_TARGET_LSN)
-           snprintf(reason, sizeof(reason),
-                    "%s LSN %X/%X\n",
-                    recoveryStopAfter ? "after" : "before",
-                    LSN_FORMAT_ARGS(recoveryStopLSN));
-       else if (recoveryTarget == RECOVERY_TARGET_NAME)
-           snprintf(reason, sizeof(reason),
-                    "at restore point \"%s\"",
-                    recoveryStopName);
-       else if (recoveryTarget == RECOVERY_TARGET_IMMEDIATE)
-           snprintf(reason, sizeof(reason), "reached consistency");
-       else
-           snprintf(reason, sizeof(reason), "no recovery target specified");
+       reason = getRecoveryStopReason();
 
        /*
         * We are now done reading the old WAL.  Turn off archive fetching if