From 89d80319b8e94512ef1670a15ced8d96f8d9dcb9 Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Sun, 25 Dec 2022 19:06:22 -0800 Subject: [PATCH v1 1/2] Avoid special XIDs in snapshotConflictHorizon values. --- src/backend/access/heap/vacuumlazy.c | 8 +++++--- src/backend/storage/ipc/standby.c | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 9923994b5..5d8fd2fb7 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -1698,7 +1698,8 @@ retry: } /* Track newest xmin on page. */ - if (TransactionIdFollows(xmin, prunestate->visibility_cutoff_xid)) + if (TransactionIdFollows(xmin, prunestate->visibility_cutoff_xid) && + TransactionIdIsNormal(xmin)) prunestate->visibility_cutoff_xid = xmin; } break; @@ -1863,7 +1864,7 @@ retry: * because visibility_cutoff_xid will be logged by our caller in a * moment. */ - Assert(cutoff == FrozenTransactionId || + Assert(!TransactionIdIsValid(cutoff) || cutoff == prunestate->visibility_cutoff_xid); } #endif @@ -3293,7 +3294,8 @@ heap_page_is_all_visible(LVRelState *vacrel, Buffer buf, } /* Track newest xmin on page. */ - if (TransactionIdFollows(xmin, *visibility_cutoff_xid)) + if (TransactionIdFollows(xmin, *visibility_cutoff_xid) && + TransactionIdIsNormal(xmin)) *visibility_cutoff_xid = xmin; /* Check whether this tuple is already frozen or not */ diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index f43229dfd..ede00fee9 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -493,6 +493,7 @@ ResolveRecoveryConflictWithSnapshot(TransactionId snapshotConflictHorizon, if (!TransactionIdIsValid(snapshotConflictHorizon)) return; + Assert(TransactionIdIsNormal(snapshotConflictHorizon)); backends = GetConflictingVirtualXIDs(snapshotConflictHorizon, locator.dbOid); ResolveRecoveryConflictWithVirtualXIDs(backends, -- 2.38.1