From 0b553e6e09dc7f1ca576346d578f4777e5c08e09 Mon Sep 17 00:00:00 2001 From: dengxuyue Date: Tue, 3 Aug 2021 22:28:12 +0800 Subject: [PATCH] add smgrnblock cache and revert logical of block exist in smgr/md --- src/gausskernel/storage/buffer/bufmgr.cpp | 10 +++++++++- src/include/storage/smgr.h | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gausskernel/storage/buffer/bufmgr.cpp b/src/gausskernel/storage/buffer/bufmgr.cpp index c317fab89..b27afedb5 100644 --- a/src/gausskernel/storage/buffer/bufmgr.cpp +++ b/src/gausskernel/storage/buffer/bufmgr.cpp @@ -1764,8 +1764,16 @@ Buffer ReadBuffer_common_for_localbuf(RelFileNode rnode, char relpersistence, Fo * should return that the tuple does not exist without error reporting. */ else if (RecoveryInProgress()) { - if (blockNum >= smgrnblocks(smgr, forkNum)) + BlockNumber totalBlkNum = smgrnblocks_cached(smgr, forkNum); + + /* Update cached blocks */ + if (totalBlkNum == InvalidBlockNumber || blockNum >= totalBlkNum) { + totalBlkNum = smgrnblocks(smgr, forkNum); + } + + if (blockNum >= totalBlkNum) { return InvalidBuffer; + } } #endif diff --git a/src/include/storage/smgr.h b/src/include/storage/smgr.h index 88b7f9efc..db2b73cdf 100644 --- a/src/include/storage/smgr.h +++ b/src/include/storage/smgr.h @@ -60,7 +60,7 @@ typedef struct SMgrRelationData { BlockNumber smgr_targblock; /* current insertion target block */ BlockNumber smgr_fsm_nblocks; /* last known size of fsm fork */ BlockNumber smgr_vm_nblocks; /* last known size of vm fork */ - BlockNumber smgr_cached_nblocks; /* last known size of main fork*/ + BlockNumber smgr_cached_nblocks; /* last known size of main fork */ int smgr_bcmarry_size; BlockNumber* smgr_bcm_nblocks; /* last known size of bcm fork */