提交 fc074582 编写于 作者: H Hongze Cheng

more snapshot

上级 538f130a
...@@ -28,13 +28,15 @@ struct STsdbSnapReader { ...@@ -28,13 +28,15 @@ struct STsdbSnapReader {
SDataFReader* pDataFReader; SDataFReader* pDataFReader;
SArray* aBlockIdx; // SArray<SBlockIdx> SArray* aBlockIdx; // SArray<SBlockIdx>
SArray* aBlockL; // SArray<SBlockL> SArray* aBlockL; // SArray<SBlockL>
int32_t iBlockIdx;
SBlockIdx* pBlockIdx; SBlockIdx* pBlockIdx;
int32_t iBlockL; SBlockL* pBlockL;
SMapData mBlock; // SMapData<SBlock>
int32_t iBlock; int32_t iBlockIdx;
SBlockData oBlockData; int32_t iBlockL;
SBlockData nBlockData; SMapData mBlock; // SMapData<SBlock>
int32_t iBlock;
SBlockData oBlockData;
SBlockData nBlockData;
// for del file // for del file
int8_t delDone; int8_t delDone;
SDelFReader* pDelFReader; SDelFReader* pDelFReader;
...@@ -75,96 +77,42 @@ static int32_t tsdbSnapReadData(STsdbSnapReader* pReader, uint8_t** ppData) { ...@@ -75,96 +77,42 @@ static int32_t tsdbSnapReadData(STsdbSnapReader* pReader, uint8_t** ppData) {
} }
while (true) { while (true) {
#if 0 if (pReader->pBlockIdx && pReader->pBlockL) {
if (pReader->pBlockIdx == NULL) { } else if (pReader->pBlockIdx) {
if (pReader->iBlockIdx >= taosArrayGetSize(pReader->aBlockIdx)) { // may have problem (todo)
tsdbDataFReaderClose(&pReader->pDataFReader); while (pReader->iBlock < pReader->mBlock.nItem) {
break; SBlock block;
} tMapDataGetItemByIdx(&pReader->mBlock, pReader->iBlock, &block, tGetBlock);
pReader->pBlockIdx = (SBlockIdx*)taosArrayGet(pReader->aBlockIdx, pReader->iBlockIdx); if (block.minVer <= pReader->ever && block.maxVer >= pReader->sver) {
pReader->iBlockIdx++; // load data (todo)
}
code = tsdbReadBlock(pReader->pDataFReader, pReader->pBlockIdx, &pReader->mBlock);
if (code) goto _err;
pReader->iBlock = 0;
}
SBlock block;
SBlock* pBlock = &block;
while (true) {
if (pReader->iBlock >= pReader->mBlock.nItem) {
pReader->pBlockIdx = NULL;
break;
}
tMapDataGetItemByIdx(&pReader->mBlock, pReader->iBlock, pBlock, tGetBlock);
pReader->iBlock++;
if (pBlock->minVersion > pReader->ever || pBlock->maxVersion < pReader->sver) continue;
code = tsdbReadBlockData(pReader->pDataFReader, pReader->pBlockIdx, pBlock, &pReader->oBlockData, NULL, NULL);
if (code) goto _err;
// filter
tBlockDataReset(&pReader->nBlockData);
for (int32_t iColData = 0; iColData < taosArrayGetSize(pReader->oBlockData.aIdx); iColData++) {
SColData* pColDataO = tBlockDataGetColDataByIdx(&pReader->oBlockData, iColData);
SColData* pColDataN = NULL;
code = tBlockDataAddColData(&pReader->nBlockData, taosArrayGetSize(pReader->nBlockData.aIdx), &pColDataN);
if (code) goto _err;
tColDataInit(pColDataN, pColDataO->cid, pColDataO->type, pColDataO->smaOn);
}
for (int32_t iRow = 0; iRow < pReader->oBlockData.nRow; iRow++) {
TSDBROW row = tsdbRowFromBlockData(&pReader->oBlockData, iRow);
int64_t version = TSDBROW_VERSION(&row);
tsdbTrace("vgId:%d, vnode snapshot tsdb read for %s, %" PRId64 "(%" PRId64 " , %" PRId64 ")",
TD_VID(pReader->pTsdb->pVnode), pReader->pTsdb->path, version, pReader->sver, pReader->ever);
if (version < pReader->sver || version > pReader->ever) continue;
code = tBlockDataAppendRow(&pReader->nBlockData, &row, NULL); // next
if (code) goto _err; pReader->iBlock++;
}
if (pReader->nBlockData.nRow <= 0) { if (*ppData) goto _exit;
continue;
} }
} else if (pReader->pBlockL) {
while (pReader->pBlockL) {
if (pReader->pBlockL->minVer <= pReader->ever && pReader->pBlockL->maxVer >= pReader->sver) {
// load data (todo)
}
// org data // next
// compress data (todo) pReader->iBlockL++;
int32_t size = sizeof(TABLEID) + tPutBlockData(NULL, &pReader->nBlockData); if (pReader->iBlockL < taosArrayGetSize(pReader->aBlockL)) {
pReader->pBlockL = (SBlockL*)taosArrayGetSize(pReader->aBlockL);
} else {
pReader->pBlockL = NULL;
}
*ppData = taosMemoryMalloc(sizeof(SSnapDataHdr) + size); if (*ppData) goto _exit;
if (*ppData == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
goto _err;
} }
} else {
SSnapDataHdr* pHdr = (SSnapDataHdr*)(*ppData); tsdbDataFReaderClose(&pReader->pDataFReader);
pHdr->type = pReader->type; break;
pHdr->size = size;
TABLEID* pId = (TABLEID*)(&pHdr[1]);
pId->suid = pReader->pBlockIdx->suid;
pId->uid = pReader->pBlockIdx->uid;
tPutBlockData((uint8_t*)(&pId[1]), &pReader->nBlockData);
// tsdbInfo("vgId:%d, vnode snapshot read data for %s, fid:%d suid:%" PRId64 " uid:%" PRId64
// " iBlock:%d minVersion:%d maxVersion:%d nRow:%d out of %d size:%d",
// TD_VID(pTsdb->pVnode), pTsdb->path, pReader->fid, pReader->pBlockIdx->suid, pReader->pBlockIdx->uid,
// pReader->iBlock - 1, pBlock->minVersion, pBlock->maxVersion, pReader->nBlockData.nRow, pBlock->nRow,
// size);
goto _exit;
} }
#endif
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册