From 032339949edb84b89962eb613b9d6c5e576e4372 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 4 Jul 2022 12:24:34 +0000 Subject: [PATCH] more work --- source/dnode/vnode/src/inc/vnodeInt.h | 9 ++++++++- source/dnode/vnode/src/meta/metaSnapshot.c | 12 +++++++----- source/dnode/vnode/src/vnd/vnodeSnapshot.c | 7 +++---- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/source/dnode/vnode/src/inc/vnodeInt.h b/source/dnode/vnode/src/inc/vnodeInt.h index 9f7b1ed783..4850aab2e0 100644 --- a/source/dnode/vnode/src/inc/vnodeInt.h +++ b/source/dnode/vnode/src/inc/vnodeInt.h @@ -62,6 +62,7 @@ typedef struct SMetaSnapReader SMetaSnapReader; typedef struct SMetaSnapWriter SMetaSnapWriter; typedef struct STsdbSnapReader STsdbSnapReader; typedef struct STsdbSnapWriter STsdbSnapWriter; +typedef struct SSnapDataHdr SSnapDataHdr; #define VNODE_META_DIR "meta" #define VNODE_TSDB_DIR "tsdb" @@ -177,7 +178,7 @@ void* tdUidStoreFree(STbUidStore* pStore); // SMetaSnapReader ======================================== int32_t metaSnapReaderOpen(SMeta* pMeta, int64_t sver, int64_t ever, SMetaSnapReader** ppReader); int32_t metaSnapReaderClose(SMetaSnapReader** ppReader); -int32_t metaSnapRead(SMetaSnapReader* pReader, uint8_t** ppData, int64_t* nDatap); +int32_t metaSnapRead(SMetaSnapReader* pReader, uint8_t** ppData); // SMetaSnapWriter ======================================== // STsdbSnapReader ======================================== int32_t tsdbSnapReaderOpen(STsdb* pTsdb, int64_t sver, int64_t ever, STsdbSnapReader** ppReader); @@ -292,6 +293,12 @@ struct SSma { // sma void smaHandleRes(void* pVnode, int64_t smaId, const SArray* data); +struct SSnapDataHdr { + int8_t type; + int64_t size; + uint8_t data[]; +}; + #ifdef __cplusplus } #endif diff --git a/source/dnode/vnode/src/meta/metaSnapshot.c b/source/dnode/vnode/src/meta/metaSnapshot.c index 9252f8d23d..013ec19411 100644 --- a/source/dnode/vnode/src/meta/metaSnapshot.c +++ b/source/dnode/vnode/src/meta/metaSnapshot.c @@ -65,7 +65,7 @@ int32_t metaSnapReaderClose(SMetaSnapReader** ppReader) { return 0; } -int32_t metaSnapRead(SMetaSnapReader* pReader, uint8_t** ppData, int64_t* nDatap) { +int32_t metaSnapRead(SMetaSnapReader* pReader, uint8_t** ppData) { const void* pKey = NULL; const void* pData = NULL; int32_t nKey = 0; @@ -79,20 +79,22 @@ int32_t metaSnapRead(SMetaSnapReader* pReader, uint8_t** ppData, int64_t* nDatap } if (((STbDbKey*)pData)->version < pReader->sver) { + tdbTbcMoveToNext(pReader->pTbc); continue; } + tdbTbcMoveToNext(pReader->pTbc); break; } // copy the data - if (tRealloc(ppData, nData) < 0) { + if (tRealloc(ppData, sizeof(SSnapDataHdr) + nData) < 0) { code = TSDB_CODE_OUT_OF_MEMORY; return code; } - - memcpy(*ppData, pData, nData); - *nDatap = nData; + ((SSnapDataHdr*)(*ppData))->type = 0; // TODO: use macro + ((SSnapDataHdr*)(*ppData))->size = nData; + memcpy(((SSnapDataHdr*)(*ppData))->data, pData, nData); return code; } diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c index fbc1a08401..f760d9174e 100644 --- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c +++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c @@ -27,7 +27,6 @@ struct SVSnapReader { int8_t tsdbDone; STsdbSnapReader *pTsdbReader; uint8_t *pData; - int64_t nData; }; int32_t vnodeSnapReaderOpen(SVnode *pVnode, int64_t sver, int64_t ever, SVSnapReader **ppReader) { @@ -73,7 +72,7 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) int32_t code = 0; if (!pReader->metaDone) { - code = metaSnapRead(pReader->pMetaReader, &pReader->pData, &pReader->nData); + code = metaSnapRead(pReader->pMetaReader, &pReader->pData); if (code) { if (code == TSDB_CODE_VND_READ_END) { pReader->metaDone = 1; @@ -82,7 +81,7 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) } } else { *ppData = pReader->pData; - *nData = pReader->nData; + *nData = sizeof(SSnapDataHdr) + ((SSnapDataHdr *)pReader->pData)->size; goto _exit; } } @@ -97,7 +96,7 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) } } else { *ppData = pReader->pData; - *nData = pReader->nData; + *nData = sizeof(SSnapDataHdr) + ((SSnapDataHdr *)pReader->pData)->size; goto _exit; } }