From 4628884b92fd01d83e730ffaf027200d7fca05df Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Wed, 20 Apr 2022 10:25:08 +0000 Subject: [PATCH] refact meta 5 --- include/common/tmsg.h | 1 + source/common/src/tmsg.c | 16 ++++++++++++++++ source/dnode/mnode/impl/src/mndStb.c | 15 +++++++-------- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/include/common/tmsg.h b/include/common/tmsg.h index b4074e3a50..f85ff44b4b 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -1482,6 +1482,7 @@ typedef struct SVCreateStbReq { SRSmaParam pRSmaParam; } SVCreateStbReq; +int tEnSizeSVCreateStbReq(const SVCreateStbReq *pReq, int32_t *size); int tEncodeSVCreateStbReq(SCoder* pCoder, const SVCreateStbReq* pReq); int tDecodeSVCreateStbReq(SCoder* pCoder, SVCreateStbReq* pReq); diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index 51dcb5fd27..363f69350e 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -3691,6 +3691,22 @@ void tFreeSCMCreateStreamReq(SCMCreateStreamReq *pReq) { taosMemoryFreeClear(pReq->ast); } +int tEnSizeSVCreateStbReq(const SVCreateStbReq *pReq, int32_t *size) { + SCoder coder = {0}; + + tCoderInit(&coder, TD_LITTLE_ENDIAN, NULL, 0, TD_ENCODER); + + if (tEncodeSVCreateStbReq(&coder, pReq) < 0) { + tCoderClear(&coder); + return -1; + } + + *size = coder.pos; + + tCoderClear(&coder); + return 0; +} + int tEncodeSVCreateStbReq(SCoder *pCoder, const SVCreateStbReq *pReq) { if (tStartEncode(pCoder) < 0) return -1; diff --git a/source/dnode/mnode/impl/src/mndStb.c b/source/dnode/mnode/impl/src/mndStb.c index 1f2c18cb94..eb60dc684d 100644 --- a/source/dnode/mnode/impl/src/mndStb.c +++ b/source/dnode/mnode/impl/src/mndStb.c @@ -394,15 +394,15 @@ static FORCE_INLINE int schemaExColIdCompare(const void *colId, const void *pSch } static void *mndBuildVCreateStbReq(SMnode *pMnode, SVgObj *pVgroup, SStbObj *pStb, int32_t *pContLen) { - SCoder coder; - int32_t contLen; - SName name = {0}; + SCoder coder = {0}; + int32_t contLen; + SName name = {0}; + SVCreateStbReq req = {0}; tNameFromString(&name, pStb->name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); char dbFName[TSDB_DB_FNAME_LEN] = {0}; tNameGetFullDbName(&name, dbFName); - SVCreateStbReq req = {0}; req.name = (char *)tNameGetTableName(&name); req.suid = pStb->uid; req.rollup = pStb->aggregationMethod > -1 ? 1 : 0; @@ -432,14 +432,13 @@ static void *mndBuildVCreateStbReq(SMnode *pMnode, SVgObj *pVgroup, SStbObj *pSt } // get length - tCoderInit(&coder, TD_LITTLE_ENDIAN, NULL, 0, TD_ENCODER); - if (tEncodeSVCreateStbReq(&coder, &req) < 0) { + if (tEnSizeSVCreateStbReq(&req, &contLen) < 0) { taosMemoryFree(req.pRSmaParam.pFuncIds); return NULL; } - tCoderClear(&coder); - contLen = sizeof(SMsgHead) + coder.pos; + contLen += sizeof(SMsgHead); + SMsgHead *pHead = taosMemoryMalloc(contLen); if (pHead == NULL) { taosMemoryFree(req.pRSmaParam.pFuncIds);