[TD-4081]<fix>: [v3] fix vnode closing
This commit is contained in:
parent
70213e6526
commit
226f86c8bf
|
@ -120,6 +120,10 @@ int32_t vnodeDrop(int32_t vgId) {
|
||||||
vDebug("vgId:%d, failed to drop, vnode not find", vgId);
|
vDebug("vgId:%d, failed to drop, vnode not find", vgId);
|
||||||
return TSDB_CODE_VND_INVALID_VGROUP_ID;
|
return TSDB_CODE_VND_INVALID_VGROUP_ID;
|
||||||
}
|
}
|
||||||
|
if (pVnode->dropped) {
|
||||||
|
vnodeRelease(pVnode);
|
||||||
|
return TSDB_CODE_VND_INVALID_VGROUP_ID;
|
||||||
|
}
|
||||||
|
|
||||||
vInfo("vgId:%d, vnode will be dropped, refCount:%d pVnode:%p", pVnode->vgId, pVnode->refCount, pVnode);
|
vInfo("vgId:%d, vnode will be dropped, refCount:%d pVnode:%p", pVnode->vgId, pVnode->refCount, pVnode);
|
||||||
pVnode->dropped = 1;
|
pVnode->dropped = 1;
|
||||||
|
@ -473,6 +477,8 @@ void vnodeCleanUp(SVnodeObj *pVnode) {
|
||||||
|
|
||||||
vnodeSetClosingStatus(pVnode);
|
vnodeSetClosingStatus(pVnode);
|
||||||
|
|
||||||
|
vnodeRemoveFromHash(pVnode);
|
||||||
|
|
||||||
// stop replication module
|
// stop replication module
|
||||||
if (pVnode->sync > 0) {
|
if (pVnode->sync > 0) {
|
||||||
int64_t sync = pVnode->sync;
|
int64_t sync = pVnode->sync;
|
||||||
|
|
|
@ -118,8 +118,6 @@ void vnodeRelease(void *vparam) {
|
||||||
tsem_post(&pVnode->sem);
|
tsem_post(&pVnode->sem);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
vnodeRemoveFromHash(pVnode);
|
|
||||||
|
|
||||||
vDebug("vgId:%d, vnode will be destroyed, refCount:%d pVnode:%p", pVnode->vgId, refCount, pVnode);
|
vDebug("vgId:%d, vnode will be destroyed, refCount:%d pVnode:%p", pVnode->vgId, refCount, pVnode);
|
||||||
vnodeDestroyInMWorker(pVnode);
|
vnodeDestroyInMWorker(pVnode);
|
||||||
int32_t count = taosHashGetSize(tsVnodesHash);
|
int32_t count = taosHashGetSize(tsVnodesHash);
|
||||||
|
|
|
@ -66,6 +66,9 @@ static bool vnodeSetClosingStatusImp(SVnodeObj* pVnode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool vnodeSetClosingStatus(SVnodeObj* pVnode) {
|
bool vnodeSetClosingStatus(SVnodeObj* pVnode) {
|
||||||
|
if (pVnode->status == TAOS_VN_STATUS_CLOSING)
|
||||||
|
return true;
|
||||||
|
|
||||||
while (!vnodeSetClosingStatusImp(pVnode)) {
|
while (!vnodeSetClosingStatusImp(pVnode)) {
|
||||||
taosMsleep(1);
|
taosMsleep(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,11 @@ void vnodeNotifyRole(int32_t vgId, int8_t role) {
|
||||||
vTrace("vgId:%d, vnode not found while notify role", vgId);
|
vTrace("vgId:%d, vnode not found while notify role", vgId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (pVnode->dropped) {
|
||||||
|
vTrace("vgId:%d, vnode dropped while notify role", vgId);
|
||||||
|
vnodeRelease(pVnode);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
vInfo("vgId:%d, sync role changed from %s to %s", pVnode->vgId, syncRole[pVnode->role], syncRole[role]);
|
vInfo("vgId:%d, sync role changed from %s to %s", pVnode->vgId, syncRole[pVnode->role], syncRole[role]);
|
||||||
pVnode->role = role;
|
pVnode->role = role;
|
||||||
|
@ -75,6 +80,11 @@ void vnodeCtrlFlow(int32_t vgId, int32_t level) {
|
||||||
vTrace("vgId:%d, vnode not found while flow ctrl", vgId);
|
vTrace("vgId:%d, vnode not found while flow ctrl", vgId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (pVnode->dropped) {
|
||||||
|
vTrace("vgId:%d, vnode dropped while flow ctrl", vgId);
|
||||||
|
vnodeRelease(pVnode);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (pVnode->flowctrlLevel != level) {
|
if (pVnode->flowctrlLevel != level) {
|
||||||
vDebug("vgId:%d, set flowctrl level from %d to %d", pVnode->vgId, pVnode->flowctrlLevel, level);
|
vDebug("vgId:%d, set flowctrl level from %d to %d", pVnode->vgId, pVnode->flowctrlLevel, level);
|
||||||
|
@ -129,6 +139,7 @@ int32_t vnodeWriteToCache(int32_t vgId, void *wparam, int32_t qtype, void *rpara
|
||||||
SVnodeObj *pVnode = vnodeAcquire(vgId);
|
SVnodeObj *pVnode = vnodeAcquire(vgId);
|
||||||
if (pVnode == NULL) {
|
if (pVnode == NULL) {
|
||||||
vError("vgId:%d, vnode not found while write to cache", vgId);
|
vError("vgId:%d, vnode not found while write to cache", vgId);
|
||||||
|
vnodeRelease(pVnode);
|
||||||
return TSDB_CODE_VND_INVALID_VGROUP_ID;
|
return TSDB_CODE_VND_INVALID_VGROUP_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue