public inbox for [email protected]  
help / color / mirror / Atom feed
From: Cliff Clark <[email protected]>
To: Michael Paquier <[email protected]>
Cc: [email protected] <[email protected]>
Subject: Re: [PATCH] Auto vacuum should still run when clock is set back
Date: Wed, 25 Mar 2026 16:21:52 +0000
Message-ID: <SA1PR22MB5466016ED1A11AB363E708D0E549A@SA1PR22MB5466.namprd22.prod.outlook.com> (raw)
In-Reply-To: <[email protected]>
References: <SA1PR22MB5466E3DF88E240271E936E62E548A@SA1PR22MB5466.namprd22.prod.outlook.com>
	<[email protected]>

The clock changes are not due to DST, but the UTC system time. There was an NTP server on an offline network that went from 2019 to 2006 due to GPS week number rollover. The date being wrong did cause some problems, but nothing fatal, but several machines filled up their disk to the point of failure because autovacuum was no longer running.

I will attempt to attach the patch again.

________________________________________
From: Michael Paquier <[email protected]>
Sent: Tuesday, March 24, 2026 18:55
To: Cliff Clark <[email protected]>
Cc: [email protected] <[email protected]>
Subject: Re: [PATCH] Auto vacuum should still run when clock is set back
 
[You don't often get email from [email protected]. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]

[Caution - External]

Attachments:

  [text/x-patch] 0001-Autovacuum-should-still-run-when-clock-is-set-back.patch (1.8K, 2-0001-Autovacuum-should-still-run-when-clock-is-set-back.patch)
  download | inline diff:
From a7f04a8b5202eb794ed6846bb8fddccdeecd643c Mon Sep 17 00:00:00 2001
From: Cliff Clark <[email protected]>
Date: Tue, 24 Mar 2026 11:32:43 -0700
Subject: [PATCH] Autovacuum should still run when clock is set back

Add code to detect when the clock was set back since the last autovacuum
launcher run. When this happens, rebuild the database list so that
autovacuum will continue to run.
---
 src/backend/postmaster/autovacuum.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index 219673db930..9f2c6434802 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -377,6 +377,7 @@ void
 AutoVacLauncherMain(const void *startup_data, size_t startup_data_len)
 {
 	sigjmp_buf	local_sigjmp_buf;
+	TimestampTz	last_current_time;
 
 	Assert(startup_data_len == 0);
 
@@ -568,6 +569,12 @@ AutoVacLauncherMain(const void *startup_data, size_t startup_data_len)
 
 	AutoVacuumShmem->av_launcherpid = MyProcPid;
 
+	/*
+	 * Set the initial last run time to just before we build the worker
+	 * schedule.
+	 */
+	last_current_time = GetCurrentTimestamp();
+
 	/*
 	 * Create the initial database list.  The invariant we want this list to
 	 * keep is that it's ordered by decreasing next_worker.  As soon as an
@@ -649,6 +656,16 @@ AutoVacLauncherMain(const void *startup_data, size_t startup_data_len)
 		 */
 
 		current_time = GetCurrentTimestamp();
+		if (current_time < last_current_time)
+		{
+			/*
+			 * The clock jumped backwards so reschedule the workers so that
+			 * databases won't stop getting auto-vacuumed.
+			 */
+			rebuild_database_list(InvalidOid);
+		}
+		last_current_time = current_time;
+
 		LWLockAcquire(AutovacuumLock, LW_SHARED);
 
 		can_launch = av_worker_available();
-- 
2.43.0



view thread (4+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: [PATCH] Auto vacuum should still run when clock is set back
  In-Reply-To: <SA1PR22MB5466016ED1A11AB363E708D0E549A@SA1PR22MB5466.namprd22.prod.outlook.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox