fix(tsdb):clear the tsdb stt file reader flag when suspending the tsdbReader
This commit is contained in:
parent
f4cf898af7
commit
a5c8eaacaa
|
@ -4148,6 +4148,20 @@ void tsdbReaderClose2(STsdbReader* pReader) {
|
||||||
taosMemoryFreeClear(pReader);
|
taosMemoryFreeClear(pReader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void clearMemIterInfo(STableBlockScanInfo* pInfo) {
|
||||||
|
pInfo->iterInit = false;
|
||||||
|
pInfo->iter.hasVal = false;
|
||||||
|
pInfo->iiter.hasVal = false;
|
||||||
|
|
||||||
|
if (pInfo->iter.iter != NULL) {
|
||||||
|
pInfo->iter.iter = tsdbTbDataIterDestroy(pInfo->iter.iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pInfo->iiter.iter != NULL) {
|
||||||
|
pInfo->iiter.iter = tsdbTbDataIterDestroy(pInfo->iiter.iter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int32_t tsdbReaderSuspend2(STsdbReader* pReader) {
|
int32_t tsdbReaderSuspend2(STsdbReader* pReader) {
|
||||||
// save reader's base state & reset top state to be reconstructed from base state
|
// save reader's base state & reset top state to be reconstructed from base state
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
@ -4168,28 +4182,20 @@ int32_t tsdbReaderSuspend2(STsdbReader* pReader) {
|
||||||
tsdbDataFileReaderClose(&pReader->pFileReader);
|
tsdbDataFileReaderClose(&pReader->pFileReader);
|
||||||
|
|
||||||
SCostSummary* pCost = &pReader->cost;
|
SCostSummary* pCost = &pReader->cost;
|
||||||
|
|
||||||
pReader->status.pLDataIterArray = destroySttBlockReader(pReader->status.pLDataIterArray, &pCost->sttCost);
|
pReader->status.pLDataIterArray = destroySttBlockReader(pReader->status.pLDataIterArray, &pCost->sttCost);
|
||||||
pReader->status.pLDataIterArray = taosArrayInit(4, POINTER_BYTES);
|
pReader->status.pLDataIterArray = taosArrayInit(4, POINTER_BYTES);
|
||||||
|
|
||||||
// resetDataBlockScanInfo excluding lastKey
|
// resetDataBlockScanInfo excluding lastKey
|
||||||
STableBlockScanInfo** p = NULL;
|
STableBlockScanInfo** p = NULL;
|
||||||
int32_t iter = 0;
|
|
||||||
|
|
||||||
|
int32_t iter = 0;
|
||||||
while ((p = tSimpleHashIterate(pStatus->pTableMap, p, &iter)) != NULL) {
|
while ((p = tSimpleHashIterate(pStatus->pTableMap, p, &iter)) != NULL) {
|
||||||
STableBlockScanInfo* pInfo = *(STableBlockScanInfo**)p;
|
STableBlockScanInfo* pInfo = *(STableBlockScanInfo**)p;
|
||||||
|
clearMemIterInfo(pInfo);
|
||||||
pInfo->iterInit = false;
|
pInfo->sttKeyInfo.status = STT_FILE_READER_UNINIT;
|
||||||
pInfo->iter.hasVal = false;
|
|
||||||
pInfo->iiter.hasVal = false;
|
|
||||||
|
|
||||||
if (pInfo->iter.iter != NULL) {
|
|
||||||
pInfo->iter.iter = tsdbTbDataIterDestroy(pInfo->iter.iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pInfo->iiter.iter != NULL) {
|
|
||||||
pInfo->iiter.iter = tsdbTbDataIterDestroy(pInfo->iiter.iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
pInfo->delSkyline = taosArrayDestroy(pInfo->delSkyline);
|
pInfo->delSkyline = taosArrayDestroy(pInfo->delSkyline);
|
||||||
|
|
||||||
pInfo->pFileDelData = taosArrayDestroy(pInfo->pFileDelData);
|
pInfo->pFileDelData = taosArrayDestroy(pInfo->pFileDelData);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -4199,45 +4205,24 @@ int32_t tsdbReaderSuspend2(STsdbReader* pReader) {
|
||||||
|
|
||||||
while ((p = tSimpleHashIterate(pStatus->pTableMap, p, &iter)) != NULL) {
|
while ((p = tSimpleHashIterate(pStatus->pTableMap, p, &iter)) != NULL) {
|
||||||
STableBlockScanInfo* pInfo = *(STableBlockScanInfo**)p;
|
STableBlockScanInfo* pInfo = *(STableBlockScanInfo**)p;
|
||||||
|
clearMemIterInfo(pInfo);
|
||||||
pInfo->iterInit = false;
|
pInfo->sttKeyInfo.status = STT_FILE_READER_UNINIT;
|
||||||
pInfo->iter.hasVal = false;
|
|
||||||
pInfo->iiter.hasVal = false;
|
|
||||||
|
|
||||||
if (pInfo->iter.iter != NULL) {
|
|
||||||
pInfo->iter.iter = tsdbTbDataIterDestroy(pInfo->iter.iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pInfo->iiter.iter != NULL) {
|
|
||||||
pInfo->iiter.iter = tsdbTbDataIterDestroy(pInfo->iiter.iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
pInfo->delSkyline = taosArrayDestroy(pInfo->delSkyline);
|
pInfo->delSkyline = taosArrayDestroy(pInfo->delSkyline);
|
||||||
}
|
}
|
||||||
|
|
||||||
pBlockScanInfo = pStatus->pTableIter == NULL ? NULL : *pStatus->pTableIter;
|
pBlockScanInfo = (pStatus->pTableIter == NULL) ? NULL : *pStatus->pTableIter;
|
||||||
if (pBlockScanInfo) {
|
if (pBlockScanInfo) {
|
||||||
// save lastKey to restore memory iterator
|
// save lastKey to restore memory iterator
|
||||||
STimeWindow w = pReader->resBlockInfo.pResBlock->info.window;
|
STimeWindow w = pReader->resBlockInfo.pResBlock->info.window;
|
||||||
pBlockScanInfo->lastProcKey = ASCENDING_TRAVERSE(pReader->info.order) ? w.ekey : w.skey;
|
pBlockScanInfo->lastProcKey = ASCENDING_TRAVERSE(pReader->info.order) ? w.ekey : w.skey;
|
||||||
|
|
||||||
// reset current current table's data block scan info,
|
clearMemIterInfo(pBlockScanInfo);
|
||||||
pBlockScanInfo->iterInit = false;
|
pBlockScanInfo->sttKeyInfo.status = STT_FILE_READER_UNINIT;
|
||||||
|
pBlockScanInfo->delSkyline = taosArrayDestroy(pBlockScanInfo->delSkyline);
|
||||||
pBlockScanInfo->iter.hasVal = false;
|
|
||||||
pBlockScanInfo->iiter.hasVal = false;
|
|
||||||
if (pBlockScanInfo->iter.iter != NULL) {
|
|
||||||
pBlockScanInfo->iter.iter = tsdbTbDataIterDestroy(pBlockScanInfo->iter.iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pBlockScanInfo->iiter.iter != NULL) {
|
|
||||||
pBlockScanInfo->iiter.iter = tsdbTbDataIterDestroy(pBlockScanInfo->iiter.iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
pBlockScanInfo->pBlockList = taosArrayDestroy(pBlockScanInfo->pBlockList);
|
pBlockScanInfo->pBlockList = taosArrayDestroy(pBlockScanInfo->pBlockList);
|
||||||
pBlockScanInfo->pBlockIdxList = taosArrayDestroy(pBlockScanInfo->pBlockIdxList);
|
pBlockScanInfo->pBlockIdxList = taosArrayDestroy(pBlockScanInfo->pBlockIdxList);
|
||||||
// TODO: keep skyline for reuse
|
// TODO: keep skyline for reuse
|
||||||
pBlockScanInfo->delSkyline = taosArrayDestroy(pBlockScanInfo->delSkyline);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -210,6 +210,7 @@ void clearBlockScanInfo(STableBlockScanInfo* p) {
|
||||||
p->iterInit = false;
|
p->iterInit = false;
|
||||||
p->iter.hasVal = false;
|
p->iter.hasVal = false;
|
||||||
p->iiter.hasVal = false;
|
p->iiter.hasVal = false;
|
||||||
|
p->sttKeyInfo.status = STT_FILE_READER_UNINIT;
|
||||||
|
|
||||||
if (p->iter.iter != NULL) {
|
if (p->iter.iter != NULL) {
|
||||||
p->iter.iter = tsdbTbDataIterDestroy(p->iter.iter);
|
p->iter.iter = tsdbTbDataIterDestroy(p->iter.iter);
|
||||||
|
|
Loading…
Reference in New Issue