commit
6895dae5fb
|
@ -5913,25 +5913,33 @@ int32_t doLocalQueryProcess(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQ
|
||||||
if (pExprList->nExpr != 1) {
|
if (pExprList->nExpr != 1) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
||||||
}
|
}
|
||||||
|
bool server_status = false;
|
||||||
tSQLExpr* pExpr = pExprList->a[0].pNode;
|
tSQLExpr* pExpr = pExprList->a[0].pNode;
|
||||||
if (pExpr->operand.z == NULL) {
|
if (pExpr->operand.z == NULL) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
//handle 'select 1'
|
||||||
}
|
if (pExpr->token.n == 1 && 0 == strncasecmp(pExpr->token.z, "1", 1)) {
|
||||||
|
server_status = true;
|
||||||
|
} else {
|
||||||
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
||||||
|
}
|
||||||
|
}
|
||||||
// TODO redefine the function
|
// TODO redefine the function
|
||||||
SDNodeDynConfOption functionsInfo[5] = {{"database()", 10},
|
SDNodeDynConfOption functionsInfo[5] = {{"database()", 10},
|
||||||
{"server_version()", 16},
|
{"server_version()", 16},
|
||||||
{"server_status()", 15},
|
{"server_status()", 15},
|
||||||
{"client_version()", 16},
|
{"client_version()", 16},
|
||||||
{"current_user()", 14}};
|
{"current_user()", 14}};
|
||||||
|
|
||||||
int32_t index = -1;
|
int32_t index = -1;
|
||||||
for (int32_t i = 0; i < tListLen(functionsInfo); ++i) {
|
if (server_status == true) {
|
||||||
if (strncasecmp(functionsInfo[i].name, pExpr->operand.z, functionsInfo[i].len) == 0 &&
|
index = 2;
|
||||||
functionsInfo[i].len == pExpr->operand.n) {
|
} else {
|
||||||
index = i;
|
for (int32_t i = 0; i < tListLen(functionsInfo); ++i) {
|
||||||
break;
|
if (strncasecmp(functionsInfo[i].name, pExpr->operand.z, functionsInfo[i].len) == 0 &&
|
||||||
|
functionsInfo[i].len == pExpr->operand.n) {
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -631,15 +631,19 @@ static void rpcReleaseConn(SRpcConn *pConn) {
|
||||||
// if there is an outgoing message, free it
|
// if there is an outgoing message, free it
|
||||||
if (pConn->outType && pConn->pReqMsg) {
|
if (pConn->outType && pConn->pReqMsg) {
|
||||||
SRpcReqContext *pContext = pConn->pContext;
|
SRpcReqContext *pContext = pConn->pContext;
|
||||||
if (pContext->pRsp) {
|
if (pContext) {
|
||||||
|
if (pContext->pRsp) {
|
||||||
// for synchronous API, post semaphore to unblock app
|
// for synchronous API, post semaphore to unblock app
|
||||||
pContext->pRsp->code = TSDB_CODE_RPC_APP_ERROR;
|
pContext->pRsp->code = TSDB_CODE_RPC_APP_ERROR;
|
||||||
pContext->pRsp->pCont = NULL;
|
pContext->pRsp->pCont = NULL;
|
||||||
pContext->pRsp->contLen = 0;
|
pContext->pRsp->contLen = 0;
|
||||||
tsem_post(pContext->pSem);
|
tsem_post(pContext->pSem);
|
||||||
|
}
|
||||||
|
pContext->pConn = NULL;
|
||||||
|
taosRemoveRef(tsRpcRefId, pContext->rid);
|
||||||
|
} else {
|
||||||
|
assert(0);
|
||||||
}
|
}
|
||||||
pContext->pConn = NULL;
|
|
||||||
taosRemoveRef(tsRpcRefId, pContext->rid);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1083,7 +1087,11 @@ static void *rpcProcessMsgFromPeer(SRecvInfo *pRecv) {
|
||||||
if (code == TSDB_CODE_RPC_INVALID_TIME_STAMP || code == TSDB_CODE_RPC_AUTH_FAILURE) {
|
if (code == TSDB_CODE_RPC_INVALID_TIME_STAMP || code == TSDB_CODE_RPC_AUTH_FAILURE) {
|
||||||
rpcCloseConn(pConn);
|
rpcCloseConn(pConn);
|
||||||
}
|
}
|
||||||
tDebug("%s %p %p, %s is sent with error code:0x%x", pRpc->label, pConn, (void *)pHead->ahandle, taosMsg[pHead->msgType+1], code);
|
if (pHead->msgType + 1 > 1 && pHead->msgType+1 < TSDB_MSG_TYPE_MAX) {
|
||||||
|
tDebug("%s %p %p, %s is sent with error code:0x%x", pRpc->label, pConn, (void *)pHead->ahandle, taosMsg[pHead->msgType+1], code);
|
||||||
|
} else {
|
||||||
|
tError("%s %p %p, %s is sent with error code:0x%x", pRpc->label, pConn, (void *)pHead->ahandle, taosMsg[pHead->msgType], code);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else { // msg is passed to app only parsing is ok
|
} else { // msg is passed to app only parsing is ok
|
||||||
rpcProcessIncomingMsg(pConn, pHead, pContext);
|
rpcProcessIncomingMsg(pConn, pHead, pContext);
|
||||||
|
|
|
@ -242,7 +242,14 @@ static void *taosAcceptTcpConnection(void *arg) {
|
||||||
|
|
||||||
taosKeepTcpAlive(connFd);
|
taosKeepTcpAlive(connFd);
|
||||||
struct timeval to={1, 0};
|
struct timeval to={1, 0};
|
||||||
taosSetSockOpt(connFd, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof(to));
|
int32_t ret = taosSetSockOpt(connFd, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof(to));
|
||||||
|
if (ret != 0) {
|
||||||
|
taosCloseSocket(connFd);
|
||||||
|
tError("%s failed to set recv timeout fd(%s)for connection from:%s:%hu", pServerObj->label, strerror(errno),
|
||||||
|
taosInetNtoa(caddr.sin_addr), htons(caddr.sin_port));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// pick up the thread to handle this connection
|
// pick up the thread to handle this connection
|
||||||
pThreadObj = pServerObj->pThreadObj[threadId];
|
pThreadObj = pServerObj->pThreadObj[threadId];
|
||||||
|
|
|
@ -188,7 +188,8 @@ int main(int argc, char *argv[]) {
|
||||||
tInfo("it takes %.3f mseconds to send %d requests to server", usedTime, numOfReqs*appThreads);
|
tInfo("it takes %.3f mseconds to send %d requests to server", usedTime, numOfReqs*appThreads);
|
||||||
tInfo("Performance: %.3f requests per second, msgSize:%d bytes", 1000.0*numOfReqs*appThreads/usedTime, msgSize);
|
tInfo("Performance: %.3f requests per second, msgSize:%d bytes", 1000.0*numOfReqs*appThreads/usedTime, msgSize);
|
||||||
|
|
||||||
getchar();
|
int ch = getchar();
|
||||||
|
UNUSED(ch);
|
||||||
|
|
||||||
taosCloseLog();
|
taosCloseLog();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue