commit
dffef1f10d
|
@ -4642,21 +4642,24 @@ typedef struct SDNodeDynConfOption {
|
||||||
} SDNodeDynConfOption;
|
} SDNodeDynConfOption;
|
||||||
|
|
||||||
|
|
||||||
int32_t validateEp(char* ep) {
|
int32_t validateEp(char* ep) {
|
||||||
char buf[TSDB_EP_LEN + 1] = {0};
|
char buf[TSDB_EP_LEN + 1] = {0};
|
||||||
tstrncpy(buf, ep, TSDB_EP_LEN);
|
tstrncpy(buf, ep, TSDB_EP_LEN);
|
||||||
|
|
||||||
char *pos = strchr(buf, ':');
|
char* pos = strchr(buf, ':');
|
||||||
if (NULL == pos) {
|
if (NULL == pos) {
|
||||||
return TSDB_CODE_TSC_INVALID_SQL;
|
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) {
|
int32_t validateDNodeConfig(tDCLSQL* pOptions) {
|
||||||
|
@ -4664,13 +4667,13 @@ int32_t validateDNodeConfig(tDCLSQL* pOptions) {
|
||||||
return TSDB_CODE_TSC_INVALID_SQL;
|
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[] = {
|
const SDNodeDynConfOption DNODE_DYNAMIC_CFG_OPTIONS[] = {
|
||||||
{"resetLog", 8}, {"resetQueryCache", 15}, {"debugFlag", 9}, {"mDebugFlag", 10},
|
{"resetLog", 8}, {"resetQueryCache", 15}, {"debugFlag", 9}, {"mDebugFlag", 10},
|
||||||
{"dDebugFlag", 10}, {"sdbDebugFlag", 12}, {"vDebugFlag", 10}, {"cDebugFlag", 10},
|
{"dDebugFlag", 10}, {"sdbDebugFlag", 12}, {"vDebugFlag", 10}, {"cDebugFlag", 10},
|
||||||
{"httpDebugFlag", 13}, {"monitorDebugFlag", 16}, {"rpcDebugFlag", 12}, {"uDebugFlag", 10},
|
{"httpDebugFlag", 13}, {"monitorDebugFlag", 16}, {"rpcDebugFlag", 12}, {"uDebugFlag", 10},
|
||||||
{"tmrDebugFlag", 12}, {"qDebugflag", 10}, {"sDebugflag", 10}, {"tsdbDebugFlag", 13},
|
{"tmrDebugFlag", 12}, {"qDebugflag", 10}, {"sDebugflag", 10}, {"tsdbDebugFlag", 13},
|
||||||
{"monitor", 7}};
|
{"mqttDebugFlag", 13}, {"wDebugFlag", 10}, {"monitor", 7}};
|
||||||
|
|
||||||
SSQLToken* pOptionToken = &pOptions->a[1];
|
SSQLToken* pOptionToken = &pOptions->a[1];
|
||||||
|
|
||||||
|
@ -4694,7 +4697,7 @@ int32_t validateDNodeConfig(tDCLSQL* pOptions) {
|
||||||
SSQLToken* pValToken = &pOptions->a[2];
|
SSQLToken* pValToken = &pOptions->a[2];
|
||||||
|
|
||||||
int32_t val = strtol(pValToken->z, NULL, 10);
|
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 */
|
/* options value is out of valid range */
|
||||||
return TSDB_CODE_TSC_INVALID_SQL;
|
return TSDB_CODE_TSC_INVALID_SQL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -706,6 +706,7 @@ static void dnodeSendStatusMsg(void *handle, void *tmrId) {
|
||||||
|
|
||||||
// fill cluster cfg parameters
|
// fill cluster cfg parameters
|
||||||
pStatus->clusterCfg.numOfMnodes = htonl(tsNumOfMnodes);
|
pStatus->clusterCfg.numOfMnodes = htonl(tsNumOfMnodes);
|
||||||
|
pStatus->clusterCfg.enableBalance = htonl(tsEnableBalance);
|
||||||
pStatus->clusterCfg.mnodeEqualVnodeNum = htonl(tsMnodeEqualVnodeNum);
|
pStatus->clusterCfg.mnodeEqualVnodeNum = htonl(tsMnodeEqualVnodeNum);
|
||||||
pStatus->clusterCfg.offlineThreshold = htonl(tsOfflineThreshold);
|
pStatus->clusterCfg.offlineThreshold = htonl(tsOfflineThreshold);
|
||||||
pStatus->clusterCfg.statusInterval = htonl(tsStatusInterval);
|
pStatus->clusterCfg.statusInterval = htonl(tsStatusInterval);
|
||||||
|
|
|
@ -563,15 +563,16 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t numOfMnodes; // tsNumOfMnodes
|
int32_t numOfMnodes; // tsNumOfMnodes
|
||||||
|
int32_t enableBalance; // tsEnableBalance
|
||||||
int32_t mnodeEqualVnodeNum; // tsMnodeEqualVnodeNum
|
int32_t mnodeEqualVnodeNum; // tsMnodeEqualVnodeNum
|
||||||
int32_t offlineThreshold; // tsOfflineThreshold
|
int32_t offlineThreshold; // tsOfflineThreshold
|
||||||
int32_t statusInterval; // tsStatusInterval
|
int32_t statusInterval; // tsStatusInterval
|
||||||
|
int32_t maxtablesPerVnode;
|
||||||
|
int32_t maxVgroupsPerDb;
|
||||||
char arbitrator[TSDB_EP_LEN]; // tsArbitrator
|
char arbitrator[TSDB_EP_LEN]; // tsArbitrator
|
||||||
char timezone[64]; // tsTimezone
|
char timezone[64]; // tsTimezone
|
||||||
char locale[TSDB_LOCALE_LEN]; // tsLocale
|
char locale[TSDB_LOCALE_LEN]; // tsLocale
|
||||||
char charset[TSDB_LOCALE_LEN]; // tsCharset
|
char charset[TSDB_LOCALE_LEN]; // tsCharset
|
||||||
int32_t maxtablesPerVnode;
|
|
||||||
int32_t maxVgroupsPerDb;
|
|
||||||
} SClusterCfg;
|
} SClusterCfg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -269,18 +269,37 @@ void mnodeUpdateDnode(SDnodeObj *pDnode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) {
|
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;
|
SCMCfgDnodeMsg *pCmCfgDnode = pMsg->rpcMsg.pCont;
|
||||||
if (pCmCfgDnode->ep[0] == 0) {
|
if (pCmCfgDnode->ep[0] == 0) {
|
||||||
strcpy(pCmCfgDnode->ep, tsLocalEp);
|
tstrncpy(pCmCfgDnode->ep, tsLocalEp, TSDB_EP_LEN);
|
||||||
} else {
|
}
|
||||||
// TODO temporary disabled for compiling: strcpy(pCmCfgDnode->ep, pCmCfgDnode->ep);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(pMsg->pUser->user, TSDB_DEFAULT_USER) != 0) {
|
int32_t dnodeId = 0;
|
||||||
return TSDB_CODE_MND_NO_RIGHTS;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromIp(pCmCfgDnode->ep);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
SMDCfgDnodeMsg *pMdCfgDnode = rpcMallocCont(sizeof(SMDCfgDnodeMsg));
|
SMDCfgDnodeMsg *pMdCfgDnode = rpcMallocCont(sizeof(SMDCfgDnodeMsg));
|
||||||
strcpy(pMdCfgDnode->ep, pCmCfgDnode->ep);
|
strcpy(pMdCfgDnode->ep, pCmCfgDnode->ep);
|
||||||
strcpy(pMdCfgDnode->config, pCmCfgDnode->config);
|
strcpy(pMdCfgDnode->config, pCmCfgDnode->config);
|
||||||
|
@ -292,9 +311,9 @@ static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) {
|
||||||
.pCont = pMdCfgDnode,
|
.pCont = pMdCfgDnode,
|
||||||
.contLen = sizeof(SMDCfgDnodeMsg)
|
.contLen = sizeof(SMDCfgDnodeMsg)
|
||||||
};
|
};
|
||||||
dnodeSendMsgToDnode(&ipSet, &rpcMdCfgDnodeMsg);
|
|
||||||
|
|
||||||
mInfo("dnode:%s, is configured by %s", pCmCfgDnode->ep, pMsg->pUser->user);
|
mInfo("dnode:%s, is configured by %s", pCmCfgDnode->ep, pMsg->pUser->user);
|
||||||
|
dnodeSendMsgToDnode(&ipSet, &rpcMdCfgDnodeMsg);
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -305,6 +324,7 @@ static void mnodeProcessCfgDnodeMsgRsp(SRpcMsg *rpcMsg) {
|
||||||
|
|
||||||
static bool mnodeCheckClusterCfgPara(const SClusterCfg *clusterCfg) {
|
static bool mnodeCheckClusterCfgPara(const SClusterCfg *clusterCfg) {
|
||||||
if (clusterCfg->numOfMnodes != htonl(tsNumOfMnodes)) return false;
|
if (clusterCfg->numOfMnodes != htonl(tsNumOfMnodes)) return false;
|
||||||
|
if (clusterCfg->enableBalance != htonl(tsEnableBalance)) return false;
|
||||||
if (clusterCfg->mnodeEqualVnodeNum != htonl(tsMnodeEqualVnodeNum)) return false;
|
if (clusterCfg->mnodeEqualVnodeNum != htonl(tsMnodeEqualVnodeNum)) return false;
|
||||||
if (clusterCfg->offlineThreshold != htonl(tsOfflineThreshold)) return false;
|
if (clusterCfg->offlineThreshold != htonl(tsOfflineThreshold)) return false;
|
||||||
if (clusterCfg->statusInterval != htonl(tsStatusInterval)) return false;
|
if (clusterCfg->statusInterval != htonl(tsStatusInterval)) return false;
|
||||||
|
|
|
@ -593,7 +593,7 @@ static int32_t mnodeGetVgroupMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *p
|
||||||
|
|
||||||
pShow->bytes[cols] = 4;
|
pShow->bytes[cols] = 4;
|
||||||
pSchema[cols].type = TSDB_DATA_TYPE_INT;
|
pSchema[cols].type = TSDB_DATA_TYPE_INT;
|
||||||
strcpy(pSchema[cols].name, "maxTables");
|
strcpy(pSchema[cols].name, "onlineVnodes");
|
||||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
|
@ -692,8 +692,15 @@ static int32_t mnodeRetrieveVgroups(SShowObj *pShow, char *data, int32_t rows, v
|
||||||
*(int32_t *)pWrite = taosIdPoolMaxSize(pVgroup->idPool);
|
*(int32_t *)pWrite = taosIdPoolMaxSize(pVgroup->idPool);
|
||||||
cols++;
|
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;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
*(int32_t *)pWrite = tsMaxTablePerVnode;
|
*(int32_t *)pWrite = onlineVnodes;
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
for (int32_t i = 0; i < pShow->maxReplica; ++i) {
|
for (int32_t i = 0; i < pShow->maxReplica; ++i) {
|
||||||
|
|
Loading…
Reference in New Issue