fix a bug
This commit is contained in:
parent
98b98c8b85
commit
bc178c247d
|
@ -14,12 +14,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catalog.h"
|
#include "catalog.h"
|
||||||
|
#include "command.h"
|
||||||
#include "query.h"
|
#include "query.h"
|
||||||
#include "schedulerInt.h"
|
#include "schedulerInt.h"
|
||||||
#include "tmsg.h"
|
#include "tmsg.h"
|
||||||
#include "tref.h"
|
#include "tref.h"
|
||||||
#include "trpc.h"
|
#include "trpc.h"
|
||||||
#include "command.h"
|
|
||||||
|
|
||||||
SSchedulerMgmt schMgmt = {0};
|
SSchedulerMgmt schMgmt = {0};
|
||||||
|
|
||||||
|
@ -68,8 +68,8 @@ int32_t schInitTask(SSchJob *pJob, SSchTask *pTask, SSubplan *pPlan, SSchLevel *
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t schInitJob(SSchJob **pSchJob, SQueryPlan *pDag, void *transport, SArray *pNodeList, const char *sql,
|
int32_t schInitJob(SSchJob **pSchJob, SQueryPlan *pDag, void *transport, SArray *pNodeList, const char *sql,
|
||||||
int64_t startTs, bool syncSchedule) {
|
int64_t startTs, bool syncSchedule) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SSchJob *pJob = taosMemoryCalloc(1, sizeof(SSchJob));
|
SSchJob *pJob = taosMemoryCalloc(1, sizeof(SSchJob));
|
||||||
if (NULL == pJob) {
|
if (NULL == pJob) {
|
||||||
qError("QID:%" PRIx64 " calloc %d failed", pDag->queryId, (int32_t)sizeof(SSchJob));
|
qError("QID:%" PRIx64 " calloc %d failed", pDag->queryId, (int32_t)sizeof(SSchJob));
|
||||||
|
@ -141,7 +141,6 @@ _return:
|
||||||
SCH_RET(code);
|
SCH_RET(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void schFreeRpcCtx(SRpcCtx *pCtx) {
|
void schFreeRpcCtx(SRpcCtx *pCtx) {
|
||||||
if (NULL == pCtx) {
|
if (NULL == pCtx) {
|
||||||
return;
|
return;
|
||||||
|
@ -1047,12 +1046,12 @@ _return:
|
||||||
|
|
||||||
int32_t schProcessOnExplainDone(SSchJob *pJob, SSchTask *pTask, SRetrieveTableRsp *pRsp) {
|
int32_t schProcessOnExplainDone(SSchJob *pJob, SSchTask *pTask, SRetrieveTableRsp *pRsp) {
|
||||||
SCH_TASK_DLOG("got explain rsp, rows:%d, complete:%d", htonl(pRsp->numOfRows), pRsp->completed);
|
SCH_TASK_DLOG("got explain rsp, rows:%d, complete:%d", htonl(pRsp->numOfRows), pRsp->completed);
|
||||||
|
|
||||||
atomic_store_32(&pJob->resNumOfRows, htonl(pRsp->numOfRows));
|
atomic_store_32(&pJob->resNumOfRows, htonl(pRsp->numOfRows));
|
||||||
atomic_store_ptr(&pJob->resData, pRsp);
|
atomic_store_ptr(&pJob->resData, pRsp);
|
||||||
|
|
||||||
SCH_SET_TASK_STATUS(pTask, JOB_TASK_STATUS_SUCCEED);
|
SCH_SET_TASK_STATUS(pTask, JOB_TASK_STATUS_SUCCEED);
|
||||||
|
|
||||||
schProcessOnDataFetched(pJob);
|
schProcessOnDataFetched(pJob);
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -1146,7 +1145,7 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t msgType, ch
|
||||||
if (NULL == msg) {
|
if (NULL == msg) {
|
||||||
SCH_ERR_JRET(TSDB_CODE_QRY_INVALID_INPUT);
|
SCH_ERR_JRET(TSDB_CODE_QRY_INVALID_INPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!SCH_IS_EXPLAIN_JOB(pJob)) {
|
if (!SCH_IS_EXPLAIN_JOB(pJob)) {
|
||||||
SCH_TASK_ELOG("invalid msg received for none explain query, msg type:%s", TMSG_INFO(msgType));
|
SCH_TASK_ELOG("invalid msg received for none explain query, msg type:%s", TMSG_INFO(msgType));
|
||||||
SCH_ERR_JRET(TSDB_CODE_QRY_INVALID_INPUT);
|
SCH_ERR_JRET(TSDB_CODE_QRY_INVALID_INPUT);
|
||||||
|
@ -1180,13 +1179,13 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t msgType, ch
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SCH_IS_EXPLAIN_JOB(pJob)) {
|
if (SCH_IS_EXPLAIN_JOB(pJob)) {
|
||||||
if (rsp->completed) {
|
if (rsp->completed) {
|
||||||
SRetrieveTableRsp *pRsp = NULL;
|
SRetrieveTableRsp *pRsp = NULL;
|
||||||
SCH_ERR_JRET(qExecExplainEnd(pJob->explainCtx, &pRsp));
|
SCH_ERR_JRET(qExecExplainEnd(pJob->explainCtx, &pRsp));
|
||||||
if (pRsp) {
|
if (pRsp) {
|
||||||
SCH_ERR_JRET(schProcessOnExplainDone(pJob, pTask, pRsp));
|
SCH_ERR_JRET(schProcessOnExplainDone(pJob, pTask, pRsp));
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1238,23 +1237,24 @@ _return:
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t schGetTaskFromTaskList(SHashObj *pTaskList, uint64_t taskId, SSchTask **pTask) {
|
int32_t schGetTaskFromTaskList(SHashObj *pTaskList, uint64_t taskId, SSchTask **pTask) {
|
||||||
int32_t s = taosHashGetSize(pTaskList);
|
int32_t s = taosHashGetSize(pTaskList);
|
||||||
if (s <= 0) {
|
if (s <= 0) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSchTask **task = taosHashGet(pTaskList, &taskId, sizeof(taskId));
|
|
||||||
if (NULL == task || NULL == (*task)) {
|
|
||||||
return TSDB_CODE_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
*pTask = *task;
|
SSchTask **task = taosHashGet(pTaskList, &taskId, sizeof(taskId));
|
||||||
|
if (NULL == task || NULL == (*task)) {
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
*pTask = *task;
|
||||||
|
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t schUpdateTaskExecNodeHandle(SSchTask *pTask, void *handle, int32_t rspCode) {
|
int32_t schUpdateTaskExecNodeHandle(SSchTask *pTask, void *handle, int32_t rspCode) {
|
||||||
if (rspCode || NULL == pTask->execNodes || taosArrayGetSize(pTask->execNodes) > 1 || taosArrayGetSize(pTask->execNodes) <= 0) {
|
if (rspCode || NULL == pTask->execNodes || taosArrayGetSize(pTask->execNodes) > 1 ||
|
||||||
|
taosArrayGetSize(pTask->execNodes) <= 0) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1264,7 +1264,6 @@ int32_t schUpdateTaskExecNodeHandle(SSchTask *pTask, void *handle, int32_t rspCo
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t schHandleCallback(void *param, const SDataBuf *pMsg, int32_t msgType, int32_t rspCode) {
|
int32_t schHandleCallback(void *param, const SDataBuf *pMsg, int32_t msgType, int32_t rspCode) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SSchTaskCallbackParam *pParam = (SSchTaskCallbackParam *)param;
|
SSchTaskCallbackParam *pParam = (SSchTaskCallbackParam *)param;
|
||||||
|
@ -1282,13 +1281,15 @@ int32_t schHandleCallback(void *param, const SDataBuf *pMsg, int32_t msgType, in
|
||||||
if (TDMT_VND_EXPLAIN_RSP == msgType) {
|
if (TDMT_VND_EXPLAIN_RSP == msgType) {
|
||||||
schGetTaskFromTaskList(pJob->succTasks, pParam->taskId, &pTask);
|
schGetTaskFromTaskList(pJob->succTasks, pParam->taskId, &pTask);
|
||||||
} else {
|
} else {
|
||||||
SCH_JOB_ELOG("task not found in execTask list, refId:%" PRIx64 ", taskId:%" PRIx64, pParam->refId, pParam->taskId);
|
SCH_JOB_ELOG("task not found in execTask list, refId:%" PRIx64 ", taskId:%" PRIx64, pParam->refId,
|
||||||
|
pParam->taskId);
|
||||||
SCH_ERR_JRET(TSDB_CODE_SCH_INTERNAL_ERROR);
|
SCH_ERR_JRET(TSDB_CODE_SCH_INTERNAL_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == pTask) {
|
if (NULL == pTask) {
|
||||||
SCH_JOB_ELOG("task not found in execList & succList, refId:%" PRIx64 ", taskId:%" PRIx64, pParam->refId, pParam->taskId);
|
SCH_JOB_ELOG("task not found in execList & succList, refId:%" PRIx64 ", taskId:%" PRIx64, pParam->refId,
|
||||||
|
pParam->taskId);
|
||||||
SCH_ERR_JRET(TSDB_CODE_SCH_INTERNAL_ERROR);
|
SCH_ERR_JRET(TSDB_CODE_SCH_INTERNAL_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1444,7 +1445,7 @@ int32_t schGetCallbackFp(int32_t msgType, __async_send_cb_fn_t *fp) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t schGenerateTaskCallBackAHandle(SSchJob *pJob, SSchTask *pTask, int32_t msgType, SMsgSendInfo **pMsgSendInfo) {
|
int32_t schGenerateTaskCallBackAHandle(SSchJob *pJob, SSchTask *pTask, int32_t msgType, SMsgSendInfo **pMsgSendInfo) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SMsgSendInfo *msgSendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo));
|
SMsgSendInfo *msgSendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo));
|
||||||
if (NULL == msgSendInfo) {
|
if (NULL == msgSendInfo) {
|
||||||
SCH_TASK_ELOG("calloc %d failed", (int32_t)sizeof(SMsgSendInfo));
|
SCH_TASK_ELOG("calloc %d failed", (int32_t)sizeof(SMsgSendInfo));
|
||||||
|
@ -1565,7 +1566,7 @@ _return:
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t schMakeQueryRpcCtx(SSchJob *pJob, SSchTask *pTask, SRpcCtx *pCtx) {
|
int32_t schMakeQueryRpcCtx(SSchJob *pJob, SSchTask *pTask, SRpcCtx *pCtx) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SMsgSendInfo *pReadyMsgSendInfo = NULL;
|
SMsgSendInfo *pReadyMsgSendInfo = NULL;
|
||||||
SMsgSendInfo *pExplainMsgSendInfo = NULL;
|
SMsgSendInfo *pExplainMsgSendInfo = NULL;
|
||||||
|
|
||||||
|
@ -1578,7 +1579,7 @@ int32_t schMakeQueryRpcCtx(SSchJob *pJob, SSchTask *pTask, SRpcCtx *pCtx) {
|
||||||
SCH_ERR_JRET(schGenerateTaskCallBackAHandle(pJob, pTask, TDMT_VND_RES_READY, &pReadyMsgSendInfo));
|
SCH_ERR_JRET(schGenerateTaskCallBackAHandle(pJob, pTask, TDMT_VND_RES_READY, &pReadyMsgSendInfo));
|
||||||
SCH_ERR_JRET(schGenerateTaskCallBackAHandle(pJob, pTask, TDMT_VND_EXPLAIN, &pExplainMsgSendInfo));
|
SCH_ERR_JRET(schGenerateTaskCallBackAHandle(pJob, pTask, TDMT_VND_EXPLAIN, &pExplainMsgSendInfo));
|
||||||
|
|
||||||
int32_t msgType = TDMT_VND_RES_READY_RSP;
|
int32_t msgType = TDMT_VND_RES_READY_RSP;
|
||||||
SRpcCtxVal ctxVal = {.val = pReadyMsgSendInfo, .clone = schCloneSMsgSendInfo, .freeFunc = schFreeRpcCtxVal};
|
SRpcCtxVal ctxVal = {.val = pReadyMsgSendInfo, .clone = schCloneSMsgSendInfo, .freeFunc = schFreeRpcCtxVal};
|
||||||
if (taosHashPut(pCtx->args, &msgType, sizeof(msgType), &ctxVal, sizeof(ctxVal))) {
|
if (taosHashPut(pCtx->args, &msgType, sizeof(msgType), &ctxVal, sizeof(ctxVal))) {
|
||||||
SCH_TASK_ELOG("taosHashPut msg %d to rpcCtx failed", msgType);
|
SCH_TASK_ELOG("taosHashPut msg %d to rpcCtx failed", msgType);
|
||||||
|
@ -1599,7 +1600,7 @@ int32_t schMakeQueryRpcCtx(SSchJob *pJob, SSchTask *pTask, SRpcCtx *pCtx) {
|
||||||
_return:
|
_return:
|
||||||
|
|
||||||
taosHashCleanup(pCtx->args);
|
taosHashCleanup(pCtx->args);
|
||||||
|
|
||||||
if (pReadyMsgSendInfo) {
|
if (pReadyMsgSendInfo) {
|
||||||
taosMemoryFreeClear(pReadyMsgSendInfo->param);
|
taosMemoryFreeClear(pReadyMsgSendInfo->param);
|
||||||
taosMemoryFreeClear(pReadyMsgSendInfo);
|
taosMemoryFreeClear(pReadyMsgSendInfo);
|
||||||
|
@ -1818,7 +1819,7 @@ _return:
|
||||||
taosMemoryFreeClear(pMsgSendInfo->param);
|
taosMemoryFreeClear(pMsgSendInfo->param);
|
||||||
taosMemoryFreeClear(pMsgSendInfo);
|
taosMemoryFreeClear(pMsgSendInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
SCH_RET(code);
|
SCH_RET(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2319,7 +2320,7 @@ _return:
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t schExecStaticExplain(void *transport, SArray *pNodeList, SQueryPlan *pDag, int64_t *job, const char *sql,
|
int32_t schExecStaticExplain(void *transport, SArray *pNodeList, SQueryPlan *pDag, int64_t *job, const char *sql,
|
||||||
bool syncSchedule) {
|
bool syncSchedule) {
|
||||||
qDebug("QID:0x%" PRIx64 " job started", pDag->queryId);
|
qDebug("QID:0x%" PRIx64 " job started", pDag->queryId);
|
||||||
|
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
@ -2608,7 +2609,7 @@ int32_t schedulerFetchRows(int64_t job, void **pData) {
|
||||||
if (!(pJob->attr.explainMode == EXPLAIN_MODE_STATIC)) {
|
if (!(pJob->attr.explainMode == EXPLAIN_MODE_STATIC)) {
|
||||||
SCH_ERR_JRET(schFetchFromRemote(pJob));
|
SCH_ERR_JRET(schFetchFromRemote(pJob));
|
||||||
tsem_wait(&pJob->rspSem);
|
tsem_wait(&pJob->rspSem);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SCH_JOB_ELOG("job status error for fetch, status:%s", jobTaskStatusStr(status));
|
SCH_JOB_ELOG("job status error for fetch, status:%s", jobTaskStatusStr(status));
|
||||||
SCH_ERR_JRET(TSDB_CODE_SCH_STATUS_ERROR);
|
SCH_ERR_JRET(TSDB_CODE_SCH_STATUS_ERROR);
|
||||||
|
@ -2670,11 +2671,11 @@ int32_t schedulerGetTasksStatus(int64_t job, SArray *pSub) {
|
||||||
|
|
||||||
for (int32_t i = pJob->levelNum - 1; i >= 0; --i) {
|
for (int32_t i = pJob->levelNum - 1; i >= 0; --i) {
|
||||||
SSchLevel *pLevel = taosArrayGet(pJob->levels, i);
|
SSchLevel *pLevel = taosArrayGet(pJob->levels, i);
|
||||||
|
|
||||||
for (int32_t m = 0; m < pLevel->taskNum; ++m) {
|
for (int32_t m = 0; m < pLevel->taskNum; ++m) {
|
||||||
SSchTask *pTask = taosArrayGet(pLevel->subTasks, m);
|
SSchTask *pTask = taosArrayGet(pLevel->subTasks, m);
|
||||||
SQuerySubDesc subDesc = {.tid = pTask->taskId, .status = pTask->status};
|
SQuerySubDesc subDesc = {.tid = pTask->taskId, .status = pTask->status};
|
||||||
|
|
||||||
taosArrayPush(pSub, &subDesc);
|
taosArrayPush(pSub, &subDesc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2682,7 +2683,6 @@ int32_t schedulerGetTasksStatus(int64_t job, SArray *pSub) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t scheduleCancelJob(int64_t job) {
|
int32_t scheduleCancelJob(int64_t job) {
|
||||||
SSchJob *pJob = schAcquireJob(job);
|
SSchJob *pJob = schAcquireJob(job);
|
||||||
if (NULL == pJob) {
|
if (NULL == pJob) {
|
||||||
|
@ -2738,11 +2738,10 @@ void schedulerDestroy(void) {
|
||||||
while (pJob) {
|
while (pJob) {
|
||||||
taosRemoveRef(schMgmt.jobRef, pJob->refId);
|
taosRemoveRef(schMgmt.jobRef, pJob->refId);
|
||||||
|
|
||||||
pJob = taosIterateRef(schMgmt.jobRef, pJob->refId);
|
pJob = taosIterateRef(schMgmt.jobRef, pJob);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosCloseRef(schMgmt.jobRef);
|
taosCloseRef(schMgmt.jobRef);
|
||||||
schMgmt.jobRef = 0;
|
schMgmt.jobRef = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue