From 44cbc5a64424054fca839b689e8e201c9d8df69f Mon Sep 17 00:00:00 2001 From: zhang_xubo <2578876417@qq.com> Date: Tue, 23 Apr 2024 17:10:54 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"[=E6=B0=91=E7=94=9F=E9=93=B6=E8=A1=8C?= =?UTF-8?q?=E9=9C=80=E6=B1=82]cm=E4=B8=A4=E8=8A=82=E7=82=B9=E9=83=A8?= =?UTF-8?q?=E7=BD=B2cm=5Fserver.conf=E5=8F=82=E6=95=B0third=5Fparty=5Fgate?= =?UTF-8?q?way=5Fip=E6=94=AF=E6=8C=81=E4=BB=A5=E9=80=97=E5=8F=B7=E5=88=86?= =?UTF-8?q?=E9=9A=94"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 052f131ec920101349e007fbe0b92eaade6ac08e. --- src/cm_common/cm_misc.cpp | 23 +++++++++++--- src/cm_server/cms_monitor_main.cpp | 50 ++++-------------------------- 2 files changed, 24 insertions(+), 49 deletions(-) diff --git a/src/cm_common/cm_misc.cpp b/src/cm_common/cm_misc.cpp index 14e89e5..e0f90c0 100644 --- a/src/cm_common/cm_misc.cpp +++ b/src/cm_common/cm_misc.cpp @@ -1322,12 +1322,25 @@ status_t IsReachableIP(char *ip) if (ip == nullptr) { return CM_ERROR; } - + char tmpIp[CM_IP_LENGTH]; + int rc = -1; + rc = strcpy_s(tmpIp, CM_IP_LENGTH, ip); + securec_check_errno(rc, (void)rc); + char *saveptr = NULL; + char *token = strtok_r(tmpIp, ",", &saveptr); char cmd[MAXPGPATH] = {0}; - int rc = snprintf_s(cmd, MAXPGPATH, MAXPGPATH - 1, "timeout 2 ping -c 2 %s > /dev/null 2>&1", ip); - securec_check_intval(rc, (void)rc); - rc = system(cmd); - return rc == 0 ? CM_SUCCESS : CM_ERROR; + while (token != NULL) { + rc = memset_s(cmd, MAXPGPATH, 0, MAXPGPATH); + securec_check_errno(rc, (void)rc); + rc = snprintf_s(cmd, MAXPGPATH, MAXPGPATH - 1, "timeout 2 ping -c 2 %s > /dev/null 2>&1", token); + securec_check_intval(rc, (void)rc); + rc = system(cmd); + if (rc == 0) { + return CM_SUCCESS; + } + token = strtok_r(NULL, ",", &saveptr); + } + return CM_ERROR; } bool IsIPAddrValid(const char *ipAddr) diff --git a/src/cm_server/cms_monitor_main.cpp b/src/cm_server/cms_monitor_main.cpp index a3d6ae5..ca8a851 100644 --- a/src/cm_server/cms_monitor_main.cpp +++ b/src/cm_server/cms_monitor_main.cpp @@ -1047,52 +1047,15 @@ static inline void DdbSetDdbWorkMode(ddb_work_mode workMode, unsigned int voteNu } } -/* - if reachale is true: - all ip is reachable, return CM_SUCCESS - else return CM_ERROR - if reachale is false: - all ip is not reachable, return CM_SUCCESS - else return CM_ERROR -*/ -static status_t CheckAllIpStatus(char *ip, bool reachable) { - if (ip == nullptr) { - return CM_ERROR; - } - - char tmpIp[CM_IP_LENGTH]; - int rc = -1; - rc = strcpy_s(tmpIp, CM_IP_LENGTH, ip); - securec_check_errno(rc, (void)rc); - char *saveptr = NULL; - char *token = strtok_r(tmpIp, ",", &saveptr); - status_t ret = CM_SUCCESS; - bool flag = false; - while (token != NULL) { - if (reachable && IsReachableIP(token) != CM_SUCCESS) { - ret = CM_ERROR; - break; - } - else if (!reachable && IsReachableIP(token) == CM_SUCCESS) { - ret = CM_ERROR; - break; - } - flag = true; - token = strtok_r(NULL, ",", &saveptr); - } - - return flag ? ret : CM_ERROR; -} - static void DdbMinorityWorkModeSetInMajority() { uint32 minVoteNum = 1; - if (CheckAllIpStatus(g_paramsOn2Nodes.thirdPartyGatewayIp, true) == CM_SUCCESS) { - // all third party gateway is reachable, setting a small vote num to make sure current node works as primary. + if (IsReachableIP(g_paramsOn2Nodes.thirdPartyGatewayIp) == CM_SUCCESS) { + // third party gateway is reachable, setting a small vote num to make sure current node works as primary. write_runlog(LOG, "promote node to primary\n"); DdbSetDdbWorkMode(DDB_WORK_MODE_MINORITY, minVoteNum, 0); } else { - // not all third party gateway is reachable, setting a big vote num to make sure current node works as standby. + // third party gateway is not reachable, setting a big vote num to make sure current node works as standby. minVoteNum += MAX_VOTE_NUM; DdbSetDdbWorkMode(DDB_WORK_MODE_MINORITY, minVoteNum, 1); @@ -1116,11 +1079,10 @@ static void DdbMinorityWorkModeSetInMajority() static void DdbMinorityWorkModeSetInMinority() { uint32 minVoteNum = 1; - if (CheckAllIpStatus(g_paramsOn2Nodes.thirdPartyGatewayIp, true) == CM_SUCCESS && g_bigVoteNumInMinorityMode == 1) { + if (IsReachableIP(g_paramsOn2Nodes.thirdPartyGatewayIp) == CM_SUCCESS && g_bigVoteNumInMinorityMode == 1) { write_runlog(LOG, "reset minority work mode and become primary.\n"); DdbSetDdbWorkMode(DDB_WORK_MODE_MINORITY, minVoteNum, 0); - } else if (CheckAllIpStatus(g_paramsOn2Nodes.thirdPartyGatewayIp, false) == CM_SUCCESS && g_bigVoteNumInMinorityMode == 0) { - // every third party gateway is not reachable, setting a big vote num to make sure current node works as standby. + } else if (IsReachableIP(g_paramsOn2Nodes.thirdPartyGatewayIp) != CM_SUCCESS && g_bigVoteNumInMinorityMode == 0) { minVoteNum += MAX_VOTE_NUM; write_runlog(LOG, "reset minority work mode and become standby.\n"); DdbSetDdbWorkMode(DDB_WORK_MODE_MINORITY, minVoteNum, 1); @@ -1137,7 +1099,7 @@ static void DdbMinorityWorkModeSetInMinority() static void DdbMinorityWorkModeSetInStartup() { uint32 minVoteNum = 1; - if (CheckAllIpStatus(g_paramsOn2Nodes.thirdPartyGatewayIp, true) == CM_SUCCESS) { + if (IsReachableIP(g_paramsOn2Nodes.thirdPartyGatewayIp) == CM_SUCCESS) { write_runlog(LOG, "start up with minority work mode and minVoteNum: %d.\n", minVoteNum); DdbSetDdbWorkMode(DDB_WORK_MODE_MINORITY, minVoteNum, 0); } else {