diff --git a/source/libs/command/src/explain.c b/source/libs/command/src/explain.c index 605d8f41da85209f5b1450f3912af8da60655884..155da8de496d00a1525cdce7d65c098626b70d51 100644 --- a/source/libs/command/src/explain.c +++ b/source/libs/command/src/explain.c @@ -52,16 +52,14 @@ void qExplainFreeCtx(SExplainCtx *pCtx) { void *pIter = taosHashIterate(pCtx->groupHash, NULL); while (pIter) { SExplainGroup *group = (SExplainGroup *)pIter; - if (NULL == group->nodeExecInfo) { - continue; + if (group->nodeExecInfo) { + int32_t num = taosArrayGetSize(group->nodeExecInfo); + for (int32_t i = 0; i < num; ++i) { + SExplainRsp *rsp = taosArrayGet(group->nodeExecInfo, i); + taosMemoryFreeClear(rsp->subplanInfo); + } } - int32_t num = taosArrayGetSize(group->nodeExecInfo); - for (int32_t i = 0; i < num; ++i) { - SExplainRsp *rsp = taosArrayGet(group->nodeExecInfo, i); - taosMemoryFreeClear(rsp->subplanInfo); - } - pIter = taosHashIterate(pCtx->groupHash, pIter); } } diff --git a/source/libs/qworker/inc/qworkerInt.h b/source/libs/qworker/inc/qworkerInt.h index cfd4a3ec7b9410c343d11cd74d0845f6b46bf237..d62f9f04b88c94f93294d4a66a0765c00477a9eb 100644 --- a/source/libs/qworker/inc/qworkerInt.h +++ b/source/libs/qworker/inc/qworkerInt.h @@ -79,6 +79,7 @@ typedef struct SQWConnInfo { typedef struct SQWMsg { void *node; + int32_t code; char *msg; int32_t msgLen; SQWConnInfo connInfo; diff --git a/source/libs/qworker/src/qworker.c b/source/libs/qworker/src/qworker.c index f0f04a8a9bc538de54cb4f493c97fc66ab63427c..67871dfe6241b0b1c3e48856f6068e96d4d09916 100644 --- a/source/libs/qworker/src/qworker.c +++ b/source/libs/qworker/src/qworker.c @@ -536,6 +536,8 @@ int32_t qwDropTask(QW_FPARAMS_DEF) { QW_ERR_RET(qwDropTaskStatus(QW_FPARAMS())); QW_ERR_RET(qwDropTaskCtx(QW_FPARAMS())); + QW_TASK_DLOG_E("task is dropped"); + return TSDB_CODE_SUCCESS; } @@ -1239,8 +1241,10 @@ int32_t qwProcessDrop(QW_FPARAMS_DEF, SQWMsg *qwMsg) { QW_ERR_JRET(qwKillTaskHandle(QW_FPARAMS(), ctx)); qwUpdateTaskStatus(QW_FPARAMS(), JOB_TASK_STATUS_DROPPING); } else if (ctx->phase > 0) { - qwBuildAndSendDropRsp(&qwMsg->connInfo, code); - QW_TASK_DLOG("drop rsp send, handle:%p, code:%x - %s", qwMsg->connInfo.handle, code, tstrerror(code)); + if (0 == qwMsg->code) { + qwBuildAndSendDropRsp(&qwMsg->connInfo, code); + QW_TASK_DLOG("drop rsp send, handle:%p, code:%x - %s", qwMsg->connInfo.handle, code, tstrerror(code)); + } QW_ERR_JRET(qwDropTask(QW_FPARAMS())); rsped = true; @@ -1273,7 +1277,7 @@ _return: qwReleaseTaskCtx(mgmt, ctx); } - if (TSDB_CODE_SUCCESS != code) { + if ((TSDB_CODE_SUCCESS != code) && (0 == qwMsg->code)) { qwBuildAndSendDropRsp(&qwMsg->connInfo, code); QW_TASK_DLOG("drop rsp send, handle:%p, code:%x - %s", qwMsg->connInfo.handle, code, tstrerror(code)); } diff --git a/source/libs/qworker/src/qworkerMsg.c b/source/libs/qworker/src/qworkerMsg.c index bf8f97aa4c8b482cfad3568a10705ce0753080f6..15a42d3a3157411ba3a9bbbdaa6d0576d41ce7d4 100644 --- a/source/libs/qworker/src/qworkerMsg.c +++ b/source/libs/qworker/src/qworkerMsg.c @@ -549,7 +549,7 @@ int32_t qWorkerProcessDropMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) { uint64_t tId = msg->taskId; int64_t rId = msg->refId; - SQWMsg qwMsg = {.node = node, .msg = NULL, .msgLen = 0}; + SQWMsg qwMsg = {.node = node, .msg = NULL, .msgLen = 0, .code = pMsg->code}; qwMsg.connInfo.handle = pMsg->handle; qwMsg.connInfo.ahandle = pMsg->ahandle;