refactor code

This commit is contained in:
yihaoDeng 2024-03-26 08:50:21 +00:00
parent ab69c2e750
commit 02e0e45183
7 changed files with 70 additions and 17 deletions

View File

@ -475,6 +475,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_VND_ALREADY_IS_VOTER TAOS_DEF_ERROR_CODE(0, 0x0533) // internal #define TSDB_CODE_VND_ALREADY_IS_VOTER TAOS_DEF_ERROR_CODE(0, 0x0533) // internal
#define TSDB_CODE_VND_DIR_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0534) #define TSDB_CODE_VND_DIR_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0534)
#define TSDB_CODE_VND_META_DATA_UNSAFE_DELETE TAOS_DEF_ERROR_CODE(0, 0x0535) #define TSDB_CODE_VND_META_DATA_UNSAFE_DELETE TAOS_DEF_ERROR_CODE(0, 0x0535)
#define TSDB_CODE_VND_COLUMN_COMPRESS_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0536)
// tsdb // tsdb
#define TSDB_CODE_TDB_INVALID_TABLE_ID TAOS_DEF_ERROR_CODE(0, 0x0600) #define TSDB_CODE_TDB_INVALID_TABLE_ID TAOS_DEF_ERROR_CODE(0, 0x0600)

View File

@ -280,6 +280,16 @@ int32_t tcompressDebug(uint32_t cmprAlg, uint8_t *l1Alg, uint8_t *l2Alg, uint8_t
uint8_t l2 = COMPRESS_L2_TYPE_U32(cmprAlg); \ uint8_t l2 = COMPRESS_L2_TYPE_U32(cmprAlg); \
uint8_t lvl = COMPRESS_L2_TYPE_LEVEL_U32(cmprAlg); uint8_t lvl = COMPRESS_L2_TYPE_LEVEL_U32(cmprAlg);
#define SET_COMPRESS(l1, l2, lvl, cmpr) \
do { \
(cmpr) &= 0x00FFFFFF; \
(cmpr) |= ((l1) << 24); \
(cmpr) &= 0xFF0000FF; \
(cmpr) |= ((l2) << 8); \
(cmpr) &= 0xFFFFFF00; \
(cmpr) |= (lvl); \
} while (0)
int8_t tUpdateCompress(uint32_t oldCmpr, uint32_t newCmpr, uint32_t *dst);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -1679,27 +1679,14 @@ static int32_t mndUpdateSuperTableColumnCompress(SMnode *pMnode, const SStbObj *
if (mndAllocStbSchemas(pOld, pNew) != 0) { if (mndAllocStbSchemas(pOld, pNew) != 0) {
return -1; return -1;
} }
DEFINE_VAR((uint32_t)(p->bytes));
int8_t updated = 0; int8_t updated = 0;
for (int i = 0; i < pNew->numOfColumns; i++) { for (int i = 0; i < pNew->numOfColumns; i++) {
SColCmpr *pCmpr = &pNew->pCmpr[i]; SColCmpr *pCmpr = &pNew->pCmpr[i];
if (pCmpr->id == colId) { if (pCmpr->id == colId) {
uint32_t cmprAlg = pCmpr->alg; uint32_t dst = 0;
uint8_t tl1 = COMPRESS_L1_TYPE_U32(cmprAlg); updated = tUpdateCompress(pCmpr->alg, p->bytes, &dst);
uint8_t tl2 = COMPRESS_L2_TYPE_U32(cmprAlg); if (updated) pCmpr->alg = dst;
uint8_t tlvl = COMPRESS_L2_TYPE_LEVEL_U32(cmprAlg);
if (l1 != 0) {
updated = 1;
setColCompressByOption((uint32_t *)&cmprAlg, l1, tl2, tlvl);
} else if (l2 != 0) {
updated = 1;
setColCompressByOption((uint32_t *)&cmprAlg, tl1, l2, tlvl);
} else if (lvl != 0) {
updated = 1;
setColCompressByOption((uint32_t *)&cmprAlg, tl1, tl2, lvl);
}
if (updated == 1) pCmpr->alg = cmprAlg;
break; break;
} }
} }
@ -1708,8 +1695,8 @@ static int32_t mndUpdateSuperTableColumnCompress(SMnode *pMnode, const SStbObj *
terrno = TSDB_CODE_MND_COLUMN_COMPRESS_ALREADY_EXIST; terrno = TSDB_CODE_MND_COLUMN_COMPRESS_ALREADY_EXIST;
return -1; return -1;
} }
pNew->colVer++; pNew->colVer++;
return 0; return 0;
} }
static int32_t mndAddSuperTableColumn(const SStbObj *pOld, SStbObj *pNew, SArray *pFields, int32_t ncols) { static int32_t mndAddSuperTableColumn(const SStbObj *pOld, SStbObj *pNew, SArray *pFields, int32_t ncols) {

View File

@ -2153,6 +2153,7 @@ int32_t metaUpdateTableColCompress(SMeta *pMeta, int64_t version, SVAlterTbReq *
pVal = NULL; pVal = NULL;
if (tdbTbGet(pMeta->pUidIdx, &suid, sizeof(tb_uid_t), &pVal, &nVal) == -1) { if (tdbTbGet(pMeta->pUidIdx, &suid, sizeof(tb_uid_t), &pVal, &nVal) == -1) {
terrno = TSDB_CODE_INVALID_MSG;
ret = -1; ret = -1;
goto _err; goto _err;
} }
@ -2161,6 +2162,7 @@ int32_t metaUpdateTableColCompress(SMeta *pMeta, int64_t version, SVAlterTbReq *
tbDbKey.uid = suid; tbDbKey.uid = suid;
tbDbKey.version = ((SUidIdxVal *)pVal)[0].version; tbDbKey.version = ((SUidIdxVal *)pVal)[0].version;
if (tdbTbGet(pMeta->pTbDb, &tbDbKey, sizeof(tbDbKey), &pVal, &nVal) < 0) { if (tdbTbGet(pMeta->pTbDb, &tbDbKey, sizeof(tbDbKey), &pVal, &nVal) < 0) {
terrno = TSDB_CODE_INVALID_MSG;
tdbFree(pVal); tdbFree(pVal);
goto _err; goto _err;
} }
@ -2168,17 +2170,47 @@ int32_t metaUpdateTableColCompress(SMeta *pMeta, int64_t version, SVAlterTbReq *
tDecoderInit(&dc, pVal, nVal); tDecoderInit(&dc, pVal, nVal);
ret = metaDecodeEntry(&dc, &tbEntry); ret = metaDecodeEntry(&dc, &tbEntry);
if (ret < 0) { if (ret < 0) {
terrno = TSDB_CODE_INVALID_MSG;
tdbFree(pVal);
tDecoderClear(&dc); tDecoderClear(&dc);
goto _err; goto _err;
} }
if (tbEntry.type != TSDB_NORMAL_TABLE && tbEntry.type != TSDB_SUPER_TABLE) { if (tbEntry.type != TSDB_NORMAL_TABLE && tbEntry.type != TSDB_SUPER_TABLE) {
terrno = TSDB_CODE_INVALID_MSG;
tdbFree(pVal);
tDecoderClear(&dc); tDecoderClear(&dc);
goto _err; goto _err;
} }
int8_t updated = 0;
SColCmprWrapper *wp = &tbEntry.colCmpr;
for (int32_t i = 0; i < wp->nCols; i++) {
SColCmpr *p = &wp->pColCmpr[i];
if (p->id == pReq->colId) {
uint32_t dst = 0;
updated = tUpdateCompress(p->alg, pReq->compress, &dst);
if (updated) {
p->alg = dst;
}
}
}
if (updated == 0) {
tdbFree(pVal);
tDecoderClear(&dc);
terrno = TSDB_CODE_VND_COLUMN_COMPRESS_ALREADY_EXIST;
goto _err;
}
tbEntry.version = version;
metaWLock(pMeta); metaWLock(pMeta);
metaSaveToTbDb(pMeta, &tbEntry);
metaUpdateUidIdx(pMeta, &tbEntry);
metaUpdateChangeTime(pMeta, suid, pReq->ctimeMs);
metaULock(pMeta); metaULock(pMeta);
tdbFree(pVal);
tDecoderClear(&dc);
return 0; return 0;
_err: _err:
return -1; return -1;

View File

@ -10735,6 +10735,7 @@ static int buildAlterTableColumnCompress(STranslateContext* pCxt, SAlterTableStm
} }
pReq->colName = taosStrdup(pStmt->colName); pReq->colName = taosStrdup(pStmt->colName);
pReq->colId = pSchema->colId;
if (NULL == pReq->colName) { if (NULL == pReq->colName) {
return TSDB_CODE_OUT_OF_MEMORY; return TSDB_CODE_OUT_OF_MEMORY;
} }

View File

@ -2933,3 +2933,23 @@ int32_t tcompressDebug(uint32_t cmprAlg, uint8_t *l1Alg, uint8_t *l2Alg, uint8_t
*level = lvl; *level = lvl;
return 0; return 0;
} }
int8_t tUpdateCompress(uint32_t oldCmpr, uint32_t newCmpr, uint32_t *dst) {
uint8_t ol1 = COMPRESS_L1_TYPE_U32(oldCmpr);
uint8_t ol2 = COMPRESS_L2_TYPE_U32(oldCmpr);
uint8_t olvl = COMPRESS_L2_TYPE_LEVEL_U32(oldCmpr);
uint8_t nl1 = COMPRESS_L1_TYPE_U32(newCmpr);
uint8_t nl2 = COMPRESS_L2_TYPE_U32(newCmpr);
uint8_t nlvl = COMPRESS_L2_TYPE_LEVEL_U32(newCmpr);
if (nl1 != 0 && ol1 != nl1) {
SET_COMPRESS(nl1, ol2, olvl, *dst);
return 1;
} else if (nl2 != 0 && ol2 != nl2) {
SET_COMPRESS(ol1, nl2, olvl, *dst);
return 1;
} else if (nlvl != 0 && olvl != nlvl) {
SET_COMPRESS(ol1, ol2, nlvl, *dst);
return 1;
}
return 0;
}

View File

@ -372,6 +372,8 @@ TAOS_DEFINE_ERROR(TSDB_CODE_VND_NOT_CATCH_UP, "Vnode didn't catch up
TAOS_DEFINE_ERROR(TSDB_CODE_VND_ALREADY_IS_VOTER, "Vnode already is a voter") TAOS_DEFINE_ERROR(TSDB_CODE_VND_ALREADY_IS_VOTER, "Vnode already is a voter")
TAOS_DEFINE_ERROR(TSDB_CODE_VND_DIR_ALREADY_EXIST, "Vnode directory already exist") TAOS_DEFINE_ERROR(TSDB_CODE_VND_DIR_ALREADY_EXIST, "Vnode directory already exist")
TAOS_DEFINE_ERROR(TSDB_CODE_VND_META_DATA_UNSAFE_DELETE, "Single replica vnode data will lost permanently after this operation, if you make sure this, please use drop dnode <id> unsafe to execute") TAOS_DEFINE_ERROR(TSDB_CODE_VND_META_DATA_UNSAFE_DELETE, "Single replica vnode data will lost permanently after this operation, if you make sure this, please use drop dnode <id> unsafe to execute")
TAOS_DEFINE_ERROR(TSDB_CODE_VND_COLUMN_COMPRESS_ALREADY_EXIST,"Column compress already exist")
// tsdb // tsdb
TAOS_DEFINE_ERROR(TSDB_CODE_TDB_INVALID_TABLE_ID, "Invalid table ID") TAOS_DEFINE_ERROR(TSDB_CODE_TDB_INVALID_TABLE_ID, "Invalid table ID")