Re: pg_walfile_name_offset can return inconsistent values - Mailing list pgsql-hackers

From Andres Freund
Subject Re: pg_walfile_name_offset can return inconsistent values
Date
Msg-id 20231111035943.nv4sejydoga44jd2@alap3.anarazel.de
Whole thread Raw
In response to Re: pg_walfile_name_offset can return inconsistent values  (Bruce Momjian <bruce@momjian.us>)
Responses Re: pg_walfile_name_offset can return inconsistent values
Re: pg_walfile_name_offset can return inconsistent values
List pgsql-hackers
Hi,

On 2023-11-09 16:14:07 -0500, Bruce Momjian wrote:
> On Thu, Nov  9, 2023 at 09:49:48PM +0100, Matthias van de Meent wrote:
> > Either way, I think fix #1 is most correct (as was attached in
> > offset2.diff, and quoted verbatim here), because that has no chance of
> > having surprising underflowing behaviour when you use '0/0'::lsn as
> > input.
> 
> Attached is the full patch that changes pg_walfile_name_offset() and
> pg_walfile_name().  There is no need for doc changes.

I think this needs to add tests "documenting" the changed behaviour and
perhaps also for a few other edge cases.  You could e.g. test
  SELECT * FROM pg_walfile_name_offset('0/0')
which today returns bogus values, and which is independent of the wal segment
size.

And with
SELECT setting::int8 AS segment_size FROM pg_settings WHERE name = 'wal_segment_size' \gset
you can test real things too, e.g.:
SELECT segment_number, file_offset FROM pg_walfile_name_offset('0/0'::pg_lsn + :segment_size),
pg_split_walfile_name(file_name);
SELECT segment_number, file_offset FROM pg_walfile_name_offset('0/0'::pg_lsn + :segment_size + 1),
pg_split_walfile_name(file_name);
SELECT segment_number, file_offset = :segment_size - 1 FROM pg_walfile_name_offset('0/0'::pg_lsn + :segment_size - 1),
pg_split_walfile_name(file_name);

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: Amit Langote
Date:
Subject: Re: remaining sql/json patches
Next
From: Julien Rouhaud
Date:
Subject: Fix documentation for pg_stat_statements JIT deform_counter