diff --git a/src/bin/pg_ctl/pg_ctl.cpp b/src/bin/pg_ctl/pg_ctl.cpp index 2cea6a10a..fbe67d543 100755 --- a/src/bin/pg_ctl/pg_ctl.cpp +++ b/src/bin/pg_ctl/pg_ctl.cpp @@ -766,7 +766,7 @@ static ServerMode get_runmode(void) if (!strncmp(run_mode, "Cascade Standby", MAXRUNMODE)) return CASCADE_STANDBY_MODE; if (!strncmp(run_mode, "Main Standby", MAXRUNMODE)) - return STANDBY_MODE; + return MAIN_STANDBY_MODE; if (!strncmp(run_mode, "Pending", MAXRUNMODE)) return PENDING_MODE; if (!strncmp(run_mode, "Unknown", MAXRUNMODE)) @@ -2582,8 +2582,6 @@ static void do_switchover(uint32 term) int ret; char term_path[MAXPGPATH]; - bool is_cluster_standby = ss_read_dorado_config(); - pg_log(PG_WARNING, _("switchover term (%u)\n"), term); ret = snprintf_s(term_path, MAXPGPATH, MAXPGPATH - 1, "%s/term_file", pg_data); @@ -2623,10 +2621,8 @@ static void do_switchover(uint32 term) } origin_run_mode = run_mode = get_runmode(); - instance_config.dss.instance_id = get_instance_id(); - if ((run_mode == PRIMARY_MODE && !is_cluster_standby) || - (instance_config.dss.instance_id == ss_get_primary_id() && is_cluster_standby)) { + if ((run_mode == PRIMARY_MODE || run_mode == MAIN_STANDBY_MODE)) { pg_log(PG_WARNING, _("switchover completed (%s)\n"), pg_data); return; } else if (UNKNOWN_MODE == run_mode) { @@ -2716,38 +2712,25 @@ static void do_switchover(uint32 term) exit(1); } } - /* - * in share storage dorado cluster,the server mode of standby cluster not have primary - * we can determine whether it is completed by reading the node ID and primaryid + + if ((run_mode = get_runmode()) == origin_run_mode) { + pg_log(PG_PRINT, "."); + pg_usleep(1000000); /* 1 sec */ + } + /* + * we query the status of server, if connection is failed, it will + * retry 3 times. */ - if (is_cluster_standby) { - if (instance_config.dss.instance_id != ss_get_primary_id()) { - pg_log(PG_PRINT, "."); - pg_usleep(1000000); /* 1 sec */ - } else { - break; - } + else if (failed_count < 3) { + failed_count++; + pg_log(PG_PRINT, "."); + pg_usleep(1000000); /* 1 sec */ } else { - if ((run_mode = get_runmode()) == origin_run_mode) { - pg_log(PG_PRINT, "."); - pg_usleep(1000000); /* 1 sec */ - } - /* - * we query the status of server, if connection is failed, it will - * retry 3 times. - */ - else if (failed_count < 3) { - failed_count++; - pg_log(PG_PRINT, "."); - pg_usleep(1000000); /* 1 sec */ - } else { - break; - } + break; } } pg_log(PG_PRINT, _("\n")); - if ((!is_cluster_standby && origin_run_mode == STANDBY_MODE && run_mode != PRIMARY_MODE) || - (is_cluster_standby && instance_config.dss.instance_id != ss_get_primary_id()) || + if ((origin_run_mode == STANDBY_MODE && run_mode != PRIMARY_MODE && run_mode != MAIN_STANDBY_MODE) || (origin_run_mode == CASCADE_STANDBY_MODE && run_mode != STANDBY_MODE)) { pg_log(PG_WARNING, _("\n switchover timeout after %d seconds. please manually check the cluster status.\n"), wait_seconds); } else { diff --git a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp index 2b98b4f02..dcfe6e3ea 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp @@ -56,6 +56,12 @@ void SSWakeupRecovery(void) uint32 thread_num = (uint32)g_instance.ckpt_cxt_ctl->pgwr_procs.num; /* need make sure pagewriter started first */ bool need_recovery = true; + + if (DORADO_STANDBY_CLUSTER) { + g_instance.dms_cxt.SSRecoveryInfo.recovery_pause_flag = false; + return; + } + while (pg_atomic_read_u32(&g_instance.ckpt_cxt_ctl->current_page_writer_count) != thread_num) { if (!RecoveryInProgress()) { need_recovery = false; @@ -370,6 +376,9 @@ static void CBSwitchoverResult(void *db_handle, int result) } else { /* abort and restore state */ g_instance.dms_cxt.SSClusterState = NODESTATE_NORMAL; + if (DORADO_STANDBY_CLUSTER) { + g_instance.dms_cxt.SSReformInfo.in_reform = false; + } ereport(WARNING, (errmodule(MOD_DMS), errmsg("[SS switchover] Switchover failed, errno: %d.", result))); } } diff --git a/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp b/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp index 158d90615..540e4a4ee 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp @@ -145,6 +145,10 @@ bool SSRecoveryApplyDelay() return false; } + if (DORADO_STANDBY_CLUSTER) { + return true; + } + while (g_instance.dms_cxt.SSRecoveryInfo.recovery_pause_flag) { /* might change the trigger file's location */ RedoInterruptCallBack(); diff --git a/src/gausskernel/process/postmaster/postmaster.cpp b/src/gausskernel/process/postmaster/postmaster.cpp index 18b1f7d7e..6c70e3c27 100644 --- a/src/gausskernel/process/postmaster/postmaster.cpp +++ b/src/gausskernel/process/postmaster/postmaster.cpp @@ -10082,6 +10082,26 @@ static void sigusr1_handler(SIGNAL_ARGS) signal_child(g_instance.pid_cxt.WLMCollectPID, SIGTERM); } + if (g_instance.pid_cxt.UndoLauncherPID != 0 && DORADO_STANDBY_CLUSTER) { + signal_child(g_instance.pid_cxt.UndoLauncherPID, SIGTERM); + } +#ifndef ENABLE_MULTIPLE_NODES + if (g_instance.pid_cxt.ApplyLauncerPID != 0 && DORADO_STANDBY_CLUSTER) { + signal_child(g_instance.pid_cxt.ApplyLauncerPID, SIGTERM); + } +#endif + if (g_instance.pid_cxt.GlobalStatsPID != 0 && DORADO_STANDBY_CLUSTER) { + signal_child(g_instance.pid_cxt.GlobalStatsPID, SIGTERM); + } + + if (g_instance.pid_cxt.UndoRecyclerPID != 0 && DORADO_STANDBY_CLUSTER) { + signal_child(g_instance.pid_cxt.UndoRecyclerPID, SIGTERM); + } + + if (g_instance.pid_cxt.FaultMonitorPID != 0 && DORADO_STANDBY_CLUSTER) { + signal_child(g_instance.pid_cxt.FaultMonitorPID, SIGTERM); + } + pmState = PM_WAIT_BACKENDS; if (ENABLE_THREAD_POOL) { g_threadPoolControler->EnableAdjustPool(); diff --git a/src/gausskernel/storage/access/transam/xlog.cpp b/src/gausskernel/storage/access/transam/xlog.cpp index eeabee9a9..9838f64ec 100755 --- a/src/gausskernel/storage/access/transam/xlog.cpp +++ b/src/gausskernel/storage/access/transam/xlog.cpp @@ -10562,7 +10562,7 @@ void StartupXLOG(void) } #endif - if (ENABLE_DMS && ENABLE_REFORM && !SS_PRIMARY_DEMOTED) { + if (ENABLE_DMS && ENABLE_REFORM && !SS_PRIMARY_DEMOTED && !DORADO_STANDBY_CLUSTER) { DMSWaitReform(); } }