From 044344495adea5cd614af961345e6f1d7278971b Mon Sep 17 00:00:00 2001 From: Kirk Jamison Date: Wed, 23 Sep 2020 07:15:30 +0000 Subject: [PATCH v38 3/3] Prevent invalidating blocks in smgrextend() during recovery. DropRelFileNodeBuffers relies on the behavior that cached blocks returned by smgrnblocks() won't be invalidated by file extension during recovery. --- src/backend/storage/smgr/smgr.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 26478d7185..717bff76bb 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -473,7 +473,14 @@ smgrextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, if (reln->smgr_cached_nblocks[forknum] == blocknum) reln->smgr_cached_nblocks[forknum] = blocknum + 1; else + { + /* + * DropRelFileNodeBuffers relies on the behavior that cached nblocks + * won't be invalidated by file extension during recovery. + */ + Assert(!InRecovery); reln->smgr_cached_nblocks[forknum] = InvalidBlockNumber; + } } /* -- 2.28.0.windows.1