From f357f48100c3856a173f8644db6e5c7fb90b5f9f Mon Sep 17 00:00:00 2001 From: Kirk Jamison Date: Wed, 23 Sep 2020 07:15:30 +0000 Subject: [PATCH 1/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 dcc09df..f476b8e 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -474,7 +474,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; + } } /* -- 1.8.3.1