diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c index 0ad3dd208eaf2d51c6215ca60be17cbca4b1fe97..0a2c2bd5f3f542fca9c6ef5fbfa2bf6546c956c2 100644 --- a/src/client/src/tscServer.c +++ b/src/client/src/tscServer.c @@ -502,13 +502,25 @@ static void doProcessMsgFromServer(SSchedMsg* pSchedMsg) { } rpcMsg->code = (pRes->code == TSDB_CODE_SUCCESS) ? (int32_t)pRes->numOfRows : pRes->code; if (pRes->code == TSDB_CODE_RPC_FQDN_ERROR) { + tscAllocPayload(pCmd, TSDB_FQDN_LEN + 64); + // handle three situation + // 1. epset retry, only return last failure ep + // 2. no epset retry, like 'taos -h invalidFqdn', return invalidFqdn + // 3. other situation, no expected if (pEpSet) { - char buf[TSDB_FQDN_LEN + 64] = {0}; - tscAllocPayload(pCmd, sizeof(buf)); sprintf(tscGetErrorMsgPayload(pCmd), "%s\"%s\"", tstrerror(pRes->code),pEpSet->fqdn[(pEpSet->inUse)%(pEpSet->numOfEps)]); + } else if (pCmd->command >= TSDB_SQL_MGMT) { + SRpcEpSet tEpset; + + SRpcCorEpSet *pCorEpSet = pSql->pTscObj->tscCorMgmtEpSet; + taosCorBeginRead(&pCorEpSet->version); + tEpset = pCorEpSet->epSet; + taosCorEndRead(&pCorEpSet->version); + + sprintf(tscGetErrorMsgPayload(pCmd), "%s\"%s\"", tstrerror(pRes->code),tEpset.fqdn[(tEpset.inUse)%(tEpset.numOfEps)]); } else { sprintf(tscGetErrorMsgPayload(pCmd), "%s", tstrerror(pRes->code)); - } + } } (*pSql->fp)(pSql->param, pSql, rpcMsg->code); } diff --git a/src/rpc/src/rpcMain.c b/src/rpc/src/rpcMain.c index c93a3f929d9510ccd8e092b7d924bc541d608581..e958a8e5ec5b6542d609028ee052d21a9a84d397 100644 --- a/src/rpc/src/rpcMain.c +++ b/src/rpc/src/rpcMain.c @@ -1133,8 +1133,8 @@ static void rpcNotifyClient(SRpcReqContext *pContext, SRpcMsg *pMsg) { } else { // for asynchronous API SRpcEpSet *pEpSet = NULL; - //if (pContext->epSet.inUse != pContext->oldInUse || pContext->redirect) - pEpSet = &pContext->epSet; + if (pContext->epSet.inUse != pContext->oldInUse || pContext->redirect) + pEpSet = &pContext->epSet; (*pRpc->cfp)(pMsg, pEpSet); }