fix: pStatus->pTableIter is set to null when getting mem table time range

This commit is contained in:
slzhou 2023-11-29 12:26:32 +08:00
parent 4691a7767a
commit 09e314c3ae
1 changed files with 9 additions and 12 deletions

View File

@ -2520,18 +2520,15 @@ static void prepareDurationForNextFileSet(STsdbReader* pReader) {
STimeWindow winFid = {0}; STimeWindow winFid = {0};
tsdbFidKeyRange(fid, pReader->pTsdb->keepCfg.days, pReader->pTsdb->keepCfg.precision, &winFid.skey, &winFid.ekey); tsdbFidKeyRange(fid, pReader->pTsdb->keepCfg.days, pReader->pTsdb->keepCfg.precision, &winFid.skey, &winFid.ekey);
bool bProcMemPreFileset = false;
if (ASCENDING_TRAVERSE(pReader->info.order)) { if (ASCENDING_TRAVERSE(pReader->info.order)) {
bProcMemPreFileset = !(pReader->status.prevFilesetStartKey > pReader->status.memTableMaxKey || winFid.skey < pReader->status.memTableMinKey); pReader->status.bProcMemPreFileset = !(pReader->status.prevFilesetStartKey > pReader->status.memTableMaxKey || winFid.skey < pReader->status.memTableMinKey);
} else { } else {
bProcMemPreFileset = !(winFid.ekey > pReader->status.memTableMaxKey || pReader->status.prevFilesetEndKey < pReader->status.memTableMinKey); pReader->status.bProcMemPreFileset = !(winFid.ekey > pReader->status.memTableMaxKey || pReader->status.prevFilesetEndKey < pReader->status.memTableMinKey);
} }
if (bProcMemPreFileset) { if (pReader->status.bProcMemPreFileset) {
pReader->status.bProcMemPreFileset = true;
resetTableListIndex(&pReader->status); resetTableListIndex(&pReader->status);
} }
pReader->status.prevFilesetStartKey = winFid.skey; pReader->status.prevFilesetStartKey = winFid.skey;
pReader->status.prevFilesetEndKey = winFid.ekey; pReader->status.prevFilesetEndKey = winFid.ekey;
} }
@ -2978,7 +2975,7 @@ static int32_t buildBlockFromBufferSequentially(STsdbReader* pReader, int64_t en
if (!hasNexTable) { if (!hasNexTable) {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
pBlockScanInfo = pStatus->pTableIter; continue;
} }
initMemDataIterator(*pBlockScanInfo, pReader); initMemDataIterator(*pBlockScanInfo, pReader);
@ -4947,9 +4944,9 @@ static void getMemTableTimeRange(STsdbReader* pReader, int64_t* pMaxKey, int64_t
int64_t maxKey = INT64_MIN; int64_t maxKey = INT64_MIN;
int64_t minKey = INT64_MAX; int64_t minKey = INT64_MAX;
pStatus->pTableIter = tSimpleHashIterate(pStatus->pTableMap, NULL, &iter); void* pHashIter = tSimpleHashIterate(pStatus->pTableMap, NULL, &iter);
while (pStatus->pTableIter != NULL) { while (pHashIter!= NULL) {
STableBlockScanInfo* pBlockScanInfo = *(STableBlockScanInfo**)pStatus->pTableIter; STableBlockScanInfo* pBlockScanInfo = *(STableBlockScanInfo**)pHashIter;
STbData* d = NULL; STbData* d = NULL;
if (pReader->pReadSnap->pMem != NULL) { if (pReader->pReadSnap->pMem != NULL) {
@ -4978,7 +4975,7 @@ static void getMemTableTimeRange(STsdbReader* pReader, int64_t* pMaxKey, int64_t
} }
// current table is exhausted, let's try the next table // current table is exhausted, let's try the next table
pStatus->pTableIter = tSimpleHashIterate(pStatus->pTableMap, pStatus->pTableIter, &iter); pHashIter = tSimpleHashIterate(pStatus->pTableMap, pHashIter, &iter);
} }
*pMaxKey = maxKey; *pMaxKey = maxKey;