Merge branch 'develop' into feature/2.0tsdb
This commit is contained in:
commit
1e21eaff1b
|
@ -268,7 +268,7 @@ bool hasMoreClauseToTry(SSqlObj* pSql);
|
||||||
void tscTryQueryNextVnode(SSqlObj *pSql, __async_cb_func_t fp);
|
void tscTryQueryNextVnode(SSqlObj *pSql, __async_cb_func_t fp);
|
||||||
void tscAsyncQuerySingleRowForNextVnode(void *param, TAOS_RES *tres, int numOfRows);
|
void tscAsyncQuerySingleRowForNextVnode(void *param, TAOS_RES *tres, int numOfRows);
|
||||||
void tscTryQueryNextClause(SSqlObj* pSql, __async_cb_func_t fp);
|
void tscTryQueryNextClause(SSqlObj* pSql, __async_cb_func_t fp);
|
||||||
int tscSetMgmtIpListFromCfg(const char *first, const char *second);
|
int tscSetMgmtEpSetFromCfg(const char *first, const char *second);
|
||||||
|
|
||||||
void* malloc_throw(size_t size);
|
void* malloc_throw(size_t size);
|
||||||
void* calloc_throw(size_t nmemb, size_t size);
|
void* calloc_throw(size_t nmemb, size_t size);
|
||||||
|
|
|
@ -306,7 +306,7 @@ typedef struct SSqlObj {
|
||||||
char * sqlstr;
|
char * sqlstr;
|
||||||
char retry;
|
char retry;
|
||||||
char maxRetry;
|
char maxRetry;
|
||||||
SRpcIpSet ipList;
|
SRpcEpSet epSet;
|
||||||
char listed;
|
char listed;
|
||||||
tsem_t rspSem;
|
tsem_t rspSem;
|
||||||
SSqlCmd cmd;
|
SSqlCmd cmd;
|
||||||
|
@ -350,7 +350,7 @@ void tscInitMsgsFp();
|
||||||
|
|
||||||
int tsParseSql(SSqlObj *pSql, bool initial);
|
int tsParseSql(SSqlObj *pSql, bool initial);
|
||||||
|
|
||||||
void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcIpSet *pIpSet);
|
void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet);
|
||||||
int tscProcessSql(SSqlObj *pSql);
|
int tscProcessSql(SSqlObj *pSql);
|
||||||
|
|
||||||
int tscRenewTableMeta(SSqlObj *pSql, char *tableId);
|
int tscRenewTableMeta(SSqlObj *pSql, char *tableId);
|
||||||
|
@ -456,7 +456,7 @@ extern void * tscQhandle;
|
||||||
extern int tscKeepConn[];
|
extern int tscKeepConn[];
|
||||||
extern int tsInsertHeadSize;
|
extern int tsInsertHeadSize;
|
||||||
extern int tscNumOfThreads;
|
extern int tscNumOfThreads;
|
||||||
extern SRpcIpSet tscMgmtIpSet;
|
extern SRpcEpSet tscMgmtEpSet;
|
||||||
|
|
||||||
extern int (*tscBuildMsg[TSDB_SQL_MAX])(SSqlObj *pSql, SSqlInfo *pInfo);
|
extern int (*tscBuildMsg[TSDB_SQL_MAX])(SSqlObj *pSql, SSqlInfo *pInfo);
|
||||||
|
|
||||||
|
|
|
@ -2355,9 +2355,9 @@ bool validateIpAddress(const char* ip, size_t size) {
|
||||||
|
|
||||||
strncpy(tmp, ip, size);
|
strncpy(tmp, ip, size);
|
||||||
|
|
||||||
in_addr_t ipAddr = inet_addr(tmp);
|
in_addr_t epAddr = inet_addr(tmp);
|
||||||
|
|
||||||
return ipAddr != INADDR_NONE;
|
return epAddr != INADDR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tscTansformSQLFuncForSTableQuery(SQueryInfo* pQueryInfo) {
|
int32_t tscTansformSQLFuncForSTableQuery(SQueryInfo* pQueryInfo) {
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
|
|
||||||
#define TSC_MGMT_VNODE 999
|
#define TSC_MGMT_VNODE 999
|
||||||
|
|
||||||
SRpcIpSet tscMgmtIpSet;
|
SRpcEpSet tscMgmtEpSet;
|
||||||
SRpcIpSet tscDnodeIpSet;
|
SRpcEpSet tscDnodeEpSet;
|
||||||
|
|
||||||
int (*tscBuildMsg[TSDB_SQL_MAX])(SSqlObj *pSql, SSqlInfo *pInfo) = {0};
|
int (*tscBuildMsg[TSDB_SQL_MAX])(SSqlObj *pSql, SSqlInfo *pInfo) = {0};
|
||||||
|
|
||||||
|
@ -44,44 +44,44 @@ void tscSaveSubscriptionProgress(void* sub);
|
||||||
|
|
||||||
static int32_t minMsgSize() { return tsRpcHeadSize + 100; }
|
static int32_t minMsgSize() { return tsRpcHeadSize + 100; }
|
||||||
|
|
||||||
static void tscSetDnodeIpList(SSqlObj* pSql, SCMVgroupInfo* pVgroupInfo) {
|
static void tscSetDnodeEpSet(SSqlObj* pSql, SCMVgroupInfo* pVgroupInfo) {
|
||||||
SRpcIpSet* pIpList = &pSql->ipList;
|
SRpcEpSet* pEpSet = &pSql->epSet;
|
||||||
pIpList->inUse = 0;
|
pEpSet->inUse = 0;
|
||||||
if (pVgroupInfo == NULL) {
|
if (pVgroupInfo == NULL) {
|
||||||
pIpList->numOfIps = 0;
|
pEpSet->numOfEps = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pIpList->numOfIps = pVgroupInfo->numOfIps;
|
pEpSet->numOfEps = pVgroupInfo->numOfEps;
|
||||||
for(int32_t i = 0; i < pVgroupInfo->numOfIps; ++i) {
|
for(int32_t i = 0; i < pVgroupInfo->numOfEps; ++i) {
|
||||||
strcpy(pIpList->fqdn[i], pVgroupInfo->ipAddr[i].fqdn);
|
strcpy(pEpSet->fqdn[i], pVgroupInfo->epAddr[i].fqdn);
|
||||||
pIpList->port[i] = pVgroupInfo->ipAddr[i].port;
|
pEpSet->port[i] = pVgroupInfo->epAddr[i].port;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tscPrintMgmtIp() {
|
void tscPrintMgmtEp() {
|
||||||
if (tscMgmtIpSet.numOfIps <= 0) {
|
if (tscMgmtEpSet.numOfEps <= 0) {
|
||||||
tscError("invalid mnode IP list:%d", tscMgmtIpSet.numOfIps);
|
tscError("invalid mnode EP list:%d", tscMgmtEpSet.numOfEps);
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < tscMgmtIpSet.numOfIps; ++i) {
|
for (int i = 0; i < tscMgmtEpSet.numOfEps; ++i) {
|
||||||
tscDebug("mnode index:%d %s:%d", i, tscMgmtIpSet.fqdn[i], tscMgmtIpSet.port[i]);
|
tscDebug("mnode index:%d %s:%d", i, tscMgmtEpSet.fqdn[i], tscMgmtEpSet.port[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tscSetMgmtIpList(SRpcIpSet *pIpList) {
|
void tscSetMgmtEpSet(SRpcEpSet *pEpSet) {
|
||||||
tscMgmtIpSet.numOfIps = pIpList->numOfIps;
|
tscMgmtEpSet.numOfEps = pEpSet->numOfEps;
|
||||||
tscMgmtIpSet.inUse = pIpList->inUse;
|
tscMgmtEpSet.inUse = pEpSet->inUse;
|
||||||
for (int32_t i = 0; i < tscMgmtIpSet.numOfIps; ++i) {
|
for (int32_t i = 0; i < tscMgmtEpSet.numOfEps; ++i) {
|
||||||
tscMgmtIpSet.port[i] = htons(pIpList->port[i]);
|
tscMgmtEpSet.port[i] = htons(pEpSet->port[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tscUpdateIpSet(void *ahandle, SRpcIpSet *pIpSet) {
|
void tscUpdateEpSet(void *ahandle, SRpcEpSet *pEpSet) {
|
||||||
tscMgmtIpSet = *pIpSet;
|
tscMgmtEpSet = *pEpSet;
|
||||||
tscDebug("mnode IP list is changed for ufp is called, numOfIps:%d inUse:%d", tscMgmtIpSet.numOfIps, tscMgmtIpSet.inUse);
|
tscDebug("mnode EP list is changed for ufp is called, numOfEps:%d inUse:%d", tscMgmtEpSet.numOfEps, tscMgmtEpSet.inUse);
|
||||||
for (int32_t i = 0; i < tscMgmtIpSet.numOfIps; ++i) {
|
for (int32_t i = 0; i < tscMgmtEpSet.numOfEps; ++i) {
|
||||||
tscDebug("index:%d fqdn:%s port:%d", i, tscMgmtIpSet.fqdn[i], tscMgmtIpSet.port[i]);
|
tscDebug("index:%d fqdn:%s port:%d", i, tscMgmtEpSet.fqdn[i], tscMgmtEpSet.port[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ void tscUpdateIpSet(void *ahandle, SRpcIpSet *pIpSet) {
|
||||||
UNUSED_FUNC
|
UNUSED_FUNC
|
||||||
static int32_t tscGetMgmtConnMaxRetryTimes() {
|
static int32_t tscGetMgmtConnMaxRetryTimes() {
|
||||||
int32_t factor = 2;
|
int32_t factor = 2;
|
||||||
return tscMgmtIpSet.numOfIps * factor;
|
return tscMgmtEpSet.numOfEps * factor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
|
void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
|
||||||
|
@ -111,9 +111,9 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
|
||||||
|
|
||||||
if (code == 0) {
|
if (code == 0) {
|
||||||
SCMHeartBeatRsp *pRsp = (SCMHeartBeatRsp *)pRes->pRsp;
|
SCMHeartBeatRsp *pRsp = (SCMHeartBeatRsp *)pRes->pRsp;
|
||||||
SRpcIpSet * pIpList = &pRsp->ipList;
|
SRpcEpSet * pEpSet = &pRsp->epSet;
|
||||||
if (pIpList->numOfIps > 0)
|
if (pEpSet->numOfEps > 0)
|
||||||
tscSetMgmtIpList(pIpList);
|
tscSetMgmtEpSet(pEpSet);
|
||||||
|
|
||||||
pSql->pTscObj->connId = htonl(pRsp->connId);
|
pSql->pTscObj->connId = htonl(pRsp->connId);
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ int tscSendMsgToServer(SSqlObj *pSql) {
|
||||||
|
|
||||||
// set the mgmt ip list
|
// set the mgmt ip list
|
||||||
if (pSql->cmd.command >= TSDB_SQL_MGMT) {
|
if (pSql->cmd.command >= TSDB_SQL_MGMT) {
|
||||||
pSql->ipList = tscMgmtIpSet;
|
pSql->epSet = tscMgmtEpSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(pMsg, pSql->cmd.payload, pSql->cmd.payloadLen);
|
memcpy(pMsg, pSql->cmd.payload, pSql->cmd.payloadLen);
|
||||||
|
@ -203,11 +203,11 @@ int tscSendMsgToServer(SSqlObj *pSql) {
|
||||||
// Otherwise, the pSql object may have been released already during the response function, which is
|
// Otherwise, the pSql object may have been released already during the response function, which is
|
||||||
// processMsgFromServer function. In the meanwhile, the assignment of the rpc context to sql object will absolutely
|
// processMsgFromServer function. In the meanwhile, the assignment of the rpc context to sql object will absolutely
|
||||||
// cause crash.
|
// cause crash.
|
||||||
rpcSendRequest(pObj->pDnodeConn, &pSql->ipList, &rpcMsg);
|
rpcSendRequest(pObj->pDnodeConn, &pSql->epSet, &rpcMsg);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcIpSet *pIpSet) {
|
void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
||||||
SSqlObj *pSql = (SSqlObj *)rpcMsg->ahandle;
|
SSqlObj *pSql = (SSqlObj *)rpcMsg->ahandle;
|
||||||
if (pSql == NULL || pSql->signature != pSql) {
|
if (pSql == NULL || pSql->signature != pSql) {
|
||||||
tscError("%p sql is already released", pSql);
|
tscError("%p sql is already released", pSql);
|
||||||
|
@ -237,9 +237,9 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcIpSet *pIpSet) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCmd->command < TSDB_SQL_MGMT) {
|
if (pCmd->command < TSDB_SQL_MGMT) {
|
||||||
if (pIpSet) pSql->ipList = *pIpSet;
|
if (pEpSet) pSql->epSet = *pEpSet;
|
||||||
} else {
|
} else {
|
||||||
if (pIpSet) tscMgmtIpSet = *pIpSet;
|
if (pEpSet) tscMgmtEpSet = *pEpSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rpcMsg->pCont == NULL) {
|
if (rpcMsg->pCont == NULL) {
|
||||||
|
@ -421,7 +421,7 @@ int tscProcessSql(SSqlObj *pSql) {
|
||||||
return pSql->res.code;
|
return pSql->res.code;
|
||||||
}
|
}
|
||||||
} else if (pCmd->command < TSDB_SQL_LOCAL) {
|
} else if (pCmd->command < TSDB_SQL_LOCAL) {
|
||||||
pSql->ipList = tscMgmtIpSet;
|
pSql->epSet = tscMgmtEpSet;
|
||||||
} else { // local handler
|
} else { // local handler
|
||||||
return (*tscProcessMsgRsp[pCmd->command])(pSql);
|
return (*tscProcessMsgRsp[pCmd->command])(pSql);
|
||||||
}
|
}
|
||||||
|
@ -525,10 +525,10 @@ int tscBuildSubmitMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
|
|
||||||
// pSql->cmd.payloadLen is set during copying data into payload
|
// pSql->cmd.payloadLen is set during copying data into payload
|
||||||
pSql->cmd.msgType = TSDB_MSG_TYPE_SUBMIT;
|
pSql->cmd.msgType = TSDB_MSG_TYPE_SUBMIT;
|
||||||
tscSetDnodeIpList(pSql, &pTableMeta->vgroupInfo);
|
tscSetDnodeEpSet(pSql, &pTableMeta->vgroupInfo);
|
||||||
|
|
||||||
tscDebug("%p build submit msg, vgId:%d numOfTables:%d numberOfIP:%d", pSql, vgId, pSql->cmd.numOfTablesInSubmit,
|
tscDebug("%p build submit msg, vgId:%d numOfTables:%d numberOfEP:%d", pSql, vgId, pSql->cmd.numOfTablesInSubmit,
|
||||||
pSql->ipList.numOfIps);
|
pSql->epSet.numOfEps);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -568,7 +568,7 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
|
||||||
pVgroupInfo = &pTableMeta->vgroupInfo;
|
pVgroupInfo = &pTableMeta->vgroupInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
tscSetDnodeIpList(pSql, pVgroupInfo);
|
tscSetDnodeEpSet(pSql, pVgroupInfo);
|
||||||
if (pVgroupInfo != NULL) {
|
if (pVgroupInfo != NULL) {
|
||||||
pQueryMsg->head.vgId = htonl(pVgroupInfo->vgId);
|
pQueryMsg->head.vgId = htonl(pVgroupInfo->vgId);
|
||||||
}
|
}
|
||||||
|
@ -580,7 +580,7 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
|
||||||
|
|
||||||
pQueryMsg->numOfTables = htonl(1); // set the number of tables
|
pQueryMsg->numOfTables = htonl(1); // set the number of tables
|
||||||
pMsg += sizeof(STableIdInfo);
|
pMsg += sizeof(STableIdInfo);
|
||||||
} else { // it is a subquery of the super table query, this IP info is acquired from vgroupInfo
|
} else { // it is a subquery of the super table query, this EP info is acquired from vgroupInfo
|
||||||
int32_t index = pTableMetaInfo->vgroupIndex;
|
int32_t index = pTableMetaInfo->vgroupIndex;
|
||||||
int32_t numOfVgroups = taosArrayGetSize(pTableMetaInfo->pVgroupTables);
|
int32_t numOfVgroups = taosArrayGetSize(pTableMetaInfo->pVgroupTables);
|
||||||
assert(index >= 0 && index < numOfVgroups);
|
assert(index >= 0 && index < numOfVgroups);
|
||||||
|
@ -590,7 +590,7 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
|
||||||
SVgroupTableInfo* pTableIdList = taosArrayGet(pTableMetaInfo->pVgroupTables, index);
|
SVgroupTableInfo* pTableIdList = taosArrayGet(pTableMetaInfo->pVgroupTables, index);
|
||||||
|
|
||||||
// set the vgroup info
|
// set the vgroup info
|
||||||
tscSetDnodeIpList(pSql, &pTableIdList->vgInfo);
|
tscSetDnodeEpSet(pSql, &pTableIdList->vgInfo);
|
||||||
pQueryMsg->head.vgId = htonl(pTableIdList->vgInfo.vgId);
|
pQueryMsg->head.vgId = htonl(pTableIdList->vgInfo.vgId);
|
||||||
|
|
||||||
int32_t numOfTables = taosArrayGetSize(pTableIdList->itemList);
|
int32_t numOfTables = taosArrayGetSize(pTableIdList->itemList);
|
||||||
|
@ -1323,7 +1323,7 @@ int tscBuildUpdateTagMsg(SSqlObj* pSql, SSqlInfo *pInfo) {
|
||||||
SQueryInfo * pQueryInfo = tscGetQueryInfoDetail(pCmd, 0);
|
SQueryInfo * pQueryInfo = tscGetQueryInfoDetail(pCmd, 0);
|
||||||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||||
|
|
||||||
tscSetDnodeIpList(pSql, &pTableMetaInfo->pTableMeta->vgroupInfo);
|
tscSetDnodeEpSet(pSql, &pTableMetaInfo->pTableMeta->vgroupInfo);
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1658,8 +1658,8 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
|
||||||
pMetaMsg->contLen = htons(pMetaMsg->contLen);
|
pMetaMsg->contLen = htons(pMetaMsg->contLen);
|
||||||
pMetaMsg->numOfColumns = htons(pMetaMsg->numOfColumns);
|
pMetaMsg->numOfColumns = htons(pMetaMsg->numOfColumns);
|
||||||
|
|
||||||
if (pMetaMsg->sid < 0 || pMetaMsg->vgroup.numOfIps < 0) {
|
if (pMetaMsg->sid < 0 || pMetaMsg->vgroup.numOfEps < 0) {
|
||||||
tscError("invalid meter vgId:%d, sid%d", pMetaMsg->vgroup.numOfIps, pMetaMsg->sid);
|
tscError("invalid meter vgId:%d, sid%d", pMetaMsg->vgroup.numOfEps, pMetaMsg->sid);
|
||||||
return TSDB_CODE_TSC_INVALID_VALUE;
|
return TSDB_CODE_TSC_INVALID_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1673,8 +1673,8 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
|
||||||
return TSDB_CODE_TSC_INVALID_VALUE;
|
return TSDB_CODE_TSC_INVALID_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < pMetaMsg->vgroup.numOfIps; ++i) {
|
for (int i = 0; i < pMetaMsg->vgroup.numOfEps; ++i) {
|
||||||
pMetaMsg->vgroup.ipAddr[i].port = htons(pMetaMsg->vgroup.ipAddr[i].port);
|
pMetaMsg->vgroup.epAddr[i].port = htons(pMetaMsg->vgroup.epAddr[i].port);
|
||||||
}
|
}
|
||||||
|
|
||||||
SSchema* pSchema = pMetaMsg->schema;
|
SSchema* pSchema = pMetaMsg->schema;
|
||||||
|
@ -1850,10 +1850,10 @@ int tscProcessSTableVgroupRsp(SSqlObj *pSql) {
|
||||||
SCMVgroupInfo *pVgroups = &pInfo->vgroupList->vgroups[j];
|
SCMVgroupInfo *pVgroups = &pInfo->vgroupList->vgroups[j];
|
||||||
|
|
||||||
pVgroups->vgId = htonl(pVgroups->vgId);
|
pVgroups->vgId = htonl(pVgroups->vgId);
|
||||||
assert(pVgroups->numOfIps >= 1);
|
assert(pVgroups->numOfEps >= 1);
|
||||||
|
|
||||||
for (int32_t k = 0; k < pVgroups->numOfIps; ++k) {
|
for (int32_t k = 0; k < pVgroups->numOfEps; ++k) {
|
||||||
pVgroups->ipAddr[k].port = htons(pVgroups->ipAddr[k].port);
|
pVgroups->epAddr[k].port = htons(pVgroups->epAddr[k].port);
|
||||||
}
|
}
|
||||||
|
|
||||||
pMsg += size;
|
pMsg += size;
|
||||||
|
@ -1946,8 +1946,8 @@ int tscProcessConnectRsp(SSqlObj *pSql) {
|
||||||
assert(len <= sizeof(pObj->db));
|
assert(len <= sizeof(pObj->db));
|
||||||
tstrncpy(pObj->db, temp, sizeof(pObj->db));
|
tstrncpy(pObj->db, temp, sizeof(pObj->db));
|
||||||
|
|
||||||
if (pConnect->ipList.numOfIps > 0)
|
if (pConnect->epSet.numOfEps > 0)
|
||||||
tscSetMgmtIpList(&pConnect->ipList);
|
tscSetMgmtEpSet(&pConnect->epSet);
|
||||||
|
|
||||||
strcpy(pObj->sversion, pConnect->serverVersion);
|
strcpy(pObj->sversion, pConnect->serverVersion);
|
||||||
pObj->writeAuth = pConnect->writeAuth;
|
pObj->writeAuth = pConnect->writeAuth;
|
||||||
|
|
|
@ -62,8 +62,8 @@ SSqlObj *taosConnectImpl(const char *ip, const char *user, const char *pass, con
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ip) {
|
if (ip) {
|
||||||
if (tscSetMgmtIpListFromCfg(ip, NULL) < 0) return NULL;
|
if (tscSetMgmtEpSetFromCfg(ip, NULL) < 0) return NULL;
|
||||||
if (port) tscMgmtIpSet.port[0] = port;
|
if (port) tscMgmtEpSet.port[0] = port;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *pDnodeConn = NULL;
|
void *pDnodeConn = NULL;
|
||||||
|
|
|
@ -458,7 +458,7 @@ void tscBuildVgroupTableInfo(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, SArr
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(info.vgInfo.numOfIps != 0);
|
assert(info.vgInfo.numOfEps != 0);
|
||||||
|
|
||||||
vgTables = taosArrayInit(4, sizeof(STableIdInfo));
|
vgTables = taosArrayInit(4, sizeof(STableIdInfo));
|
||||||
info.itemList = vgTables;
|
info.itemList = vgTables;
|
||||||
|
@ -1600,8 +1600,8 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
|
||||||
|
|
||||||
// data in from current vnode is stored in cache and disk
|
// data in from current vnode is stored in cache and disk
|
||||||
uint32_t numOfRowsFromSubquery = trsupport->pExtMemBuffer[idx]->numOfTotalElems + trsupport->localBuffer->num;
|
uint32_t numOfRowsFromSubquery = trsupport->pExtMemBuffer[idx]->numOfTotalElems + trsupport->localBuffer->num;
|
||||||
tscDebug("%p sub:%p all data retrieved from ip:%s, vgId:%d, numOfRows:%d, orderOfSub:%d", pParentSql, pSql,
|
tscDebug("%p sub:%p all data retrieved from ep:%s, vgId:%d, numOfRows:%d, orderOfSub:%d", pParentSql, pSql,
|
||||||
pTableMetaInfo->vgroupList->vgroups[0].ipAddr[0].fqdn, pTableMetaInfo->vgroupList->vgroups[0].vgId,
|
pTableMetaInfo->vgroupList->vgroups[0].epAddr[0].fqdn, pTableMetaInfo->vgroupList->vgroups[0].vgId,
|
||||||
numOfRowsFromSubquery, idx);
|
numOfRowsFromSubquery, idx);
|
||||||
|
|
||||||
tColModelCompact(pDesc->pColumnModel, trsupport->localBuffer, pDesc->pColumnModel->capacity);
|
tColModelCompact(pDesc->pColumnModel, trsupport->localBuffer, pDesc->pColumnModel->capacity);
|
||||||
|
@ -1719,8 +1719,8 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
|
||||||
assert(pRes->numOfRows == numOfRows);
|
assert(pRes->numOfRows == numOfRows);
|
||||||
int64_t num = atomic_add_fetch_64(&pState->numOfRetrievedRows, numOfRows);
|
int64_t num = atomic_add_fetch_64(&pState->numOfRetrievedRows, numOfRows);
|
||||||
|
|
||||||
tscDebug("%p sub:%p retrieve numOfRows:%" PRId64 " totalNumOfRows:%" PRIu64 " from ip:%s, orderOfSub:%d", pParentSql, pSql,
|
tscDebug("%p sub:%p retrieve numOfRows:%" PRId64 " totalNumOfRows:%" PRIu64 " from ep:%s, orderOfSub:%d", pParentSql, pSql,
|
||||||
pRes->numOfRows, pState->numOfRetrievedRows, pSql->ipList.fqdn[pSql->ipList.inUse], idx);
|
pRes->numOfRows, pState->numOfRetrievedRows, pSql->epSet.fqdn[pSql->epSet.inUse], idx);
|
||||||
|
|
||||||
if (num > tsMaxNumOfOrderedResults && tscIsProjectionQueryOnSTable(pQueryInfo, 0)) {
|
if (num > tsMaxNumOfOrderedResults && tscIsProjectionQueryOnSTable(pQueryInfo, 0)) {
|
||||||
tscError("%p sub:%p num of OrderedRes is too many, max allowed:%" PRId32 " , current:%" PRId64,
|
tscError("%p sub:%p num of OrderedRes is too many, max allowed:%" PRId32 " , current:%" PRId64,
|
||||||
|
@ -1828,8 +1828,8 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tscTrace("%p sub:%p query complete, ip:%s, vgId:%d, orderOfSub:%d, retrieve data", trsupport->pParentSql, pSql,
|
tscTrace("%p sub:%p query complete, ep:%s, vgId:%d, orderOfSub:%d, retrieve data", trsupport->pParentSql, pSql,
|
||||||
pVgroup->ipAddr[0].fqdn, pVgroup->vgId, trsupport->subqueryIndex);
|
pVgroup->epAddr[0].fqdn, pVgroup->vgId, trsupport->subqueryIndex);
|
||||||
|
|
||||||
if (pSql->res.qhandle == 0) { // qhandle is NULL, code is TSDB_CODE_SUCCESS means no results generated from this vnode
|
if (pSql->res.qhandle == 0) { // qhandle is NULL, code is TSDB_CODE_SUCCESS means no results generated from this vnode
|
||||||
tscRetrieveFromDnodeCallBack(param, pSql, 0);
|
tscRetrieveFromDnodeCallBack(param, pSql, 0);
|
||||||
|
|
|
@ -41,7 +41,7 @@ int tscNumOfThreads;
|
||||||
|
|
||||||
static pthread_once_t tscinit = PTHREAD_ONCE_INIT;
|
static pthread_once_t tscinit = PTHREAD_ONCE_INIT;
|
||||||
void taosInitNote(int numOfNoteLines, int maxNotes, char* lable);
|
void taosInitNote(int numOfNoteLines, int maxNotes, char* lable);
|
||||||
void tscUpdateIpSet(void *ahandle, SRpcIpSet *pIpSet);
|
void tscUpdateEpSet(void *ahandle, SRpcEpSet *pEpSet);
|
||||||
|
|
||||||
void tscCheckDiskUsage(void *UNUSED_PARAM(para), void* UNUSED_PARAM(param)) {
|
void tscCheckDiskUsage(void *UNUSED_PARAM(para), void* UNUSED_PARAM(param)) {
|
||||||
taosGetDisk();
|
taosGetDisk();
|
||||||
|
@ -116,8 +116,8 @@ void taos_init_imp() {
|
||||||
taosInitNote(tsNumOfLogLines / 10, 1, (char*)"tsc_note");
|
taosInitNote(tsNumOfLogLines / 10, 1, (char*)"tsc_note");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tscSetMgmtIpListFromCfg(tsFirst, tsSecond) < 0) {
|
if (tscSetMgmtEpSetFromCfg(tsFirst, tsSecond) < 0) {
|
||||||
tscError("failed to init mnode IP list");
|
tscError("failed to init mnode EP list");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2145,17 +2145,17 @@ char* strdup_throw(const char* str) {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tscSetMgmtIpListFromCfg(const char *first, const char *second) {
|
int tscSetMgmtEpSetFromCfg(const char *first, const char *second) {
|
||||||
tscMgmtIpSet.numOfIps = 0;
|
tscMgmtEpSet.numOfEps = 0;
|
||||||
tscMgmtIpSet.inUse = 0;
|
tscMgmtEpSet.inUse = 0;
|
||||||
|
|
||||||
if (first && first[0] != 0) {
|
if (first && first[0] != 0) {
|
||||||
if (strlen(first) >= TSDB_EP_LEN) {
|
if (strlen(first) >= TSDB_EP_LEN) {
|
||||||
terrno = TSDB_CODE_TSC_INVALID_FQDN;
|
terrno = TSDB_CODE_TSC_INVALID_FQDN;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
taosGetFqdnPortFromEp(first, tscMgmtIpSet.fqdn[tscMgmtIpSet.numOfIps], &tscMgmtIpSet.port[tscMgmtIpSet.numOfIps]);
|
taosGetFqdnPortFromEp(first, tscMgmtEpSet.fqdn[tscMgmtEpSet.numOfEps], &tscMgmtEpSet.port[tscMgmtEpSet.numOfEps]);
|
||||||
tscMgmtIpSet.numOfIps++;
|
tscMgmtEpSet.numOfEps++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (second && second[0] != 0) {
|
if (second && second[0] != 0) {
|
||||||
|
@ -2163,11 +2163,11 @@ int tscSetMgmtIpListFromCfg(const char *first, const char *second) {
|
||||||
terrno = TSDB_CODE_TSC_INVALID_FQDN;
|
terrno = TSDB_CODE_TSC_INVALID_FQDN;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
taosGetFqdnPortFromEp(second, tscMgmtIpSet.fqdn[tscMgmtIpSet.numOfIps], &tscMgmtIpSet.port[tscMgmtIpSet.numOfIps]);
|
taosGetFqdnPortFromEp(second, tscMgmtEpSet.fqdn[tscMgmtEpSet.numOfEps], &tscMgmtEpSet.port[tscMgmtEpSet.numOfEps]);
|
||||||
tscMgmtIpSet.numOfIps++;
|
tscMgmtEpSet.numOfEps++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( tscMgmtIpSet.numOfIps == 0) {
|
if ( tscMgmtEpSet.numOfEps == 0) {
|
||||||
terrno = TSDB_CODE_TSC_INVALID_FQDN;
|
terrno = TSDB_CODE_TSC_INVALID_FQDN;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,8 +30,6 @@ extern uint16_t tsDnodeShellPort;
|
||||||
extern uint16_t tsDnodeDnodePort;
|
extern uint16_t tsDnodeDnodePort;
|
||||||
extern uint16_t tsSyncPort;
|
extern uint16_t tsSyncPort;
|
||||||
extern int32_t tsStatusInterval;
|
extern int32_t tsStatusInterval;
|
||||||
extern int16_t tsNumOfVnodesPerCore;
|
|
||||||
extern int16_t tsNumOfTotalVnodes;
|
|
||||||
extern int32_t tsNumOfMnodes;
|
extern int32_t tsNumOfMnodes;
|
||||||
extern int32_t tsEnableVnodeBak;
|
extern int32_t tsEnableVnodeBak;
|
||||||
|
|
||||||
|
|
|
@ -38,12 +38,9 @@ uint16_t tsDnodeShellPort = 6030; // udp[6035-6039] tcp[6035]
|
||||||
uint16_t tsDnodeDnodePort = 6035; // udp/tcp
|
uint16_t tsDnodeDnodePort = 6035; // udp/tcp
|
||||||
uint16_t tsSyncPort = 6040;
|
uint16_t tsSyncPort = 6040;
|
||||||
int32_t tsStatusInterval = 1; // second
|
int32_t tsStatusInterval = 1; // second
|
||||||
int16_t tsNumOfVnodesPerCore = 32;
|
|
||||||
int16_t tsNumOfTotalVnodes = TSDB_INVALID_VNODE_NUM;
|
|
||||||
int32_t tsNumOfMnodes = 3;
|
int32_t tsNumOfMnodes = 3;
|
||||||
int32_t tsEnableVnodeBak = 1;
|
int32_t tsEnableVnodeBak = 1;
|
||||||
|
|
||||||
|
|
||||||
// common
|
// common
|
||||||
int32_t tsRpcTimer = 1000;
|
int32_t tsRpcTimer = 1000;
|
||||||
int32_t tsRpcMaxTime = 600; // seconds;
|
int32_t tsRpcMaxTime = 600; // seconds;
|
||||||
|
@ -199,6 +196,9 @@ int32_t sDebugFlag = 135;
|
||||||
int32_t wDebugFlag = 135;
|
int32_t wDebugFlag = 135;
|
||||||
int32_t tsdbDebugFlag = 131;
|
int32_t tsdbDebugFlag = 131;
|
||||||
|
|
||||||
|
int32_t (*monitorStartSystemFp)() = NULL;
|
||||||
|
void (*monitorStopSystemFp)() = NULL;
|
||||||
|
|
||||||
static pthread_once_t tsInitGlobalCfgOnce = PTHREAD_ONCE_INIT;
|
static pthread_once_t tsInitGlobalCfgOnce = PTHREAD_ONCE_INIT;
|
||||||
|
|
||||||
void taosSetAllDebugFlag() {
|
void taosSetAllDebugFlag() {
|
||||||
|
@ -248,11 +248,17 @@ bool taosCfgDynamicOptions(char *msg) {
|
||||||
*((int32_t *)cfg->ptr) = vint;
|
*((int32_t *)cfg->ptr) = vint;
|
||||||
|
|
||||||
if (strncasecmp(cfg->option, "monitor", olen) == 0) {
|
if (strncasecmp(cfg->option, "monitor", olen) == 0) {
|
||||||
// if (0 == vint) {
|
if (1 == vint) {
|
||||||
// monitorStartSystem();
|
if (monitorStartSystemFp) {
|
||||||
// } else {
|
(*monitorStartSystemFp)();
|
||||||
// monitorStopSystem();
|
uInfo("monitor is enabled");
|
||||||
// }
|
}
|
||||||
|
} else {
|
||||||
|
if (monitorStopSystemFp) {
|
||||||
|
(*monitorStopSystemFp)();
|
||||||
|
uInfo("monitor is disabled");
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -393,16 +399,6 @@ static void doInitGlobalConfig() {
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||||
taosInitConfigOption(cfg);
|
taosInitConfigOption(cfg);
|
||||||
|
|
||||||
cfg.option = "numOfTotalVnodes";
|
|
||||||
cfg.ptr = &tsNumOfTotalVnodes;
|
|
||||||
cfg.valType = TAOS_CFG_VTYPE_INT16;
|
|
||||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG;
|
|
||||||
cfg.minValue = 0;
|
|
||||||
cfg.maxValue = TSDB_MAX_VNODES;
|
|
||||||
cfg.ptrLength = 0;
|
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
|
||||||
taosInitConfigOption(cfg);
|
|
||||||
|
|
||||||
cfg.option = "numOfMnodes";
|
cfg.option = "numOfMnodes";
|
||||||
cfg.ptr = &tsNumOfMnodes;
|
cfg.ptr = &tsNumOfMnodes;
|
||||||
cfg.valType = TAOS_CFG_VTYPE_INT32;
|
cfg.valType = TAOS_CFG_VTYPE_INT32;
|
||||||
|
@ -444,7 +440,7 @@ static void doInitGlobalConfig() {
|
||||||
taosInitConfigOption(cfg);
|
taosInitConfigOption(cfg);
|
||||||
|
|
||||||
// 0-any; 1-mnode; 2-vnode
|
// 0-any; 1-mnode; 2-vnode
|
||||||
cfg.option = "alternativeRole";
|
cfg.option = "role";
|
||||||
cfg.ptr = &tsAlternativeRole;
|
cfg.ptr = &tsAlternativeRole;
|
||||||
cfg.valType = TAOS_CFG_VTYPE_INT32;
|
cfg.valType = TAOS_CFG_VTYPE_INT32;
|
||||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG;
|
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG;
|
||||||
|
@ -1271,12 +1267,6 @@ bool taosCheckGlobalCfg() {
|
||||||
tsNumOfCores = 1;
|
tsNumOfCores = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tsNumOfTotalVnodes == TSDB_INVALID_VNODE_NUM) {
|
|
||||||
tsNumOfTotalVnodes = tsNumOfCores * tsNumOfVnodesPerCore;
|
|
||||||
tsNumOfTotalVnodes = tsNumOfTotalVnodes > TSDB_MAX_VNODES ? TSDB_MAX_VNODES : tsNumOfTotalVnodes;
|
|
||||||
tsNumOfTotalVnodes = tsNumOfTotalVnodes < TSDB_MIN_VNODES ? TSDB_MIN_VNODES : tsNumOfTotalVnodes;
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo refactor
|
// todo refactor
|
||||||
tsVersion = 0;
|
tsVersion = 0;
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "TDengine",
|
"name": "TDengine",
|
||||||
"version": "1.0.0",
|
"version": "2.0.0",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -2302,9 +2302,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lodash": {
|
"lodash": {
|
||||||
"version": "4.17.13",
|
"version": "4.17.19",
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
|
||||||
"integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA=="
|
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
|
||||||
},
|
},
|
||||||
"log-symbols": {
|
"log-symbols": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
"q": "^1.5.0"
|
"q": "^1.5.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lodash": "^4.17.13",
|
"lodash": "^4.17.19",
|
||||||
"yarn": "^1.22.0"
|
"yarn": "^1.22.0"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/taosdata/TDengine/tree/develop/src/connector/grafana/tdengine"
|
"homepage": "https://github.com/taosdata/TDengine/tree/develop/src/connector/grafana/tdengine"
|
||||||
|
|
|
@ -1888,14 +1888,10 @@ locate-path@^3.0.0:
|
||||||
p-locate "^3.0.0"
|
p-locate "^3.0.0"
|
||||||
path-exists "^3.0.0"
|
path-exists "^3.0.0"
|
||||||
|
|
||||||
lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.4, lodash@^4.2.0, lodash@~4.17.10, lodash@~4.17.5:
|
lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.2.0, lodash@~4.17.10, lodash@~4.17.5:
|
||||||
version "4.17.13"
|
version "4.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
|
||||||
|
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
|
||||||
lodash@^4.17.15:
|
|
||||||
version "4.17.15"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
|
|
||||||
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
|
|
||||||
|
|
||||||
log-symbols@2.2.0:
|
log-symbols@2.2.0:
|
||||||
version "2.2.0"
|
version "2.2.0"
|
||||||
|
|
|
@ -208,7 +208,6 @@ public class TDNode {
|
||||||
setCfgConfig("mnodeEqualVnodeNum", "0");
|
setCfgConfig("mnodeEqualVnodeNum", "0");
|
||||||
setCfgConfig("walLevel", "1");
|
setCfgConfig("walLevel", "1");
|
||||||
setCfgConfig("statusInterval", "1");
|
setCfgConfig("statusInterval", "1");
|
||||||
setCfgConfig("numOfTotalVnodes", "64");
|
|
||||||
setCfgConfig("numOfMnodes", "3");
|
setCfgConfig("numOfMnodes", "3");
|
||||||
setCfgConfig("numOfThreadsPerCore", "2.0");
|
setCfgConfig("numOfThreadsPerCore", "2.0");
|
||||||
setCfgConfig("monitor", "0");
|
setCfgConfig("monitor", "0");
|
||||||
|
|
|
@ -103,9 +103,6 @@ void cqClose(void *handle) {
|
||||||
SCqContext *pContext = handle;
|
SCqContext *pContext = handle;
|
||||||
if (handle == NULL) return;
|
if (handle == NULL) return;
|
||||||
|
|
||||||
taosTmrCleanUp(pContext->tmrCtrl);
|
|
||||||
pContext->tmrCtrl = NULL;
|
|
||||||
|
|
||||||
// stop all CQs
|
// stop all CQs
|
||||||
cqStop(pContext);
|
cqStop(pContext);
|
||||||
|
|
||||||
|
@ -125,6 +122,9 @@ void cqClose(void *handle) {
|
||||||
|
|
||||||
pthread_mutex_destroy(&pContext->mutex);
|
pthread_mutex_destroy(&pContext->mutex);
|
||||||
|
|
||||||
|
taosTmrCleanUp(pContext->tmrCtrl);
|
||||||
|
pContext->tmrCtrl = NULL;
|
||||||
|
|
||||||
cTrace("vgId:%d, CQ is closed", pContext->vgId);
|
cTrace("vgId:%d, CQ is closed", pContext->vgId);
|
||||||
free(pContext);
|
free(pContext);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,8 +35,8 @@ void* dnodeGetVnodeTsdb(void *pVnode);
|
||||||
void dnodeReleaseVnode(void *pVnode);
|
void dnodeReleaseVnode(void *pVnode);
|
||||||
|
|
||||||
void dnodeSendRedirectMsg(SRpcMsg *rpcMsg, bool forShell);
|
void dnodeSendRedirectMsg(SRpcMsg *rpcMsg, bool forShell);
|
||||||
void dnodeGetMnodeIpSetForPeer(void *ipSet);
|
void dnodeGetMnodeEpSetForPeer(void *epSet);
|
||||||
void dnodeGetMnodeIpSetForShell(void *ipSet);
|
void dnodeGetMnodeEpSetForShell(void *epSet);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ void * tsDnodeTmr = NULL;
|
||||||
static void * tsStatusTimer = NULL;
|
static void * tsStatusTimer = NULL;
|
||||||
static uint32_t tsRebootTime;
|
static uint32_t tsRebootTime;
|
||||||
|
|
||||||
static SRpcIpSet tsDMnodeIpSet = {0};
|
static SRpcEpSet tsDMnodeEpSet = {0};
|
||||||
static SDMMnodeInfos tsDMnodeInfos = {0};
|
static SDMMnodeInfos tsDMnodeInfos = {0};
|
||||||
static SDMDnodeCfg tsDnodeCfg = {0};
|
static SDMDnodeCfg tsDnodeCfg = {0};
|
||||||
static taos_qset tsMgmtQset = NULL;
|
static taos_qset tsMgmtQset = NULL;
|
||||||
|
@ -90,21 +90,21 @@ int32_t dnodeInitMgmt() {
|
||||||
tsRebootTime = taosGetTimestampSec();
|
tsRebootTime = taosGetTimestampSec();
|
||||||
|
|
||||||
if (!dnodeReadMnodeInfos()) {
|
if (!dnodeReadMnodeInfos()) {
|
||||||
memset(&tsDMnodeIpSet, 0, sizeof(SRpcIpSet));
|
memset(&tsDMnodeEpSet, 0, sizeof(SRpcEpSet));
|
||||||
memset(&tsDMnodeInfos, 0, sizeof(SDMMnodeInfos));
|
memset(&tsDMnodeInfos, 0, sizeof(SDMMnodeInfos));
|
||||||
|
|
||||||
tsDMnodeIpSet.numOfIps = 1;
|
tsDMnodeEpSet.numOfEps = 1;
|
||||||
taosGetFqdnPortFromEp(tsFirst, tsDMnodeIpSet.fqdn[0], &tsDMnodeIpSet.port[0]);
|
taosGetFqdnPortFromEp(tsFirst, tsDMnodeEpSet.fqdn[0], &tsDMnodeEpSet.port[0]);
|
||||||
|
|
||||||
if (strcmp(tsSecond, tsFirst) != 0) {
|
if (strcmp(tsSecond, tsFirst) != 0) {
|
||||||
tsDMnodeIpSet.numOfIps = 2;
|
tsDMnodeEpSet.numOfEps = 2;
|
||||||
taosGetFqdnPortFromEp(tsSecond, tsDMnodeIpSet.fqdn[1], &tsDMnodeIpSet.port[1]);
|
taosGetFqdnPortFromEp(tsSecond, tsDMnodeEpSet.fqdn[1], &tsDMnodeEpSet.port[1]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
tsDMnodeIpSet.inUse = tsDMnodeInfos.inUse;
|
tsDMnodeEpSet.inUse = tsDMnodeInfos.inUse;
|
||||||
tsDMnodeIpSet.numOfIps = tsDMnodeInfos.nodeNum;
|
tsDMnodeEpSet.numOfEps = tsDMnodeInfos.nodeNum;
|
||||||
for (int32_t i = 0; i < tsDMnodeInfos.nodeNum; i++) {
|
for (int32_t i = 0; i < tsDMnodeInfos.nodeNum; i++) {
|
||||||
taosGetFqdnPortFromEp(tsDMnodeInfos.nodeInfos[i].nodeEp, tsDMnodeIpSet.fqdn[i], &tsDMnodeIpSet.port[i]);
|
taosGetFqdnPortFromEp(tsDMnodeInfos.nodeInfos[i].nodeEp, tsDMnodeEpSet.fqdn[i], &tsDMnodeEpSet.port[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -450,27 +450,27 @@ static int32_t dnodeProcessConfigDnodeMsg(SRpcMsg *pMsg) {
|
||||||
return taosCfgDynamicOptions(pCfg->config);
|
return taosCfgDynamicOptions(pCfg->config);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dnodeUpdateMnodeIpSetForPeer(SRpcIpSet *pIpSet) {
|
void dnodeUpdateMnodeEpSetForPeer(SRpcEpSet *pEpSet) {
|
||||||
dInfo("mnode IP list for is changed, numOfIps:%d inUse:%d", pIpSet->numOfIps, pIpSet->inUse);
|
dInfo("mnode EP list for is changed, numOfEps:%d inUse:%d", pEpSet->numOfEps, pEpSet->inUse);
|
||||||
for (int i = 0; i < pIpSet->numOfIps; ++i) {
|
for (int i = 0; i < pEpSet->numOfEps; ++i) {
|
||||||
pIpSet->port[i] -= TSDB_PORT_DNODEDNODE;
|
pEpSet->port[i] -= TSDB_PORT_DNODEDNODE;
|
||||||
dInfo("mnode index:%d %s:%u", i, pIpSet->fqdn[i], pIpSet->port[i])
|
dInfo("mnode index:%d %s:%u", i, pEpSet->fqdn[i], pEpSet->port[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
tsDMnodeIpSet = *pIpSet;
|
tsDMnodeEpSet = *pEpSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dnodeGetMnodeIpSetForPeer(void *ipSetRaw) {
|
void dnodeGetMnodeEpSetForPeer(void *epSetRaw) {
|
||||||
SRpcIpSet *ipSet = ipSetRaw;
|
SRpcEpSet *epSet = epSetRaw;
|
||||||
*ipSet = tsDMnodeIpSet;
|
*epSet = tsDMnodeEpSet;
|
||||||
|
|
||||||
for (int i=0; i<ipSet->numOfIps; ++i)
|
for (int i=0; i<epSet->numOfEps; ++i)
|
||||||
ipSet->port[i] += TSDB_PORT_DNODEDNODE;
|
epSet->port[i] += TSDB_PORT_DNODEDNODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dnodeGetMnodeIpSetForShell(void *ipSetRaw) {
|
void dnodeGetMnodeEpSetForShell(void *epSetRaw) {
|
||||||
SRpcIpSet *ipSet = ipSetRaw;
|
SRpcEpSet *epSet = epSetRaw;
|
||||||
*ipSet = tsDMnodeIpSet;
|
*epSet = tsDMnodeEpSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dnodeProcessStatusRsp(SRpcMsg *pMsg) {
|
static void dnodeProcessStatusRsp(SRpcMsg *pMsg) {
|
||||||
|
@ -536,10 +536,10 @@ static void dnodeUpdateMnodeInfos(SDMMnodeInfos *pMnodes) {
|
||||||
dInfo("mnode index:%d, %s", tsDMnodeInfos.nodeInfos[i].nodeId, tsDMnodeInfos.nodeInfos[i].nodeEp);
|
dInfo("mnode index:%d, %s", tsDMnodeInfos.nodeInfos[i].nodeId, tsDMnodeInfos.nodeInfos[i].nodeEp);
|
||||||
}
|
}
|
||||||
|
|
||||||
tsDMnodeIpSet.inUse = tsDMnodeInfos.inUse;
|
tsDMnodeEpSet.inUse = tsDMnodeInfos.inUse;
|
||||||
tsDMnodeIpSet.numOfIps = tsDMnodeInfos.nodeNum;
|
tsDMnodeEpSet.numOfEps = tsDMnodeInfos.nodeNum;
|
||||||
for (int32_t i = 0; i < tsDMnodeInfos.nodeNum; i++) {
|
for (int32_t i = 0; i < tsDMnodeInfos.nodeNum; i++) {
|
||||||
taosGetFqdnPortFromEp(tsDMnodeInfos.nodeInfos[i].nodeEp, tsDMnodeIpSet.fqdn[i], &tsDMnodeIpSet.port[i]);
|
taosGetFqdnPortFromEp(tsDMnodeInfos.nodeInfos[i].nodeEp, tsDMnodeEpSet.fqdn[i], &tsDMnodeEpSet.port[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
dnodeSaveMnodeInfos();
|
dnodeSaveMnodeInfos();
|
||||||
|
@ -549,10 +549,10 @@ static void dnodeUpdateMnodeInfos(SDMMnodeInfos *pMnodes) {
|
||||||
static bool dnodeReadMnodeInfos() {
|
static bool dnodeReadMnodeInfos() {
|
||||||
char ipFile[TSDB_FILENAME_LEN*2] = {0};
|
char ipFile[TSDB_FILENAME_LEN*2] = {0};
|
||||||
|
|
||||||
sprintf(ipFile, "%s/mnodeIpList.json", tsDnodeDir);
|
sprintf(ipFile, "%s/mnodeEpSet.json", tsDnodeDir);
|
||||||
FILE *fp = fopen(ipFile, "r");
|
FILE *fp = fopen(ipFile, "r");
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
dDebug("failed to read mnodeIpList.json, file not exist");
|
dDebug("failed to read mnodeEpSet.json, file not exist");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -563,40 +563,40 @@ static bool dnodeReadMnodeInfos() {
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
free(content);
|
free(content);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
dError("failed to read mnodeIpList.json, content is null");
|
dError("failed to read mnodeEpSet.json, content is null");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
content[len] = 0;
|
content[len] = 0;
|
||||||
cJSON* root = cJSON_Parse(content);
|
cJSON* root = cJSON_Parse(content);
|
||||||
if (root == NULL) {
|
if (root == NULL) {
|
||||||
dError("failed to read mnodeIpList.json, invalid json format");
|
dError("failed to read mnodeEpSet.json, invalid json format");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
cJSON* inUse = cJSON_GetObjectItem(root, "inUse");
|
cJSON* inUse = cJSON_GetObjectItem(root, "inUse");
|
||||||
if (!inUse || inUse->type != cJSON_Number) {
|
if (!inUse || inUse->type != cJSON_Number) {
|
||||||
dError("failed to read mnodeIpList.json, inUse not found");
|
dError("failed to read mnodeEpSet.json, inUse not found");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
tsDMnodeInfos.inUse = inUse->valueint;
|
tsDMnodeInfos.inUse = inUse->valueint;
|
||||||
|
|
||||||
cJSON* nodeNum = cJSON_GetObjectItem(root, "nodeNum");
|
cJSON* nodeNum = cJSON_GetObjectItem(root, "nodeNum");
|
||||||
if (!nodeNum || nodeNum->type != cJSON_Number) {
|
if (!nodeNum || nodeNum->type != cJSON_Number) {
|
||||||
dError("failed to read mnodeIpList.json, nodeNum not found");
|
dError("failed to read mnodeEpSet.json, nodeNum not found");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
tsDMnodeInfos.nodeNum = nodeNum->valueint;
|
tsDMnodeInfos.nodeNum = nodeNum->valueint;
|
||||||
|
|
||||||
cJSON* nodeInfos = cJSON_GetObjectItem(root, "nodeInfos");
|
cJSON* nodeInfos = cJSON_GetObjectItem(root, "nodeInfos");
|
||||||
if (!nodeInfos || nodeInfos->type != cJSON_Array) {
|
if (!nodeInfos || nodeInfos->type != cJSON_Array) {
|
||||||
dError("failed to read mnodeIpList.json, nodeInfos not found");
|
dError("failed to read mnodeEpSet.json, nodeInfos not found");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
int size = cJSON_GetArraySize(nodeInfos);
|
int size = cJSON_GetArraySize(nodeInfos);
|
||||||
if (size != tsDMnodeInfos.nodeNum) {
|
if (size != tsDMnodeInfos.nodeNum) {
|
||||||
dError("failed to read mnodeIpList.json, nodeInfos size not matched");
|
dError("failed to read mnodeEpSet.json, nodeInfos size not matched");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -606,14 +606,14 @@ static bool dnodeReadMnodeInfos() {
|
||||||
|
|
||||||
cJSON *nodeId = cJSON_GetObjectItem(nodeInfo, "nodeId");
|
cJSON *nodeId = cJSON_GetObjectItem(nodeInfo, "nodeId");
|
||||||
if (!nodeId || nodeId->type != cJSON_Number) {
|
if (!nodeId || nodeId->type != cJSON_Number) {
|
||||||
dError("failed to read mnodeIpList.json, nodeId not found");
|
dError("failed to read mnodeEpSet.json, nodeId not found");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
tsDMnodeInfos.nodeInfos[i].nodeId = nodeId->valueint;
|
tsDMnodeInfos.nodeInfos[i].nodeId = nodeId->valueint;
|
||||||
|
|
||||||
cJSON *nodeEp = cJSON_GetObjectItem(nodeInfo, "nodeEp");
|
cJSON *nodeEp = cJSON_GetObjectItem(nodeInfo, "nodeEp");
|
||||||
if (!nodeEp || nodeEp->type != cJSON_String || nodeEp->valuestring == NULL) {
|
if (!nodeEp || nodeEp->type != cJSON_String || nodeEp->valuestring == NULL) {
|
||||||
dError("failed to read mnodeIpList.json, nodeName not found");
|
dError("failed to read mnodeEpSet.json, nodeName not found");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
strncpy(tsDMnodeInfos.nodeInfos[i].nodeEp, nodeEp->valuestring, TSDB_EP_LEN);
|
strncpy(tsDMnodeInfos.nodeInfos[i].nodeEp, nodeEp->valuestring, TSDB_EP_LEN);
|
||||||
|
@ -621,7 +621,7 @@ static bool dnodeReadMnodeInfos() {
|
||||||
|
|
||||||
ret = true;
|
ret = true;
|
||||||
|
|
||||||
dInfo("read mnode iplist successed, numOfIps:%d inUse:%d", tsDMnodeInfos.nodeNum, tsDMnodeInfos.inUse);
|
dInfo("read mnode epSet successed, numOfEps:%d inUse:%d", tsDMnodeInfos.nodeNum, tsDMnodeInfos.inUse);
|
||||||
for (int32_t i = 0; i < tsDMnodeInfos.nodeNum; i++) {
|
for (int32_t i = 0; i < tsDMnodeInfos.nodeNum; i++) {
|
||||||
dInfo("mnode:%d, %s", tsDMnodeInfos.nodeInfos[i].nodeId, tsDMnodeInfos.nodeInfos[i].nodeEp);
|
dInfo("mnode:%d, %s", tsDMnodeInfos.nodeInfos[i].nodeId, tsDMnodeInfos.nodeInfos[i].nodeEp);
|
||||||
}
|
}
|
||||||
|
@ -635,7 +635,7 @@ PARSE_OVER:
|
||||||
|
|
||||||
static void dnodeSaveMnodeInfos() {
|
static void dnodeSaveMnodeInfos() {
|
||||||
char ipFile[TSDB_FILENAME_LEN] = {0};
|
char ipFile[TSDB_FILENAME_LEN] = {0};
|
||||||
sprintf(ipFile, "%s/mnodeIpList.json", tsDnodeDir);
|
sprintf(ipFile, "%s/mnodeEpSet.json", tsDnodeDir);
|
||||||
FILE *fp = fopen(ipFile, "w");
|
FILE *fp = fopen(ipFile, "w");
|
||||||
if (!fp) return;
|
if (!fp) return;
|
||||||
|
|
||||||
|
@ -663,11 +663,11 @@ static void dnodeSaveMnodeInfos() {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
free(content);
|
free(content);
|
||||||
|
|
||||||
dInfo("save mnode iplist successed");
|
dInfo("save mnode epSet successed");
|
||||||
}
|
}
|
||||||
|
|
||||||
char *dnodeGetMnodeMasterEp() {
|
char *dnodeGetMnodeMasterEp() {
|
||||||
return tsDMnodeInfos.nodeInfos[tsDMnodeIpSet.inUse].nodeEp;
|
return tsDMnodeInfos.nodeInfos[tsDMnodeEpSet.inUse].nodeEp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* dnodeGetMnodeInfos() {
|
void* dnodeGetMnodeInfos() {
|
||||||
|
@ -699,7 +699,6 @@ static void dnodeSendStatusMsg(void *handle, void *tmrId) {
|
||||||
pStatus->dnodeId = htonl(tsDnodeCfg.dnodeId);
|
pStatus->dnodeId = htonl(tsDnodeCfg.dnodeId);
|
||||||
strcpy(pStatus->dnodeEp, tsLocalEp);
|
strcpy(pStatus->dnodeEp, tsLocalEp);
|
||||||
pStatus->lastReboot = htonl(tsRebootTime);
|
pStatus->lastReboot = htonl(tsRebootTime);
|
||||||
pStatus->numOfTotalVnodes = htons((uint16_t) tsNumOfTotalVnodes);
|
|
||||||
pStatus->numOfCores = htons((uint16_t) tsNumOfCores);
|
pStatus->numOfCores = htons((uint16_t) tsNumOfCores);
|
||||||
pStatus->diskAvailable = tsAvailDataDirGB;
|
pStatus->diskAvailable = tsAvailDataDirGB;
|
||||||
pStatus->alternativeRole = (uint8_t) tsAlternativeRole;
|
pStatus->alternativeRole = (uint8_t) tsAlternativeRole;
|
||||||
|
@ -727,9 +726,9 @@ static void dnodeSendStatusMsg(void *handle, void *tmrId) {
|
||||||
.msgType = TSDB_MSG_TYPE_DM_STATUS
|
.msgType = TSDB_MSG_TYPE_DM_STATUS
|
||||||
};
|
};
|
||||||
|
|
||||||
SRpcIpSet ipSet;
|
SRpcEpSet epSet;
|
||||||
dnodeGetMnodeIpSetForPeer(&ipSet);
|
dnodeGetMnodeEpSetForPeer(&epSet);
|
||||||
dnodeSendMsgToDnode(&ipSet, &rpcMsg);
|
dnodeSendMsgToDnode(&epSet, &rpcMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool dnodeReadDnodeCfg() {
|
static bool dnodeReadDnodeCfg() {
|
||||||
|
@ -818,20 +817,20 @@ void dnodeSendRedirectMsg(SRpcMsg *rpcMsg, bool forShell) {
|
||||||
SRpcConnInfo connInfo = {0};
|
SRpcConnInfo connInfo = {0};
|
||||||
rpcGetConnInfo(rpcMsg->handle, &connInfo);
|
rpcGetConnInfo(rpcMsg->handle, &connInfo);
|
||||||
|
|
||||||
SRpcIpSet ipSet = {0};
|
SRpcEpSet epSet = {0};
|
||||||
if (forShell) {
|
if (forShell) {
|
||||||
dnodeGetMnodeIpSetForShell(&ipSet);
|
dnodeGetMnodeEpSetForShell(&epSet);
|
||||||
} else {
|
} else {
|
||||||
dnodeGetMnodeIpSetForPeer(&ipSet);
|
dnodeGetMnodeEpSetForPeer(&epSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
dDebug("msg:%s will be redirected, dnodeIp:%s user:%s, numOfIps:%d inUse:%d", taosMsg[rpcMsg->msgType],
|
dDebug("msg:%s will be redirected, dnodeIp:%s user:%s, numOfEps:%d inUse:%d", taosMsg[rpcMsg->msgType],
|
||||||
taosIpStr(connInfo.clientIp), connInfo.user, ipSet.numOfIps, ipSet.inUse);
|
taosIpStr(connInfo.clientIp), connInfo.user, epSet.numOfEps, epSet.inUse);
|
||||||
|
|
||||||
for (int i = 0; i < ipSet.numOfIps; ++i) {
|
for (int i = 0; i < epSet.numOfEps; ++i) {
|
||||||
dDebug("mnode index:%d %s:%d", i, ipSet.fqdn[i], ipSet.port[i]);
|
dDebug("mnode index:%d %s:%d", i, epSet.fqdn[i], epSet.port[i]);
|
||||||
ipSet.port[i] = htons(ipSet.port[i]);
|
epSet.port[i] = htons(epSet.port[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
rpcSendRedirectRsp(rpcMsg->handle, &ipSet);
|
rpcSendRedirectRsp(rpcMsg->handle, &epSet);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,11 +29,11 @@
|
||||||
#include "dnodeVWrite.h"
|
#include "dnodeVWrite.h"
|
||||||
#include "dnodeMPeer.h"
|
#include "dnodeMPeer.h"
|
||||||
|
|
||||||
extern void dnodeUpdateMnodeIpSetForPeer(SRpcIpSet *pIpSet);
|
extern void dnodeUpdateMnodeEpSetForPeer(SRpcEpSet *pEpSet);
|
||||||
static void (*dnodeProcessReqMsgFp[TSDB_MSG_TYPE_MAX])(SRpcMsg *);
|
static void (*dnodeProcessReqMsgFp[TSDB_MSG_TYPE_MAX])(SRpcMsg *);
|
||||||
static void dnodeProcessReqMsgFromDnode(SRpcMsg *pMsg, SRpcIpSet *);
|
static void dnodeProcessReqMsgFromDnode(SRpcMsg *pMsg, SRpcEpSet *);
|
||||||
static void (*dnodeProcessRspMsgFp[TSDB_MSG_TYPE_MAX])(SRpcMsg *rpcMsg);
|
static void (*dnodeProcessRspMsgFp[TSDB_MSG_TYPE_MAX])(SRpcMsg *rpcMsg);
|
||||||
static void dnodeProcessRspFromDnode(SRpcMsg *pMsg, SRpcIpSet *pIpSet);
|
static void dnodeProcessRspFromDnode(SRpcMsg *pMsg, SRpcEpSet *pEpSet);
|
||||||
static void *tsDnodeServerRpc = NULL;
|
static void *tsDnodeServerRpc = NULL;
|
||||||
static void *tsDnodeClientRpc = NULL;
|
static void *tsDnodeClientRpc = NULL;
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ void dnodeCleanupServer() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dnodeProcessReqMsgFromDnode(SRpcMsg *pMsg, SRpcIpSet *pIpSet) {
|
static void dnodeProcessReqMsgFromDnode(SRpcMsg *pMsg, SRpcEpSet *pEpSet) {
|
||||||
SRpcMsg rspMsg = {
|
SRpcMsg rspMsg = {
|
||||||
.handle = pMsg->handle,
|
.handle = pMsg->handle,
|
||||||
.pCont = NULL,
|
.pCont = NULL,
|
||||||
|
@ -148,9 +148,9 @@ void dnodeCleanupClient() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dnodeProcessRspFromDnode(SRpcMsg *pMsg, SRpcIpSet *pIpSet) {
|
static void dnodeProcessRspFromDnode(SRpcMsg *pMsg, SRpcEpSet *pEpSet) {
|
||||||
if (pMsg->msgType == TSDB_MSG_TYPE_DM_STATUS_RSP && pIpSet) {
|
if (pMsg->msgType == TSDB_MSG_TYPE_DM_STATUS_RSP && pEpSet) {
|
||||||
dnodeUpdateMnodeIpSetForPeer(pIpSet);
|
dnodeUpdateMnodeEpSetForPeer(pEpSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dnodeProcessRspMsgFp[pMsg->msgType]) {
|
if (dnodeProcessRspMsgFp[pMsg->msgType]) {
|
||||||
|
@ -166,12 +166,12 @@ void dnodeAddClientRspHandle(uint8_t msgType, void (*fp)(SRpcMsg *rpcMsg)) {
|
||||||
dnodeProcessRspMsgFp[msgType] = fp;
|
dnodeProcessRspMsgFp[msgType] = fp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dnodeSendMsgToDnode(SRpcIpSet *ipSet, SRpcMsg *rpcMsg) {
|
void dnodeSendMsgToDnode(SRpcEpSet *epSet, SRpcMsg *rpcMsg) {
|
||||||
rpcSendRequest(tsDnodeClientRpc, ipSet, rpcMsg);
|
rpcSendRequest(tsDnodeClientRpc, epSet, rpcMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dnodeSendMsgToDnodeRecv(SRpcMsg *rpcMsg, SRpcMsg *rpcRsp) {
|
void dnodeSendMsgToDnodeRecv(SRpcMsg *rpcMsg, SRpcMsg *rpcRsp) {
|
||||||
SRpcIpSet ipSet = {0};
|
SRpcEpSet epSet = {0};
|
||||||
dnodeGetMnodeIpSetForPeer(&ipSet);
|
dnodeGetMnodeEpSetForPeer(&epSet);
|
||||||
rpcSendRecv(tsDnodeClientRpc, &ipSet, rpcMsg, rpcRsp);
|
rpcSendRecv(tsDnodeClientRpc, &epSet, rpcMsg, rpcRsp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include "dnodeShell.h"
|
#include "dnodeShell.h"
|
||||||
|
|
||||||
static void (*dnodeProcessShellMsgFp[TSDB_MSG_TYPE_MAX])(SRpcMsg *);
|
static void (*dnodeProcessShellMsgFp[TSDB_MSG_TYPE_MAX])(SRpcMsg *);
|
||||||
static void dnodeProcessMsgFromShell(SRpcMsg *pMsg, SRpcIpSet *);
|
static void dnodeProcessMsgFromShell(SRpcMsg *pMsg, SRpcEpSet *);
|
||||||
static int dnodeRetrieveUserAuthInfo(char *user, char *spi, char *encrypt, char *secret, char *ckey);
|
static int dnodeRetrieveUserAuthInfo(char *user, char *spi, char *encrypt, char *secret, char *ckey);
|
||||||
static void * tsDnodeShellRpc = NULL;
|
static void * tsDnodeShellRpc = NULL;
|
||||||
static int32_t tsDnodeQueryReqNum = 0;
|
static int32_t tsDnodeQueryReqNum = 0;
|
||||||
|
@ -108,7 +108,7 @@ void dnodeCleanupShell() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void dnodeProcessMsgFromShell(SRpcMsg *pMsg, SRpcIpSet *pIpSet) {
|
void dnodeProcessMsgFromShell(SRpcMsg *pMsg, SRpcEpSet *pEpSet) {
|
||||||
SRpcMsg rpcMsg = {
|
SRpcMsg rpcMsg = {
|
||||||
.handle = pMsg->handle,
|
.handle = pMsg->handle,
|
||||||
.pCont = NULL,
|
.pCont = NULL,
|
||||||
|
|
|
@ -39,13 +39,13 @@ SDnodeStatisInfo dnodeGetStatisInfo();
|
||||||
|
|
||||||
bool dnodeIsFirstDeploy();
|
bool dnodeIsFirstDeploy();
|
||||||
char * dnodeGetMnodeMasterEp();
|
char * dnodeGetMnodeMasterEp();
|
||||||
void dnodeGetMnodeIpSetForPeer(void *ipSet);
|
void dnodeGetMnodeEpSetForPeer(void *epSet);
|
||||||
void dnodeGetMnodeIpSetForShell(void *ipSet);
|
void dnodeGetMnodeEpSetForShell(void *epSet);
|
||||||
void * dnodeGetMnodeInfos();
|
void * dnodeGetMnodeInfos();
|
||||||
int32_t dnodeGetDnodeId();
|
int32_t dnodeGetDnodeId();
|
||||||
|
|
||||||
void dnodeAddClientRspHandle(uint8_t msgType, void (*fp)(SRpcMsg *rpcMsg));
|
void dnodeAddClientRspHandle(uint8_t msgType, void (*fp)(SRpcMsg *rpcMsg));
|
||||||
void dnodeSendMsgToDnode(SRpcIpSet *ipSet, SRpcMsg *rpcMsg);
|
void dnodeSendMsgToDnode(SRpcEpSet *epSet, SRpcMsg *rpcMsg);
|
||||||
void dnodeSendMsgToDnodeRecv(SRpcMsg *rpcMsg, SRpcMsg *rpcRsp);
|
void dnodeSendMsgToDnodeRecv(SRpcMsg *rpcMsg, SRpcMsg *rpcRsp);
|
||||||
void *dnodeSendCfgTableToRecv(int32_t vgId, int32_t sid);
|
void *dnodeSendCfgTableToRecv(int32_t vgId, int32_t sid);
|
||||||
|
|
||||||
|
|
|
@ -274,9 +274,8 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
|
||||||
#define TSDB_DEFAULT_PAYLOAD_SIZE 5120 // default payload size, greater than PATH_MAX value
|
#define TSDB_DEFAULT_PAYLOAD_SIZE 5120 // default payload size, greater than PATH_MAX value
|
||||||
#define TSDB_EXTRA_PAYLOAD_SIZE 128 // extra bytes for auth
|
#define TSDB_EXTRA_PAYLOAD_SIZE 128 // extra bytes for auth
|
||||||
#define TSDB_CQ_SQL_SIZE 1024
|
#define TSDB_CQ_SQL_SIZE 1024
|
||||||
|
#define TSDB_MIN_VNODES 64
|
||||||
#define TSDB_MAX_VNODES 2048
|
#define TSDB_MAX_VNODES 2048
|
||||||
#define TSDB_MIN_VNODES 256
|
|
||||||
#define TSDB_INVALID_VNODE_NUM 0
|
|
||||||
|
|
||||||
#define TSDB_DNODE_ROLE_ANY 0
|
#define TSDB_DNODE_ROLE_ANY 0
|
||||||
#define TSDB_DNODE_ROLE_MGMT 1
|
#define TSDB_DNODE_ROLE_MGMT 1
|
||||||
|
|
|
@ -176,7 +176,7 @@ extern char *taosMsg[];
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char fqdn[TSDB_FQDN_LEN];
|
char fqdn[TSDB_FQDN_LEN];
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
} SIpAddr;
|
} SEpAddr;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t numOfVnodes;
|
int32_t numOfVnodes;
|
||||||
|
@ -306,7 +306,7 @@ typedef struct {
|
||||||
int8_t reserved1;
|
int8_t reserved1;
|
||||||
int8_t reserved2;
|
int8_t reserved2;
|
||||||
int32_t connId;
|
int32_t connId;
|
||||||
SRpcIpSet ipList;
|
SRpcEpSet epSet;
|
||||||
} SCMConnectRsp;
|
} SCMConnectRsp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -581,12 +581,12 @@ typedef struct {
|
||||||
char dnodeEp[TSDB_EP_LEN];
|
char dnodeEp[TSDB_EP_LEN];
|
||||||
uint32_t moduleStatus;
|
uint32_t moduleStatus;
|
||||||
uint32_t lastReboot; // time stamp for last reboot
|
uint32_t lastReboot; // time stamp for last reboot
|
||||||
uint16_t numOfTotalVnodes; // from config file
|
uint16_t reserve1; // from config file
|
||||||
uint16_t openVnodes;
|
uint16_t openVnodes;
|
||||||
uint16_t numOfCores;
|
uint16_t numOfCores;
|
||||||
float diskAvailable; // GB
|
float diskAvailable; // GB
|
||||||
uint8_t alternativeRole;
|
uint8_t alternativeRole;
|
||||||
uint8_t reserve[15];
|
uint8_t reserve2[15];
|
||||||
SClusterCfg clusterCfg;
|
SClusterCfg clusterCfg;
|
||||||
SVnodeLoad load[];
|
SVnodeLoad load[];
|
||||||
} SDMStatusMsg;
|
} SDMStatusMsg;
|
||||||
|
@ -648,8 +648,8 @@ typedef struct SCMSTableVgroupMsg {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t vgId;
|
int32_t vgId;
|
||||||
int8_t numOfIps;
|
int8_t numOfEps;
|
||||||
SIpAddr ipAddr[TSDB_MAX_REPLICA];
|
SEpAddr epAddr[TSDB_MAX_REPLICA];
|
||||||
} SCMVgroupInfo;
|
} SCMVgroupInfo;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -753,7 +753,7 @@ typedef struct {
|
||||||
uint32_t onlineDnodes;
|
uint32_t onlineDnodes;
|
||||||
uint32_t connId;
|
uint32_t connId;
|
||||||
int8_t killConnection;
|
int8_t killConnection;
|
||||||
SRpcIpSet ipList;
|
SRpcEpSet epSet;
|
||||||
} SCMHeartBeatRsp;
|
} SCMHeartBeatRsp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -28,12 +28,12 @@ extern "C" {
|
||||||
|
|
||||||
extern int tsRpcHeadSize;
|
extern int tsRpcHeadSize;
|
||||||
|
|
||||||
typedef struct SRpcIpSet {
|
typedef struct SRpcEpSet {
|
||||||
int8_t inUse;
|
int8_t inUse;
|
||||||
int8_t numOfIps;
|
int8_t numOfEps;
|
||||||
uint16_t port[TSDB_MAX_REPLICA];
|
uint16_t port[TSDB_MAX_REPLICA];
|
||||||
char fqdn[TSDB_MAX_REPLICA][TSDB_FQDN_LEN];
|
char fqdn[TSDB_MAX_REPLICA][TSDB_FQDN_LEN];
|
||||||
} SRpcIpSet;
|
} SRpcEpSet;
|
||||||
|
|
||||||
typedef struct SRpcConnInfo {
|
typedef struct SRpcConnInfo {
|
||||||
uint32_t clientIp;
|
uint32_t clientIp;
|
||||||
|
@ -67,7 +67,7 @@ typedef struct SRpcInit {
|
||||||
char *ckey; // ciphering key
|
char *ckey; // ciphering key
|
||||||
|
|
||||||
// call back to process incoming msg, code shall be ignored by server app
|
// call back to process incoming msg, code shall be ignored by server app
|
||||||
void (*cfp)(SRpcMsg *, SRpcIpSet *);
|
void (*cfp)(SRpcMsg *, SRpcEpSet *);
|
||||||
|
|
||||||
// call back to retrieve the client auth info, for server app only
|
// call back to retrieve the client auth info, for server app only
|
||||||
int (*afp)(char *tableId, char *spi, char *encrypt, char *secret, char *ckey);
|
int (*afp)(char *tableId, char *spi, char *encrypt, char *secret, char *ckey);
|
||||||
|
@ -78,11 +78,11 @@ void rpcClose(void *);
|
||||||
void *rpcMallocCont(int contLen);
|
void *rpcMallocCont(int contLen);
|
||||||
void rpcFreeCont(void *pCont);
|
void rpcFreeCont(void *pCont);
|
||||||
void *rpcReallocCont(void *ptr, int contLen);
|
void *rpcReallocCont(void *ptr, int contLen);
|
||||||
void rpcSendRequest(void *thandle, const SRpcIpSet *pIpSet, SRpcMsg *pMsg);
|
void rpcSendRequest(void *thandle, const SRpcEpSet *pEpSet, SRpcMsg *pMsg);
|
||||||
void rpcSendResponse(const SRpcMsg *pMsg);
|
void rpcSendResponse(const SRpcMsg *pMsg);
|
||||||
void rpcSendRedirectRsp(void *pConn, const SRpcIpSet *pIpSet);
|
void rpcSendRedirectRsp(void *pConn, const SRpcEpSet *pEpSet);
|
||||||
int rpcGetConnInfo(void *thandle, SRpcConnInfo *pInfo);
|
int rpcGetConnInfo(void *thandle, SRpcConnInfo *pInfo);
|
||||||
void rpcSendRecv(void *shandle, SRpcIpSet *pIpSet, SRpcMsg *pReq, SRpcMsg *pRsp);
|
void rpcSendRecv(void *shandle, SRpcEpSet *pEpSet, SRpcMsg *pReq, SRpcMsg *pRsp);
|
||||||
int rpcReportProgress(void *pConn, char *pCont, int contLen);
|
int rpcReportProgress(void *pConn, char *pCont, int contLen);
|
||||||
void rpcCancelRequest(void *pContext);
|
void rpcCancelRequest(void *pContext);
|
||||||
|
|
||||||
|
|
|
@ -174,11 +174,6 @@ typedef struct {
|
||||||
SHashObj *map; // speedup acquire the tableQueryInfo from STableId
|
SHashObj *map; // speedup acquire the tableQueryInfo from STableId
|
||||||
} STableGroupInfo;
|
} STableGroupInfo;
|
||||||
|
|
||||||
typedef struct SQueryRowCond {
|
|
||||||
int32_t rel;
|
|
||||||
TSKEY ts;
|
|
||||||
} SQueryRowCond;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the data block iterator, starting from position according to the query condition
|
* Get the data block iterator, starting from position according to the query condition
|
||||||
*
|
*
|
||||||
|
@ -275,7 +270,7 @@ int32_t tsdbQuerySTableByTagCond(TSDB_REPO_T *tsdb, uint64_t uid, const char *pT
|
||||||
* destory the created table group list, which is generated by tag query
|
* destory the created table group list, which is generated by tag query
|
||||||
* @param pGroupList
|
* @param pGroupList
|
||||||
*/
|
*/
|
||||||
void tsdbDestoryTableGroup(STableGroupInfo *pGroupList);
|
void tsdbDestroyTableGroup(STableGroupInfo *pGroupList);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* create the table group result including only one table, used to handle the normal table query
|
* create the table group result including only one table, used to handle the normal table query
|
||||||
|
|
|
@ -210,10 +210,10 @@ int32_t main(int32_t argc, char *argv[]) {
|
||||||
(void)snprintf(mnodeWal, TSDB_FILENAME_LEN*2, "%s/mnode/wal/wal0", arguments.dataDir);
|
(void)snprintf(mnodeWal, TSDB_FILENAME_LEN*2, "%s/mnode/wal/wal0", arguments.dataDir);
|
||||||
walModWalFile(mnodeWal);
|
walModWalFile(mnodeWal);
|
||||||
|
|
||||||
// 2. modfiy dnode config: mnodeIpList.json
|
// 2. modfiy dnode config: mnodeEpSet.json
|
||||||
char dnodeIpList[TSDB_FILENAME_LEN*2] = {0};
|
char dnodeEpSet[TSDB_FILENAME_LEN*2] = {0};
|
||||||
(void)snprintf(dnodeIpList, TSDB_FILENAME_LEN*2, "%s/dnode/mnodeIpList.json", arguments.dataDir);
|
(void)snprintf(dnodeEpSet, TSDB_FILENAME_LEN*2, "%s/dnode/mnodeEpSet.json", arguments.dataDir);
|
||||||
modDnodeIpList(dnodeIpList);
|
modDnodeEpSet(dnodeEpSet);
|
||||||
|
|
||||||
// 3. modify vnode config: config.json
|
// 3. modify vnode config: config.json
|
||||||
char vnodeDir[TSDB_FILENAME_LEN*2] = {0};
|
char vnodeDir[TSDB_FILENAME_LEN*2] = {0};
|
||||||
|
|
|
@ -71,7 +71,7 @@ int tSystemShell(const char * cmd);
|
||||||
void taosMvFile(char* destFile, char *srcFile) ;
|
void taosMvFile(char* destFile, char *srcFile) ;
|
||||||
void walModWalFile(char* walfile);
|
void walModWalFile(char* walfile);
|
||||||
SdnodeIfo* getDnodeInfo(int32_t dnodeId);
|
SdnodeIfo* getDnodeInfo(int32_t dnodeId);
|
||||||
void modDnodeIpList(char* dnodeIpList);
|
void modDnodeEpSet(char* dnodeEpSet);
|
||||||
void modAllVnode(char *vnodeDir);
|
void modAllVnode(char *vnodeDir);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -23,10 +23,10 @@
|
||||||
|
|
||||||
static SDMMnodeInfos tsDnodeIpInfos = {0};
|
static SDMMnodeInfos tsDnodeIpInfos = {0};
|
||||||
|
|
||||||
static bool dnodeReadMnodeInfos(char* dnodeIpList) {
|
static bool dnodeReadMnodeInfos(char* dnodeEpSet) {
|
||||||
FILE *fp = fopen(dnodeIpList, "r");
|
FILE *fp = fopen(dnodeEpSet, "r");
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
printf("failed to read mnodeIpList.json, file not exist\n");
|
printf("failed to read mnodeEpSet.json, file not exist\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,40 +37,40 @@ static bool dnodeReadMnodeInfos(char* dnodeIpList) {
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
free(content);
|
free(content);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
printf("failed to read mnodeIpList.json, content is null\n");
|
printf("failed to read mnodeEpSet.json, content is null\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
content[len] = 0;
|
content[len] = 0;
|
||||||
cJSON* root = cJSON_Parse(content);
|
cJSON* root = cJSON_Parse(content);
|
||||||
if (root == NULL) {
|
if (root == NULL) {
|
||||||
printf("failed to read mnodeIpList.json, invalid json format\n");
|
printf("failed to read mnodeEpSet.json, invalid json format\n");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
cJSON* inUse = cJSON_GetObjectItem(root, "inUse");
|
cJSON* inUse = cJSON_GetObjectItem(root, "inUse");
|
||||||
if (!inUse || inUse->type != cJSON_Number) {
|
if (!inUse || inUse->type != cJSON_Number) {
|
||||||
printf("failed to read mnodeIpList.json, inUse not found\n");
|
printf("failed to read mnodeEpSet.json, inUse not found\n");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
tsDnodeIpInfos.inUse = inUse->valueint;
|
tsDnodeIpInfos.inUse = inUse->valueint;
|
||||||
|
|
||||||
cJSON* nodeNum = cJSON_GetObjectItem(root, "nodeNum");
|
cJSON* nodeNum = cJSON_GetObjectItem(root, "nodeNum");
|
||||||
if (!nodeNum || nodeNum->type != cJSON_Number) {
|
if (!nodeNum || nodeNum->type != cJSON_Number) {
|
||||||
printf("failed to read mnodeIpList.json, nodeNum not found\n");
|
printf("failed to read mnodeEpSet.json, nodeNum not found\n");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
tsDnodeIpInfos.nodeNum = nodeNum->valueint;
|
tsDnodeIpInfos.nodeNum = nodeNum->valueint;
|
||||||
|
|
||||||
cJSON* nodeInfos = cJSON_GetObjectItem(root, "nodeInfos");
|
cJSON* nodeInfos = cJSON_GetObjectItem(root, "nodeInfos");
|
||||||
if (!nodeInfos || nodeInfos->type != cJSON_Array) {
|
if (!nodeInfos || nodeInfos->type != cJSON_Array) {
|
||||||
printf("failed to read mnodeIpList.json, nodeInfos not found\n");
|
printf("failed to read mnodeEpSet.json, nodeInfos not found\n");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
int size = cJSON_GetArraySize(nodeInfos);
|
int size = cJSON_GetArraySize(nodeInfos);
|
||||||
if (size != tsDnodeIpInfos.nodeNum) {
|
if (size != tsDnodeIpInfos.nodeNum) {
|
||||||
printf("failed to read mnodeIpList.json, nodeInfos size not matched\n");
|
printf("failed to read mnodeEpSet.json, nodeInfos size not matched\n");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,14 +80,14 @@ static bool dnodeReadMnodeInfos(char* dnodeIpList) {
|
||||||
|
|
||||||
cJSON *nodeId = cJSON_GetObjectItem(nodeInfo, "nodeId");
|
cJSON *nodeId = cJSON_GetObjectItem(nodeInfo, "nodeId");
|
||||||
if (!nodeId || nodeId->type != cJSON_Number) {
|
if (!nodeId || nodeId->type != cJSON_Number) {
|
||||||
printf("failed to read mnodeIpList.json, nodeId not found\n");
|
printf("failed to read mnodeEpSet.json, nodeId not found\n");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
tsDnodeIpInfos.nodeInfos[i].nodeId = nodeId->valueint;
|
tsDnodeIpInfos.nodeInfos[i].nodeId = nodeId->valueint;
|
||||||
|
|
||||||
cJSON *nodeEp = cJSON_GetObjectItem(nodeInfo, "nodeEp");
|
cJSON *nodeEp = cJSON_GetObjectItem(nodeInfo, "nodeEp");
|
||||||
if (!nodeEp || nodeEp->type != cJSON_String || nodeEp->valuestring == NULL) {
|
if (!nodeEp || nodeEp->type != cJSON_String || nodeEp->valuestring == NULL) {
|
||||||
printf("failed to read mnodeIpList.json, nodeName not found\n");
|
printf("failed to read mnodeEpSet.json, nodeName not found\n");
|
||||||
goto PARSE_OVER;
|
goto PARSE_OVER;
|
||||||
}
|
}
|
||||||
strncpy(tsDnodeIpInfos.nodeInfos[i].nodeEp, nodeEp->valuestring, TSDB_EP_LEN);
|
strncpy(tsDnodeIpInfos.nodeInfos[i].nodeEp, nodeEp->valuestring, TSDB_EP_LEN);
|
||||||
|
@ -102,7 +102,7 @@ static bool dnodeReadMnodeInfos(char* dnodeIpList) {
|
||||||
|
|
||||||
ret = true;
|
ret = true;
|
||||||
|
|
||||||
//printf("read mnode iplist successed, numOfIps:%d inUse:%d\n", tsDnodeIpInfos.nodeNum, tsDnodeIpInfos.inUse);
|
//printf("read mnode epSet successed, numOfEps:%d inUse:%d\n", tsDnodeIpInfos.nodeNum, tsDnodeIpInfos.inUse);
|
||||||
//for (int32_t i = 0; i < tsDnodeIpInfos.nodeNum; i++) {
|
//for (int32_t i = 0; i < tsDnodeIpInfos.nodeNum; i++) {
|
||||||
// printf("mnode:%d, %s\n", tsDnodeIpInfos.nodeInfos[i].nodeId, tsDnodeIpInfos.nodeInfos[i].nodeEp);
|
// printf("mnode:%d, %s\n", tsDnodeIpInfos.nodeInfos[i].nodeId, tsDnodeIpInfos.nodeInfos[i].nodeEp);
|
||||||
//}
|
//}
|
||||||
|
@ -115,8 +115,8 @@ PARSE_OVER:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void dnodeSaveMnodeInfos(char* dnodeIpList) {
|
static void dnodeSaveMnodeInfos(char* dnodeEpSet) {
|
||||||
FILE *fp = fopen(dnodeIpList, "w");
|
FILE *fp = fopen(dnodeEpSet, "w");
|
||||||
if (!fp) return;
|
if (!fp) return;
|
||||||
|
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
|
@ -143,13 +143,13 @@ static void dnodeSaveMnodeInfos(char* dnodeIpList) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
free(content);
|
free(content);
|
||||||
|
|
||||||
printf("mod mnode iplist successed\n");
|
printf("mod mnode epSet successed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void modDnodeIpList(char* dnodeIpList)
|
void modDnodeEpSet(char* dnodeEpSet)
|
||||||
{
|
{
|
||||||
(void)dnodeReadMnodeInfos(dnodeIpList);
|
(void)dnodeReadMnodeInfos(dnodeEpSet);
|
||||||
dnodeSaveMnodeInfos(dnodeIpList);
|
dnodeSaveMnodeInfos(dnodeEpSet);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ typedef struct SDnodeObj {
|
||||||
int32_t dnodeId;
|
int32_t dnodeId;
|
||||||
int32_t openVnodes;
|
int32_t openVnodes;
|
||||||
int64_t createdTime;
|
int64_t createdTime;
|
||||||
int32_t totalVnodes; // from dnode status msg, config information
|
int32_t resever0; // from dnode status msg, config information
|
||||||
int32_t customScore; // config by user
|
int32_t customScore; // config by user
|
||||||
uint32_t lastAccess;
|
uint32_t lastAccess;
|
||||||
uint16_t numOfCores; // from dnode status msg
|
uint16_t numOfCores; // from dnode status msg
|
||||||
|
@ -50,7 +50,7 @@ typedef struct SDnodeObj {
|
||||||
int8_t alternativeRole; // from dnode status msg, 0-any, 1-mgmt, 2-dnode
|
int8_t alternativeRole; // from dnode status msg, 0-any, 1-mgmt, 2-dnode
|
||||||
int8_t status; // set in balance function
|
int8_t status; // set in balance function
|
||||||
int8_t isMgmt;
|
int8_t isMgmt;
|
||||||
int8_t reserved0[14];
|
int8_t reserve1[14];
|
||||||
int8_t updateEnd[1];
|
int8_t updateEnd[1];
|
||||||
int32_t refCount;
|
int32_t refCount;
|
||||||
uint32_t moduleStatus;
|
uint32_t moduleStatus;
|
||||||
|
@ -61,7 +61,7 @@ typedef struct SDnodeObj {
|
||||||
int16_t cpuAvgUsage; // calc from sys.cpu
|
int16_t cpuAvgUsage; // calc from sys.cpu
|
||||||
int16_t memoryAvgUsage; // calc from sys.mem
|
int16_t memoryAvgUsage; // calc from sys.mem
|
||||||
int16_t bandwidthUsage; // calc from sys.band
|
int16_t bandwidthUsage; // calc from sys.band
|
||||||
int8_t reserved1[2];
|
int8_t reserved2[2];
|
||||||
} SDnodeObj;
|
} SDnodeObj;
|
||||||
|
|
||||||
typedef struct SMnodeObj {
|
typedef struct SMnodeObj {
|
||||||
|
|
|
@ -42,12 +42,12 @@ void mnodeIncMnodeRef(struct SMnodeObj *pMnode);
|
||||||
void mnodeDecMnodeRef(struct SMnodeObj *pMnode);
|
void mnodeDecMnodeRef(struct SMnodeObj *pMnode);
|
||||||
|
|
||||||
char * mnodeGetMnodeRoleStr();
|
char * mnodeGetMnodeRoleStr();
|
||||||
void mnodeGetMnodeIpSetForPeer(SRpcIpSet *ipSet);
|
void mnodeGetMnodeEpSetForPeer(SRpcEpSet *epSet);
|
||||||
void mnodeGetMnodeIpSetForShell(SRpcIpSet *ipSet);
|
void mnodeGetMnodeEpSetForShell(SRpcEpSet *epSet);
|
||||||
char* mnodeGetMnodeMasterEp();
|
char* mnodeGetMnodeMasterEp();
|
||||||
|
|
||||||
void mnodeGetMnodeInfos(void *mnodes);
|
void mnodeGetMnodeInfos(void *mnodes);
|
||||||
void mnodeUpdateMnodeIpSet();
|
void mnodeUpdateMnodeEpSet();
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,12 +44,12 @@ int32_t mnodeGetAvailableVgroup(struct SMnodeMsg *pMsg, SVgObj **pVgroup, int32_
|
||||||
|
|
||||||
void mnodeAddTableIntoVgroup(SVgObj *pVgroup, SChildTableObj *pTable);
|
void mnodeAddTableIntoVgroup(SVgObj *pVgroup, SChildTableObj *pTable);
|
||||||
void mnodeRemoveTableFromVgroup(SVgObj *pVgroup, SChildTableObj *pTable);
|
void mnodeRemoveTableFromVgroup(SVgObj *pVgroup, SChildTableObj *pTable);
|
||||||
void mnodeSendDropVnodeMsg(int32_t vgId, SRpcIpSet *ipSet, void *ahandle);
|
void mnodeSendDropVnodeMsg(int32_t vgId, SRpcEpSet *epSet, void *ahandle);
|
||||||
void mnodeSendCreateVgroupMsg(SVgObj *pVgroup, void *ahandle);
|
void mnodeSendCreateVgroupMsg(SVgObj *pVgroup, void *ahandle);
|
||||||
void mnodeSendAlterVgroupMsg(SVgObj *pVgroup);
|
void mnodeSendAlterVgroupMsg(SVgObj *pVgroup);
|
||||||
|
|
||||||
SRpcIpSet mnodeGetIpSetFromVgroup(SVgObj *pVgroup);
|
SRpcEpSet mnodeGetEpSetFromVgroup(SVgObj *pVgroup);
|
||||||
SRpcIpSet mnodeGetIpSetFromIp(char *ep);
|
SRpcEpSet mnodeGetEpSetFromIp(char *ep);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,11 +39,11 @@ int32_t balanceAllocVnodes(SVgObj *pVgroup) {
|
||||||
pIter = mnodeGetNextDnode(pIter, &pDnode);
|
pIter = mnodeGetNextDnode(pIter, &pDnode);
|
||||||
if (pDnode == NULL) break;
|
if (pDnode == NULL) break;
|
||||||
|
|
||||||
if (pDnode->totalVnodes > 0 && pDnode->openVnodes < pDnode->totalVnodes) {
|
if (pDnode->numOfCores > 0 && pDnode->openVnodes < TSDB_MAX_VNODES) {
|
||||||
float openVnodes = pDnode->openVnodes;
|
float openVnodes = pDnode->openVnodes;
|
||||||
if (pDnode->isMgmt) openVnodes += tsMnodeEqualVnodeNum;
|
if (pDnode->isMgmt) openVnodes += tsMnodeEqualVnodeNum;
|
||||||
|
|
||||||
float usage = openVnodes / pDnode->totalVnodes;
|
float usage = openVnodes / pDnode->numOfCores;
|
||||||
if (usage <= vnodeUsage) {
|
if (usage <= vnodeUsage) {
|
||||||
pSelDnode = pDnode;
|
pSelDnode = pDnode;
|
||||||
vnodeUsage = usage;
|
vnodeUsage = usage;
|
||||||
|
|
|
@ -289,14 +289,14 @@ static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromIp(pCmCfgDnode->ep);
|
SRpcEpSet epSet = mnodeGetEpSetFromIp(pCmCfgDnode->ep);
|
||||||
if (dnodeId != 0) {
|
if (dnodeId != 0) {
|
||||||
SDnodeObj *pDnode = mnodeGetDnode(dnodeId);
|
SDnodeObj *pDnode = mnodeGetDnode(dnodeId);
|
||||||
if (pDnode == NULL) {
|
if (pDnode == NULL) {
|
||||||
mError("failed to cfg dnode, invalid dnodeId:%d", dnodeId);
|
mError("failed to cfg dnode, invalid dnodeId:%d", dnodeId);
|
||||||
return TSDB_CODE_MND_DNODE_NOT_EXIST;
|
return TSDB_CODE_MND_DNODE_NOT_EXIST;
|
||||||
}
|
}
|
||||||
ipSet = mnodeGetIpSetFromIp(pDnode->dnodeEp);
|
epSet = mnodeGetEpSetFromIp(pDnode->dnodeEp);
|
||||||
mnodeDecDnodeRef(pDnode);
|
mnodeDecDnodeRef(pDnode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,7 +313,7 @@ static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) {
|
||||||
};
|
};
|
||||||
|
|
||||||
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);
|
dnodeSendMsgToDnode(&epSet, &rpcMdCfgDnodeMsg);
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -345,8 +345,7 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
|
||||||
pStatus->moduleStatus = htonl(pStatus->moduleStatus);
|
pStatus->moduleStatus = htonl(pStatus->moduleStatus);
|
||||||
pStatus->lastReboot = htonl(pStatus->lastReboot);
|
pStatus->lastReboot = htonl(pStatus->lastReboot);
|
||||||
pStatus->numOfCores = htons(pStatus->numOfCores);
|
pStatus->numOfCores = htons(pStatus->numOfCores);
|
||||||
pStatus->numOfTotalVnodes = htons(pStatus->numOfTotalVnodes);
|
|
||||||
|
|
||||||
uint32_t version = htonl(pStatus->version);
|
uint32_t version = htonl(pStatus->version);
|
||||||
if (version != tsVersion) {
|
if (version != tsVersion) {
|
||||||
mError("status msg version:%d not equal with mnode:%d", version, tsVersion);
|
mError("status msg version:%d not equal with mnode:%d", version, tsVersion);
|
||||||
|
@ -372,7 +371,6 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
|
||||||
pDnode->numOfCores = pStatus->numOfCores;
|
pDnode->numOfCores = pStatus->numOfCores;
|
||||||
pDnode->diskAvailable = pStatus->diskAvailable;
|
pDnode->diskAvailable = pStatus->diskAvailable;
|
||||||
pDnode->alternativeRole = pStatus->alternativeRole;
|
pDnode->alternativeRole = pStatus->alternativeRole;
|
||||||
pDnode->totalVnodes = pStatus->numOfTotalVnodes;
|
|
||||||
pDnode->moduleStatus = pStatus->moduleStatus;
|
pDnode->moduleStatus = pStatus->moduleStatus;
|
||||||
|
|
||||||
if (pStatus->dnodeId == 0) {
|
if (pStatus->dnodeId == 0) {
|
||||||
|
@ -401,9 +399,9 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
|
||||||
|
|
||||||
SVgObj *pVgroup = mnodeGetVgroup(pVload->vgId);
|
SVgObj *pVgroup = mnodeGetVgroup(pVload->vgId);
|
||||||
if (pVgroup == NULL) {
|
if (pVgroup == NULL) {
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromIp(pDnode->dnodeEp);
|
SRpcEpSet epSet = mnodeGetEpSetFromIp(pDnode->dnodeEp);
|
||||||
mInfo("dnode:%d, vgId:%d not exist in mnode, drop it", pDnode->dnodeId, pVload->vgId);
|
mInfo("dnode:%d, vgId:%d not exist in mnode, drop it", pDnode->dnodeId, pVload->vgId);
|
||||||
mnodeSendDropVnodeMsg(pVload->vgId, &ipSet, NULL);
|
mnodeSendDropVnodeMsg(pVload->vgId, &epSet, NULL);
|
||||||
} else {
|
} else {
|
||||||
mnodeUpdateVgroupStatus(pVgroup, pDnode, pVload);
|
mnodeUpdateVgroupStatus(pVgroup, pDnode, pVload);
|
||||||
pAccess->vgId = htonl(pVload->vgId);
|
pAccess->vgId = htonl(pVload->vgId);
|
||||||
|
@ -452,17 +450,29 @@ static int32_t mnodeCreateDnode(char *ep, SMnodeMsg *pMsg) {
|
||||||
return grantCode;
|
return grantCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char dnodeEp[TSDB_EP_LEN] = {0};
|
||||||
|
tstrncpy(dnodeEp, ep, TSDB_EP_LEN);
|
||||||
|
strtrim(dnodeEp);
|
||||||
|
|
||||||
|
char *temp = strchr(dnodeEp, ':');
|
||||||
|
if (!temp) {
|
||||||
|
int len = strlen(dnodeEp);
|
||||||
|
if (dnodeEp[len - 1] == ';') dnodeEp[len - 1] = 0;
|
||||||
|
len = strlen(dnodeEp);
|
||||||
|
snprintf(dnodeEp + len, TSDB_EP_LEN - len, ":%d", tsServerPort);
|
||||||
|
}
|
||||||
|
ep = dnodeEp;
|
||||||
|
|
||||||
SDnodeObj *pDnode = mnodeGetDnodeByEp(ep);
|
SDnodeObj *pDnode = mnodeGetDnodeByEp(ep);
|
||||||
if (pDnode != NULL) {
|
if (pDnode != NULL) {
|
||||||
mnodeDecDnodeRef(pDnode);
|
mnodeDecDnodeRef(pDnode);
|
||||||
mError("dnode:%d is alredy exist, %s:%d", pDnode->dnodeId, pDnode->dnodeFqdn, pDnode->dnodePort);
|
mError("dnode:%d is already exist, %s:%d", pDnode->dnodeId, pDnode->dnodeFqdn, pDnode->dnodePort);
|
||||||
return TSDB_CODE_MND_DNODE_ALREADY_EXIST;
|
return TSDB_CODE_MND_DNODE_ALREADY_EXIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
pDnode = (SDnodeObj *) calloc(1, sizeof(SDnodeObj));
|
pDnode = (SDnodeObj *) calloc(1, sizeof(SDnodeObj));
|
||||||
pDnode->createdTime = taosGetTimestampMs();
|
pDnode->createdTime = taosGetTimestampMs();
|
||||||
pDnode->status = TAOS_DN_STATUS_OFFLINE;
|
pDnode->status = TAOS_DN_STATUS_OFFLINE;
|
||||||
pDnode->totalVnodes = TSDB_INVALID_VNODE_NUM;
|
|
||||||
tstrncpy(pDnode->dnodeEp, ep, TSDB_EP_LEN);
|
tstrncpy(pDnode->dnodeEp, ep, TSDB_EP_LEN);
|
||||||
taosGetFqdnPortFromEp(ep, pDnode->dnodeFqdn, &pDnode->dnodePort);
|
taosGetFqdnPortFromEp(ep, pDnode->dnodeFqdn, &pDnode->dnodePort);
|
||||||
|
|
||||||
|
@ -507,8 +517,12 @@ int32_t mnodeDropDnode(SDnodeObj *pDnode, void *pMsg) {
|
||||||
static int32_t mnodeDropDnodeByEp(char *ep, SMnodeMsg *pMsg) {
|
static int32_t mnodeDropDnodeByEp(char *ep, SMnodeMsg *pMsg) {
|
||||||
SDnodeObj *pDnode = mnodeGetDnodeByEp(ep);
|
SDnodeObj *pDnode = mnodeGetDnodeByEp(ep);
|
||||||
if (pDnode == NULL) {
|
if (pDnode == NULL) {
|
||||||
mError("dnode:%s, is not exist", ep);
|
int32_t dnodeId = (int32_t)strtol(ep, NULL, 10);
|
||||||
return TSDB_CODE_MND_DNODE_NOT_EXIST;
|
pDnode = mnodeGetDnode(dnodeId);
|
||||||
|
if (pDnode == NULL) {
|
||||||
|
mError("dnode:%s, is not exist", ep);
|
||||||
|
return TSDB_CODE_MND_DNODE_NOT_EXIST;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(pDnode->dnodeEp, mnodeGetMnodeMasterEp()) == 0) {
|
if (strcmp(pDnode->dnodeEp, mnodeGetMnodeMasterEp()) == 0) {
|
||||||
|
@ -575,13 +589,13 @@ static int32_t mnodeGetDnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
|
||||||
|
|
||||||
pShow->bytes[cols] = 2;
|
pShow->bytes[cols] = 2;
|
||||||
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
||||||
strcpy(pSchema[cols].name, "open_vnodes");
|
strcpy(pSchema[cols].name, "vnodes");
|
||||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pShow->bytes[cols] = 2;
|
pShow->bytes[cols] = 2;
|
||||||
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
||||||
strcpy(pSchema[cols].name, "total_vnodes");
|
strcpy(pSchema[cols].name, "cores");
|
||||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
|
@ -593,7 +607,7 @@ static int32_t mnodeGetDnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
|
||||||
|
|
||||||
pShow->bytes[cols] = 6 + VARSTR_HEADER_SIZE;
|
pShow->bytes[cols] = 6 + VARSTR_HEADER_SIZE;
|
||||||
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
||||||
strcpy(pSchema[cols].name, "alternativeRole");
|
strcpy(pSchema[cols].name, "role");
|
||||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
|
@ -645,7 +659,7 @@ static int32_t mnodeRetrieveDnodes(SShowObj *pShow, char *data, int32_t rows, vo
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
*(int16_t *)pWrite = pDnode->totalVnodes;
|
*(int16_t *)pWrite = pDnode->numOfCores;
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
|
|
|
@ -35,8 +35,8 @@
|
||||||
|
|
||||||
static void * tsMnodeSdb = NULL;
|
static void * tsMnodeSdb = NULL;
|
||||||
static int32_t tsMnodeUpdateSize = 0;
|
static int32_t tsMnodeUpdateSize = 0;
|
||||||
static SRpcIpSet tsMnodeIpSetForShell;
|
static SRpcEpSet tsMnodeEpSetForShell;
|
||||||
static SRpcIpSet tsMnodeIpSetForPeer;
|
static SRpcEpSet tsMnodeEpSetForPeer;
|
||||||
static SDMMnodeInfos tsMnodeInfos;
|
static SDMMnodeInfos tsMnodeInfos;
|
||||||
static int32_t mnodeGetMnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn);
|
static int32_t mnodeGetMnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn);
|
||||||
static int32_t mnodeRetrieveMnodes(SShowObj *pShow, char *data, int32_t rows, void *pConn);
|
static int32_t mnodeRetrieveMnodes(SShowObj *pShow, char *data, int32_t rows, void *pConn);
|
||||||
|
@ -123,7 +123,7 @@ static int32_t mnodeMnodeActionRestored() {
|
||||||
sdbFreeIter(pIter);
|
sdbFreeIter(pIter);
|
||||||
}
|
}
|
||||||
|
|
||||||
mnodeUpdateMnodeIpSet();
|
mnodeUpdateMnodeEpSet();
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -204,13 +204,13 @@ char *mnodeGetMnodeRoleStr(int32_t role) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void mnodeUpdateMnodeIpSet() {
|
void mnodeUpdateMnodeEpSet() {
|
||||||
mInfo("update mnodes ipset, numOfIps:%d ", mnodeGetMnodesNum());
|
mInfo("update mnodes epSet, numOfEps:%d ", mnodeGetMnodesNum());
|
||||||
|
|
||||||
mnodeMnodeWrLock();
|
mnodeMnodeWrLock();
|
||||||
|
|
||||||
memset(&tsMnodeIpSetForShell, 0, sizeof(SRpcIpSet));
|
memset(&tsMnodeEpSetForShell, 0, sizeof(SRpcEpSet));
|
||||||
memset(&tsMnodeIpSetForPeer, 0, sizeof(SRpcIpSet));
|
memset(&tsMnodeEpSetForPeer, 0, sizeof(SRpcEpSet));
|
||||||
memset(&tsMnodeInfos, 0, sizeof(SDMMnodeInfos));
|
memset(&tsMnodeInfos, 0, sizeof(SDMMnodeInfos));
|
||||||
|
|
||||||
int32_t index = 0;
|
int32_t index = 0;
|
||||||
|
@ -222,20 +222,20 @@ void mnodeUpdateMnodeIpSet() {
|
||||||
|
|
||||||
SDnodeObj *pDnode = mnodeGetDnode(pMnode->mnodeId);
|
SDnodeObj *pDnode = mnodeGetDnode(pMnode->mnodeId);
|
||||||
if (pDnode != NULL) {
|
if (pDnode != NULL) {
|
||||||
strcpy(tsMnodeIpSetForShell.fqdn[index], pDnode->dnodeFqdn);
|
strcpy(tsMnodeEpSetForShell.fqdn[index], pDnode->dnodeFqdn);
|
||||||
tsMnodeIpSetForShell.port[index] = htons(pDnode->dnodePort);
|
tsMnodeEpSetForShell.port[index] = htons(pDnode->dnodePort);
|
||||||
mDebug("mnode:%d, for shell fqdn:%s %d", pDnode->dnodeId, tsMnodeIpSetForShell.fqdn[index], htons(tsMnodeIpSetForShell.port[index]));
|
mDebug("mnode:%d, for shell fqdn:%s %d", pDnode->dnodeId, tsMnodeEpSetForShell.fqdn[index], htons(tsMnodeEpSetForShell.port[index]));
|
||||||
|
|
||||||
strcpy(tsMnodeIpSetForPeer.fqdn[index], pDnode->dnodeFqdn);
|
strcpy(tsMnodeEpSetForPeer.fqdn[index], pDnode->dnodeFqdn);
|
||||||
tsMnodeIpSetForPeer.port[index] = htons(pDnode->dnodePort + TSDB_PORT_DNODEDNODE);
|
tsMnodeEpSetForPeer.port[index] = htons(pDnode->dnodePort + TSDB_PORT_DNODEDNODE);
|
||||||
mDebug("mnode:%d, for peer fqdn:%s %d", pDnode->dnodeId, tsMnodeIpSetForPeer.fqdn[index], htons(tsMnodeIpSetForPeer.port[index]));
|
mDebug("mnode:%d, for peer fqdn:%s %d", pDnode->dnodeId, tsMnodeEpSetForPeer.fqdn[index], htons(tsMnodeEpSetForPeer.port[index]));
|
||||||
|
|
||||||
tsMnodeInfos.nodeInfos[index].nodeId = htonl(pMnode->mnodeId);
|
tsMnodeInfos.nodeInfos[index].nodeId = htonl(pMnode->mnodeId);
|
||||||
strcpy(tsMnodeInfos.nodeInfos[index].nodeEp, pDnode->dnodeEp);
|
strcpy(tsMnodeInfos.nodeInfos[index].nodeEp, pDnode->dnodeEp);
|
||||||
|
|
||||||
if (pMnode->role == TAOS_SYNC_ROLE_MASTER) {
|
if (pMnode->role == TAOS_SYNC_ROLE_MASTER) {
|
||||||
tsMnodeIpSetForShell.inUse = index;
|
tsMnodeEpSetForShell.inUse = index;
|
||||||
tsMnodeIpSetForPeer.inUse = index;
|
tsMnodeEpSetForPeer.inUse = index;
|
||||||
tsMnodeInfos.inUse = index;
|
tsMnodeInfos.inUse = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,23 +248,23 @@ void mnodeUpdateMnodeIpSet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
tsMnodeInfos.nodeNum = index;
|
tsMnodeInfos.nodeNum = index;
|
||||||
tsMnodeIpSetForShell.numOfIps = index;
|
tsMnodeEpSetForShell.numOfEps = index;
|
||||||
tsMnodeIpSetForPeer.numOfIps = index;
|
tsMnodeEpSetForPeer.numOfEps = index;
|
||||||
|
|
||||||
sdbFreeIter(pIter);
|
sdbFreeIter(pIter);
|
||||||
|
|
||||||
mnodeMnodeUnLock();
|
mnodeMnodeUnLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void mnodeGetMnodeIpSetForPeer(SRpcIpSet *ipSet) {
|
void mnodeGetMnodeEpSetForPeer(SRpcEpSet *epSet) {
|
||||||
mnodeMnodeRdLock();
|
mnodeMnodeRdLock();
|
||||||
*ipSet = tsMnodeIpSetForPeer;
|
*epSet = tsMnodeEpSetForPeer;
|
||||||
mnodeMnodeUnLock();
|
mnodeMnodeUnLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void mnodeGetMnodeIpSetForShell(SRpcIpSet *ipSet) {
|
void mnodeGetMnodeEpSetForShell(SRpcEpSet *epSet) {
|
||||||
mnodeMnodeRdLock();
|
mnodeMnodeRdLock();
|
||||||
*ipSet = tsMnodeIpSetForShell;
|
*epSet = tsMnodeEpSetForShell;
|
||||||
mnodeMnodeUnLock();
|
mnodeMnodeUnLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -295,7 +295,7 @@ int32_t mnodeAddMnode(int32_t dnodeId) {
|
||||||
code = TSDB_CODE_MND_SDB_ERROR;
|
code = TSDB_CODE_MND_SDB_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
mnodeUpdateMnodeIpSet();
|
mnodeUpdateMnodeEpSet();
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
@ -308,7 +308,7 @@ void mnodeDropMnodeLocal(int32_t dnodeId) {
|
||||||
mnodeDecMnodeRef(pMnode);
|
mnodeDecMnodeRef(pMnode);
|
||||||
}
|
}
|
||||||
|
|
||||||
mnodeUpdateMnodeIpSet();
|
mnodeUpdateMnodeEpSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t mnodeDropMnode(int32_t dnodeId) {
|
int32_t mnodeDropMnode(int32_t dnodeId) {
|
||||||
|
@ -330,7 +330,7 @@ int32_t mnodeDropMnode(int32_t dnodeId) {
|
||||||
|
|
||||||
sdbDecRef(tsMnodeSdb, pMnode);
|
sdbDecRef(tsMnodeSdb, pMnode);
|
||||||
|
|
||||||
mnodeUpdateMnodeIpSet();
|
mnodeUpdateMnodeEpSet();
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,14 +53,14 @@ int32_t mnodeProcessPeerReq(SMnodeMsg *pMsg) {
|
||||||
|
|
||||||
if (!sdbIsMaster()) {
|
if (!sdbIsMaster()) {
|
||||||
SMnodeRsp *rpcRsp = &pMsg->rpcRsp;
|
SMnodeRsp *rpcRsp = &pMsg->rpcRsp;
|
||||||
SRpcIpSet *ipSet = rpcMallocCont(sizeof(SRpcIpSet));
|
SRpcEpSet *epSet = rpcMallocCont(sizeof(SRpcEpSet));
|
||||||
mnodeGetMnodeIpSetForPeer(ipSet);
|
mnodeGetMnodeEpSetForPeer(epSet);
|
||||||
rpcRsp->rsp = ipSet;
|
rpcRsp->rsp = epSet;
|
||||||
rpcRsp->len = sizeof(SRpcIpSet);
|
rpcRsp->len = sizeof(SRpcEpSet);
|
||||||
|
|
||||||
mDebug("%p, msg:%s in mpeer queue, will be redireced inUse:%d", pMsg->rpcMsg.ahandle, taosMsg[pMsg->rpcMsg.msgType], ipSet->inUse);
|
mDebug("%p, msg:%s in mpeer queue, will be redireced inUse:%d", pMsg->rpcMsg.ahandle, taosMsg[pMsg->rpcMsg.msgType], epSet->inUse);
|
||||||
for (int32_t i = 0; i < ipSet->numOfIps; ++i) {
|
for (int32_t i = 0; i < epSet->numOfEps; ++i) {
|
||||||
mDebug("mnode index:%d ip:%s:%d", i, ipSet->fqdn[i], htons(ipSet->port[i]));
|
mDebug("mnode index:%d ep:%s:%d", i, epSet->fqdn[i], htons(epSet->port[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_RPC_REDIRECT;
|
return TSDB_CODE_RPC_REDIRECT;
|
||||||
|
|
|
@ -49,14 +49,14 @@ int32_t mnodeProcessRead(SMnodeMsg *pMsg) {
|
||||||
|
|
||||||
if (!sdbIsMaster()) {
|
if (!sdbIsMaster()) {
|
||||||
SMnodeRsp *rpcRsp = &pMsg->rpcRsp;
|
SMnodeRsp *rpcRsp = &pMsg->rpcRsp;
|
||||||
SRpcIpSet *ipSet = rpcMallocCont(sizeof(SRpcIpSet));
|
SRpcEpSet *epSet = rpcMallocCont(sizeof(SRpcEpSet));
|
||||||
mnodeGetMnodeIpSetForShell(ipSet);
|
mnodeGetMnodeEpSetForShell(epSet);
|
||||||
rpcRsp->rsp = ipSet;
|
rpcRsp->rsp = epSet;
|
||||||
rpcRsp->len = sizeof(SRpcIpSet);
|
rpcRsp->len = sizeof(SRpcEpSet);
|
||||||
|
|
||||||
mDebug("%p, msg:%s in mread queue, will be redireced, inUse:%d", pMsg->rpcMsg.ahandle, taosMsg[pMsg->rpcMsg.msgType], ipSet->inUse);
|
mDebug("%p, msg:%s in mread queue, will be redireced, inUse:%d", pMsg->rpcMsg.ahandle, taosMsg[pMsg->rpcMsg.msgType], epSet->inUse);
|
||||||
for (int32_t i = 0; i < ipSet->numOfIps; ++i) {
|
for (int32_t i = 0; i < epSet->numOfEps; ++i) {
|
||||||
mDebug("mnode index:%d ip:%s:%d", i, ipSet->fqdn[i], htons(ipSet->port[i]));
|
mDebug("mnode index:%d ep:%s:%d", i, epSet->fqdn[i], htons(epSet->port[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_RPC_REDIRECT;
|
return TSDB_CODE_RPC_REDIRECT;
|
||||||
|
|
|
@ -77,11 +77,6 @@ typedef struct {
|
||||||
pthread_mutex_t mutex;
|
pthread_mutex_t mutex;
|
||||||
} SSdbObject;
|
} SSdbObject;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int32_t rowSize;
|
|
||||||
void * row;
|
|
||||||
} SSdbRow;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
int32_t workerId;
|
int32_t workerId;
|
||||||
|
@ -219,7 +214,7 @@ void sdbUpdateMnodeRoles() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mnodeUpdateMnodeIpSet();
|
mnodeUpdateMnodeEpSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t sdbGetFileInfo(void *ahandle, char *name, uint32_t *index, uint32_t eindex, int32_t *size, uint64_t *fversion) {
|
static uint32_t sdbGetFileInfo(void *ahandle, char *name, uint32_t *index, uint32_t eindex, int32_t *size, uint64_t *fversion) {
|
||||||
|
@ -419,32 +414,28 @@ void sdbDecRef(void *handle, void *pObj) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static SSdbRow *sdbGetRowMeta(SSdbTable *pTable, void *key) {
|
static void *sdbGetRowMeta(SSdbTable *pTable, void *key) {
|
||||||
if (pTable == NULL) return NULL;
|
if (pTable == NULL) return NULL;
|
||||||
|
|
||||||
int32_t keySize = sizeof(int32_t);
|
int32_t keySize = sizeof(int32_t);
|
||||||
if (pTable->keyType == SDB_KEY_STRING || pTable->keyType == SDB_KEY_VAR_STRING) {
|
if (pTable->keyType == SDB_KEY_STRING || pTable->keyType == SDB_KEY_VAR_STRING) {
|
||||||
keySize = strlen((char *)key);
|
keySize = strlen((char *)key);
|
||||||
}
|
}
|
||||||
|
|
||||||
return taosHashGet(pTable->iHandle, key, keySize);
|
void **ppRow = (void **)taosHashGet(pTable->iHandle, key, keySize);
|
||||||
|
if (ppRow == NULL) return NULL;
|
||||||
|
return *ppRow;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SSdbRow *sdbGetRowMetaFromObj(SSdbTable *pTable, void *key) {
|
static void *sdbGetRowMetaFromObj(SSdbTable *pTable, void *key) {
|
||||||
return sdbGetRowMeta(pTable, sdbGetObjKey(pTable, key));
|
return sdbGetRowMeta(pTable, sdbGetObjKey(pTable, key));
|
||||||
}
|
}
|
||||||
|
|
||||||
void *sdbGetRow(void *handle, void *key) {
|
void *sdbGetRow(void *handle, void *key) {
|
||||||
SSdbTable *pTable = (SSdbTable *)handle;
|
void *pRow = sdbGetRowMeta(handle, key);
|
||||||
int32_t keySize = sizeof(int32_t);
|
if (pRow) {
|
||||||
if (pTable->keyType == SDB_KEY_STRING || pTable->keyType == SDB_KEY_VAR_STRING) {
|
sdbIncRef(handle, pRow);
|
||||||
keySize = strlen((char *)key);
|
return pRow;
|
||||||
}
|
|
||||||
|
|
||||||
SSdbRow *pMeta = taosHashGet(pTable->iHandle, key, keySize);
|
|
||||||
if (pMeta) {
|
|
||||||
sdbIncRef(pTable, pMeta->row);
|
|
||||||
return pMeta->row;
|
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -455,10 +446,6 @@ static void *sdbGetRowFromObj(SSdbTable *pTable, void *key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t sdbInsertHash(SSdbTable *pTable, SSdbOper *pOper) {
|
static int32_t sdbInsertHash(SSdbTable *pTable, SSdbOper *pOper) {
|
||||||
SSdbRow rowMeta;
|
|
||||||
rowMeta.rowSize = pOper->rowSize;
|
|
||||||
rowMeta.row = pOper->pObj;
|
|
||||||
|
|
||||||
void * key = sdbGetObjKey(pTable, pOper->pObj);
|
void * key = sdbGetObjKey(pTable, pOper->pObj);
|
||||||
int32_t keySize = sizeof(int32_t);
|
int32_t keySize = sizeof(int32_t);
|
||||||
|
|
||||||
|
@ -466,7 +453,7 @@ static int32_t sdbInsertHash(SSdbTable *pTable, SSdbOper *pOper) {
|
||||||
keySize = strlen((char *)key);
|
keySize = strlen((char *)key);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosHashPut(pTable->iHandle, key, keySize, &rowMeta, sizeof(SSdbRow));
|
taosHashPut(pTable->iHandle, key, keySize, &pOper->pObj, sizeof(void **));
|
||||||
|
|
||||||
sdbIncRef(pTable, pOper->pObj);
|
sdbIncRef(pTable, pOper->pObj);
|
||||||
atomic_add_fetch_32(&pTable->numOfRows, 1);
|
atomic_add_fetch_32(&pTable->numOfRows, 1);
|
||||||
|
@ -586,17 +573,17 @@ static int sdbWrite(void *param, void *data, int type) {
|
||||||
code = (*pTable->decodeFp)(&oper);
|
code = (*pTable->decodeFp)(&oper);
|
||||||
return sdbInsertHash(pTable, &oper);
|
return sdbInsertHash(pTable, &oper);
|
||||||
} else if (action == SDB_ACTION_DELETE) {
|
} else if (action == SDB_ACTION_DELETE) {
|
||||||
SSdbRow *rowMeta = sdbGetRowMeta(pTable, pHead->cont);
|
void *pRow = sdbGetRowMeta(pTable, pHead->cont);
|
||||||
if (rowMeta == NULL || rowMeta->row == NULL) {
|
if (pRow == NULL) {
|
||||||
sdbError("table:%s, failed to get object:%s from wal while dispose delete action", pTable->tableName,
|
sdbError("table:%s, failed to get object:%s from wal while dispose delete action", pTable->tableName,
|
||||||
pHead->cont);
|
pHead->cont);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
SSdbOper oper = {.table = pTable, .pObj = rowMeta->row};
|
SSdbOper oper = {.table = pTable, .pObj = pRow};
|
||||||
return sdbDeleteHash(pTable, &oper);
|
return sdbDeleteHash(pTable, &oper);
|
||||||
} else if (action == SDB_ACTION_UPDATE) {
|
} else if (action == SDB_ACTION_UPDATE) {
|
||||||
SSdbRow *rowMeta = sdbGetRowMeta(pTable, pHead->cont);
|
void *pRow = sdbGetRowMeta(pTable, pHead->cont);
|
||||||
if (rowMeta == NULL || rowMeta->row == NULL) {
|
if (pRow == NULL) {
|
||||||
sdbError("table:%s, failed to get object:%s from wal while dispose update action", pTable->tableName,
|
sdbError("table:%s, failed to get object:%s from wal while dispose update action", pTable->tableName,
|
||||||
pHead->cont);
|
pHead->cont);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -675,18 +662,12 @@ int32_t sdbDeleteRow(SSdbOper *pOper) {
|
||||||
SSdbTable *pTable = (SSdbTable *)pOper->table;
|
SSdbTable *pTable = (SSdbTable *)pOper->table;
|
||||||
if (pTable == NULL) return TSDB_CODE_MND_SDB_INVALID_TABLE_TYPE;
|
if (pTable == NULL) return TSDB_CODE_MND_SDB_INVALID_TABLE_TYPE;
|
||||||
|
|
||||||
SSdbRow *pMeta = sdbGetRowMetaFromObj(pTable, pOper->pObj);
|
void *pRow = sdbGetRowMetaFromObj(pTable, pOper->pObj);
|
||||||
if (pMeta == NULL) {
|
if (pRow == NULL) {
|
||||||
sdbDebug("table:%s, record is not there, delete failed", pTable->tableName);
|
sdbDebug("table:%s, record is not there, delete failed", pTable->tableName);
|
||||||
return TSDB_CODE_MND_SDB_OBJ_NOT_THERE;
|
return TSDB_CODE_MND_SDB_OBJ_NOT_THERE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *pMetaRow = pMeta->row;
|
|
||||||
if (pMetaRow == NULL) {
|
|
||||||
sdbError("table:%s, record meta is null", pTable->tableName);
|
|
||||||
return TSDB_CODE_MND_SDB_INVAID_META_ROW;
|
|
||||||
}
|
|
||||||
|
|
||||||
sdbIncRef(pTable, pOper->pObj);
|
sdbIncRef(pTable, pOper->pObj);
|
||||||
|
|
||||||
int32_t code = sdbDeleteHash(pTable, pOper);
|
int32_t code = sdbDeleteHash(pTable, pOper);
|
||||||
|
@ -728,18 +709,12 @@ int32_t sdbUpdateRow(SSdbOper *pOper) {
|
||||||
SSdbTable *pTable = (SSdbTable *)pOper->table;
|
SSdbTable *pTable = (SSdbTable *)pOper->table;
|
||||||
if (pTable == NULL) return TSDB_CODE_MND_SDB_INVALID_TABLE_TYPE;
|
if (pTable == NULL) return TSDB_CODE_MND_SDB_INVALID_TABLE_TYPE;
|
||||||
|
|
||||||
SSdbRow *pMeta = sdbGetRowMetaFromObj(pTable, pOper->pObj);
|
void *pRow = sdbGetRowMetaFromObj(pTable, pOper->pObj);
|
||||||
if (pMeta == NULL) {
|
if (pRow == NULL) {
|
||||||
sdbDebug("table:%s, record is not there, update failed", pTable->tableName);
|
sdbDebug("table:%s, record is not there, update failed", pTable->tableName);
|
||||||
return TSDB_CODE_MND_SDB_OBJ_NOT_THERE;
|
return TSDB_CODE_MND_SDB_OBJ_NOT_THERE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *pMetaRow = pMeta->row;
|
|
||||||
if (pMetaRow == NULL) {
|
|
||||||
sdbError("table:%s, record meta is null", pTable->tableName);
|
|
||||||
return TSDB_CODE_MND_SDB_INVAID_META_ROW;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t code = sdbUpdateHash(pTable, pOper);
|
int32_t code = sdbUpdateHash(pTable, pOper);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
sdbError("table:%s, failed to update hash", pTable->tableName);
|
sdbError("table:%s, failed to update hash", pTable->tableName);
|
||||||
|
@ -789,14 +764,14 @@ void *sdbFetchRow(void *handle, void *pNode, void **ppRow) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSdbRow *pMeta = taosHashIterGet(pIter);
|
void **ppMetaRow = taosHashIterGet(pIter);
|
||||||
if (pMeta == NULL) {
|
if (ppMetaRow == NULL) {
|
||||||
taosHashDestroyIter(pIter);
|
taosHashDestroyIter(pIter);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ppRow = pMeta->row;
|
*ppRow = *ppMetaRow;
|
||||||
sdbIncRef(handle, pMeta->row);
|
sdbIncRef(handle, *ppMetaRow);
|
||||||
|
|
||||||
return pIter;
|
return pIter;
|
||||||
}
|
}
|
||||||
|
@ -846,11 +821,11 @@ void sdbCloseTable(void *handle) {
|
||||||
|
|
||||||
SHashMutableIterator *pIter = taosHashCreateIter(pTable->iHandle);
|
SHashMutableIterator *pIter = taosHashCreateIter(pTable->iHandle);
|
||||||
while (taosHashIterNext(pIter)) {
|
while (taosHashIterNext(pIter)) {
|
||||||
SSdbRow *pMeta = taosHashIterGet(pIter);
|
void **ppRow = taosHashIterGet(pIter);
|
||||||
if (pMeta == NULL) continue;
|
if (ppRow == NULL) continue;
|
||||||
|
|
||||||
SSdbOper oper = {
|
SSdbOper oper = {
|
||||||
.pObj = pMeta->row,
|
.pObj = *ppRow,
|
||||||
.table = pTable,
|
.table = pTable,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -270,7 +270,7 @@ static int32_t mnodeProcessHeartBeatMsg(SMnodeMsg *pMsg) {
|
||||||
|
|
||||||
pHBRsp->onlineDnodes = htonl(mnodeGetOnlinDnodesNum());
|
pHBRsp->onlineDnodes = htonl(mnodeGetOnlinDnodesNum());
|
||||||
pHBRsp->totalDnodes = htonl(mnodeGetDnodesNum());
|
pHBRsp->totalDnodes = htonl(mnodeGetDnodesNum());
|
||||||
mnodeGetMnodeIpSetForShell(&pHBRsp->ipList);
|
mnodeGetMnodeEpSetForShell(&pHBRsp->epSet);
|
||||||
|
|
||||||
pMsg->rpcRsp.rsp = pHBRsp;
|
pMsg->rpcRsp.rsp = pHBRsp;
|
||||||
pMsg->rpcRsp.len = sizeof(SCMHeartBeatRsp);
|
pMsg->rpcRsp.len = sizeof(SCMHeartBeatRsp);
|
||||||
|
@ -335,7 +335,7 @@ static int32_t mnodeProcessConnectMsg(SMnodeMsg *pMsg) {
|
||||||
pConnectRsp->writeAuth = pUser->writeAuth;
|
pConnectRsp->writeAuth = pUser->writeAuth;
|
||||||
pConnectRsp->superAuth = pUser->superAuth;
|
pConnectRsp->superAuth = pUser->superAuth;
|
||||||
|
|
||||||
mnodeGetMnodeIpSetForShell(&pConnectRsp->ipList);
|
mnodeGetMnodeEpSetForShell(&pConnectRsp->epSet);
|
||||||
|
|
||||||
connect_over:
|
connect_over:
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
|
|
@ -107,42 +107,41 @@ static int32_t mnodeChildTableActionInsert(SSdbOper *pOper) {
|
||||||
SVgObj *pVgroup = mnodeGetVgroup(pTable->vgId);
|
SVgObj *pVgroup = mnodeGetVgroup(pTable->vgId);
|
||||||
if (pVgroup == NULL) {
|
if (pVgroup == NULL) {
|
||||||
mError("ctable:%s, not in vgId:%d", pTable->info.tableId, pTable->vgId);
|
mError("ctable:%s, not in vgId:%d", pTable->info.tableId, pTable->vgId);
|
||||||
return TSDB_CODE_MND_VGROUP_NOT_EXIST;
|
|
||||||
}
|
}
|
||||||
mnodeDecVgroupRef(pVgroup);
|
|
||||||
|
|
||||||
SDbObj *pDb = mnodeGetDb(pVgroup->dbName);
|
SDbObj *pDb = NULL;
|
||||||
if (pDb == NULL) {
|
if (pVgroup != NULL) {
|
||||||
mError("ctable:%s, vgId:%d not in db:%s", pTable->info.tableId, pVgroup->vgId, pVgroup->dbName);
|
pDb = mnodeGetDb(pVgroup->dbName);
|
||||||
return TSDB_CODE_MND_INVALID_DB;
|
if (pDb == NULL) {
|
||||||
|
mError("ctable:%s, vgId:%d not in db:%s", pTable->info.tableId, pVgroup->vgId, pVgroup->dbName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
|
||||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
|
||||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
|
||||||
}
|
|
||||||
mnodeDecDbRef(pDb);
|
|
||||||
|
|
||||||
SAcctObj *pAcct = mnodeGetAcct(pDb->acct);
|
SAcctObj *pAcct = NULL;
|
||||||
if (pAcct == NULL) {
|
if (pDb != NULL) {
|
||||||
mError("ctable:%s, acct:%s not exists", pTable->info.tableId, pDb->acct);
|
pAcct = mnodeGetAcct(pDb->acct);
|
||||||
return TSDB_CODE_MND_INVALID_ACCT;
|
if (pAcct == NULL) {
|
||||||
|
mError("ctable:%s, acct:%s not exists", pTable->info.tableId, pDb->acct);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mnodeDecAcctRef(pAcct);
|
|
||||||
|
|
||||||
if (pTable->info.type == TSDB_CHILD_TABLE) {
|
if (pTable->info.type == TSDB_CHILD_TABLE) {
|
||||||
// add ref
|
// add ref
|
||||||
pTable->superTable = mnodeGetSuperTableByUid(pTable->suid);
|
pTable->superTable = mnodeGetSuperTableByUid(pTable->suid);
|
||||||
mnodeAddTableIntoStable(pTable->superTable, pTable);
|
mnodeAddTableIntoStable(pTable->superTable, pTable);
|
||||||
grantAdd(TSDB_GRANT_TIMESERIES, pTable->superTable->numOfColumns - 1);
|
grantAdd(TSDB_GRANT_TIMESERIES, pTable->superTable->numOfColumns - 1);
|
||||||
pAcct->acctInfo.numOfTimeSeries += (pTable->superTable->numOfColumns - 1);
|
if (pAcct) pAcct->acctInfo.numOfTimeSeries += (pTable->superTable->numOfColumns - 1);
|
||||||
} else {
|
} else {
|
||||||
grantAdd(TSDB_GRANT_TIMESERIES, pTable->numOfColumns - 1);
|
grantAdd(TSDB_GRANT_TIMESERIES, pTable->numOfColumns - 1);
|
||||||
pAcct->acctInfo.numOfTimeSeries += (pTable->numOfColumns - 1);
|
if (pAcct) pAcct->acctInfo.numOfTimeSeries += (pTable->numOfColumns - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
mnodeAddTableIntoDb(pDb);
|
if (pDb) mnodeAddTableIntoDb(pDb);
|
||||||
mnodeAddTableIntoVgroup(pVgroup, pTable);
|
if (pVgroup) mnodeAddTableIntoVgroup(pVgroup, pTable);
|
||||||
|
|
||||||
|
mnodeDecVgroupRef(pVgroup);
|
||||||
|
mnodeDecDbRef(pDb);
|
||||||
|
mnodeDecAcctRef(pAcct);
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -910,9 +909,9 @@ static int32_t mnodeProcessDropSuperTableMsg(SMnodeMsg *pMsg) {
|
||||||
|
|
||||||
mInfo("app:%p:%p, stable:%s, send drop stable msg to vgId:%d", pMsg->rpcMsg.ahandle, pMsg, pStable->info.tableId,
|
mInfo("app:%p:%p, stable:%s, send drop stable msg to vgId:%d", pMsg->rpcMsg.ahandle, pMsg, pStable->info.tableId,
|
||||||
pVgroup->vgId);
|
pVgroup->vgId);
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromVgroup(pVgroup);
|
SRpcEpSet epSet = mnodeGetEpSetFromVgroup(pVgroup);
|
||||||
SRpcMsg rpcMsg = {.pCont = pDrop, .contLen = sizeof(SMDDropSTableMsg), .msgType = TSDB_MSG_TYPE_MD_DROP_STABLE};
|
SRpcMsg rpcMsg = {.pCont = pDrop, .contLen = sizeof(SMDDropSTableMsg), .msgType = TSDB_MSG_TYPE_MD_DROP_STABLE};
|
||||||
dnodeSendMsgToDnode(&ipSet, &rpcMsg);
|
dnodeSendMsgToDnode(&epSet, &rpcMsg);
|
||||||
mnodeDecVgroupRef(pVgroup);
|
mnodeDecVgroupRef(pVgroup);
|
||||||
}
|
}
|
||||||
taosHashDestroyIter(pIter);
|
taosHashDestroyIter(pIter);
|
||||||
|
@ -1484,10 +1483,10 @@ static int32_t mnodeProcessSuperTableVgroupMsg(SMnodeMsg *pMsg) {
|
||||||
SDnodeObj *pDnode = pVgroup->vnodeGid[vn].pDnode;
|
SDnodeObj *pDnode = pVgroup->vnodeGid[vn].pDnode;
|
||||||
if (pDnode == NULL) break;
|
if (pDnode == NULL) break;
|
||||||
|
|
||||||
tstrncpy(pVgroupInfo->vgroups[vgSize].ipAddr[vn].fqdn, pDnode->dnodeFqdn, TSDB_FQDN_LEN);
|
tstrncpy(pVgroupInfo->vgroups[vgSize].epAddr[vn].fqdn, pDnode->dnodeFqdn, TSDB_FQDN_LEN);
|
||||||
pVgroupInfo->vgroups[vgSize].ipAddr[vn].port = htons(pDnode->dnodePort);
|
pVgroupInfo->vgroups[vgSize].epAddr[vn].port = htons(pDnode->dnodePort);
|
||||||
|
|
||||||
pVgroupInfo->vgroups[vgSize].numOfIps++;
|
pVgroupInfo->vgroups[vgSize].numOfEps++;
|
||||||
}
|
}
|
||||||
|
|
||||||
vgSize++;
|
vgSize++;
|
||||||
|
@ -1615,7 +1614,7 @@ static int32_t mnodeDoCreateChildTableCb(SMnodeMsg *pMsg, int32_t code) {
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromVgroup(pMsg->pVgroup);
|
SRpcEpSet epSet = mnodeGetEpSetFromVgroup(pMsg->pVgroup);
|
||||||
SRpcMsg rpcMsg = {
|
SRpcMsg rpcMsg = {
|
||||||
.ahandle = pMsg,
|
.ahandle = pMsg,
|
||||||
.pCont = pMDCreate,
|
.pCont = pMDCreate,
|
||||||
|
@ -1624,7 +1623,7 @@ static int32_t mnodeDoCreateChildTableCb(SMnodeMsg *pMsg, int32_t code) {
|
||||||
.msgType = TSDB_MSG_TYPE_MD_CREATE_TABLE
|
.msgType = TSDB_MSG_TYPE_MD_CREATE_TABLE
|
||||||
};
|
};
|
||||||
|
|
||||||
dnodeSendMsgToDnode(&ipSet, &rpcMsg);
|
dnodeSendMsgToDnode(&epSet, &rpcMsg);
|
||||||
return TSDB_CODE_MND_ACTION_IN_PROGRESS;
|
return TSDB_CODE_MND_ACTION_IN_PROGRESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1788,7 +1787,7 @@ static int32_t mnodeProcessDropChildTableMsg(SMnodeMsg *pMsg, bool needReturn) {
|
||||||
pDrop->sid = htonl(pTable->sid);
|
pDrop->sid = htonl(pTable->sid);
|
||||||
pDrop->uid = htobe64(pTable->uid);
|
pDrop->uid = htobe64(pTable->uid);
|
||||||
|
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromVgroup(pMsg->pVgroup);
|
SRpcEpSet epSet = mnodeGetEpSetFromVgroup(pMsg->pVgroup);
|
||||||
|
|
||||||
mInfo("app:%p:%p, table:%s, send drop ctable msg, vgId:%d sid:%d uid:%" PRIu64, pMsg->rpcMsg.ahandle, pMsg,
|
mInfo("app:%p:%p, table:%s, send drop ctable msg, vgId:%d sid:%d uid:%" PRIu64, pMsg->rpcMsg.ahandle, pMsg,
|
||||||
pDrop->tableId, pTable->vgId, pTable->sid, pTable->uid);
|
pDrop->tableId, pTable->vgId, pTable->sid, pTable->uid);
|
||||||
|
@ -1803,7 +1802,7 @@ static int32_t mnodeProcessDropChildTableMsg(SMnodeMsg *pMsg, bool needReturn) {
|
||||||
|
|
||||||
if (!needReturn) rpcMsg.ahandle = NULL;
|
if (!needReturn) rpcMsg.ahandle = NULL;
|
||||||
|
|
||||||
dnodeSendMsgToDnode(&ipSet, &rpcMsg);
|
dnodeSendMsgToDnode(&epSet, &rpcMsg);
|
||||||
|
|
||||||
return TSDB_CODE_MND_ACTION_IN_PROGRESS;
|
return TSDB_CODE_MND_ACTION_IN_PROGRESS;
|
||||||
}
|
}
|
||||||
|
@ -1842,7 +1841,7 @@ static int32_t mnodeAlterNormalTableColumnCb(SMnodeMsg *pMsg, int32_t code) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromVgroup(pMsg->pVgroup);
|
SRpcEpSet epSet = mnodeGetEpSetFromVgroup(pMsg->pVgroup);
|
||||||
SRpcMsg rpcMsg = {
|
SRpcMsg rpcMsg = {
|
||||||
.ahandle = pMsg,
|
.ahandle = pMsg,
|
||||||
.pCont = pMDCreate,
|
.pCont = pMDCreate,
|
||||||
|
@ -1854,7 +1853,7 @@ static int32_t mnodeAlterNormalTableColumnCb(SMnodeMsg *pMsg, int32_t code) {
|
||||||
mDebug("app:%p:%p, ctable %s, send alter column msg to vgId:%d", pMsg->rpcMsg.ahandle, pMsg, pTable->info.tableId,
|
mDebug("app:%p:%p, ctable %s, send alter column msg to vgId:%d", pMsg->rpcMsg.ahandle, pMsg, pTable->info.tableId,
|
||||||
pMsg->pVgroup->vgId);
|
pMsg->pVgroup->vgId);
|
||||||
|
|
||||||
dnodeSendMsgToDnode(&ipSet, &rpcMsg);
|
dnodeSendMsgToDnode(&epSet, &rpcMsg);
|
||||||
return TSDB_CODE_MND_ACTION_IN_PROGRESS;
|
return TSDB_CODE_MND_ACTION_IN_PROGRESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1996,9 +1995,9 @@ static int32_t mnodeDoGetChildTableMeta(SMnodeMsg *pMsg, STableMetaMsg *pMeta) {
|
||||||
for (int32_t i = 0; i < pMsg->pVgroup->numOfVnodes; ++i) {
|
for (int32_t i = 0; i < pMsg->pVgroup->numOfVnodes; ++i) {
|
||||||
SDnodeObj *pDnode = mnodeGetDnode(pMsg->pVgroup->vnodeGid[i].dnodeId);
|
SDnodeObj *pDnode = mnodeGetDnode(pMsg->pVgroup->vnodeGid[i].dnodeId);
|
||||||
if (pDnode == NULL) break;
|
if (pDnode == NULL) break;
|
||||||
strcpy(pMeta->vgroup.ipAddr[i].fqdn, pDnode->dnodeFqdn);
|
strcpy(pMeta->vgroup.epAddr[i].fqdn, pDnode->dnodeFqdn);
|
||||||
pMeta->vgroup.ipAddr[i].port = htons(pDnode->dnodePort + TSDB_PORT_DNODESHELL);
|
pMeta->vgroup.epAddr[i].port = htons(pDnode->dnodePort + TSDB_PORT_DNODESHELL);
|
||||||
pMeta->vgroup.numOfIps++;
|
pMeta->vgroup.numOfEps++;
|
||||||
mnodeDecDnodeRef(pDnode);
|
mnodeDecDnodeRef(pDnode);
|
||||||
}
|
}
|
||||||
pMeta->vgroup.vgId = htonl(pMsg->pVgroup->vgId);
|
pMeta->vgroup.vgId = htonl(pMsg->pVgroup->vgId);
|
||||||
|
|
|
@ -317,9 +317,9 @@ void mnodeUpdateVgroupStatus(SVgObj *pVgroup, SDnodeObj *pDnode, SVnodeLoad *pVl
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dnodeExist) {
|
if (!dnodeExist) {
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromIp(pDnode->dnodeEp);
|
SRpcEpSet epSet = mnodeGetEpSetFromIp(pDnode->dnodeEp);
|
||||||
mError("vgId:%d, dnode:%d not exist in mnode, drop it", pVload->vgId, pDnode->dnodeId);
|
mError("vgId:%d, dnode:%d not exist in mnode, drop it", pVload->vgId, pDnode->dnodeId);
|
||||||
mnodeSendDropVnodeMsg(pVload->vgId, &ipSet, NULL);
|
mnodeSendDropVnodeMsg(pVload->vgId, &epSet, NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -585,9 +585,9 @@ static int32_t mnodeGetVgroupMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *p
|
||||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pShow->bytes[cols] = 4;
|
pShow->bytes[cols] = 12 + VARSTR_HEADER_SIZE;
|
||||||
pSchema[cols].type = TSDB_DATA_TYPE_INT;
|
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
||||||
strcpy(pSchema[cols].name, "poolSize");
|
strcpy(pSchema[cols].name, "status");
|
||||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
|
@ -688,8 +688,9 @@ static int32_t mnodeRetrieveVgroups(SShowObj *pShow, char *data, int32_t rows, v
|
||||||
*(int32_t *) pWrite = pVgroup->numOfTables;
|
*(int32_t *) pWrite = pVgroup->numOfTables;
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
*(int32_t *)pWrite = taosIdPoolMaxSize(pVgroup->idPool);
|
char* status = vgroupStatus[pVgroup->status];
|
||||||
|
STR_TO_VARSTR(pWrite, status);
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
int32_t onlineVnodes = 0;
|
int32_t onlineVnodes = 0;
|
||||||
|
@ -808,29 +809,29 @@ static SMDCreateVnodeMsg *mnodeBuildVnodeMsg(SVgObj *pVgroup) {
|
||||||
return pVnode;
|
return pVnode;
|
||||||
}
|
}
|
||||||
|
|
||||||
SRpcIpSet mnodeGetIpSetFromVgroup(SVgObj *pVgroup) {
|
SRpcEpSet mnodeGetEpSetFromVgroup(SVgObj *pVgroup) {
|
||||||
SRpcIpSet ipSet = {
|
SRpcEpSet epSet = {
|
||||||
.numOfIps = pVgroup->numOfVnodes,
|
.numOfEps = pVgroup->numOfVnodes,
|
||||||
.inUse = 0,
|
.inUse = 0,
|
||||||
};
|
};
|
||||||
for (int i = 0; i < pVgroup->numOfVnodes; ++i) {
|
for (int i = 0; i < pVgroup->numOfVnodes; ++i) {
|
||||||
strcpy(ipSet.fqdn[i], pVgroup->vnodeGid[i].pDnode->dnodeFqdn);
|
strcpy(epSet.fqdn[i], pVgroup->vnodeGid[i].pDnode->dnodeFqdn);
|
||||||
ipSet.port[i] = pVgroup->vnodeGid[i].pDnode->dnodePort + TSDB_PORT_DNODEDNODE;
|
epSet.port[i] = pVgroup->vnodeGid[i].pDnode->dnodePort + TSDB_PORT_DNODEDNODE;
|
||||||
}
|
}
|
||||||
return ipSet;
|
return epSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
SRpcIpSet mnodeGetIpSetFromIp(char *ep) {
|
SRpcEpSet mnodeGetEpSetFromIp(char *ep) {
|
||||||
SRpcIpSet ipSet;
|
SRpcEpSet epSet;
|
||||||
|
|
||||||
ipSet.numOfIps = 1;
|
epSet.numOfEps = 1;
|
||||||
ipSet.inUse = 0;
|
epSet.inUse = 0;
|
||||||
taosGetFqdnPortFromEp(ep, ipSet.fqdn[0], &ipSet.port[0]);
|
taosGetFqdnPortFromEp(ep, epSet.fqdn[0], &epSet.port[0]);
|
||||||
ipSet.port[0] += TSDB_PORT_DNODEDNODE;
|
epSet.port[0] += TSDB_PORT_DNODEDNODE;
|
||||||
return ipSet;
|
return epSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mnodeSendAlterVnodeMsg(SVgObj *pVgroup, SRpcIpSet *ipSet) {
|
static void mnodeSendAlterVnodeMsg(SVgObj *pVgroup, SRpcEpSet *epSet) {
|
||||||
SMDAlterVnodeMsg *pAlter = mnodeBuildVnodeMsg(pVgroup);
|
SMDAlterVnodeMsg *pAlter = mnodeBuildVnodeMsg(pVgroup);
|
||||||
SRpcMsg rpcMsg = {
|
SRpcMsg rpcMsg = {
|
||||||
.ahandle = NULL,
|
.ahandle = NULL,
|
||||||
|
@ -839,21 +840,21 @@ static void mnodeSendAlterVnodeMsg(SVgObj *pVgroup, SRpcIpSet *ipSet) {
|
||||||
.code = 0,
|
.code = 0,
|
||||||
.msgType = TSDB_MSG_TYPE_MD_ALTER_VNODE
|
.msgType = TSDB_MSG_TYPE_MD_ALTER_VNODE
|
||||||
};
|
};
|
||||||
dnodeSendMsgToDnode(ipSet, &rpcMsg);
|
dnodeSendMsgToDnode(epSet, &rpcMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mnodeSendAlterVgroupMsg(SVgObj *pVgroup) {
|
void mnodeSendAlterVgroupMsg(SVgObj *pVgroup) {
|
||||||
mDebug("vgId:%d, send alter all vnodes msg, numOfVnodes:%d db:%s", pVgroup->vgId, pVgroup->numOfVnodes,
|
mDebug("vgId:%d, send alter all vnodes msg, numOfVnodes:%d db:%s", pVgroup->vgId, pVgroup->numOfVnodes,
|
||||||
pVgroup->dbName);
|
pVgroup->dbName);
|
||||||
for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) {
|
for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) {
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromIp(pVgroup->vnodeGid[i].pDnode->dnodeEp);
|
SRpcEpSet epSet = mnodeGetEpSetFromIp(pVgroup->vnodeGid[i].pDnode->dnodeEp);
|
||||||
mDebug("vgId:%d, index:%d, send alter vnode msg to dnode %s", pVgroup->vgId, i,
|
mDebug("vgId:%d, index:%d, send alter vnode msg to dnode %s", pVgroup->vgId, i,
|
||||||
pVgroup->vnodeGid[i].pDnode->dnodeEp);
|
pVgroup->vnodeGid[i].pDnode->dnodeEp);
|
||||||
mnodeSendAlterVnodeMsg(pVgroup, &ipSet);
|
mnodeSendAlterVnodeMsg(pVgroup, &epSet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mnodeSendCreateVnodeMsg(SVgObj *pVgroup, SRpcIpSet *ipSet, void *ahandle) {
|
static void mnodeSendCreateVnodeMsg(SVgObj *pVgroup, SRpcEpSet *epSet, void *ahandle) {
|
||||||
SMDCreateVnodeMsg *pCreate = mnodeBuildVnodeMsg(pVgroup);
|
SMDCreateVnodeMsg *pCreate = mnodeBuildVnodeMsg(pVgroup);
|
||||||
SRpcMsg rpcMsg = {
|
SRpcMsg rpcMsg = {
|
||||||
.ahandle = ahandle,
|
.ahandle = ahandle,
|
||||||
|
@ -862,17 +863,17 @@ static void mnodeSendCreateVnodeMsg(SVgObj *pVgroup, SRpcIpSet *ipSet, void *aha
|
||||||
.code = 0,
|
.code = 0,
|
||||||
.msgType = TSDB_MSG_TYPE_MD_CREATE_VNODE
|
.msgType = TSDB_MSG_TYPE_MD_CREATE_VNODE
|
||||||
};
|
};
|
||||||
dnodeSendMsgToDnode(ipSet, &rpcMsg);
|
dnodeSendMsgToDnode(epSet, &rpcMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mnodeSendCreateVgroupMsg(SVgObj *pVgroup, void *ahandle) {
|
void mnodeSendCreateVgroupMsg(SVgObj *pVgroup, void *ahandle) {
|
||||||
mDebug("vgId:%d, send create all vnodes msg, numOfVnodes:%d db:%s", pVgroup->vgId, pVgroup->numOfVnodes,
|
mDebug("vgId:%d, send create all vnodes msg, numOfVnodes:%d db:%s", pVgroup->vgId, pVgroup->numOfVnodes,
|
||||||
pVgroup->dbName);
|
pVgroup->dbName);
|
||||||
for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) {
|
for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) {
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromIp(pVgroup->vnodeGid[i].pDnode->dnodeEp);
|
SRpcEpSet epSet = mnodeGetEpSetFromIp(pVgroup->vnodeGid[i].pDnode->dnodeEp);
|
||||||
mDebug("vgId:%d, index:%d, send create vnode msg to dnode %s, ahandle:%p", pVgroup->vgId,
|
mDebug("vgId:%d, index:%d, send create vnode msg to dnode %s, ahandle:%p", pVgroup->vgId,
|
||||||
i, pVgroup->vnodeGid[i].pDnode->dnodeEp, ahandle);
|
i, pVgroup->vnodeGid[i].pDnode->dnodeEp, ahandle);
|
||||||
mnodeSendCreateVnodeMsg(pVgroup, &ipSet, ahandle);
|
mnodeSendCreateVnodeMsg(pVgroup, &epSet, ahandle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -925,7 +926,7 @@ static SMDDropVnodeMsg *mnodeBuildDropVnodeMsg(int32_t vgId) {
|
||||||
return pDrop;
|
return pDrop;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mnodeSendDropVnodeMsg(int32_t vgId, SRpcIpSet *ipSet, void *ahandle) {
|
void mnodeSendDropVnodeMsg(int32_t vgId, SRpcEpSet *epSet, void *ahandle) {
|
||||||
SMDDropVnodeMsg *pDrop = mnodeBuildDropVnodeMsg(vgId);
|
SMDDropVnodeMsg *pDrop = mnodeBuildDropVnodeMsg(vgId);
|
||||||
SRpcMsg rpcMsg = {
|
SRpcMsg rpcMsg = {
|
||||||
.ahandle = ahandle,
|
.ahandle = ahandle,
|
||||||
|
@ -934,16 +935,16 @@ void mnodeSendDropVnodeMsg(int32_t vgId, SRpcIpSet *ipSet, void *ahandle) {
|
||||||
.code = 0,
|
.code = 0,
|
||||||
.msgType = TSDB_MSG_TYPE_MD_DROP_VNODE
|
.msgType = TSDB_MSG_TYPE_MD_DROP_VNODE
|
||||||
};
|
};
|
||||||
dnodeSendMsgToDnode(ipSet, &rpcMsg);
|
dnodeSendMsgToDnode(epSet, &rpcMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mnodeSendDropVgroupMsg(SVgObj *pVgroup, void *ahandle) {
|
static void mnodeSendDropVgroupMsg(SVgObj *pVgroup, void *ahandle) {
|
||||||
pVgroup->status = TAOS_VG_STATUS_DROPPING; // deleting
|
pVgroup->status = TAOS_VG_STATUS_DROPPING; // deleting
|
||||||
mDebug("vgId:%d, send drop all vnodes msg, ahandle:%p", pVgroup->vgId, ahandle);
|
mDebug("vgId:%d, send drop all vnodes msg, ahandle:%p", pVgroup->vgId, ahandle);
|
||||||
for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) {
|
for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) {
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromIp(pVgroup->vnodeGid[i].pDnode->dnodeEp);
|
SRpcEpSet epSet = mnodeGetEpSetFromIp(pVgroup->vnodeGid[i].pDnode->dnodeEp);
|
||||||
mDebug("vgId:%d, send drop vnode msg to dnode:%d, ahandle:%p", pVgroup->vgId, pVgroup->vnodeGid[i].dnodeId, ahandle);
|
mDebug("vgId:%d, send drop vnode msg to dnode:%d, ahandle:%p", pVgroup->vgId, pVgroup->vnodeGid[i].dnodeId, ahandle);
|
||||||
mnodeSendDropVnodeMsg(pVgroup->vgId, &ipSet, ahandle);
|
mnodeSendDropVnodeMsg(pVgroup->vgId, &epSet, ahandle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -997,8 +998,8 @@ static int32_t mnodeProcessVnodeCfgMsg(SMnodeMsg *pMsg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
mDebug("vgId:%d, send create vnode msg to dnode %s for vnode cfg msg", pVgroup->vgId, pDnode->dnodeEp);
|
mDebug("vgId:%d, send create vnode msg to dnode %s for vnode cfg msg", pVgroup->vgId, pDnode->dnodeEp);
|
||||||
SRpcIpSet ipSet = mnodeGetIpSetFromIp(pDnode->dnodeEp);
|
SRpcEpSet epSet = mnodeGetEpSetFromIp(pDnode->dnodeEp);
|
||||||
mnodeSendCreateVnodeMsg(pVgroup, &ipSet, NULL);
|
mnodeSendCreateVnodeMsg(pVgroup, &epSet, NULL);
|
||||||
|
|
||||||
mnodeDecDnodeRef(pDnode);
|
mnodeDecDnodeRef(pDnode);
|
||||||
mnodeDecVgroupRef(pVgroup);
|
mnodeDecVgroupRef(pVgroup);
|
||||||
|
|
|
@ -49,16 +49,16 @@ int32_t mnodeProcessWrite(SMnodeMsg *pMsg) {
|
||||||
|
|
||||||
if (!sdbIsMaster()) {
|
if (!sdbIsMaster()) {
|
||||||
SMnodeRsp *rpcRsp = &pMsg->rpcRsp;
|
SMnodeRsp *rpcRsp = &pMsg->rpcRsp;
|
||||||
SRpcIpSet *ipSet = rpcMallocCont(sizeof(SRpcIpSet));
|
SRpcEpSet *epSet = rpcMallocCont(sizeof(SRpcEpSet));
|
||||||
mnodeGetMnodeIpSetForShell(ipSet);
|
mnodeGetMnodeEpSetForShell(epSet);
|
||||||
rpcRsp->rsp = ipSet;
|
rpcRsp->rsp = epSet;
|
||||||
rpcRsp->len = sizeof(SRpcIpSet);
|
rpcRsp->len = sizeof(SRpcEpSet);
|
||||||
|
|
||||||
mDebug("app:%p:%p, msg:%s will be redireced inUse:%d", pMsg->rpcMsg.ahandle, pMsg, taosMsg[pMsg->rpcMsg.msgType],
|
mDebug("app:%p:%p, msg:%s will be redireced inUse:%d", pMsg->rpcMsg.ahandle, pMsg, taosMsg[pMsg->rpcMsg.msgType],
|
||||||
ipSet->inUse);
|
epSet->inUse);
|
||||||
for (int32_t i = 0; i < ipSet->numOfIps; ++i) {
|
for (int32_t i = 0; i < epSet->numOfEps; ++i) {
|
||||||
mDebug("app:%p:%p, mnode index:%d ip:%s:%d", pMsg->rpcMsg.ahandle, pMsg, i, ipSet->fqdn[i],
|
mDebug("app:%p:%p, mnode index:%d ep:%s:%d", pMsg->rpcMsg.ahandle, pMsg, i, epSet->fqdn[i],
|
||||||
htons(ipSet->port[i]));
|
htons(epSet->port[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_RPC_REDIRECT;
|
return TSDB_CODE_RPC_REDIRECT;
|
||||||
|
|
|
@ -76,6 +76,8 @@ static void monitorInitDatabase();
|
||||||
static void monitorInitDatabaseCb(void *param, TAOS_RES *result, int32_t code);
|
static void monitorInitDatabaseCb(void *param, TAOS_RES *result, int32_t code);
|
||||||
static void monitorStartTimer();
|
static void monitorStartTimer();
|
||||||
static void monitorSaveSystemInfo();
|
static void monitorSaveSystemInfo();
|
||||||
|
extern int32_t (*monitorStartSystemFp)();
|
||||||
|
extern void (*monitorStopSystemFp)();
|
||||||
|
|
||||||
static void monitorCheckDiskUsage(void *para, void *unused) {
|
static void monitorCheckDiskUsage(void *para, void *unused) {
|
||||||
taosGetDisk();
|
taosGetDisk();
|
||||||
|
@ -85,6 +87,8 @@ static void monitorCheckDiskUsage(void *para, void *unused) {
|
||||||
int32_t monitorInitSystem() {
|
int32_t monitorInitSystem() {
|
||||||
taos_init();
|
taos_init();
|
||||||
taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &tsMonitorConn.diskTimer);
|
taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &tsMonitorConn.diskTimer);
|
||||||
|
monitorStartSystemFp = monitorStartSystem;
|
||||||
|
monitorStopSystemFp = monitorStopSystem;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2236,6 +2236,27 @@ static void ensureOutputBuffer(SQueryRuntimeEnv* pRuntimeEnv, SDataBlockInfo* pB
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void doSetInitialTimewindow(SQueryRuntimeEnv* pRuntimeEnv, SDataBlockInfo* pBlockInfo) {
|
||||||
|
SQuery* pQuery = pRuntimeEnv->pQuery;
|
||||||
|
|
||||||
|
if (QUERY_IS_INTERVAL_QUERY(pQuery) && pRuntimeEnv->windowResInfo.prevSKey == TSKEY_INITIAL_VAL) {
|
||||||
|
STimeWindow w = TSWINDOW_INITIALIZER;
|
||||||
|
SWindowResInfo *pWindowResInfo = &pRuntimeEnv->windowResInfo;
|
||||||
|
|
||||||
|
if (QUERY_IS_ASC_QUERY(pQuery)) {
|
||||||
|
getAlignQueryTimeWindow(pQuery, pBlockInfo->window.skey, pBlockInfo->window.skey, pQuery->window.ekey, &w);
|
||||||
|
pWindowResInfo->startTime = w.skey;
|
||||||
|
pWindowResInfo->prevSKey = w.skey;
|
||||||
|
} else {
|
||||||
|
// the start position of the first time window in the endpoint that spreads beyond the queried last timestamp
|
||||||
|
getAlignQueryTimeWindow(pQuery, pBlockInfo->window.ekey, pQuery->window.ekey, pBlockInfo->window.ekey, &w);
|
||||||
|
|
||||||
|
pWindowResInfo->startTime = pQuery->window.skey;
|
||||||
|
pWindowResInfo->prevSKey = w.skey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int64_t doScanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
|
static int64_t doScanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
|
||||||
SQuery *pQuery = pRuntimeEnv->pQuery;
|
SQuery *pQuery = pRuntimeEnv->pQuery;
|
||||||
STableQueryInfo* pTableQueryInfo = pQuery->current;
|
STableQueryInfo* pTableQueryInfo = pQuery->current;
|
||||||
|
@ -2263,24 +2284,7 @@ static int64_t doScanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
tsdbRetrieveDataBlockInfo(pQueryHandle, &blockInfo);
|
tsdbRetrieveDataBlockInfo(pQueryHandle, &blockInfo);
|
||||||
|
doSetInitialTimewindow(pRuntimeEnv, &blockInfo);
|
||||||
// todo extract methods
|
|
||||||
if (QUERY_IS_INTERVAL_QUERY(pQuery) && pRuntimeEnv->windowResInfo.prevSKey == TSKEY_INITIAL_VAL) {
|
|
||||||
STimeWindow w = TSWINDOW_INITIALIZER;
|
|
||||||
SWindowResInfo *pWindowResInfo = &pRuntimeEnv->windowResInfo;
|
|
||||||
|
|
||||||
if (QUERY_IS_ASC_QUERY(pQuery)) {
|
|
||||||
getAlignQueryTimeWindow(pQuery, blockInfo.window.skey, blockInfo.window.skey, pQuery->window.ekey, &w);
|
|
||||||
pWindowResInfo->startTime = w.skey;
|
|
||||||
pWindowResInfo->prevSKey = w.skey;
|
|
||||||
} else {
|
|
||||||
// the start position of the first time window in the endpoint that spreads beyond the queried last timestamp
|
|
||||||
getAlignQueryTimeWindow(pQuery, blockInfo.window.ekey, pQuery->window.ekey, blockInfo.window.ekey, &w);
|
|
||||||
|
|
||||||
pWindowResInfo->startTime = pQuery->window.skey;
|
|
||||||
pWindowResInfo->prevSKey = w.skey;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// in case of prj/diff query, ensure the output buffer is sufficient to accommodate the results of current block
|
// in case of prj/diff query, ensure the output buffer is sufficient to accommodate the results of current block
|
||||||
ensureOutputBuffer(pRuntimeEnv, &blockInfo);
|
ensureOutputBuffer(pRuntimeEnv, &blockInfo);
|
||||||
|
@ -2314,7 +2318,6 @@ static int64_t doScanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
|
||||||
if (QUERY_IS_INTERVAL_QUERY(pQuery) && IS_MASTER_SCAN(pRuntimeEnv)) {
|
if (QUERY_IS_INTERVAL_QUERY(pQuery) && IS_MASTER_SCAN(pRuntimeEnv)) {
|
||||||
if (Q_STATUS_EQUAL(pQuery->status, QUERY_COMPLETED)) {
|
if (Q_STATUS_EQUAL(pQuery->status, QUERY_COMPLETED)) {
|
||||||
closeAllTimeWindow(&pRuntimeEnv->windowResInfo);
|
closeAllTimeWindow(&pRuntimeEnv->windowResInfo);
|
||||||
// removeRedundantWindow(&pRuntimeEnv->windowResInfo, pTableQueryInfo->lastKey - step, step);
|
|
||||||
pRuntimeEnv->windowResInfo.curIndex = pRuntimeEnv->windowResInfo.size - 1; // point to the last time window
|
pRuntimeEnv->windowResInfo.curIndex = pRuntimeEnv->windowResInfo.size - 1; // point to the last time window
|
||||||
} else {
|
} else {
|
||||||
assert(Q_STATUS_EQUAL(pQuery->status, QUERY_RESBUF_FULL));
|
assert(Q_STATUS_EQUAL(pQuery->status, QUERY_RESBUF_FULL));
|
||||||
|
@ -3223,6 +3226,13 @@ static void setEnvBeforeReverseScan(SQueryRuntimeEnv *pRuntimeEnv, SQueryStatusI
|
||||||
SWAP(pQuery->window.skey, pQuery->window.ekey, TSKEY);
|
SWAP(pQuery->window.skey, pQuery->window.ekey, TSKEY);
|
||||||
|
|
||||||
SWITCH_ORDER(pQuery->order.order);
|
SWITCH_ORDER(pQuery->order.order);
|
||||||
|
|
||||||
|
if (QUERY_IS_ASC_QUERY(pQuery)) {
|
||||||
|
assert(pQuery->window.skey <= pQuery->window.ekey);
|
||||||
|
} else {
|
||||||
|
assert(pQuery->window.skey >= pQuery->window.ekey);
|
||||||
|
}
|
||||||
|
|
||||||
SET_REVERSE_SCAN_FLAG(pRuntimeEnv);
|
SET_REVERSE_SCAN_FLAG(pRuntimeEnv);
|
||||||
|
|
||||||
STsdbQueryCond cond = {
|
STsdbQueryCond cond = {
|
||||||
|
@ -3262,8 +3272,7 @@ static void clearEnvAfterReverseScan(SQueryRuntimeEnv *pRuntimeEnv, SQueryStatus
|
||||||
|
|
||||||
SET_MASTER_SCAN_FLAG(pRuntimeEnv);
|
SET_MASTER_SCAN_FLAG(pRuntimeEnv);
|
||||||
|
|
||||||
// update the pQuery->window.skey and pQuery->window.ekey to limit the scan scope of sliding query
|
// update the pQuery->window.skey and pQuery->window.ekey to limit the scan scope of sliding query during reverse scan
|
||||||
// during reverse scan
|
|
||||||
pTableQueryInfo->lastKey = pStatus->lastKey;
|
pTableQueryInfo->lastKey = pStatus->lastKey;
|
||||||
pQuery->status = pStatus->status;
|
pQuery->status = pStatus->status;
|
||||||
|
|
||||||
|
@ -3289,7 +3298,12 @@ void scanOneTableDataBlocks(SQueryRuntimeEnv *pRuntimeEnv, TSKEY start) {
|
||||||
|
|
||||||
if (pRuntimeEnv->scanFlag == MASTER_SCAN) {
|
if (pRuntimeEnv->scanFlag == MASTER_SCAN) {
|
||||||
qstatus.status = pQuery->status;
|
qstatus.status = pQuery->status;
|
||||||
qstatus.curWindow.ekey = pTableQueryInfo->lastKey - step;
|
|
||||||
|
// do nothing if no data blocks are found qualified during scan
|
||||||
|
if (qstatus.lastKey != pTableQueryInfo->lastKey) {
|
||||||
|
qstatus.curWindow.ekey = pTableQueryInfo->lastKey - step;
|
||||||
|
}
|
||||||
|
|
||||||
qstatus.lastKey = pTableQueryInfo->lastKey;
|
qstatus.lastKey = pTableQueryInfo->lastKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5859,7 +5873,7 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList,
|
||||||
return pQInfo;
|
return pQInfo;
|
||||||
|
|
||||||
_cleanup_qinfo:
|
_cleanup_qinfo:
|
||||||
tsdbDestoryTableGroup(pTableGroupInfo);
|
tsdbDestroyTableGroup(pTableGroupInfo);
|
||||||
|
|
||||||
_cleanup_query:
|
_cleanup_query:
|
||||||
taosArrayDestroy(pGroupbyExpr->columnInfo);
|
taosArrayDestroy(pGroupbyExpr->columnInfo);
|
||||||
|
@ -6009,7 +6023,7 @@ static void freeQInfo(SQInfo *pQInfo) {
|
||||||
tfree(pQInfo->pBuf);
|
tfree(pQInfo->pBuf);
|
||||||
taosArrayDestroy(pQInfo->tableqinfoGroupInfo.pGroupList);
|
taosArrayDestroy(pQInfo->tableqinfoGroupInfo.pGroupList);
|
||||||
taosHashCleanup(pQInfo->tableqinfoGroupInfo.map);
|
taosHashCleanup(pQInfo->tableqinfoGroupInfo.map);
|
||||||
tsdbDestoryTableGroup(&pQInfo->tableGroupInfo);
|
tsdbDestroyTableGroup(&pQInfo->tableGroupInfo);
|
||||||
taosArrayDestroy(pQInfo->arrTableIdInfo);
|
taosArrayDestroy(pQInfo->arrTableIdInfo);
|
||||||
|
|
||||||
if (pQuery->pGroupbyExpr != NULL) {
|
if (pQuery->pGroupbyExpr != NULL) {
|
||||||
|
@ -6282,7 +6296,7 @@ void qTableQuery(qinfo_t qinfo) {
|
||||||
SQueryRuntimeEnv* pRuntimeEnv = &pQInfo->runtimeEnv;
|
SQueryRuntimeEnv* pRuntimeEnv = &pQInfo->runtimeEnv;
|
||||||
if (onlyQueryTags(pQInfo->runtimeEnv.pQuery)) {
|
if (onlyQueryTags(pQInfo->runtimeEnv.pQuery)) {
|
||||||
assert(pQInfo->runtimeEnv.pQueryHandle == NULL);
|
assert(pQInfo->runtimeEnv.pQueryHandle == NULL);
|
||||||
buildTagQueryResult(pQInfo); // todo support the limit/offset
|
buildTagQueryResult(pQInfo);
|
||||||
} else if (pQInfo->runtimeEnv.stableQuery) {
|
} else if (pQInfo->runtimeEnv.stableQuery) {
|
||||||
stableQueryImpl(pQInfo);
|
stableQueryImpl(pQInfo);
|
||||||
} else {
|
} else {
|
||||||
|
@ -6403,6 +6417,22 @@ int32_t qKillQuery(qinfo_t qinfo) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void doSetTagValueToResultBuf(char* output, const char* val, int16_t type, int16_t bytes) {
|
||||||
|
if (type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_NCHAR) {
|
||||||
|
if (val == NULL) {
|
||||||
|
setVardataNull(output, type);
|
||||||
|
} else {
|
||||||
|
memcpy(output, val, varDataTLen(val));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (val == NULL) {
|
||||||
|
setNull(output, type, bytes);
|
||||||
|
} else { // todo here stop will cause client crash
|
||||||
|
memcpy(output, val, bytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void buildTagQueryResult(SQInfo* pQInfo) {
|
static void buildTagQueryResult(SQInfo* pQInfo) {
|
||||||
SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv;
|
SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv;
|
||||||
SQuery * pQuery = pRuntimeEnv->pQuery;
|
SQuery * pQuery = pRuntimeEnv->pQuery;
|
||||||
|
@ -6459,25 +6489,11 @@ static void buildTagQueryResult(SQInfo* pQInfo) {
|
||||||
output += sizeof(pQInfo->vgId);
|
output += sizeof(pQInfo->vgId);
|
||||||
|
|
||||||
if (pExprInfo->base.colInfo.colId == TSDB_TBNAME_COLUMN_INDEX) {
|
if (pExprInfo->base.colInfo.colId == TSDB_TBNAME_COLUMN_INDEX) {
|
||||||
char *data = tsdbGetTableName(item->pTable);
|
char* data = tsdbGetTableName(item->pTable);
|
||||||
memcpy(output, data, varDataTLen(data));
|
memcpy(output, data, varDataTLen(data));
|
||||||
} else {
|
} else {
|
||||||
char *val = tsdbGetTableTagVal(item->pTable, pExprInfo->base.colInfo.colId, type, bytes);
|
char* data = tsdbGetTableTagVal(item->pTable, pExprInfo->base.colInfo.colId, type, bytes);
|
||||||
|
doSetTagValueToResultBuf(output, data, type, bytes);
|
||||||
// todo refactor
|
|
||||||
if (type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_NCHAR) {
|
|
||||||
if (val == NULL) {
|
|
||||||
setVardataNull(output, type);
|
|
||||||
} else {
|
|
||||||
memcpy(output, val, varDataTLen(val));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (val == NULL) {
|
|
||||||
setNull(output, type, bytes);
|
|
||||||
} else { // todo here stop will cause client crash
|
|
||||||
memcpy(output, val, bytes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
count += 1;
|
count += 1;
|
||||||
|
@ -6494,38 +6510,44 @@ static void buildTagQueryResult(SQInfo* pQInfo) {
|
||||||
} else { // return only the tags|table name etc.
|
} else { // return only the tags|table name etc.
|
||||||
count = 0;
|
count = 0;
|
||||||
SSchema tbnameSchema = tGetTableNameColumnSchema();
|
SSchema tbnameSchema = tGetTableNameColumnSchema();
|
||||||
while(pQInfo->tableIndex < num && count < pQuery->rec.capacity) {
|
|
||||||
|
int32_t maxNumOfTables = pQuery->rec.capacity;
|
||||||
|
if (pQuery->limit.limit >= 0 && pQuery->limit.limit < pQuery->rec.capacity) {
|
||||||
|
maxNumOfTables = pQuery->limit.limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
while(pQInfo->tableIndex < num && count < maxNumOfTables) {
|
||||||
int32_t i = pQInfo->tableIndex++;
|
int32_t i = pQInfo->tableIndex++;
|
||||||
|
|
||||||
|
// discard current result due to offset
|
||||||
|
if (pQuery->limit.offset > 0) {
|
||||||
|
pQuery->limit.offset -= 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
SExprInfo* pExprInfo = pQuery->pSelectExpr;
|
SExprInfo* pExprInfo = pQuery->pSelectExpr;
|
||||||
STableQueryInfo* item = taosArrayGetP(pa, i);
|
STableQueryInfo* item = taosArrayGetP(pa, i);
|
||||||
|
|
||||||
|
char *data = NULL, *dst = NULL;
|
||||||
|
int16_t type = 0, bytes = 0;
|
||||||
for(int32_t j = 0; j < pQuery->numOfOutput; ++j) {
|
for(int32_t j = 0; j < pQuery->numOfOutput; ++j) {
|
||||||
if (pExprInfo[j].base.colInfo.colId == TSDB_TBNAME_COLUMN_INDEX) {
|
|
||||||
char* data = tsdbGetTableName(item->pTable);
|
|
||||||
char* dst = pQuery->sdata[j]->data + count * tbnameSchema.bytes;
|
|
||||||
memcpy(dst, data, varDataTLen(data));
|
|
||||||
} else {// todo refactor
|
|
||||||
int16_t type = pExprInfo[j].type;
|
|
||||||
int16_t bytes = pExprInfo[j].bytes;
|
|
||||||
|
|
||||||
char* data = tsdbGetTableTagVal(item->pTable, pExprInfo[j].base.colInfo.colId, type, bytes);
|
|
||||||
char* dst = pQuery->sdata[j]->data + count * pExprInfo[j].bytes;
|
|
||||||
|
|
||||||
if (type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_NCHAR) {
|
if (pExprInfo[j].base.colInfo.colId == TSDB_TBNAME_COLUMN_INDEX) {
|
||||||
if (data == NULL) {
|
bytes = tbnameSchema.bytes;
|
||||||
setVardataNull(dst, type);
|
type = tbnameSchema.type;
|
||||||
} else {
|
|
||||||
memcpy(dst, data, varDataTLen(data));
|
data = tsdbGetTableName(item->pTable);
|
||||||
}
|
dst = pQuery->sdata[j]->data + count * tbnameSchema.bytes;
|
||||||
} else {
|
} else {
|
||||||
if (data == NULL) {
|
type = pExprInfo[j].type;
|
||||||
setNull(dst, type, bytes);
|
bytes = pExprInfo[j].bytes;
|
||||||
} else {
|
|
||||||
memcpy(dst, data, pExprInfo[j].bytes);
|
data = tsdbGetTableTagVal(item->pTable, pExprInfo[j].base.colInfo.colId, type, bytes);
|
||||||
}
|
dst = pQuery->sdata[j]->data + count * pExprInfo[j].bytes;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
doSetTagValueToResultBuf(dst, data, type, bytes);
|
||||||
}
|
}
|
||||||
count += 1;
|
count += 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ typedef struct {
|
||||||
char secret[TSDB_KEY_LEN]; // secret for the link
|
char secret[TSDB_KEY_LEN]; // secret for the link
|
||||||
char ckey[TSDB_KEY_LEN]; // ciphering key
|
char ckey[TSDB_KEY_LEN]; // ciphering key
|
||||||
|
|
||||||
void (*cfp)(SRpcMsg *, SRpcIpSet *);
|
void (*cfp)(SRpcMsg *, SRpcEpSet *);
|
||||||
int (*afp)(char *user, char *spi, char *encrypt, char *secret, char *ckey);
|
int (*afp)(char *user, char *spi, char *encrypt, char *secret, char *ckey);
|
||||||
|
|
||||||
int32_t refCount;
|
int32_t refCount;
|
||||||
|
@ -71,7 +71,7 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SRpcInfo *pRpc; // associated SRpcInfo
|
SRpcInfo *pRpc; // associated SRpcInfo
|
||||||
SRpcIpSet ipSet; // ip list provided by app
|
SRpcEpSet epSet; // ip list provided by app
|
||||||
void *ahandle; // handle provided by app
|
void *ahandle; // handle provided by app
|
||||||
void *signature; // for validation
|
void *signature; // for validation
|
||||||
struct SRpcConn *pConn; // pConn allocated
|
struct SRpcConn *pConn; // pConn allocated
|
||||||
|
@ -80,12 +80,12 @@ typedef struct {
|
||||||
int32_t contLen; // content length
|
int32_t contLen; // content length
|
||||||
int32_t code; // error code
|
int32_t code; // error code
|
||||||
int16_t numOfTry; // number of try for different servers
|
int16_t numOfTry; // number of try for different servers
|
||||||
int8_t oldInUse; // server IP inUse passed by app
|
int8_t oldInUse; // server EP inUse passed by app
|
||||||
int8_t redirect; // flag to indicate redirect
|
int8_t redirect; // flag to indicate redirect
|
||||||
int8_t connType; // connection type
|
int8_t connType; // connection type
|
||||||
SRpcMsg *pRsp; // for synchronous API
|
SRpcMsg *pRsp; // for synchronous API
|
||||||
tsem_t *pSem; // for synchronous API
|
tsem_t *pSem; // for synchronous API
|
||||||
SRpcIpSet *pSet; // for synchronous API
|
SRpcEpSet *pSet; // for synchronous API
|
||||||
char msg[0]; // RpcHead starts from here
|
char msg[0]; // RpcHead starts from here
|
||||||
} SRpcReqContext;
|
} SRpcReqContext;
|
||||||
|
|
||||||
|
@ -355,7 +355,7 @@ void *rpcReallocCont(void *ptr, int contLen) {
|
||||||
return start + sizeof(SRpcReqContext) + sizeof(SRpcHead);
|
return start + sizeof(SRpcReqContext) + sizeof(SRpcHead);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpcSendRequest(void *shandle, const SRpcIpSet *pIpSet, SRpcMsg *pMsg) {
|
void rpcSendRequest(void *shandle, const SRpcEpSet *pEpSet, SRpcMsg *pMsg) {
|
||||||
SRpcInfo *pRpc = (SRpcInfo *)shandle;
|
SRpcInfo *pRpc = (SRpcInfo *)shandle;
|
||||||
SRpcReqContext *pContext;
|
SRpcReqContext *pContext;
|
||||||
|
|
||||||
|
@ -364,11 +364,11 @@ void rpcSendRequest(void *shandle, const SRpcIpSet *pIpSet, SRpcMsg *pMsg) {
|
||||||
pContext->ahandle = pMsg->ahandle;
|
pContext->ahandle = pMsg->ahandle;
|
||||||
pContext->signature = pContext;
|
pContext->signature = pContext;
|
||||||
pContext->pRpc = (SRpcInfo *)shandle;
|
pContext->pRpc = (SRpcInfo *)shandle;
|
||||||
pContext->ipSet = *pIpSet;
|
pContext->epSet = *pEpSet;
|
||||||
pContext->contLen = contLen;
|
pContext->contLen = contLen;
|
||||||
pContext->pCont = pMsg->pCont;
|
pContext->pCont = pMsg->pCont;
|
||||||
pContext->msgType = pMsg->msgType;
|
pContext->msgType = pMsg->msgType;
|
||||||
pContext->oldInUse = pIpSet->inUse;
|
pContext->oldInUse = pEpSet->inUse;
|
||||||
|
|
||||||
pContext->connType = RPC_CONN_UDPC;
|
pContext->connType = RPC_CONN_UDPC;
|
||||||
if (contLen > tsRpcMaxUdpSize) pContext->connType = RPC_CONN_TCPC;
|
if (contLen > tsRpcMaxUdpSize) pContext->connType = RPC_CONN_TCPC;
|
||||||
|
@ -458,15 +458,15 @@ void rpcSendResponse(const SRpcMsg *pRsp) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpcSendRedirectRsp(void *thandle, const SRpcIpSet *pIpSet) {
|
void rpcSendRedirectRsp(void *thandle, const SRpcEpSet *pEpSet) {
|
||||||
SRpcMsg rpcMsg;
|
SRpcMsg rpcMsg;
|
||||||
memset(&rpcMsg, 0, sizeof(rpcMsg));
|
memset(&rpcMsg, 0, sizeof(rpcMsg));
|
||||||
|
|
||||||
rpcMsg.contLen = sizeof(SRpcIpSet);
|
rpcMsg.contLen = sizeof(SRpcEpSet);
|
||||||
rpcMsg.pCont = rpcMallocCont(rpcMsg.contLen);
|
rpcMsg.pCont = rpcMallocCont(rpcMsg.contLen);
|
||||||
if (rpcMsg.pCont == NULL) return;
|
if (rpcMsg.pCont == NULL) return;
|
||||||
|
|
||||||
memcpy(rpcMsg.pCont, pIpSet, sizeof(SRpcIpSet));
|
memcpy(rpcMsg.pCont, pEpSet, sizeof(SRpcEpSet));
|
||||||
|
|
||||||
rpcMsg.code = TSDB_CODE_RPC_REDIRECT;
|
rpcMsg.code = TSDB_CODE_RPC_REDIRECT;
|
||||||
rpcMsg.handle = thandle;
|
rpcMsg.handle = thandle;
|
||||||
|
@ -488,7 +488,7 @@ int rpcGetConnInfo(void *thandle, SRpcConnInfo *pInfo) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpcSendRecv(void *shandle, SRpcIpSet *pIpSet, SRpcMsg *pMsg, SRpcMsg *pRsp) {
|
void rpcSendRecv(void *shandle, SRpcEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRsp) {
|
||||||
SRpcReqContext *pContext;
|
SRpcReqContext *pContext;
|
||||||
pContext = (SRpcReqContext *) (pMsg->pCont-sizeof(SRpcHead)-sizeof(SRpcReqContext));
|
pContext = (SRpcReqContext *) (pMsg->pCont-sizeof(SRpcHead)-sizeof(SRpcReqContext));
|
||||||
|
|
||||||
|
@ -498,9 +498,9 @@ void rpcSendRecv(void *shandle, SRpcIpSet *pIpSet, SRpcMsg *pMsg, SRpcMsg *pRsp)
|
||||||
tsem_init(&sem, 0, 0);
|
tsem_init(&sem, 0, 0);
|
||||||
pContext->pSem = &sem;
|
pContext->pSem = &sem;
|
||||||
pContext->pRsp = pRsp;
|
pContext->pRsp = pRsp;
|
||||||
pContext->pSet = pIpSet;
|
pContext->pSet = pEpSet;
|
||||||
|
|
||||||
rpcSendRequest(shandle, pIpSet, pMsg);
|
rpcSendRequest(shandle, pEpSet, pMsg);
|
||||||
|
|
||||||
tsem_wait(&sem);
|
tsem_wait(&sem);
|
||||||
tsem_destroy(&sem);
|
tsem_destroy(&sem);
|
||||||
|
@ -755,11 +755,11 @@ static SRpcConn *rpcGetConnObj(SRpcInfo *pRpc, int sid, SRecvInfo *pRecv) {
|
||||||
static SRpcConn *rpcSetupConnToServer(SRpcReqContext *pContext) {
|
static SRpcConn *rpcSetupConnToServer(SRpcReqContext *pContext) {
|
||||||
SRpcConn *pConn;
|
SRpcConn *pConn;
|
||||||
SRpcInfo *pRpc = pContext->pRpc;
|
SRpcInfo *pRpc = pContext->pRpc;
|
||||||
SRpcIpSet *pIpSet = &pContext->ipSet;
|
SRpcEpSet *pEpSet = &pContext->epSet;
|
||||||
|
|
||||||
pConn = rpcGetConnFromCache(pRpc->pCache, pIpSet->fqdn[pIpSet->inUse], pIpSet->port[pIpSet->inUse], pContext->connType);
|
pConn = rpcGetConnFromCache(pRpc->pCache, pEpSet->fqdn[pEpSet->inUse], pEpSet->port[pEpSet->inUse], pContext->connType);
|
||||||
if ( pConn == NULL || pConn->user[0] == 0) {
|
if ( pConn == NULL || pConn->user[0] == 0) {
|
||||||
pConn = rpcOpenConn(pRpc, pIpSet->fqdn[pIpSet->inUse], pIpSet->port[pIpSet->inUse], pContext->connType);
|
pConn = rpcOpenConn(pRpc, pEpSet->fqdn[pEpSet->inUse], pEpSet->port[pEpSet->inUse], pContext->connType);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pConn) {
|
if (pConn) {
|
||||||
|
@ -1020,16 +1020,16 @@ static void rpcNotifyClient(SRpcReqContext *pContext, SRpcMsg *pMsg) {
|
||||||
pContext->pConn = NULL;
|
pContext->pConn = NULL;
|
||||||
if (pContext->pRsp) {
|
if (pContext->pRsp) {
|
||||||
// for synchronous API
|
// for synchronous API
|
||||||
memcpy(pContext->pSet, &pContext->ipSet, sizeof(SRpcIpSet));
|
memcpy(pContext->pSet, &pContext->epSet, sizeof(SRpcEpSet));
|
||||||
memcpy(pContext->pRsp, pMsg, sizeof(SRpcMsg));
|
memcpy(pContext->pRsp, pMsg, sizeof(SRpcMsg));
|
||||||
tsem_post(pContext->pSem);
|
tsem_post(pContext->pSem);
|
||||||
} else {
|
} else {
|
||||||
// for asynchronous API
|
// for asynchronous API
|
||||||
SRpcIpSet *pIpSet = NULL;
|
SRpcEpSet *pEpSet = NULL;
|
||||||
if (pContext->ipSet.inUse != pContext->oldInUse || pContext->redirect)
|
if (pContext->epSet.inUse != pContext->oldInUse || pContext->redirect)
|
||||||
pIpSet = &pContext->ipSet;
|
pEpSet = &pContext->epSet;
|
||||||
|
|
||||||
(*pRpc->cfp)(pMsg, pIpSet);
|
(*pRpc->cfp)(pMsg, pEpSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
// free the request message
|
// free the request message
|
||||||
|
@ -1070,9 +1070,9 @@ static void rpcProcessIncomingMsg(SRpcConn *pConn, SRpcHead *pHead) {
|
||||||
pConn->pContext = NULL;
|
pConn->pContext = NULL;
|
||||||
pConn->pReqMsg = NULL;
|
pConn->pReqMsg = NULL;
|
||||||
|
|
||||||
// for UDP, port may be changed by server, the port in ipSet shall be used for cache
|
// for UDP, port may be changed by server, the port in epSet shall be used for cache
|
||||||
if (pHead->code != TSDB_CODE_RPC_TOO_SLOW) {
|
if (pHead->code != TSDB_CODE_RPC_TOO_SLOW) {
|
||||||
rpcAddConnIntoCache(pRpc->pCache, pConn, pConn->peerFqdn, pContext->ipSet.port[pContext->ipSet.inUse], pConn->connType);
|
rpcAddConnIntoCache(pRpc->pCache, pConn, pConn->peerFqdn, pContext->epSet.port[pContext->epSet.inUse], pConn->connType);
|
||||||
} else {
|
} else {
|
||||||
rpcCloseConn(pConn);
|
rpcCloseConn(pConn);
|
||||||
}
|
}
|
||||||
|
@ -1087,10 +1087,10 @@ static void rpcProcessIncomingMsg(SRpcConn *pConn, SRpcHead *pHead) {
|
||||||
|
|
||||||
if (pHead->code == TSDB_CODE_RPC_REDIRECT) {
|
if (pHead->code == TSDB_CODE_RPC_REDIRECT) {
|
||||||
pContext->numOfTry = 0;
|
pContext->numOfTry = 0;
|
||||||
memcpy(&pContext->ipSet, pHead->content, sizeof(pContext->ipSet));
|
memcpy(&pContext->epSet, pHead->content, sizeof(pContext->epSet));
|
||||||
tDebug("%s, redirect is received, numOfIps:%d", pConn->info, pContext->ipSet.numOfIps);
|
tDebug("%s, redirect is received, numOfEps:%d", pConn->info, pContext->epSet.numOfEps);
|
||||||
for (int i=0; i<pContext->ipSet.numOfIps; ++i)
|
for (int i=0; i<pContext->epSet.numOfEps; ++i)
|
||||||
pContext->ipSet.port[i] = htons(pContext->ipSet.port[i]);
|
pContext->epSet.port[i] = htons(pContext->epSet.port[i]);
|
||||||
rpcSendReqToServer(pRpc, pContext);
|
rpcSendReqToServer(pRpc, pContext);
|
||||||
rpcFreeCont(rpcMsg.pCont);
|
rpcFreeCont(rpcMsg.pCont);
|
||||||
} else if (pHead->code == TSDB_CODE_RPC_NOT_READY) {
|
} else if (pHead->code == TSDB_CODE_RPC_NOT_READY) {
|
||||||
|
@ -1269,7 +1269,7 @@ static void rpcProcessConnError(void *param, void *id) {
|
||||||
|
|
||||||
tDebug("%s %p, connection error happens", pRpc->label, pContext->ahandle);
|
tDebug("%s %p, connection error happens", pRpc->label, pContext->ahandle);
|
||||||
|
|
||||||
if (pContext->numOfTry >= pContext->ipSet.numOfIps) {
|
if (pContext->numOfTry >= pContext->epSet.numOfEps) {
|
||||||
rpcMsg.msgType = pContext->msgType+1;
|
rpcMsg.msgType = pContext->msgType+1;
|
||||||
rpcMsg.ahandle = pContext->ahandle;
|
rpcMsg.ahandle = pContext->ahandle;
|
||||||
rpcMsg.code = pContext->code;
|
rpcMsg.code = pContext->code;
|
||||||
|
@ -1279,8 +1279,8 @@ static void rpcProcessConnError(void *param, void *id) {
|
||||||
rpcNotifyClient(pContext, &rpcMsg);
|
rpcNotifyClient(pContext, &rpcMsg);
|
||||||
} else {
|
} else {
|
||||||
// move to next IP
|
// move to next IP
|
||||||
pContext->ipSet.inUse++;
|
pContext->epSet.inUse++;
|
||||||
pContext->ipSet.inUse = pContext->ipSet.inUse % pContext->ipSet.numOfIps;
|
pContext->epSet.inUse = pContext->epSet.inUse % pContext->epSet.numOfEps;
|
||||||
rpcSendReqToServer(pRpc, pContext);
|
rpcSendReqToServer(pRpc, pContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int index;
|
int index;
|
||||||
SRpcIpSet ipSet;
|
SRpcEpSet epSet;
|
||||||
int num;
|
int num;
|
||||||
int numOfReqs;
|
int numOfReqs;
|
||||||
int msgSize;
|
int msgSize;
|
||||||
|
@ -32,11 +32,11 @@ typedef struct {
|
||||||
void *pRpc;
|
void *pRpc;
|
||||||
} SInfo;
|
} SInfo;
|
||||||
|
|
||||||
static void processResponse(SRpcMsg *pMsg, SRpcIpSet *pIpSet) {
|
static void processResponse(SRpcMsg *pMsg, SRpcEpSet *pEpSet) {
|
||||||
SInfo *pInfo = (SInfo *)pMsg->ahandle;
|
SInfo *pInfo = (SInfo *)pMsg->ahandle;
|
||||||
tDebug("thread:%d, response is received, type:%d contLen:%d code:0x%x", pInfo->index, pMsg->msgType, pMsg->contLen, pMsg->code);
|
tDebug("thread:%d, response is received, type:%d contLen:%d code:0x%x", pInfo->index, pMsg->msgType, pMsg->contLen, pMsg->code);
|
||||||
|
|
||||||
if (pIpSet) pInfo->ipSet = *pIpSet;
|
if (pEpSet) pInfo->epSet = *pEpSet;
|
||||||
|
|
||||||
rpcFreeCont(pMsg->pCont);
|
rpcFreeCont(pMsg->pCont);
|
||||||
sem_post(&pInfo->rspSem);
|
sem_post(&pInfo->rspSem);
|
||||||
|
@ -57,7 +57,7 @@ static void *sendRequest(void *param) {
|
||||||
rpcMsg.ahandle = pInfo;
|
rpcMsg.ahandle = pInfo;
|
||||||
rpcMsg.msgType = 1;
|
rpcMsg.msgType = 1;
|
||||||
tDebug("thread:%d, send request, contLen:%d num:%d", pInfo->index, pInfo->msgSize, pInfo->num);
|
tDebug("thread:%d, send request, contLen:%d num:%d", pInfo->index, pInfo->msgSize, pInfo->num);
|
||||||
rpcSendRequest(pInfo->pRpc, &pInfo->ipSet, &rpcMsg);
|
rpcSendRequest(pInfo->pRpc, &pInfo->epSet, &rpcMsg);
|
||||||
if ( pInfo->num % 20000 == 0 )
|
if ( pInfo->num % 20000 == 0 )
|
||||||
tInfo("thread:%d, %d requests have been sent", pInfo->index, pInfo->num);
|
tInfo("thread:%d, %d requests have been sent", pInfo->index, pInfo->num);
|
||||||
sem_wait(&pInfo->rspSem);
|
sem_wait(&pInfo->rspSem);
|
||||||
|
@ -71,7 +71,7 @@ static void *sendRequest(void *param) {
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
SRpcInit rpcInit;
|
SRpcInit rpcInit;
|
||||||
SRpcIpSet ipSet;
|
SRpcEpSet epSet;
|
||||||
int msgSize = 128;
|
int msgSize = 128;
|
||||||
int numOfReqs = 0;
|
int numOfReqs = 0;
|
||||||
int appThreads = 1;
|
int appThreads = 1;
|
||||||
|
@ -82,12 +82,12 @@ int main(int argc, char *argv[]) {
|
||||||
pthread_attr_t thattr;
|
pthread_attr_t thattr;
|
||||||
|
|
||||||
// server info
|
// server info
|
||||||
ipSet.numOfIps = 1;
|
epSet.numOfEps = 1;
|
||||||
ipSet.inUse = 0;
|
epSet.inUse = 0;
|
||||||
ipSet.port[0] = 7000;
|
epSet.port[0] = 7000;
|
||||||
ipSet.port[1] = 7000;
|
epSet.port[1] = 7000;
|
||||||
strcpy(ipSet.fqdn[0], serverIp);
|
strcpy(epSet.fqdn[0], serverIp);
|
||||||
strcpy(ipSet.fqdn[1], "192.168.0.1");
|
strcpy(epSet.fqdn[1], "192.168.0.1");
|
||||||
|
|
||||||
// client info
|
// client info
|
||||||
memset(&rpcInit, 0, sizeof(rpcInit));
|
memset(&rpcInit, 0, sizeof(rpcInit));
|
||||||
|
@ -105,9 +105,9 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
for (int i=1; i<argc; ++i) {
|
for (int i=1; i<argc; ++i) {
|
||||||
if (strcmp(argv[i], "-p")==0 && i < argc-1) {
|
if (strcmp(argv[i], "-p")==0 && i < argc-1) {
|
||||||
ipSet.port[0] = atoi(argv[++i]);
|
epSet.port[0] = atoi(argv[++i]);
|
||||||
} else if (strcmp(argv[i], "-i") ==0 && i < argc-1) {
|
} else if (strcmp(argv[i], "-i") ==0 && i < argc-1) {
|
||||||
tstrncpy(ipSet.fqdn[0], argv[++i], sizeof(ipSet.fqdn[0]));
|
tstrncpy(epSet.fqdn[0], argv[++i], sizeof(epSet.fqdn[0]));
|
||||||
} else if (strcmp(argv[i], "-t")==0 && i < argc-1) {
|
} else if (strcmp(argv[i], "-t")==0 && i < argc-1) {
|
||||||
rpcInit.numOfThreads = atoi(argv[++i]);
|
rpcInit.numOfThreads = atoi(argv[++i]);
|
||||||
} else if (strcmp(argv[i], "-m")==0 && i < argc-1) {
|
} else if (strcmp(argv[i], "-m")==0 && i < argc-1) {
|
||||||
|
@ -131,7 +131,7 @@ int main(int argc, char *argv[]) {
|
||||||
} else {
|
} else {
|
||||||
printf("\nusage: %s [options] \n", argv[0]);
|
printf("\nusage: %s [options] \n", argv[0]);
|
||||||
printf(" [-i ip]: first server IP address, default is:%s\n", serverIp);
|
printf(" [-i ip]: first server IP address, default is:%s\n", serverIp);
|
||||||
printf(" [-p port]: server port number, default is:%d\n", ipSet.port[0]);
|
printf(" [-p port]: server port number, default is:%d\n", epSet.port[0]);
|
||||||
printf(" [-t threads]: number of rpc threads, default is:%d\n", rpcInit.numOfThreads);
|
printf(" [-t threads]: number of rpc threads, default is:%d\n", rpcInit.numOfThreads);
|
||||||
printf(" [-s sessions]: number of rpc sessions, default is:%d\n", rpcInit.sessions);
|
printf(" [-s sessions]: number of rpc sessions, default is:%d\n", rpcInit.sessions);
|
||||||
printf(" [-m msgSize]: message body size, default is:%d\n", msgSize);
|
printf(" [-m msgSize]: message body size, default is:%d\n", msgSize);
|
||||||
|
@ -168,7 +168,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
for (int i=0; i<appThreads; ++i) {
|
for (int i=0; i<appThreads; ++i) {
|
||||||
pInfo->index = i;
|
pInfo->index = i;
|
||||||
pInfo->ipSet = ipSet;
|
pInfo->epSet = epSet;
|
||||||
pInfo->numOfReqs = numOfReqs;
|
pInfo->numOfReqs = numOfReqs;
|
||||||
pInfo->msgSize = msgSize;
|
pInfo->msgSize = msgSize;
|
||||||
sem_init(&pInfo->rspSem, 0, 0);
|
sem_init(&pInfo->rspSem, 0, 0);
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int index;
|
int index;
|
||||||
SRpcIpSet ipSet;
|
SRpcEpSet epSet;
|
||||||
int num;
|
int num;
|
||||||
int numOfReqs;
|
int numOfReqs;
|
||||||
int msgSize;
|
int msgSize;
|
||||||
|
@ -51,7 +51,7 @@ static void *sendRequest(void *param) {
|
||||||
rpcMsg.msgType = 1;
|
rpcMsg.msgType = 1;
|
||||||
tDebug("thread:%d, send request, contLen:%d num:%d", pInfo->index, pInfo->msgSize, pInfo->num);
|
tDebug("thread:%d, send request, contLen:%d num:%d", pInfo->index, pInfo->msgSize, pInfo->num);
|
||||||
|
|
||||||
rpcSendRecv(pInfo->pRpc, &pInfo->ipSet, &rpcMsg, &rspMsg);
|
rpcSendRecv(pInfo->pRpc, &pInfo->epSet, &rpcMsg, &rspMsg);
|
||||||
|
|
||||||
// handle response
|
// handle response
|
||||||
if (rspMsg.code != 0) terror++;
|
if (rspMsg.code != 0) terror++;
|
||||||
|
@ -72,7 +72,7 @@ static void *sendRequest(void *param) {
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
SRpcInit rpcInit;
|
SRpcInit rpcInit;
|
||||||
SRpcIpSet ipSet;
|
SRpcEpSet epSet;
|
||||||
int msgSize = 128;
|
int msgSize = 128;
|
||||||
int numOfReqs = 0;
|
int numOfReqs = 0;
|
||||||
int appThreads = 1;
|
int appThreads = 1;
|
||||||
|
@ -83,12 +83,12 @@ int main(int argc, char *argv[]) {
|
||||||
pthread_attr_t thattr;
|
pthread_attr_t thattr;
|
||||||
|
|
||||||
// server info
|
// server info
|
||||||
ipSet.numOfIps = 1;
|
epSet.numOfEps = 1;
|
||||||
ipSet.inUse = 0;
|
epSet.inUse = 0;
|
||||||
ipSet.port[0] = 7000;
|
epSet.port[0] = 7000;
|
||||||
ipSet.port[1] = 7000;
|
epSet.port[1] = 7000;
|
||||||
strcpy(ipSet.fqdn[0], serverIp);
|
strcpy(epSet.fqdn[0], serverIp);
|
||||||
strcpy(ipSet.fqdn[1], "192.168.0.1");
|
strcpy(epSet.fqdn[1], "192.168.0.1");
|
||||||
|
|
||||||
// client info
|
// client info
|
||||||
memset(&rpcInit, 0, sizeof(rpcInit));
|
memset(&rpcInit, 0, sizeof(rpcInit));
|
||||||
|
@ -106,9 +106,9 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
for (int i=1; i<argc; ++i) {
|
for (int i=1; i<argc; ++i) {
|
||||||
if (strcmp(argv[i], "-p")==0 && i < argc-1) {
|
if (strcmp(argv[i], "-p")==0 && i < argc-1) {
|
||||||
ipSet.port[0] = atoi(argv[++i]);
|
epSet.port[0] = atoi(argv[++i]);
|
||||||
} else if (strcmp(argv[i], "-i") ==0 && i < argc-1) {
|
} else if (strcmp(argv[i], "-i") ==0 && i < argc-1) {
|
||||||
tstrncpy(ipSet.fqdn[0], argv[++i], sizeof(ipSet.fqdn[0]));
|
tstrncpy(epSet.fqdn[0], argv[++i], sizeof(epSet.fqdn[0]));
|
||||||
} else if (strcmp(argv[i], "-t")==0 && i < argc-1) {
|
} else if (strcmp(argv[i], "-t")==0 && i < argc-1) {
|
||||||
rpcInit.numOfThreads = atoi(argv[++i]);
|
rpcInit.numOfThreads = atoi(argv[++i]);
|
||||||
} else if (strcmp(argv[i], "-m")==0 && i < argc-1) {
|
} else if (strcmp(argv[i], "-m")==0 && i < argc-1) {
|
||||||
|
@ -132,7 +132,7 @@ int main(int argc, char *argv[]) {
|
||||||
} else {
|
} else {
|
||||||
printf("\nusage: %s [options] \n", argv[0]);
|
printf("\nusage: %s [options] \n", argv[0]);
|
||||||
printf(" [-i ip]: first server IP address, default is:%s\n", serverIp);
|
printf(" [-i ip]: first server IP address, default is:%s\n", serverIp);
|
||||||
printf(" [-p port]: server port number, default is:%d\n", ipSet.port[0]);
|
printf(" [-p port]: server port number, default is:%d\n", epSet.port[0]);
|
||||||
printf(" [-t threads]: number of rpc threads, default is:%d\n", rpcInit.numOfThreads);
|
printf(" [-t threads]: number of rpc threads, default is:%d\n", rpcInit.numOfThreads);
|
||||||
printf(" [-s sessions]: number of rpc sessions, default is:%d\n", rpcInit.sessions);
|
printf(" [-s sessions]: number of rpc sessions, default is:%d\n", rpcInit.sessions);
|
||||||
printf(" [-m msgSize]: message body size, default is:%d\n", msgSize);
|
printf(" [-m msgSize]: message body size, default is:%d\n", msgSize);
|
||||||
|
@ -168,7 +168,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
for (int i=0; i<appThreads; ++i) {
|
for (int i=0; i<appThreads; ++i) {
|
||||||
pInfo->index = i;
|
pInfo->index = i;
|
||||||
pInfo->ipSet = ipSet;
|
pInfo->epSet = epSet;
|
||||||
pInfo->numOfReqs = numOfReqs;
|
pInfo->numOfReqs = numOfReqs;
|
||||||
pInfo->msgSize = msgSize;
|
pInfo->msgSize = msgSize;
|
||||||
sem_init(&pInfo->rspSem, 0, 0);
|
sem_init(&pInfo->rspSem, 0, 0);
|
||||||
|
|
|
@ -103,7 +103,7 @@ int retrieveAuthInfo(char *meterId, char *spi, char *encrypt, char *secret, char
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void processRequestMsg(SRpcMsg *pMsg, SRpcIpSet *pIpSet) {
|
void processRequestMsg(SRpcMsg *pMsg, SRpcEpSet *pEpSet) {
|
||||||
SRpcMsg *pTemp;
|
SRpcMsg *pTemp;
|
||||||
|
|
||||||
pTemp = taosAllocateQitem(sizeof(SRpcMsg));
|
pTemp = taosAllocateQitem(sizeof(SRpcMsg));
|
||||||
|
|
|
@ -148,7 +148,7 @@ void tsdbCloseRepo(TSDB_REPO_T *repo, int toCommit) {
|
||||||
STsdbRepo *pRepo = (STsdbRepo *)repo;
|
STsdbRepo *pRepo = (STsdbRepo *)repo;
|
||||||
int vgId = REPO_ID(pRepo);
|
int vgId = REPO_ID(pRepo);
|
||||||
|
|
||||||
tsdbStopStream(repo);
|
tsdbStopStream(pRepo);
|
||||||
|
|
||||||
if (toCommit) {
|
if (toCommit) {
|
||||||
tsdbAsyncCommit(pRepo);
|
tsdbAsyncCommit(pRepo);
|
||||||
|
@ -1126,6 +1126,7 @@ static void tsdbStartStream(STsdbRepo *pRepo) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void tsdbStopStream(STsdbRepo *pRepo) {
|
static void tsdbStopStream(STsdbRepo *pRepo) {
|
||||||
STsdbMeta *pMeta = pRepo->tsdbMeta;
|
STsdbMeta *pMeta = pRepo->tsdbMeta;
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ typedef struct STsdbQueryHandle {
|
||||||
bool locateStart;
|
bool locateStart;
|
||||||
int32_t outputCapacity;
|
int32_t outputCapacity;
|
||||||
int32_t realNumOfRows;
|
int32_t realNumOfRows;
|
||||||
SArray* pTableCheckInfo; //SArray<STableCheckInfo>
|
SArray* pTableCheckInfo; // SArray<STableCheckInfo>
|
||||||
int32_t activeIndex;
|
int32_t activeIndex;
|
||||||
bool checkFiles; // check file stage
|
bool checkFiles; // check file stage
|
||||||
void* qinfo; // query info handle, for debug purpose
|
void* qinfo; // query info handle, for debug purpose
|
||||||
|
@ -191,6 +191,7 @@ TsdbQueryHandleT* tsdbQueryTables(TSDB_REPO_T* tsdb, STsdbQueryCond* pCond, STab
|
||||||
free(pQueryHandle);
|
free(pQueryHandle);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tsdbTakeMemSnapshot(pQueryHandle->pTsdb, &pQueryHandle->mem, &pQueryHandle->imem);
|
tsdbTakeMemSnapshot(pQueryHandle->pTsdb, &pQueryHandle->mem, &pQueryHandle->imem);
|
||||||
|
|
||||||
size_t sizeOfGroup = taosArrayGetSize(groupList->pGroupList);
|
size_t sizeOfGroup = taosArrayGetSize(groupList->pGroupList);
|
||||||
|
@ -348,6 +349,11 @@ static bool initTableMemIterator(STsdbQueryHandle* pHandle, STableCheckInfo* pCh
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void destroyTableMemIterator(STableCheckInfo* pCheckInfo) {
|
||||||
|
tSkipListDestroyIter(pCheckInfo->iter);
|
||||||
|
tSkipListDestroyIter(pCheckInfo->iiter);
|
||||||
|
}
|
||||||
|
|
||||||
SDataRow getSDataRowInTableMem(STableCheckInfo* pCheckInfo) {
|
SDataRow getSDataRowInTableMem(STableCheckInfo* pCheckInfo) {
|
||||||
SDataRow rmem = NULL, rimem = NULL;
|
SDataRow rmem = NULL, rimem = NULL;
|
||||||
if (pCheckInfo->iter) {
|
if (pCheckInfo->iter) {
|
||||||
|
@ -1525,7 +1531,7 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
|
||||||
pQueryHandle->cur.win = (STimeWindow){pQueryHandle->window.skey, pQueryHandle->window.skey};
|
pQueryHandle->cur.win = (STimeWindow){pQueryHandle->window.skey, pQueryHandle->window.skey};
|
||||||
pQueryHandle->window = pQueryHandle->cur.win;
|
pQueryHandle->window = pQueryHandle->cur.win;
|
||||||
pQueryHandle->cur.rows = 1;
|
pQueryHandle->cur.rows = 1;
|
||||||
pQueryHandle->type = TSDB_QUERY_TYPE_EXTERNAL;
|
pQueryHandle->type = TSDB_QUERY_TYPE_ALL;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
STsdbQueryHandle* pSecQueryHandle = calloc(1, sizeof(STsdbQueryHandle));
|
STsdbQueryHandle* pSecQueryHandle = calloc(1, sizeof(STsdbQueryHandle));
|
||||||
|
@ -1543,6 +1549,7 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
|
||||||
free(pSecQueryHandle);
|
free(pSecQueryHandle);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tsdbTakeMemSnapshot(pSecQueryHandle->pTsdb, &pSecQueryHandle->mem, &pSecQueryHandle->imem);
|
tsdbTakeMemSnapshot(pSecQueryHandle->pTsdb, &pSecQueryHandle->mem, &pSecQueryHandle->imem);
|
||||||
|
|
||||||
// allocate buffer in order to load data blocks from file
|
// allocate buffer in order to load data blocks from file
|
||||||
|
@ -1567,7 +1574,6 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
|
||||||
|
|
||||||
for (int32_t j = 0; j < si; ++j) {
|
for (int32_t j = 0; j < si; ++j) {
|
||||||
STableCheckInfo* pCheckInfo = (STableCheckInfo*) taosArrayGet(pQueryHandle->pTableCheckInfo, j);
|
STableCheckInfo* pCheckInfo = (STableCheckInfo*) taosArrayGet(pQueryHandle->pTableCheckInfo, j);
|
||||||
|
|
||||||
STableCheckInfo info = {
|
STableCheckInfo info = {
|
||||||
.lastKey = pSecQueryHandle->window.skey,
|
.lastKey = pSecQueryHandle->window.skey,
|
||||||
.tableId = pCheckInfo->tableId,
|
.tableId = pCheckInfo->tableId,
|
||||||
|
@ -1584,8 +1590,8 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
|
||||||
bool ret = tsdbNextDataBlock((void*) pSecQueryHandle);
|
bool ret = tsdbNextDataBlock((void*) pSecQueryHandle);
|
||||||
assert(ret);
|
assert(ret);
|
||||||
|
|
||||||
/*SDataBlockInfo* pBlockInfo =*/ tsdbRetrieveDataBlockInfo((void*) pSecQueryHandle, &blockInfo);
|
tsdbRetrieveDataBlockInfo((void*) pSecQueryHandle, &blockInfo);
|
||||||
/*SArray *pDataBlock = */tsdbRetrieveDataBlock((void*) pSecQueryHandle, pSecQueryHandle->defaultLoadColumn);
|
tsdbRetrieveDataBlock((void*) pSecQueryHandle, pSecQueryHandle->defaultLoadColumn);
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfCols; ++i) {
|
for (int32_t i = 0; i < numOfCols; ++i) {
|
||||||
SColumnInfoData* pCol = taosArrayGet(pQueryHandle->pColumns, i);
|
SColumnInfoData* pCol = taosArrayGet(pQueryHandle->pColumns, i);
|
||||||
|
@ -1598,15 +1604,26 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SColumnInfoData* pTSCol = taosArrayGet(pQueryHandle->pColumns, 0);
|
SColumnInfoData* pTSCol = taosArrayGet(pQueryHandle->pColumns, 0);
|
||||||
|
|
||||||
|
// it is ascending order
|
||||||
pQueryHandle->cur.win = (STimeWindow){((TSKEY*)pTSCol->pData)[0], ((TSKEY*)pTSCol->pData)[1]};
|
pQueryHandle->cur.win = (STimeWindow){((TSKEY*)pTSCol->pData)[0], ((TSKEY*)pTSCol->pData)[1]};
|
||||||
pQueryHandle->window = pQueryHandle->cur.win;
|
pQueryHandle->window = pQueryHandle->cur.win;
|
||||||
pQueryHandle->cur.rows = 2;
|
pQueryHandle->cur.rows = 2;
|
||||||
|
pQueryHandle->cur.mixBlock = true;
|
||||||
|
pQueryHandle->order = TSDB_ORDER_DESC;
|
||||||
|
|
||||||
|
int32_t step = -1;// one step for ascending order traverse
|
||||||
|
for (int32_t j = 0; j < si; ++j) {
|
||||||
|
STableCheckInfo* pCheckInfo = (STableCheckInfo*) taosArrayGet(pQueryHandle->pTableCheckInfo, j);
|
||||||
|
pCheckInfo->lastKey = pQueryHandle->cur.win.ekey + step;
|
||||||
|
}
|
||||||
|
|
||||||
tsdbCleanupQueryHandle(pSecQueryHandle);
|
tsdbCleanupQueryHandle(pSecQueryHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//disable it after retrieve data
|
||||||
pQueryHandle->type = TSDB_QUERY_TYPE_EXTERNAL;
|
pQueryHandle->type = TSDB_QUERY_TYPE_EXTERNAL;
|
||||||
|
pQueryHandle->checkFiles = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2355,7 +2372,7 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
|
||||||
size_t size = taosArrayGetSize(pQueryHandle->pTableCheckInfo);
|
size_t size = taosArrayGetSize(pQueryHandle->pTableCheckInfo);
|
||||||
for (int32_t i = 0; i < size; ++i) {
|
for (int32_t i = 0; i < size; ++i) {
|
||||||
STableCheckInfo* pTableCheckInfo = taosArrayGet(pQueryHandle->pTableCheckInfo, i);
|
STableCheckInfo* pTableCheckInfo = taosArrayGet(pQueryHandle->pTableCheckInfo, i);
|
||||||
tSkipListDestroyIter(pTableCheckInfo->iter);
|
destroyTableMemIterator(pTableCheckInfo);
|
||||||
|
|
||||||
if (pTableCheckInfo->pDataCols != NULL) {
|
if (pTableCheckInfo->pDataCols != NULL) {
|
||||||
tfree(pTableCheckInfo->pDataCols->buf);
|
tfree(pTableCheckInfo->pDataCols->buf);
|
||||||
|
@ -2391,7 +2408,7 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
|
||||||
tfree(pQueryHandle);
|
tfree(pQueryHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tsdbDestoryTableGroup(STableGroupInfo *pGroupList) {
|
void tsdbDestroyTableGroup(STableGroupInfo *pGroupList) {
|
||||||
assert(pGroupList != NULL);
|
assert(pGroupList != NULL);
|
||||||
|
|
||||||
size_t numOfGroup = taosArrayGetSize(pGroupList->pGroupList);
|
size_t numOfGroup = taosArrayGetSize(pGroupList->pGroupList);
|
||||||
|
|
|
@ -340,6 +340,13 @@ void vnodeRelease(void *pVnodeRaw) {
|
||||||
tsdbCloseRepo(pVnode->tsdb, 1);
|
tsdbCloseRepo(pVnode->tsdb, 1);
|
||||||
pVnode->tsdb = NULL;
|
pVnode->tsdb = NULL;
|
||||||
|
|
||||||
|
// stop continuous query
|
||||||
|
if (pVnode->cq) {
|
||||||
|
void *cq = pVnode->cq;
|
||||||
|
pVnode->cq = NULL;
|
||||||
|
cqClose(cq);
|
||||||
|
}
|
||||||
|
|
||||||
if (pVnode->wal)
|
if (pVnode->wal)
|
||||||
walClose(pVnode->wal);
|
walClose(pVnode->wal);
|
||||||
pVnode->wal = NULL;
|
pVnode->wal = NULL;
|
||||||
|
@ -511,13 +518,6 @@ static void vnodeCleanUp(SVnodeObj *pVnode) {
|
||||||
syncStop(sync);
|
syncStop(sync);
|
||||||
}
|
}
|
||||||
|
|
||||||
// stop continuous query
|
|
||||||
if (pVnode->cq) {
|
|
||||||
void *cq = pVnode->cq;
|
|
||||||
pVnode->cq = NULL;
|
|
||||||
cqClose(cq);
|
|
||||||
}
|
|
||||||
|
|
||||||
vTrace("vgId:%d, vnode will cleanup, refCount:%d", pVnode->vgId, pVnode->refCount);
|
vTrace("vgId:%d, vnode will cleanup, refCount:%d", pVnode->vgId, pVnode->refCount);
|
||||||
|
|
||||||
// release local resources only after cutting off outside connections
|
// release local resources only after cutting off outside connections
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
select * from db.devices;
|
|
@ -13,8 +13,9 @@ typedef struct {
|
||||||
char sql[256];
|
char sql[256];
|
||||||
char dataDir[256];
|
char dataDir[256];
|
||||||
int filesNum;
|
int filesNum;
|
||||||
int writeClients;
|
int clients;
|
||||||
int rowsPerRequest;
|
int rowsPerRequest;
|
||||||
|
int write;
|
||||||
} ProArgs;
|
} ProArgs;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -41,7 +42,7 @@ int main(int argc, char *argv[]) {
|
||||||
statis.totalRows = 0;
|
statis.totalRows = 0;
|
||||||
parseArg(argc, argv);
|
parseArg(argc, argv);
|
||||||
|
|
||||||
if (arguments.writeClients > 0) {
|
if (arguments.write) {
|
||||||
writeData();
|
writeData();
|
||||||
} else {
|
} else {
|
||||||
readData();
|
readData();
|
||||||
|
@ -52,7 +53,7 @@ void parseArg(int argc, char *argv[]) {
|
||||||
strcpy(arguments.sql, "./sqlCmd.txt");
|
strcpy(arguments.sql, "./sqlCmd.txt");
|
||||||
strcpy(arguments.dataDir, "./testdata");
|
strcpy(arguments.dataDir, "./testdata");
|
||||||
arguments.filesNum = 2;
|
arguments.filesNum = 2;
|
||||||
arguments.writeClients = 0;
|
arguments.clients = 1;
|
||||||
arguments.rowsPerRequest = 100;
|
arguments.rowsPerRequest = 100;
|
||||||
|
|
||||||
for (int i = 1; i < argc; ++i) {
|
for (int i = 1; i < argc; ++i) {
|
||||||
|
@ -83,12 +84,12 @@ void parseArg(int argc, char *argv[]) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (strcmp(argv[i], "-writeClients") == 0) {
|
else if (strcmp(argv[i], "-clients") == 0) {
|
||||||
if (i < argc - 1) {
|
if (i < argc - 1) {
|
||||||
arguments.writeClients = atoi(argv[++i]);
|
arguments.clients = atoi(argv[++i]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fprintf(stderr, "'-writeClients' requires a parameter, default:%d\n", arguments.writeClients);
|
fprintf(stderr, "'-clients' requires a parameter, default:%d\n", arguments.clients);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,6 +102,9 @@ void parseArg(int argc, char *argv[]) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (strcmp(argv[i], "-w") == 0) {
|
||||||
|
arguments.write = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -215,7 +219,7 @@ void writeDataImp(void *param) {
|
||||||
|
|
||||||
void writeData() {
|
void writeData() {
|
||||||
printf("write data\n");
|
printf("write data\n");
|
||||||
printf("---- writeClients: %d\n", arguments.writeClients);
|
printf("---- clients: %d\n", arguments.clients);
|
||||||
printf("---- dataDir: %s\n", arguments.dataDir);
|
printf("---- dataDir: %s\n", arguments.dataDir);
|
||||||
printf("---- numOfFiles: %d\n", arguments.filesNum);
|
printf("---- numOfFiles: %d\n", arguments.filesNum);
|
||||||
printf("---- rowsPerRequest: %d\n", arguments.rowsPerRequest);
|
printf("---- rowsPerRequest: %d\n", arguments.rowsPerRequest);
|
||||||
|
@ -243,12 +247,12 @@ void writeData() {
|
||||||
|
|
||||||
int64_t st = getTimeStampMs();
|
int64_t st = getTimeStampMs();
|
||||||
|
|
||||||
int a = arguments.filesNum / arguments.writeClients;
|
int a = arguments.filesNum / arguments.clients;
|
||||||
int b = arguments.filesNum % arguments.writeClients;
|
int b = arguments.filesNum % arguments.clients;
|
||||||
int last = 0;
|
int last = 0;
|
||||||
|
|
||||||
ThreadObj *threads = calloc((size_t)arguments.writeClients, sizeof(ThreadObj));
|
ThreadObj *threads = calloc((size_t)arguments.clients, sizeof(ThreadObj));
|
||||||
for (int i = 0; i < arguments.writeClients; ++i) {
|
for (int i = 0; i < arguments.clients; ++i) {
|
||||||
ThreadObj *pthread = threads + i;
|
ThreadObj *pthread = threads + i;
|
||||||
pthread_attr_t thattr;
|
pthread_attr_t thattr;
|
||||||
pthread->threadId = i + 1;
|
pthread->threadId = i + 1;
|
||||||
|
@ -264,7 +268,7 @@ void writeData() {
|
||||||
pthread_create(&pthread->pid, &thattr, (void *(*)(void *))writeDataImp, pthread);
|
pthread_create(&pthread->pid, &thattr, (void *(*)(void *))writeDataImp, pthread);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < arguments.writeClients; i++) {
|
for (int i = 0; i < arguments.clients; i++) {
|
||||||
pthread_join(threads[i].pid, NULL);
|
pthread_join(threads[i].pid, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,17 +276,15 @@ void writeData() {
|
||||||
float seconds = (float)elapsed / 1000;
|
float seconds = (float)elapsed / 1000;
|
||||||
float rs = (float)statis.totalRows / seconds;
|
float rs = (float)statis.totalRows / seconds;
|
||||||
|
|
||||||
|
free(threads);
|
||||||
|
|
||||||
printf("---- Spent %f seconds to insert %ld records, speed: %f Rows/Second\n", seconds, statis.totalRows, rs);
|
printf("---- Spent %f seconds to insert %ld records, speed: %f Rows/Second\n", seconds, statis.totalRows, rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void readData() {
|
void readDataImp(void *param)
|
||||||
printf("read data\n");
|
{
|
||||||
printf("---- sql: %s\n", arguments.sql);
|
ThreadObj *pThread = (ThreadObj *)param;
|
||||||
|
printf("Thread %d\n", pThread->threadId);
|
||||||
void *taos = taos_connect("127.0.0.1", "root", "taosdata", NULL, 0);
|
|
||||||
if (taos == NULL)
|
|
||||||
taos_error(taos);
|
|
||||||
|
|
||||||
FILE *fp = fopen(arguments.sql, "r");
|
FILE *fp = fopen(arguments.sql, "r");
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
printf("failed to open file %s\n", arguments.sql);
|
printf("failed to open file %s\n", arguments.sql);
|
||||||
|
@ -290,6 +292,10 @@ void readData() {
|
||||||
}
|
}
|
||||||
printf("open file %s success\n", arguments.sql);
|
printf("open file %s success\n", arguments.sql);
|
||||||
|
|
||||||
|
void *taos = taos_connect("127.0.0.1", "root", "taosdata", NULL, 0);
|
||||||
|
if (taos == NULL)
|
||||||
|
taos_error(taos);
|
||||||
|
|
||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
while (!feof(fp)) {
|
while (!feof(fp)) {
|
||||||
|
@ -325,9 +331,36 @@ void readData() {
|
||||||
|
|
||||||
int64_t elapsed = getTimeStampMs() - st;
|
int64_t elapsed = getTimeStampMs() - st;
|
||||||
float seconds = (float)elapsed / 1000;
|
float seconds = (float)elapsed / 1000;
|
||||||
printf("---- Spent %f seconds to query: %s", seconds, line);
|
printf("---- Spent %f seconds to retrieve %d records, Thread:%d query: %s\n", seconds, rows, pThread->threadId, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void readData() {
|
||||||
|
printf("read data\n");
|
||||||
|
printf("---- sql: %s\n", arguments.sql);
|
||||||
|
printf("---- clients: %d\n", arguments.clients);
|
||||||
|
|
||||||
|
void *taos = taos_connect("127.0.0.1", "root", "taosdata", NULL, 0);
|
||||||
|
if (taos == NULL)
|
||||||
|
taos_error(taos);
|
||||||
|
|
||||||
|
ThreadObj *threads = calloc((size_t)arguments.clients, sizeof(ThreadObj));
|
||||||
|
|
||||||
|
for (int i = 0; i < arguments.clients; ++i) {
|
||||||
|
ThreadObj *pthread = threads + i;
|
||||||
|
pthread_attr_t thattr;
|
||||||
|
pthread->threadId = i + 1;
|
||||||
|
pthread_attr_init(&thattr);
|
||||||
|
pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE);
|
||||||
|
pthread_create(&pthread->pid, &thattr, (void *(*)(void *))readDataImp, pthread);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < arguments.clients; i++) {
|
||||||
|
pthread_join(threads[i].pid, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(threads);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,127 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DATA_DIR=/mnt/root/testdata
|
||||||
|
NUM_LOOP=5
|
||||||
|
|
||||||
|
function printTo {
|
||||||
|
if $verbose ; then
|
||||||
|
echo $1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
TDTESTQ1OUT=tdengineTestQ1.out
|
||||||
|
|
||||||
|
function runTest {
|
||||||
|
totalG0=0
|
||||||
|
totalG10=0
|
||||||
|
totalG20=0
|
||||||
|
totalG30=0
|
||||||
|
totalG40=0
|
||||||
|
totalG50=0
|
||||||
|
totalG60=0
|
||||||
|
totalG70=0
|
||||||
|
totalG80=0
|
||||||
|
totalG90=0
|
||||||
|
for i in `seq 1 $NUM_LOOP`; do
|
||||||
|
printTo "loop i:$i, $TDTEST_DIR/tdengineTest \
|
||||||
|
-sql q1.txt"
|
||||||
|
restartTaosd
|
||||||
|
$TDTEST_DIR/tdengineTest \
|
||||||
|
-sql $TDTEST_DIR/q1.txt > $TDTESTQ1OUT
|
||||||
|
G0=`grep "devgroup=0" $TDTESTQ1OUT| awk '{print $3}'`
|
||||||
|
totalG0=`echo "scale=4; $totalG0 + $G0" | bc`
|
||||||
|
printTo "i: $i, G0: $G0, totalG0:$totalG0"
|
||||||
|
G10=`grep "devgroup=10" $TDTESTQ1OUT| awk '{print $3}'`
|
||||||
|
totalG10=`echo "scale=4; $totalG10 + $G10" | bc`
|
||||||
|
printTo "i: $i, G10: $G10, totalG10:$totalG10"
|
||||||
|
G20=`grep "devgroup=20" $TDTESTQ1OUT| awk '{print $3}'`
|
||||||
|
totalG20=`echo "scale=4; $totalG20 + $G20" | bc`
|
||||||
|
G30=`grep "devgroup=30" $TDTESTQ1OUT| awk '{print $3}'`
|
||||||
|
totalG30=`echo "scale=4; $totalG30 + $G30" | bc`
|
||||||
|
G40=`grep "devgroup=40" $TDTESTQ1OUT| awk '{print $3}'`
|
||||||
|
totalG40=`echo "scale=4; $totalG40 + $G40" | bc`
|
||||||
|
G50=`grep "devgroup=50" $TDTESTQ1OUT| awk '{print $3}'`
|
||||||
|
totalG50=`echo "scale=4; $totalG50 + $G50" | bc`
|
||||||
|
G60=`grep "devgroup=60" $TDTESTQ1OUT| awk '{print $3}'`
|
||||||
|
totalG60=`echo "scale=4; $totalG60 + $G60" | bc`
|
||||||
|
G70=`grep "devgroup=70" $TDTESTQ1OUT| awk '{print $3}'`
|
||||||
|
totalG70=`echo "scale=4; $totalG70 + $G70" | bc`
|
||||||
|
G80=`grep "devgroup=80" $TDTESTQ1OUT| awk '{print $3}'`
|
||||||
|
totalG80=`echo "scale=4; $totalG80 + $G80" | bc`
|
||||||
|
G90=`grep "devgroup=90" $TDTESTQ1OUT| awk '{print $3}'`
|
||||||
|
totalG90=`echo "scale=4; $totalG90 + $G90" | bc`
|
||||||
|
printTo "i: $i, G90: $G90, totalG90:$totalG90"
|
||||||
|
done
|
||||||
|
avgG0=`echo "scale=4; x = $totalG0 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG10=`echo "scale=4; x = $totalG10 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG20=`echo "scale=4; x = $totalG20 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG30=`echo "scale=4; x = $totalG30 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG40=`echo "scale=4; x = $totalG40 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG50=`echo "scale=4; x = $totalG50 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG60=`echo "scale=4; x = $totalG60 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG70=`echo "scale=4; x = $totalG70 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG80=`echo "scale=4; x = $totalG80 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG90=`echo "scale=4; x = $totalG90 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
echo "Latency, G-0, G-10, G-20, G-30, G-40, G-50, G-60, G-70, G-80, G-90"
|
||||||
|
echo "TDengine, $avgG0, $avgG10, $avgG20, $avgG30, $avgG40, $avgG50, $avgG60, $avgG70, $avgG80, $avgG90"
|
||||||
|
}
|
||||||
|
|
||||||
|
function restartTaosd {
|
||||||
|
printTo "Stop taosd"
|
||||||
|
systemctl stop taosd
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
while [ -n "$PID" ]
|
||||||
|
do
|
||||||
|
pkill -TERM -x taosd
|
||||||
|
sleep 1
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
done
|
||||||
|
|
||||||
|
printTo "Start taosd"
|
||||||
|
$TAOSD_DIR/taosd > /dev/null 2>&1 &
|
||||||
|
sleep 10
|
||||||
|
}
|
||||||
|
|
||||||
|
################ Main ################
|
||||||
|
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
verbose=false
|
||||||
|
|
||||||
|
for arg in "$@"
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-v)
|
||||||
|
verbose=true
|
||||||
|
;;
|
||||||
|
|
||||||
|
master)
|
||||||
|
master=true
|
||||||
|
develop=false
|
||||||
|
;;
|
||||||
|
|
||||||
|
develop)
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if $master ; then
|
||||||
|
echo "Test master branch.."
|
||||||
|
cp /mnt/root/cfg/master/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine.master
|
||||||
|
else
|
||||||
|
echo "Test develop branch.."
|
||||||
|
cp /mnt/root/cfg/10billion/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine
|
||||||
|
fi
|
||||||
|
|
||||||
|
TAOSD_DIR=$WORK_DIR/debug/build/bin
|
||||||
|
TDTEST_DIR=$WORK_DIR/tests/comparisonTest/tdengine
|
||||||
|
|
||||||
|
runTest
|
||||||
|
|
||||||
|
echo "Test done!"
|
|
@ -0,0 +1,348 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DATA_DIR=/mnt/root/testdata
|
||||||
|
NUM_LOOP=5
|
||||||
|
|
||||||
|
function printTo {
|
||||||
|
if $verbose ; then
|
||||||
|
echo $1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
TDTESTQ2OUT=tdengineTestQ2.out
|
||||||
|
|
||||||
|
function runTest {
|
||||||
|
totalCount10=0
|
||||||
|
totalCount20=0
|
||||||
|
totalCount30=0
|
||||||
|
totalCount40=0
|
||||||
|
totalCount50=0
|
||||||
|
totalCount60=0
|
||||||
|
totalCount70=0
|
||||||
|
totalCount80=0
|
||||||
|
totalCount90=0
|
||||||
|
totalCount100=0
|
||||||
|
|
||||||
|
totalAvg10=0
|
||||||
|
totalAvg20=0
|
||||||
|
totalAvg30=0
|
||||||
|
totalAvg40=0
|
||||||
|
totalAvg50=0
|
||||||
|
totalAvg60=0
|
||||||
|
totalAvg70=0
|
||||||
|
totalAvg80=0
|
||||||
|
totalAvg90=0
|
||||||
|
totalAvg100=0
|
||||||
|
|
||||||
|
totalSum10=0
|
||||||
|
totalSum20=0
|
||||||
|
totalSum30=0
|
||||||
|
totalSum40=0
|
||||||
|
totalSum50=0
|
||||||
|
totalSum60=0
|
||||||
|
totalSum70=0
|
||||||
|
totalSum80=0
|
||||||
|
totalSum90=0
|
||||||
|
totalSum100=0
|
||||||
|
|
||||||
|
totalMax10=0
|
||||||
|
totalMax20=0
|
||||||
|
totalMax30=0
|
||||||
|
totalMax40=0
|
||||||
|
totalMax50=0
|
||||||
|
totalMax60=0
|
||||||
|
totalMax70=0
|
||||||
|
totalMax80=0
|
||||||
|
totalMax90=0
|
||||||
|
totalMax100=0
|
||||||
|
|
||||||
|
totalMin10=0
|
||||||
|
totalMin20=0
|
||||||
|
totalMin30=0
|
||||||
|
totalMin40=0
|
||||||
|
totalMin50=0
|
||||||
|
totalMin60=0
|
||||||
|
totalMin70=0
|
||||||
|
totalMin80=0
|
||||||
|
totalMin90=0
|
||||||
|
totalMin100=0
|
||||||
|
|
||||||
|
totalSpread10=0
|
||||||
|
totalSpread20=0
|
||||||
|
totalSpread30=0
|
||||||
|
totalSpread40=0
|
||||||
|
totalSpread50=0
|
||||||
|
totalSpread60=0
|
||||||
|
totalSpread70=0
|
||||||
|
totalSpread80=0
|
||||||
|
totalSpread90=0
|
||||||
|
totalSpread100=0
|
||||||
|
|
||||||
|
for i in `seq 1 $NUM_LOOP`; do
|
||||||
|
printTo "loop i:$i, $TDTEST_DIR/tdengineTest \
|
||||||
|
-sql q2.txt"
|
||||||
|
restartTaosd
|
||||||
|
$TDTEST_DIR/tdengineTest \
|
||||||
|
-sql $TDTEST_DIR/q2.txt > $TDTESTQ2OUT
|
||||||
|
|
||||||
|
Count10=`cat $TDTESTQ2OUT | grep "count" | grep "devgroup<10;" | awk '{print $3}'`
|
||||||
|
totalCount10=`echo "scale=4; $totalCount10 + $Count10" | bc`
|
||||||
|
Count20=`cat $TDTESTQ2OUT | grep "count" | grep "devgroup<20;" | awk '{print $3}'`
|
||||||
|
totalCount20=`echo "scale=4; $totalCount20 + $Count20" | bc`
|
||||||
|
Count30=`cat $TDTESTQ2OUT | grep count | grep "devgroup<30;" | awk '{print $3}'`
|
||||||
|
totalCount30=`echo "scale=4; $totalCount30 + $Count30" | bc`
|
||||||
|
Count40=`cat $TDTESTQ2OUT | grep count | grep "devgroup<40;" | awk '{print $3}'`
|
||||||
|
totalCount40=`echo "scale=4; $totalCount40 + $Count40" | bc`
|
||||||
|
Count50=`cat $TDTESTQ2OUT | grep count | grep "devgroup<50;" | awk '{print $3}'`
|
||||||
|
totalCount50=`echo "scale=4; $totalCount50 + $Count50" | bc`
|
||||||
|
Count60=`cat $TDTESTQ2OUT | grep count | grep "devgroup<60;" | awk '{print $3}'`
|
||||||
|
totalCount60=`echo "scale=4; $totalCount60 + $Count60" | bc`
|
||||||
|
Count70=`cat $TDTESTQ2OUT | grep count | grep "devgroup<70;" | awk '{print $3}'`
|
||||||
|
totalCount70=`echo "scale=4; $totalCount70 + $Count70" | bc`
|
||||||
|
Count80=`cat $TDTESTQ2OUT | grep count | grep "devgroup<80;" | awk '{print $3}'`
|
||||||
|
totalCount80=`echo "scale=4; $totalCount80 + $Count80" | bc`
|
||||||
|
Count90=`cat $TDTESTQ2OUT | grep count | grep "devgroup<90;" | awk '{print $3}'`
|
||||||
|
totalCount90=`echo "scale=4; $totalCount90 + $Count90" | bc`
|
||||||
|
Count100=`cat $TDTESTQ2OUT | grep count | grep "db.devices;" | awk '{print $3}'`
|
||||||
|
totalCount100=`echo "scale=4; $totalCount100 + $Count100" | bc`
|
||||||
|
|
||||||
|
Avg10=`cat $TDTESTQ2OUT | grep "avg" | grep "devgroup<10;" | awk '{print $3}'`
|
||||||
|
totalAvg10=`echo "scale=4; $totalAvg10 + $Avg10" | bc`
|
||||||
|
Avg20=`cat $TDTESTQ2OUT | grep "avg" | grep "devgroup<20;" | awk '{print $3}'`
|
||||||
|
totalAvg20=`echo "scale=4; $totalAvg20 + $Avg20" | bc`
|
||||||
|
Avg30=`cat $TDTESTQ2OUT | grep avg | grep "devgroup<30;" | awk '{print $3}'`
|
||||||
|
totalAvg30=`echo "scale=4; $totalAvg30 + $Avg30" | bc`
|
||||||
|
Avg40=`cat $TDTESTQ2OUT | grep avg | grep "devgroup<40;" | awk '{print $3}'`
|
||||||
|
totalAvg40=`echo "scale=4; $totalAvg40 + $Avg40" | bc`
|
||||||
|
Avg50=`cat $TDTESTQ2OUT | grep avg | grep "devgroup<50;" | awk '{print $3}'`
|
||||||
|
totalAvg50=`echo "scale=4; $totalAvg50 + $Avg50" | bc`
|
||||||
|
Avg60=`cat $TDTESTQ2OUT | grep avg | grep "devgroup<60;" | awk '{print $3}'`
|
||||||
|
totalAvg60=`echo "scale=4; $totalAvg60 + $Avg60" | bc`
|
||||||
|
Avg70=`cat $TDTESTQ2OUT | grep avg | grep "devgroup<70;" | awk '{print $3}'`
|
||||||
|
totalAvg70=`echo "scale=4; $totalAvg70 + $Avg70" | bc`
|
||||||
|
Avg80=`cat $TDTESTQ2OUT | grep avg | grep "devgroup<80;" | awk '{print $3}'`
|
||||||
|
totalAvg80=`echo "scale=4; $totalAvg80 + $Avg80" | bc`
|
||||||
|
Avg90=`cat $TDTESTQ2OUT | grep avg | grep "devgroup<90;" | awk '{print $3}'`
|
||||||
|
totalAvg90=`echo "scale=4; $totalAvg90 + $Avg90" | bc`
|
||||||
|
Avg100=`cat $TDTESTQ2OUT | grep avg | grep "db.devices;" | awk '{print $3}'`
|
||||||
|
totalAvg100=`echo "scale=4; $totalAvg100 + $Avg100" | bc`
|
||||||
|
|
||||||
|
Sum10=`cat $TDTESTQ2OUT | grep "sum" | grep "devgroup<10;" | awk '{print $3}'`
|
||||||
|
totalSum10=`echo "scale=4; $totalSum10 + $Sum10" | bc`
|
||||||
|
Sum20=`cat $TDTESTQ2OUT | grep "sum" | grep "devgroup<20;" | awk '{print $3}'`
|
||||||
|
totalSum20=`echo "scale=4; $totalSum20 + $Sum20" | bc`
|
||||||
|
Sum30=`cat $TDTESTQ2OUT | grep sum | grep "devgroup<30;" | awk '{print $3}'`
|
||||||
|
totalSum30=`echo "scale=4; $totalSum30 + $Sum30" | bc`
|
||||||
|
Sum40=`cat $TDTESTQ2OUT | grep sum | grep "devgroup<40;" | awk '{print $3}'`
|
||||||
|
totalSum40=`echo "scale=4; $totalSum40 + $Sum40" | bc`
|
||||||
|
Sum50=`cat $TDTESTQ2OUT | grep sum | grep "devgroup<50;" | awk '{print $3}'`
|
||||||
|
totalSum50=`echo "scale=4; $totalSum50 + $Sum50" | bc`
|
||||||
|
Sum60=`cat $TDTESTQ2OUT | grep sum | grep "devgroup<60;" | awk '{print $3}'`
|
||||||
|
totalSum60=`echo "scale=4; $totalSum60 + $Sum60" | bc`
|
||||||
|
Sum70=`cat $TDTESTQ2OUT | grep sum | grep "devgroup<70;" | awk '{print $3}'`
|
||||||
|
totalSum70=`echo "scale=4; $totalSum70 + $Sum70" | bc`
|
||||||
|
Sum80=`cat $TDTESTQ2OUT | grep sum | grep "devgroup<80;" | awk '{print $3}'`
|
||||||
|
totalSum80=`echo "scale=4; $totalSum80 + $Sum80" | bc`
|
||||||
|
Sum90=`cat $TDTESTQ2OUT | grep sum | grep "devgroup<90;" | awk '{print $3}'`
|
||||||
|
totalSum90=`echo "scale=4; $totalSum90 + $Sum90" | bc`
|
||||||
|
Sum100=`cat $TDTESTQ2OUT | grep sum | grep "db.devices;" | awk '{print $3}'`
|
||||||
|
totalSum100=`echo "scale=4; $totalSum100 + $Sum100" | bc`
|
||||||
|
|
||||||
|
Max10=`cat $TDTESTQ2OUT | grep "max" | grep "devgroup<10;" | awk '{print $3}'`
|
||||||
|
totalMax10=`echo "scale=4; $totalMax10 + $Max10" | bc`
|
||||||
|
Max20=`cat $TDTESTQ2OUT | grep "max" | grep "devgroup<20;" | awk '{print $3}'`
|
||||||
|
totalMax20=`echo "scale=4; $totalMax20 + $Max20" | bc`
|
||||||
|
Max30=`cat $TDTESTQ2OUT | grep max | grep "devgroup<30;" | awk '{print $3}'`
|
||||||
|
totalMax30=`echo "scale=4; $totalMax30 + $Max30" | bc`
|
||||||
|
Max40=`cat $TDTESTQ2OUT | grep max | grep "devgroup<40;" | awk '{print $3}'`
|
||||||
|
totalMax40=`echo "scale=4; $totalMax40 + $Max40" | bc`
|
||||||
|
Max50=`cat $TDTESTQ2OUT | grep max | grep "devgroup<50;" | awk '{print $3}'`
|
||||||
|
totalMax50=`echo "scale=4; $totalMax50 + $Max50" | bc`
|
||||||
|
Max60=`cat $TDTESTQ2OUT | grep max | grep "devgroup<60;" | awk '{print $3}'`
|
||||||
|
totalMax60=`echo "scale=4; $totalMax60 + $Max60" | bc`
|
||||||
|
Max70=`cat $TDTESTQ2OUT | grep max | grep "devgroup<70;" | awk '{print $3}'`
|
||||||
|
totalMax70=`echo "scale=4; $totalMax70 + $Max70" | bc`
|
||||||
|
Max80=`cat $TDTESTQ2OUT | grep max | grep "devgroup<80;" | awk '{print $3}'`
|
||||||
|
totalMax80=`echo "scale=4; $totalMax80 + $Max80" | bc`
|
||||||
|
Max90=`cat $TDTESTQ2OUT | grep max | grep "devgroup<90;" | awk '{print $3}'`
|
||||||
|
totalMax90=`echo "scale=4; $totalMax90 + $Max90" | bc`
|
||||||
|
Max100=`cat $TDTESTQ2OUT | grep max | grep "db.devices;" | awk '{print $3}'`
|
||||||
|
totalMax100=`echo "scale=4; $totalMax100 + $Max100" | bc`
|
||||||
|
|
||||||
|
Min10=`cat $TDTESTQ2OUT | grep "min" | grep "devgroup<10;" | awk '{print $3}'`
|
||||||
|
totalMin10=`echo "scale=4; $totalMin10 + $Min10" | bc`
|
||||||
|
Min20=`cat $TDTESTQ2OUT | grep "min" | grep "devgroup<20;" | awk '{print $3}'`
|
||||||
|
totalMin20=`echo "scale=4; $totalMin20 + $Min20" | bc`
|
||||||
|
Min30=`cat $TDTESTQ2OUT | grep min | grep "devgroup<30;" | awk '{print $3}'`
|
||||||
|
totalMin30=`echo "scale=4; $totalMin30 + $Min30" | bc`
|
||||||
|
Min40=`cat $TDTESTQ2OUT | grep min | grep "devgroup<40;" | awk '{print $3}'`
|
||||||
|
totalMin40=`echo "scale=4; $totalMin40 + $Min40" | bc`
|
||||||
|
Min50=`cat $TDTESTQ2OUT | grep min | grep "devgroup<50;" | awk '{print $3}'`
|
||||||
|
totalMin50=`echo "scale=4; $totalMin50 + $Min50" | bc`
|
||||||
|
Min60=`cat $TDTESTQ2OUT | grep min | grep "devgroup<60;" | awk '{print $3}'`
|
||||||
|
totalMin60=`echo "scale=4; $totalMin60 + $Min60" | bc`
|
||||||
|
Min70=`cat $TDTESTQ2OUT | grep min | grep "devgroup<70;" | awk '{print $3}'`
|
||||||
|
totalMin70=`echo "scale=4; $totalMin70 + $Min70" | bc`
|
||||||
|
Min80=`cat $TDTESTQ2OUT | grep min | grep "devgroup<80;" | awk '{print $3}'`
|
||||||
|
totalMin80=`echo "scale=4; $totalMin80 + $Min80" | bc`
|
||||||
|
Min90=`cat $TDTESTQ2OUT | grep min | grep "devgroup<90;" | awk '{print $3}'`
|
||||||
|
totalMin90=`echo "scale=4; $totalMin90 + $Min90" | bc`
|
||||||
|
Min100=`cat $TDTESTQ2OUT | grep min | grep "db.devices;" | awk '{print $3}'`
|
||||||
|
totalMin100=`echo "scale=4; $totalMin100 + $Min100" | bc`
|
||||||
|
|
||||||
|
Spread10=`cat $TDTESTQ2OUT | grep "spread" | grep "devgroup<10;" | awk '{print $3}'`
|
||||||
|
totalSpread10=`echo "scale=4; $totalSpread10 + $Spread10" | bc`
|
||||||
|
Spread20=`cat $TDTESTQ2OUT | grep "spread" | grep "devgroup<20;" | awk '{print $3}'`
|
||||||
|
totalSpread20=`echo "scale=4; $totalSpread20 + $Spread20" | bc`
|
||||||
|
Spread30=`cat $TDTESTQ2OUT | grep spread | grep "devgroup<30;" | awk '{print $3}'`
|
||||||
|
totalSpread30=`echo "scale=4; $totalSpread30 + $Spread30" | bc`
|
||||||
|
Spread40=`cat $TDTESTQ2OUT | grep spread | grep "devgroup<40;" | awk '{print $3}'`
|
||||||
|
totalSpread40=`echo "scale=4; $totalSpread40 + $Spread40" | bc`
|
||||||
|
Spread50=`cat $TDTESTQ2OUT | grep spread | grep "devgroup<50;" | awk '{print $3}'`
|
||||||
|
totalSpread50=`echo "scale=4; $totalSpread50 + $Spread50" | bc`
|
||||||
|
Spread60=`cat $TDTESTQ2OUT | grep spread | grep "devgroup<60;" | awk '{print $3}'`
|
||||||
|
totalSpread60=`echo "scale=4; $totalSpread60 + $Spread60" | bc`
|
||||||
|
Spread70=`cat $TDTESTQ2OUT | grep spread | grep "devgroup<70;" | awk '{print $3}'`
|
||||||
|
totalSpread70=`echo "scale=4; $totalSpread70 + $Spread70" | bc`
|
||||||
|
Spread80=`cat $TDTESTQ2OUT | grep spread | grep "devgroup<80;" | awk '{print $3}'`
|
||||||
|
totalSpread80=`echo "scale=4; $totalSpread80 + $Spread80" | bc`
|
||||||
|
Spread90=`cat $TDTESTQ2OUT | grep spread | grep "devgroup<90;" | awk '{print $3}'`
|
||||||
|
totalSpread90=`echo "scale=4; $totalSpread90 + $Spread90" | bc`
|
||||||
|
Spread100=`cat $TDTESTQ2OUT | grep spread | grep "db.devices;" | awk '{print $3}'`
|
||||||
|
totalSpread100=`echo "scale=4; $totalSpread100 + $Spread100" | bc`
|
||||||
|
|
||||||
|
done
|
||||||
|
avgCount10=`echo "scale=4; x = $totalCount10 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgCount20=`echo "scale=4; x = $totalCount20 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgCount30=`echo "scale=4; x = $totalCount30 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgCount40=`echo "scale=4; x = $totalCount40 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgCount50=`echo "scale=4; x = $totalCount50 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgCount60=`echo "scale=4; x = $totalCount60 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgCount70=`echo "scale=4; x = $totalCount70 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgCount80=`echo "scale=4; x = $totalCount80 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgCount90=`echo "scale=4; x = $totalCount90 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgCount100=`echo "scale=4; x = $totalCount100 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
|
||||||
|
avgAvg10=`echo "scale=4; x = $totalAvg10 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgAvg20=`echo "scale=4; x = $totalAvg20 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgAvg30=`echo "scale=4; x = $totalAvg30 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgAvg40=`echo "scale=4; x = $totalAvg40 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgAvg50=`echo "scale=4; x = $totalAvg50 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgAvg60=`echo "scale=4; x = $totalAvg60 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgAvg70=`echo "scale=4; x = $totalAvg70 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgAvg80=`echo "scale=4; x = $totalAvg80 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgAvg90=`echo "scale=4; x = $totalAvg90 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgAvg100=`echo "scale=4; x = $totalAvg100 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
|
||||||
|
avgSum10=`echo "scale=4; x = $totalSum10 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSum20=`echo "scale=4; x = $totalSum20 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSum30=`echo "scale=4; x = $totalSum30 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSum40=`echo "scale=4; x = $totalSum40 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSum50=`echo "scale=4; x = $totalSum50 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSum60=`echo "scale=4; x = $totalSum60 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSum70=`echo "scale=4; x = $totalSum70 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSum80=`echo "scale=4; x = $totalSum80 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSum90=`echo "scale=4; x = $totalSum90 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSum100=`echo "scale=4; x = $totalSum100 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
|
||||||
|
avgMax10=`echo "scale=4; x = $totalMax10 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMax20=`echo "scale=4; x = $totalMax20 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMax30=`echo "scale=4; x = $totalMax30 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMax40=`echo "scale=4; x = $totalMax40 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMax50=`echo "scale=4; x = $totalMax50 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMax60=`echo "scale=4; x = $totalMax60 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMax70=`echo "scale=4; x = $totalMax70 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMax80=`echo "scale=4; x = $totalMax80 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMax90=`echo "scale=4; x = $totalMax90 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMax100=`echo "scale=4; x = $totalMax100 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
|
||||||
|
avgMin10=`echo "scale=4; x = $totalMin10 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMin20=`echo "scale=4; x = $totalMin20 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMin30=`echo "scale=4; x = $totalMin30 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMin40=`echo "scale=4; x = $totalMin40 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMin50=`echo "scale=4; x = $totalMin50 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMin60=`echo "scale=4; x = $totalMin60 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMin70=`echo "scale=4; x = $totalMin70 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMin80=`echo "scale=4; x = $totalMin80 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMin90=`echo "scale=4; x = $totalMin90 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgMin100=`echo "scale=4; x = $totalMin100 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
|
||||||
|
avgSpread10=`echo "scale=4; x = $totalSpread10 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSpread20=`echo "scale=4; x = $totalSpread20 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSpread30=`echo "scale=4; x = $totalSpread30 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSpread40=`echo "scale=4; x = $totalSpread40 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSpread50=`echo "scale=4; x = $totalSpread50 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSpread60=`echo "scale=4; x = $totalSpread60 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSpread70=`echo "scale=4; x = $totalSpread70 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSpread80=`echo "scale=4; x = $totalSpread80 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSpread90=`echo "scale=4; x = $totalSpread90 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgSpread100=`echo "scale=4; x = $totalSpread100 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
|
||||||
|
echo "Latency, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90%, 100%"
|
||||||
|
echo "Count, $avgCount10, $avgCount20, $avgCount30, $avgCount40, $avgCount50, $avgCount60, $avgCount70, $avgCount80, $avgCount90, $avgCount100"
|
||||||
|
echo "Avg, $avgAvg10, $avgAvg20, $avgAvg30, $avgAvg40, $avgAvg50, $avgAvg60, $avgAvg70, $avgAvg80, $avgAvg90, $avgAvg100"
|
||||||
|
echo "Sum, $avgSum10, $avgSum20, $avgSum30, $avgSum40, $avgSum50, $avgSum60, $avgSum70, $avgSum80, $avgSum90, $avgSum100"
|
||||||
|
echo "Max, $avgMax10, $avgMax20, $avgMax30, $avgMax40, $avgMax50, $avgMax60, $avgMax70, $avgMax80, $avgMax90, $avgMax100"
|
||||||
|
echo "Min, $avgMin10, $avgMin20, $avgMin30, $avgMin40, $avgMin50, $avgMin60, $avgMin70, $avgMin80, $avgMin90, $avgMin100"
|
||||||
|
echo "Spread, $avgSpread10, $avgSpread20, $avgSpread30, $avgSpread40, $avgSpread50, $avgSpread60, $avgSpread70, $avgSpread80, $avgSpread90, $avgSpread100"
|
||||||
|
}
|
||||||
|
|
||||||
|
function restartTaosd {
|
||||||
|
printTo "Stop taosd"
|
||||||
|
systemctl stop taosd
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
while [ -n "$PID" ]
|
||||||
|
do
|
||||||
|
pkill -TERM -x taosd
|
||||||
|
sleep 1
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
done
|
||||||
|
|
||||||
|
printTo "Start taosd"
|
||||||
|
$TAOSD_DIR/taosd > /dev/null 2>&1 &
|
||||||
|
sleep 10
|
||||||
|
}
|
||||||
|
|
||||||
|
################ Main ################
|
||||||
|
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
verbose=false
|
||||||
|
|
||||||
|
for arg in "$@"
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-v)
|
||||||
|
verbose=true
|
||||||
|
;;
|
||||||
|
|
||||||
|
master)
|
||||||
|
master=true
|
||||||
|
develop=false
|
||||||
|
;;
|
||||||
|
|
||||||
|
develop)
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if $master ; then
|
||||||
|
echo "Test master branch.."
|
||||||
|
cp /mnt/root/cfg/master/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine.master
|
||||||
|
else
|
||||||
|
echo "Test develop branch.."
|
||||||
|
cp /mnt/root/cfg/10billion/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine
|
||||||
|
fi
|
||||||
|
|
||||||
|
TAOSD_DIR=$WORK_DIR/debug/build/bin
|
||||||
|
TDTEST_DIR=$WORK_DIR/tests/comparisonTest/tdengine
|
||||||
|
|
||||||
|
runTest
|
||||||
|
|
||||||
|
echo "Test done!"
|
|
@ -0,0 +1,124 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DATA_DIR=/mnt/root/testdata
|
||||||
|
NUM_LOOP=5
|
||||||
|
|
||||||
|
function printTo {
|
||||||
|
if $verbose ; then
|
||||||
|
echo $1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
TDTESTQ3OUT=tdengineTestQ3.out
|
||||||
|
|
||||||
|
function runTest {
|
||||||
|
totalG10=0
|
||||||
|
totalG20=0
|
||||||
|
totalG30=0
|
||||||
|
totalG40=0
|
||||||
|
totalG50=0
|
||||||
|
totalG60=0
|
||||||
|
totalG70=0
|
||||||
|
totalG80=0
|
||||||
|
totalG90=0
|
||||||
|
totalG100=0
|
||||||
|
for i in `seq 1 $NUM_LOOP`; do
|
||||||
|
printTo "loop i:$i, $TDTEST_DIR/tdengineTest \
|
||||||
|
-sql q3.txt"
|
||||||
|
restartTaosd
|
||||||
|
$TDTEST_DIR/tdengineTest \
|
||||||
|
-sql $TDTEST_DIR/q3.txt > $TDTESTQ3OUT
|
||||||
|
G10=`grep "devgroup<10" $TDTESTQ3OUT| awk '{print $3}'`
|
||||||
|
totalG10=`echo "scale=4; $totalG10 + $G10" | bc`
|
||||||
|
G20=`grep "devgroup<20" $TDTESTQ3OUT| awk '{print $3}'`
|
||||||
|
totalG20=`echo "scale=4; $totalG20 + $G20" | bc`
|
||||||
|
G30=`grep "devgroup<30" $TDTESTQ3OUT| awk '{print $3}'`
|
||||||
|
totalG30=`echo "scale=4; $totalG30 + $G30" | bc`
|
||||||
|
G40=`grep "devgroup<40" $TDTESTQ3OUT| awk '{print $3}'`
|
||||||
|
totalG40=`echo "scale=4; $totalG40 + $G40" | bc`
|
||||||
|
G50=`grep "devgroup<50" $TDTESTQ3OUT| awk '{print $3}'`
|
||||||
|
totalG50=`echo "scale=4; $totalG50 + $G50" | bc`
|
||||||
|
G60=`grep "devgroup<60" $TDTESTQ3OUT| awk '{print $3}'`
|
||||||
|
totalG60=`echo "scale=4; $totalG60 + $G60" | bc`
|
||||||
|
G70=`grep "devgroup<70" $TDTESTQ3OUT| awk '{print $3}'`
|
||||||
|
totalG70=`echo "scale=4; $totalG70 + $G70" | bc`
|
||||||
|
G80=`grep "devgroup<80" $TDTESTQ3OUT| awk '{print $3}'`
|
||||||
|
totalG80=`echo "scale=4; $totalG80 + $G80" | bc`
|
||||||
|
G90=`grep "devgroup<90" $TDTESTQ3OUT| awk '{print $3}'`
|
||||||
|
totalG90=`echo "scale=4; $totalG90 + $G90" | bc`
|
||||||
|
G100=`grep "db.devices group by devgroup;" $TDTESTQ3OUT| awk '{print $3}'`
|
||||||
|
totalG100=`echo "scale=4; $totalG100 + $G100" | bc`
|
||||||
|
done
|
||||||
|
avgG10=`echo "scale=4; x = $totalG10 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG20=`echo "scale=4; x = $totalG20 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG30=`echo "scale=4; x = $totalG30 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG40=`echo "scale=4; x = $totalG40 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG50=`echo "scale=4; x = $totalG50 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG60=`echo "scale=4; x = $totalG60 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG70=`echo "scale=4; x = $totalG70 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG80=`echo "scale=4; x = $totalG80 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG90=`echo "scale=4; x = $totalG90 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG100=`echo "scale=4; x = $totalG100 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
echo "Latency, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90%, 100%"
|
||||||
|
echo "TDengine, $avgG10, $avgG20, $avgG30, $avgG40, $avgG50, $avgG60, $avgG70, $avgG80, $avgG90, $avgG100"
|
||||||
|
}
|
||||||
|
|
||||||
|
function restartTaosd {
|
||||||
|
printTo "Stop taosd"
|
||||||
|
systemctl stop taosd
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
while [ -n "$PID" ]
|
||||||
|
do
|
||||||
|
pkill -TERM -x taosd
|
||||||
|
sleep 1
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
done
|
||||||
|
|
||||||
|
printTo "Start taosd"
|
||||||
|
$TAOSD_DIR/taosd > /dev/null 2>&1 &
|
||||||
|
sleep 10
|
||||||
|
}
|
||||||
|
|
||||||
|
################ Main ################
|
||||||
|
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
verbose=false
|
||||||
|
|
||||||
|
for arg in "$@"
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-v)
|
||||||
|
verbose=true
|
||||||
|
;;
|
||||||
|
|
||||||
|
master)
|
||||||
|
master=true
|
||||||
|
develop=false
|
||||||
|
;;
|
||||||
|
|
||||||
|
develop)
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if $master ; then
|
||||||
|
echo "Test master branch.."
|
||||||
|
cp /mnt/root/cfg/master/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine.master
|
||||||
|
else
|
||||||
|
echo "Test develop branch.."
|
||||||
|
cp /mnt/root/cfg/10billion/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine
|
||||||
|
fi
|
||||||
|
|
||||||
|
TAOSD_DIR=$WORK_DIR/debug/build/bin
|
||||||
|
TDTEST_DIR=$WORK_DIR/tests/comparisonTest/tdengine
|
||||||
|
|
||||||
|
runTest
|
||||||
|
|
||||||
|
echo "Test done!"
|
|
@ -0,0 +1,124 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DATA_DIR=/mnt/root/testdata
|
||||||
|
NUM_LOOP=5
|
||||||
|
|
||||||
|
function printTo {
|
||||||
|
if $verbose ; then
|
||||||
|
echo $1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
TDTESTQ4OUT=tdengineTestQ4.out
|
||||||
|
|
||||||
|
function runTest {
|
||||||
|
totalG10=0
|
||||||
|
totalG20=0
|
||||||
|
totalG30=0
|
||||||
|
totalG40=0
|
||||||
|
totalG50=0
|
||||||
|
totalG60=0
|
||||||
|
totalG70=0
|
||||||
|
totalG80=0
|
||||||
|
totalG90=0
|
||||||
|
totalG100=0
|
||||||
|
for i in `seq 1 $NUM_LOOP`; do
|
||||||
|
printTo "loop i:$i, $TDTEST_DIR/tdengineTest \
|
||||||
|
-sql q4.txt"
|
||||||
|
restartTaosd
|
||||||
|
$TDTEST_DIR/tdengineTest \
|
||||||
|
-sql $TDTEST_DIR/q4.txt > $TDTESTQ4OUT
|
||||||
|
G10=`grep "devgroup<10" $TDTESTQ4OUT| awk '{print $3}'`
|
||||||
|
totalG10=`echo "scale=4; $totalG10 + $G10" | bc`
|
||||||
|
G20=`grep "devgroup<20" $TDTESTQ4OUT| awk '{print $3}'`
|
||||||
|
totalG20=`echo "scale=4; $totalG20 + $G20" | bc`
|
||||||
|
G30=`grep "devgroup<30" $TDTESTQ4OUT| awk '{print $3}'`
|
||||||
|
totalG30=`echo "scale=4; $totalG30 + $G30" | bc`
|
||||||
|
G40=`grep "devgroup<40" $TDTESTQ4OUT| awk '{print $3}'`
|
||||||
|
totalG40=`echo "scale=4; $totalG40 + $G40" | bc`
|
||||||
|
G50=`grep "devgroup<50" $TDTESTQ4OUT| awk '{print $3}'`
|
||||||
|
totalG50=`echo "scale=4; $totalG50 + $G50" | bc`
|
||||||
|
G60=`grep "devgroup<60" $TDTESTQ4OUT| awk '{print $3}'`
|
||||||
|
totalG60=`echo "scale=4; $totalG60 + $G60" | bc`
|
||||||
|
G70=`grep "devgroup<70" $TDTESTQ4OUT| awk '{print $3}'`
|
||||||
|
totalG70=`echo "scale=4; $totalG70 + $G70" | bc`
|
||||||
|
G80=`grep "devgroup<80" $TDTESTQ4OUT| awk '{print $3}'`
|
||||||
|
totalG80=`echo "scale=4; $totalG80 + $G80" | bc`
|
||||||
|
G90=`grep "devgroup<90" $TDTESTQ4OUT| awk '{print $3}'`
|
||||||
|
totalG90=`echo "scale=4; $totalG90 + $G90" | bc`
|
||||||
|
G100=`grep "db.devices interval" $TDTESTQ4OUT| awk '{print $3}'`
|
||||||
|
totalG100=`echo "scale=4; $totalG100 + $G100" | bc`
|
||||||
|
done
|
||||||
|
avgG10=`echo "scale=4; x = $totalG10 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG20=`echo "scale=4; x = $totalG20 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG30=`echo "scale=4; x = $totalG30 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG40=`echo "scale=4; x = $totalG40 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG50=`echo "scale=4; x = $totalG50 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG60=`echo "scale=4; x = $totalG60 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG70=`echo "scale=4; x = $totalG70 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG80=`echo "scale=4; x = $totalG80 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG90=`echo "scale=4; x = $totalG90 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
avgG100=`echo "scale=4; x = $totalG100 / $NUM_LOOP; if(x<1) print 0; x" | bc`
|
||||||
|
echo "Latency, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90%, 100%"
|
||||||
|
echo "TDengine, $avgG10, $avgG20, $avgG30, $avgG40, $avgG50, $avgG60, $avgG70, $avgG80, $avgG90, $avgG100"
|
||||||
|
}
|
||||||
|
|
||||||
|
function restartTaosd {
|
||||||
|
printTo "Stop taosd"
|
||||||
|
systemctl stop taosd
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
while [ -n "$PID" ]
|
||||||
|
do
|
||||||
|
pkill -TERM -x taosd
|
||||||
|
sleep 1
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
done
|
||||||
|
|
||||||
|
printTo "Start taosd"
|
||||||
|
$TAOSD_DIR/taosd > /dev/null 2>&1 &
|
||||||
|
sleep 10
|
||||||
|
}
|
||||||
|
|
||||||
|
################ Main ################
|
||||||
|
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
verbose=false
|
||||||
|
|
||||||
|
for arg in "$@"
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-v)
|
||||||
|
verbose=true
|
||||||
|
;;
|
||||||
|
|
||||||
|
master)
|
||||||
|
master=true
|
||||||
|
develop=false
|
||||||
|
;;
|
||||||
|
|
||||||
|
develop)
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if $master ; then
|
||||||
|
echo "Test master branch.."
|
||||||
|
cp /mnt/root/cfg/master/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine.master
|
||||||
|
else
|
||||||
|
echo "Test develop branch.."
|
||||||
|
cp /mnt/root/cfg/10billion/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine
|
||||||
|
fi
|
||||||
|
|
||||||
|
TAOSD_DIR=$WORK_DIR/debug/build/bin
|
||||||
|
TDTEST_DIR=$WORK_DIR/tests/comparisonTest/tdengine
|
||||||
|
|
||||||
|
runTest
|
||||||
|
|
||||||
|
echo "Test done!"
|
|
@ -0,0 +1,107 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DATA_DIR=/mnt/root/testdata
|
||||||
|
NUM_LOOP=5
|
||||||
|
|
||||||
|
function printTo {
|
||||||
|
if $verbose ; then
|
||||||
|
echo $1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
TDTESTQ5OUT=tdengineTestQ5.out
|
||||||
|
|
||||||
|
function runTest {
|
||||||
|
totalThroughput=0
|
||||||
|
for i in `seq 1 $NUM_LOOP`; do
|
||||||
|
for c in `seq 1 $clients`; do
|
||||||
|
records[$c]=0
|
||||||
|
spentTime[$c]=0
|
||||||
|
throughput[$c]=0
|
||||||
|
done
|
||||||
|
printTo "loop i:$i, $TDTEST_DIR/tdengineTest \
|
||||||
|
-clients $clients -sql q5.txt"
|
||||||
|
restartTaosd
|
||||||
|
beginMS=`date +%s%3N`
|
||||||
|
$TDTEST_DIR/tdengineTest \
|
||||||
|
-clients $clients -sql $TDTEST_DIR/q5.txt > $TDTESTQ5OUT
|
||||||
|
endMS=`date +%s%3N`
|
||||||
|
totalRecords=0
|
||||||
|
for c in `seq 1 $clients`; do
|
||||||
|
records[$c]=`grep Thread:$c $TDTESTQ5OUT | awk '{print $7}'`
|
||||||
|
totalRecords=`echo "$totalRecords + ${records[$c]}"|bc`
|
||||||
|
done
|
||||||
|
spending=`echo "scale=4; x = ($endMS - $beginMS)/1000; if (x<1) print 0; x"|bc`
|
||||||
|
throughput=`echo "scale=4; x= $totalRecords / $spending; if (x<1) print 0; x" | bc`
|
||||||
|
printTo "spending: $spending sec, throughput: $throughput"
|
||||||
|
totalThroughput=`echo "scale=4; x = $totalThroughput + $throughput; if(x<1) print 0; x"|bc`
|
||||||
|
done
|
||||||
|
avgThrougput=`echo "scale=4; x = $totalThroughput / $NUM_LOOP; if (x<1) print 0; x"|bc`
|
||||||
|
echo "avg Throughput: $avgThrougput"
|
||||||
|
}
|
||||||
|
|
||||||
|
function restartTaosd {
|
||||||
|
printTo "Stop taosd"
|
||||||
|
systemctl stop taosd
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
while [ -n "$PID" ]
|
||||||
|
do
|
||||||
|
pkill -TERM -x taosd
|
||||||
|
sleep 1
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
done
|
||||||
|
|
||||||
|
printTo "Start taosd"
|
||||||
|
$TAOSD_DIR/taosd > /dev/null 2>&1 &
|
||||||
|
sleep 10
|
||||||
|
}
|
||||||
|
|
||||||
|
################ Main ################
|
||||||
|
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
verbose=false
|
||||||
|
|
||||||
|
clients=1
|
||||||
|
|
||||||
|
while : ; do
|
||||||
|
case $1 in
|
||||||
|
-v)
|
||||||
|
verbose=true
|
||||||
|
shift ;;
|
||||||
|
|
||||||
|
master)
|
||||||
|
master=true
|
||||||
|
develop=false
|
||||||
|
shift ;;
|
||||||
|
|
||||||
|
develop)
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
shift ;;
|
||||||
|
|
||||||
|
-c)
|
||||||
|
clients=$2
|
||||||
|
shift 2;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
break ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if $master ; then
|
||||||
|
printTo "Test master branch.."
|
||||||
|
cp /mnt/root/cfg/master/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine.master
|
||||||
|
else
|
||||||
|
printTo "Test develop branch.."
|
||||||
|
cp /mnt/root/cfg/10billion/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine
|
||||||
|
fi
|
||||||
|
|
||||||
|
TAOSD_DIR=$WORK_DIR/debug/build/bin
|
||||||
|
TDTEST_DIR=$WORK_DIR/tests/comparisonTest/tdengine
|
||||||
|
|
||||||
|
runTest
|
||||||
|
|
||||||
|
printTo "Test done!"
|
|
@ -0,0 +1,116 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DATA_DIR=/mnt/root/testdata
|
||||||
|
NUM_LOOP=5
|
||||||
|
NUM_OF_FILES=100
|
||||||
|
|
||||||
|
rowsPerRequest=(1 100 500 1000 2000)
|
||||||
|
|
||||||
|
function printTo {
|
||||||
|
if $verbose ; then
|
||||||
|
echo $1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function runTest {
|
||||||
|
printf "R/R, "
|
||||||
|
for c in `seq 1 $clients`; do
|
||||||
|
if [ "$c" == "1" ]; then
|
||||||
|
printf "$c client, "
|
||||||
|
else
|
||||||
|
printf "$c clients, "
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "\n"
|
||||||
|
|
||||||
|
for r in ${rowsPerRequest[@]}; do
|
||||||
|
printf "$r, "
|
||||||
|
for c in `seq 1 $clients`; do
|
||||||
|
totalRPR=0
|
||||||
|
for i in `seq 1 $NUM_LOOP`; do
|
||||||
|
restartTaosd
|
||||||
|
$TAOSD_DIR/taos -s "drop database db" > /dev/null 2>&1
|
||||||
|
printTo "loop i:$i, $TDTEST_DIR/tdengineTest \
|
||||||
|
-dataDir $DATA_DIR \
|
||||||
|
-numOfFiles $NUM_OF_FILES \
|
||||||
|
-w -clients $c \
|
||||||
|
-rowsPerRequest $r"
|
||||||
|
RPR=`$TDTEST_DIR/tdengineTest \
|
||||||
|
-dataDir $DATA_DIR \
|
||||||
|
-numOfFiles 1 \
|
||||||
|
-w -clients $c \
|
||||||
|
-rowsPerRequest $r \
|
||||||
|
| grep speed | awk '{print $(NF-1)}'`
|
||||||
|
totalRPR=`echo "scale=4; $totalRPR + $RPR" | bc`
|
||||||
|
printTo "rows:$r, clients:$c, i:$i RPR:$RPR"
|
||||||
|
done
|
||||||
|
avgRPR=`echo "scale=4; $totalRPR / $NUM_LOOP" | bc`
|
||||||
|
printf "$avgRPR, "
|
||||||
|
done
|
||||||
|
printf "\n"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function restartTaosd {
|
||||||
|
printTo "Stop taosd"
|
||||||
|
systemctl stop taosd
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
while [ -n "$PID" ]
|
||||||
|
do
|
||||||
|
pkill -TERM -x taosd
|
||||||
|
sleep 1
|
||||||
|
PID=`ps -ef|grep -w taosd | grep -v grep | awk '{print $2}'`
|
||||||
|
done
|
||||||
|
|
||||||
|
printTo "Start taosd"
|
||||||
|
$TAOSD_DIR/taosd > /dev/null 2>&1 &
|
||||||
|
sleep 10
|
||||||
|
}
|
||||||
|
|
||||||
|
################ Main ################
|
||||||
|
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
verbose=false
|
||||||
|
clients=1
|
||||||
|
|
||||||
|
while : ; do
|
||||||
|
case $1 in
|
||||||
|
-v)
|
||||||
|
verbose=true
|
||||||
|
shift ;;
|
||||||
|
|
||||||
|
master)
|
||||||
|
master=true
|
||||||
|
develop=false
|
||||||
|
shift ;;
|
||||||
|
|
||||||
|
develop)
|
||||||
|
master=false
|
||||||
|
develop=true
|
||||||
|
shift ;;
|
||||||
|
|
||||||
|
-c)
|
||||||
|
clients=$2
|
||||||
|
shift 2;;
|
||||||
|
*)
|
||||||
|
break ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if $master ; then
|
||||||
|
echo "Test master branch.."
|
||||||
|
cp /mnt/root/cfg/master/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine.master
|
||||||
|
else
|
||||||
|
echo "Test develop branch.."
|
||||||
|
cp /mnt/root/cfg/10billion/taos.cfg /etc/taos/taos.cfg
|
||||||
|
WORK_DIR=/mnt/root/TDengine
|
||||||
|
fi
|
||||||
|
|
||||||
|
TAOSD_DIR=$WORK_DIR/debug/build/bin
|
||||||
|
TDTEST_DIR=$WORK_DIR/tests/comparisonTest/tdengine
|
||||||
|
|
||||||
|
runTest
|
||||||
|
|
||||||
|
echo "Test done!"
|
|
@ -178,7 +178,6 @@ class TDDnode:
|
||||||
self.cfg("walLevel", "2")
|
self.cfg("walLevel", "2")
|
||||||
self.cfg("fsync", "1000")
|
self.cfg("fsync", "1000")
|
||||||
self.cfg("statusInterval", "1")
|
self.cfg("statusInterval", "1")
|
||||||
self.cfg("numOfTotalVnodes", "64")
|
|
||||||
self.cfg("numOfMnodes", "3")
|
self.cfg("numOfMnodes", "3")
|
||||||
self.cfg("numOfThreadsPerCore", "2.0")
|
self.cfg("numOfThreadsPerCore", "2.0")
|
||||||
self.cfg("monitor", "0")
|
self.cfg("monitor", "0")
|
||||||
|
|
|
@ -178,7 +178,6 @@ class TDDnode:
|
||||||
self.cfg("walLevel", "2")
|
self.cfg("walLevel", "2")
|
||||||
self.cfg("fsync", "1000")
|
self.cfg("fsync", "1000")
|
||||||
self.cfg("statusInterval", "1")
|
self.cfg("statusInterval", "1")
|
||||||
self.cfg("numOfTotalVnodes", "64")
|
|
||||||
self.cfg("numOfMnodes", "3")
|
self.cfg("numOfMnodes", "3")
|
||||||
self.cfg("numOfThreadsPerCore", "2.0")
|
self.cfg("numOfThreadsPerCore", "2.0")
|
||||||
self.cfg("monitor", "0")
|
self.cfg("monitor", "0")
|
||||||
|
|
|
@ -180,7 +180,6 @@ class TDDnode:
|
||||||
self.cfg("walLevel", "2")
|
self.cfg("walLevel", "2")
|
||||||
self.cfg("fsync", "1000")
|
self.cfg("fsync", "1000")
|
||||||
self.cfg("statusInterval", "1")
|
self.cfg("statusInterval", "1")
|
||||||
self.cfg("numOfTotalVnodes", "64")
|
|
||||||
self.cfg("numOfMnodes", "3")
|
self.cfg("numOfMnodes", "3")
|
||||||
self.cfg("numOfThreadsPerCore", "2.0")
|
self.cfg("numOfThreadsPerCore", "2.0")
|
||||||
self.cfg("monitor", "0")
|
self.cfg("monitor", "0")
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c wallevel -v 0
|
system sh/cfg.sh -n dnode1 -c wallevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 1000
|
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 1000
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
|
@ -99,9 +99,7 @@ $db = $dbPrefix . $i
|
||||||
$tb = $tbPrefix . $i
|
$tb = $tbPrefix . $i
|
||||||
sql create database $db
|
sql create database $db
|
||||||
sql use $db
|
sql use $db
|
||||||
sql create table $tb (ts timestamp, speed int) -x step6
|
sql create table $tb (ts timestamp, speed int)
|
||||||
return -1
|
|
||||||
step6:
|
|
||||||
|
|
||||||
print =============== step7
|
print =============== step7
|
||||||
$i = 0
|
$i = 0
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c wallevel -v 2
|
system sh/cfg.sh -n dnode1 -c wallevel -v 2
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 10
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 10
|
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 10
|
||||||
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 1000
|
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 1000
|
||||||
|
|
||||||
|
|
|
@ -20,11 +20,6 @@ system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
|
|
@ -20,11 +20,6 @@ system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
sleep 2000
|
sleep 2000
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
|
@ -2,10 +2,6 @@ system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 10
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 10
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 10
|
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
@ -44,9 +40,6 @@ system sh/stop_dnodes.sh
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 10
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 10
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 10
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sql connect
|
sql connect
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 10
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 10
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 10
|
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
|
@ -20,11 +20,6 @@ system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
|
|
@ -2,7 +2,6 @@ system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c wallevel -v 0
|
system sh/cfg.sh -n dnode1 -c wallevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
|
@ -3,7 +3,6 @@ system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 2000
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 2000
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c wallevel -v 0
|
system sh/cfg.sh -n dnode1 -c wallevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
|
@ -8,7 +8,6 @@ system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v $maxTables
|
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v $maxTables
|
||||||
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v $totalVnodes
|
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v $totalVnodes
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v $totalVnodes
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxVnodeConnections -v 100000
|
system sh/cfg.sh -n dnode1 -c maxVnodeConnections -v 100000
|
||||||
system sh/cfg.sh -n dnode1 -c maxMeterConnections -v 100000
|
system sh/cfg.sh -n dnode1 -c maxMeterConnections -v 100000
|
||||||
system sh/cfg.sh -n dnode1 -c maxShellConns -v 100000
|
system sh/cfg.sh -n dnode1 -c maxShellConns -v 100000
|
||||||
|
|
|
@ -20,7 +20,6 @@ system sh/cfg.sh -n dnode1 -c maxVnodeConnections -v 30000
|
||||||
system sh/cfg.sh -n dnode1 -c maxMgmtConnections -v 30000
|
system sh/cfg.sh -n dnode1 -c maxMgmtConnections -v 30000
|
||||||
system sh/cfg.sh -n dnode1 -c maxMeterConnections -v 30000
|
system sh/cfg.sh -n dnode1 -c maxMeterConnections -v 30000
|
||||||
system sh/cfg.sh -n dnode1 -c maxShellConns -v 30000
|
system sh/cfg.sh -n dnode1 -c maxShellConns -v 30000
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 60
|
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sql connect
|
sql connect
|
||||||
|
|
|
@ -126,3 +126,14 @@ endi
|
||||||
if $data01 != 0 then
|
if $data01 != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
#add check for out of range first/last query
|
||||||
|
sql select first(ts),last(ts) from first_tb4 where ts>'2018-9-18 1:40:01';
|
||||||
|
if $row != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select first(ts),last(ts) from first_tb4 where ts<'2018-9-17 8:50:0';
|
||||||
|
if $row != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
|
@ -105,6 +105,21 @@ if $data03 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
sql select tag1 from st2 limit 20 offset 1
|
||||||
|
if $rows != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select tag1 from st2 limit 10 offset 2
|
||||||
|
if $rows != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select tag1 from st2 limit 0 offset 0
|
||||||
|
if $rows != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
sql create table st3 using mt2 tags (NULL, 'ABC', 103, 'FALSE')
|
sql create table st3 using mt2 tags (NULL, 'ABC', 103, 'FALSE')
|
||||||
sql select tag1, tag2, tag3, tag5 from st3
|
sql select tag1, tag2, tag3, tag5 from st3
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
|
|
|
@ -3,7 +3,6 @@ system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 5
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 5
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 8
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sleep 3000
|
sleep 3000
|
||||||
sql connect
|
sql connect
|
||||||
|
|
|
@ -3,7 +3,6 @@ system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 2
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 2
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 8
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sleep 3000
|
sleep 3000
|
||||||
sql connect
|
sql connect
|
||||||
|
|
|
@ -3,7 +3,6 @@ system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 8
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sleep 3000
|
sleep 3000
|
||||||
sql connect
|
sql connect
|
||||||
|
|
|
@ -3,7 +3,6 @@ system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 2
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 2
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 10
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sleep 3000
|
sleep 3000
|
||||||
sql connect
|
sql connect
|
||||||
|
|
|
@ -3,7 +3,6 @@ system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 2
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 2
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 10
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sleep 3000
|
sleep 3000
|
||||||
sql connect
|
sql connect
|
||||||
|
|
|
@ -2,7 +2,6 @@ system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 8
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sleep 3000
|
sleep 3000
|
||||||
sql connect
|
sql connect
|
||||||
|
|
|
@ -3,7 +3,6 @@ system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,6 @@ system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode2 -c walLevel -v 0
|
system sh/cfg.sh -n dnode2 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode3 -c walLevel -v 0
|
system sh/cfg.sh -n dnode3 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode4 -c walLevel -v 0
|
system sh/cfg.sh -n dnode4 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
system sh/cfg.sh -n dnode2 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode2 -c maxtablesPerVnode -v 4
|
||||||
system sh/cfg.sh -n dnode3 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode3 -c maxtablesPerVnode -v 4
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
|
|
@ -3,7 +3,6 @@ system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
|
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 8
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 1000
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 1000
|
||||||
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 3
|
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 3
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
|
@ -3,7 +3,6 @@ system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 8
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 1000
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 1000
|
||||||
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 3
|
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 3
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
|
@ -19,11 +19,6 @@ system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,6 @@ system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,6 @@ system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 8
|
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 129
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 129
|
||||||
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 8
|
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 8
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 4
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
@ -78,10 +78,6 @@ if $rows != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql create table table1 (ts timestamp, speed int) -x error2
|
|
||||||
return -1
|
|
||||||
error2:
|
|
||||||
|
|
||||||
$i = 0
|
$i = 0
|
||||||
$db = $dbPrefix . $i
|
$db = $dbPrefix . $i
|
||||||
sql drop database $db
|
sql drop database $db
|
||||||
|
@ -134,9 +130,6 @@ $i = 4
|
||||||
$db = $dbPrefix . $i
|
$db = $dbPrefix . $i
|
||||||
sql create database $db
|
sql create database $db
|
||||||
sql use $db
|
sql use $db
|
||||||
sql create table table5 (ts timestamp, speed int) -x error3
|
|
||||||
return -1
|
|
||||||
error3:
|
|
||||||
|
|
||||||
sql show databases
|
sql show databases
|
||||||
if $rows != 5 then
|
if $rows != 5 then
|
||||||
|
|
|
@ -122,7 +122,6 @@ echo "numOfLogLines 100000000" >> $TAOS_CFG
|
||||||
echo "mnodeEqualVnodeNum 0" >> $TAOS_CFG
|
echo "mnodeEqualVnodeNum 0" >> $TAOS_CFG
|
||||||
echo "clog 0" >> $TAOS_CFG
|
echo "clog 0" >> $TAOS_CFG
|
||||||
echo "statusInterval 1" >> $TAOS_CFG
|
echo "statusInterval 1" >> $TAOS_CFG
|
||||||
echo "numOfTotalVnodes 4" >> $TAOS_CFG
|
|
||||||
echo "asyncLog 0" >> $TAOS_CFG
|
echo "asyncLog 0" >> $TAOS_CFG
|
||||||
echo "numOfMnodes 1" >> $TAOS_CFG
|
echo "numOfMnodes 1" >> $TAOS_CFG
|
||||||
echo "locale en_US.UTF-8" >> $TAOS_CFG
|
echo "locale en_US.UTF-8" >> $TAOS_CFG
|
||||||
|
|
|
@ -139,7 +139,6 @@ echo "clog 2" >> $TAOS_CFG
|
||||||
#echo "cache 1" >> $TAOS_CFG
|
#echo "cache 1" >> $TAOS_CFG
|
||||||
#echo "block 2" >> $TAOS_CFG
|
#echo "block 2" >> $TAOS_CFG
|
||||||
echo "statusInterval 1" >> $TAOS_CFG
|
echo "statusInterval 1" >> $TAOS_CFG
|
||||||
echo "numOfTotalVnodes 4" >> $TAOS_CFG
|
|
||||||
echo "maxVgroupsPerDb 4" >> $TAOS_CFG
|
echo "maxVgroupsPerDb 4" >> $TAOS_CFG
|
||||||
echo "minTablesPerVnode 4" >> $TAOS_CFG
|
echo "minTablesPerVnode 4" >> $TAOS_CFG
|
||||||
echo "maxTablesPerVnode 1000" >> $TAOS_CFG
|
echo "maxTablesPerVnode 1000" >> $TAOS_CFG
|
||||||
|
|
|
@ -20,11 +20,6 @@ system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
|
||||||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c http -v 1
|
system sh/cfg.sh -n dnode1 -c http -v 1
|
||||||
system sh/cfg.sh -n dnode2 -c http -v 1
|
system sh/cfg.sh -n dnode2 -c http -v 1
|
||||||
system sh/cfg.sh -n dnode3 -c http -v 1
|
system sh/cfg.sh -n dnode3 -c http -v 1
|
||||||
|
|
|
@ -16,10 +16,6 @@ system sh/cfg.sh -n dnode1 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 20
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 20
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 20
|
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c http -v 1
|
system sh/cfg.sh -n dnode1 -c http -v 1
|
||||||
system sh/cfg.sh -n dnode2 -c http -v 1
|
system sh/cfg.sh -n dnode2 -c http -v 1
|
||||||
system sh/cfg.sh -n dnode3 -c http -v 1
|
system sh/cfg.sh -n dnode3 -c http -v 1
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c wallevel -v 0
|
system sh/cfg.sh -n dnode1 -c wallevel -v 0
|
||||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 8
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue