diff --git a/source/libs/index/inc/index_tfile.h b/source/libs/index/inc/index_tfile.h index cf6341ce9cd83712f8fb7cf5e0db136ced774c9a..b19b887e9f86a482634b8c0877c1e4c079ac9f44 100644 --- a/source/libs/index/inc/index_tfile.h +++ b/source/libs/index/inc/index_tfile.h @@ -66,6 +66,7 @@ typedef struct TFileWriter { uint32_t offset; } TFileWriter; +// multi reader and single write typedef struct TFileReader { T_REF_DECLARE() Fst* fst; diff --git a/source/libs/index/src/index_tfile.c b/source/libs/index/src/index_tfile.c index 9acd9f687019be78ab65f0775933cbfd6c22a32b..1cd5673faaf7f01980c803b2a26eee8e523ea8de 100644 --- a/source/libs/index/src/index_tfile.c +++ b/source/libs/index/src/index_tfile.c @@ -134,8 +134,15 @@ TFileReader* tfileCacheGet(TFileCache* tcache, TFileCacheKey* key) { void tfileCachePut(TFileCache* tcache, TFileCacheKey* key, TFileReader* reader) { char buf[128] = {0}; tfileSerialCacheKey(key, buf); - tfileReadRef(reader); + // remove last version index reader + TFileReader** p = taosHashGet(tcache->tableCache, buf, strlen(buf)); + if (*p != NULL) { + TFileReader* oldReader = *p; + taosHashRemove(tcache->tableCache, buf, strlen(buf)); + tfileReadUnRef(oldReader); + } + tfileReadRef(reader); taosHashPut(tcache->tableCache, buf, strlen(buf), &reader, sizeof(void*)); return; }