[TD-2433]<fix>: fix the bug that server_status() not working.
This commit is contained in:
parent
af02383613
commit
112ebfa12b
|
@ -285,8 +285,8 @@ typedef struct {
|
||||||
char ** buffer; // Buffer used to put multibytes encoded using unicode (wchar_t)
|
char ** buffer; // Buffer used to put multibytes encoded using unicode (wchar_t)
|
||||||
SColumnIndex* pColumnIndex;
|
SColumnIndex* pColumnIndex;
|
||||||
|
|
||||||
SArithmeticSupport* pArithSup; // support the arithmetic expression calculation on agg functions
|
SArithmeticSupport *pArithSup; // support the arithmetic expression calculation on agg functions
|
||||||
struct SLocalReducer* pLocalReducer;
|
struct SLocalReducer *pLocalReducer;
|
||||||
} SSqlRes;
|
} SSqlRes;
|
||||||
|
|
||||||
typedef struct STscObj {
|
typedef struct STscObj {
|
||||||
|
|
|
@ -46,7 +46,8 @@ typedef struct SCreateBuilder {
|
||||||
SSqlObj *pInterSql;
|
SSqlObj *pInterSql;
|
||||||
int32_t (*fp)(void *para, char* result);
|
int32_t (*fp)(void *para, char* result);
|
||||||
Stage callStage;
|
Stage callStage;
|
||||||
} SCreateBuilder;
|
} SCreateBuilder;
|
||||||
|
|
||||||
static void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnName, int16_t type, size_t valueLength);
|
static void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnName, int16_t type, size_t valueLength);
|
||||||
|
|
||||||
static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
|
static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
|
||||||
|
@ -207,10 +208,7 @@ static int32_t tscProcessDescribeTable(SSqlObj *pSql) {
|
||||||
const int32_t TYPE_COLUMN_LENGTH = 16;
|
const int32_t TYPE_COLUMN_LENGTH = 16;
|
||||||
const int32_t NOTE_COLUMN_MIN_LENGTH = 8;
|
const int32_t NOTE_COLUMN_MIN_LENGTH = 8;
|
||||||
|
|
||||||
int32_t noteFieldLen = NOTE_COLUMN_MIN_LENGTH;//tscMaxLengthOfTagsFields(pSql);
|
int32_t noteFieldLen = NOTE_COLUMN_MIN_LENGTH;
|
||||||
// if (noteFieldLen == 0) {
|
|
||||||
// noteFieldLen = NOTE_COLUMN_MIN_LENGTH;
|
|
||||||
// }
|
|
||||||
|
|
||||||
int32_t rowLen = tscBuildTableSchemaResultFields(pSql, NUM_OF_DESC_TABLE_COLUMNS, TYPE_COLUMN_LENGTH, noteFieldLen);
|
int32_t rowLen = tscBuildTableSchemaResultFields(pSql, NUM_OF_DESC_TABLE_COLUMNS, TYPE_COLUMN_LENGTH, noteFieldLen);
|
||||||
tscFieldInfoUpdateOffset(pQueryInfo);
|
tscFieldInfoUpdateOffset(pQueryInfo);
|
||||||
|
@ -822,26 +820,36 @@ static int32_t tscProcessClientVer(SSqlObj *pSql) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO add test cases.
|
||||||
|
static int32_t checkForOnlineNode(SSqlObj* pSql) {
|
||||||
|
int32_t* data = pSql->res.length;
|
||||||
|
|
||||||
|
int32_t total = data[0];
|
||||||
|
int32_t online = data[1];
|
||||||
|
return (online < total)? TSDB_CODE_RPC_NETWORK_UNAVAIL:TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t tscProcessServStatus(SSqlObj *pSql) {
|
static int32_t tscProcessServStatus(SSqlObj *pSql) {
|
||||||
STscObj* pObj = pSql->pTscObj;
|
STscObj* pObj = pSql->pTscObj;
|
||||||
|
|
||||||
SSqlObj* pHb = (SSqlObj*)taosAcquireRef(tscObjRef, pObj->hbrid);
|
SSqlObj* pHb = (SSqlObj*)taosAcquireRef(tscObjRef, pObj->hbrid);
|
||||||
if (pHb != NULL) {
|
if (pHb != NULL) {
|
||||||
int32_t code = pHb->res.code;
|
pSql->res.code = pHb->res.code;
|
||||||
taosReleaseRef(tscObjRef, pObj->hbrid);
|
taosReleaseRef(tscObjRef, pObj->hbrid);
|
||||||
if (code == TSDB_CODE_RPC_NETWORK_UNAVAIL) {
|
}
|
||||||
pSql->res.code = TSDB_CODE_RPC_NETWORK_UNAVAIL;
|
|
||||||
return pSql->res.code;
|
if (pSql->res.code == TSDB_CODE_RPC_NETWORK_UNAVAIL) {
|
||||||
}
|
return pSql->res.code;
|
||||||
} else {
|
}
|
||||||
if (pSql->res.code == TSDB_CODE_RPC_NETWORK_UNAVAIL) {
|
|
||||||
return pSql->res.code;
|
pSql->res.code = checkForOnlineNode(pHb);
|
||||||
}
|
if (pSql->res.code == TSDB_CODE_RPC_NETWORK_UNAVAIL) {
|
||||||
|
return pSql->res.code;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||||
|
|
||||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||||
|
|
||||||
int32_t val = 1;
|
int32_t val = 1;
|
||||||
tscSetLocalQueryResult(pSql, (char*) &val, pExpr->aliasName, TSDB_DATA_TYPE_INT, sizeof(int32_t));
|
tscSetLocalQueryResult(pSql, (char*) &val, pExpr->aliasName, TSDB_DATA_TYPE_INT, sizeof(int32_t));
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
|
|
@ -147,15 +147,15 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
|
||||||
SSqlObj *pSql = tres;
|
SSqlObj *pSql = tres;
|
||||||
SSqlRes *pRes = &pSql->res;
|
SSqlRes *pRes = &pSql->res;
|
||||||
|
|
||||||
if (code == 0) {
|
if (code == TSDB_CODE_SUCCESS) {
|
||||||
SHeartBeatRsp *pRsp = (SHeartBeatRsp *)pRes->pRsp;
|
SHeartBeatRsp *pRsp = (SHeartBeatRsp *)pRes->pRsp;
|
||||||
SRpcEpSet * epSet = &pRsp->epSet;
|
SRpcEpSet *epSet = &pRsp->epSet;
|
||||||
if (epSet->numOfEps > 0) {
|
if (epSet->numOfEps > 0) {
|
||||||
tscEpSetHtons(epSet);
|
tscEpSetHtons(epSet);
|
||||||
if (!tscEpSetIsEqual(&pSql->pTscObj->tscCorMgmtEpSet->epSet, epSet)) {
|
if (!tscEpSetIsEqual(&pSql->pTscObj->tscCorMgmtEpSet->epSet, epSet)) {
|
||||||
tscTrace("%p updating epset: numOfEps: %d, inUse: %d", pSql, epSet->numOfEps, epSet->inUse);
|
tscTrace("%p updating epset: numOfEps: %d, inUse: %d", pSql, epSet->numOfEps, epSet->inUse);
|
||||||
for (int8_t i = 0; i < epSet->numOfEps; i++) {
|
for (int8_t i = 0; i < epSet->numOfEps; i++) {
|
||||||
tscTrace("endpoint %d: fqdn = %s, port=%d", i, epSet->fqdn[i], epSet->port[i]);
|
tscTrace("endpoint %d: fqdn=%s, port=%d", i, epSet->fqdn[i], epSet->port[i]);
|
||||||
}
|
}
|
||||||
tscUpdateMgmtEpSet(pSql, epSet);
|
tscUpdateMgmtEpSet(pSql, epSet);
|
||||||
}
|
}
|
||||||
|
@ -167,11 +167,40 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
|
||||||
tscKillConnection(pObj);
|
tscKillConnection(pObj);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
if (pRsp->queryId) tscKillQuery(pObj, htonl(pRsp->queryId));
|
if (pRsp->queryId) {
|
||||||
if (pRsp->streamId) tscKillStream(pObj, htonl(pRsp->streamId));
|
tscKillQuery(pObj, htonl(pRsp->queryId));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pRsp->streamId) {
|
||||||
|
tscKillStream(pObj, htonl(pRsp->streamId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t total = htonl(pRsp->totalDnodes);
|
||||||
|
int32_t online = htonl(pRsp->onlineDnodes);
|
||||||
|
assert(online <= total);
|
||||||
|
|
||||||
|
if (online < total) {
|
||||||
|
tscError("HB:%p, total dnode:%d, online dnode:%d", pSql, total, online);
|
||||||
|
pSql->res.code = TSDB_CODE_RPC_NETWORK_UNAVAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pRes->buffer == NULL) {
|
||||||
|
pRes->length = calloc(2, sizeof(int32_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
pRes->length[0] = total;
|
||||||
|
pRes->length[1] = online;
|
||||||
} else {
|
} else {
|
||||||
tscDebug("%" PRId64 " heartbeat failed, code:%s", pObj->hbrid, tstrerror(code));
|
tscDebug("%" PRId64 " heartbeat failed, code:%s", pObj->hbrid, tstrerror(code));
|
||||||
|
if (pRes->buffer == NULL) {
|
||||||
|
pRes->length = calloc(2, sizeof(int32_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
pRes->length[1] = 0;
|
||||||
|
if (pRes->length[0] == 0) {
|
||||||
|
pRes->length[0] = 1; // make sure that the value of the total node is greater than the online node
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pObj->hbrid != 0) {
|
if (pObj->hbrid != 0) {
|
||||||
|
|
Loading…
Reference in New Issue