fix(tsdb): add desc check for clean file block.
This commit is contained in:
parent
f9a5485d52
commit
4cc0f5be59
|
@ -2347,53 +2347,50 @@ void updateComposedBlockInfo(STsdbReader* pReader, double el, STableBlockScanInf
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t buildComposedDataBlock(STsdbReader* pReader) {
|
static int32_t buildComposedDataBlock(STsdbReader* pReader) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
bool asc = ASCENDING_TRAVERSE(pReader->info.order);
|
bool asc = ASCENDING_TRAVERSE(pReader->info.order);
|
||||||
int64_t st = taosGetTimestampUs();
|
int64_t st = taosGetTimestampUs();
|
||||||
int32_t step = asc ? 1 : -1;
|
int32_t step = asc ? 1 : -1;
|
||||||
double el = 0;
|
double el = 0;
|
||||||
|
|
||||||
SSDataBlock* pResBlock = pReader->resBlockInfo.pResBlock;
|
SSDataBlock* pResBlock = pReader->resBlockInfo.pResBlock;
|
||||||
SFileDataBlockInfo* pBlockInfo = getCurrentBlockInfo(&pReader->status.blockIter);
|
SFileDataBlockInfo* pBlockInfo = getCurrentBlockInfo(&pReader->status.blockIter);
|
||||||
SSttBlockReader* pSttBlockReader = pReader->status.fileIter.pSttBlockReader;
|
SSttBlockReader* pSttBlockReader = pReader->status.fileIter.pSttBlockReader;
|
||||||
SBrinRecord* pRecord = &pBlockInfo->record;
|
|
||||||
SFileBlockDumpInfo* pDumpInfo = &pReader->status.fBlockDumpInfo;
|
SFileBlockDumpInfo* pDumpInfo = &pReader->status.fBlockDumpInfo;
|
||||||
|
SBrinRecord* pRecord = NULL;
|
||||||
|
|
||||||
STableBlockScanInfo* pBlockScanInfo = NULL;
|
STableBlockScanInfo* pBlockScanInfo = NULL;
|
||||||
if (pBlockInfo != NULL) {
|
if (pBlockInfo == NULL) {
|
||||||
if (pReader->pIgnoreTables && taosHashGet(*pReader->pIgnoreTables, &pBlockInfo->uid, sizeof(pBlockInfo->uid))) {
|
return 0;
|
||||||
setBlockAllDumped(pDumpInfo, pRecord->lastKey, pReader->info.order);
|
}
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
pBlockScanInfo = getTableBlockScanInfo(pReader->status.pTableMap, pBlockInfo->uid, pReader->idStr);
|
pRecord = &pBlockInfo->record;
|
||||||
if (pBlockScanInfo == NULL) {
|
|
||||||
goto _end;
|
|
||||||
}
|
|
||||||
|
|
||||||
pRecord = &pBlockInfo->record;
|
if (pReader->pIgnoreTables && taosHashGet(*pReader->pIgnoreTables, &pBlockInfo->uid, sizeof(pBlockInfo->uid))) {
|
||||||
TSDBKEY keyInBuf = getCurrentKeyInBuf(pBlockScanInfo, pReader);
|
setBlockAllDumped(pDumpInfo, pRecord->lastKey, pReader->info.order);
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
// it is a clean block, load it directly
|
pBlockScanInfo = getTableBlockScanInfo(pReader->status.pTableMap, pBlockInfo->uid, pReader->idStr);
|
||||||
int64_t cap = pReader->resBlockInfo.capacity;
|
if (pBlockScanInfo == NULL) {
|
||||||
if (isCleanFileDataBlock(pReader, pBlockInfo, pBlockScanInfo, keyInBuf) && (pRecord->numRow <= cap)) {
|
goto _end;
|
||||||
if (asc || (pBlockScanInfo->sttKeyInfo.status == STT_FILE_NO_DATA)) {
|
}
|
||||||
code = copyBlockDataToSDataBlock(pReader);
|
|
||||||
if (code) {
|
|
||||||
goto _end;
|
|
||||||
}
|
|
||||||
|
|
||||||
// record the last key value
|
pRecord = &pBlockInfo->record;
|
||||||
pBlockScanInfo->lastProcKey = asc ? pRecord->lastKey : pRecord->firstKey;
|
TSDBKEY keyInBuf = getCurrentKeyInBuf(pBlockScanInfo, pReader);
|
||||||
|
|
||||||
|
// it is a clean block, load it directly
|
||||||
|
int64_t cap = pReader->resBlockInfo.capacity;
|
||||||
|
if (isCleanFileDataBlock(pReader, pBlockInfo, pBlockScanInfo, keyInBuf) && (pRecord->numRow <= cap)) {
|
||||||
|
if (((asc && (pRecord->firstKey < keyInBuf.ts)) || (!asc && (pRecord->lastKey > keyInBuf.ts))) &&
|
||||||
|
(pBlockScanInfo->sttKeyInfo.status == STT_FILE_NO_DATA)) {
|
||||||
|
code = copyBlockDataToSDataBlock(pReader);
|
||||||
|
if (code) {
|
||||||
goto _end;
|
goto _end;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else { // file blocks not exist
|
// record the last key value
|
||||||
ASSERT(0);
|
pBlockScanInfo->lastProcKey = asc ? pRecord->lastKey : pRecord->firstKey;
|
||||||
pBlockScanInfo = *pReader->status.pTableIter;
|
goto _end;
|
||||||
if (pReader->pIgnoreTables &&
|
|
||||||
taosHashGet(*pReader->pIgnoreTables, &pBlockScanInfo->uid, sizeof(pBlockScanInfo->uid))) {
|
|
||||||
return code;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue