fix create stable error

This commit is contained in:
yihaoDeng 2024-03-08 08:40:33 +00:00
parent e984a6d4ad
commit a52213dd23
3 changed files with 33 additions and 17 deletions

View File

@ -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);

View File

@ -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) {

View File

@ -43,8 +43,6 @@ END:
return -1;
}
int metaEncodeEntry(SEncoder *pCoder, const SMetaEntry *pME) {
if (tStartEncode(pCoder) < 0) return -1;