On Fri, Mar 7, 2025 at 10:09 AM Bertrand Drouvot
<bertranddrouvot...@gmail.com> wrote:
>
> Given that conn_timing.ready_for_use is only used here:
>
> +                       if (!reported_first_ready_for_query &&
> +                               (log_connections & 
> LOG_CONNECTION_READY_FOR_USE) &&
> +                               IsConnectionBackend(MyBackendType))
> +                       {
> +                               uint64          total_duration,
> +                                                       fork_duration,
> +                                                       auth_duration;
> +
> +                               conn_timing.ready_for_use = 
> GetCurrentTimestamp();
> +
> +                               total_duration =
> +                                       
> TimestampDifferenceMicroseconds(conn_timing.socket_create,
> +                                                                             
>                           conn_timing.ready_for_use);
>
> I wonder if ready_for_use needs to be part of ConnectionTiming after all.
> I mean we could just:
>
> "
> total_duration = TimestampDifferenceMicroseconds(conn_timing.socket_create, 
> GetCurrentTimestamp())
> "
>
> That said, having ready_for_use part of ConnectionTiming could be
> useful if we decide to create a SQL API on top of this struct though. So,
> that's probably fine and better as it is.

That's what I was thinking. It felt like good symmetry to have it there.

> And if we keep it part of ConnectionTiming, then:
>
> === 02
>
> +                       if (!reported_first_ready_for_query &&
> +                               (log_connections & 
> LOG_CONNECTION_READY_FOR_USE) &&
> +                               IsConnectionBackend(MyBackendType))
>
> What about getting rid of reported_first_ready_for_query and check if
> conn_timing.ready_for_use is zero instead?

Unfortunately, I think a TimestampTz value of 0 corresponds to
1970-01-01 00:00:00 UTC, which is a valid timestamp.

- Melanie


Reply via email to