mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Un-revert "Disable STARTUP_PROGRESS_TIMEOUT in standby mode."
This reverts commit1eadfbdd7eand thus reinstates commit98e7234242. 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:
		@@ -383,6 +383,7 @@ static bool recoveryStopAfter;
 | 
				
			|||||||
/* prototypes for local functions */
 | 
					/* prototypes for local functions */
 | 
				
			||||||
static void ApplyWalRecord(XLogReaderState *xlogreader, XLogRecord *record, TimeLineID *replayTLI);
 | 
					static void ApplyWalRecord(XLogReaderState *xlogreader, XLogRecord *record, TimeLineID *replayTLI);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void EnableStandbyMode(void);
 | 
				
			||||||
static void readRecoverySignalFile(void);
 | 
					static void readRecoverySignalFile(void);
 | 
				
			||||||
static void validateRecoveryParameters(void);
 | 
					static void validateRecoveryParameters(void);
 | 
				
			||||||
static bool read_backup_label(XLogRecPtr *checkPointLoc,
 | 
					static bool read_backup_label(XLogRecPtr *checkPointLoc,
 | 
				
			||||||
@@ -467,6 +468,24 @@ XLogRecoveryShmemInit(void)
 | 
				
			|||||||
	ConditionVariableInit(&XLogRecoveryCtl->recoveryNotPausedCV);
 | 
						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.
 | 
					 * Prepare the system for WAL recovery, if needed.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@@ -600,7 +619,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 | 
				
			|||||||
		 */
 | 
							 */
 | 
				
			||||||
		InArchiveRecovery = true;
 | 
							InArchiveRecovery = true;
 | 
				
			||||||
		if (StandbyModeRequested)
 | 
							if (StandbyModeRequested)
 | 
				
			||||||
			StandbyMode = true;
 | 
								EnableStandbyMode();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * When a backup_label file is present, we want to roll forward from
 | 
							 * 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;
 | 
								InArchiveRecovery = true;
 | 
				
			||||||
			if (StandbyModeRequested)
 | 
								if (StandbyModeRequested)
 | 
				
			||||||
				StandbyMode = true;
 | 
									EnableStandbyMode();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Get the last valid checkpoint record. */
 | 
							/* 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")));
 | 
											(errmsg_internal("reached end of WAL in pg_wal, entering archive recovery")));
 | 
				
			||||||
				InArchiveRecovery = true;
 | 
									InArchiveRecovery = true;
 | 
				
			||||||
				if (StandbyModeRequested)
 | 
									if (StandbyModeRequested)
 | 
				
			||||||
					StandbyMode = true;
 | 
										EnableStandbyMode();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				SwitchIntoArchiveRecovery(xlogreader->EndRecPtr, replayTLI);
 | 
									SwitchIntoArchiveRecovery(xlogreader->EndRecPtr, replayTLI);
 | 
				
			||||||
				minRecoveryPoint = xlogreader->EndRecPtr;
 | 
									minRecoveryPoint = xlogreader->EndRecPtr;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -314,11 +314,22 @@ startup_progress_timeout_handler(void)
 | 
				
			|||||||
	startup_progress_timer_expired = true;
 | 
						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.
 | 
					 * Set the start timestamp of the current operation and enable the timeout.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
begin_startup_progress_phase(void)
 | 
					enable_startup_progress_timeout(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	TimestampTz fin_time;
 | 
						TimestampTz fin_time;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -326,8 +337,6 @@ begin_startup_progress_phase(void)
 | 
				
			|||||||
	if (log_startup_progress_interval == 0)
 | 
						if (log_startup_progress_interval == 0)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	disable_timeout(STARTUP_PROGRESS_TIMEOUT, false);
 | 
					 | 
				
			||||||
	startup_progress_timer_expired = false;
 | 
					 | 
				
			||||||
	startup_progress_phase_start_time = GetCurrentTimestamp();
 | 
						startup_progress_phase_start_time = GetCurrentTimestamp();
 | 
				
			||||||
	fin_time = TimestampTzPlusMilliseconds(startup_progress_phase_start_time,
 | 
						fin_time = TimestampTzPlusMilliseconds(startup_progress_phase_start_time,
 | 
				
			||||||
										   log_startup_progress_interval);
 | 
															   log_startup_progress_interval);
 | 
				
			||||||
@@ -335,6 +344,21 @@ begin_startup_progress_phase(void)
 | 
				
			|||||||
						 log_startup_progress_interval);
 | 
											 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
 | 
					 * 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,
 | 
					 * if it did, set the elapsed time to the out parameters and return true,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,8 @@ extern void PostRestoreCommand(void);
 | 
				
			|||||||
extern bool IsPromoteSignaled(void);
 | 
					extern bool IsPromoteSignaled(void);
 | 
				
			||||||
extern void ResetPromoteSignaled(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 begin_startup_progress_phase(void);
 | 
				
			||||||
extern void startup_progress_timeout_handler(void);
 | 
					extern void startup_progress_timeout_handler(void);
 | 
				
			||||||
extern bool has_startup_progress_timeout_expired(long *secs, int *usecs);
 | 
					extern bool has_startup_progress_timeout_expired(long *secs, int *usecs);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user