From c36364b1bacd84d88b87c85dfc4b88c424f7dadc Mon Sep 17 00:00:00 2001 From: congzhou2603 Date: Sat, 14 Sep 2024 09:18:33 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90bugfix=E3=80=91=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=8C=89=E9=9C=80=E5=9B=9E=E6=94=BEredo=E9=98=B6=E6=AE=B5?= =?UTF-8?q?=E5=A4=87=E6=9C=BA=E8=AF=BB=E4=B8=9A=E5=8A=A1=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E8=A7=A6=E5=8F=91reform=EF=BC=8C=E5=AF=BC=E4=B8=BB=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E6=AD=BB=E9=94=81=EF=BC=8C=E6=9C=80=E5=90=8E=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E9=80=80=E5=87=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp | 3 +++ .../ddes/adapter/ss_dms_callback.cpp | 10 ++++++++++ src/gausskernel/storage/buffer/bufmgr.cpp | 18 +++++++++--------- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp b/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp index 24a4d775d..f58126e1a 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp @@ -553,6 +553,9 @@ bool SSOndemandRequestPrimaryRedo(BufferTag tag) return false; } else if (SS_STANDBY_ONDEMAND_NORMAL || SS_PRIMARY_MODE) { return true; + // retry after reform finish + } else if (SS_IN_REFORM) { + return false; } ereport(DEBUG1, diff --git a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp index 357457c27..a8572c79c 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp @@ -2171,6 +2171,16 @@ int CBOndemandRedoPageForStandby(void *block_key, int32 *redo_status) return GS_SUCCESS;; } + if (SS_IN_REFORM) { + ereport(WARNING, (errmodule(MOD_DMS), + errmsg("[SS][On-demand][%u/%u/%u/%d %d-%u] Reform happend when primary redo page for standby," + "return ONDEMAND_REDO_FAIL.", + tag->rnode.spcNode, tag->rnode.dbNode, + tag->rnode.relNode, tag->rnode.bucketNode, tag->forkNum, tag->blockNum))); + *redo_status = ONDEMAND_REDO_FAIL; + return GS_SUCCESS; + } + Buffer buffer = InvalidBuffer; uint32 saveInterruptHoldoffCount = t_thrd.int_cxt.InterruptHoldoffCount; *redo_status = ONDEMAND_REDO_DONE; diff --git a/src/gausskernel/storage/buffer/bufmgr.cpp b/src/gausskernel/storage/buffer/bufmgr.cpp index c0dd1f9e5..a05aa72e4 100644 --- a/src/gausskernel/storage/buffer/bufmgr.cpp +++ b/src/gausskernel/storage/buffer/bufmgr.cpp @@ -6357,11 +6357,11 @@ retry: * hold the content shared lock all the time, give the MES from the primary a chance to get it, * and the timeout time of the primary and standby servers is modified to open the unlocking * time window. - */ + */ if (!dms_standby_retry_read && SS_STANDBY_MODE) { - dms_standby_retry_read = true; - mode = BUFFER_LOCK_EXCLUSIVE; - } + dms_standby_retry_read = true; + mode = BUFFER_LOCK_EXCLUSIVE; + } pg_usleep(5000L); goto retry; } else if (dms_standby_retry_read) { @@ -6371,11 +6371,11 @@ retry: * * A good idea would be to add the ability to lock downgrade for LWLock. */ - mode = origin_mode; - dms_standby_retry_read = false; - LWLockRelease(buf->content_lock); - goto retry; - } + mode = origin_mode; + dms_standby_retry_read = false; + LWLockRelease(buf->content_lock); + goto retry; + } } }