Remove unneeded VM pin from VM replay
authorMelanie Plageman <melanieplageman@gmail.com>
Mon, 8 Sep 2025 14:22:42 +0000 (10:22 -0400)
committerMelanie Plageman <melanieplageman@gmail.com>
Mon, 8 Sep 2025 14:22:42 +0000 (10:22 -0400)
Previously, heap_xlog_visible() called visibilitymap_pin() even after
getting a buffer from XLogReadBufferForRedoExtended() -- which returns a
pinned buffer containing the specified block of the visibility map.

This would just have resulted in visibilitymap_pin() returning early
since the specified page was already present and pinned, but it was
confusing extraneous code, so remove it. It doesn't seem worth
backporting, though.

It appears to be an oversight in 2c03216.

While we are at it, remove two VM-related redundant asserts in the COPY
FREEZE code path. visibilitymap_set() already asserts that
PD_ALL_VISIBLE is set on the heap page and checks that the vmbuffer
contains the bits corresponding to the specified heap block, so callers
do not also need to check this.

Author: Melanie Plageman <melanieplageman@gmail.com>
Reported-by: Melanie Plageman <melanieplageman@gmail.com>
Reported-by: Kirill Reshke <reshkekirill@gmail.com>
Reviewed-by: Kirill Reshke <reshkekirill@gmail.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/CALdSSPhu7WZd%2BEfQDha1nz%3DDC93OtY1%3DUFEdWwSZsASka_2eRQ%40mail.gmail.com

src/backend/access/heap/heapam.c
src/backend/access/heap/heapam_xlog.c

index e3e7307ef5f7953c6a16077d08799e97267c1a27..4c5ae205a7a603d59d89a89795b96c0fbd76f2e3 100644 (file)
@@ -2647,9 +2647,6 @@ heap_multi_insert(Relation relation, TupleTableSlot **slots, int ntuples,
         */
        if (all_frozen_set)
        {
-           Assert(PageIsAllVisible(page));
-           Assert(visibilitymap_pin_ok(BufferGetBlockNumber(buffer), vmbuffer));
-
            /*
             * It's fine to use InvalidTransactionId here - this is only used
             * when HEAP_INSERT_FROZEN is specified, which intentionally
index 5d48f071f53a74b87b8e500fe5f929c2d6bd6431..cf843277938de424f5a09135e9ae7ebbcb9cc39d 100644 (file)
@@ -295,7 +295,6 @@ heap_xlog_visible(XLogReaderState *record)
        LockBuffer(vmbuffer, BUFFER_LOCK_UNLOCK);
 
        reln = CreateFakeRelcacheEntry(rlocator);
-       visibilitymap_pin(reln, blkno, &vmbuffer);
 
        visibilitymap_set(reln, blkno, InvalidBuffer, lsn, vmbuffer,
                          xlrec->snapshotConflictHorizon, vmbits);