fix_smart_shutdown_in_recovery_v5_fujii.patch
application/octet-stream
Filename: fix_smart_shutdown_in_recovery_v5_fujii.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
Series: patch v5
| File | + | − |
|---|---|---|
| src/backend/postmaster/postmaster.c | 15 | 0 |
*** a/src/backend/postmaster/postmaster.c
--- b/src/backend/postmaster/postmaster.c
***************
*** 287,292 **** typedef enum
--- 287,294 ----
static PMState pmState = PM_INIT;
+ static bool ReachedEndOfRecovery = false; /* T if we've reached PM_RUN */
+
bool ClientAuthInProgress = false; /* T during new-client
* authentication */
***************
*** 2168,2174 **** pmdie(SIGNAL_ARGS)
(errmsg("received smart shutdown request")));
if (pmState == PM_RUN || pmState == PM_RECOVERY ||
! pmState == PM_HOT_STANDBY)
{
/* autovacuum workers are told to shut down immediately */
SignalAutovacWorkers(SIGTERM);
--- 2170,2176 ----
(errmsg("received smart shutdown request")));
if (pmState == PM_RUN || pmState == PM_RECOVERY ||
! pmState == PM_HOT_STANDBY || pmState == PM_STARTUP)
{
/* autovacuum workers are told to shut down immediately */
SignalAutovacWorkers(SIGTERM);
***************
*** 2370,2375 **** reaper(SIGNAL_ARGS)
--- 2372,2378 ----
* Startup succeeded, commence normal operations
*/
FatalError = false;
+ ReachedEndOfRecovery = true;
pmState = PM_RUN;
/*
***************
*** 3028,3036 **** PostmasterStateMachine(void)
{
/*
* Terminate backup mode to avoid recovery after a clean fast
! * shutdown.
*/
! CancelBackup();
/* Normal exit from the postmaster is here */
ExitPostmaster(0);
--- 3031,3042 ----
{
/*
* Terminate backup mode to avoid recovery after a clean fast
! * shutdown. We skip this cancellation if we've not reached
! * end of recovery yet since the backup label file is still
! * required for subsequent recovery.
*/
! if (ReachedEndOfRecovery)
! CancelBackup();
/* Normal exit from the postmaster is here */
ExitPostmaster(0);
***************
*** 3058,3063 **** PostmasterStateMachine(void)
--- 3064,3072 ----
shmem_exit(1);
reset_shared(PostPortNumber);
+ /* Reset to false before restarting recovery */
+ ReachedEndOfRecovery = false;
+
StartupPID = StartupDataBase();
Assert(StartupPID != 0);
pmState = PM_STARTUP;
***************
*** 4208,4214 **** sigusr1_handler(SIGNAL_ARGS)
}
if (CheckPostmasterSignal(PMSIGNAL_START_WALRECEIVER) &&
! WalReceiverPID == 0)
{
/* Startup Process wants us to start the walreceiver process. */
WalReceiverPID = StartWalReceiver();
--- 4217,4225 ----
}
if (CheckPostmasterSignal(PMSIGNAL_START_WALRECEIVER) &&
! WalReceiverPID == 0 &&
! (pmState == PM_STARTUP || pmState == PM_RECOVERY ||
! pmState == PM_HOT_STANDBY || pmState == PM_WAIT_READONLY))
{
/* Startup Process wants us to start the walreceiver process. */
WalReceiverPID = StartWalReceiver();