From 876ea12bfa509997fcfdf07759d4d4f8cd66b7e0 Mon Sep 17 00:00:00 2001 From: wangjiaming0909 <604227650@qq.com> Date: Tue, 14 May 2024 15:20:49 +0800 Subject: [PATCH] fix get table meta without meta lock --- source/libs/catalog/src/ctgCache.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/libs/catalog/src/ctgCache.c b/source/libs/catalog/src/ctgCache.c index 7d392346ad..9f9f783458 100644 --- a/source/libs/catalog/src/ctgCache.c +++ b/source/libs/catalog/src/ctgCache.c @@ -3226,14 +3226,24 @@ int32_t ctgGetTbTSMAFromCache(SCatalog* pCtg, SCtgTbTSMACtx* pCtx, int32_t dbIdx // get tb cache pName = taosArrayGet(pList, i); pTbCache = taosHashAcquire(dbCache->tbCache, pName->tname, strlen(pName->tname)); - if (!pTbCache || !pTbCache->pMeta) { + if (!pTbCache) { ctgDebug("tb: %s.%s not in cache", dbFName, pName->tname); ctgAddTSMAFetch(&pCtx->pFetches, dbIdx, i, fetchIdx, baseResIdx + i, flag, FETCH_TSMA_SOURCE_TB_META, NULL); taosArrayPush(pCtx->pResList, &(SMetaRes){0}); continue; } + CTG_LOCK(CTG_READ, &pTbCache->metaLock); + if (!pTbCache->pMeta) { + CTG_UNLOCK(CTG_READ, &pTbCache->metaLock); + ctgDebug("tb: %s.%s not in cache", dbFName, pName->tname); + ctgAddTSMAFetch(&pCtx->pFetches, dbIdx, i, fetchIdx, baseResIdx + i, flag, FETCH_TSMA_SOURCE_TB_META, NULL); + taosArrayPush(pCtx->pResList, &(SMetaRes){0}); + taosHashRelease(dbCache->tbCache, pTbCache); + continue; + } uint64_t suid = pTbCache->pMeta->suid; int8_t tbType = pTbCache->pMeta->tableType; + CTG_UNLOCK(CTG_READ, &pTbCache->metaLock); taosHashRelease(dbCache->tbCache, pTbCache); SName tsmaSourceTbName = *pName;