From 4ad7ea0cc317d1772699b3ef71be104134a6c5bd Mon Sep 17 00:00:00 2001 From: q00421813 Date: Sun, 28 Jul 2024 11:27:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=8B=E5=8A=A1=E5=B9=B6?= =?UTF-8?q?=E5=8F=91bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/storage/access/ubtree/ubtutils.cpp | 5 ----- src/gausskernel/storage/access/ustore/knl_uheap.cpp | 4 ++-- src/gausskernel/storage/access/ustore/knl_uvisibility.cpp | 3 +++ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/gausskernel/storage/access/ubtree/ubtutils.cpp b/src/gausskernel/storage/access/ubtree/ubtutils.cpp index 64030501b..83687a96d 100644 --- a/src/gausskernel/storage/access/ubtree/ubtutils.cpp +++ b/src/gausskernel/storage/access/ubtree/ubtutils.cpp @@ -427,11 +427,6 @@ static bool UBTreeVisibilityCheckWrap(IndexScanDesc scan, Page page, OffsetNumbe */ TransactionIdStatus UBTreeCheckXid(TransactionId xid) { - if (xid == FrozenTransactionId || (TransactionIdIsNormal(xid) && - TransactionIdPrecedes(xid, pg_atomic_read_u64(&g_instance.undo_cxt.globalRecycleXid)) && - !RecoveryInProgress())) { - return XID_COMMITTED; - } TransactionIdStatus ts = TransactionIdGetStatus(xid); /* Please refer to HeapTupleSatisfiesVaccum */ if (ts == XID_INPROGRESS) { diff --git a/src/gausskernel/storage/access/ustore/knl_uheap.cpp b/src/gausskernel/storage/access/ustore/knl_uheap.cpp index 6a58e3060..47f9d494d 100644 --- a/src/gausskernel/storage/access/ustore/knl_uheap.cpp +++ b/src/gausskernel/storage/access/ustore/knl_uheap.cpp @@ -531,6 +531,7 @@ void UHeapPagePruneFSM(Relation relation, Buffer buffer, TransactionId fxid, Pag static ShortTransactionId UHeapTupleSetModifiedXid(Relation relation, Buffer buffer, UHeapTuple utuple, TransactionId xid) { + Assert(!UHEAP_XID_IS_LOCK(utuple->disk_tuple->flag)); TransactionId xidbase = InvalidTransactionId; ShortTransactionId tupleXid = 0; UHeapTupleCopyBaseFromPage(utuple, BufferGetPage(buffer)); @@ -3106,10 +3107,8 @@ check_tup_satisfies_update: /* oldtup should be pointing to right place in page */ Assert(oldtup.disk_tuple == (UHeapDiskTuple)UPageGetRowData(page, lp)); - int16 tmpLockInfo = oldtup.disk_tuple->flag & SINGLE_LOCKER_INFOMASK; UHeapTupleHeaderSetTDSlot(oldtup.disk_tuple, oldtupNewTransSlot); oldtup.disk_tuple->flag &= ~UHEAP_VIS_STATUS_MASK; - oldtup.disk_tuple->flag |= tmpLockInfo; oldtup.disk_tuple->flag |= infomaskOldTuple; tupleXid = UHeapTupleSetModifiedXid(relation, buffer, &oldtup, fxid); @@ -3119,6 +3118,7 @@ check_tup_satisfies_update: uheaptup->disk_tuple->flag |= infomaskNewTuple; uheaptup->xc_node_id = u_sess->pgxc_cxt.PGXCNodeIdentifier; if (buffer == newbuf) { + Assert(!UHEAP_XID_IS_LOCK(uheaptup->disk_tuple->flag)); uheaptup->disk_tuple->flag |= SINGLE_LOCKER_XID_IS_TRANS; UHeapTupleSetRawXid(uheaptup, tupleXid); } else { diff --git a/src/gausskernel/storage/access/ustore/knl_uvisibility.cpp b/src/gausskernel/storage/access/ustore/knl_uvisibility.cpp index 738841c31..b5340c998 100644 --- a/src/gausskernel/storage/access/ustore/knl_uvisibility.cpp +++ b/src/gausskernel/storage/access/ustore/knl_uvisibility.cpp @@ -73,6 +73,7 @@ static UHeapTupleStatus UHeapTupleGetStatus(const UHeapTuple utup) return UHEAPTUPLESTATUS_MULTI_LOCKED; } else if ((SINGLE_LOCKER_XID_IS_EXCL_LOCKED(infomask) || SINGLE_LOCKER_XID_IS_SHR_LOCKED(infomask)) && TransactionIdIsNormal(locker) && !TransactionIdOlderThanFrozenXid(locker)) { + Assert(!UHEAP_XID_IS_TRANS(utuple->flag)); return UHEAPTUPLESTATUS_LOCKED; // locked by select-for-update or select-for-share } else if (infomask & UHEAP_INPLACE_UPDATED) { return UHEAPTUPLESTATUS_INPLACE_UPDATED; // modified or locked by lock-for-update @@ -243,6 +244,7 @@ bool UHeapTupleSatisfiesVisibility(UHeapTuple uhtup, Snapshot snapshot, Buffer b if (utuple != NULL && TransactionIdIsNormal(fxid) && IsMVCCSnapshot(snapshot) && SINGLE_LOCKER_XID_IS_EXCL_LOCKED(utuple->disk_tuple->flag)) { Assert(UHEAP_XID_IS_EXCL_LOCKED(utuple->disk_tuple->flag)); + Assert(!UHEAP_XID_IS_TRANS(utuple->disk_tuple->flag)); lockerXid = UHeapTupleGetRawXid(utuple); tupleIsExclusivelyLocked = true; } @@ -1261,6 +1263,7 @@ TM_Result UHeapTupleSatisfiesUpdate(Relation rel, Snapshot snapshot, ItemPointer UHeapTupleStatus tupleStatus = UHeapTupleGetStatus(utuple); /* tuple is no longer locked by a single locker */ if (tupleStatus != UHEAPTUPLESTATUS_LOCKED && SINGLE_LOCKER_XID_IS_EXCL_LOCKED(tupleData->flag)) { + Assert(!UHEAP_XID_IS_TRANS(utuple->disk_tuple->flag)); UHeapTupleHeaderClearSingleLocker(tupleData); }