Un-revert "Disable STARTUP_PROGRESS_TIMEOUT in standby mode."

This reverts commit 1eadfbdd7e
and thus reinstates commit 98e7234242.

It's a better time to commit this now that the release is over.

Discussion: http://postgr.es/m/3509384.1675878203@sss.pgh.pa.us
This commit is contained in:
Robert Haas 2023-02-10 16:27:05 -05:00
parent 2ee703c9d1
commit ecb01e6ebb
3 changed files with 51 additions and 6 deletions

View File

@ -383,6 +383,7 @@ static bool recoveryStopAfter;
/* prototypes for local functions */
static void ApplyWalRecord(XLogReaderState *xlogreader, XLogRecord *record, TimeLineID *replayTLI);
static void EnableStandbyMode(void);
static void readRecoverySignalFile(void);
static void validateRecoveryParameters(void);
static bool read_backup_label(XLogRecPtr *checkPointLoc,
@ -467,6 +468,24 @@ XLogRecoveryShmemInit(void)
ConditionVariableInit(&XLogRecoveryCtl->recoveryNotPausedCV);
}
/*
* A thin wrapper to enable StandbyMode and do other preparatory work as
* needed.
*/
static void
EnableStandbyMode(void)
{
StandbyMode = true;
/*
* To avoid server log bloat, we don't report recovery progress in a
* standby as it will always be in recovery unless promoted. We disable
* startup progress timeout in standby mode to avoid calling
* startup_progress_timeout_handler() unnecessarily.
*/
disable_startup_progress_timeout();
}
/*
* Prepare the system for WAL recovery, if needed.
*
@ -600,7 +619,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
*/
InArchiveRecovery = true;
if (StandbyModeRequested)
StandbyMode = true;
EnableStandbyMode();
/*
* When a backup_label file is present, we want to roll forward from
@ -737,7 +756,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
{
InArchiveRecovery = true;
if (StandbyModeRequested)
StandbyMode = true;
EnableStandbyMode();
}
/* Get the last valid checkpoint record. */
@ -3115,7 +3134,7 @@ ReadRecord(XLogPrefetcher *xlogprefetcher, int emode,
(errmsg_internal("reached end of WAL in pg_wal, entering archive recovery")));
InArchiveRecovery = true;
if (StandbyModeRequested)
StandbyMode = true;
EnableStandbyMode();
SwitchIntoArchiveRecovery(xlogreader->EndRecPtr, replayTLI);
minRecoveryPoint = xlogreader->EndRecPtr;

View File

@ -314,11 +314,22 @@ startup_progress_timeout_handler(void)
startup_progress_timer_expired = true;
}
void
disable_startup_progress_timeout(void)
{
/* Feature is disabled. */
if (log_startup_progress_interval == 0)
return;
disable_timeout(STARTUP_PROGRESS_TIMEOUT, false);
startup_progress_timer_expired = false;
}
/*
* Set the start timestamp of the current operation and enable the timeout.
*/
void
begin_startup_progress_phase(void)
enable_startup_progress_timeout(void)
{
TimestampTz fin_time;
@ -326,8 +337,6 @@ begin_startup_progress_phase(void)
if (log_startup_progress_interval == 0)
return;
disable_timeout(STARTUP_PROGRESS_TIMEOUT, false);
startup_progress_timer_expired = false;
startup_progress_phase_start_time = GetCurrentTimestamp();
fin_time = TimestampTzPlusMilliseconds(startup_progress_phase_start_time,
log_startup_progress_interval);
@ -335,6 +344,21 @@ begin_startup_progress_phase(void)
log_startup_progress_interval);
}
/*
* A thin wrapper to first disable and then enable the startup progress
* timeout.
*/
void
begin_startup_progress_phase(void)
{
/* Feature is disabled. */
if (log_startup_progress_interval == 0)
return;
disable_startup_progress_timeout();
enable_startup_progress_timeout();
}
/*
* Report whether startup progress timeout has occurred. Reset the timer flag
* if it did, set the elapsed time to the out parameters and return true,

View File

@ -32,6 +32,8 @@ extern void PostRestoreCommand(void);
extern bool IsPromoteSignaled(void);
extern void ResetPromoteSignaled(void);
extern void enable_startup_progress_timeout(void);
extern void disable_startup_progress_timeout(void);
extern void begin_startup_progress_phase(void);
extern void startup_progress_timeout_handler(void);
extern bool has_startup_progress_timeout_expired(long *secs, int *usecs);