From 9fbbb25aea2f79bf2d2c05775dad400616c47ae2 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 24 May 2022 09:21:14 +0000 Subject: [PATCH] feat: vnode snapshot --- source/dnode/vnode/inc/vnode.h | 2 +- source/dnode/vnode/src/vnd/vnodeSnapshot.c | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index 1b8fe71fb8..6026245174 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -67,7 +67,7 @@ void vnodeGetSnapshot(SVnode *pVnode, SSnapshot *pSnapshot); void vnodeGetInfo(SVnode *pVnode, const char **dbname, int32_t *vgId); int32_t vnodeSnapshotReaderOpen(SVnode *pVnode, SVSnapshotReader **ppReader, int64_t sver, int64_t ever); int32_t vnodeSnapshotReaderClose(SVSnapshotReader *pReader); -int32_t vnodeSnapshotRead(SVSnapshotReader *pReader, void **ppData, uint32_t *nData); +int32_t vnodeSnapshotRead(SVSnapshotReader *pReader, const void **ppData, uint32_t *nData); // meta typedef struct SMeta SMeta; // todo: remove diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c index 67d9c120db..5e451e4142 100644 --- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c +++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c @@ -23,6 +23,8 @@ struct SVSnapshotReader { int8_t isTsdbEnd; SMetaSnapshotReader *pMetaReader; STsdbSnapshotReader *pTsdbReader; + void *pData; + int32_t nData; }; int32_t vnodeSnapshotReaderOpen(SVnode *pVnode, SVSnapshotReader **ppReader, int64_t sver, int64_t ever) { @@ -61,6 +63,7 @@ _err: int32_t vnodeSnapshotReaderClose(SVSnapshotReader *pReader) { if (pReader) { + vnodeFree(pReader->pData); tsdbSnapshotReaderClose(pReader->pTsdbReader); metaSnapshotReaderClose(pReader->pMetaReader); taosMemoryFree(pReader); @@ -68,11 +71,11 @@ int32_t vnodeSnapshotReaderClose(SVSnapshotReader *pReader) { return 0; } -int32_t vnodeSnapshotRead(SVSnapshotReader *pReader, void **ppData, uint32_t *nData) { +int32_t vnodeSnapshotRead(SVSnapshotReader *pReader, const void **ppData, uint32_t *nData) { int32_t code = 0; if (!pReader->isMetaEnd) { - code = metaSnapshotRead(pReader->pMetaReader, ppData, nData); + code = metaSnapshotRead(pReader->pMetaReader, &pReader->pData, &pReader->pData); if (code) { if (code == TSDB_CODE_VND_READ_END) { pReader->isMetaEnd = 1; @@ -80,14 +83,23 @@ int32_t vnodeSnapshotRead(SVSnapshotReader *pReader, void **ppData, uint32_t *nD return code; } } else { + *ppData = pReader->pData; + *nData = pReader->nData; return code; } } if (!pReader->isTsdbEnd) { - code = tsdbSnapshotRead(pReader->pTsdbReader, ppData, nData); + code = tsdbSnapshotRead(pReader->pTsdbReader, &pReader->pData, pReader->nData); if (code) { + if (code == TSDB_CODE_VND_READ_END) { + pReader->isTsdbEnd = 1; + } else { + return code; + } } else { + *ppData = pReader->pData; + *nData = pReader->nData; return code; } }