diff options
author | Robert Haas <rhaas@postgresql.org> | 2023-02-06 10:51:08 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2023-02-06 10:51:08 -0500 |
commit | 8a2f783cc489e4e1820163c1c439125aad4d7a92 (patch) | |
tree | c054ee8bd08ffc3f0c8ede4b3548e774e1985242 /src/backend/postmaster | |
parent | 0ae4e49fa66342b7c6294a6534db51284f5385b7 (diff) | |
download | postgresql-8a2f783cc489e4e1820163c1c439125aad4d7a92.tar.gz |
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
Diffstat (limited to 'src/backend/postmaster')
-rw-r--r-- | src/backend/postmaster/startup.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/backend/postmaster/startup.c b/src/backend/postmaster/startup.c index bcd23542f1..efc2580536 100644 --- a/src/backend/postmaster/startup.c +++ b/src/backend/postmaster/startup.c @@ -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); @@ -336,6 +345,21 @@ begin_startup_progress_phase(void) } /* + * 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, * otherwise return false. |