pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: Nitin Jadhav <nitinjadhavpostgres@gmail.com>
Cc: Robert Haas <robertmhaas@gmail.com>
Cc: Justin Pryzby <pryzby@telsasoft.com>
Cc: Michael Paquier <michael@paquier.xyz>
Cc: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Andres Freund <andres@anarazel.de>
Cc: Stephen Frost <sfrost@snowman.net>
Cc: Magnus Hagander <magnus@hagander.net>
Cc: Thomas Munro <thomas.munro@gmail.com>
Cc: pgsql-hackers@postgresql.org <pgsql-hackers@postgresql.org>
Subject: Re: when the startup process doesn't (logging startup delays)
Date: Wed, 29 Sep 2021 14:36:14 -0300
Message-ID: <202109291736.w3lzq4prep3p@alvherre.pgsql> (raw)
In-Reply-To: <CAMm1aWae1qaxQC+83VZd0NVpzO==n3cxMoqedZvU=TWpmo-uSg@mail.gmail.com>

So, I've wondered about this part all along:

> +/*
> + * Calculates the timestamp at which the next timer should expire and enables
> + * the timer accordingly.
> + */
> +static void
> +reset_startup_progress_timeout(TimestampTz now)
> +{
> +	TimestampTz next_timeout;
> +
> +	next_timeout = TimestampTzPlusMilliseconds(scheduled_startup_progress_timeout,
> +											   log_startup_progress_interval);
> +	if (next_timeout < now)
> +	{
> +		/*
> +		 * Either the timeout was processed so late that we missed an
> +		 * entire cycle or system clock was set backwards.
> +		 */
> +		next_timeout = TimestampTzPlusMilliseconds(now, log_startup_progress_interval);
> +	}
> +
> +	enable_timeout_at(STARTUP_PROGRESS_TIMEOUT, next_timeout);

Why is it that we set the next timeout to fire not at "now + interval"
but at "when-it-should-have-fired-but-didn't + interval"?  As a user, if
I request a message to be logged every N milliseconds, and one
of them is a little bit delayed, then (assuming I set it to 10s) I still
expect the next one to occur at now+10s.  I don't expect the next at
"now+5s" if one is delayed 5s.

In other words, I think this function should just be
  enable_timeout_after(STARTUP_PROGRESS_TIMEOUT, log_startup_progress_interval);

This means you can remove the scheduled_startup_progress_timeout
variable.

-- 
Álvaro Herrera           39°49'30"S 73°17'W  —  https://www.EnterpriseDB.com/
"No hay ausente sin culpa ni presente sin disculpa" (Prov. francés)





view thread (105+ messages)  latest in thread

Message-ID: <202109291736.w3lzq4prep3p@alvherre.pgsql>
Permalink:  ../202109291736.w3lzq4prep3p@alvherre.pgsql/
Also on:    postgresql.org/message-id/202109291736.w3lzq4prep3p@alvherre.pgsql

 · 

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: pgsql-hackers@postgresql.org
  Cc: alvherre@alvh.no-ip.org, nitinjadhavpostgres@gmail.com, robertmhaas@gmail.com, pryzby@telsasoft.com, michael@paquier.xyz, bharath.rupireddyforpostgres@gmail.com, tgl@sss.pgh.pa.us, andres@anarazel.de, sfrost@snowman.net, magnus@hagander.net, thomas.munro@gmail.com
  Subject: Re: when the startup process doesn't (logging startup delays)
  In-Reply-To: <202109291736.w3lzq4prep3p@alvherre.pgsql>

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

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