diff --git a/source/dnode/mgmt/impl/inc/dndMgmt.h b/source/dnode/mgmt/impl/inc/dndMgmt.h index 69c2aa1fbf39be66d066732c401192f7bd9eb016..0df3af23d5de1ac3f16798a1964d04a93da14834 100644 --- a/source/dnode/mgmt/impl/inc/dndMgmt.h +++ b/source/dnode/mgmt/impl/inc/dndMgmt.h @@ -21,8 +21,9 @@ extern "C" { #endif #include "dndInt.h" -int32_t dndInitDnode(SDnode *pDnode); -void dndCleanupDnode(SDnode *pDnode); +int32_t dndInitMgmt(SDnode *pDnode); +void dndStopMgmt(SDnode *pDnode); +void dndCleanupMgmt(SDnode *pDnode); int32_t dndGetDnodeId(SDnode *pDnode); int64_t dndGetClusterId(SDnode *pDnode); diff --git a/source/dnode/mgmt/impl/src/dndMgmt.c b/source/dnode/mgmt/impl/src/dndMgmt.c index 7d071be944dfb626cd0cc338eb8c74474c682728..f262eb9ca027245b5aa476c5ee2878ce24307d29 100644 --- a/source/dnode/mgmt/impl/src/dndMgmt.c +++ b/source/dnode/mgmt/impl/src/dndMgmt.c @@ -497,7 +497,7 @@ static void *dnodeThreadRoutine(void *param) { } } -int32_t dndInitDnode(SDnode *pDnode) { +int32_t dndInitMgmt(SDnode *pDnode) { SDnodeMgmt *pMgmt = &pDnode->dmgmt; pMgmt->dnodeId = 0; @@ -547,16 +547,18 @@ int32_t dndInitDnode(SDnode *pDnode) { return 0; } -void dndCleanupDnode(SDnode *pDnode) { +void dndStopMgmt(SDnode *pDnode) { SDnodeMgmt *pMgmt = &pDnode->dmgmt; - dndCleanupWorker(&pMgmt->mgmtWorker); if (pMgmt->threadId != NULL) { taosDestoryThread(pMgmt->threadId); pMgmt->threadId = NULL; } +} +void dndCleanupMgmt(SDnode *pDnode) { + SDnodeMgmt *pMgmt = &pDnode->dmgmt; taosWLockLatch(&pMgmt->latch); if (pMgmt->dnodeEps != NULL) { diff --git a/source/dnode/mgmt/impl/src/dndVnodes.c b/source/dnode/mgmt/impl/src/dndVnodes.c index 0b76da15499543d43366eee32e5ab90a970aa687..bf27a542aedd4722d9c17c7f9e7441c546b554dc 100644 --- a/source/dnode/mgmt/impl/src/dndVnodes.c +++ b/source/dnode/mgmt/impl/src/dndVnodes.c @@ -167,6 +167,11 @@ static void dndCloseVnode(SDnode *pDnode, SVnodeObj *pVnode) { dDebug("vgId:%d, vnode is closed", pVnode->vgId); + if (pVnode->dropped) { + dDebug("vgId:%d, vnode is destroyed for dropped:%d", pVnode->vgId, pVnode->dropped); + vnodeDestroy(pVnode->path); + } + free(pVnode->path); free(pVnode->db); free(pVnode); @@ -466,6 +471,7 @@ static int32_t dndOpenVnodes(SDnode *pDnode) { } static void dndCloseVnodes(SDnode *pDnode) { + dInfo("start to close all vnodes"); SVnodesMgmt *pMgmt = &pDnode->vmgmt; int32_t numOfVnodes = 0; @@ -658,8 +664,6 @@ int32_t dndProcessDropVnodeReq(SDnode *pDnode, SRpcMsg *pReq) { } dndCloseVnode(pDnode, pVnode); - vnodeClose(pVnode->pImpl); - vnodeDestroy(pVnode->path); dndWriteVnodesToFile(pDnode); return 0; diff --git a/source/dnode/mgmt/impl/src/dnode.c b/source/dnode/mgmt/impl/src/dnode.c index 743b66733d4e51cc14d2f18fdf1c741082695f6c..9c3870d5d174e0a32a5752654d8f61a5af751724 100644 --- a/source/dnode/mgmt/impl/src/dnode.c +++ b/source/dnode/mgmt/impl/src/dnode.c @@ -202,7 +202,7 @@ SDnode *dndInit(SDnodeOpt *pOption) { return NULL; } - if (dndInitDnode(pDnode) != 0) { + if (dndInitMgmt(pDnode) != 0) { dError("failed to init dnode"); dndCleanup(pDnode); return NULL; @@ -263,12 +263,13 @@ void dndCleanup(SDnode *pDnode) { dInfo("start to cleanup TDengine"); dndSetStat(pDnode, DND_STAT_STOPPED); dndCleanupTrans(pDnode); + dndStopMgmt(pDnode); dndCleanupMnode(pDnode); dndCleanupBnode(pDnode); dndCleanupSnode(pDnode); dndCleanupQnode(pDnode); dndCleanupVnodes(pDnode); - dndCleanupDnode(pDnode); + dndCleanupMgmt(pDnode); vnodeClear(); tfsDestroy(); walCleanUp();