On Wed, Jul 24, 2024 at 06:00:59AM -0700, Noah Misch wrote:
> I'm still seeing need for s/int/int64/ at:

Nice catches!  I've missed these.

> - "pagesegno" variable
> - return value of MultiXactIdToOffsetSegment()

Only used in four places for two elog(DEBUG1) entries with %x.

> - return value of MXOffsetToMemberSegment()

Also used in four places for two elog(DEBUG1) entries with %x, plus
three callers in PerformMembersTruncation(), nothing fancy.

> Only the first should be a live bug, since multixact isn't electing the higher
> pageno ceiling.

Yes, and it makes a switch to long segment names everywhere easier.
There is a patch in the air to do that, without the pg_upgrade
additions required to do the transfer, though.

I am attaching a patch for all these you have spotted, switching the
logs to use %llx.  Does that look fine for you?
--
Michael
From d2bae5b020ab6a5182a52f4a8e58a39a7d3a5947 Mon Sep 17 00:00:00 2001
From: Michael Paquier <mich...@paquier.xyz>
Date: Thu, 25 Jul 2024 10:47:51 +0900
Subject: [PATCH] Fix a couple of extra spots missing the int->int64 switch for
 SLRU pages

---
 src/backend/access/transam/multixact.c | 39 +++++++++++++-------------
 src/backend/access/transam/slru.c      |  2 +-
 2 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/src/backend/access/transam/multixact.c 
b/src/backend/access/transam/multixact.c
index 675affe4f7..b7b47ef076 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -120,7 +120,7 @@ MultiXactIdToOffsetEntry(MultiXactId multi)
        return multi % MULTIXACT_OFFSETS_PER_PAGE;
 }
 
-static inline int
+static inline int64
 MultiXactIdToOffsetSegment(MultiXactId multi)
 {
        return MultiXactIdToOffsetPage(multi) / SLRU_PAGES_PER_SEGMENT;
@@ -174,7 +174,7 @@ MXOffsetToMemberPage(MultiXactOffset offset)
        return offset / MULTIXACT_MEMBERS_PER_PAGE;
 }
 
-static inline int
+static inline int64
 MXOffsetToMemberSegment(MultiXactOffset offset)
 {
        return MXOffsetToMemberPage(offset) / SLRU_PAGES_PER_SEGMENT;
@@ -3039,10 +3039,10 @@ SlruScanDirCbFindEarliest(SlruCtl ctl, char *filename, 
int64 segpage, void *data
 static void
 PerformMembersTruncation(MultiXactOffset oldestOffset, MultiXactOffset 
newOldestOffset)
 {
-       const int       maxsegment = 
MXOffsetToMemberSegment(MaxMultiXactOffset);
-       int                     startsegment = 
MXOffsetToMemberSegment(oldestOffset);
-       int                     endsegment = 
MXOffsetToMemberSegment(newOldestOffset);
-       int                     segment = startsegment;
+       const int64 maxsegment = MXOffsetToMemberSegment(MaxMultiXactOffset);
+       int64           startsegment = MXOffsetToMemberSegment(oldestOffset);
+       int64           endsegment = MXOffsetToMemberSegment(newOldestOffset);
+       int64           segment = startsegment;
 
        /*
         * Delete all the segments but the last one. The last segment can still
@@ -3050,7 +3050,8 @@ PerformMembersTruncation(MultiXactOffset oldestOffset, 
MultiXactOffset newOldest
         */
        while (segment != endsegment)
        {
-               elog(DEBUG2, "truncating multixact members segment %x", 
segment);
+               elog(DEBUG2, "truncating multixact members segment %llx",
+                        (unsigned long long) segment);
                SlruDeleteSegment(MultiXactMemberCtl, segment);
 
                /* move to next segment, handling wraparound correctly */
@@ -3201,14 +3202,14 @@ TruncateMultiXact(MultiXactId newOldestMulti, Oid 
newOldestMultiDB)
        }
 
        elog(DEBUG1, "performing multixact truncation: "
-                "offsets [%u, %u), offsets segments [%x, %x), "
-                "members [%u, %u), members segments [%x, %x)",
+                "offsets [%u, %u), offsets segments [%llx, %llx), "
+                "members [%u, %u), members segments [%llx, %llx)",
                 oldestMulti, newOldestMulti,
-                MultiXactIdToOffsetSegment(oldestMulti),
-                MultiXactIdToOffsetSegment(newOldestMulti),
+                (unsigned long long) MultiXactIdToOffsetSegment(oldestMulti),
+                (unsigned long long) 
MultiXactIdToOffsetSegment(newOldestMulti),
                 oldestOffset, newOldestOffset,
-                MXOffsetToMemberSegment(oldestOffset),
-                MXOffsetToMemberSegment(newOldestOffset));
+                (unsigned long long) MXOffsetToMemberSegment(oldestOffset),
+                (unsigned long long) MXOffsetToMemberSegment(newOldestOffset));
 
        /*
         * Do truncation, and the WAL logging of the truncation, in a critical
@@ -3461,14 +3462,14 @@ multixact_redo(XLogReaderState *record)
                           SizeOfMultiXactTruncate);
 
                elog(DEBUG1, "replaying multixact truncation: "
-                        "offsets [%u, %u), offsets segments [%x, %x), "
-                        "members [%u, %u), members segments [%x, %x)",
+                        "offsets [%u, %u), offsets segments [%llx, %llx), "
+                        "members [%u, %u), members segments [%llx, %llx)",
                         xlrec.startTruncOff, xlrec.endTruncOff,
-                        MultiXactIdToOffsetSegment(xlrec.startTruncOff),
-                        MultiXactIdToOffsetSegment(xlrec.endTruncOff),
+                        (unsigned long long) 
MultiXactIdToOffsetSegment(xlrec.startTruncOff),
+                        (unsigned long long) 
MultiXactIdToOffsetSegment(xlrec.endTruncOff),
                         xlrec.startTruncMemb, xlrec.endTruncMemb,
-                        MXOffsetToMemberSegment(xlrec.startTruncMemb),
-                        MXOffsetToMemberSegment(xlrec.endTruncMemb));
+                        (unsigned long long) 
MXOffsetToMemberSegment(xlrec.startTruncMemb),
+                        (unsigned long long) 
MXOffsetToMemberSegment(xlrec.endTruncMemb));
 
                /* should not be required, but more than cheap enough */
                LWLockAcquire(MultiXactTruncationLock, LW_EXCLUSIVE);
diff --git a/src/backend/access/transam/slru.c 
b/src/backend/access/transam/slru.c
index 248aa1a655..713d3bff3f 100644
--- a/src/backend/access/transam/slru.c
+++ b/src/backend/access/transam/slru.c
@@ -1532,7 +1532,7 @@ restart:
        did_write = false;
        for (int slotno = 0; slotno < shared->num_slots; slotno++)
        {
-               int                     pagesegno;
+               int64           pagesegno;
                int                     curbank = SlotGetBankNumber(slotno);
 
                /*
-- 
2.45.2

Attachment: signature.asc
Description: PGP signature

Reply via email to