From c551a48b847758c6fa328aee86ca9d8221b3b500 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E8=BE=BE=E6=A0=87?= <848833284@qq.com> Date: Wed, 21 Aug 2024 10:06:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Durq=20meta=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E8=AF=AF=E6=8A=A5error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/access/ubtree/ubtrecycle.cpp | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/gausskernel/storage/access/ubtree/ubtrecycle.cpp b/src/gausskernel/storage/access/ubtree/ubtrecycle.cpp index 25ac4091e..bcec8572c 100644 --- a/src/gausskernel/storage/access/ubtree/ubtrecycle.cpp +++ b/src/gausskernel/storage/access/ubtree/ubtrecycle.cpp @@ -1329,26 +1329,32 @@ static void UBTRecycleMetaDataVerify(UBTRecycleMeta metaData, Relation rel, Bloc BYPASS_VERIFY(USTORE_VERIFY_MOD_UBTREE, rel); CHECK_VERIFY_LEVEL(USTORE_VERIFY_FAST) - BlockNumber indexBlocks = (rel == NULL ? metaData->nblocksUpper : RelationGetNumberOfBlocks(rel)); - uint32 urqBlocks = MaxBlockNumber; - Oid oid = InvalidOid; - bool metaError = false; + BlockNumber urqBlocks = MaxBlockNumber; + BlockNumber indexBlocks = metaData->nblocksUpper; RelFileNode rNode = rel ? rel->rd_node : RelFileNode{InvalidOid, InvalidOid, InvalidOid}; if (rel != NULL) { RelationOpenSmgr(rel); urqBlocks = Max(minRecycleQueueBlockNumber, smgrnblocks(rel->rd_smgr, FSM_FORKNUM)); - oid = rel->rd_id; + indexBlocks = RelationGetNumberOfBlocks(rel); } - metaError = ((metaData->headBlkno == 1 - metaBlkno) || (metaData->tailBlkno == 1 - metaBlkno)) || - (metaData->headBlkno >= urqBlocks || metaData->tailBlkno >= urqBlocks) || (metaData->nblocksUpper > indexBlocks); - + bool metaError = (metaData->headBlkno == 1 - metaBlkno) || (metaData->tailBlkno == 1 - metaBlkno); + if (!metaError && rel != NULL) { + if (metaData->headBlkno >= urqBlocks || metaData->tailBlkno >= urqBlocks) { + urqBlocks = Max(minRecycleQueueBlockNumber, smgrnblocks(rel->rd_smgr, FSM_FORKNUM)); + metaError = metaData->headBlkno >= urqBlocks || metaData->tailBlkno >= urqBlocks; + } + if (!metaError && metaData->nblocksUpper > indexBlocks) { + indexBlocks = RelationGetNumberOfBlocks(rel); + metaError = metaData->nblocksUpper > indexBlocks; + } + } if (metaError) { ereport(ustore_verify_errlevel(), (errcode(ERRCODE_DATA_CORRUPTED),errmsg( "[Verify URQ] urq meta is invalid : (meta info : headBlkno = %u, tailBlkno = %u, " "nblocksUpper = %u, nblocksLower = %u; urq_blocks = %u, index_blocks = %u), rnode[%u,%u,%u], block %u", - oid, metaBlkno, metaData->headBlkno, metaData->tailBlkno, metaData->nblocksUpper, - metaData->nblocksLower, urqBlocks, indexBlocks, rNode.spcNode, rNode.dbNode, rNode.relNode, metaBlkno))); + metaData->headBlkno, metaData->tailBlkno, metaData->nblocksUpper, metaData->nblocksLower, + urqBlocks, indexBlocks, rNode.spcNode, rNode.dbNode, rNode.relNode, metaBlkno))); } } \ No newline at end of file