From 1e4108e0c5b007fe55f12c29f4a47247ba023ef9 Mon Sep 17 00:00:00 2001 From: Melanie Plageman Date: Fri, 18 Jul 2025 16:30:04 -0400 Subject: [PATCH v16 10/14] Rename GlobalVisTestIsRemovableXid() to GlobalVisXidVisibleToAll() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The function is currently only used to check whether a tuple’s xmax is visible to all transactions (and thus removable). Upcoming changes will also use it to test whether a tuple’s xmin is visible to all to decide if a page can be marked all-visible in the visibility map. The new name, GlobalVisXidVisibleToAll(), better reflects this broader purpose. Reviewed-by: Kirill Reshke --- src/backend/access/heap/heapam_visibility.c | 6 +++--- src/backend/access/heap/pruneheap.c | 16 ++++++++-------- src/backend/access/spgist/spgvacuum.c | 2 +- src/backend/storage/ipc/procarray.c | 17 ++++++++--------- src/include/utils/snapmgr.h | 4 ++-- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/backend/access/heap/heapam_visibility.c b/src/backend/access/heap/heapam_visibility.c index 05f6946fe60..4ebc8abdbeb 100644 --- a/src/backend/access/heap/heapam_visibility.c +++ b/src/backend/access/heap/heapam_visibility.c @@ -1447,7 +1447,7 @@ HeapTupleSatisfiesNonVacuumable(HeapTuple htup, Snapshot snapshot, { Assert(TransactionIdIsValid(dead_after)); - if (GlobalVisTestIsRemovableXid(snapshot->vistest, dead_after)) + if (GlobalVisXidVisibleToAll(snapshot->vistest, dead_after)) res = HEAPTUPLE_DEAD; } else @@ -1512,8 +1512,8 @@ HeapTupleIsSurelyDead(HeapTuple htup, GlobalVisState *vistest) return false; /* Deleter committed, so tuple is dead if the XID is old enough. */ - return GlobalVisTestIsRemovableXid(vistest, - HeapTupleHeaderGetRawXmax(tuple)); + return GlobalVisXidVisibleToAll(vistest, + HeapTupleHeaderGetRawXmax(tuple)); } /* diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 142781d0008..78e04f1d17c 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -233,7 +233,7 @@ heap_page_prune_opt(Relation relation, Buffer buffer) */ vistest = GlobalVisTestFor(relation); - if (!GlobalVisTestIsRemovableXid(vistest, prune_xid)) + if (!GlobalVisXidVisibleToAll(vistest, prune_xid)) return; /* @@ -729,9 +729,9 @@ heap_page_prune_and_freeze(PruneFreezeParams *params, * Determining HTSV only once for each tuple is required for correctness, * to deal with cases where running HTSV twice could result in different * results. For example, RECENTLY_DEAD can turn to DEAD if another - * checked item causes GlobalVisTestIsRemovableFullXid() to update the - * horizon, or INSERT_IN_PROGRESS can change to DEAD if the inserting - * transaction aborts. + * checked item causes GlobalVisXidVisibleToAll() to update the horizon, + * or INSERT_IN_PROGRESS can change to DEAD if the inserting transaction + * aborts. * * It's also good for performance. Most commonly tuples within a page are * stored at decreasing offsets (while the items are stored at increasing @@ -1154,11 +1154,11 @@ heap_prune_satisfies_vacuum(PruneState *prstate, HeapTuple tup, Buffer buffer) * Determine whether or not the tuple is considered dead when compared * with the provided GlobalVisState. On-access pruning does not provide * VacuumCutoffs. And for vacuum, even if the tuple's xmax is not older - * than OldestXmin, GlobalVisTestIsRemovableXid() could find the row dead - * if the GlobalVisState has been updated since the beginning of vacuuming + * than OldestXmin, GlobalVisXidVisibleToAll() could find the row dead if + * the GlobalVisState has been updated since the beginning of vacuuming * the relation. */ - if (GlobalVisTestIsRemovableXid(prstate->vistest, dead_after)) + if (GlobalVisXidVisibleToAll(prstate->vistest, dead_after)) return HEAPTUPLE_DEAD; return res; @@ -1616,7 +1616,7 @@ heap_prune_record_unchanged_lp_normal(Page page, PruneState *prstate, OffsetNumb /* * For now always use prstate->cutoffs for this test, because * we only update 'all_visible' when freezing is requested. We - * could use GlobalVisTestIsRemovableXid instead, if a + * could use GlobalVisXidVisibleToAll() instead, if a * non-freezing caller wanted to set the VM bit. */ Assert(prstate->cutoffs); diff --git a/src/backend/access/spgist/spgvacuum.c b/src/backend/access/spgist/spgvacuum.c index 8f8a1ad7796..496cca69410 100644 --- a/src/backend/access/spgist/spgvacuum.c +++ b/src/backend/access/spgist/spgvacuum.c @@ -536,7 +536,7 @@ vacuumRedirectAndPlaceholder(Relation index, Relation heaprel, Buffer buffer) */ if (dt->tupstate == SPGIST_REDIRECT && (!TransactionIdIsValid(dt->xid) || - GlobalVisTestIsRemovableXid(vistest, dt->xid))) + GlobalVisXidVisibleToAll(vistest, dt->xid))) { dt->tupstate = SPGIST_PLACEHOLDER; Assert(opaque->nRedirection > 0); diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 200f72c6e25..235c3b584f6 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -4181,8 +4181,7 @@ GlobalVisUpdate(void) * See comment for GlobalVisState for details. */ bool -GlobalVisTestIsRemovableFullXid(GlobalVisState *state, - FullTransactionId fxid) +GlobalVisFullXidVisibleToAll(GlobalVisState *state, FullTransactionId fxid) { /* * If fxid is older than maybe_needed bound, it definitely is visible to @@ -4216,14 +4215,14 @@ GlobalVisTestIsRemovableFullXid(GlobalVisState *state, } /* - * Wrapper around GlobalVisTestIsRemovableFullXid() for 32bit xids. + * Wrapper around GlobalVisFullXidVisibleToAll() for 32bit xids. * * It is crucial that this only gets called for xids from a source that * protects against xid wraparounds (e.g. from a table and thus protected by * relfrozenxid). */ bool -GlobalVisTestIsRemovableXid(GlobalVisState *state, TransactionId xid) +GlobalVisXidVisibleToAll(GlobalVisState *state, TransactionId xid) { FullTransactionId fxid; @@ -4237,12 +4236,12 @@ GlobalVisTestIsRemovableXid(GlobalVisState *state, TransactionId xid) */ fxid = FullXidRelativeTo(state->definitely_needed, xid); - return GlobalVisTestIsRemovableFullXid(state, fxid); + return GlobalVisFullXidVisibleToAll(state, fxid); } /* * Convenience wrapper around GlobalVisTestFor() and - * GlobalVisTestIsRemovableFullXid(), see their comments. + * GlobalVisFullXidVisibleToAll(), see their comments. */ bool GlobalVisCheckRemovableFullXid(Relation rel, FullTransactionId fxid) @@ -4251,12 +4250,12 @@ GlobalVisCheckRemovableFullXid(Relation rel, FullTransactionId fxid) state = GlobalVisTestFor(rel); - return GlobalVisTestIsRemovableFullXid(state, fxid); + return GlobalVisFullXidVisibleToAll(state, fxid); } /* * Convenience wrapper around GlobalVisTestFor() and - * GlobalVisTestIsRemovableXid(), see their comments. + * GlobalVisTestIsVisibleXid(), see their comments. */ bool GlobalVisCheckRemovableXid(Relation rel, TransactionId xid) @@ -4265,7 +4264,7 @@ GlobalVisCheckRemovableXid(Relation rel, TransactionId xid) state = GlobalVisTestFor(rel); - return GlobalVisTestIsRemovableXid(state, xid); + return GlobalVisXidVisibleToAll(state, xid); } /* diff --git a/src/include/utils/snapmgr.h b/src/include/utils/snapmgr.h index 604c1f90216..a0ea2cfcea2 100644 --- a/src/include/utils/snapmgr.h +++ b/src/include/utils/snapmgr.h @@ -100,8 +100,8 @@ extern char *ExportSnapshot(Snapshot snapshot); */ typedef struct GlobalVisState GlobalVisState; extern GlobalVisState *GlobalVisTestFor(Relation rel); -extern bool GlobalVisTestIsRemovableXid(GlobalVisState *state, TransactionId xid); -extern bool GlobalVisTestIsRemovableFullXid(GlobalVisState *state, FullTransactionId fxid); +extern bool GlobalVisXidVisibleToAll(GlobalVisState *state, TransactionId xid); +extern bool GlobalVisFullXidVisibleToAll(GlobalVisState *state, FullTransactionId fxid); extern bool GlobalVisCheckRemovableXid(Relation rel, TransactionId xid); extern bool GlobalVisCheckRemovableFullXid(Relation rel, FullTransactionId fxid); -- 2.43.0