From c714138e9e134a5ba811c1c47c9231efe94038ad Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 30 Jun 2023 14:37:26 +0800 Subject: [PATCH] fix snapshot problem --- source/dnode/vnode/src/tsdb/tsdbSnapshot.c | 37 ++++++++++++++++++---- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c index d7daa9cde4..aa1eb90069 100644 --- a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c +++ b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c @@ -281,21 +281,34 @@ _exit: } static int32_t tsdbSnapReadTimeSeriesData(STsdbSnapReader* reader, uint8_t** data) { - int32_t code = 0; - int32_t lino = 0; + int32_t code = 0; + int32_t lino = 0; + SMetaInfo info; tBlockDataReset(reader->blockData); + TABLEID tbid[1] = {0}; for (SRowInfo* row; (row = tsdbIterMergerGetData(reader->dataIterMerger));) { + // skip dropped table + if (row->uid != tbid->uid) { + tbid->suid = row->suid; + tbid->uid = row->uid; + if (metaGetInfo(reader->tsdb->pVnode->pMeta, tbid->uid, &info, NULL) != 0) { + code = tsdbIterMergerSkipTableData(reader->dataIterMerger, tbid); + TSDB_CHECK_CODE(code, lino, _exit); + continue; + } + } + if (reader->blockData->suid == 0 && reader->blockData->uid == 0) { code = tsdbUpdateSkmTb(reader->tsdb, (TABLEID*)row, reader->skmTb); TSDB_CHECK_CODE(code, lino, _exit); - TABLEID tbid = { + TABLEID tbid1 = { .suid = row->suid, .uid = row->suid ? 0 : row->uid, }; - code = tBlockDataInit(reader->blockData, &tbid, reader->skmTb->pTSchema, NULL, 0); + code = tBlockDataInit(reader->blockData, &tbid1, reader->skmTb->pTSchema, NULL, 0); TSDB_CHECK_CODE(code, lino, _exit); } @@ -360,12 +373,24 @@ _exit: } static int32_t tsdbSnapReadTombData(STsdbSnapReader* reader, uint8_t** data) { - int32_t code = 0; - int32_t lino = 0; + int32_t code = 0; + int32_t lino = 0; + SMetaInfo info; tTombBlockClear(reader->tombBlock); + TABLEID tbid[1] = {0}; for (STombRecord* record; (record = tsdbIterMergerGetTombRecord(reader->tombIterMerger)) != NULL;) { + if (record->uid != tbid->uid) { + tbid->suid = record->suid; + tbid->uid = record->uid; + if (metaGetInfo(reader->tsdb->pVnode->pMeta, tbid->uid, &info, NULL) != 0) { + code = tsdbIterMergerSkipTombData(reader->tombIterMerger, tbid); + TSDB_CHECK_CODE(code, lino, _exit); + continue; + } + } + code = tTombBlockPut(reader->tombBlock, record); TSDB_CHECK_CODE(code, lino, _exit);