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
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)
*/
if (!IsBinaryUpgrade && AutoVacuumingActive() && AutoVacPID == 0)
AutoVacPID = StartAutoVacLauncher();
- if (XLogArchivingActive() && PgArchPID == 0)
+ if (PgArchStartupAllowed() && PgArchPID == 0)
PgArchPID = pgarch_start();
if (PgStatPID == 0)
PgStatPID = pgstat_start();
if (!EXIT_STATUS_0(exitstatus))
LogChildExit(LOG, _("archiver process"),
pid, exitstatus);
- if (XLogArchivingActive() && pmState == PM_RUN)
+ if (PgArchStartupAllowed())
PgArchPID = pgarch_start();
continue;
}
* files.
*/
Assert(PgArchPID == 0);
- if (wal_level >= WAL_LEVEL_ARCHIVE &&
- XLogArchiveMode == ARCHIVE_MODE_ALWAYS)
- {
+ if (XLogArchivingAlways())
PgArchPID = pgarch_start();
- }
pmState = PM_RECOVERY;
}
} 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')
/*