From cf30db879592f86aab9216146750eb5244d8a459 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 12 Apr 2024 17:52:52 +0800 Subject: [PATCH] fix(tsdb): fix invalid empty time window check. --- source/dnode/vnode/src/tsdb/tsdbMergeTree.c | 4 ++++ source/dnode/vnode/src/tsdb/tsdbRead2.c | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbMergeTree.c b/source/dnode/vnode/src/tsdb/tsdbMergeTree.c index cda5fe2fa1..322e46ee78 100644 --- a/source/dnode/vnode/src/tsdb/tsdbMergeTree.c +++ b/source/dnode/vnode/src/tsdb/tsdbMergeTree.c @@ -419,6 +419,8 @@ static int32_t loadSttStatisticsBlockData(SSttFileReader *pSttFileReader, SSttBl tValueDupPayload(&vLast); taosArrayPush(pBlockLoadInfo->info.pLastKey, &vLast); } + + ASSERT(taosArrayGetSize(pBlockLoadInfo->info.pLastKey) == taosArrayGetSize(pBlockLoadInfo->info.pFirstTs)); } } else { @@ -450,6 +452,8 @@ static int32_t loadSttStatisticsBlockData(SSttFileReader *pSttFileReader, SSttBl i += 1; } + + ASSERT(taosArrayGetSize(pBlockLoadInfo->info.pLastKey) == taosArrayGetSize(pBlockLoadInfo->info.pFirstTs)); } } } diff --git a/source/dnode/vnode/src/tsdb/tsdbRead2.c b/source/dnode/vnode/src/tsdb/tsdbRead2.c index 5fbfea1a7e..33a26ab3d5 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead2.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead2.c @@ -728,7 +728,7 @@ static int32_t loadFileBlockBrinInfo(STsdbReader* pReader, SArray* pIndexList, S STableBlockScanInfo* pScanInfo = getTableBlockScanInfo(pReader->status.pTableMap, uid, pReader->idStr); - // todo: here we should find the first timestamp that is greater than the lastProcKey + // here we should find the first timestamp that is greater than the lastProcKey // the window is an open interval NOW. if (asc) { w.skey = pScanInfo->lastProcKey.ts; @@ -736,9 +736,9 @@ static int32_t loadFileBlockBrinInfo(STsdbReader* pReader, SArray* pIndexList, S w.ekey = pScanInfo->lastProcKey.ts; } - if (/*isEmptyQueryTimeWindow(&w)*/ w.ekey - w.skey < 1) { // NOTE: specialized for open interval + // NOTE: specialized for open interval + if (((w.skey < INT64_MAX) && ((w.skey + 1) > w.ekey)) || (w.skey == INT64_MAX)) { k += 1; - if (k >= numOfTables) { break; } else {