From 9eb463d3a7320ccb6d18ca633268ac522f3aca36 Mon Sep 17 00:00:00 2001 From: chendong76 <1209756284@qq.com> Date: Sun, 10 Sep 2023 14:17:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9E=81=E8=87=B4RTO?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=87=E6=9C=BA=E8=AF=BB=E7=89=B9=E6=80=A7?= =?UTF-8?q?=E5=AF=B9=E6=8C=89=E9=9C=80=E5=9B=9E=E6=94=BE=E7=89=B9=E6=80=A7?= =?UTF-8?q?=E7=9A=84=E5=BD=B1=E5=93=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/access/redo/redo_xlogutils.cpp | 2 +- .../access/transam/extreme_rto_redo_api.cpp | 10 -------- .../ondemand_extreme_rto/dispatcher.cpp | 2 +- .../storage/access/transam/xlog.cpp | 2 +- src/gausskernel/storage/buffer/bufmgr.cpp | 2 +- src/gausskernel/storage/ipc/procarray.cpp | 2 +- src/include/access/extreme_rto_redo_api.h | 24 +++++++++++++++++-- src/include/access/multi_redo_api.h | 2 +- 8 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/gausskernel/storage/access/redo/redo_xlogutils.cpp b/src/gausskernel/storage/access/redo/redo_xlogutils.cpp index 7bfcbaf22d..cf6feafb7d 100644 --- a/src/gausskernel/storage/access/redo/redo_xlogutils.cpp +++ b/src/gausskernel/storage/access/redo/redo_xlogutils.cpp @@ -1768,7 +1768,7 @@ bool XLogBlockRedoForExtremeRTO(XLogRecParseState *redoblocktate, RedoBufferInfo } if ((block_valid != BLOCK_DATA_UNDO_TYPE) && g_instance.attr.attr_storage.EnableHotStandby && - XLByteLT(PageGetLSN(bufferinfo->pageinfo.page), blockhead->end_ptr)) { + IsDefaultExtremeRtoMode() && XLByteLT(PageGetLSN(bufferinfo->pageinfo.page), blockhead->end_ptr)) { BufferTag buf_tag; INIT_BUFFERTAG(buf_tag, bufferinfo->blockinfo.rnode, bufferinfo->blockinfo.forknum, bufferinfo->blockinfo.blkno); diff --git a/src/gausskernel/storage/access/transam/extreme_rto_redo_api.cpp b/src/gausskernel/storage/access/transam/extreme_rto_redo_api.cpp index f8c7eddeaa..84f6d328e1 100644 --- a/src/gausskernel/storage/access/transam/extreme_rto_redo_api.cpp +++ b/src/gausskernel/storage/access/transam/extreme_rto_redo_api.cpp @@ -141,16 +141,6 @@ static const f_extreme_rto_redo extreme_rto_redosw[] = { }, }; -void SetExtremeRtoMode() -{ - g_extreme_rto_type = DEFAULT_EXTREME_RTO; -} - -void SetOndemandExtremeRtoMode() -{ - g_extreme_rto_type = ONDEMAND_EXTREME_RTO; -} - void ExtremeWaitAllReplayWorkerIdle() { (*(extreme_rto_redosw[g_extreme_rto_type].wait_all_replay_worker_idle))(); diff --git a/src/gausskernel/storage/access/transam/ondemand_extreme_rto/dispatcher.cpp b/src/gausskernel/storage/access/transam/ondemand_extreme_rto/dispatcher.cpp index cab1ab125f..9e8e0336c0 100644 --- a/src/gausskernel/storage/access/transam/ondemand_extreme_rto/dispatcher.cpp +++ b/src/gausskernel/storage/access/transam/ondemand_extreme_rto/dispatcher.cpp @@ -1874,7 +1874,7 @@ void SendRecoveryEndMarkToWorkersAndWaitForReach(int code) } } } - ereport(LOG, (errmsg("[SS][REDO_LOG_TRACE] lastReadXact: %lu, trxnComplete: %lu, pageMgrComplele: %lu", + ereport(DEBUG1, (errmsg("[SS][REDO_LOG_TRACE] lastReadXact: %lu, trxnComplete: %lu, pageMgrComplele: %lu", lastReadEndPtr, trxnCompletePtr, pageMngrCompletePtr))); if (XLByteEQ(trxnCompletePtr, lastReadEndPtr) && XLByteEQ(pageMngrCompletePtr, lastReadEndPtr)) { break; diff --git a/src/gausskernel/storage/access/transam/xlog.cpp b/src/gausskernel/storage/access/transam/xlog.cpp index 13e63c2c9e..66c6aba578 100755 --- a/src/gausskernel/storage/access/transam/xlog.cpp +++ b/src/gausskernel/storage/access/transam/xlog.cpp @@ -9622,7 +9622,7 @@ void StartupXLOG(void) } g_instance.dms_cxt.SSRecoveryInfo.in_ondemand_recovery = false; - SetExtremeRtoMode(); + SetDefaultExtremeRtoMode(); if (SS_PRIMARY_MODE && ENABLE_ONDEMAND_RECOVERY && (SS_STANDBY_FAILOVER || SS_PRIMARY_NORMAL_REFORM) && t_thrd.xlog_cxt.InRecovery == true) { if (SSOndemandRecoveryExitNormal) { diff --git a/src/gausskernel/storage/buffer/bufmgr.cpp b/src/gausskernel/storage/buffer/bufmgr.cpp index 63cf83f6f8..c52978bda4 100644 --- a/src/gausskernel/storage/buffer/bufmgr.cpp +++ b/src/gausskernel/storage/buffer/bufmgr.cpp @@ -1673,7 +1673,7 @@ Buffer ReadBuffer(Relation reln, BlockNumber block_num) Buffer ReadBufferExtended(Relation reln, ForkNumber fork_num, BlockNumber block_num, ReadBufferMode mode, BufferAccessStrategy strategy) { - if (IsExtremeRtoRunning() && !AmPageRedoWorker()) { + if (IsDefaultExtremeRtoMode() && IsExtremeRtoRunning() && !AmPageRedoWorker()) { return standby_read_buf(reln, fork_num, block_num, mode, strategy); } diff --git a/src/gausskernel/storage/ipc/procarray.cpp b/src/gausskernel/storage/ipc/procarray.cpp index 39e78271b5..b1bd477c9a 100755 --- a/src/gausskernel/storage/ipc/procarray.cpp +++ b/src/gausskernel/storage/ipc/procarray.cpp @@ -2435,7 +2435,7 @@ GROUP_GET_SNAPSHOT: (void)pgstat_report_waitstatus(oldStatus); } - if (IsExtremeRtoRunning() && pmState == PM_HOT_STANDBY) { + if (IsDefaultExtremeRtoMode() && IsExtremeRtoRunning() && pmState == PM_HOT_STANDBY) { extreme_rto::exrto_read_snapshot(snapshot); } diff --git a/src/include/access/extreme_rto_redo_api.h b/src/include/access/extreme_rto_redo_api.h index ef86785bf6..13df446462 100644 --- a/src/include/access/extreme_rto_redo_api.h +++ b/src/include/access/extreme_rto_redo_api.h @@ -36,8 +36,28 @@ typedef enum { extern ExtremeRtoRedoType g_extreme_rto_type; -void SetExtremeRtoMode(); -void SetOndemandExtremeRtoMode(); +inline void SetDefaultExtremeRtoMode() +{ + g_extreme_rto_type = DEFAULT_EXTREME_RTO; +} + +inline void SetOndemandExtremeRtoMode() +{ + g_extreme_rto_type = ONDEMAND_EXTREME_RTO; +} + +inline bool IsDefaultExtremeRtoMode() +{ + return (g_extreme_rto_type == DEFAULT_EXTREME_RTO); +} + +inline bool IsOndemandExtremeRtoMode() +{ + return (g_extreme_rto_type == ONDEMAND_EXTREME_RTO); +} +inline void SetOndemandExtremeRtoMode(); +inline bool IsDefaultExtremeRtoMode(); +inline bool IsOndemandExtremeRtoMode(); void ExtremeWaitAllReplayWorkerIdle(); void ExtremeDispatchCleanInvalidPageMarkToAllRedoWorker(RepairFileKey key); void ExtremeDispatchClosefdMarkToAllRedoWorker(); diff --git a/src/include/access/multi_redo_api.h b/src/include/access/multi_redo_api.h index 331bcd897f..3dbc82dca9 100644 --- a/src/include/access/multi_redo_api.h +++ b/src/include/access/multi_redo_api.h @@ -66,7 +66,7 @@ static const uint32 PAGE_REDO_WORKER_READY = 2; static const uint32 PAGE_REDO_WORKER_EXIT = 3; static const uint32 BIG_RECORD_LENGTH = XLOG_BLCKSZ * 16; -#define IS_EXRTO_READ (g_instance.attr.attr_storage.EnableHotStandby && IsExtremeRedo()) +#define IS_EXRTO_READ (g_instance.attr.attr_storage.EnableHotStandby && IsExtremeRedo() && IsDefaultExtremeRtoMode()) #define IS_EXRTO_STANDBY_READ (IS_EXRTO_READ && pm_state_is_hot_standby()) static inline int get_real_recovery_parallelism() -- Gitee