From a82b0b805d66960c93133acd083ed47ad45e6e0d Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Mon, 15 Jul 2024 13:50:04 +0800 Subject: [PATCH] fix: error handling issue --- source/libs/qworker/src/qwDbg.c | 4 ++-- source/libs/qworker/src/qwMsg.c | 27 +++++++++++++++++++++++++-- source/libs/qworker/src/qworker.c | 7 +++++-- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/source/libs/qworker/src/qwDbg.c b/source/libs/qworker/src/qwDbg.c index d28667d247..17b2849684 100644 --- a/source/libs/qworker/src/qwDbg.c +++ b/source/libs/qworker/src/qwDbg.c @@ -260,8 +260,8 @@ void qwDbgSimulateDead(QW_FPARAMS_DEF, SQWTaskCtx *ctx, bool *rsped) { if (++ignoreTime > 10 && 0 == taosRand() % 9) { if (ctx->fetchMsgType == TDMT_SCH_FETCH) { - qwBuildAndSendErrorRsp(TDMT_SCH_LINK_BROKEN, &ctx->ctrlConnInfo, TSDB_CODE_RPC_BROKEN_LINK); - qwBuildAndSendErrorRsp(ctx->fetchMsgType + 1, &ctx->dataConnInfo, TSDB_CODE_QRY_TASK_CTX_NOT_EXIST); + (void)qwBuildAndSendErrorRsp(TDMT_SCH_LINK_BROKEN, &ctx->ctrlConnInfo, TSDB_CODE_RPC_BROKEN_LINK); // ignore error + (void)qwBuildAndSendErrorRsp(ctx->fetchMsgType + 1, &ctx->dataConnInfo, TSDB_CODE_QRY_TASK_CTX_NOT_EXIST); // ignore error *rsped = true; taosSsleep(3); diff --git a/source/libs/qworker/src/qwMsg.c b/source/libs/qworker/src/qwMsg.c index fad4b1efa8..473dd41228 100644 --- a/source/libs/qworker/src/qwMsg.c +++ b/source/libs/qworker/src/qwMsg.c @@ -105,8 +105,19 @@ int32_t qwBuildAndSendExplainRsp(SRpcHandleInfo *pConn, SArray *pExecList) { SExplainRsp rsp = {.numOfPlans = taosArrayGetSize(pExecList), .subplanInfo = pInfo}; int32_t contLen = tSerializeSExplainRsp(NULL, 0, &rsp); + if (contLen < 0) { + qError("tSerializeSExplainRsp failed, error: %x", terrno); + QW_RET(terrno); + } void *pRsp = rpcMallocCont(contLen); - tSerializeSExplainRsp(pRsp, contLen, &rsp); + if (NULL == pRsp) { + QW_RET(terrno); + } + contLen = tSerializeSExplainRsp(pRsp, contLen, &rsp); + if (contLen < 0) { + qError("tSerializeSExplainRsp second failed, error: %x", terrno); + QW_RET(terrno); + } SRpcMsg rpcRsp = { .msgType = TDMT_SCH_EXPLAIN_RSP, @@ -123,8 +134,20 @@ int32_t qwBuildAndSendExplainRsp(SRpcHandleInfo *pConn, SArray *pExecList) { int32_t qwBuildAndSendHbRsp(SRpcHandleInfo *pConn, SSchedulerHbRsp *pStatus, int32_t code) { int32_t contLen = tSerializeSSchedulerHbRsp(NULL, 0, pStatus); + if (contLen < 0) { + qError("tSerializeSSchedulerHbRsp failed, error: %x", terrno); + QW_RET(terrno); + } + void *pRsp = rpcMallocCont(contLen); - tSerializeSSchedulerHbRsp(pRsp, contLen, pStatus); + if (NULL == pRsp) { + QW_RET(terrno); + } + contLen = tSerializeSSchedulerHbRsp(pRsp, contLen, pStatus); + if (contLen < 0) { + qError("tSerializeSSchedulerHbRsp second failed, error: %x", terrno); + QW_RET(terrno); + } SRpcMsg rpcRsp = { .msgType = TDMT_SCH_QUERY_HEARTBEAT_RSP, diff --git a/source/libs/qworker/src/qworker.c b/source/libs/qworker/src/qworker.c index 8ab095bc32..084ee7efe3 100644 --- a/source/libs/qworker/src/qworker.c +++ b/source/libs/qworker/src/qworker.c @@ -682,7 +682,10 @@ _return: qwDbgSimulateRedirect(&qwMsg, ctx, &rsped); qwDbgSimulateDead(QW_FPARAMS(), ctx, &rsped); if (!rsped) { - code = qwSendQueryRsp(QW_FPARAMS(), input->msgType + 1, ctx, code, false); + int32_t newCode = qwSendQueryRsp(QW_FPARAMS(), input->msgType + 1, ctx, code, false); + if (TSDB_CODE_SUCCESS != newCode && TSDB_CODE_SUCCESS == code) { + code = newCode; + } } } @@ -694,7 +697,7 @@ _return: } if (code) { - code = qwUpdateTaskStatus(QW_FPARAMS(), JOB_TASK_STATUS_FAIL, ctx->dynamicTask); + (void)qwUpdateTaskStatus(QW_FPARAMS(), JOB_TASK_STATUS_FAIL, ctx->dynamicTask); // already in error, ignore new error } QW_UNLOCK(QW_WRITE, &ctx->lock);