diff --git a/include/libs/executor/storageapi.h b/include/libs/executor/storageapi.h index 300507c132b379013cfb73d94314cebfe5cbcb27..97900de7ba51c192cb68d4948f808b4b705ba8f8 100644 --- a/include/libs/executor/storageapi.h +++ b/include/libs/executor/storageapi.h @@ -21,6 +21,7 @@ #include "taosdef.h" #include "tmsg.h" #include "tcommon.h" +#include "index.h" #ifdef __cplusplus extern "C" { @@ -544,6 +545,7 @@ typedef struct SStorageAPI { SStoreSnapshotFn snapshotFn; SStoreTqReader tqReaderFn; SStateStore stateStore; + SMetaDataFilterAPI metaFilter; } SStorageAPI; #ifdef __cplusplus diff --git a/include/libs/index/index.h b/include/libs/index/index.h index fd71c531fa8bd8a4716209942baf71bc9aa949c5..162b99e55395ab098143932249a3de70c0e8ec17 100644 --- a/include/libs/index/index.h +++ b/include/libs/index/index.h @@ -239,7 +239,6 @@ void indexCleanup(); * @param results * @return */ - typedef struct SMetaFltParam { uint64_t suid; int16_t cid; @@ -250,17 +249,12 @@ typedef struct SMetaFltParam { int (*filterFunc)(void *a, void *b, int16_t type); } SMetaFltParam; -typedef struct SStoreAPI { - int32_t (*metaFilterTableIds)(); - int32_t (*metaFilterCreateTime)(); - int32_t (*metaFilterTableName)(); - int32_t (*metaFilterTtl)(); -} SStoreAPI; - -//int32_t metaFilterTableIds(void *pMeta, SMetaFltParam *param, SArray *results); -//int32_t metaFilterCreateTime(void *pMeta, SMetaFltParam *parm, SArray *pUids); -//int32_t metaFilterTableName(void *pMeta, SMetaFltParam *param, SArray *pUids); -//int32_t metaFilterTtl(void *pMeta, SMetaFltParam *param, SArray *pUids); +typedef struct SMetaDataFilterAPI { + int32_t (*metaFilterTableIds)(void *pVnode, SMetaFltParam *arg, SArray *pUids); + int32_t (*metaFilterCreateTime)(void *pVnode, SMetaFltParam *arg, SArray *pUids); + int32_t (*metaFilterTableName)(void *pVnode, SMetaFltParam *arg, SArray *pUids); + int32_t (*metaFilterTtl)(void *pVnode, SMetaFltParam *arg, SArray *pUids); +} SMetaDataFilterAPI; #ifdef __cplusplus } diff --git a/source/dnode/qnode/CMakeLists.txt b/source/dnode/qnode/CMakeLists.txt index 13429d0cc13cfcfb405c9e838361ff3f26e130c6..10bbbc1b26e94183da9ceeef6fadb700737fb1c4 100644 --- a/source/dnode/qnode/CMakeLists.txt +++ b/source/dnode/qnode/CMakeLists.txt @@ -16,4 +16,5 @@ target_link_libraries( PRIVATE executor PRIVATE tdb PRIVATE wal + PRIVATE index ) \ No newline at end of file diff --git a/source/dnode/snode/CMakeLists.txt b/source/dnode/snode/CMakeLists.txt index 1d8c80c42255a40cdd7798966a3b8da6d4d96f04..ebfe80ecabe006f82bec5ec3c997064789ae69e8 100644 --- a/source/dnode/snode/CMakeLists.txt +++ b/source/dnode/snode/CMakeLists.txt @@ -15,4 +15,5 @@ target_link_libraries( PRIVATE qcom PRIVATE stream PRIVATE wal + PRIVATE index ) diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index 95fe15044307fe10599f48d5bc425487d55d005d..84153f3867e463b942632c1063125735023453e9 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -151,11 +151,6 @@ int32_t metaGetStbStats(void *pVnode, int64_t uid, int64_t *numOfTables); // //} SMetaFltParam; -// TODO, refactor later -//int32_t metaFilterTableIds(SMeta *pMeta, SMetaFltParam *param, SArray *results); -//int32_t metaFilterCreateTime(SMeta *pMeta, SMetaFltParam *parm, SArray *pUids); -//int32_t metaFilterTableName(SMeta *pMeta, SMetaFltParam *param, SArray *pUids); -//int32_t metaFilterTtl(SMeta *pMeta, SMetaFltParam *param, SArray *pUids); #if 1 // refact APIs below (TODO) typedef SVCreateTbReq STbCfg; diff --git a/source/dnode/vnode/src/inc/meta.h b/source/dnode/vnode/src/inc/meta.h index 3999aa0b7f22a53197413048eca7842e6fe5e57d..b39008147b2d1284a9e6d7562c2463874854ce94 100644 --- a/source/dnode/vnode/src/inc/meta.h +++ b/source/dnode/vnode/src/inc/meta.h @@ -162,6 +162,12 @@ typedef struct { int metaCreateTagIdxKey(tb_uid_t suid, int32_t cid, const void* pTagData, int32_t nTagData, int8_t type, tb_uid_t uid, STagIdxKey** ppTagIdxKey, int32_t* nTagIdxKey); +// TODO, refactor later +int32_t metaFilterTableIds(void *pVnode, SMetaFltParam *param, SArray *results); +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); + #ifndef META_REFACT // SMetaDB int metaOpenDB(SMeta* pMeta); diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index 40f4b6fa67890da042fce0764b71b7b743a79827..3836b37002c60d3d2ae6cec6956d5484cb9bcab3 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -1012,8 +1012,8 @@ typedef struct { int32_t vLen; } SIdxCursor; -int32_t metaFilterCreateTime(void *meta, void *arg, SArray *pUids) { - SMeta *pMeta = meta; +int32_t metaFilterCreateTime(void *pVnode, SMetaFltParam *arg, SArray *pUids) { + SMeta *pMeta = ((SVnode*)pVnode)->pMeta; SMetaFltParam *param = arg; int32_t ret = 0; @@ -1072,8 +1072,8 @@ END: return ret; } -int32_t metaFilterTableName(void *meta, void *arg, SArray *pUids) { - SMeta *pMeta = meta; +int32_t metaFilterTableName(void *pVnode, SMetaFltParam *arg, SArray *pUids) { + SMeta *pMeta = ((SVnode*)pVnode)->pMeta; SMetaFltParam *param = arg; int32_t ret = 0; char *buf = NULL; @@ -1139,8 +1139,8 @@ END: return ret; } -int32_t metaFilterTtl(void *meta, void *arg, SArray *pUids) { - SMeta *pMeta = meta; +int32_t metaFilterTtl(void *pVnode, SMetaFltParam *arg, SArray *pUids) { + SMeta *pMeta = ((SVnode*)pVnode)->pMeta; SMetaFltParam *param = arg; int32_t ret = 0; char *buf = NULL; @@ -1170,8 +1170,8 @@ END: // impl later return 0; } -int32_t metaFilterTableIds(void *meta, void *arg, SArray *pUids) { - SMeta *pMeta = meta; +int32_t metaFilterTableIds(void *pVnode, SMetaFltParam *arg, SArray *pUids) { + SMeta *pMeta = ((SVnode*)pVnode)->pMeta; SMetaFltParam *param = arg; SMetaEntry oStbEntry = {0}; diff --git a/source/dnode/vnode/src/vnd/vnodeInitApi.c b/source/dnode/vnode/src/vnd/vnodeInitApi.c index 3f427d9965751e60538704682334e1e5ea1ae1ae..7a26d7b837a43d99cce0a30deaeda4b6f2031895 100644 --- a/source/dnode/vnode/src/vnd/vnodeInitApi.c +++ b/source/dnode/vnode/src/vnd/vnodeInitApi.c @@ -16,12 +16,14 @@ #include "storageapi.h" #include "vnodeInt.h" #include "tstreamUpdate.h" +#include "meta.h" static void initTsdbReaderAPI(TsdReader* pReader); static void initMetadataAPI(SStoreMeta* pMeta); static void initTqAPI(SStoreTqReader* pTq); static void initStateStoreAPI(SStateStore* pStore); static void initMetaReaderAPI(SStoreMetaReader* pMetaReader); +static void initMetaFilterAPI(SMetaDataFilterAPI* pFilter); void initStorageAPI(SStorageAPI* pAPI) { initTsdbReaderAPI(&pAPI->tsdReader); @@ -29,6 +31,7 @@ void initStorageAPI(SStorageAPI* pAPI) { initTqAPI(&pAPI->tqReaderFn); initStateStoreAPI(&pAPI->stateStore); initMetaReaderAPI(&pAPI->metaReaderFn); + initMetaFilterAPI(&pAPI->metaFilter); } void initTsdbReaderAPI(TsdReader* pReader) { @@ -69,7 +72,6 @@ void initMetadataAPI(SStoreMeta* pMeta) { pMeta->getInvertIndex = vnodeGetIvtIdx; pMeta->extractTagVal = (const void *(*)(const void *, int16_t, STagVal *))metaGetTableTagVal; - } void initTqAPI(SStoreTqReader* pTq) { @@ -188,4 +190,11 @@ void initMetaReaderAPI(SStoreMetaReader* pMetaReader) { pMetaReader->getTableEntryByName = metaGetTableEntryByName; pMetaReader->readerReleaseLock = metaReaderReleaseLock; +} + +void initMetaFilterAPI(SMetaDataFilterAPI* pFilter) { + pFilter->metaFilterCreateTime = metaFilterCreateTime; + pFilter->metaFilterTableIds = metaFilterTableIds; + pFilter->metaFilterTableName = metaFilterTableName; + pFilter->metaFilterTtl = metaFilterTtl; } \ No newline at end of file diff --git a/source/libs/executor/src/sysscanoperator.c b/source/libs/executor/src/sysscanoperator.c index 16f2b64c075f4ee207e011fbbe6a70f5442f5c80..0d1926e21d0221f3fa31c3865756beec28a9141c 100644 --- a/source/libs/executor/src/sysscanoperator.c +++ b/source/libs/executor/src/sysscanoperator.c @@ -39,8 +39,9 @@ typedef int32_t (*__sys_filte)(void* pMeta, SNode* cond, SArray* result); typedef int32_t (*__sys_check)(SNode* cond); typedef struct SSTabFltArg { - void* pMeta; - void* pVnode; + void* pMeta; + void* pVnode; + SStorageAPI* pAPI; } SSTabFltArg; typedef struct SSysTableIndex { @@ -153,11 +154,11 @@ static void relocateAndFilterSysTagsScanResult(SSysTableScanInfo* pInfo, int32_t SFilterInfo* pFilterInfo); int32_t sysFilte__DbName(void* arg, SNode* pNode, SArray* result) { - void* pVnode = ((SSTabFltArg*)arg)->pVnode; + SSTabFltArg* pArg = arg; + void* pVnode = pArg->pVnode; const char* db = NULL; - ASSERT(0); -// pAPI->metaFn.getBasicInfo(pVnode, &db, NULL); + pArg->pAPI->metaFn.getBasicInfo(pVnode, &db, NULL, NULL, NULL); SName sn = {0}; char dbname[TSDB_DB_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; @@ -181,11 +182,11 @@ int32_t sysFilte__DbName(void* arg, SNode* pNode, SArray* result) { } int32_t sysFilte__VgroupId(void* arg, SNode* pNode, SArray* result) { - void* pVnode = ((SSTabFltArg*)arg)->pVnode; + SSTabFltArg* pArg = arg; + void* pVnode = ((SSTabFltArg*)arg)->pVnode; int64_t vgId = 0; - ASSERT(0); -// pAPI->metaFn.getBasicInfo(pVnode, NULL, (int32_t*)&vgId); + pArg->pAPI->metaFn.getBasicInfo(pVnode, NULL, (int32_t*)&vgId, NULL, NULL); SOperatorNode* pOper = (SOperatorNode*)pNode; SValueNode* pVal = (SValueNode*)pOper->pRight; @@ -202,7 +203,7 @@ int32_t sysFilte__VgroupId(void* arg, SNode* pNode, SArray* result) { } int32_t sysFilte__TableName(void* arg, SNode* pNode, SArray* result) { - void* pMeta = ((SSTabFltArg*)arg)->pMeta; + SSTabFltArg* pArg = arg; SOperatorNode* pOper = (SOperatorNode*)pNode; SValueNode* pVal = (SValueNode*)pOper->pRight; @@ -222,7 +223,8 @@ int32_t sysFilte__TableName(void* arg, SNode* pNode, SArray* result) { } int32_t sysFilte__CreateTime(void* arg, SNode* pNode, SArray* result) { - void* pMeta = ((SSTabFltArg*)arg)->pMeta; + SSTabFltArg* pArg = arg; + SStorageAPI* pAPI = pArg->pAPI; SOperatorNode* pOper = (SOperatorNode*)pNode; SValueNode* pVal = (SValueNode*)pOper->pRight; @@ -239,10 +241,8 @@ int32_t sysFilte__CreateTime(void* arg, SNode* pNode, SArray* result) { .equal = equal, .filterFunc = func}; - ASSERT(0); - return 0; -// int32_t ret = metaFilterCreateTime(pMeta, ¶m, result); -// return ret; + int32_t ret = pAPI->metaFilter.metaFilterCreateTime(pArg->pVnode, ¶m, result); + return ret; } int32_t sysFilte__Ncolumn(void* arg, SNode* pNode, SArray* result) { diff --git a/source/libs/index/src/indexFilter.c b/source/libs/index/src/indexFilter.c index b90959579d05bafca97634d54ee00fbdb395a995..6be8b6726478fbf2598723c008b909d79e652b9d 100644 --- a/source/libs/index/src/indexFilter.c +++ b/source/libs/index/src/indexFilter.c @@ -67,9 +67,8 @@ typedef union { typedef struct SIFParam { SHashObj *pFilter; - - SArray *result; - char *condValue; + SArray *result; + char *condValue; SIdxFltStatus status; uint8_t colValType; @@ -79,7 +78,7 @@ typedef struct SIFParam { char colName[TSDB_COL_NAME_LEN * 2 + 4]; SIndexMetaArg arg; - SStoreAPI api; + SMetaDataFilterAPI api; } SIFParam; typedef struct SIFCtx { diff --git a/source/libs/qworker/CMakeLists.txt b/source/libs/qworker/CMakeLists.txt index a947a2dd19bc4ec5b976ff079e724306fedf6e9d..8ba8b79ab80430395131ad10d7c7912dc17879c2 100644 --- a/source/libs/qworker/CMakeLists.txt +++ b/source/libs/qworker/CMakeLists.txt @@ -9,11 +9,11 @@ target_include_directories( IF (TD_GRANT) TARGET_LINK_LIBRARIES(qworker - PRIVATE os util transport nodes planner qcom executor grant + PRIVATE os util transport nodes planner qcom executor index grant ) ELSE () TARGET_LINK_LIBRARIES(qworker - PRIVATE os util transport nodes planner qcom executor + PRIVATE os util transport nodes planner qcom executor index ) ENDIF() diff --git a/source/libs/scheduler/CMakeLists.txt b/source/libs/scheduler/CMakeLists.txt index 3288120b67518aa532db7579a7677086899514c7..fafc2a27e0f48740926d250d47d5f34fc88e203c 100644 --- a/source/libs/scheduler/CMakeLists.txt +++ b/source/libs/scheduler/CMakeLists.txt @@ -9,7 +9,7 @@ target_include_directories( target_link_libraries( scheduler - PUBLIC os util nodes planner qcom common catalog transport command qworker executor + PUBLIC os util nodes planner qcom common catalog transport command qworker executor index ) if(${BUILD_TEST}) diff --git a/source/libs/stream/CMakeLists.txt b/source/libs/stream/CMakeLists.txt index 2edbc44aaeb8e87c0dc51971a4c92c292549a87b..89b82ef9ba45b95a4a8ac7fa96baae7afd376efa 100644 --- a/source/libs/stream/CMakeLists.txt +++ b/source/libs/stream/CMakeLists.txt @@ -10,7 +10,7 @@ if(${BUILD_WITH_ROCKSDB}) target_link_libraries( stream PUBLIC rocksdb tdb - PRIVATE os util transport qcom executor wal + PRIVATE os util transport qcom executor wal index ) target_include_directories(