From 47dcde3ed7ffd07b6c87bbbc51a8cb7e3adb69fb Mon Sep 17 00:00:00 2001 From: chendong76 <1209756284@qq.com> Date: Tue, 27 Aug 2024 17:46:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=8C=89=E9=9C=80=E5=9B=9E?= =?UTF-8?q?=E6=94=BE=E5=AE=9E=E6=97=B6=E6=9E=84=E5=BB=BA=E4=B8=8B=EF=BC=8C?= =?UTF-8?q?=E4=B8=BB=E6=9C=BAredo=E7=82=B9=E4=BD=8D=E5=8F=91=E9=80=81?= =?UTF-8?q?=E9=94=99=E8=AF=AF=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_callback.cpp | 2 +- .../transam/ondemand_extreme_rto/redo_utils.cpp | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp index 9903d0b38..d979c80ed 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp @@ -2225,7 +2225,7 @@ int CBDoCheckpointImmediately(unsigned long long *ckpt_lsn) Assert(SS_PRIMARY_MODE); RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_WAIT); - *ckpt_lsn = (unsigned long long)t_thrd.shemem_ptr_cxt.ControlFile->checkPoint; + *ckpt_lsn = (unsigned long long)t_thrd.shemem_ptr_cxt.ControlFile->checkPointCopy.redo; return GS_SUCCESS; } diff --git a/src/gausskernel/storage/access/transam/ondemand_extreme_rto/redo_utils.cpp b/src/gausskernel/storage/access/transam/ondemand_extreme_rto/redo_utils.cpp index 711f4e89c..9bfc8e045 100644 --- a/src/gausskernel/storage/access/transam/ondemand_extreme_rto/redo_utils.cpp +++ b/src/gausskernel/storage/access/transam/ondemand_extreme_rto/redo_utils.cpp @@ -657,9 +657,19 @@ void OnDemandWaitRealtimeBuildShutDown() ondemand_extreme_rto::WaitRealtimeBuildShutdown(); } +// only used in ondemand realtime build, for update xlog redo loc in failover void OnDemandUpdateRealtimeBuildPrunePtr() { - ondemand_extreme_rto::UpdateCheckpointRedoPtrForPrune(t_thrd.shemem_ptr_cxt.ControlFile->checkPointCopy.redo); + XLogRecPtr primaryRedoLsn = t_thrd.shemem_ptr_cxt.ControlFile->checkPointCopy.redo; +#ifdef USE_ASSERT_CHECKING + if (XLByteLT(primaryRedoLsn, ondemand_extreme_rto::g_dispatcher->ckptRedoPtr)) { + ereport(PANIC, (errmodule(MOD_DMS), errmsg("[SS][On-demand] redo loc %X/%X in primary node %d is less than " + "realtime build node %d, prune loc %X/%X", (uint32)(primaryRedoLsn >> 32), (uint32)primaryRedoLsn, + SS_PRIMARY_ID, SS_MY_INST_ID, (uint32)(ondemand_extreme_rto::g_dispatcher->ckptRedoPtr >> 32), + (uint32)ondemand_extreme_rto::g_dispatcher->ckptRedoPtr))); + } +#endif + ondemand_extreme_rto::UpdateCheckpointRedoPtrForPrune(primaryRedoLsn); } void OnDemandBackupControlFile(ControlFileData* controlFile) {