Re: Log connection establishment timings

From: Daniel Gustafsson <daniel(at)yesql(dot)se>
To: Melanie Plageman <melanieplageman(at)gmail(dot)com>
Cc: Fujii Masao <masao(dot)fujii(at)oss(dot)nttdata(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, Bertrand Drouvot <bertranddrouvot(dot)pg(at)gmail(dot)com>, Guillaume Lelarge <guillaume(at)lelarge(dot)info>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>, andrey(dot)chudnovskiy(at)microsoft(dot)com, Jelte Fennema-Nio <postgres(at)jeltef(dot)nl>
Subject: Re: Log connection establishment timings
Date: 2025-03-10 21:02:48
Message-ID: 954A2DCB-A7A9-48E2-9741-50DF9A89EFF4@yesql.se
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> On 7 Mar 2025, at 23:08, Melanie Plageman <melanieplageman(at)gmail(dot)com> wrote:

Sorry for being late to the party. I like this functionality and would
definitely like to see it in v18.

> An unrelated note about the attached v13:
> I changed the language from log_connections "stages" to "options" and
> "aspects" depending on the context. I also changed the name of the
> option introduced in 0002 to "durations".

I like the use options/aspects here, it works better than stages IMO.

A few comments on the patch:

+ /* For backwards compatibility, we accept these tokens by themselves */
+ static const struct config_enum_entry compat_options[] = {
+ {"off", 0},
+ {"false", 0},
+ {"no", 0},
+ {"0", 0},
+ {"on", LOG_CONNECTION_ON},
+ {"true", LOG_CONNECTION_ON},
+ {"yes", LOG_CONNECTION_ON},
+ {"1", LOG_CONNECTION_ON},
+ };
It's not documented here that the backwards compatibility will turn the
LOG_CONNECTION_ON value into a set of the new fine-grained value. A brief
mention would be good for future code reading (or a hint to look for details in
src/include/tcop/backend_startup.h).

+ LOG_CONNECTION_ON =
+ LOG_CONNECTION_RECEIPT |
+ LOG_CONNECTION_AUTHENTICATION |
+ LOG_CONNECTION_AUTHORIZATION,
+ LOG_CONNECTION_ALL =
+ LOG_CONNECTION_ON,
Nitpick I know, but reusing the backwards compatible _ON for _ALL makes it seem
like they are the other way around (_ALL being for backwards compat). 0002
makes it less so but I would prefer to spend the extra lines of code and spell
out both.

+#define IsConnectionBackend(backend_type) \
This feels like a slightly too generic name to fully convey what it does. I
don't have a better one off the cuff but I had to refer back multiple times to
remind myself what it did.

+ backend at the time the connection is ready for use. The log
I'm not sure if "ready for use" will be clear for all readers? The other
options are using a bit more precise language.

+ {"durations", LOG_CONNECTION_DURATIONS},
I think "durations" is a good name for this, but we risk causing some confusion
in postgresql.conf when set, as it will end up like this:

log_connections = durations
#log_disconnections = off
#log_duration = off

How log_connections=durations and log_duration=off are related might not be
immediately obvious to new users. Can we avoid confusion by adding comments on
these log entries perhaps?

+ errmsg("connection ready: total=%.3f ms, fork=%.3f ms, authentication=%.3f ms",
The use of "total" here makes it seem like (fork+authentication)=total. Not
sure if we can do better and still be descriptive. Maybe it's a case of
documenting it if there are questions or complaints?

> I'm a bit torn about having the tests in authentication/001_password.

Agreed, they're not a great fit and it's not where I would look for them. That
being said, paying for spinning up a new cluster for just this also doesn't
seem great. Maybe adding a comment in the test file explaining why they are in
there could help readers.

--
Daniel Gustafsson

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Nathan Bossart 2025-03-10 21:06:37 Re: [PATCH] Add reverse(bytea)
Previous Message Devulapalli, Raghuveer 2025-03-10 20:36:04 RE: CRC32C Parallel Computation Optimization on ARM