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

TD-1746

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