pgsql: amcheck: Fix FullTransactionIdFromXidAndCtx() for xids before ep

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: amcheck: Fix FullTransactionIdFromXidAndCtx() for xids before ep
Date: 2023-03-11 22:55:08
Message-ID: E1pb87H-0034zn-P2@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

amcheck: Fix FullTransactionIdFromXidAndCtx() for xids before epoch 0

64bit xids can't represent xids before epoch 0 (see also be504a3e974). When
FullTransactionIdFromXidAndCtx() was passed such an xid, it'd create a 64bit
xid far into the future. Noticed while adding assertions in the course of
investigating be504a3e974, as amcheck's test create such xids.

To fix the issue, just return FirstNormalFullTransactionId in this case. A
freshly initdb'd cluster already has a newer horizon. The most minimal version
of this would make the messages for some detected corruptions differently
inaccurate. To make those cases accurate, switch
FullTransactionIdFromXidAndCtx() to use the 32bit modulo difference between
xid and nextxid to compute the 64bit xid, yielding sensible "in the future" /
"in the past" answers.

Reviewed-by: Mark Dilger <mark(dot)dilger(at)enterprisedb(dot)com>
Discussion: https://postgr.es/m/20230108002923.cyoser3ttmt63bfn@awork3.anarazel.de
Backpatch: 14-, where heapam verification was introduced

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/4f5d461e048b9c56fe2fa8c7faf7010eed05ba82

Modified Files
--------------
contrib/amcheck/verify_heapam.c | 33 ++++++++++++++++++++++++++-----
src/bin/pg_amcheck/t/004_verify_heapam.pl | 28 ++++++++++++++++++--------
2 files changed, 48 insertions(+), 13 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Andres Freund 2023-03-11 23:44:39 pgsql: pg_amcheck: Minor test speedups
Previous Message Andrew Dunstan 2023-03-11 22:42:59 Re: pgsql: Add standard collation UNICODE