From a52213dd23244a36e2a8ae47da2aa762750d6984 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 8 Mar 2024 08:40:33 +0000 Subject: [PATCH] fix create stable error --- source/common/src/tmsg.c | 20 +++++++++++------- source/dnode/mnode/impl/src/mndStb.c | 28 ++++++++++++++++++------- source/dnode/vnode/src/meta/metaEntry.c | 2 -- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index 7200b626c5..3310233b60 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -37,8 +37,8 @@ #define TD_MSG_RANGE_CODE_ #include "tmsgdef.h" -#include "tlog.h" #include "tcol.h" +#include "tlog.h" #define DECODESQL() \ do { \ @@ -635,7 +635,7 @@ int32_t tDeserializeSMCreateStbReq(void *buf, int32_t bufLen, SMCreateStbReq *pR if (tDecodeI32(&decoder, &pReq->ast1Len) < 0) return -1; if (tDecodeI32(&decoder, &pReq->ast2Len) < 0) return -1; - pReq->pColumns = taosArrayInit(pReq->numOfColumns, sizeof(SField)); + pReq->pColumns = taosArrayInit(pReq->numOfColumns, sizeof(SFieldWithOptions)); pReq->pTags = taosArrayInit(pReq->numOfTags, sizeof(SField)); pReq->pFuncs = taosArrayInit(pReq->numOfFuncs, TSDB_FUNC_NAME_LEN); if (pReq->pColumns == NULL || pReq->pTags == NULL || pReq->pFuncs == NULL) { @@ -7569,6 +7569,7 @@ int tEncodeSVCreateStbReq(SEncoder *pCoder, const SVCreateStbReq *pReq) { } if (tEncodeI8(pCoder, pReq->source) < 0) return -1; + if (tEncodeI8(pCoder, pReq->colCmpred) < 0) return -1; if (tEncodeSColCmprWrapper(pCoder, &pReq->colCmpr) < 0) return -1; tEndEncode(pCoder); @@ -7594,6 +7595,9 @@ int tDecodeSVCreateStbReq(SDecoder *pCoder, SVCreateStbReq *pReq) { if (!tDecodeIsEnd(pCoder)) { if (tDecodeI8(pCoder, &pReq->source) < 0) return -1; + if (!tDecodeIsEnd(pCoder)) { + if (tDecodeI8(pCoder, &pReq->colCmpred) < 0) return -1; + } if (!tDecodeIsEnd(pCoder)) { if (tDecodeSColCmprWrapperEx(pCoder, &pReq->colCmpr) < 0) return -1; } @@ -7638,7 +7642,9 @@ int tEncodeSVCreateTbReq(SEncoder *pCoder, const SVCreateTbReq *pReq) { if (tEncodeI32(pCoder, pReq->sqlLen) < 0) return -1; if (tEncodeBinary(pCoder, pReq->sql, pReq->sqlLen) < 0) return -1; } - if (tEncodeSColCmprWrapper(pCoder, &pReq->colCmpr) < 0) return -1; + if (pReq->type == TSDB_SUPER_TABLE || pReq->type == TSDB_NORMAL_TABLE) { + if (tEncodeSColCmprWrapper(pCoder, &pReq->colCmpr) < 0) return -1; + } // Encode Column Options: encode compress level @@ -7690,10 +7696,10 @@ int tDecodeSVCreateTbReq(SDecoder *pCoder, SVCreateTbReq *pReq) { if (pReq->sqlLen > 0) { if (tDecodeBinaryAlloc(pCoder, (void **)&pReq->sql, NULL) < 0) return -1; } - - if (!tDecodeIsEnd(pCoder)) { - if (tDecodeSColCmprWrapperEx(pCoder, &pReq->colCmpr) < 0) return -1; - } + if (pReq->type == TSDB_NORMAL_TABLE || pReq->type == TSDB_SUPER_TABLE) + if (!tDecodeIsEnd(pCoder)) { + if (tDecodeSColCmprWrapperEx(pCoder, &pReq->colCmpr) < 0) return -1; + } } tEndDecode(pCoder); diff --git a/source/dnode/mnode/impl/src/mndStb.c b/source/dnode/mnode/impl/src/mndStb.c index ded759d9c3..4c81a8ebd0 100644 --- a/source/dnode/mnode/impl/src/mndStb.c +++ b/source/dnode/mnode/impl/src/mndStb.c @@ -310,6 +310,7 @@ _OVER: taosMemoryFreeClear(pStb->pColumns); taosMemoryFreeClear(pStb->pTags); taosMemoryFreeClear(pStb->comment); + taosMemoryFree(pStb->pCmpr); } taosMemoryFreeClear(pRow); return NULL; @@ -432,6 +433,8 @@ static int32_t mndStbActionUpdate(SSdb *pSdb, SStbObj *pOld, SStbObj *pNew) { memcpy(pOld->pAst2, pNew->pAst2, pNew->ast2Len); pOld->ast2Len = pNew->ast2Len; } + memcpy(pOld->pCmpr, pNew->pCmpr, pOld->numOfColumns * sizeof(SCmprObj)); + taosWUnLockLatch(&pOld->lock); return 0; } @@ -494,10 +497,12 @@ void *mndBuildVCreateStbReq(SMnode *pMnode, SVgObj *pVgroup, SStbObj *pStb, int3 req.schemaTag.version = pStb->tagVer; req.schemaTag.pSchema = pStb->pTags; + req.colCmpred = 1; SColCmprWrapper *pCmpr = &req.colCmpr; pCmpr->version = pStb->colVer; pCmpr->nCols = pStb->numOfColumns; - for (int i = 0; pStb->numOfColumns; i++) { + req.colCmpr.pColCmpr = taosMemoryCalloc(1, sizeof(SColCmpr)); + for (int32_t i = 0; i < pStb->numOfColumns; i++) { SColCmpr *p = &pCmpr->pColCmpr[i]; p->alg = pStb->pCmpr[i].cmprAlg; p->id = pStb->pCmpr[i].colId; @@ -553,10 +558,12 @@ void *mndBuildVCreateStbReq(SMnode *pMnode, SVgObj *pVgroup, SStbObj *pStb, int3 *pContLen = contLen; taosMemoryFreeClear(req.rsmaParam.qmsg[0]); taosMemoryFreeClear(req.rsmaParam.qmsg[1]); + taosMemoryFreeClear(req.colCmpr.pColCmpr); return pHead; _err: taosMemoryFreeClear(req.rsmaParam.qmsg[0]); taosMemoryFreeClear(req.rsmaParam.qmsg[1]); + taosMemoryFreeClear(req.colCmpr.pColCmpr); return NULL; } @@ -619,7 +626,7 @@ int32_t mndCheckCreateStbReq(SMCreateStbReq *pCreate) { } for (int32_t i = 0; i < pCreate->numOfColumns; ++i) { - SField *pField1 = taosArrayGet(pCreate->pColumns, i); + SFieldWithOptions *pField1 = taosArrayGet(pCreate->pColumns, i); if (pField1->type >= TSDB_DATA_TYPE_MAX) { terrno = TSDB_CODE_MND_INVALID_STB_OPTION; return -1; @@ -861,8 +868,8 @@ int32_t mndBuildStbFromReq(SMnode *pMnode, SStbObj *pDst, SMCreateStbReq *pCreat } for (int32_t i = 0; i < pDst->numOfColumns; ++i) { - SField *pField = taosArrayGet(pCreate->pColumns, i); - SSchema *pSchema = &pDst->pColumns[i]; + SFieldWithOptions *pField = taosArrayGet(pCreate->pColumns, i); + SSchema *pSchema = &pDst->pColumns[i]; pSchema->type = pField->type; pSchema->bytes = pField->bytes; pSchema->flags = pField->flags; @@ -883,10 +890,15 @@ int32_t mndBuildStbFromReq(SMnode *pMnode, SStbObj *pDst, SMCreateStbReq *pCreat pSchema->colId = pDst->nextColId; pDst->nextColId++; } - + // set col compress pDst->pCmpr = taosMemoryCalloc(1, pDst->numOfColumns * sizeof(SCmprObj)); for (int32_t i = 0; i < pDst->numOfColumns; i++) { - SCmprObj *p = &pDst->pCmpr[i]; + SFieldWithOptions *pField = taosArrayGet(pCreate->pColumns, i); + SSchema *pSchema = &pDst->pColumns[i]; + + SCmprObj *pColCmpr = &pDst->pCmpr[i]; + pColCmpr->colId = pSchema->colId; + pColCmpr->cmprAlg = pField->compress; } return 0; } @@ -1126,8 +1138,8 @@ static int32_t mndProcessCreateStbReq(SRpcMsg *pReq) { } // todo xsdebug - terrno = TSDB_CODE_OPS_NOT_SUPPORT; - goto _OVER; + // terrno = TSDB_CODE_OPS_NOT_SUPPORT; + // goto _OVER; mInfo("stb:%s, start to create", createReq.name); if (mndCheckCreateStbReq(&createReq) != 0) { diff --git a/source/dnode/vnode/src/meta/metaEntry.c b/source/dnode/vnode/src/meta/metaEntry.c index 48078961ab..32a802e63e 100644 --- a/source/dnode/vnode/src/meta/metaEntry.c +++ b/source/dnode/vnode/src/meta/metaEntry.c @@ -43,8 +43,6 @@ END: return -1; } - - int metaEncodeEntry(SEncoder *pCoder, const SMetaEntry *pME) { if (tStartEncode(pCoder) < 0) return -1;