From d8aacdf2517e87c3caf8e0c3447576b86bf81183 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Tue, 28 Jun 2022 15:26:44 +0800 Subject: [PATCH] tsdbCache/last: draft framework for last cols loading --- source/dnode/vnode/src/tsdb/tsdbCache.c | 61 ++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index fe9d320f6f..8367a0c491 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -83,6 +83,38 @@ int32_t tsdbCacheInsertLastrow(SLRUCache *pCache, tb_uid_t uid, STSRow *row) { return code; } +int32_t tsdbCacheInsertLast(SLRUCache *pCache, tb_uid_t uid, STSRow *row) { + int32_t code = 0; + STSRow *cacheRow = NULL; + char key[32] = {0}; + int keyLen = 0; + + getTableCacheKey(uid, "l", key, &keyLen); + LRUHandle *h = taosLRUCacheLookup(pCache, key, keyLen); + if (h) { + cacheRow = (STSRow *)taosLRUCacheValue(pCache, h); + if (row->ts >= cacheRow->ts) { + if (TD_ROW_LEN(row) <= TD_ROW_LEN(cacheRow)) { + tdRowCpy(cacheRow, row); + } else { + tsdbCacheDeleteLastrow(pCache, uid); + tsdbCacheInsertLastrow(pCache, uid, row); + } + } + } else { + cacheRow = tdRowDup(row); + + _taos_lru_deleter_t deleter = deleteTableCacheLastrow; + LRUStatus status = + taosLRUCacheInsert(pCache, key, keyLen, cacheRow, TD_ROW_LEN(cacheRow), deleter, NULL, TAOS_LRU_PRIORITY_LOW); + if (status != TAOS_LRU_STATUS_OK) { + code = -1; + } + } + + return code; +} + static tb_uid_t getTableSuidByUid(tb_uid_t uid, STsdb *pTsdb) { tb_uid_t suid = 0; @@ -139,7 +171,7 @@ static int32_t getTableDelDataFromDelIdx(SDelFReader *pDelReader, SDelIdx *pDelI if (pDelIdx) { tMapDataReset(&delDataMap); - code = tsdbReadDelData(pDelReader, pDelIdx, &delDataMap, NULL); + // code = tsdbReadDelData(pDelReader, pDelIdx, &delDataMap, NULL); if (code) goto _err; for (int32_t iDelData = 0; iDelData < delDataMap.nItem; ++iDelData) { @@ -213,7 +245,7 @@ static int32_t getTableDelIdx(SDelFReader *pDelFReader, tb_uid_t suid, tb_uid_t SDelIdx idx = {.suid = suid, .uid = uid}; tMapDataReset(&delIdxMap); - code = tsdbReadDelIdx(pDelFReader, &delIdxMap, NULL); + // code = tsdbReadDelIdx(pDelFReader, &delIdxMap, NULL); if (code) goto _err; code = tMapDataSearch(&delIdxMap, &idx, tGetDelIdx, tCmprDelIdx, pDelIdx); @@ -711,6 +743,31 @@ int32_t tsdbCacheGetLastrow(SLRUCache *pCache, tb_uid_t uid, STsdb *pTsdb, STSRo return code; } +int32_t tsdbCacheGetLast(SLRUCache *pCache, tb_uid_t uid, STsdb *pTsdb, STSRow **ppRow) { + int32_t code = 0; + char key[32] = {0}; + int keyLen = 0; + + getTableCacheKey(uid, "l", key, &keyLen); + LRUHandle *h = taosLRUCacheLookup(pCache, key, keyLen); + if (h) { + *ppRow = (STSRow *)taosLRUCacheValue(pCache, h); + } else { + STSRow *pRow = NULL; + // code = mergeLast(uid, pTsdb, &pRow); + // if table's empty or error, return code of -1 + if (code < 0 || pRow == NULL) { + return -1; + } + + tsdbCacheInsertLast(pCache, uid, pRow); + LRUHandle *h = taosLRUCacheLookup(pCache, key, keyLen); + *ppRow = (STSRow *)taosLRUCacheValue(pCache, h); + } + + return code; +} + int32_t tsdbCacheDeleteLastrow(SLRUCache *pCache, tb_uid_t uid) { int32_t code = 0; char key[32] = {0}; -- GitLab