From 5602a5eac2b1a61108d1be937c7af8b548b11d0f Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 30 Jul 2024 17:07:38 +0800 Subject: [PATCH] fix: trans conflict during update dnode info --- source/dnode/mnode/impl/src/mndDnode.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index fb1687d851..408658141c 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -636,6 +636,7 @@ static int32_t mndProcessUpdateDnodeInfoReq(SRpcMsg *pReq) { SDnodeInfoReq infoReq = {0}; SDnodeObj *pDnode = NULL; STrans *pTrans = NULL; + SSdbRaw *pCommitRaw = NULL; TAOS_CHECK_EXIT(tDeserializeSDnodeInfoReq(pReq->pCont, pReq->contLen, &infoReq)); @@ -651,16 +652,15 @@ static int32_t mndProcessUpdateDnodeInfoReq(SRpcMsg *pReq) { pDnode->updateTime = taosGetTimestampMs(); - SSdbRaw *pCommitRaw = mndDnodeActionEncode(pDnode); - if (pCommitRaw == NULL) { + if ((pCommitRaw = mndDnodeActionEncode(pDnode)) == NULL) { TAOS_CHECK_EXIT(terrno); } if ((code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { - sdbFreeRaw(pCommitRaw); mError("trans:%d, failed to append commit log since %s", pTrans->id, tstrerror(code)); TAOS_CHECK_EXIT(code); } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + pCommitRaw = NULL; if ((code = mndTransPrepare(pMnode, pTrans)) != 0) { mError("trans:%d, failed to prepare since %s", pTrans->id, tstrerror(code)); @@ -673,6 +673,7 @@ _exit: mError("dnode:%d, failed to update dnode info at line %d since %s", infoReq.dnodeId, lino, tstrerror(code)); } mndTransDrop(pTrans); + sdbFreeRaw(pCommitRaw); TAOS_RETURN(code); }