From 053aadfa38b13410bea47269c03b015eda5c8082 Mon Sep 17 00:00:00 2001 From: "arcoalien@qq.com" Date: Thu, 2 Feb 2023 15:47:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dfailover=E5=8F=91=E7=94=9F?= =?UTF-8?q?=E5=90=8E=E4=B8=BB=E6=9C=BA=E5=9C=A8=E5=9B=9E=E6=94=BE=E9=98=B6?= =?UTF-8?q?=E6=AE=B5=E6=B7=98=E6=B1=B0=E4=BA=86=E4=BB=8E=E5=A4=87=E6=9C=BA?= =?UTF-8?q?=E8=A6=81=E5=88=B0=E7=9A=84=E9=9C=80=E8=A6=81flush=E7=9A=84?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2,=20=E5=AF=BC=E8=87=B4=E7=A3=81=E7=9B=98?= =?UTF-8?q?=E4=B8=8A=E9=A1=B5=E9=9D=A2=E6=BC=8F=E5=88=B7=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/storage/buffer/bufmgr.cpp | 5 +++++ src/gausskernel/storage/smgr/segment/segbuffer.cpp | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/gausskernel/storage/buffer/bufmgr.cpp b/src/gausskernel/storage/buffer/bufmgr.cpp index 2b3b1a023..1752b5388 100644 --- a/src/gausskernel/storage/buffer/bufmgr.cpp +++ b/src/gausskernel/storage/buffer/bufmgr.cpp @@ -620,6 +620,11 @@ static volatile BufferDesc *PageListBufferAlloc(SMgrRelation smgr, char relpersi /* Pin the buffer and then release the buffer spinlock */ PinBuffer_Locked(buf); + if (!SSPageCheckIfCanEliminate(buf)) { + UnpinBuffer(buf, true); + return NULL; + } + /* * At this point, the victim buffer is pinned * but no locks are held. diff --git a/src/gausskernel/storage/smgr/segment/segbuffer.cpp b/src/gausskernel/storage/smgr/segment/segbuffer.cpp index d13a09e9c..f6a297334 100644 --- a/src/gausskernel/storage/smgr/segment/segbuffer.cpp +++ b/src/gausskernel/storage/smgr/segment/segbuffer.cpp @@ -704,6 +704,11 @@ BufferDesc *SegBufferAlloc(SegSpace *spc, RelFileNode rnode, ForkNumber forkNum, SegPinBufferLocked(buf, &new_tag); + if (!SSPageCheckIfCanEliminate(buf)) { + SegUnpinBuffer(buf); + continue; + } + if (old_flags & BM_DIRTY) { /* backend should not flush dirty pages if working version less than DW_SUPPORT_NEW_SINGLE_FLUSH */ if (!backend_can_flush_dirty_page()) {