From 947359fd17b8dcef723c61b3fea968e5530189be Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Wed, 6 Jul 2022 05:51:45 +0000 Subject: [PATCH] more work --- source/dnode/vnode/src/meta/metaSnapshot.c | 48 +++++++++++++++++- source/dnode/vnode/src/tsdb/tsdbSnapshot.c | 59 +++++++++++++++++++--- 2 files changed, 98 insertions(+), 9 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaSnapshot.c b/source/dnode/vnode/src/meta/metaSnapshot.c index 7a7f259f45..296d5fb3b6 100644 --- a/source/dnode/vnode/src/meta/metaSnapshot.c +++ b/source/dnode/vnode/src/meta/metaSnapshot.c @@ -108,18 +108,62 @@ struct SMetaSnapWriter { int64_t ever; }; -int32_t metaSnapWriterOpen(SMeta* pMeta, int64_t sver, int64_t ever, SMetaSnapWriter** ppWriter) { +static int32_t metaSnapRollback(SMetaSnapWriter* pWriter) { int32_t code = 0; // TODO return code; } -int32_t metaSnapWriterClose(SMetaSnapWriter** ppWriter, int8_t rollback) { +static int32_t metaSnapCommit(SMetaSnapWriter* pWriter) { int32_t code = 0; // TODO return code; } +int32_t metaSnapWriterOpen(SMeta* pMeta, int64_t sver, int64_t ever, SMetaSnapWriter** ppWriter) { + int32_t code = 0; + SMetaSnapWriter* pWriter; + + // alloc + pWriter = (SMetaSnapWriter*)taosMemoryCalloc(1, sizeof(*pWriter)); + if (pWriter == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _err; + } + pWriter->pMeta = pMeta; + pWriter->sver = sver; + pWriter->ever = ever; + + *ppWriter = pWriter; + return code; + +_err: + metaError("vgId:%d meta snapshot writer open failed since %s", TD_VID(pMeta->pVnode), tstrerror(code)); + *ppWriter = NULL; + return code; +} + +int32_t metaSnapWriterClose(SMetaSnapWriter** ppWriter, int8_t rollback) { + int32_t code = 0; + SMetaSnapWriter* pWriter = *ppWriter; + + if (rollback) { + code = metaSnapRollback(pWriter); + if (code) goto _err; + } else { + code = metaSnapCommit(pWriter); + if (code) goto _err; + } + taosMemoryFree(pWriter); + *ppWriter = NULL; + + return code; + +_err: + metaError("vgId:%d meta snapshot writer close failed since %s", TD_VID(pWriter->pMeta->pVnode), tstrerror(code)); + return code; +} + int32_t metaSnapWrite(SMetaSnapWriter* pWriter, uint8_t* pData, uint32_t nData) { int32_t code = 0; // TODO diff --git a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c index 1bc2e45a41..dc2e006d05 100644 --- a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c +++ b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c @@ -315,20 +315,65 @@ struct STsdbSnapWriter { SDelFWriter* pDelFWriter; }; -int32_t tsdbSnapWriterOpen(STsdb* pTsdb, int64_t sver, int64_t ever, STsdbSnapWriter** ppWriter) { +static int32_t tsdbSnapRollback(STsdbSnapWriter* pWriter) { int32_t code = 0; // TODO return code; } +static int32_t tsdbSnapCommit(STsdbSnapWriter* pWriter) { + int32_t code = 0; + // TODO + return code; +} + +int32_t tsdbSnapWriterOpen(STsdb* pTsdb, int64_t sver, int64_t ever, STsdbSnapWriter** ppWriter) { + int32_t code = 0; + STsdbSnapWriter* pWriter = NULL; + + // alloc + pWriter = (STsdbSnapWriter*)taosMemoryCalloc(1, sizeof(*pWriter)); + if (pWriter == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _err; + } + pWriter->pTsdb = pTsdb; + pWriter->sver = sver; + pWriter->ever = ever; + + *ppWriter = pWriter; + return code; + +_err: + tsdbError("vgId:%d tsdb snapshot writer open failed since %s", TD_VID(pTsdb->pVnode), tstrerror(code)); + *ppWriter = NULL; + return code; +} + +int32_t tsdbSnapWriterClose(STsdbSnapWriter** ppWriter, int8_t rollback) { + int32_t code = 0; + STsdbSnapWriter* pWriter = *ppWriter; + + if (rollback) { + code = tsdbSnapRollback(pWriter); + if (code) goto _err; + } else { + code = tsdbSnapCommit(pWriter); + if (code) goto _err; + } + + taosMemoryFree(pWriter); + *ppWriter = NULL; + + return code; + +_err: + tsdbError("vgId:%d tsdb snapshot writer close failed since %s", TD_VID(pWriter->pTsdb->pVnode), tstrerror(code)); + return code; +} + int32_t tsdbSnapWrite(STsdbSnapWriter* pWriter, uint8_t* pData, uint32_t nData) { int32_t code = 0; // TODO return code; } - -int32_t tsdbSnapWriterClose(STsdbSnapWriter** ppWriter, int8_t rollback) { - int32_t code = 0; - // TODO - return code; -}