enhance: prepare duration for next fileset
This commit is contained in:
parent
765b8384c0
commit
8a79df1113
|
@ -2509,6 +2509,33 @@ TSDBKEY getCurrentKeyInBuf(STableBlockScanInfo* pScanInfo, STsdbReader* pReader)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void prepareDurationForNextFileSet(STsdbReader* pReader) {
|
||||||
|
if (pReader->status.bProcMemFirstFileset) {
|
||||||
|
pReader->status.prevFilesetStartKey = INT64_MIN;
|
||||||
|
pReader->status.prevFilesetEndKey = INT64_MAX;
|
||||||
|
pReader->status.bProcMemFirstFileset = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t fid = pReader->status.pCurrentFileset->fid;
|
||||||
|
STimeWindow winFid = {0};
|
||||||
|
tsdbFidKeyRange(fid, pReader->pTsdb->keepCfg.days, pReader->pTsdb->keepCfg.precision, &winFid.skey, &winFid.ekey);
|
||||||
|
|
||||||
|
bool bProcMemPreFileset = false;
|
||||||
|
if (ASCENDING_TRAVERSE(pReader->info.order)) {
|
||||||
|
bProcMemPreFileset = !(pReader->status.prevFilesetStartKey > pReader->status.memTableMaxKey || winFid.skey < pReader->status.memTableMinKey);
|
||||||
|
} else {
|
||||||
|
bProcMemPreFileset = !(winFid.ekey > pReader->status.memTableMaxKey || pReader->status.prevFilesetEndKey < pReader->status.memTableMinKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bProcMemPreFileset) {
|
||||||
|
pReader->status.bProcMemPreFileset = true;
|
||||||
|
resetTableListIndex(&pReader->status);
|
||||||
|
}
|
||||||
|
|
||||||
|
pReader->status.prevFilesetStartKey = winFid.skey;
|
||||||
|
pReader->status.prevFilesetEndKey = winFid.ekey;
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t moveToNextFile(STsdbReader* pReader, SBlockNumber* pBlockNum, SArray* pTableList) {
|
static int32_t moveToNextFile(STsdbReader* pReader, SBlockNumber* pBlockNum, SArray* pTableList) {
|
||||||
SReaderStatus* pStatus = &pReader->status;
|
SReaderStatus* pStatus = &pReader->status;
|
||||||
pBlockNum->numOfBlocks = 0;
|
pBlockNum->numOfBlocks = 0;
|
||||||
|
@ -2551,17 +2578,7 @@ static int32_t moveToNextFile(STsdbReader* pReader, SBlockNumber* pBlockNum, SAr
|
||||||
|
|
||||||
if (pBlockNum->numOfBlocks + pBlockNum->numOfSttFiles > 0) {
|
if (pBlockNum->numOfBlocks + pBlockNum->numOfSttFiles > 0) {
|
||||||
if (pReader->bDurationOrder) {
|
if (pReader->bDurationOrder) {
|
||||||
int32_t fid = pReader->status.pCurrentFileset->fid;
|
prepareDurationForNextFileSet(pReader);
|
||||||
STimeWindow win = {0};
|
|
||||||
tsdbFidKeyRange(fid, pReader->pTsdb->keepCfg.days, pReader->pTsdb->keepCfg.precision, &win.skey, &win.ekey);
|
|
||||||
|
|
||||||
if ((ASCENDING_TRAVERSE(pReader->info.order) &&
|
|
||||||
win.skey >= pReader->status.memTableMinKey && win.skey <= pReader->status.memTableMaxKey) ||
|
|
||||||
(!ASCENDING_TRAVERSE(pReader->info.order) &&
|
|
||||||
win.ekey >= pReader->status.memTableMinKey && win.ekey <= pReader->status.memTableMaxKey)) {
|
|
||||||
pReader->status.bProcMemPreFileset = true;
|
|
||||||
resetTableListIndex(&pReader->status);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,6 +209,9 @@ typedef struct SReaderStatus {
|
||||||
bool bProcMemPreFileset;
|
bool bProcMemPreFileset;
|
||||||
int64_t memTableMaxKey;
|
int64_t memTableMaxKey;
|
||||||
int64_t memTableMinKey;
|
int64_t memTableMinKey;
|
||||||
|
int64_t prevFilesetStartKey;
|
||||||
|
int64_t prevFilesetEndKey;
|
||||||
|
bool bProcMemFirstFileset;
|
||||||
} SReaderStatus;
|
} SReaderStatus;
|
||||||
|
|
||||||
struct STsdbReader {
|
struct STsdbReader {
|
||||||
|
|
Loading…
Reference in New Issue