From f8c9ae50b822d859452d19000186d72dcc9553d5 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 9 Jan 2023 16:06:07 +0800 Subject: [PATCH] more code --- source/dnode/vnode/src/inc/vnodeInt.h | 2 +- source/dnode/vnode/src/tsdb/tsdbMemTable.c | 11 +---------- source/dnode/vnode/src/vnd/vnodeBufPool.c | 6 ++++-- source/dnode/vnode/src/vnd/vnodeCommit.c | 15 ++++++++++++--- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/source/dnode/vnode/src/inc/vnodeInt.h b/source/dnode/vnode/src/inc/vnodeInt.h index ba46d84667..e8771f15b5 100644 --- a/source/dnode/vnode/src/inc/vnodeInt.h +++ b/source/dnode/vnode/src/inc/vnodeInt.h @@ -109,7 +109,7 @@ void vnodeBufPoolUnRef(SVBufPool* pPool); int vnodeDecodeInfo(uint8_t* pData, SVnodeInfo* pInfo); int32_t vnodeBufPoolRegisterQuery(SVBufPool* pPool, void* pQHandle, _query_reseek_func_t reseekFn); -int32_t vnodeBufPoolDeregisterQuery(SVBufPool* pPool); +int32_t vnodeBufPoolDeregisterQuery(SVBufPool* pPool, SQueryNode* pQNode); // meta typedef struct SMCtbCursor SMCtbCursor; diff --git a/source/dnode/vnode/src/tsdb/tsdbMemTable.c b/source/dnode/vnode/src/tsdb/tsdbMemTable.c index 0b762cca1e..f661bf5ddc 100644 --- a/source/dnode/vnode/src/tsdb/tsdbMemTable.c +++ b/source/dnode/vnode/src/tsdb/tsdbMemTable.c @@ -765,18 +765,9 @@ int32_t tsdbUnrefMemTable(SMemTable *pMemTable, SQueryNode *pNode) { int32_t code = 0; if (pNode) { - vnodeBufPoolDeregisterQuery(pMemTable->pPool); + vnodeBufPoolDeregisterQuery(pMemTable->pPool, pNode); } -#if 0 - // unregister handle (todo: take concurrency in consideration) - if (pNode) { - pNode->pNext->ppNext = pNode->ppNext; - *pNode->ppNext = pNode->pNext; - taosMemoryFree(pNode); - } -#endif - int32_t nRef = atomic_sub_fetch_32(&pMemTable->nRef, 1); if (nRef == 0) { tsdbMemTableDestroy(pMemTable); diff --git a/source/dnode/vnode/src/vnd/vnodeBufPool.c b/source/dnode/vnode/src/vnd/vnodeBufPool.c index e519c69d44..00706ad12d 100644 --- a/source/dnode/vnode/src/vnd/vnodeBufPool.c +++ b/source/dnode/vnode/src/vnd/vnodeBufPool.c @@ -290,12 +290,14 @@ _exit: return code; } -int32_t vnodeBufPoolDeregisterQuery(SVBufPool *pPool) { +int32_t vnodeBufPoolDeregisterQuery(SVBufPool *pPool, SQueryNode *pQNode) { int32_t code = 0; taosThreadMutexLock(&pPool->mutex); - ASSERT(0); + pQNode->pNext->ppNext = pQNode->ppNext; + *pQNode->ppNext = pQNode->pNext; + pPool->nQuery--; taosThreadMutexUnlock(&pPool->mutex); diff --git a/source/dnode/vnode/src/vnd/vnodeCommit.c b/source/dnode/vnode/src/vnd/vnodeCommit.c index f16f9ae1ef..8cc50876cb 100644 --- a/source/dnode/vnode/src/vnd/vnodeCommit.c +++ b/source/dnode/vnode/src/vnd/vnodeCommit.c @@ -45,10 +45,19 @@ static int32_t vnodeTryRecycleBufPool(SVnode *pVnode) { } pVnode->onRecycle->recycleNext = pVnode->onRecycle->recyclePrev = NULL; - { - // TODO: do recycle the buffer pool - ASSERT(0); + // do recycle the buffer pool + SVBufPool *pPool = pVnode->onRecycle; + + taosThreadMutexLock(&pPool->mutex); + + SQueryNode *pNode = pPool->qList.pNext; + while (pNode != &pPool->qList) { + // TODO: refact/finish here + pNode->reseek(pNode->pQHandle); + pNode = pNode->pNext; } + + taosThreadMutexUnlock(&pPool->mutex); } else { vDebug("vgId:%d no recyclable buffer pool", TD_VID(pVnode)); }