|
|
|
@ -561,14 +561,6 @@ static void ShmemBackendArrayAdd(Backend *bn); |
|
|
|
|
static void ShmemBackendArrayRemove(Backend *bn); |
|
|
|
|
#endif /* EXEC_BACKEND */ |
|
|
|
|
|
|
|
|
|
#define StartupDataBase() StartChildProcess(StartupProcess) |
|
|
|
|
#define StartArchiver() StartChildProcess(ArchiverProcess) |
|
|
|
|
#define StartBackgroundWriter() StartChildProcess(BgWriterProcess) |
|
|
|
|
#define StartCheckpointer() StartChildProcess(CheckpointerProcess) |
|
|
|
|
#define StartWalWriter() StartChildProcess(WalWriterProcess) |
|
|
|
|
#define StartWalReceiver() StartChildProcess(WalReceiverProcess) |
|
|
|
|
#define StartWalSummarizer() StartChildProcess(WalSummarizerProcess) |
|
|
|
|
|
|
|
|
|
/* Macros to check exit status of a child process */ |
|
|
|
|
#define EXIT_STATUS_0(st) ((st) == 0) |
|
|
|
|
#define EXIT_STATUS_1(st) (WIFEXITED(st) && WEXITSTATUS(st) == 1) |
|
|
|
@ -1457,14 +1449,14 @@ PostmasterMain(int argc, char *argv[]) |
|
|
|
|
|
|
|
|
|
/* Start bgwriter and checkpointer so they can help with recovery */ |
|
|
|
|
if (CheckpointerPID == 0) |
|
|
|
|
CheckpointerPID = StartCheckpointer(); |
|
|
|
|
CheckpointerPID = StartChildProcess(CheckpointerProcess); |
|
|
|
|
if (BgWriterPID == 0) |
|
|
|
|
BgWriterPID = StartBackgroundWriter(); |
|
|
|
|
BgWriterPID = StartChildProcess(BgWriterProcess); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* We're ready to rock and roll... |
|
|
|
|
*/ |
|
|
|
|
StartupPID = StartupDataBase(); |
|
|
|
|
StartupPID = StartChildProcess(StartupProcess); |
|
|
|
|
Assert(StartupPID != 0); |
|
|
|
|
StartupStatus = STARTUP_RUNNING; |
|
|
|
|
pmState = PM_STARTUP; |
|
|
|
@ -1798,9 +1790,9 @@ ServerLoop(void) |
|
|
|
|
pmState == PM_HOT_STANDBY || pmState == PM_STARTUP) |
|
|
|
|
{ |
|
|
|
|
if (CheckpointerPID == 0) |
|
|
|
|
CheckpointerPID = StartCheckpointer(); |
|
|
|
|
CheckpointerPID = StartChildProcess(CheckpointerProcess); |
|
|
|
|
if (BgWriterPID == 0) |
|
|
|
|
BgWriterPID = StartBackgroundWriter(); |
|
|
|
|
BgWriterPID = StartChildProcess(BgWriterProcess); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -1809,7 +1801,7 @@ ServerLoop(void) |
|
|
|
|
* be writing any new WAL). |
|
|
|
|
*/ |
|
|
|
|
if (WalWriterPID == 0 && pmState == PM_RUN) |
|
|
|
|
WalWriterPID = StartWalWriter(); |
|
|
|
|
WalWriterPID = StartChildProcess(WalWriterProcess); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* If we have lost the autovacuum launcher, try to start a new one. We |
|
|
|
@ -1828,7 +1820,7 @@ ServerLoop(void) |
|
|
|
|
|
|
|
|
|
/* If we have lost the archiver, try to start a new one. */ |
|
|
|
|
if (PgArchPID == 0 && PgArchStartupAllowed()) |
|
|
|
|
PgArchPID = StartArchiver(); |
|
|
|
|
PgArchPID = StartChildProcess(ArchiverProcess); |
|
|
|
|
|
|
|
|
|
/* If we need to signal the autovacuum launcher, do so now */ |
|
|
|
|
if (avlauncher_needs_signal) |
|
|
|
@ -3019,11 +3011,11 @@ process_pm_child_exit(void) |
|
|
|
|
* if this fails, we'll just try again later. |
|
|
|
|
*/ |
|
|
|
|
if (CheckpointerPID == 0) |
|
|
|
|
CheckpointerPID = StartCheckpointer(); |
|
|
|
|
CheckpointerPID = StartChildProcess(CheckpointerProcess); |
|
|
|
|
if (BgWriterPID == 0) |
|
|
|
|
BgWriterPID = StartBackgroundWriter(); |
|
|
|
|
BgWriterPID = StartChildProcess(BgWriterProcess); |
|
|
|
|
if (WalWriterPID == 0) |
|
|
|
|
WalWriterPID = StartWalWriter(); |
|
|
|
|
WalWriterPID = StartChildProcess(WalWriterProcess); |
|
|
|
|
MaybeStartWalSummarizer(); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -3033,7 +3025,7 @@ process_pm_child_exit(void) |
|
|
|
|
if (!IsBinaryUpgrade && AutoVacuumingActive() && AutoVacPID == 0) |
|
|
|
|
AutoVacPID = StartAutoVacLauncher(); |
|
|
|
|
if (PgArchStartupAllowed() && PgArchPID == 0) |
|
|
|
|
PgArchPID = StartArchiver(); |
|
|
|
|
PgArchPID = StartChildProcess(ArchiverProcess); |
|
|
|
|
|
|
|
|
|
/* workers may be scheduled to start now */ |
|
|
|
|
maybe_start_bgworkers(); |
|
|
|
@ -3188,7 +3180,7 @@ process_pm_child_exit(void) |
|
|
|
|
HandleChildCrash(pid, exitstatus, |
|
|
|
|
_("archiver process")); |
|
|
|
|
if (PgArchStartupAllowed()) |
|
|
|
|
PgArchPID = StartArchiver(); |
|
|
|
|
PgArchPID = StartChildProcess(ArchiverProcess); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -3767,7 +3759,7 @@ PostmasterStateMachine(void) |
|
|
|
|
Assert(Shutdown > NoShutdown); |
|
|
|
|
/* Start the checkpointer if not running */ |
|
|
|
|
if (CheckpointerPID == 0) |
|
|
|
|
CheckpointerPID = StartCheckpointer(); |
|
|
|
|
CheckpointerPID = StartChildProcess(CheckpointerProcess); |
|
|
|
|
/* And tell it to shut down */ |
|
|
|
|
if (CheckpointerPID != 0) |
|
|
|
|
{ |
|
|
|
@ -3899,7 +3891,7 @@ PostmasterStateMachine(void) |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* If we need to recover from a crash, wait for all non-syslogger children |
|
|
|
|
* to exit, then reset shmem and StartupDataBase. |
|
|
|
|
* to exit, then reset shmem and start the startup process. |
|
|
|
|
*/ |
|
|
|
|
if (FatalError && pmState == PM_NO_CHILDREN) |
|
|
|
|
{ |
|
|
|
@ -3921,7 +3913,7 @@ PostmasterStateMachine(void) |
|
|
|
|
/* re-create shared memory and semaphores */ |
|
|
|
|
CreateSharedMemoryAndSemaphores(); |
|
|
|
|
|
|
|
|
|
StartupPID = StartupDataBase(); |
|
|
|
|
StartupPID = StartChildProcess(StartupProcess); |
|
|
|
|
Assert(StartupPID != 0); |
|
|
|
|
StartupStatus = STARTUP_RUNNING; |
|
|
|
|
pmState = PM_STARTUP; |
|
|
|
@ -5066,7 +5058,7 @@ process_pm_pmsignal(void) |
|
|
|
|
*/ |
|
|
|
|
Assert(PgArchPID == 0); |
|
|
|
|
if (XLogArchivingAlways()) |
|
|
|
|
PgArchPID = StartArchiver(); |
|
|
|
|
PgArchPID = StartChildProcess(ArchiverProcess); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* If we aren't planning to enter hot standby mode later, treat |
|
|
|
@ -5501,7 +5493,7 @@ MaybeStartWalReceiver(void) |
|
|
|
|
pmState == PM_HOT_STANDBY) && |
|
|
|
|
Shutdown <= SmartShutdown) |
|
|
|
|
{ |
|
|
|
|
WalReceiverPID = StartWalReceiver(); |
|
|
|
|
WalReceiverPID = StartChildProcess(WalReceiverProcess); |
|
|
|
|
if (WalReceiverPID != 0) |
|
|
|
|
WalReceiverRequested = false; |
|
|
|
|
/* else leave the flag set, so we'll try again later */ |
|
|
|
@ -5518,7 +5510,7 @@ MaybeStartWalSummarizer(void) |
|
|
|
|
if (summarize_wal && WalSummarizerPID == 0 && |
|
|
|
|
(pmState == PM_RUN || pmState == PM_HOT_STANDBY) && |
|
|
|
|
Shutdown <= SmartShutdown) |
|
|
|
|
WalSummarizerPID = StartWalSummarizer(); |
|
|
|
|
WalSummarizerPID = StartChildProcess(WalSummarizerProcess); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|