From 077ea4a14fcfe4e5a70fb6e27e7762b892be35a4 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 24 May 2022 11:58:50 +0800 Subject: [PATCH 1/3] fix: avoid memory leak in mnode sync --- source/dnode/mnode/impl/src/mndSync.c | 1 + source/dnode/mnode/impl/src/mndTrans.c | 1 + source/libs/sync/src/syncMain.c | 14 +++++--------- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndSync.c b/source/dnode/mnode/impl/src/mndSync.c index b77a2c20a6..a4e6cfd5ca 100644 --- a/source/dnode/mnode/impl/src/mndSync.c +++ b/source/dnode/mnode/impl/src/mndSync.c @@ -141,6 +141,7 @@ int32_t mndSyncPropose(SMnode *pMnode, SSdbRaw *pRaw) { terrno = TSDB_CODE_APP_ERROR; } + rpcFreeCont(rsp.pCont); if (code != 0) return code; return pMgmt->errCode; } diff --git a/source/dnode/mnode/impl/src/mndTrans.c b/source/dnode/mnode/impl/src/mndTrans.c index d685c88500..c6fcc7903f 100644 --- a/source/dnode/mnode/impl/src/mndTrans.c +++ b/source/dnode/mnode/impl/src/mndTrans.c @@ -681,6 +681,7 @@ static int32_t mndTransSync(SMnode *pMnode, STrans *pTrans) { return -1; } + sdbFreeRaw(pRaw); mDebug("trans:%d, sync finished", pTrans->id); return 0; } diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index a233603adf..a69a94831d 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -318,11 +318,8 @@ int32_t syncPropose(int64_t rid, const SRpcMsg* pMsg, bool isWeak) { sTrace("syncPropose msgType:%d ", pMsg->msgType); int32_t ret = TAOS_SYNC_PROPOSE_SUCCESS; - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) { - rpcFreeCont(pMsg->pCont); - return TAOS_SYNC_PROPOSE_OTHER_ERROR; - } + SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); + if (pSyncNode == NULL) return TAOS_SYNC_PROPOSE_OTHER_ERROR; assert(rid == pSyncNode->rid); @@ -335,14 +332,13 @@ int32_t syncPropose(int64_t rid, const SRpcMsg* pMsg, bool isWeak) { SyncClientRequest* pSyncMsg = syncClientRequestBuild2(pMsg, seqNum, isWeak, pSyncNode->vgId); SRpcMsg rpcMsg; syncClientRequest2RpcMsg(pSyncMsg, &rpcMsg); - if (pSyncNode->FpEqMsg != NULL) { - pSyncNode->FpEqMsg(pSyncNode->msgcb, &rpcMsg); + + if (pSyncNode->FpEqMsg != NULL && (*pSyncNode->FpEqMsg)(pSyncNode->msgcb, &rpcMsg) == 0) { + ret = TAOS_SYNC_PROPOSE_SUCCESS; } else { sTrace("syncPropose pSyncNode->FpEqMsg is NULL"); } syncClientRequestDestroy(pSyncMsg); - ret = TAOS_SYNC_PROPOSE_SUCCESS; - } else { sTrace("syncPropose not leader, %s", syncUtilState2String(pSyncNode->state)); ret = TAOS_SYNC_PROPOSE_NOT_LEADER; From 030e47023128c8f6d57336696725ec419d0239fb Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 24 May 2022 12:46:23 +0800 Subject: [PATCH 2/3] test: add test cases for trans --- tests/script/tsim/trans/lossdata1.sim | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 tests/script/tsim/trans/lossdata1.sim diff --git a/tests/script/tsim/trans/lossdata1.sim b/tests/script/tsim/trans/lossdata1.sim new file mode 100644 index 0000000000..44785934e5 --- /dev/null +++ b/tests/script/tsim/trans/lossdata1.sim @@ -0,0 +1,33 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/cfg.sh -n dnode1 -c transPullupInterval -v 1 +system sh/exec.sh -n dnode1 -s start +sql connect + +print ======= backup sdbdata +system sh/exec.sh -n dnode1 -s stop +system cp ../../../../sim/dnode1/data/mnode/data/sdb.data ../../../../sim/dnode1/data/mnode/data/sdb.data.bak1 +system sh/exec.sh -n dnode1 -s start +sql connect + +print =============== create user1 +sql create user user1 PASS 'user1' +sql create user user2 PASS 'user2' +sql show users +if $rows != 3 then + return -1 +endi + +system sh/exec.sh -n dnode1 -s stop + +print ======= restore backup data +system cp ../../../../sim/dnode1/data/mnode/data/sdb.data.bak1 ../../../../sim/dnode1/data/mnode/data/sdb.data +system sh/exec.sh -n dnode1 -s start +sql connect + +sql show users +if $rows != 3 then + return -1 +endi + +system sh/exec.sh -n dnode1 -s stop \ No newline at end of file From cff293ea54b3f642291f20e8d67c3509bf320c9d Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 24 May 2022 12:46:54 +0800 Subject: [PATCH 3/3] test: add test cases for trans --- tests/script/jenkins/basic.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/script/jenkins/basic.txt b/tests/script/jenkins/basic.txt index 45fa037458..6cc25d7284 100644 --- a/tests/script/jenkins/basic.txt +++ b/tests/script/jenkins/basic.txt @@ -68,6 +68,7 @@ ./test.sh -f tsim/stream/basic1.sim # ---- transaction + ./test.sh -f tsim/trans/lossdata1.sim ./test.sh -f tsim/trans/create_db.sim # ---- tmq