diff --git a/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp b/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp index 540e4a4ee6633b2a5996d45cb62f7a5a18ddca48..de58c272b0f1eb2b2e5cafc5b75a6b67bb3936c0 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp @@ -100,11 +100,6 @@ bool SSRecoveryNodes() { bool result = false; while (true) { - if (dms_reform_failed()) { - SSWaitStartupExit(); - result = false; - break; - } /** why use lock: * time1 startup thread: update IsRecoveryDone, not finish UpdateControlFile * time2 reform_proc: finish reform, think ControlFile is ok @@ -134,6 +129,12 @@ bool SSRecoveryNodes() result = true; break; } + + if (dms_reform_failed()) { + SSWaitStartupExit(); + result = false; + break; + } pg_usleep(REFORM_WAIT_TIME); } return result; diff --git a/src/gausskernel/ddes/adapter/ss_init.cpp b/src/gausskernel/ddes/adapter/ss_init.cpp index 666bdf9505c7877b557fc055eb87f04068d94bc7..b9ec4ada75d0bff1252f932cb2451f6a82d9f90e 100644 --- a/src/gausskernel/ddes/adapter/ss_init.cpp +++ b/src/gausskernel/ddes/adapter/ss_init.cpp @@ -486,13 +486,7 @@ void DMSUninit() int32 DMSWaitReform() { uint32 has_offline; /* currently not used in openGauss */ - int ret = dms_wait_reform(&has_offline); - if (ret) { - while (g_instance.dms_cxt.SSReformInfo.in_reform) { - pg_usleep(5000L); - } - } - return ret; + return dms_wait_reform(&has_offline); } static bool DMSReformCheckStartup() @@ -530,4 +524,15 @@ bool DMSWaitInitStartup() } return true; +} + +void StartupWaitReform() +{ + while (g_instance.dms_cxt.SSReformInfo.in_reform) { + if (dms_reform_failed() || dms_reform_last_failed()) { + ereport(LOG, (errmsg("[SS reform] reform failed, startup no need wait."))); + break; + } + pg_usleep(5000L); + } } \ No newline at end of file diff --git a/src/gausskernel/storage/access/transam/xlog.cpp b/src/gausskernel/storage/access/transam/xlog.cpp index f830e6eec8fe630e60fca0070e02674f92445ef3..bcded19fa7d9b81737496da033eab7918bd2a3c3 100755 --- a/src/gausskernel/storage/access/transam/xlog.cpp +++ b/src/gausskernel/storage/access/transam/xlog.cpp @@ -10563,7 +10563,7 @@ void StartupXLOG(void) #endif if (ENABLE_DMS && ENABLE_REFORM && !SS_PRIMARY_DEMOTED && !DORADO_STANDBY_CLUSTER) { - DMSWaitReform(); + StartupWaitReform(); } } diff --git a/src/include/ddes/dms/ss_init.h b/src/include/ddes/dms/ss_init.h index 28451a991965e71a2dc0fcb6a3e6a74b6381509b..6bc61a5c030902e892231c02a66b9dd6d92c8e7d 100644 --- a/src/include/ddes/dms/ss_init.h +++ b/src/include/ddes/dms/ss_init.h @@ -44,5 +44,6 @@ bool DMSWaitInitStartup(); void DMSInitLogger(); void DMSRefreshLogger(char *log_field, unsigned long long *value); void GetSSLogPath(char *sslog_path); +void StartupWaitReform(); #endif