From d36138b5bf0a93557273b5e47f8cd5ea089057c7 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Wed, 20 Mar 2024 11:47:42 +0200 Subject: [PATCH v5 13/26] still use a local 'cutoffs' variable Given how often 'cutoffs' is used in the function, I think it still makes sense to have a local variable for it, just to keep the source lines shorter. --- src/backend/access/heap/heapam.c | 59 ++++++++++++++++---------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index a663cce9f86..8779fd04305 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -6020,9 +6020,9 @@ heap_inplace_update(Relation relation, HeapTuple tuple) */ static TransactionId FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, - uint16 *flags, - HeapPageFreeze *pagefrz) + uint16 *flags, HeapPageFreeze *pagefrz) { + const struct VacuumCutoffs *cutoffs = pagefrz->cutoffs; TransactionId newxmax; MultiXactMember *members; int nmembers; @@ -6046,12 +6046,12 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, pagefrz->freeze_required = true; return InvalidTransactionId; } - else if (MultiXactIdPrecedes(multi, pagefrz->cutoffs->relminmxid)) + else if (MultiXactIdPrecedes(multi, cutoffs->relminmxid)) ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), errmsg_internal("found multixact %u from before relminmxid %u", - multi, pagefrz->cutoffs->relminmxid))); - else if (MultiXactIdPrecedes(multi, pagefrz->cutoffs->OldestMxact)) + multi, cutoffs->relminmxid))); + else if (MultiXactIdPrecedes(multi, cutoffs->OldestMxact)) { TransactionId update_xact; @@ -6066,7 +6066,7 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), errmsg_internal("multixact %u from before multi freeze cutoff %u found to be still running", - multi, pagefrz->cutoffs->OldestMxact))); + multi, cutoffs->OldestMxact))); if (HEAP_XMAX_IS_LOCKED_ONLY(t_infomask)) { @@ -6077,13 +6077,13 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, /* replace multi with single XID for its updater? */ update_xact = MultiXactIdGetUpdateXid(multi, t_infomask); - if (TransactionIdPrecedes(update_xact, pagefrz->cutoffs->relfrozenxid)) + if (TransactionIdPrecedes(update_xact, cutoffs->relfrozenxid)) ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), errmsg_internal("multixact %u contains update XID %u from before relfrozenxid %u", multi, update_xact, - pagefrz->cutoffs->relfrozenxid))); - else if (TransactionIdPrecedes(update_xact, pagefrz->cutoffs->OldestXmin)) + cutoffs->relfrozenxid))); + else if (TransactionIdPrecedes(update_xact, cutoffs->OldestXmin)) { /* * Updater XID has to have aborted (otherwise the tuple would have @@ -6095,7 +6095,7 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, (errcode(ERRCODE_DATA_CORRUPTED), errmsg_internal("multixact %u contains committed update XID %u from before removable cutoff %u", multi, update_xact, - pagefrz->cutoffs->OldestXmin))); + cutoffs->OldestXmin))); *flags |= FRM_INVALIDATE_XMAX; pagefrz->freeze_required = true; return InvalidTransactionId; @@ -6147,9 +6147,9 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, { TransactionId xid = members[i].xid; - Assert(!TransactionIdPrecedes(xid, pagefrz->cutoffs->relfrozenxid)); + Assert(!TransactionIdPrecedes(xid, cutoffs->relfrozenxid)); - if (TransactionIdPrecedes(xid, pagefrz->cutoffs->FreezeLimit)) + if (TransactionIdPrecedes(xid, cutoffs->FreezeLimit)) { /* Can't violate the FreezeLimit postcondition */ need_replace = true; @@ -6161,7 +6161,7 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, /* Can't violate the MultiXactCutoff postcondition, either */ if (!need_replace) - need_replace = MultiXactIdPrecedes(multi, pagefrz->cutoffs->MultiXactCutoff); + need_replace = MultiXactIdPrecedes(multi, cutoffs->MultiXactCutoff); if (!need_replace) { @@ -6200,7 +6200,7 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, TransactionId xid = members[i].xid; MultiXactStatus mstatus = members[i].status; - Assert(!TransactionIdPrecedes(xid, pagefrz->cutoffs->relfrozenxid)); + Assert(!TransactionIdPrecedes(xid, cutoffs->relfrozenxid)); if (!ISUPDATE_from_mxstatus(mstatus)) { @@ -6211,12 +6211,12 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, if (TransactionIdIsCurrentTransactionId(xid) || TransactionIdIsInProgress(xid)) { - if (TransactionIdPrecedes(xid, pagefrz->cutoffs->OldestXmin)) + if (TransactionIdPrecedes(xid, cutoffs->OldestXmin)) ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), errmsg_internal("multixact %u contains running locker XID %u from before removable cutoff %u", multi, xid, - pagefrz->cutoffs->OldestXmin))); + cutoffs->OldestXmin))); newmembers[nnewmembers++] = members[i]; has_lockers = true; } @@ -6274,11 +6274,11 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, * We determined that updater must be kept -- add it to pending new * members list */ - if (TransactionIdPrecedes(xid, pagefrz->cutoffs->OldestXmin)) + if (TransactionIdPrecedes(xid, cutoffs->OldestXmin)) ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), errmsg_internal("multixact %u contains committed update XID %u from before removable cutoff %u", - multi, xid, pagefrz->cutoffs->OldestXmin))); + multi, xid, cutoffs->OldestXmin))); newmembers[nnewmembers++] = members[i]; } @@ -6373,6 +6373,7 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, HeapPageFreeze *pagefrz, HeapTupleFreeze *frz, bool *totally_frozen) { + const struct VacuumCutoffs *cutoffs = pagefrz->cutoffs; bool xmin_already_frozen = false, xmax_already_frozen = false; bool freeze_xmin = false, @@ -6397,14 +6398,14 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, xmin_already_frozen = true; else { - if (TransactionIdPrecedes(xid, pagefrz->cutoffs->relfrozenxid)) + if (TransactionIdPrecedes(xid, cutoffs->relfrozenxid)) ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), errmsg_internal("found xmin %u from before relfrozenxid %u", - xid, pagefrz->cutoffs->relfrozenxid))); + xid, cutoffs->relfrozenxid))); /* Will set freeze_xmin flags in freeze plan below */ - freeze_xmin = TransactionIdPrecedes(xid, pagefrz->cutoffs->OldestXmin); + freeze_xmin = TransactionIdPrecedes(xid, cutoffs->OldestXmin); /* Verify that xmin committed if and when freeze plan is executed */ if (freeze_xmin) @@ -6418,8 +6419,8 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, xid = HeapTupleHeaderGetXvac(tuple); if (TransactionIdIsNormal(xid)) { - Assert(TransactionIdPrecedesOrEquals(pagefrz->cutoffs->relfrozenxid, xid)); - Assert(TransactionIdPrecedes(xid, pagefrz->cutoffs->OldestXmin)); + Assert(TransactionIdPrecedesOrEquals(cutoffs->relfrozenxid, xid)); + Assert(TransactionIdPrecedes(xid, cutoffs->OldestXmin)); /* * For Xvac, we always freeze proactively. This allows totally_frozen @@ -6467,7 +6468,7 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, * (This repeats work from FreezeMultiXactId, but allows "no * freeze" tracker maintenance to happen in only one place.) */ - Assert(!MultiXactIdPrecedes(newxmax, pagefrz->cutoffs->MultiXactCutoff)); + Assert(!MultiXactIdPrecedes(newxmax, cutoffs->MultiXactCutoff)); Assert(MultiXactIdIsValid(newxmax) && xid == newxmax); } else if (flags & FRM_RETURN_IS_XID) @@ -6476,7 +6477,7 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, * xmax will become an updater Xid (original MultiXact's updater * member Xid will be carried forward as a simple Xid in Xmax). */ - Assert(!TransactionIdPrecedes(newxmax, pagefrz->cutoffs->OldestXmin)); + Assert(!TransactionIdPrecedes(newxmax, cutoffs->OldestXmin)); /* * NB -- some of these transformations are only valid because we @@ -6500,7 +6501,7 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, * xmax is an old MultiXactId that we have to replace with a new * MultiXactId, to carry forward two or more original member XIDs. */ - Assert(!MultiXactIdPrecedes(newxmax, pagefrz->cutoffs->OldestMxact)); + Assert(!MultiXactIdPrecedes(newxmax, cutoffs->OldestMxact)); /* * We can't use GetMultiXactIdHintBits directly on the new multi @@ -6535,14 +6536,14 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, else if (TransactionIdIsNormal(xid)) { /* Raw xmax is normal XID */ - if (TransactionIdPrecedes(xid, pagefrz->cutoffs->relfrozenxid)) + if (TransactionIdPrecedes(xid, cutoffs->relfrozenxid)) ereport(ERROR, (errcode(ERRCODE_DATA_CORRUPTED), errmsg_internal("found xmax %u from before relfrozenxid %u", - xid, pagefrz->cutoffs->relfrozenxid))); + xid, cutoffs->relfrozenxid))); /* Will set freeze_xmax flags in freeze plan below */ - freeze_xmax = TransactionIdPrecedes(xid, pagefrz->cutoffs->OldestXmin); + freeze_xmax = TransactionIdPrecedes(xid, cutoffs->OldestXmin); /* * Verify that xmax aborted if and when freeze plan is executed, -- 2.39.2