refact: add tsdbSnapRAWReaderIterNext

This commit is contained in:
Benguang Zhao 2023-11-24 16:15:33 +08:00
parent a504007ade
commit ae60e1f810
1 changed files with 21 additions and 20 deletions

View File

@ -23,8 +23,6 @@
typedef struct SDataFileRAWReaderIter { typedef struct SDataFileRAWReaderIter {
int32_t count; int32_t count;
int32_t idx; int32_t idx;
int64_t offset;
int64_t size;
} SDataFileRAWReaderIter; } SDataFileRAWReaderIter;
typedef struct STsdbSnapRAWReader { typedef struct STsdbSnapRAWReader {
@ -164,9 +162,7 @@ static int32_t tsdbSnapRAWReadFileSetOpenIter(STsdbSnapRAWReader* reader) {
int32_t lino = 0; int32_t lino = 0;
reader->dataIter->count = TARRAY2_SIZE(reader->dataReaderArr); reader->dataIter->count = TARRAY2_SIZE(reader->dataReaderArr);
reader->dataIter->idx = -1; reader->dataIter->idx = 0;
reader->dataIter->offset = 0;
reader->dataIter->size = 0;
_exit: _exit:
if (code) { if (code) {
@ -178,8 +174,6 @@ _exit:
static int32_t tsdbSnapRAWReadFileSetCloseIter(STsdbSnapRAWReader* reader) { static int32_t tsdbSnapRAWReadFileSetCloseIter(STsdbSnapRAWReader* reader) {
reader->dataIter->count = 0; reader->dataIter->count = 0;
reader->dataIter->idx = 0; reader->dataIter->idx = 0;
reader->dataIter->offset = 0;
reader->dataIter->size = 0;
return 0; return 0;
} }
@ -188,23 +182,30 @@ static int64_t tsdbSnapRAWReadPeek(SDataFileRAWReader* reader) {
return size; return size;
} }
static SDataFileRAWReader* tsdbSnapRAWReaderIterNext(STsdbSnapRAWReader* reader) {
ASSERT(reader->dataIter->idx <= reader->dataIter->count);
while (reader->dataIter->idx < reader->dataIter->count) {
SDataFileRAWReader* dataReader = TARRAY2_GET(reader->dataReaderArr, reader->dataIter->idx);
ASSERT(dataReader);
if (dataReader->ctx->offset < dataReader->config->file.size) {
return dataReader;
}
reader->dataIter->idx++;
}
return NULL;
}
static int32_t tsdbSnapRAWReadNext(STsdbSnapRAWReader* reader, SSnapDataHdr** ppData) { static int32_t tsdbSnapRAWReadNext(STsdbSnapRAWReader* reader, SSnapDataHdr** ppData) {
int32_t code = 0; int32_t code = 0;
int32_t lino = 0; int32_t lino = 0;
int8_t type = reader->type;
ppData[0] = NULL; ppData[0] = NULL;
ASSERT(reader->dataIter->offset <= reader->dataIter->size); SDataFileRAWReader* dataReader = tsdbSnapRAWReaderIterNext(reader);
ASSERT(reader->dataIter->idx <= reader->dataIter->count); if (dataReader == NULL) {
// dataReader
if (reader->dataIter->offset == reader->dataIter->size && reader->dataIter->idx < reader->dataIter->count) {
reader->dataIter->idx++;
}
if (reader->dataIter->idx == reader->dataIter->count) {
return 0; return 0;
} }
int8_t type = reader->type;
SDataFileRAWReader* dataReader = TARRAY2_GET(reader->dataReaderArr, reader->dataIter->idx);
// prepare // prepare
int64_t dataLength = tsdbSnapRAWReadPeek(dataReader); int64_t dataLength = tsdbSnapRAWReadPeek(dataReader);
@ -219,18 +220,18 @@ static int32_t tsdbSnapRAWReadNext(STsdbSnapRAWReader* reader, SSnapDataHdr** pp
pHdr->type = type; pHdr->type = type;
pHdr->size = sizeof(STsdbDataRAWBlockHeader) + dataLength; pHdr->size = sizeof(STsdbDataRAWBlockHeader) + dataLength;
// read
STsdbDataRAWBlockHeader* pBlock = (void*)pHdr->data; STsdbDataRAWBlockHeader* pBlock = (void*)pHdr->data;
pBlock->offset = dataReader->ctx->offset; pBlock->offset = dataReader->ctx->offset;
pBlock->dataLength = dataLength; pBlock->dataLength = dataLength;
// read
code = tsdbDataFileRAWReadBlockData(dataReader, pBlock); code = tsdbDataFileRAWReadBlockData(dataReader, pBlock);
TSDB_CHECK_CODE(code, lino, _exit); TSDB_CHECK_CODE(code, lino, _exit);
// finish // finish
reader->dataIter->offset += pBlock->dataLength; dataReader->ctx->offset += pBlock->dataLength;
ASSERT(dataReader->ctx->offset <= dataReader->config->file.size);
ppData[0] = pBuf; ppData[0] = pBuf;
ASSERT(reader->dataIter->offset <= reader->dataIter->size);
_exit: _exit:
if (code) { if (code) {