From a5eebc90cbff39c2c4851779e6bf221e10cf1930 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Wed, 13 Mar 2024 12:04:21 +0000 Subject: [PATCH] add api --- source/dnode/vnode/src/inc/meta.h | 1 + source/dnode/vnode/src/meta/metaTable.c | 51 +++++++++++++++++++++++ source/dnode/vnode/src/tsdb/tsdbCommit2.c | 2 + 3 files changed, 54 insertions(+) diff --git a/source/dnode/vnode/src/inc/meta.h b/source/dnode/vnode/src/inc/meta.h index ed17f0f591..d986d63ac7 100644 --- a/source/dnode/vnode/src/inc/meta.h +++ b/source/dnode/vnode/src/inc/meta.h @@ -165,6 +165,7 @@ int32_t metaFilterCreateTime(void* pVnode, SMetaFltParam* parm, SArray* pUids); int32_t metaFilterTableName(void* pVnode, SMetaFltParam* param, SArray* pUids); int32_t metaFilterTtl(void* pVnode, SMetaFltParam* param, SArray* pUids); +int32_t metaGetColCmpr(SMeta* pMeta, tb_uid_t uid, SHashObj** colCmprObj); #ifndef META_REFACT // SMetaDB int metaOpenDB(SMeta* pMeta); diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index 76890cde8c..7e46e70931 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -2500,6 +2500,57 @@ _err: return -1; } +int32_t metaGetColCmpr(SMeta *pMeta, tb_uid_t uid, SHashObj **ppColCmprObj) { + int rc = 0; + + SHashObj *pColCmprObj = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK); + void *pData = NULL; + int nData = 0; + SMetaEntry e = {0}; + SDecoder dc = {0}; + + metaRLock(pMeta); + rc = tdbTbGet(pMeta->pUidIdx, &uid, sizeof(uid), &pData, &nData); + if (rc < 0) { + taosHashClear(pColCmprObj); + metaULock(pMeta); + return -1; + } + int64_t version = ((SUidIdxVal *)pData)[0].version; + rc = tdbTbGet(pMeta->pTbDb, &(STbDbKey){.version = version, .uid = uid}, sizeof(STbDbKey), &pData, &nData); + if (rc < 0) { + metaULock(pMeta); + taosHashClear(pColCmprObj); + metaError("failed to get table entry"); + return rc; + } + + tDecoderInit(&dc, pData, nData); + rc = metaDecodeEntry(&dc, &e); + if (rc < 0) { + tDecoderClear(&dc); + metaULock(pMeta); + taosHashClear(pColCmprObj); + return -1; + } + if (useCompress(e.type)) { + SColCmprWrapper *p = &e.colCmpr; + for (int32_t i = 0; i < p->nCols; i++) { + SColCmpr *pCmpr = &p->pColCmpr[i]; + taosHashPut(pColCmprObj, &pCmpr->id, sizeof(pCmpr->id), &pCmpr->alg, sizeof(&pCmpr->alg)); + } + } else { + metaULock(pMeta); + taosHashClear(pColCmprObj); + return 0; + } + tDecoderClear(&dc); + tdbFree(pData); + metaULock(pMeta); + + *ppColCmprObj = pColCmprObj; + return 0; +} // refactor later void *metaGetIdx(SMeta *pMeta) { return pMeta->pTagIdx; } void *metaGetIvtIdx(SMeta *pMeta) { return pMeta->pTagIvtIdx; } diff --git a/source/dnode/vnode/src/tsdb/tsdbCommit2.c b/source/dnode/vnode/src/tsdb/tsdbCommit2.c index dc76aa61b2..32abbfdb3b 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCommit2.c +++ b/source/dnode/vnode/src/tsdb/tsdbCommit2.c @@ -47,6 +47,7 @@ typedef struct { TABLEID tbid[1]; bool hasTSData; bool skipTsRow; + SHashObj *pColCmprObj; } ctx[1]; // reader @@ -117,6 +118,7 @@ static int32_t tsdbCommitTSData(SCommitter2 *committer) { committer->ctx->tbid->suid = 0; committer->ctx->tbid->uid = 0; + for (SRowInfo *row; (row = tsdbIterMergerGetData(committer->dataIterMerger)) != NULL;) { if (row->uid != committer->ctx->tbid->uid) { committer->ctx->tbid->suid = row->suid;