From 86838afad284ce49e631ea63086c03b778a42e6a Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Thu, 16 Jul 2020 08:28:33 +0000 Subject: [PATCH] [TD-933] make alter dnode msg more easy to use --- src/client/src/tscSQLParser.c | 29 ++++++++++++++++------------- src/mnode/src/mnodeDnode.c | 33 ++++++++++++++++++++++++++------- src/mnode/src/mnodeVgroup.c | 11 +++++++++-- 3 files changed, 51 insertions(+), 22 deletions(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 9d80c7ed50..f76a1341d2 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -4642,21 +4642,24 @@ typedef struct SDNodeDynConfOption { } SDNodeDynConfOption; -int32_t validateEp(char* ep) { +int32_t validateEp(char* ep) { char buf[TSDB_EP_LEN + 1] = {0}; tstrncpy(buf, ep, TSDB_EP_LEN); - char *pos = strchr(buf, ':'); - if (NULL == pos) { - return TSDB_CODE_TSC_INVALID_SQL; + char* pos = strchr(buf, ':'); + if (NULL == pos) { + int32_t val = strtol(ep, NULL, 10); + if (val <= 0 || val > 65536) { + return TSDB_CODE_TSC_INVALID_SQL; + } + } else { + uint16_t port = atoi(pos + 1); + if (0 == port) { + return TSDB_CODE_TSC_INVALID_SQL; + } } - - uint16_t port = atoi(pos+1); - if (0 == port) { - return TSDB_CODE_TSC_INVALID_SQL; - } - return TSDB_CODE_SUCCESS; + return TSDB_CODE_SUCCESS; } int32_t validateDNodeConfig(tDCLSQL* pOptions) { @@ -4664,13 +4667,13 @@ int32_t validateDNodeConfig(tDCLSQL* pOptions) { return TSDB_CODE_TSC_INVALID_SQL; } - const int DNODE_DYNAMIC_CFG_OPTIONS_SIZE = 17; + const int DNODE_DYNAMIC_CFG_OPTIONS_SIZE = 19; const SDNodeDynConfOption DNODE_DYNAMIC_CFG_OPTIONS[] = { {"resetLog", 8}, {"resetQueryCache", 15}, {"debugFlag", 9}, {"mDebugFlag", 10}, {"dDebugFlag", 10}, {"sdbDebugFlag", 12}, {"vDebugFlag", 10}, {"cDebugFlag", 10}, {"httpDebugFlag", 13}, {"monitorDebugFlag", 16}, {"rpcDebugFlag", 12}, {"uDebugFlag", 10}, {"tmrDebugFlag", 12}, {"qDebugflag", 10}, {"sDebugflag", 10}, {"tsdbDebugFlag", 13}, - {"monitor", 7}}; + {"mqttDebugFlag", 13}, {"wDebugFlag", 10}, {"monitor", 7}}; SSQLToken* pOptionToken = &pOptions->a[1]; @@ -4694,7 +4697,7 @@ int32_t validateDNodeConfig(tDCLSQL* pOptions) { SSQLToken* pValToken = &pOptions->a[2]; int32_t val = strtol(pValToken->z, NULL, 10); - if (val < 131 || val > 199) { + if (val < 0 || val > 256) { /* options value is out of valid range */ return TSDB_CODE_TSC_INVALID_SQL; } diff --git a/src/mnode/src/mnodeDnode.c b/src/mnode/src/mnodeDnode.c index 6af0a925f0..06d79bd7e1 100644 --- a/src/mnode/src/mnodeDnode.c +++ b/src/mnode/src/mnodeDnode.c @@ -269,18 +269,37 @@ void mnodeUpdateDnode(SDnodeObj *pDnode) { } static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) { + if (strcmp(pMsg->pUser->user, TSDB_DEFAULT_USER) != 0) { + mError("failed to cfg dnode, no rights"); + return TSDB_CODE_MND_NO_RIGHTS; + } + SCMCfgDnodeMsg *pCmCfgDnode = pMsg->rpcMsg.pCont; if (pCmCfgDnode->ep[0] == 0) { - strcpy(pCmCfgDnode->ep, tsLocalEp); - } else { - // TODO temporary disabled for compiling: strcpy(pCmCfgDnode->ep, pCmCfgDnode->ep); + tstrncpy(pCmCfgDnode->ep, tsLocalEp, TSDB_EP_LEN); + } + + int32_t dnodeId = 0; + char* pos = strchr(pCmCfgDnode->ep, ':'); + if (NULL == pos) { + dnodeId = strtol(pCmCfgDnode->ep, NULL, 10); + if (dnodeId <= 0 || dnodeId > 65536) { + mError("failed to cfg dnode, invalid dnodeId:%s", pCmCfgDnode->ep); + return TSDB_CODE_MND_DNODE_NOT_EXIST; + } } - if (strcmp(pMsg->pUser->user, TSDB_DEFAULT_USER) != 0) { - return TSDB_CODE_MND_NO_RIGHTS; + SRpcIpSet ipSet = mnodeGetIpSetFromIp(pCmCfgDnode->ep); + if (dnodeId != 0) { + SDnodeObj *pDnode = mnodeGetDnode(dnodeId); + if (pDnode == NULL) { + mError("failed to cfg dnode, invalid dnodeId:%d", dnodeId); + return TSDB_CODE_MND_DNODE_NOT_EXIST; + } + ipSet = mnodeGetIpSetFromIp(pDnode->dnodeEp); + mnodeDecDnodeRef(pDnode); } - SRpcIpSet ipSet = mnodeGetIpSetFromIp(pCmCfgDnode->ep); SMDCfgDnodeMsg *pMdCfgDnode = rpcMallocCont(sizeof(SMDCfgDnodeMsg)); strcpy(pMdCfgDnode->ep, pCmCfgDnode->ep); strcpy(pMdCfgDnode->config, pCmCfgDnode->config); @@ -292,9 +311,9 @@ static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) { .pCont = pMdCfgDnode, .contLen = sizeof(SMDCfgDnodeMsg) }; - dnodeSendMsgToDnode(&ipSet, &rpcMdCfgDnodeMsg); mInfo("dnode:%s, is configured by %s", pCmCfgDnode->ep, pMsg->pUser->user); + dnodeSendMsgToDnode(&ipSet, &rpcMdCfgDnodeMsg); return TSDB_CODE_SUCCESS; } diff --git a/src/mnode/src/mnodeVgroup.c b/src/mnode/src/mnodeVgroup.c index 8b4d62a8b0..8c8aa5fb31 100644 --- a/src/mnode/src/mnodeVgroup.c +++ b/src/mnode/src/mnodeVgroup.c @@ -593,7 +593,7 @@ static int32_t mnodeGetVgroupMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *p pShow->bytes[cols] = 4; pSchema[cols].type = TSDB_DATA_TYPE_INT; - strcpy(pSchema[cols].name, "maxTables"); + strcpy(pSchema[cols].name, "onlineVnodes"); pSchema[cols].bytes = htons(pShow->bytes[cols]); cols++; @@ -692,8 +692,15 @@ static int32_t mnodeRetrieveVgroups(SShowObj *pShow, char *data, int32_t rows, v *(int32_t *)pWrite = taosIdPoolMaxSize(pVgroup->idPool); cols++; + int32_t onlineVnodes = 0; + for (int32_t i = 0; i < pShow->maxReplica; ++i) { + if (pVgroup->vnodeGid[i].role == TAOS_SYNC_ROLE_SLAVE || pVgroup->vnodeGid[i].role == TAOS_SYNC_ROLE_MASTER) { + onlineVnodes++; + } + } + pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; - *(int32_t *)pWrite = tsMaxTablePerVnode; + *(int32_t *)pWrite = onlineVnodes; cols++; for (int32_t i = 0; i < pShow->maxReplica; ++i) { -- GitLab