aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/postmaster.c36
-rw-r--r--src/include/access/xlog.h4
2 files changed, 20 insertions, 20 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index ee0b01820b1..324bf7aad14 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -406,6 +406,17 @@ static pid_t StartChildProcess(AuxProcType type);
static void StartAutovacuumWorker(void);
static void InitPostmasterDeathWatchHandle(void);
+/*
+ * Archiver is allowed to start up at the current postmaster state?
+ *
+ * If WAL archiving is enabled always, we are allowed to start archiver
+ * even during recovery.
+ */
+#define PgArchStartupAllowed() \
+ ((XLogArchivingActive() && pmState == PM_RUN) || \
+ (XLogArchivingAlways() && \
+ (pmState == PM_RECOVERY || pmState == PM_HOT_STANDBY)))
+
#ifdef EXEC_BACKEND
#ifdef WIN32
@@ -1649,21 +1660,9 @@ ServerLoop(void)
if (PgStatPID == 0 && pmState == PM_RUN)
PgStatPID = pgstat_start();
- /*
- * If we have lost the archiver, try to start a new one.
- *
- * If WAL archiving is enabled always, we try to start a new archiver
- * even during recovery.
- */
- if (PgArchPID == 0 && wal_level >= WAL_LEVEL_ARCHIVE)
- {
- if ((pmState == PM_RUN && XLogArchiveMode > ARCHIVE_MODE_OFF) ||
- ((pmState == PM_RECOVERY || pmState == PM_HOT_STANDBY) &&
- XLogArchiveMode == ARCHIVE_MODE_ALWAYS))
- {
+ /* If we have lost the archiver, try to start a new one. */
+ if (PgArchPID == 0 && PgArchStartupAllowed())
PgArchPID = pgarch_start();
- }
- }
/* If we need to signal the autovacuum launcher, do so now */
if (avlauncher_needs_signal)
@@ -2669,7 +2668,7 @@ reaper(SIGNAL_ARGS)
*/
if (!IsBinaryUpgrade && AutoVacuumingActive() && AutoVacPID == 0)
AutoVacPID = StartAutoVacLauncher();
- if (XLogArchivingActive() && PgArchPID == 0)
+ if (PgArchStartupAllowed() && PgArchPID == 0)
PgArchPID = pgarch_start();
if (PgStatPID == 0)
PgStatPID = pgstat_start();
@@ -2810,7 +2809,7 @@ reaper(SIGNAL_ARGS)
if (!EXIT_STATUS_0(exitstatus))
LogChildExit(LOG, _("archiver process"),
pid, exitstatus);
- if (XLogArchivingActive() && pmState == PM_RUN)
+ if (PgArchStartupAllowed())
PgArchPID = pgarch_start();
continue;
}
@@ -4833,11 +4832,8 @@ sigusr1_handler(SIGNAL_ARGS)
* files.
*/
Assert(PgArchPID == 0);
- if (wal_level >= WAL_LEVEL_ARCHIVE &&
- XLogArchiveMode == ARCHIVE_MODE_ALWAYS)
- {
+ if (XLogArchivingAlways())
PgArchPID = pgarch_start();
- }
pmState = PM_RECOVERY;
}
diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h
index 33348083ebc..6dacee2fbbd 100644
--- a/src/include/access/xlog.h
+++ b/src/include/access/xlog.h
@@ -126,8 +126,12 @@ typedef enum WalLevel
} WalLevel;
extern int wal_level;
+/* Is WAL archiving enabled (always or only while server is running normally)? */
#define XLogArchivingActive() \
(XLogArchiveMode > ARCHIVE_MODE_OFF && wal_level >= WAL_LEVEL_ARCHIVE)
+/* Is WAL archiving enabled always (even during recovery)? */
+#define XLogArchivingAlways() \
+ (XLogArchiveMode == ARCHIVE_MODE_ALWAYS && wal_level >= WAL_LEVEL_ARCHIVE)
#define XLogArchiveCommandSet() (XLogArchiveCommand[0] != '\0')
/*