From 3566cac20640825085fa1b63fca97c8f594d9186 Mon Sep 17 00:00:00 2001 From: wangjiaming0909 <604227650@qq.com> Date: Tue, 19 Mar 2024 12:04:27 +0800 Subject: [PATCH] add max tsma num opt --- include/common/tglobal.h | 1 + include/util/taoserror.h | 1 + source/common/src/tglobal.c | 7 ++++++- source/dnode/mnode/impl/src/mndSma.c | 5 +++++ source/dnode/mnode/sdb/inc/sdb.h | 5 +++++ source/dnode/mnode/sdb/src/sdbHash.c | 4 ++++ source/util/src/terror.c | 1 + tests/system-test/2-query/tsma.py | 15 +++++++++++++-- 8 files changed, 36 insertions(+), 3 deletions(-) diff --git a/include/common/tglobal.h b/include/common/tglobal.h index 96488f3bd5..a23e0d42b1 100644 --- a/include/common/tglobal.h +++ b/include/common/tglobal.h @@ -201,6 +201,7 @@ extern char tsSmlTsDefaultName[]; extern int32_t tmqMaxTopicNum; extern int32_t tmqRowSize; +extern int32_t tsMaxTsmaNum; // wal extern int64_t tsWalFsyncDataSizeLimit; diff --git a/include/util/taoserror.h b/include/util/taoserror.h index 5328703b19..afc2d69897 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -424,6 +424,7 @@ int32_t* taosGetErrno(); #define TSDB_CODE_MND_SMA_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0481) #define TSDB_CODE_MND_INVALID_SMA_OPTION TAOS_DEF_ERROR_CODE(0, 0x0482) #define TSDB_CODE_MND_INVALID_DROP_TSMA TAOS_DEF_ERROR_CODE(0, 0x0485) +#define TSDB_CODE_MND_MAX_TSMA_NUM_EXCEEDED TAOS_DEF_ERROR_CODE(0, 0x0486) // mnode-tag-indxe diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 6ae93637d4..9a006348e3 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -298,6 +298,8 @@ int32_t tsS3UploadDelaySec = 60; bool tsExperimental = true; +int32_t tsMaxTsmaNum = 8; + #ifndef _STORAGE int32_t taosSetTfsCfg(SConfig *pCfg) { SConfigItem *pItem = cfgGetItem(pCfg, "dataDir"); @@ -732,6 +734,7 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { if (cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + if (cfgAddInt32(pCfg, "tsMaxTsmaNum", tsMaxTsmaNum, 0, 12, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; if (cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; @@ -1203,6 +1206,7 @@ static int32_t taosSetServerCfg(SConfig *pCfg) { tmqMaxTopicNum = cfgGetItem(pCfg, "tmqMaxTopicNum")->i32; tmqRowSize = cfgGetItem(pCfg, "tmqRowSize")->i32; + tsMaxTsmaNum = cfgGetItem(pCfg, "tsMaxTsmaNum")->i32; tsTransPullupInterval = cfgGetItem(pCfg, "transPullupInterval")->i32; tsCompactPullupInterval = cfgGetItem(pCfg, "compactPullupInterval")->i32; @@ -1548,7 +1552,8 @@ static int32_t taosCfgDynamicOptionsForServer(SConfig *pCfg, char *name) { {"s3PageCacheSize", &tsS3PageCacheSize}, {"s3UploadDelaySec", &tsS3UploadDelaySec}, {"supportVnodes", &tsNumOfSupportVnodes}, - {"experimental", &tsExperimental}}; + {"experimental", &tsExperimental}, + {"maxTsmaNum", &tsMaxTsmaNum}}; if (taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true) != 0) { taosCfgSetOption(options, tListLen(options), pItem, false); diff --git a/source/dnode/mnode/impl/src/mndSma.c b/source/dnode/mnode/impl/src/mndSma.c index 2d6c179e0e..039fa52757 100644 --- a/source/dnode/mnode/impl/src/mndSma.c +++ b/source/dnode/mnode/impl/src/mndSma.c @@ -1611,6 +1611,11 @@ static int32_t mndProcessCreateTSMAReq(SRpcMsg* pReq) { int64_t mTraceId = TRACE_GET_ROOTID(&pReq->info.traceId); SMCreateSmaReq createReq = {0}; + if (sdbGetSize(pMnode->pSdb, SDB_SMA) >= tsMaxTsmaNum) { + terrno = TSDB_CODE_MND_MAX_TSMA_NUM_EXCEEDED; + goto _OVER; + } + if (tDeserializeSMCreateSmaReq(pReq->pCont, pReq->contLen, &createReq) != 0) { terrno = TSDB_CODE_INVALID_MSG; goto _OVER; diff --git a/source/dnode/mnode/sdb/inc/sdb.h b/source/dnode/mnode/sdb/inc/sdb.h index 12a34b0305..0b2de2b151 100644 --- a/source/dnode/mnode/sdb/inc/sdb.h +++ b/source/dnode/mnode/sdb/inc/sdb.h @@ -352,6 +352,11 @@ void sdbTraverse(SSdb *pSdb, ESdbType type, sdbTraverseFp fp, void *p1, void *p2 */ int32_t sdbGetSize(SSdb *pSdb, ESdbType type); +/** + * @brief get valid number of rows, removed rows are ignored + */ +int32_t sdbGetValidSize(SSdb* pSdb, ESdbType type); + /** * @brief Get the max id of the table, keyType of table should be INT32 * diff --git a/source/dnode/mnode/sdb/src/sdbHash.c b/source/dnode/mnode/sdb/src/sdbHash.c index 05231f8359..41aabfa26d 100644 --- a/source/dnode/mnode/sdb/src/sdbHash.c +++ b/source/dnode/mnode/sdb/src/sdbHash.c @@ -510,3 +510,7 @@ int64_t sdbGetTableVer(SSdb *pSdb, ESdbType type) { return pSdb->tableVer[type]; } + +int32_t sdbGetValidSize(SSdb* pSdb, ESdbType type) { + +} diff --git a/source/util/src/terror.c b/source/util/src/terror.c index 2fc7c07c49..773988d8b3 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -326,6 +326,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_ALREADY_EXIST, "SMA already exists in TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_NOT_EXIST, "sma not exist") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_SMA_OPTION, "Invalid sma option") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_DROP_TSMA, "Invalid drop base tsma, drop recursive tsma first") +TAOS_DEFINE_ERROR(TSDB_CODE_MND_MAX_TSMA_NUM_EXCEEDED, "Max tsma num exceeded") // mnode-view diff --git a/tests/system-test/2-query/tsma.py b/tests/system-test/2-query/tsma.py index 60e38233b0..8264cb6761 100644 --- a/tests/system-test/2-query/tsma.py +++ b/tests/system-test/2-query/tsma.py @@ -1097,8 +1097,7 @@ class TDTestCase: tdSql.execute('use nsdb', queryTimes=1) tdSql.execute( 'create table meters(ts timestamp, c1 int, c2 int, c3 varchar(255)) tags(t1 int, t2 int)', queryTimes=1) - self.create_tsma('tsma1', 'nsdb', 'meters', [ - 'avg(c1)', 'avg(c2)'], '5m') + self.create_tsma('tsma1', 'nsdb', 'meters', ['avg(c1)', 'avg(c2)'], '5m') # Invalid tsma interval, 1ms ~ 1h is allowed tdSql.error( 'create tsma tsma2 on meters function(avg(c1), avg(c2)) interval(2h)', -2147471097) @@ -1131,8 +1130,20 @@ class TDTestCase: tdSql.error( 'create tsma tsma1 on meters function(avg(c1), avg(c2)) interval(10m)', -2147482496) + # max tsma num 8 + self.create_tsma('tsma2', 'nsdb', 'meters', ['avg(c1)', 'avg(c2)'], '10s') + self.create_tsma('tsma3', 'nsdb', 'meters', ['avg(c1)', 'avg(c2)'], '100s') + self.create_tsma('tsma4', 'nsdb', 'meters', ['avg(c1)', 'avg(c2)'], '101s') + self.create_tsma('tsma5', 'nsdb', 'meters', ['avg(c1)', 'count(ts)'], '102s') + self.create_tsma('tsma6', 'nsdb', 'meters', ['avg(c1)', 'avg(c2)'], '103s') + self.create_tsma('tsma7', 'nsdb', 'meters', ['avg(c1)', 'count(c2)'], '104s') + self.create_tsma('tsma8', 'nsdb', 'meters', ['avg(c1)', 'sum(c2)'], '105s') + tdSql.error('create tsma tsma9 on meters function(count(ts), count(c1), sum(c2)) interval(99s)', -2147482490) + tdSql.error('create recursive tsma tsma9 on tsma8 interval(210s)', -2147482490) + tdSql.execute('drop tsma tsma1', queryTimes=1) tdSql.execute('use test', queryTimes=1) + time.sleep(999999) tdSql.execute( 'create tsma tsma1 on nsdb.meters function(avg(c1), avg(c2)) interval(10m)', queryTimes=1) self.wait_for_tsma_calculation(