!4589 解决双集群failover提前成功

Merge pull request !4589 from Carl/master
This commit is contained in:
opengauss_bot
2023-12-11 08:28:34 +00:00
committed by Gitee
4 changed files with 41 additions and 18 deletions

View File

@ -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);

View File

@ -28,6 +28,7 @@
SSInstanceConfig ss_instance_config = {
.dss = {
.enable_dss = false,
.enable_dorado = false,
.instance_id = 0,
.primaryInstId = -1,
.interNodeNum = 0,

View File

@ -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";
}

View File

@ -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;