From e52e29d2588eabb31d7eff11b3262b97b12cbbcb Mon Sep 17 00:00:00 2001 From: chenzhikai <895543892@qq.com> Date: Fri, 8 Dec 2023 17:21:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=8F=8C=E9=9B=86=E7=BE=A4fa?= =?UTF-8?q?ilover=E6=8F=90=E5=89=8D=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bin/pg_ctl/pg_ctl.cpp | 53 +++++++++++++------ src/common/port/tool_common.cpp | 1 + .../process/postmaster/postmaster.cpp | 4 +- src/include/tool_common.h | 1 + 4 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/bin/pg_ctl/pg_ctl.cpp b/src/bin/pg_ctl/pg_ctl.cpp index aec67eebd..dd82cb9f4 100755 --- a/src/bin/pg_ctl/pg_ctl.cpp +++ b/src/bin/pg_ctl/pg_ctl.cpp @@ -2192,21 +2192,35 @@ static void do_failover(uint32 term) } origin_run_mode = run_mode = get_runmode(); - if (run_mode == PRIMARY_MODE) { - pg_log(PG_WARNING, _(" failover completed (%s)\n"), pg_data); - return; - } else if (run_mode == UNKNOWN_MODE) { - pg_log(PG_WARNING, - _(" cannot failover server:" - "server mode is unknown\n")); - exit(1); - } - /* failover executed only in standby server */ - else if (run_mode != STANDBY_MODE && run_mode != CASCADE_STANDBY_MODE && run_mode != MAIN_STANDBY_MODE) { - pg_log(PG_WARNING, - _(" cannot failover server; " - "server is not in standby or cascade standby mode\n")); - exit(1); + if (ss_instance_config.dss.enable_dorado) { + if (run_mode == PRIMARY_MODE) { + pg_log(PG_WARNING, + _(" failover completed; " + "server is primary node yet\n")); + return; + } else if (run_mode != MAIN_STANDBY_MODE) { + pg_log(PG_WARNING, + _(" cannot failover server; " + "server is not main standby node in ss dorado cluster\n")); + exit(1); + } + } else { + if (run_mode == PRIMARY_MODE) { + pg_log(PG_WARNING, _(" failover completed (%s)\n"), pg_data); + return; + } else if (run_mode == UNKNOWN_MODE) { + pg_log(PG_WARNING, + _(" cannot failover server:" + "server mode is unknown\n")); + exit(1); + } + /* failover executed only in standby server */ + else if (run_mode != STANDBY_MODE && run_mode != CASCADE_STANDBY_MODE && run_mode != MAIN_STANDBY_MODE) { + pg_log(PG_WARNING, + _(" cannot failover server; " + "server is not in standby or cascade standby mode\n")); + exit(1); + } } if (g_dcfEnabled) { @@ -2271,8 +2285,9 @@ static void do_failover(uint32 term) } if ((origin_run_mode == STANDBY_MODE && get_runmode() != PRIMARY_MODE) || + (origin_run_mode == MAIN_STANDBY_MODE && get_runmode() != PRIMARY_MODE) || (origin_run_mode == CASCADE_STANDBY_MODE && get_runmode() != STANDBY_MODE)) { - pg_log(PG_WARNING, _(" failed\n")); + pg_log(PG_WARNING, _(" \nfailover timeout after %d seconds. please manually check the cluster status or backtrack log.\n"), wait_seconds); pg_log(PG_WARNING, _(" failover failed (%s)\n"), pg_data); exit(1); } @@ -7374,6 +7389,7 @@ bool ss_read_config(void) { char config_file[MAXPGPATH] = {0}; char enable_dss[MAXPGPATH] = {0}; + char enable_dorado[MAXPGPATH] = {0}; char inst_id[MAXPGPATH] = {0}; char interconnect_url[MAXPGPATH] = {0}; char** optlines = NULL; @@ -7393,6 +7409,11 @@ bool ss_read_config(void) return false; } + (void)find_guc_optval((const char**)optlines, "ss_enable_dorado", enable_dorado); + if(strcmp(enable_dorado, "on") == 0) { + ss_instance_config.dss.enable_dorado = true; + } + ss_instance_config.dss.enable_dss = true; ss_instance_config.dss.socketpath = (char*)malloc(sizeof(char) * MAXPGPATH); ss_instance_config.dss.vgname = (char*)malloc(sizeof(char) * MAXPGPATH); diff --git a/src/common/port/tool_common.cpp b/src/common/port/tool_common.cpp index fc51858c4..f312a4345 100644 --- a/src/common/port/tool_common.cpp +++ b/src/common/port/tool_common.cpp @@ -28,6 +28,7 @@ SSInstanceConfig ss_instance_config = { .dss = { .enable_dss = false, + .enable_dorado = false, .instance_id = 0, .primaryInstId = -1, .interNodeNum = 0, diff --git a/src/gausskernel/process/postmaster/postmaster.cpp b/src/gausskernel/process/postmaster/postmaster.cpp index ec122ec01..bc190a7c4 100644 --- a/src/gausskernel/process/postmaster/postmaster.cpp +++ b/src/gausskernel/process/postmaster/postmaster.cpp @@ -15132,8 +15132,8 @@ void InitShmemForDmsCallBack() const char *GetSSServerMode(ServerMode mode) { - if (IS_SHARED_STORAGE_MODE || SS_REPLICATION_DORADO_CLUSTER) { - if (SS_OFFICIAL_PRIMARY && (mode == PRIMARY_MODE || mode == NORMAL_MODE)) { + if (SS_REPLICATION_DORADO_CLUSTER) { + if (SS_OFFICIAL_PRIMARY && mode == PRIMARY_MODE) { return "Primary"; } diff --git a/src/include/tool_common.h b/src/include/tool_common.h index 9329550cd..555ed4fdd 100644 --- a/src/include/tool_common.h +++ b/src/include/tool_common.h @@ -110,6 +110,7 @@ typedef struct st_datadir_t { /* DSS conntct parameters */ typedef struct DssOptions { bool enable_dss; + bool enable_dorado; int instance_id; int primaryInstId; int interNodeNum;