1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-21 00:42:43 +03:00

Disable STARTUP_PROGRESS_TIMEOUT in standby mode.

In standby mode, we don't actually report progress of recovery,
but up until now, startup_progress_timeout_handler() nevertheless
got called every log_startup_progress_interval seconds. That's
an unnecessary expense, so avoid it.

Report by Thomas Munro. Patch by Bharath Rupireddy, reviewed by
Simon Riggs, Thomas Munro, and me. Back-patch to v15, where
the problem was introduced.

Discussion: https://www.postgresql.org/message-id/CA%2BhUKGKCHSffAj8zZJKJvNX7ygnQFxVD6wm1d-2j3fVw%2BMafPQ%40mail.gmail.com
This commit is contained in:
Robert Haas
2023-02-06 10:51:08 -05:00
parent 0ae4e49fa6
commit 8a2f783cc4
3 changed files with 51 additions and 6 deletions

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,