v1-Prevent-invalidating-blocks-in-smgrextend-during-recovery.patch
application/octet-stream
Filename: v1-Prevent-invalidating-blocks-in-smgrextend-during-recovery.patch
Type: application/octet-stream
Part: 1
Patch
Format: format-patch
Series: patch v1
Subject: Prevent invalidating blocks in smgrextend() during recovery.
| File | + | − |
|---|---|---|
| src/backend/storage/smgr/smgr.c | 7 | 0 |
From 9266f25c02818feab55d2a5b524fba5f0f305b28 Mon Sep 17 00:00:00 2001
From: Kirk Jamison <k.jamison@jp.fujitsu.com>
Date: Wed, 23 Sep 2020 07:15:30 +0000
Subject: [PATCH] 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