提交 b438586a 编写于 作者: S Shengliang Guan

TD-1746

上级 7a9e1769
......@@ -216,8 +216,8 @@ static bool balanceCheckVgroupReady(SVgObj *pVgroup, SVnodeGid *pRmVnode) {
SVnodeGid *pVnode = pVgroup->vnodeGid + i;
if (pVnode == pRmVnode) continue;
mTrace("vgId:%d, change vgroup status, dnode:%d status:%d", pVgroup->vgId, pVnode->pDnode->dnodeId,
pVnode->pDnode->status);
mTrace("vgId:%d, check vgroup status, dnode:%d status:%d, vnode role:%s", pVgroup->vgId, pVnode->pDnode->dnodeId,
pVnode->pDnode->status, syncRole[pVnode->role]);
if (pVnode->pDnode->status == TAOS_DN_STATUS_DROPPING) continue;
if (pVnode->pDnode->status == TAOS_DN_STATUS_OFFLINE) continue;
......
......@@ -379,9 +379,15 @@ void vnodeRelease(void *pVnodeRaw) {
return;
}
vTrace("vgId:%d, vnode will be destroyed, refCount:%d pVnode:%p data:%p", vgId, refCount, pVnode, pVnode->ppVnode);
void **ppVnode = pVnode->ppVnode;
SVnodeObj pTempVnode = *pVnode;
memset(pVnode, 0, sizeof(SVnodeObj));
pVnode = &pTempVnode;
if (ppVnode != NULL) {
taosCacheRelease(tsDnodeVnodesCache, (void **)(&ppVnode), false);
taosCacheRelease(tsDnodeVnodesCache, (void **)(&ppVnode), true);
}
if (pVnode->qMgmt) {
......@@ -436,9 +442,12 @@ void vnodeRelease(void *pVnodeRaw) {
}
tsem_destroy(&pVnode->sem);
free(pVnode);
int32_t count = taosHashGetSize(tsDnodeVnodesCache->pHashTable);
int32_t count = 0;
if (tsDnodeVnodesCache) {
count = taosHashGetSize(tsDnodeVnodesCache->pHashTable);
}
vDebug("vgId:%d, vnode is released, vnodes:%d", vgId, count);
}
......@@ -1055,5 +1064,5 @@ PARSE_OVER:
static void vnodeFreeVnodeObj(void *data) {
SVnodeObj *pVnode = *(SVnodeObj **)data;
vDebug("vgId:%d, vnode is destroyed, pVnode:%p data:%p", pVnode->vgId, pVnode, pVnode->ppVnode);
//taosTFree(pVnode);
taosTFree(pVnode);
}
\ No newline at end of file
......@@ -80,12 +80,12 @@ int32_t vnodeProcessRead(void *param, SReadMsg *pRead) {
if (code == TSDB_CODE_APP_NOT_READY && pRead->rpcMsg.msgType == TSDB_MSG_TYPE_QUERY) {
// After the fetch request enters the vnode queue
// If the vnode cannot provide services, the following operations are still required
// Or there will be a deadlock
// Or, there will be a deadlock
void **qhandle = (void **)pRead->pCont;
vError("QInfo:%p msg:%p will be killed for vstatus is %s", *qhandle, pRead, vnodeStatus[pVnode->status]);
qKillQuery(*qhandle);
qReleaseQInfo(pVnode->qMgmt, (void **)&qhandle, true);
// qKillQuery(*qhandle);
// qReleaseQInfo(pVnode->qMgmt, (void **)&qhandle, true);
return TSDB_CODE_APP_NOT_READY;
} else {
return code;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册