Re: HOT chain validation in verify_heapam() - Mailing list pgsql-hackers

From Andres Freund
Subject Re: HOT chain validation in verify_heapam()
Date
Msg-id 20230323173631.eqfmayuqthwgmvgr@awork3.anarazel.de
Whole thread Raw
In response to Re: HOT chain validation in verify_heapam()  (Himanshu Upadhyaya <upadhyaya.himanshu@gmail.com>)
List pgsql-hackers
Hi,

On 2023-03-23 11:20:04 +0530, Himanshu Upadhyaya wrote:
> On Thu, Mar 23, 2023 at 2:15 AM Andres Freund <andres@anarazel.de> wrote:
> 
> >
> > Currently the new verify_heapam() follows ctid chains when XMAX_INVALID is
> > set
> > and expects to find an item it can dereference - but I don't think that's
> > something we can rely on: Afaics HOT pruning can break chains, but doesn't
> > reset xmax.
> >
> > We have below code which I think takes care of xmin and xmax matching and
> if they match then only we add them to the predecessor array.
>                         /*
>                          * If the next line pointer is a redirect, or if
> it's a tuple
>                          * but the XMAX of this tuple doesn't match the
> XMIN of the next
>                          * tuple, then the two aren't part of the same
> update chain and
>                          * there is nothing more to do.
>                          */
>                         if (ItemIdIsRedirected(next_lp))
>                                 continue;
>                         curr_htup = (HeapTupleHeader) PageGetItem(ctx.page,
> curr_lp);
>                         curr_xmax = HeapTupleHeaderGetUpdateXid(curr_htup);
>                         next_htup = (HeapTupleHeader) PageGetItem(ctx.page,
> next_lp);
>                         next_xmin = HeapTupleHeaderGetXmin(next_htup);
>                         if (!TransactionIdIsValid(curr_xmax) ||
>                                 !TransactionIdEquals(curr_xmax, next_xmin))
>                                 continue;

The problem is that that doesn't help if the tuple points to past maxoff,
because we can't even fetch the tuple and thus won't even reach these
checks. But Robert now put in defenses against that.

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: HOT chain validation in verify_heapam()
Next
From: Jeff Davis
Date:
Subject: Re: Non-superuser subscription owners