commit
2d38c78bb8
|
@ -1023,6 +1023,74 @@ append_string_info(char **optLines, const char *newContext)
|
||||||
return optLinesResult;
|
return optLinesResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
Function : IsLastNotNullReplconninfo
|
||||||
|
Description : determine if replconninfoX which is being set is the last one valid replconninfo
|
||||||
|
Input : optLines - postgres.conf info before changing
|
||||||
|
replconninfoX - replconninfo param name which is being set, eg "replconninfo1"
|
||||||
|
Output : None
|
||||||
|
Return : bool
|
||||||
|
*******************************************************************************/
|
||||||
|
static bool IsLastNotNullReplconninfo(char** optLines, char* replconninfoX)
|
||||||
|
{
|
||||||
|
int notNullReplconninfoNums = 0;
|
||||||
|
bool isReplconninfoXNull = true;
|
||||||
|
bool matchReplconninfoX = false;
|
||||||
|
char* p = NULL;
|
||||||
|
|
||||||
|
for (int i = 0; optLines != NULL && optLines[i] != NULL; i++) {
|
||||||
|
p = optLines[i];
|
||||||
|
/* Skip all the blanks at the begin of the optLine */
|
||||||
|
while (p != NULL && isspace((unsigned char)*p)) {
|
||||||
|
++p;
|
||||||
|
}
|
||||||
|
if (p == NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (*p == '#') {
|
||||||
|
++p;
|
||||||
|
while (p != NULL && isspace((unsigned char)*p)) {
|
||||||
|
++p;
|
||||||
|
}
|
||||||
|
/* replconninfoX must be invalid if it is commented*/
|
||||||
|
if (p != NULL && strncmp(p, replconninfoX, strlen(replconninfoX)) == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (p != NULL && strncmp(p, "replconninfo", strlen("replconninfo")) == 0) {
|
||||||
|
if (strncmp(p, replconninfoX, strlen(replconninfoX)) == 0) {
|
||||||
|
matchReplconninfoX = true;
|
||||||
|
}
|
||||||
|
p += strlen(replconninfoX);
|
||||||
|
/* Skip all the blanks between the param and '=' */
|
||||||
|
while (p != NULL && isspace((unsigned char)*p)) {
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
/* Skip '=' */
|
||||||
|
if (p != NULL && *p == '=') {
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
/* Skip all the blanks between the '=' and value */
|
||||||
|
while (p != NULL && isspace((unsigned char)*p)) {
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
if (p != NULL && strncmp(p, "''", strlen("''")) != 0 &&
|
||||||
|
strncmp(p, "\"\"", strlen("\"\"")) != 0) {
|
||||||
|
++notNullReplconninfoNums;
|
||||||
|
if (matchReplconninfoX) {
|
||||||
|
isReplconninfoXNull = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* return true if replconninfoX which is being set is the last one valid replconninfo */
|
||||||
|
if (notNullReplconninfoNums == 1 && !isReplconninfoXNull) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @@GaussDB@@
|
* @@GaussDB@@
|
||||||
* Brief :
|
* Brief :
|
||||||
|
@ -1114,6 +1182,14 @@ do_gucset(const char *action_type, const char *data_dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Give a warning if the last valid replconninfo is set to a invalid value currently */
|
||||||
|
if (strncmp(config_param[i], "replconninfo", strlen("replconninfo")) == 0 &&
|
||||||
|
config_value[i] != NULL && (strlen(config_value[i]) == 0 || strncmp(config_value[i], "''", strlen("''")) == 0) &&
|
||||||
|
IsLastNotNullReplconninfo(opt_lines, config_param[i])) {
|
||||||
|
write_stderr("\nWARNING: This is the last valid replConnInfo, once set to null, "
|
||||||
|
"the host role will be changed to Normal if the local_role is primary now.\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* find the line where guc parameter in */
|
/* find the line where guc parameter in */
|
||||||
lines_index = find_gucoption(opt_lines, config_param[i], NULL, NULL, &optvalue_off, &optvalue_len);
|
lines_index = find_gucoption(opt_lines, config_param[i], NULL, NULL, &optvalue_off, &optvalue_len);
|
||||||
/* get the type of gs_guc execution */
|
/* get the type of gs_guc execution */
|
||||||
|
|
|
@ -17699,6 +17699,22 @@ static bool check_replconninfo(char** newval, void** extra, GucSource source)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @@GaussDB@@
|
||||||
|
* Brief : Determine if all eight replconninfos are empty.
|
||||||
|
* Description :
|
||||||
|
* Notes :
|
||||||
|
*/
|
||||||
|
static inline bool GetReplCurArrayIsNull()
|
||||||
|
{
|
||||||
|
for (int i = 1; i < MAX_REPLNODE_NUM; i++) {
|
||||||
|
if (t_thrd.postmaster_cxt.ReplConnArray[i] != NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @@GaussDB@@
|
* @@GaussDB@@
|
||||||
* Brief : Parse replconninfo1.
|
* Brief : Parse replconninfo1.
|
||||||
|
@ -17720,6 +17736,12 @@ static void assign_replconninfo1(const char* newval, void* extra)
|
||||||
if (u_sess->attr.attr_storage.ReplConnInfoArr[1] != NULL && newval != NULL &&
|
if (u_sess->attr.attr_storage.ReplConnInfoArr[1] != NULL && newval != NULL &&
|
||||||
strcmp(u_sess->attr.attr_storage.ReplConnInfoArr[1], newval) != 0) {
|
strcmp(u_sess->attr.attr_storage.ReplConnInfoArr[1], newval) != 0) {
|
||||||
t_thrd.postmaster_cxt.ReplConnChanged[1] = true;
|
t_thrd.postmaster_cxt.ReplConnChanged[1] = true;
|
||||||
|
// perceive single --> primary_standby
|
||||||
|
if (t_thrd.postmaster_cxt.HaShmData != NULL &&
|
||||||
|
t_thrd.postmaster_cxt.HaShmData->current_mode == NORMAL_MODE &&
|
||||||
|
!GetReplCurArrayIsNull()) {
|
||||||
|
t_thrd.postmaster_cxt.HaShmData->current_mode = PRIMARY_MODE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9496,6 +9496,13 @@ static void check_and_reset_ha_listen_port(void)
|
||||||
signal_child(g_instance.pid_cxt.RemoteServicePID, SIGTERM);
|
signal_child(g_instance.pid_cxt.RemoteServicePID, SIGTERM);
|
||||||
|
|
||||||
ListenSocketRegulation();
|
ListenSocketRegulation();
|
||||||
|
|
||||||
|
if (t_thrd.postmaster_cxt.HaShmData != NULL &&
|
||||||
|
t_thrd.postmaster_cxt.HaShmData->repl_list_num == 0 &&
|
||||||
|
t_thrd.postmaster_cxt.HaShmData->current_mode == PRIMARY_MODE) {
|
||||||
|
t_thrd.postmaster_cxt.HaShmData->current_mode = NORMAL_MODE;
|
||||||
|
SetServerMode(NORMAL_MODE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue