fix: deadlock while drop mnode in multi-process mode
This commit is contained in:
parent
daefe101c1
commit
4e64e8db62
|
@ -174,6 +174,11 @@ void dmStopNode(SMgmtWrapper *pWrapper) {
|
||||||
|
|
||||||
void dmCloseNode(SMgmtWrapper *pWrapper) {
|
void dmCloseNode(SMgmtWrapper *pWrapper) {
|
||||||
dInfo("node:%s, start to close", pWrapper->name);
|
dInfo("node:%s, start to close", pWrapper->name);
|
||||||
|
|
||||||
|
while (pWrapper->refCount > 0) {
|
||||||
|
taosMsleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
if (pWrapper->procType == DND_PROC_PARENT) {
|
if (pWrapper->procType == DND_PROC_PARENT) {
|
||||||
if (pWrapper->procId > 0 && taosProcExist(pWrapper->procId)) {
|
if (pWrapper->procId > 0 && taosProcExist(pWrapper->procId)) {
|
||||||
dInfo("node:%s, send kill signal to the child process:%d", pWrapper->name, pWrapper->procId);
|
dInfo("node:%s, send kill signal to the child process:%d", pWrapper->name, pWrapper->procId);
|
||||||
|
@ -186,18 +191,10 @@ void dmCloseNode(SMgmtWrapper *pWrapper) {
|
||||||
|
|
||||||
dmStopNode(pWrapper);
|
dmStopNode(pWrapper);
|
||||||
|
|
||||||
pWrapper->required = false;
|
|
||||||
taosWLockLatch(&pWrapper->latch);
|
taosWLockLatch(&pWrapper->latch);
|
||||||
if (pWrapper->deployed) {
|
|
||||||
(*pWrapper->fp.closeFp)(pWrapper);
|
(*pWrapper->fp.closeFp)(pWrapper);
|
||||||
pWrapper->deployed = false;
|
|
||||||
}
|
|
||||||
taosWUnLockLatch(&pWrapper->latch);
|
taosWUnLockLatch(&pWrapper->latch);
|
||||||
|
|
||||||
while (pWrapper->refCount > 0) {
|
|
||||||
taosMsleep(10);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pWrapper->procObj) {
|
if (pWrapper->procObj) {
|
||||||
taosProcCleanup(pWrapper->procObj);
|
taosProcCleanup(pWrapper->procObj);
|
||||||
pWrapper->procObj = NULL;
|
pWrapper->procObj = NULL;
|
||||||
|
|
|
@ -175,9 +175,9 @@ int32_t dmProcessDropNodeReq(SDnode *pDnode, EDndNodeType ntype, SNodeMsg *pMsg)
|
||||||
dmReleaseWrapper(pWrapper);
|
dmReleaseWrapper(pWrapper);
|
||||||
|
|
||||||
if (code == 0) {
|
if (code == 0) {
|
||||||
dmCloseNode(pWrapper);
|
|
||||||
pWrapper->required = false;
|
pWrapper->required = false;
|
||||||
pWrapper->deployed = false;
|
pWrapper->deployed = false;
|
||||||
|
dmCloseNode(pWrapper);
|
||||||
taosRemoveDir(pWrapper->path);
|
taosRemoveDir(pWrapper->path);
|
||||||
}
|
}
|
||||||
taosThreadMutexUnlock(&pDnode->mutex);
|
taosThreadMutexUnlock(&pDnode->mutex);
|
||||||
|
|
Loading…
Reference in New Issue