diff --git a/src/vnode/src/vnodeMain.c b/src/vnode/src/vnodeMain.c index 67ba891f93237399b11ce53b8e9ea6ae06cfa582..0882ee983dfb6aca7831600e870885e0061ca75d 100644 --- a/src/vnode/src/vnodeMain.c +++ b/src/vnode/src/vnodeMain.c @@ -321,6 +321,22 @@ void vnodeRelease(void *pVnodeRaw) { return; } + if (pVnode->tsdb) + tsdbCloseRepo(pVnode->tsdb, 1); + pVnode->tsdb = NULL; + + if (pVnode->wal) + walClose(pVnode->wal); + pVnode->wal = NULL; + + if (pVnode->wqueue) + dnodeFreeVnodeWqueue(pVnode->wqueue); + pVnode->wqueue = NULL; + + if (pVnode->rqueue) + dnodeFreeVnodeRqueue(pVnode->rqueue); + pVnode->rqueue = NULL; + tfree(pVnode->rootDir); if (pVnode->status == TAOS_VN_STATUS_DELETING) { @@ -411,33 +427,21 @@ void vnodeBuildStatusMsg(void *param) { } static void vnodeCleanUp(SVnodeObj *pVnode) { + // remove from hash, so new messages wont be consumed taosHashRemove(tsDnodeVnodesHash, (const char *)&pVnode->vgId, sizeof(int32_t)); + // stop replication module if (pVnode->sync) { syncStop(pVnode->sync); pVnode->sync = NULL; } - if (pVnode->tsdb) - tsdbCloseRepo(pVnode->tsdb, 1); - pVnode->tsdb = NULL; - - if (pVnode->wal) - walClose(pVnode->wal); - pVnode->wal = NULL; - + // stop continuous query if (pVnode->cq) cqClose(pVnode->cq); pVnode->cq = NULL; - if (pVnode->wqueue) - dnodeFreeVnodeWqueue(pVnode->wqueue); - pVnode->wqueue = NULL; - - if (pVnode->rqueue) - dnodeFreeVnodeRqueue(pVnode->rqueue); - pVnode->rqueue = NULL; - + // release local resources only after cutting off outside connections vnodeRelease(pVnode); }