diff --git a/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp b/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp index 1cc615efe0e03686731b8c540059a6710415f413..ba644e984df18f779f7e6bff880117b70102ede1 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp @@ -521,7 +521,7 @@ bool SSOndemandRequestPrimaryRedo(BufferTag tag) (unsigned int)sizeof(BufferTag), &redo_status) != DMS_SUCCESS) { ereport(LOG, (errmodule(MOD_DMS), - errmsg("[on-demand] request primary node redo page failed, page id [%d/%d/%d/%d/%d %d-%d], " + errmsg("[On-demand] request primary node redo page failed, page id [%d/%d/%d/%d/%d %d-%d], " "redo status %d", tag.rnode.spcNode, tag.rnode.dbNode, tag.rnode.relNode, (int)tag.rnode.bucketNode, (int)tag.rnode.opt, tag.forkNum, tag.blockNum, redo_status))); return false; diff --git a/src/gausskernel/process/postmaster/postmaster.cpp b/src/gausskernel/process/postmaster/postmaster.cpp index c7e1ec2e442d0f997b348bf4960cea139e2374d8..1b60ba6306f4182ca8591b2684032c5dc112da62 100644 --- a/src/gausskernel/process/postmaster/postmaster.cpp +++ b/src/gausskernel/process/postmaster/postmaster.cpp @@ -3030,7 +3030,7 @@ int PostmasterMain(int argc, char* argv[]) if (SS_OFFICIAL_RECOVERY_NODE && SS_CLUSTER_ONDEMAND_NOT_NORAML) { ereport(FATAL, (errmsg( - "[on-demand] node%d is last primary node, do not allow join cluster until on-demand recovery done", + "[On-demand] node%d is last primary node, do not allow join cluster until on-demand recovery done", g_instance.attr.attr_storage.dms_attr.instance_id))); } } 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 bc5ca2582ac3d36cabc7472e3f31bfbf25f73589..f8c7eddeaafcb31d80d8719e4fe30909615dbc3d 100644 --- a/src/gausskernel/storage/access/transam/extreme_rto_redo_api.cpp +++ b/src/gausskernel/storage/access/transam/extreme_rto_redo_api.cpp @@ -141,6 +141,11 @@ 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; diff --git a/src/gausskernel/storage/access/transam/xlog.cpp b/src/gausskernel/storage/access/transam/xlog.cpp index c5427d7d25cc0b1b3d26373845fcc402159d6219..6a01a780b16a67e6a43c7e40ff8c4b4f16361aab 100755 --- a/src/gausskernel/storage/access/transam/xlog.cpp +++ b/src/gausskernel/storage/access/transam/xlog.cpp @@ -8808,11 +8808,11 @@ void StartupXLOG(void) SSReadControlFile(REFORM_CTRL_PAGE); if (SS_CLUSTER_ONDEMAND_NOT_NORAML && SS_PRIMARY_MODE) { if (SS_STANDBY_PROMOTING) { - ereport(FATAL, (errmsg("Do not allow switchover if on-demand recovery is not finish"))); + ereport(FATAL, (errmsg("[On-demand] Do not allow switchover if ondemand recovery is not finish"))); } Assert(g_instance.dms_cxt.SSReformerControl.recoveryInstId != INVALID_INSTANCEID); src_id = g_instance.dms_cxt.SSReformerControl.recoveryInstId; - ereport(LOG, (errmsg("[on-demand]: On-demand recovery do not finish in last reform, " + ereport(LOG, (errmsg("[On-demand]: Ondemand recovery do not finish in last reform, " "reading control file of original primary:%d", src_id))); SSOndemandRecoveryExitNormal = false; } else { @@ -9493,6 +9493,8 @@ void StartupXLOG(void) SetOndemandExtremeRtoMode(); ereport(LOG, (errmsg("[On-demand] replayed in extreme rto ondemand recovery mode"))); } else { + g_instance.dms_cxt.SSRecoveryInfo.in_ondemand_recovery = false; + SetExtremeRtoMode(); ereport(LOG, (errmsg("[On-demand] do not allow replay in ondemand recovery if last ondemand recovery " "crash, replayed in extreme rto recovery mode"))); } @@ -10517,7 +10519,7 @@ void StartupXLOG(void) if (SS_IN_ONDEMAND_RECOVERY) { /* We wait at here */ - ereport(LOG, (errmsg("[SS] On-demand redo, nextXid: " XID_FMT ", startupMaxXid: " XID_FMT + ereport(LOG, (errmsg("[On-demand] ondemand redo, nextXid: " XID_FMT ", startupMaxXid: " XID_FMT ", recentLocalXmin: " XID_FMT ", recentGlobalXmin: %lu, PendingPreparedXacts: %d" ", NextCommitSeqNo: %lu, cutoff_csn_min: %lu.", NextXidAfterReovery, t_thrd.xact_cxt.ShmemVariableCache->startupMaxXid, @@ -10538,7 +10540,7 @@ void StartupXLOG(void) LWLockRelease(ControlFileLock); SSRecheckBufferPool(); ereport(LOG, (errmodule(MOD_DMS), - errmsg("[SS][on demand recovery] finished full checkpoint and update control file"))); + errmsg("[On-demand] finished full checkpoint and update control file"))); NotifyGscRecoveryFinished(); if (ENABLE_INCRE_CKPT) { @@ -11568,6 +11570,9 @@ void CreateCheckPoint(int flags) } else if (g_instance.dms_cxt.SSRecoveryInfo.failover_ckpt_status == NOT_ALLOW_CKPT) { ereport(LOG, (errmodule(MOD_DMS), errmsg("[SS failover] do not do CreateCheckpoint during failover"))); return; + } else if (SS_IN_ONDEMAND_RECOVERY && !SS_ONDEMAND_REDO_DONE) { + /* do not allow ckpt in ondemand recovery if xlog do not redo done, for valid ckpt loc in control file */ + return; } /* CHECKPOINT_IS_SHUTDOWN CHECKPOINT_END_OF_RECOVERY CHECKPOINT_FORCE shuld do full checkpoint */ diff --git a/src/include/access/extreme_rto_redo_api.h b/src/include/access/extreme_rto_redo_api.h index 652d13c15c48b253db95f5661b55929cbee6bc99..ef86785bf603953833ef930167b263d8ef84c18c 100644 --- a/src/include/access/extreme_rto_redo_api.h +++ b/src/include/access/extreme_rto_redo_api.h @@ -36,6 +36,7 @@ typedef enum { extern ExtremeRtoRedoType g_extreme_rto_type; +void SetExtremeRtoMode(); void SetOndemandExtremeRtoMode(); void ExtremeWaitAllReplayWorkerIdle(); void ExtremeDispatchCleanInvalidPageMarkToAllRedoWorker(RepairFileKey key);