From a03db42d1e75a5ee587e6cf31cd11592024eed5d Mon Sep 17 00:00:00 2001 From: Kirk Jamison Date: Thu, 15 Oct 2020 02:55:59 +0000 Subject: [PATCH v25 4/4] V25 with ereport for debug --- src/backend/storage/buffer/bufmgr.c | 22 ++++++++++++++++++++++ src/backend/storage/smgr/smgr.c | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 5e52ff0..b1aaa05 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -3015,6 +3015,10 @@ DropRelFileNodeBuffers(SMgrRelation smgr_reln, ForkNumber *forkNum, /* Get the total nblocks for a relation's fork */ nForkBlocks[i] = smgrnblocks(smgr_reln, forkNum[i], &accurate); + ereport(WARNING, + (errmsg("current fork %i, nForkBlocks[i] %u, accurate: %d", + i, nForkBlocks[i], accurate))); + if (!accurate) { nForkBlocks[i] = InvalidBlockNumber; @@ -3066,7 +3070,19 @@ DropRelFileNodeBuffers(SMgrRelation smgr_reln, ForkNumber *forkNum, if (RelFileNodeEquals(bufHdr->tag.rnode, rnode.node) && bufHdr->tag.forkNum == forkNum[i] && bufHdr->tag.blockNum >= firstDelBlock[i]) + { + ereport(WARNING, + (errmsg("Optimization Loop.\n" + "buf_id = %i. nforks = %i. current fork = %u. " + "forkNum: %u == tag's forkNum: %u. " + "curBlock: %u < nForkBlocks[i] = %u. " + "tag blockNum: %u >= firstDelBlock[i]: %u. " + "nBlocksToInvalidate = %u < threshold = %u. ", + buf_id, nforks, i, forkNum[i], bufHdr->tag.forkNum, + curBlock, nForkBlocks[i], bufHdr->tag.blockNum, firstDelBlock[i], + nBlocksToInvalidate, BUF_DROP_FULL_SCAN_THRESHOLD))); InvalidateBuffer(bufHdr); /* releases spinlock */ + } else UnlockBufHdr(bufHdr, buf_state); } @@ -3105,6 +3121,12 @@ DropRelFileNodeBuffers(SMgrRelation smgr_reln, ForkNumber *forkNum, bufHdr->tag.forkNum == forkNum[j] && bufHdr->tag.blockNum >= firstDelBlock[j]) { + ereport(WARNING, + (errmsg("Full Scan.\n" + "nforks = %i. tag's forkNum %u == forkNum %u. " + "tag blockNum %u >= firstDelBlock[j] %u.", + nforks, bufHdr->tag.forkNum, forkNum[j], + bufHdr->tag.blockNum, firstDelBlock[j]))); InvalidateBuffer(bufHdr); /* releases spinlock */ break; } diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 6b8528e..f57916f 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -564,7 +564,7 @@ smgrnblocks(SMgrRelation reln, ForkNumber forknum, bool *accurate) * This is caused by lseek of buggy Linux kernels that might not have * accounted for the recent write. */ - if (InRecovery && reln->smgr_cached_nblocks[forknum] != InvalidBlockNumber) + if (reln->smgr_cached_nblocks[forknum] != InvalidBlockNumber) { if (accurate != NULL) *accurate = true; -- 1.8.3.1