Re: Add isCatalogRel in rmgrdesc - Mailing list pgsql-hackers

From Masahiko Sawada
Subject Re: Add isCatalogRel in rmgrdesc
Date
Msg-id CAD21AoCyuCACJ_gM7SGhw7FbDf2+7cTb7imyduhfNSTzfN+w5g@mail.gmail.com
Whole thread Raw
In response to Re: Add isCatalogRel in rmgrdesc  (Michael Paquier <michael@paquier.xyz>)
Responses Re: Add isCatalogRel in rmgrdesc
List pgsql-hackers
On Tue, Dec 12, 2023 at 6:15 PM Michael Paquier <michael@paquier.xyz> wrote:
>
> On Tue, Dec 12, 2023 at 09:23:46AM +0100, Drouvot, Bertrand wrote:
> > Please find attached a patch to add this field in the related rmgrdesc (i.e
> > all the ones that already provide the snapshotConflictHorizon except the one
> > related to xl_heap_visible: indeed a new bit was added in its flag field in 6af1793954
> > instead of adding the isCatalogRel bool).
> >
> > I think it's worth it, as this new field could help diagnose conflicts issues (if any).

+1

-   appendStringInfo(buf, "rel %u/%u/%u; blk %u; snapshotConflictHorizon %u:%u",
+   appendStringInfo(buf, "rel %u/%u/%u; blk %u;
snapshotConflictHorizon %u:%u, isCatalogRel %u",
                     xlrec->locator.spcOid, xlrec->locator.dbOid,
                     xlrec->locator.relNumber, xlrec->block,
                     EpochFromFullTransactionId(xlrec->snapshotConflictHorizon),
-                    XidFromFullTransactionId(xlrec->snapshotConflictHorizon));
+                    XidFromFullTransactionId(xlrec->snapshotConflictHorizon),
+                    xlrec->isCatalogRel);

The patch prints isCatalogRel, a bool field, as %u. But other rmgrdesc
implementations seem to use different ways. For instance in spgdesc.c,
we print flag name if it's set: (newPage and postfixBlkSame are bool
fields):

                appendStringInfo(buf, "prefixoff: %u, postfixoff: %u",
                                 xlrec->offnumPrefix,
                                 xlrec->offnumPostfix);
                if (xlrec->newPage)
                    appendStringInfoString(buf, " (newpage)");
                if (xlrec->postfixBlkSame)
                    appendStringInfoString(buf, " (same)");

whereas in hashdesc.c, we print either 'T' of 'F':

                appendStringInfo(buf, "clear_dead_marking %c, is_primary %c",
                                 xlrec->clear_dead_marking ? 'T' : 'F',
                                 xlrec->is_primary_bucket_page ? 'T' : 'F');

Is it probably worth considering such formats? I prefer to always
print the field name like the current patch and hashdesc.c since it's
easier to parse it. But I'm fine with either way to show the field
value.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com



pgsql-hackers by date:

Previous
From: John Naylor
Date:
Subject: Re: [PoC] Improve dead tuple storage for lazy vacuum
Next
From: "Andrey M. Borodin"
Date:
Subject: Re: Transaction timeout