From 32b23885ad93d29e2d4ba3e26c0a91e126662c85 Mon Sep 17 00:00:00 2001 From: chenhaoran Date: Fri, 6 Sep 2024 14:26:18 +0800 Subject: [PATCH 01/46] tetst:modify error path and correct checking timestamp data with timezone in windows ci --- tests/pytest/util/csv.py | 7 ++- tests/pytest/util/sql.py | 46 ++++++++++++++----- tests/system-test/0-others/backquote_check.py | 2 +- .../test_hot_refresh_configurations.py | 17 +++++-- .../1-insert/composite_primary_key_insert.py | 2 +- tests/system-test/1-insert/drop.py | 2 +- tests/system-test/2-query/fill.py | 2 +- tests/system-test/2-query/normal.py | 13 +++--- 8 files changed, 64 insertions(+), 27 deletions(-) diff --git a/tests/pytest/util/csv.py b/tests/pytest/util/csv.py index 6e1ee1732c..2d2e929c86 100644 --- a/tests/pytest/util/csv.py +++ b/tests/pytest/util/csv.py @@ -1,5 +1,6 @@ import csv import os +import platform class TDCsv: def __init__(self): @@ -25,7 +26,11 @@ class TDCsv: @property def file(self): if self.file_name and self.file_path: - return os.path.join(self.file_path, self.file_name) + print(f"self.file_path {self.file_path}, self.file_name {self.file_name}") + csv_file = os.path.join(self.file_path, self.file_name) + if platform.system().lower() == 'windows': + csv_file = csv_file.replace("\\", "/") + return csv_file return None diff --git a/tests/pytest/util/sql.py b/tests/pytest/util/sql.py index 90d3f2fe6c..3bc784063e 100644 --- a/tests/pytest/util/sql.py +++ b/tests/pytest/util/sql.py @@ -24,26 +24,48 @@ from util.log import * from util.constant import * import ctypes import random -# from datetime import timezone +import datetime import time +from tzlocal import get_localzone def _parse_ns_timestamp(timestr): dt_obj = datetime.datetime.strptime(timestr[:len(timestr)-3], "%Y-%m-%d %H:%M:%S.%f") tz = int(int((dt_obj-datetime.datetime.fromtimestamp(0,dt_obj.tzinfo)).total_seconds())*1e9) + int(dt_obj.microsecond * 1000) + int(timestr[-3:]) return tz - def _parse_datetime(timestr): - try: - return datetime.datetime.strptime(timestr, '%Y-%m-%d %H:%M:%S.%f') - except ValueError: - pass - try: - return datetime.datetime.strptime(timestr, '%Y-%m-%d %H:%M:%S') - except ValueError: - pass + # defined timestr formats + formats = [ + '%Y-%m-%d %H:%M:%S.%f%z', # 包含微秒和时区偏移 + '%Y-%m-%d %H:%M:%S%z', # 不包含微秒但包含时区偏移 + '%Y-%m-%d %H:%M:%S.%f', # 包含微秒 + '%Y-%m-%d %H:%M:%S' # 不包含微秒 + ] + + for fmt in formats: + try: + # try to parse the string with the current format + dt = datetime.datetime.strptime(timestr, fmt) + # 如果字符串包含时区信息,则返回 aware 对象 + # if sting contains timezone info, return aware object + if dt.tzinfo is not None: + return dt + + else: + # if sting does not contain timezone info, assume it is in local timezone + # get local timezone + local_timezone = get_localzone() + # print("Timezone:", local_timezone) + return dt.replace(tzinfo=local_timezone) + except ValueError: + continue # if the current format does not match, try the next format + + # 如果所有格式都不匹配,返回 None + # if none of the formats match, return + raise ValueError(f"input format does not match. correct formats include: '{', '.join(formats)}'") class TDSql: + def __init__(self): self.queryRows = 0 self.queryCols = 0 @@ -408,6 +430,7 @@ class TDSql: if self.queryResult[row][col] != data: if self.cursor.istype(col, "TIMESTAMP"): + # tdLog.debug(f"self.queryResult[row][col]:{self.queryResult[row][col]}, data:{data},len(data):{len(data)}, isinstance(data,str) :{isinstance(data,str)}") # suppose user want to check nanosecond timestamp if a longer data passed`` if isinstance(data,str) : if (len(data) >= 28): @@ -419,8 +442,9 @@ class TDSql: args = (caller.filename, caller.lineno, self.sql, row, col, self.queryResult[row][col], data) tdLog.exit("%s(%d) failed: sql:%s row:%d col:%d data:%s != expect:%s" % args) else: + # tdLog.info(f"datetime.timezone.utc:{datetime.timezone.utc},data:{data},_parse_datetime(data).astimezone(datetime.timezone.utc):{_parse_datetime(data).astimezone(datetime.timezone.utc)}") if self.queryResult[row][col].astimezone(datetime.timezone.utc) == _parse_datetime(data).astimezone(datetime.timezone.utc): - # tdLog.info(f"sql:{self.sql}, row:{row} col:{col} data:{self.queryResult[row][col]} == expect:{data}") + # tdLog.info(f"sql:{self.sql}, row:{row} col:{col} data:{self.queryResult[row][col].astimezone(datetime.timezone.utc)} == expect:{_parse_datetime(data).astimezone(datetime.timezone.utc)}") if(show): tdLog.info("check successfully") else: diff --git a/tests/system-test/0-others/backquote_check.py b/tests/system-test/0-others/backquote_check.py index 8cb268fb3d..aad2e21e6e 100644 --- a/tests/system-test/0-others/backquote_check.py +++ b/tests/system-test/0-others/backquote_check.py @@ -133,7 +133,7 @@ class TDTestCase: def run(self): self.topic_name_check() self.db_name_check() - if platform.system().lower() == 'windows': + if platform.system().lower() != 'windows': self.stream_name_check() self.table_name_check() self.view_name_check() diff --git a/tests/system-test/0-others/test_hot_refresh_configurations.py b/tests/system-test/0-others/test_hot_refresh_configurations.py index 15f291787a..dfb190d4ec 100644 --- a/tests/system-test/0-others/test_hot_refresh_configurations.py +++ b/tests/system-test/0-others/test_hot_refresh_configurations.py @@ -165,18 +165,25 @@ class TDTestCase: if config_name == row[0]: tdLog.debug("Found variable '{}'".format(row[0])) return row[1] - + + def get_server_param_value(self, config_name): + tdSql.query("show dnode 1 variables;") + for row in tdSql.queryResult: + if config_name == row[0]: + tdLog.debug("Found variable '{}'".format(row[0])) + return row[1] + def cli_check(self, name, values, except_values=False): if not except_values: for v in values: - tdLog.debug("Set {} to {}".format(name, v)) + tdLog.debug("Set client {} to {}".format(name, v)) tdSql.execute(f'alter local "{name} {v}";') value = self.get_param_value(name) tdLog.debug("Get {} value: {}".format(name, value)) assert(v == int(value)) else: for v in values: - tdLog.debug("Set {} to {}".format(name, v)) + tdLog.debug("Set client {} to {}".format(name, v)) tdSql.error(f'alter local "{name} {v}";') def svr_check(self, name, alias, values, except_values=False): @@ -190,8 +197,8 @@ class TDTestCase: if not except_values: for v in values: dnode = random.choice(p_list) - tdSql.execute(f'alter {dnode} "{name} {v}";') - value = self.get_param_value(alias) + tdSql.execute(f'alter {dnode} "{name} {v}";',show=True) + value = self.get_server_param_value(name) if value: tdLog.debug(f"value: {value}") assert(value == str(bool(v)).lower() if is_bool else str(v)) diff --git a/tests/system-test/1-insert/composite_primary_key_insert.py b/tests/system-test/1-insert/composite_primary_key_insert.py index c888bacadc..311b9cf5b6 100644 --- a/tests/system-test/1-insert/composite_primary_key_insert.py +++ b/tests/system-test/1-insert/composite_primary_key_insert.py @@ -4,6 +4,7 @@ from util.log import * from util.sql import * from util.cases import * from util.csv import * +import platform import os import taos import json @@ -56,7 +57,6 @@ class TDTestCase: tdSql.init(conn.cursor(), True) self.testcasePath = os.path.split(__file__)[0] - self.testcasePath = self.testcasePath.replace('\\', '//') self.testcaseFilename = os.path.split(__file__)[-1] os.system("rm -rf %s/%s.sql" % (self.testcasePath,self.testcaseFilename)) # tdSql.execute(f"insert into db4096.ctb00 file '{self.testcasePath}//tableColumn4096csvLength64k.csv'") diff --git a/tests/system-test/1-insert/drop.py b/tests/system-test/1-insert/drop.py index bd5e4cab49..2bce60cafb 100644 --- a/tests/system-test/1-insert/drop.py +++ b/tests/system-test/1-insert/drop.py @@ -162,7 +162,7 @@ class TDTestCase: self.drop_ntb_check() self.drop_stb_ctb_check() self.drop_topic_check() - if platform.system().lower() == 'windows': + if platform.system().lower() != 'windows': self.drop_stream_check() pass def stop(self): diff --git a/tests/system-test/2-query/fill.py b/tests/system-test/2-query/fill.py index 31d2d92563..3a868b7877 100644 --- a/tests/system-test/2-query/fill.py +++ b/tests/system-test/2-query/fill.py @@ -1,6 +1,5 @@ import queue import random -from fabric2.runners import threading from pandas._libs import interval import taos import sys @@ -9,6 +8,7 @@ from util.common import TDCom from util.log import * from util.sql import * from util.cases import * +import threading diff --git a/tests/system-test/2-query/normal.py b/tests/system-test/2-query/normal.py index f4b40f408b..161a9e610d 100644 --- a/tests/system-test/2-query/normal.py +++ b/tests/system-test/2-query/normal.py @@ -140,14 +140,14 @@ class TDTestCase: tdsql2 = tdCom.newTdSqlWithTimezone(timezone="UTC") tdsql2.query(f"select * from {dbname}.tzt") tdsql2.checkRows(1) - tdsql2.checkData(0, 0, "2018-09-17 01:00:00") - - + # checkData:The expected date and time is the local time zone of the machine where the test case is executed. + tdsql2.checkData(0, 0, "2018-09-17 09:00:00") + tdsql2.execute(f'insert into {dbname}.tzt values({self.ts + 1000}, 2)') tdsql2.query(f"select * from {dbname}.tzt order by ts") tdsql2.checkRows(2) - tdsql2.checkData(0, 0, "2018-09-17 01:00:00") - tdsql2.checkData(1, 0, "2018-09-17 01:00:01") + tdsql2.checkData(0, 0, "2018-09-17 09:00:00") + tdsql2.checkData(1, 0, "2018-09-17 09:00:01") tdsql2 = tdCom.newTdSqlWithTimezone(timezone="Asia/Shanghai") tdsql2.query(f"select * from {dbname}.tzt order by ts") @@ -160,7 +160,7 @@ class TDTestCase: tdSql.prepare() self.timeZoneTest() - self.inAndNotinTest() + # self.inAndNotinTest() def stop(self): @@ -168,4 +168,5 @@ class TDTestCase: tdLog.success("%s successfully executed" % __file__) tdCases.addWindows(__file__, TDTestCase()) + tdCases.addLinux(__file__, TDTestCase()) From d9e17c2284f7bce36007cae10394d3687e98b135 Mon Sep 17 00:00:00 2001 From: dmchen Date: Mon, 23 Sep 2024 06:25:25 +0000 Subject: [PATCH 02/46] fix/TD-32264-check-return-value --- source/util/src/tworker.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/util/src/tworker.c b/source/util/src/tworker.c index c2757dcabc..d3a18ddb16 100644 --- a/source/util/src/tworker.c +++ b/source/util/src/tworker.c @@ -414,7 +414,8 @@ STaosQueue *tWWorkerAllocQueue(SWWorkerPool *pool, void *ahandle, FItems fp) { TdThreadAttr thAttr; (void)taosThreadAttrInit(&thAttr); (void)taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); - if (taosThreadCreate(&worker->thread, &thAttr, (ThreadFp)tWWorkerThreadFp, worker) != 0) goto _OVER; + code = taosThreadCreate(&worker->thread, &thAttr, (ThreadFp)tWWorkerThreadFp, worker); + if ((code)) goto _OVER; uInfo("worker:%s:%d is launched, max:%d", pool->name, worker->id, pool->max); pool->nextId = (pool->nextId + 1) % pool->max; From b33fabb2d764dc3a919c3fbe5be66ec0537f3c3d Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Tue, 24 Sep 2024 09:19:17 +0800 Subject: [PATCH 03/46] fix possible mem leak --- source/libs/transport/src/transCli.c | 27 ++++++++++++++++----------- source/libs/transport/src/transComm.c | 1 + 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c index 087e82d0ec..695f523f6e 100644 --- a/source/libs/transport/src/transCli.c +++ b/source/libs/transport/src/transCli.c @@ -493,6 +493,10 @@ void cliHandleResp(SCliConn* conn) { } if (CONN_NO_PERSIST_BY_APP(conn)) { + if (refId != 0) { + (void)transReleaseExHandle(transGetRefMgt(), refId); + (void)transRemoveExHandle(transGetRefMgt(), refId); + } return addConnToPool(pThrd->pool, conn); } @@ -1402,8 +1406,7 @@ static void cliHandleBatchReq(SCliBatch* pBatch, SCliThrd* pThrd) { tTrace("%s conn %p try to connect to %s", pTransInst->label, conn, pList->dst); int32_t fd = taosCreateSocketWithTimeout(TRANS_CONN_TIMEOUT * 10); if (fd == -1) { - tError("%s conn %p failed to create socket, reason:%s", transLabel(pTransInst), conn, - tstrerror(terrno)); + tError("%s conn %p failed to create socket, reason:%s", transLabel(pTransInst), conn, tstrerror(terrno)); cliHandleFastFail(conn, -1); return; } @@ -1636,7 +1639,7 @@ static void cliHandleFreeById(SCliMsg* pMsg, SCliThrd* pThrd) { int64_t refId = (int64_t)(pMsg->msg.info.handle); SExHandle* exh = transAcquireExHandle(transGetRefMgt(), refId); if (exh == NULL) { - tDebug("id %" PRId64 " already released", refId); + tDebug("refId %" PRId64 " already released", refId); destroyCmsg(pMsg); return; } @@ -1648,7 +1651,7 @@ static void cliHandleFreeById(SCliMsg* pMsg, SCliThrd* pThrd) { if (conn == NULL || conn->refId != refId) { TAOS_CHECK_GOTO(TSDB_CODE_REF_INVALID_ID, NULL, _exception); } - tDebug("do free conn %p by id %" PRId64 "", conn, refId); + tDebug("do free conn %p by refId %" PRId64 "", conn, refId); int32_t size = transQueueSize(&conn->cliMsgs); if (size == 0) { @@ -1882,8 +1885,7 @@ void cliHandleReq(SCliMsg* pMsg, SCliThrd* pThrd) { tGTrace("%s conn %p try to connect to %s", pTransInst->label, conn, conn->dstAddr); int32_t fd = taosCreateSocketWithTimeout(TRANS_CONN_TIMEOUT * 10); if (fd == -1) { - tGError("%s conn %p failed to create socket, reason:%s", transLabel(pTransInst), conn, - tstrerror(terrno)); + tGError("%s conn %p failed to create socket, reason:%s", transLabel(pTransInst), conn, tstrerror(terrno)); cliHandleExcept(conn, -1); terrno = 0; return; @@ -3319,13 +3321,14 @@ int32_t transAllocHandle(int64_t* refId) { QUEUE_INIT(&exh->q); taosInitRWLatch(&exh->latch); - tDebug("pre alloc refId %" PRId64 "", exh->refId); + tDebug("pre alloc refId %" PRId64 ", alloc exhandle %p", exh->refId, exh); *refId = exh->refId; return 0; } int32_t transFreeConnById(void* shandle, int64_t transpointId) { - int32_t code = 0; - STrans* pTransInst = (STrans*)transAcquireExHandle(transGetInstMgt(), (int64_t)shandle); + int32_t code = 0; + SCliMsg* pCli = NULL; + STrans* pTransInst = (STrans*)transAcquireExHandle(transGetInstMgt(), (int64_t)shandle); if (pTransInst == NULL) { return TSDB_CODE_RPC_MODULE_QUIT; } @@ -3339,7 +3342,7 @@ int32_t transFreeConnById(void* shandle, int64_t transpointId) { TAOS_CHECK_GOTO(TSDB_CODE_REF_INVALID_ID, NULL, _exception); } - SCliMsg* pCli = taosMemoryCalloc(1, sizeof(SCliMsg)); + pCli = taosMemoryCalloc(1, sizeof(SCliMsg)); if (pCli == NULL) { TAOS_CHECK_GOTO(terrno, NULL, _exception); } @@ -3352,11 +3355,13 @@ int32_t transFreeConnById(void* shandle, int64_t transpointId) { code = transAsyncSend(pThrd->asyncPool, &pCli->q); if (code != 0) { - taosMemoryFree(pCli); + taosMemoryFreeClear(pCli); TAOS_CHECK_GOTO(code, NULL, _exception); } _exception: transReleaseExHandle(transGetInstMgt(), (int64_t)shandle); + taosMemoryFree(pCli); + return code; } diff --git a/source/libs/transport/src/transComm.c b/source/libs/transport/src/transComm.c index 05244dbce2..a4d21a3a8e 100644 --- a/source/libs/transport/src/transComm.c +++ b/source/libs/transport/src/transComm.c @@ -768,6 +768,7 @@ void transDestroyExHandle(void* handle) { if (!QUEUE_IS_EMPTY(&eh->q)) { tDebug("handle %p mem leak", handle); } + tDebug("free exhandle %p", handle); taosMemoryFree(handle); } From 338f9cd32db36892080a9f1fef1385c8b43fc41c Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Tue, 24 Sep 2024 14:30:28 +0800 Subject: [PATCH 04/46] fix possible mem leak --- source/libs/transport/src/transCli.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c index 695f523f6e..60c75360c1 100644 --- a/source/libs/transport/src/transCli.c +++ b/source/libs/transport/src/transCli.c @@ -493,10 +493,6 @@ void cliHandleResp(SCliConn* conn) { } if (CONN_NO_PERSIST_BY_APP(conn)) { - if (refId != 0) { - (void)transReleaseExHandle(transGetRefMgt(), refId); - (void)transRemoveExHandle(transGetRefMgt(), refId); - } return addConnToPool(pThrd->pool, conn); } @@ -3361,6 +3357,9 @@ int32_t transFreeConnById(void* shandle, int64_t transpointId) { _exception: transReleaseExHandle(transGetInstMgt(), (int64_t)shandle); + + (void)transReleaseExHandle(transGetRefMgt(), transpointId); + (void)transRemoveExHandle(transGetRefMgt(), transpointId); taosMemoryFree(pCli); return code; From 8eff35cd778aa64378812a2b8ae4ef45be79d738 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao@163.com> Date: Tue, 24 Sep 2024 14:33:53 +0800 Subject: [PATCH 05/46] fix(stream):rebuild stream event window --- source/libs/executor/src/scanoperator.c | 4 ++-- source/libs/executor/src/streameventwindowoperator.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 76e4f8ba56..235dbdb571 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -3482,7 +3482,7 @@ FETCH_NEXT_BLOCK: return code; } qError("%s===stream=== %s failed at line %d since pInfo->pUpdateRes is empty", GET_TASKID(pTaskInfo), __func__, - lino); + __LINE__); blockDataCleanup(pInfo->pUpdateDataRes); pInfo->scanMode = STREAM_SCAN_FROM_READERHANDLE; } break; @@ -3496,7 +3496,7 @@ FETCH_NEXT_BLOCK: return code; } qError("%s===stream=== %s failed at line %d since pInfo->pUpdateRes is empty", GET_TASKID(pTaskInfo), __func__, - lino); + __LINE__); blockDataCleanup(pInfo->pUpdateDataRes); pInfo->scanMode = STREAM_SCAN_FROM_READERHANDLE; } break; diff --git a/source/libs/executor/src/streameventwindowoperator.c b/source/libs/executor/src/streameventwindowoperator.c index a325616bd3..6b094e7264 100644 --- a/source/libs/executor/src/streameventwindowoperator.c +++ b/source/libs/executor/src/streameventwindowoperator.c @@ -176,7 +176,7 @@ _end: pAggSup->stateStore.streamStateSessionDel(pAggSup->pState, &pCurWin->winInfo.sessionWin); } pAggSup->stateStore.streamStateFreeCur(pCur); - qDebug("===stream===set event next win buff. skey:%" PRId64 ", endkey:%" PRId64, pCurWin->winInfo.sessionWin.win.skey, + qDebug("===stream===set event cur win buff. skey:%" PRId64 ", endkey:%" PRId64, pCurWin->winInfo.sessionWin.win.skey, pCurWin->winInfo.sessionWin.win.ekey); _error: @@ -230,7 +230,7 @@ int32_t updateEventWindowInfo(SStreamAggSupporter* pAggSup, SEventWindowInfo* pW pWinInfo->pWinFlag->endFlag = ends[i]; } else if (pWin->ekey == pTsData[i]) { pWinInfo->pWinFlag->endFlag |= ends[i]; - } else { + } else if (ends[i] && !pWinInfo->pWinFlag->endFlag) { *pRebuild = true; pWinInfo->pWinFlag->endFlag |= ends[i]; (*pWinRow) = i + 1 - start; From abaccdc5820bdf2358671823ca223a4c7896e823 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 24 Sep 2024 14:39:06 +0800 Subject: [PATCH 06/46] fix:[TS-5473] memory leak --- tests/system-test/7-tmq/tmq_ts-5473.py | 39 ++++ utils/test/c/tmq_write_raw_test.c | 281 +++++++++++++++++++++++++ 2 files changed, 320 insertions(+) create mode 100644 tests/system-test/7-tmq/tmq_ts-5473.py create mode 100644 utils/test/c/tmq_write_raw_test.c diff --git a/tests/system-test/7-tmq/tmq_ts-5473.py b/tests/system-test/7-tmq/tmq_ts-5473.py new file mode 100644 index 0000000000..ad08fa559c --- /dev/null +++ b/tests/system-test/7-tmq/tmq_ts-5473.py @@ -0,0 +1,39 @@ + +import taos +import sys +import time +import socket +import os +import threading + +from util.log import * +from util.sql import * +from util.cases import * +from util.dnodes import * +from util.common import * +from taos.tmq import * +sys.path.append("./7-tmq") +from tmqCommon import * + +class TDTestCase: + updatecfgDict = {'debugFlag': 135, 'asynclog': 0} + def init(self, conn, logSql, replicaVar=1): + self.replicaVar = int(replicaVar) + tdLog.debug(f"start to excute {__file__}") + tdSql.init(conn.cursor()) + #tdSql.init(conn.cursor(), logSql) # output sql.txt file + + def run(self): + buildPath = tdCom.getBuildPath() + cmdStr = '%s/build/bin/tmq_write_raw_test'%(buildPath) + tdLog.info(cmdStr) + os.system(cmdStr) + + return + + def stop(self): + tdSql.close() + tdLog.success(f"{__file__} successfully executed") + +tdCases.addLinux(__file__, TDTestCase()) +tdCases.addWindows(__file__, TDTestCase()) diff --git a/utils/test/c/tmq_write_raw_test.c b/utils/test/c/tmq_write_raw_test.c new file mode 100644 index 0000000000..f33fac9a0a --- /dev/null +++ b/utils/test/c/tmq_write_raw_test.c @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include "cJSON.h" +#include "taos.h" +#include "tmsg.h" +#include "types.h" + +static TAOS* use_db() { + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return NULL; + } + + TAOS_RES* pRes = taos_query(pConn, "use db_taosx"); + if (taos_errno(pRes) != 0) { + printf("error in use db_taosx, reason:%s\n", taos_errstr(pRes)); + return NULL; + } + taos_free_result(pRes); + return pConn; +} + +static void msg_process(TAOS_RES* msg) { + printf("-----------topic-------------: %s\n", tmq_get_topic_name(msg)); + printf("db: %s\n", tmq_get_db_name(msg)); + printf("vg: %d\n", tmq_get_vgroup_id(msg)); + TAOS* pConn = use_db(); + if (tmq_get_res_type(msg) == TMQ_RES_TABLE_META || tmq_get_res_type(msg) == TMQ_RES_METADATA) { + char* result = tmq_get_json_meta(msg); + printf("meta result: %s\n", result); + tmq_free_json_meta(result); + } + + tmq_raw_data raw = {0}; + tmq_get_raw(msg, &raw); + printf("write raw data type: %d\n", raw.raw_type); + int32_t ret = tmq_write_raw(pConn, raw); + printf("write raw data: %s\n", tmq_err2str(ret)); + ASSERT(ret == 0); + + tmq_free_raw(raw); + taos_close(pConn); +} + +int buildDatabase(TAOS* pConn, TAOS_RES* pRes) { + pRes = taos_query(pConn, + "create stable if not exists st1 (ts timestamp, c1 int, c2 float, c3 binary(16)) tags(t1 int, t3 " + "nchar(8), t4 bool)"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table st1, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table if not exists ct0 using st1 tags(1000, \"ttt\", true)"); + if (taos_errno(pRes) != 0) { + printf("failed to create child table tu1, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into ct0 using st1 tags(1000, \"ttt\", true) values(1626006833400, 1, 2, 'a')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ct0, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table if not exists ct1 using st1(t1) tags(2000)"); + if (taos_errno(pRes) != 0) { + printf("failed to create child table ct1, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table if not exists ct2 using st1(t1) tags(NULL)"); + if (taos_errno(pRes) != 0) { + printf("failed to create child table ct2, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into ct1 using st1(t1) tags(2000) values(1626006833600, 3, 4, 'b')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ct1, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table if not exists ct3 using st1(t1) tags(3000)"); + if (taos_errno(pRes) != 0) { + printf("failed to create child table ct3, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into ct0 using st1 tags(1000, \"ttt\", true) values(1626006833400, 1, 2, 'a')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ct0, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into ct1 using st1(t1) tags(2000) values(1626006833600, 3, 4, 'b')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ct1, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query( + pConn, + "insert into ct3 using st1(t1) tags(3000) values(1626006833600, 5, 6, 'c') ct1 using st1(t1) tags(2000) values(1626006833601, 2, 3, 'sds') (1626006833602, 4, 5, " + "'ddd') ct0 using st1 tags(1000, \"ttt\", true) values(1626006833603, 4, 3, 'hwj') ct1 using st1(t1) tags(2000) values(now+5s, 23, 32, 's21ds')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ct3, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + return 0; +} + +int32_t init_env() { + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return -1; + } + + TAOS_RES* pRes = taos_query(pConn, "drop database if exists db_taosx"); + if (taos_errno(pRes) != 0) { + printf("error in drop db_taosx, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create database if not exists db_taosx vgroups 1 wal_retention_period 3600"); + if (taos_errno(pRes) != 0) { + printf("error in create db_taosx, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "drop topic if exists topic_db"); + if (taos_errno(pRes) != 0) { + printf("error in drop topic, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "drop database if exists abc1"); + if (taos_errno(pRes) != 0) { + printf("error in drop db, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create database if not exists abc1 vgroups 1 wal_retention_period 3600"); + if (taos_errno(pRes) != 0) { + printf("error in create db, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "use abc1"); + if (taos_errno(pRes) != 0) { + printf("error in use db, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + buildDatabase(pConn, pRes); + + taos_close(pConn); + return 0; +} + +int32_t create_topic() { + printf("create topic\n"); + TAOS_RES* pRes; + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return -1; + } + + pRes = taos_query(pConn, "create topic topic_db with meta as database abc1"); + if (taos_errno(pRes) != 0) { + printf("failed to create topic topic_db, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + taos_close(pConn); + return 0; +} + +void tmq_commit_cb_print(tmq_t* tmq, int32_t code, void* param) { + printf("commit %d tmq %p param %p\n", code, tmq, param); +} + +tmq_t* build_consumer() { + tmq_conf_t* conf = tmq_conf_new(); + tmq_conf_set(conf, "group.id", "tg2"); + tmq_conf_set(conf, "client.id", "my app 1"); + tmq_conf_set(conf, "td.connect.user", "root"); + tmq_conf_set(conf, "td.connect.pass", "taosdata"); + tmq_conf_set(conf, "msg.with.table.name", "true"); + tmq_conf_set(conf, "enable.auto.commit", "true"); + tmq_conf_set(conf, "auto.offset.reset", "earliest"); + tmq_conf_set(conf, "msg.consume.excluded", "1"); +// tmq_conf_set(conf, "max.poll.interval.ms", "20000"); + + tmq_conf_set_auto_commit_cb(conf, tmq_commit_cb_print, NULL); + tmq_t* tmq = tmq_consumer_new(conf, NULL, 0); + assert(tmq); + tmq_conf_destroy(conf); + return tmq; +} + +tmq_list_t* build_topic_list() { + tmq_list_t* topic_list = tmq_list_new(); + tmq_list_append(topic_list, "topic_db"); + return topic_list; +} + +void basic_consume_loop(tmq_t* tmq, tmq_list_t* topics) { + int32_t code; + + if ((code = tmq_subscribe(tmq, topics))) { + fprintf(stderr, "%% Failed to start consuming topics: %s\n", tmq_err2str(code)); + printf("subscribe err\n"); + return; + } + int32_t cnt = 0; + while (1) { + TAOS_RES* tmqmessage = tmq_consumer_poll(tmq, 5000); + if (tmqmessage) { + cnt++; + msg_process(tmqmessage); + taos_free_result(tmqmessage); + } else { + break; + } + } + + code = tmq_consumer_close(tmq); + if (code) + fprintf(stderr, "%% Failed to close consumer: %s\n", tmq_err2str(code)); + else + fprintf(stderr, "%% Consumer closed\n"); +} + +int main(int argc, char* argv[]) { + if (init_env() < 0) { + return -1; + } + create_topic(); + + tmq_t* tmq = build_consumer(); + tmq_list_t* topic_list = build_topic_list(); + basic_consume_loop(tmq, topic_list); + tmq_list_destroy(topic_list); +} From 89c08a3a69c451bede259609791a771780f28f83 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Tue, 24 Sep 2024 14:42:53 +0800 Subject: [PATCH 07/46] fix possible mem leak --- source/libs/transport/src/transCli.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c index 60c75360c1..d906145a7b 100644 --- a/source/libs/transport/src/transCli.c +++ b/source/libs/transport/src/transCli.c @@ -3356,7 +3356,7 @@ int32_t transFreeConnById(void* shandle, int64_t transpointId) { } _exception: - transReleaseExHandle(transGetInstMgt(), (int64_t)shandle); + transReleaseExHandle(transGetInstMgt(), (int64_t)shandle); (void)transReleaseExHandle(transGetRefMgt(), transpointId); (void)transRemoveExHandle(transGetRefMgt(), transpointId); From 4c707d4c9f19e7769de0c76fa53c6cc7aba76576 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 24 Sep 2024 14:51:22 +0800 Subject: [PATCH 08/46] fix:[TS-5473] memory leak --- utils/test/c/CMakeLists.txt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/utils/test/c/CMakeLists.txt b/utils/test/c/CMakeLists.txt index e5902856e6..4eac64ac85 100644 --- a/utils/test/c/CMakeLists.txt +++ b/utils/test/c/CMakeLists.txt @@ -3,6 +3,7 @@ add_dependencies(tmq_demo taos) add_executable(tmq_sim tmqSim.c) add_executable(create_table createTable.c) add_executable(tmq_taosx_ci tmq_taosx_ci.c) +add_executable(tmq_write_raw_test tmq_write_raw_test.c) add_executable(write_raw_block_test write_raw_block_test.c) add_executable(sml_test sml_test.c) add_executable(get_db_name_test get_db_name_test.c) @@ -69,11 +70,11 @@ target_link_libraries( ) target_link_libraries( - replay_test - PUBLIC taos - PUBLIC util - PUBLIC common - PUBLIC os + replay_test + PUBLIC taos + PUBLIC util + PUBLIC common + PUBLIC os ) target_link_libraries( @@ -84,6 +85,14 @@ target_link_libraries( PUBLIC os ) +target_link_libraries( + tmq_write_raw_test + PUBLIC taos + PUBLIC util + PUBLIC common + PUBLIC os +) + target_link_libraries( sml_test PUBLIC taos From 6221af2fd2c4f2cc265d0e8b0920726ff96e9c57 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 24 Sep 2024 15:04:12 +0800 Subject: [PATCH 09/46] fix:[TS-5473] memory leak --- source/client/src/clientRawBlockWrite.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c index 8a888a2a47..a1022cf12a 100644 --- a/source/client/src/clientRawBlockWrite.c +++ b/source/client/src/clientRawBlockWrite.c @@ -361,7 +361,7 @@ static void processCreateStb(SMqMetaRsp* metaRsp, cJSON** pJson) { buildCreateTableJson(&req.schemaRow, &req.schemaTag, req.name, req.suid, TSDB_SUPER_TABLE, &req.colCmpr, pJson); end: - uDebug("create stable return, sql json:%s", cJSON_PrintUnformatted(*pJson)); + uDebug("create stable return"); tDecoderClear(&coder); } @@ -381,7 +381,7 @@ static void processAlterStb(SMqMetaRsp* metaRsp, cJSON** pJson) { buildAlterSTableJson(req.alterOriData, req.alterOriDataLen, pJson); end: - uDebug("alter stable return, sql json:%s", cJSON_PrintUnformatted(*pJson)); + uDebug("alter stable return"); tDecoderClear(&coder); } @@ -393,7 +393,7 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { int64_t id = pCreateReq->uid; uint8_t tagNum = pCreateReq->ctb.tagNum; int32_t code = 0; - + cJSON* tags = NULL; cJSON* tableName = cJSON_CreateString(name); RAW_NULL_CHECK(tableName); RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableName", tableName)); @@ -404,7 +404,7 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { RAW_NULL_CHECK(tagNumJson); RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tagNum", tagNumJson)); - cJSON* tags = cJSON_CreateArray(); + tags = cJSON_CreateArray(); RAW_NULL_CHECK(tags); SArray* pTagVals = NULL; RAW_RETURN_CHECK(tTagToValArray(pTag, &pTagVals)); @@ -543,7 +543,7 @@ static void processCreateTable(SMqMetaRsp* metaRsp, cJSON** pJson) { } end: - uDebug("create table return, sql json:%s", cJSON_PrintUnformatted(*pJson)); + uDebug("create table return"); tDeleteSVCreateTbBatchReq(&req); tDecoderClear(&decoder); } @@ -772,7 +772,7 @@ static void processAlterTable(SMqMetaRsp* metaRsp, cJSON** pJson) { } end: - uDebug("alter table return, sql json:%s", cJSON_PrintUnformatted(json)); + uDebug("alter table return"); tDecoderClear(&decoder); *pJson = json; } @@ -807,7 +807,7 @@ static void processDropSTable(SMqMetaRsp* metaRsp, cJSON** pJson) { RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableName", tableName)); end: - uDebug("processDropSTable return, sql json:%s", cJSON_PrintUnformatted(json)); + uDebug("processDropSTable return"); tDecoderClear(&decoder); *pJson = json; } @@ -843,7 +843,7 @@ static void processDeleteTable(SMqMetaRsp* metaRsp, cJSON** pJson) { RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "sql", sqlJson)); end: - uDebug("processDeleteTable return, sql json:%s", cJSON_PrintUnformatted(json)); + uDebug("processDeleteTable return"); tDecoderClear(&coder); *pJson = json; } @@ -880,7 +880,7 @@ static void processDropTable(SMqMetaRsp* metaRsp, cJSON** pJson) { RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableNameList", tableNameList)); end: - uDebug("processDropTable return, json sql:%s", cJSON_PrintUnformatted(json)); + uDebug("processDropTable return"); tDecoderClear(&decoder); *pJson = json; } @@ -1923,6 +1923,10 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) code = rawBlockBindData(pQuery, pTableMeta, rawData, &pCreateReqDst, fields, pSW->nCols, true, err, ERR_MSG_LEN); taosMemoryFree(fields); taosMemoryFreeClear(pTableMeta); + if (pCreateReqDst) { + tdDestroySVCreateTbReq(pCreateReqDst); + taosMemoryFreeClear(pCreateReqDst); + } if (code != TSDB_CODE_SUCCESS) { SET_ERROR_MSG("table:%s, err:%s", tbName, err); goto end; @@ -1944,7 +1948,7 @@ end: taosMemoryFreeClear(pTableMeta); if (pCreateReqDst) { tdDestroySVCreateTbReq(pCreateReqDst); - taosMemoryFree(pCreateReqDst); + taosMemoryFreeClear(pCreateReqDst); } return code; } @@ -2038,6 +2042,7 @@ char* tmq_get_json_meta(TAOS_RES* res) { processSimpleMeta(&pMetaRspObj->metaRsp, &pJson); char* string = cJSON_PrintUnformatted(pJson); cJSON_Delete(pJson); + uDebug("tmq_get_json_meta string:%s", string); return string; } From f20edb4c451a21db9f2338e746f71f9ea994c431 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 24 Sep 2024 15:10:02 +0800 Subject: [PATCH 10/46] fix:[TS-5473] memory leak --- tests/parallel_test/cases.task | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 1a00787a6b..40f2fa3ead 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -280,6 +280,7 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dataFromTsdbNWal.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dataFromTsdbNWal-multiCtb.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_taosx.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_ts-5473.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_ts4563.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_replay.py ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqSeekAndCommit.py From 28187a57f95f0f73344112336fdaed097ae9043d Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Tue, 24 Sep 2024 15:23:02 +0800 Subject: [PATCH 11/46] fix(stmt2/query): use snyc ctg to build pVgList --- source/client/src/clientImpl.c | 50 ++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index 5b559451da..9ddf012bf2 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -679,9 +679,15 @@ _return: return TSDB_CODE_SUCCESS; } +void freeVgList(void* list) { + SArray* pList = *(SArray**)list; + taosArrayDestroy(pList); +} + int32_t buildAsyncExecNodeList(SRequestObj* pRequest, SArray** pNodeList, SArray* pMnodeList, SMetaData* pResultMeta) { SArray* pDbVgList = NULL; SArray* pQnodeList = NULL; + FDelete fp = NULL; int32_t code = 0; switch (tsQueryPolicy) { @@ -705,6 +711,43 @@ int32_t buildAsyncExecNodeList(SRequestObj* pRequest, SArray** pNodeList, SArray goto _return; } } + } else { + fp = freeVgList; + + int32_t dbNum = taosArrayGetSize(pRequest->dbList); + if (dbNum > 0) { + SCatalog* pCtg = NULL; + SAppInstInfo* pInst = pRequest->pTscObj->pAppInfo; + code = catalogGetHandle(pInst->clusterId, &pCtg); + if (code != TSDB_CODE_SUCCESS) { + goto _return; + } + + pDbVgList = taosArrayInit(dbNum, POINTER_BYTES); + if (NULL == pDbVgList) { + code = terrno; + goto _return; + } + SArray* pVgList = NULL; + for (int32_t i = 0; i < dbNum; ++i) { + char* dbFName = taosArrayGet(pRequest->dbList, i); + SRequestConnInfo conn = {.pTrans = pInst->pTransporter, + .requestId = pRequest->requestId, + .requestObjRefId = pRequest->self, + .mgmtEps = getEpSet_s(&pInst->mgmtEp)}; + + // catalogGetDBVgList will handle dbFName == null. + code = catalogGetDBVgList(pCtg, &conn, dbFName, &pVgList); + if (code) { + goto _return; + } + + if (NULL == taosArrayPush(pDbVgList, &pVgList)) { + code = terrno; + goto _return; + } + } + } } code = buildVnodePolicyNodeList(pRequest, pNodeList, pMnodeList, pDbVgList); @@ -745,17 +788,12 @@ int32_t buildAsyncExecNodeList(SRequestObj* pRequest, SArray** pNodeList, SArray } _return: - taosArrayDestroy(pDbVgList); + taosArrayDestroyEx(pDbVgList, fp); taosArrayDestroy(pQnodeList); return code; } -void freeVgList(void* list) { - SArray* pList = *(SArray**)list; - taosArrayDestroy(pList); -} - int32_t buildSyncExecNodeList(SRequestObj* pRequest, SArray** pNodeList, SArray* pMnodeList) { SArray* pDbVgList = NULL; SArray* pQnodeList = NULL; From cccd2483d059745219a7b6554e8cdcb33ad57e3e Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 24 Sep 2024 16:08:48 +0800 Subject: [PATCH 12/46] ehn: remove void --- include/common/tdataformat.h | 2 +- source/common/src/tdataformat.c | 4 +-- source/dnode/vnode/src/tsdb/tsdbCommit2.c | 30 ++++++++++----------- source/dnode/vnode/src/tsdb/tsdbFS2.c | 4 +-- source/dnode/vnode/src/tsdb/tsdbFS2.h | 8 +++--- source/dnode/vnode/src/tsdb/tsdbSnapshot.c | 20 +++++++------- source/dnode/vnode/src/tsdb/tsdbSttFileRW.c | 4 +-- source/dnode/vnode/src/tsdb/tsdbUtil2.c | 20 +++++++------- source/dnode/vnode/src/tsdb/tsdbUtil2.h | 2 +- 9 files changed, 47 insertions(+), 47 deletions(-) diff --git a/include/common/tdataformat.h b/include/common/tdataformat.h index d8a88d038d..004a3a8fb8 100644 --- a/include/common/tdataformat.h +++ b/include/common/tdataformat.h @@ -115,7 +115,7 @@ typedef struct { } SValueColumnCompressInfo; int32_t tValueColumnInit(SValueColumn *valCol); -int32_t tValueColumnDestroy(SValueColumn *valCol); +void tValueColumnDestroy(SValueColumn *valCol); void tValueColumnClear(SValueColumn *valCol); int32_t tValueColumnAppend(SValueColumn *valCol, const SValue *value); int32_t tValueColumnUpdate(SValueColumn *valCol, int32_t idx, const SValue *value); diff --git a/source/common/src/tdataformat.c b/source/common/src/tdataformat.c index 4ef9bf481c..6147d50a84 100644 --- a/source/common/src/tdataformat.c +++ b/source/common/src/tdataformat.c @@ -4171,12 +4171,12 @@ int32_t tValueColumnInit(SValueColumn *valCol) { return 0; } -int32_t tValueColumnDestroy(SValueColumn *valCol) { +void tValueColumnDestroy(SValueColumn *valCol) { valCol->type = TSDB_DATA_TYPE_NULL; valCol->numOfValues = 0; tBufferDestroy(&valCol->data); tBufferDestroy(&valCol->offsets); - return 0; + return; } void tValueColumnClear(SValueColumn *valCol) { diff --git a/source/dnode/vnode/src/tsdb/tsdbCommit2.c b/source/dnode/vnode/src/tsdb/tsdbCommit2.c index 32371dc399..0199b578a2 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCommit2.c +++ b/source/dnode/vnode/src/tsdb/tsdbCommit2.c @@ -199,9 +199,9 @@ _exit: return code; } -static int32_t tsdbCommitCloseReader(SCommitter2 *committer) { +static void tsdbCommitCloseReader(SCommitter2 *committer) { TARRAY2_CLEAR(committer->sttReaderArray, tsdbSttFileReaderClose); - return 0; + return; } static int32_t tsdbCommitOpenReader(SCommitter2 *committer) { @@ -243,19 +243,19 @@ static int32_t tsdbCommitOpenReader(SCommitter2 *committer) { _exit: if (code) { - TAOS_UNUSED(tsdbCommitCloseReader(committer)); + tsdbCommitCloseReader(committer); tsdbError("vgId:%d %s failed at %s:%d since %s", TD_VID(committer->tsdb->pVnode), __func__, __FILE__, lino, tstrerror(code)); } return code; } -static int32_t tsdbCommitCloseIter(SCommitter2 *committer) { +static void tsdbCommitCloseIter(SCommitter2 *committer) { tsdbIterMergerClose(&committer->tombIterMerger); tsdbIterMergerClose(&committer->dataIterMerger); TARRAY2_CLEAR(committer->tombIterArray, tsdbIterClose); TARRAY2_CLEAR(committer->dataIterArray, tsdbIterClose); - return 0; + return; } static int32_t tsdbCommitOpenIter(SCommitter2 *committer) { @@ -309,7 +309,7 @@ static int32_t tsdbCommitOpenIter(SCommitter2 *committer) { _exit: if (code) { - TAOS_UNUSED(tsdbCommitCloseIter(committer)); + tsdbCommitCloseIter(committer); tsdbError("vgId:%d %s failed at %s:%d since %s", TD_VID(committer->tsdb->pVnode), __func__, __FILE__, lino, tstrerror(code)); } @@ -322,7 +322,7 @@ static int32_t tsdbCommitFileSetBegin(SCommitter2 *committer) { STsdb *tsdb = committer->tsdb; // check if can commit - TAOS_UNUSED(tsdbFSCheckCommit(tsdb, committer->ctx->info->fid)); + tsdbFSCheckCommit(tsdb, committer->ctx->info->fid); committer->ctx->expLevel = tsdbFidLevel(committer->ctx->info->fid, &tsdb->keepCfg, committer->now); tsdbFidKeyRange(committer->ctx->info->fid, committer->minutes, committer->precision, &committer->ctx->minKey, @@ -355,8 +355,8 @@ static int32_t tsdbCommitFileSetEnd(SCommitter2 *committer) { int32_t lino = 0; TAOS_CHECK_GOTO(tsdbCommitCloseWriter(committer), &lino, _exit); - TAOS_CHECK_GOTO(tsdbCommitCloseIter(committer), &lino, _exit); - TAOS_CHECK_GOTO(tsdbCommitCloseReader(committer), &lino, _exit); + tsdbCommitCloseIter(committer); + tsdbCommitCloseReader(committer); _exit: if (code) { @@ -409,7 +409,7 @@ static uint32_t tFileSetCommitInfoHash(const void *arg) { return MurmurHash3_32((const char *)&info->fid, sizeof(info->fid)); } -static int32_t tsdbCommitInfoDestroy(STsdb *pTsdb) { +static void tsdbCommitInfoDestroy(STsdb *pTsdb) { if (pTsdb->commitInfo) { for (int32_t i = 0; i < taosArrayGetSize(pTsdb->commitInfo->arr); i++) { SFileSetCommitInfo *info = *(SFileSetCommitInfo **)taosArrayGet(pTsdb->commitInfo->arr, i); @@ -423,7 +423,7 @@ static int32_t tsdbCommitInfoDestroy(STsdb *pTsdb) { pTsdb->commitInfo->arr = NULL; taosMemoryFreeClear(pTsdb->commitInfo); } - return 0; + return; } static int32_t tsdbCommitInfoInit(STsdb *pTsdb) { @@ -444,7 +444,7 @@ static int32_t tsdbCommitInfoInit(STsdb *pTsdb) { _exit: if (code) { - TAOS_UNUSED(tsdbCommitInfoDestroy(pTsdb)); + tsdbCommitInfoDestroy(pTsdb); tsdbError("vgId:%d %s failed at %s:%d since %s", TD_VID(pTsdb->pVnode), __func__, __FILE__, lino, tstrerror(code)); } return code; @@ -586,7 +586,7 @@ static int32_t tsdbCommitInfoBuild(STsdb *tsdb) { _exit: if (code) { - TAOS_UNUSED(tsdbCommitInfoDestroy(tsdb)); + tsdbCommitInfoDestroy(tsdb); tsdbError("vgId:%d %s failed at %s:%d since %s", TD_VID(tsdb->pVnode), __func__, __FILE__, lino, tstrerror(code)); } return code; @@ -716,7 +716,7 @@ int32_t tsdbCommitCommit(STsdb *tsdb) { (void)taosThreadMutexUnlock(&tsdb->mutex); - TAOS_UNUSED(tsdbCommitInfoDestroy(tsdb)); + TAOS_UNUSED(); tsdbUnrefMemTable(pMemTable, NULL, true); } @@ -745,7 +745,7 @@ int32_t tsdbCommitAbort(STsdb *pTsdb) { } } (void)taosThreadMutexUnlock(&pTsdb->mutex); - TAOS_UNUSED(tsdbCommitInfoDestroy(pTsdb)); + tsdbCommitInfoDestroy(pTsdb); _exit: if (code) { diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.c b/source/dnode/vnode/src/tsdb/tsdbFS2.c index bcaa70f9a8..59fd1498d7 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.c @@ -865,7 +865,7 @@ static void tsdbFSSetBlockCommit(STFileSet *fset, bool block) { } } -int32_t tsdbFSCheckCommit(STsdb *tsdb, int32_t fid) { +void tsdbFSCheckCommit(STsdb *tsdb, int32_t fid) { (void)taosThreadMutexLock(&tsdb->mutex); STFileSet *fset; tsdbFSGetFSet(tsdb->pFS, fid, &fset); @@ -877,7 +877,7 @@ int32_t tsdbFSCheckCommit(STsdb *tsdb, int32_t fid) { } } (void)taosThreadMutexUnlock(&tsdb->mutex); - return 0; + return; } // IMPORTANT: the caller must hold fs->tsdb->mutex diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.h b/source/dnode/vnode/src/tsdb/tsdbFS2.h index 9993c1e33d..119015636b 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.h +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.h @@ -59,10 +59,10 @@ int32_t tsdbFSEditBegin(STFileSystem *fs, const TFileOpArray *opArray, EFEditT e int32_t tsdbFSEditCommit(STFileSystem *fs); int32_t tsdbFSEditAbort(STFileSystem *fs); // other -void tsdbFSGetFSet(STFileSystem *fs, int32_t fid, STFileSet **fset); -int32_t tsdbFSCheckCommit(STsdb *tsdb, int32_t fid); -void tsdbBeginTaskOnFileSet(STsdb *tsdb, int32_t fid, STFileSet **fset); -void tsdbFinishTaskOnFileSet(STsdb *tsdb, int32_t fid); +void tsdbFSGetFSet(STFileSystem *fs, int32_t fid, STFileSet **fset); +void tsdbFSCheckCommit(STsdb *tsdb, int32_t fid); +void tsdbBeginTaskOnFileSet(STsdb *tsdb, int32_t fid, STFileSet **fset); +void tsdbFinishTaskOnFileSet(STsdb *tsdb, int32_t fid); // utils int32_t save_fs(const TFileSetArray *arr, const char *fname); void current_fname(STsdb *pTsdb, char *fname, EFCurrentT ftype); diff --git a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c index bd22beb52d..94ca8d96a1 100644 --- a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c +++ b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c @@ -57,10 +57,10 @@ struct STsdbSnapReader { STombBlock tombBlock[1]; }; -static int32_t tsdbSnapReadFileSetCloseReader(STsdbSnapReader* reader) { +static void tsdbSnapReadFileSetCloseReader(STsdbSnapReader* reader) { TARRAY2_CLEAR(reader->sttReaderArr, tsdbSttFileReaderClose); tsdbDataFileReaderClose(&reader->dataReader); - return 0; + return; } static int32_t tsdbSnapReadFileSetOpenReader(STsdbSnapReader* reader) { @@ -112,7 +112,7 @@ static int32_t tsdbSnapReadFileSetOpenReader(STsdbSnapReader* reader) { _exit: if (code) { - TAOS_UNUSED(tsdbSnapReadFileSetCloseReader(reader)); + tsdbSnapReadFileSetCloseReader(reader); TSDB_ERROR_LOG(TD_VID(reader->tsdb->pVnode), code, lino); } return code; @@ -190,12 +190,12 @@ _exit: return code; } -static int32_t tsdbSnapReadFileSetCloseIter(STsdbSnapReader* reader) { +static void tsdbSnapReadFileSetCloseIter(STsdbSnapReader* reader) { tsdbIterMergerClose(&reader->dataIterMerger); tsdbIterMergerClose(&reader->tombIterMerger); TARRAY2_CLEAR(reader->dataIterArr, tsdbIterClose); TARRAY2_CLEAR(reader->tombIterArr, tsdbIterClose); - return 0; + return; } static int32_t tsdbSnapReadRangeBegin(STsdbSnapReader* reader) { @@ -222,8 +222,8 @@ _exit: } static int32_t tsdbSnapReadRangeEnd(STsdbSnapReader* reader) { - TAOS_UNUSED(tsdbSnapReadFileSetCloseIter(reader)); - TAOS_UNUSED(tsdbSnapReadFileSetCloseReader(reader)); + tsdbSnapReadFileSetCloseIter(reader); + tsdbSnapReadFileSetCloseReader(reader); reader->ctx->fsr = NULL; return 0; } @@ -373,7 +373,7 @@ static int32_t tsdbSnapReadTombData(STsdbSnapReader* reader, uint8_t** data) { int32_t lino = 0; SMetaInfo info; - TAOS_UNUSED(tTombBlockClear(reader->tombBlock)); + tTombBlockClear(reader->tombBlock); TABLEID tbid[1] = {0}; for (STombRecord* record; (record = tsdbIterMergerGetTombRecord(reader->tombIterMerger)) != NULL;) { @@ -463,7 +463,7 @@ void tsdbSnapReaderClose(STsdbSnapReader** reader) { tDestroyTSchema(reader[0]->skmTb->pTSchema); for (int32_t i = 0; i < ARRAY_SIZE(reader[0]->buffers); ++i) { - TAOS_UNUSED(tBufferDestroy(reader[0]->buffers + i)); + tBufferDestroy(reader[0]->buffers + i); } taosMemoryFree(reader[0]); @@ -1000,7 +1000,7 @@ static int32_t tsdbSnapWriteDecmprTombBlock(SSnapDataHdr* hdr, STombBlock* tombB int32_t code = 0; int32_t lino = 0; - TAOS_UNUSED(tTombBlockClear(tombBlock)); + tTombBlockClear(tombBlock); int64_t size = hdr->size; size = size / TOMB_RECORD_ELEM_NUM; diff --git a/source/dnode/vnode/src/tsdb/tsdbSttFileRW.c b/source/dnode/vnode/src/tsdb/tsdbSttFileRW.c index 1b6639882b..c7f877a51b 100644 --- a/source/dnode/vnode/src/tsdb/tsdbSttFileRW.c +++ b/source/dnode/vnode/src/tsdb/tsdbSttFileRW.c @@ -415,7 +415,7 @@ int32_t tsdbSttFileReadStatisBlock(SSttFileReader *reader, const SStatisBlk *sta &lino, _exit); // decode data - TAOS_UNUSED(tStatisBlockClear(statisBlock)); + tStatisBlockClear(statisBlock); statisBlock->numOfPKs = statisBlk->numOfPKs; statisBlock->numOfRecords = statisBlk->numRec; SBufferReader br = BUFFER_READER_INITIALIZER(0, buffer0); @@ -654,7 +654,7 @@ static int32_t tsdbSttFileDoWriteStatisBlock(SSttFileWriter *writer) { TAOS_CHECK_GOTO(TARRAY2_APPEND_PTR(writer->statisBlkArray, &statisBlk), &lino, _exit); - TAOS_UNUSED(tStatisBlockClear(writer->staticBlock)); + tStatisBlockClear(writer->staticBlock); _exit: if (code) { diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil2.c b/source/dnode/vnode/src/tsdb/tsdbUtil2.c index cc9f8ce3ad..ba4ab9386b 100644 --- a/source/dnode/vnode/src/tsdb/tsdbUtil2.c +++ b/source/dnode/vnode/src/tsdb/tsdbUtil2.c @@ -93,25 +93,25 @@ void tStatisBlockDestroy(STbStatisBlock *statisBlock) { statisBlock->numOfPKs = 0; statisBlock->numOfRecords = 0; for (int32_t i = 0; i < ARRAY_SIZE(statisBlock->buffers); ++i) { - TAOS_UNUSED(tBufferDestroy(&statisBlock->buffers[i])); + tBufferDestroy(&statisBlock->buffers[i]); } for (int32_t i = 0; i < TD_MAX_PK_COLS; ++i) { - TAOS_UNUSED(tValueColumnDestroy(&statisBlock->firstKeyPKs[i])); - TAOS_UNUSED(tValueColumnDestroy(&statisBlock->lastKeyPKs[i])); + tValueColumnDestroy(&statisBlock->firstKeyPKs[i]); + tValueColumnDestroy(&statisBlock->lastKeyPKs[i]); } } -int32_t tStatisBlockClear(STbStatisBlock *statisBlock) { +void tStatisBlockClear(STbStatisBlock *statisBlock) { statisBlock->numOfPKs = 0; statisBlock->numOfRecords = 0; for (int32_t i = 0; i < ARRAY_SIZE(statisBlock->buffers); ++i) { - TAOS_UNUSED(tBufferClear(&statisBlock->buffers[i])); + tBufferClear(&statisBlock->buffers[i]); } for (int32_t i = 0; i < TD_MAX_PK_COLS; ++i) { tValueColumnClear(&statisBlock->firstKeyPKs[i]); tValueColumnClear(&statisBlock->lastKeyPKs[i]); } - return 0; + return; } static int32_t tStatisBlockAppend(STbStatisBlock *block, SRowInfo *row) { @@ -252,11 +252,11 @@ void tBrinBlockDestroy(SBrinBlock *brinBlock) { brinBlock->numOfPKs = 0; brinBlock->numOfRecords = 0; for (int32_t i = 0; i < ARRAY_SIZE(brinBlock->buffers); ++i) { - TAOS_UNUSED(tBufferDestroy(&brinBlock->buffers[i])); + tBufferDestroy(&brinBlock->buffers[i]); } for (int32_t i = 0; i < TD_MAX_PK_COLS; ++i) { - TAOS_UNUSED(tValueColumnDestroy(&brinBlock->firstKeyPKs[i])); - TAOS_UNUSED(tValueColumnDestroy(&brinBlock->lastKeyPKs[i])); + tValueColumnDestroy(&brinBlock->firstKeyPKs[i]); + tValueColumnDestroy(&brinBlock->lastKeyPKs[i]); } } @@ -264,7 +264,7 @@ void tBrinBlockClear(SBrinBlock *brinBlock) { brinBlock->numOfPKs = 0; brinBlock->numOfRecords = 0; for (int32_t i = 0; i < ARRAY_SIZE(brinBlock->buffers); ++i) { - TAOS_UNUSED(tBufferClear(&brinBlock->buffers[i])); + tBufferClear(&brinBlock->buffers[i]); } for (int32_t i = 0; i < TD_MAX_PK_COLS; ++i) { tValueColumnClear(&brinBlock->firstKeyPKs[i]); diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil2.h b/source/dnode/vnode/src/tsdb/tsdbUtil2.h index ccc9009fd3..649f317485 100644 --- a/source/dnode/vnode/src/tsdb/tsdbUtil2.h +++ b/source/dnode/vnode/src/tsdb/tsdbUtil2.h @@ -113,7 +113,7 @@ typedef struct { int32_t tStatisBlockInit(STbStatisBlock *statisBlock); void tStatisBlockDestroy(STbStatisBlock *statisBlock); -int32_t tStatisBlockClear(STbStatisBlock *statisBlock); +void tStatisBlockClear(STbStatisBlock *statisBlock); int32_t tStatisBlockPut(STbStatisBlock *statisBlock, SRowInfo *row, int32_t maxRecords); int32_t tStatisBlockGet(STbStatisBlock *statisBlock, int32_t idx, STbStatisRecord *record); From 6abd0d6749491673b74cb31d13aec7ab30fed27f Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 24 Sep 2024 16:21:51 +0800 Subject: [PATCH 13/46] make it compile --- source/dnode/vnode/src/tsdb/tsdbCommit2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCommit2.c b/source/dnode/vnode/src/tsdb/tsdbCommit2.c index 0199b578a2..2ffc1d1648 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCommit2.c +++ b/source/dnode/vnode/src/tsdb/tsdbCommit2.c @@ -716,7 +716,7 @@ int32_t tsdbCommitCommit(STsdb *tsdb) { (void)taosThreadMutexUnlock(&tsdb->mutex); - TAOS_UNUSED(); + tsdbCommitInfoDestroy(tsdb); tsdbUnrefMemTable(pMemTable, NULL, true); } From 4b75755af1c48dd3aaa0ab8aba99097715e54d9f Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 24 Sep 2024 16:48:07 +0800 Subject: [PATCH 14/46] more change --- source/dnode/vnode/src/inc/tsdb.h | 9 ++++- source/dnode/vnode/src/tsdb/tsdbFS.c | 12 +++--- source/dnode/vnode/src/tsdb/tsdbFS2.c | 11 ++++-- source/dnode/vnode/src/tsdb/tsdbRetention.c | 41 ++++++++++++++++----- source/dnode/vnode/src/vnd/vnodeAsync.c | 30 +++++++++------ source/dnode/vnode/src/vnd/vnodeCommit.c | 12 ++++-- source/dnode/vnode/src/vnd/vnodeSnapshot.c | 16 ++++++-- source/dnode/vnode/src/vnd/vnodeSync.c | 24 +++++++++--- source/os/src/osSemaphore.c | 2 +- source/util/src/tqueue.c | 29 +++++++++++---- 10 files changed, 133 insertions(+), 53 deletions(-) diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index 38d6f020c7..b728045bf6 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -292,7 +292,7 @@ int32_t tsdbReadDelData(SDelFReader *pReader, SDelIdx *pDelIdx, SArray *aDelData int32_t tsdbReadDelIdx(SDelFReader *pReader, SArray *aDelIdx); // tsdbRead.c ============================================================================================== -int32_t tsdbTakeReadSnap2(STsdbReader *pReader, _query_reseek_func_t reseek, STsdbReadSnap **ppSnap, const char* id); +int32_t tsdbTakeReadSnap2(STsdbReader *pReader, _query_reseek_func_t reseek, STsdbReadSnap **ppSnap, const char *id); void tsdbUntakeReadSnap2(STsdbReader *pReader, STsdbReadSnap *pSnap, bool proactive); int32_t tsdbGetTableSchema(SMeta *pMeta, int64_t uid, STSchema **pSchema, int64_t *suid); @@ -1069,6 +1069,13 @@ int32_t tsdbSnapPrepDescription(SVnode *pVnode, SSnapshot *pSnap); void tsdbRemoveFile(const char *path); +#define taosCloseFileWithLog(fd) \ + do { \ + if (taosCloseFile(fd) < 0) { \ + tsdbError("failed to close file, fd:%d, %s", fd, tstrerror(terrno)); \ + } \ + } while (0) + #ifdef __cplusplus } #endif diff --git a/source/dnode/vnode/src/tsdb/tsdbFS.c b/source/dnode/vnode/src/tsdb/tsdbFS.c index 19e1f42726..a949fd69f0 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS.c @@ -130,7 +130,7 @@ _exit: tsdbError("%s failed at line %d since %s, fname:%s", __func__, lino, tstrerror(code), fname); } taosMemoryFree(pData); - (void)taosCloseFile(&pFD); + taosCloseFileWithLog(&pFD); return code; } @@ -300,26 +300,26 @@ static int32_t load_fs(const char *fname, STsdbFS *pFS) { int64_t size; code = taosFStatFile(pFD, &size, NULL); if (code != 0) { - (void)taosCloseFile(&pFD); + taosCloseFileWithLog(&pFD); TSDB_CHECK_CODE(code, lino, _exit); } pData = taosMemoryMalloc(size); if (pData == NULL) { code = terrno; - (void)taosCloseFile(&pFD); + taosCloseFileWithLog(&pFD); TSDB_CHECK_CODE(code, lino, _exit); } if (taosReadFile(pFD, pData, size) < 0) { code = terrno; - (void)taosCloseFile(&pFD); + taosCloseFileWithLog(&pFD); TSDB_CHECK_CODE(code, lino, _exit); } if (!taosCheckChecksumWhole(pData, size)) { code = TSDB_CODE_FILE_CORRUPTED; - (void)taosCloseFile(&pFD); + taosCloseFileWithLog(&pFD); TSDB_CHECK_CODE(code, lino, _exit); } @@ -331,7 +331,7 @@ _exit: tsdbError("%s failed at line %d since %s, fname:%s", __func__, lino, tstrerror(code), fname); } taosMemoryFree(pData); - (void)taosCloseFile(&pFD); + taosCloseFileWithLog(&pFD); return code; } diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.c b/source/dnode/vnode/src/tsdb/tsdbFS2.c index 59fd1498d7..7afc61e5dc 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.c @@ -44,7 +44,12 @@ static int32_t create_fs(STsdb *pTsdb, STFileSystem **fs) { } fs[0]->tsdb = pTsdb; - (void)tsem_init(&fs[0]->canEdit, 0, 1); + int32_t code = tsem_init(&fs[0]->canEdit, 0, 1); + if (code) { + taosMemoryFree(fs[0]); + return code; + } + fs[0]->fsstate = TSDB_FS_STATE_NORMAL; fs[0]->neid = 0; TARRAY2_INIT(fs[0]->fSetArr); @@ -100,7 +105,7 @@ _exit: tsdbError("%s failed at %s:%d since %s", __func__, fname, __LINE__, tstrerror(code)); } taosMemoryFree(data); - (void)taosCloseFile(&fp); + taosCloseFileWithLog(&fp); return code; } @@ -140,7 +145,7 @@ _exit: tsdbError("%s failed at %s:%d since %s", __func__, fname, __LINE__, tstrerror(code)); json[0] = NULL; } - (void)taosCloseFile(&fp); + taosCloseFileWithLog(&fp); taosMemoryFree(data); return code; } diff --git a/source/dnode/vnode/src/tsdb/tsdbRetention.c b/source/dnode/vnode/src/tsdb/tsdbRetention.c index 4b690cf53b..af42a0e592 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRetention.c +++ b/source/dnode/vnode/src/tsdb/tsdbRetention.c @@ -99,8 +99,12 @@ _exit: tsdbError("vgId:%d, %s failed at %s:%d since %s", TD_VID(rtner->tsdb->pVnode), __func__, __FILE__, lino, tstrerror(code)); } - (void)taosCloseFile(&fdFrom); - (void)taosCloseFile(&fdTo); + if (taosCloseFile(&fdFrom) != 0) { + tsdbError("vgId:%d, failed to close file %s", TD_VID(rtner->tsdb->pVnode), fname_from); + } + if (taosCloseFile(&fdTo) != 0) { + tsdbError("vgId:%d, failed to close file %s", TD_VID(rtner->tsdb->pVnode), fname_to); + } return code; } @@ -136,8 +140,12 @@ _exit: tsdbError("vgId:%d, %s failed at %s:%d since %s", TD_VID(rtner->tsdb->pVnode), __func__, __FILE__, lino, tstrerror(code)); } - (void)taosCloseFile(&fdFrom); - (void)taosCloseFile(&fdTo); + if (taosCloseFile(&fdFrom) != 0) { + tsdbTrace("vgId:%d, failed to close file", TD_VID(rtner->tsdb->pVnode)); + } + if (taosCloseFile(&fdTo) != 0) { + tsdbTrace("vgId:%d, failed to close file", TD_VID(rtner->tsdb->pVnode)); + } return code; } @@ -441,7 +449,9 @@ _exit: tsdbError("vgId:%d %s failed at line %s:%d since %s", TD_VID(rtner->tsdb->pVnode), __func__, __FILE__, lino, tstrerror(code)); } - (void)taosCloseFile(&fdFrom); + if (taosCloseFile(&fdFrom) != 0) { + tsdbTrace("vgId:%d, failed to close file", TD_VID(rtner->tsdb->pVnode)); + } return code; } @@ -541,8 +551,13 @@ _exit: tsdbError("vgId:%d %s failed at line %s:%d since %s", TD_VID(rtner->tsdb->pVnode), __func__, __FILE__, lino, tstrerror(code)); } - (void)taosCloseFile(&fdFrom); - (void)taosCloseFile(&fdTo); + if (taosCloseFile(&fdFrom) != 0) { + tsdbTrace("vgId:%d, failed to close file", TD_VID(rtner->tsdb->pVnode)); + } + + if (taosCloseFile(&fdTo) != 0) { + tsdbTrace("vgId:%d, failed to close file", TD_VID(rtner->tsdb->pVnode)); + } return code; } @@ -639,8 +654,12 @@ _exit: tsdbError("vgId:%d %s failed at line %s:%d since %s", TD_VID(rtner->tsdb->pVnode), __func__, __FILE__, lino, tstrerror(code)); } - (void)taosCloseFile(&fdFrom); - (void)taosCloseFile(&fdTo); + if (taosCloseFile(&fdFrom) != 0) { + tsdbTrace("vgId:%d, failed to close file", TD_VID(rtner->tsdb->pVnode)); + } + if (taosCloseFile(&fdTo) != 0) { + tsdbTrace("vgId:%d, failed to close file", TD_VID(rtner->tsdb->pVnode)); + } return code; } @@ -699,7 +718,9 @@ static int32_t tsdbDoS3Migrate(SRTNer *rtner) { if (taosCheckExistFile(fname1)) { int32_t mtime = 0; int64_t size = 0; - (void)taosStatFile(fname1, &size, &mtime, NULL); + if (taosStatFile(fname1, &size, &mtime, NULL) != 0) { + tsdbError("vgId:%d, %s failed at %s:%d ", TD_VID(rtner->tsdb->pVnode), __func__, __FILE__, __LINE__); + } if (size > chunksize && mtime < rtner->now - tsS3UploadDelaySec) { TAOS_CHECK_GOTO(tsdbMigrateDataFileLCS3(rtner, fobj, size, chunksize), &lino, _exit); } diff --git a/source/dnode/vnode/src/vnd/vnodeAsync.c b/source/dnode/vnode/src/vnd/vnodeAsync.c index 27580f2e76..0953c2615d 100644 --- a/source/dnode/vnode/src/vnd/vnodeAsync.c +++ b/source/dnode/vnode/src/vnd/vnodeAsync.c @@ -187,10 +187,12 @@ static void vnodeAsyncCancelAllTasks(SVAsync *async, SArray *cancelArray) { task->prev->next = task->next; task->next->prev = task->prev; if (task->cancel) { - TAOS_UNUSED(taosArrayPush(cancelArray, &(SVATaskCancelInfo){ - .cancel = task->cancel, - .arg = task->arg, - })); + if (taosArrayPush(cancelArray, &(SVATaskCancelInfo){ + .cancel = task->cancel, + .arg = task->arg, + }) == NULL) { + vError("failed to push cancel task into array"); + }; } vnodeAsyncTaskDone(async, task); } @@ -748,10 +750,12 @@ int32_t vnodeAChannelDestroy(SVAChannelID *channelID, bool waitRunning) { task->prev->next = task->next; task->next->prev = task->prev; if (task->cancel) { - TAOS_UNUSED(taosArrayPush(cancelArray, &(SVATaskCancelInfo){ - .cancel = task->cancel, - .arg = task->arg, - })); + if (taosArrayPush(cancelArray, &(SVATaskCancelInfo){ + .cancel = task->cancel, + .arg = task->arg, + }) == NULL) { + vError("failed to push cancel info"); + }; } vnodeAsyncTaskDone(async, task); } @@ -763,10 +767,12 @@ int32_t vnodeAChannelDestroy(SVAChannelID *channelID, bool waitRunning) { channel->scheduled->prev->next = channel->scheduled->next; channel->scheduled->next->prev = channel->scheduled->prev; if (channel->scheduled->cancel) { - TAOS_UNUSED(taosArrayPush(cancelArray, &(SVATaskCancelInfo){ - .cancel = channel->scheduled->cancel, - .arg = channel->scheduled->arg, - })); + if (taosArrayPush(cancelArray, &(SVATaskCancelInfo){ + .cancel = channel->scheduled->cancel, + .arg = channel->scheduled->arg, + }) == NULL) { + vError("failed to push cancel info"); + } } vnodeAsyncTaskDone(async, channel->scheduled); } diff --git a/source/dnode/vnode/src/vnd/vnodeCommit.c b/source/dnode/vnode/src/vnd/vnodeCommit.c index 5aea6c5a63..438083f9b9 100644 --- a/source/dnode/vnode/src/vnd/vnodeCommit.c +++ b/source/dnode/vnode/src/vnd/vnodeCommit.c @@ -201,7 +201,9 @@ _exit: vInfo("vgId:%d, vnode info is saved, fname:%s replica:%d selfIndex:%d changeVersion:%d", pInfo->config.vgId, fname, pInfo->config.syncCfg.replicaNum, pInfo->config.syncCfg.myIndex, pInfo->config.syncCfg.changeVersion); } - (void)taosCloseFile(&pFile); + if (taosCloseFile(&pFile) != 0) { + vError("vgId:%d, failed to close file", pInfo->config.vgId); + } taosMemoryFree(data); return code; } @@ -263,7 +265,9 @@ _exit: } } taosMemoryFree(pData); - (void)taosCloseFile(&pFile); + if (taosCloseFile(&pFile) != 0) { + vError("vgId:%d, failed to close file", pInfo->config.vgId); + } return code; } @@ -496,7 +500,9 @@ void vnodeRollback(SVnode *pVnode) { offset = strlen(tFName); snprintf(tFName + offset, TSDB_FILENAME_LEN - offset - 1, "%s%s", TD_DIRSEP, VND_INFO_FNAME_TMP); - TAOS_UNUSED(taosRemoveFile(tFName)); + if (taosRemoveFile(tFName) != 0) { + vError("vgId:%d, failed to remove file %s since %s", TD_VID(pVnode), tFName, tstrerror(terrno)); + } } static int vnodeEncodeState(const void *pObj, SJson *pJson) { diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c index f732596d3b..0c11083367 100644 --- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c +++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c @@ -274,13 +274,17 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) int64_t size; code = taosFStatFile(pFile, &size, NULL); if (code != 0) { - (void)taosCloseFile(&pFile); + if (taosCloseFile(&pFile) != 0) { + vError("vgId:%d, failed to close file", vgId); + } TSDB_CHECK_CODE(code, lino, _exit); } *ppData = taosMemoryMalloc(sizeof(SSnapDataHdr) + size + 1); if (*ppData == NULL) { - (void)taosCloseFile(&pFile); + if (taosCloseFile(&pFile) != 0) { + vError("vgId:%d, failed to close file", vgId); + } TSDB_CHECK_CODE(code = terrno, lino, _exit); } ((SSnapDataHdr *)(*ppData))->type = SNAP_DATA_CFG; @@ -289,11 +293,15 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) if (taosReadFile(pFile, ((SSnapDataHdr *)(*ppData))->data, size) < 0) { taosMemoryFree(*ppData); - (void)taosCloseFile(&pFile); + if (taosCloseFile(&pFile) != 0) { + vError("vgId:%d, failed to close file", vgId); + } TSDB_CHECK_CODE(code = terrno, lino, _exit); } - (void)taosCloseFile(&pFile); + if (taosCloseFile(&pFile) != 0) { + vError("vgId:%d, failed to close file", vgId); + } pReader->cfgDone = 1; goto _exit; diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index bf317d257d..5f4628eb87 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -28,7 +28,9 @@ static inline void vnodeWaitBlockMsg(SVnode *pVnode, const SRpcMsg *pMsg) { const STraceId *trace = &pMsg->info.traceId; vGTrace("vgId:%d, msg:%p wait block, type:%s sec:%d seq:%" PRId64, pVnode->config.vgId, pMsg, TMSG_INFO(pMsg->msgType), pVnode->blockSec, pVnode->blockSeq); - (void)tsem_wait(&pVnode->syncSem); + if (tsem_wait(&pVnode->syncSem) != 0) { + vError("vgId:%d, failed to wait sem", pVnode->config.vgId); + } } static inline void vnodePostBlockMsg(SVnode *pVnode, const SRpcMsg *pMsg) { @@ -41,7 +43,9 @@ static inline void vnodePostBlockMsg(SVnode *pVnode, const SRpcMsg *pMsg) { pVnode->blocked = false; pVnode->blockSec = 0; pVnode->blockSeq = 0; - (void)tsem_post(&pVnode->syncSem); + if (tsem_post(&pVnode->syncSem) != 0) { + vError("vgId:%d, failed to post sem", pVnode->config.vgId); + } } (void)taosThreadMutexUnlock(&pVnode->lock); } @@ -613,7 +617,9 @@ static void vnodeBecomeFollower(const SSyncFSM *pFsm) { if (pVnode->blocked) { pVnode->blocked = false; vDebug("vgId:%d, become follower and post block", pVnode->config.vgId); - (void)tsem_post(&pVnode->syncSem); + if (tsem_post(&pVnode->syncSem) != 0) { + vError("vgId:%d, failed to post sync semaphore", pVnode->config.vgId); + } } (void)taosThreadMutexUnlock(&pVnode->lock); @@ -633,7 +639,9 @@ static void vnodeBecomeLearner(const SSyncFSM *pFsm) { if (pVnode->blocked) { pVnode->blocked = false; vDebug("vgId:%d, become learner and post block", pVnode->config.vgId); - (void)tsem_post(&pVnode->syncSem); + if (tsem_post(&pVnode->syncSem) != 0) { + vError("vgId:%d, failed to post sync semaphore", pVnode->config.vgId); + } } (void)taosThreadMutexUnlock(&pVnode->lock); } @@ -766,7 +774,9 @@ void vnodeSyncPreClose(SVnode *pVnode) { if (pVnode->blocked) { vInfo("vgId:%d, post block after close sync", pVnode->config.vgId); pVnode->blocked = false; - (void)tsem_post(&pVnode->syncSem); + if (tsem_post(&pVnode->syncSem) != 0) { + vError("vgId:%d, failed to post block", pVnode->config.vgId); + } } (void)taosThreadMutexUnlock(&pVnode->lock); } @@ -801,7 +811,9 @@ void vnodeSyncCheckTimeout(SVnode *pVnode) { pVnode->blocked = false; pVnode->blockSec = 0; pVnode->blockSeq = 0; - (void)tsem_post(&pVnode->syncSem); + if (tsem_post(&pVnode->syncSem) != 0) { + vError("vgId:%d, failed to post block", pVnode->config.vgId); + } } } (void)taosThreadMutexUnlock(&pVnode->lock); diff --git a/source/os/src/osSemaphore.c b/source/os/src/osSemaphore.c index f6d339c89e..ea9e824947 100644 --- a/source/os/src/osSemaphore.c +++ b/source/os/src/osSemaphore.c @@ -232,7 +232,7 @@ int32_t tsem_init(tsem_t *psem, int flags, unsigned int count) { if(sem_init(psem, flags, count) == 0) { return 0; } else { - return TAOS_SYSTEM_ERROR(errno); + return terrno = TAOS_SYSTEM_ERROR(errno); } } diff --git a/source/util/src/tqueue.c b/source/util/src/tqueue.c index d067847376..f531d9ad61 100644 --- a/source/util/src/tqueue.c +++ b/source/util/src/tqueue.c @@ -224,7 +224,9 @@ int32_t taosWriteQitem(STaosQueue *queue, void *pItem) { (void)taosThreadMutexUnlock(&queue->mutex); if (queue->qset) { - (void)tsem_post(&queue->qset->sem); + if (tsem_post(&queue->qset->sem) != 0) { + uError("failed to post semaphore for queue set:%p", queue->qset); + } } return code; } @@ -333,7 +335,10 @@ int32_t taosOpenQset(STaosQset **qset) { } (void)taosThreadMutexInit(&(*qset)->mutex, NULL); - (void)tsem_init(&(*qset)->sem, 0, 0); + if (tsem_init(&(*qset)->sem, 0, 0) != 0) { + taosMemoryFree(*qset); + return terrno; + } uDebug("qset:%p is opened", qset); return 0; @@ -354,7 +359,9 @@ void taosCloseQset(STaosQset *qset) { (void)taosThreadMutexUnlock(&qset->mutex); (void)taosThreadMutexDestroy(&qset->mutex); - (void)tsem_destroy(&qset->sem); + if (tsem_destroy(&qset->sem) != 0) { + uError("failed to destroy semaphore for qset:%p", qset); + } taosMemoryFree(qset); uDebug("qset:%p is closed", qset); } @@ -364,7 +371,9 @@ void taosCloseQset(STaosQset *qset) { // thread to exit. void taosQsetThreadResume(STaosQset *qset) { uDebug("qset:%p, it will exit", qset); - (void)tsem_post(&qset->sem); + if (tsem_post(&qset->sem) != 0) { + uError("failed to post semaphore for qset:%p", qset); + } } int32_t taosAddIntoQset(STaosQset *qset, STaosQueue *queue, void *ahandle) { @@ -432,7 +441,9 @@ int32_t taosReadQitemFromQset(STaosQset *qset, void **ppItem, SQueueInfo *qinfo) STaosQnode *pNode = NULL; int32_t code = 0; - (void)tsem_wait(&qset->sem); + if (tsem_wait(&qset->sem) != 0) { + uError("failed to wait semaphore for qset:%p", qset); + } (void)taosThreadMutexLock(&qset->mutex); @@ -476,7 +487,9 @@ int32_t taosReadAllQitemsFromQset(STaosQset *qset, STaosQall *qall, SQueueInfo * STaosQueue *queue; int32_t code = 0; - (void)tsem_wait(&qset->sem); + if (tsem_wait(&qset->sem) != 0) { + uError("failed to wait semaphore for qset:%p", qset); + } (void)taosThreadMutexLock(&qset->mutex); for (int32_t i = 0; i < qset->numOfQueues; ++i) { @@ -510,7 +523,9 @@ int32_t taosReadAllQitemsFromQset(STaosQset *qset, STaosQall *qall, SQueueInfo * (void)atomic_sub_fetch_32(&qset->numOfItems, qall->numOfItems); for (int32_t j = 1; j < qall->numOfItems; ++j) { - (void)tsem_wait(&qset->sem); + if (tsem_wait(&qset->sem) != 0) { + uError("failed to wait semaphore for qset:%p", qset); + } } } From dbfb38680a0ead0d142b111f3e2c9fbbf120f061 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Tue, 24 Sep 2024 17:35:46 +0800 Subject: [PATCH 15/46] fix invalid read --- source/libs/transport/src/transCli.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c index d906145a7b..68c5b575ba 100644 --- a/source/libs/transport/src/transCli.c +++ b/source/libs/transport/src/transCli.c @@ -3356,11 +3356,14 @@ int32_t transFreeConnById(void* shandle, int64_t transpointId) { } _exception: - transReleaseExHandle(transGetInstMgt(), (int64_t)shandle); - - (void)transReleaseExHandle(transGetRefMgt(), transpointId); - (void)transRemoveExHandle(transGetRefMgt(), transpointId); - taosMemoryFree(pCli); + transReleaseExHandle(transGetInstMgt(), (int64_t)shandle); + if (code != 0) { + if (transpointId != 0) { + (void)transReleaseExHandle(transGetRefMgt(), transpointId); + (void)transRemoveExHandle(transGetRefMgt(), transpointId); + } + taosMemoryFree(pCli); + } return code; } From b55aec4b1382d77f725bfa374a1cdaceab019f27 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 24 Sep 2024 17:42:20 +0800 Subject: [PATCH 16/46] more code --- source/dnode/vnode/src/inc/tsdb.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index b728045bf6..20c43bb185 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -1069,11 +1069,11 @@ int32_t tsdbSnapPrepDescription(SVnode *pVnode, SSnapshot *pSnap); void tsdbRemoveFile(const char *path); -#define taosCloseFileWithLog(fd) \ - do { \ - if (taosCloseFile(fd) < 0) { \ - tsdbError("failed to close file, fd:%d, %s", fd, tstrerror(terrno)); \ - } \ +#define taosCloseFileWithLog(fd) \ + do { \ + if (taosCloseFile(fd) < 0) { \ + tsdbTrace("failed to close file"); \ + } \ } while (0) #ifdef __cplusplus From e16af0e45c0afe4eb0d926a09b413f06184569ec Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 24 Sep 2024 18:04:58 +0800 Subject: [PATCH 17/46] more --- source/dnode/vnode/src/meta/metaCache.c | 13 +++++------ source/dnode/vnode/src/meta/metaOpen.c | 4 ++-- source/dnode/vnode/src/meta/metaTable.c | 4 +++- source/dnode/vnode/src/sma/smaRollup.c | 19 +++++++++++----- source/dnode/vnode/src/tsdb/tsdbCommit2.c | 6 ++--- source/dnode/vnode/src/tsdb/tsdbFS2.c | 22 ++++++++++++++----- .../dnode/vnode/src/tsdb/tsdbReaderWriter.c | 4 ++-- source/dnode/vnode/src/tsdb/tsdbUtil.c | 5 ++++- source/dnode/vnode/src/vnd/vnodeAsync.c | 2 +- source/dnode/vnode/src/vnd/vnodeOpen.c | 5 ++++- source/dnode/vnode/src/vnd/vnodeSvr.c | 4 +++- 11 files changed, 57 insertions(+), 31 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaCache.c b/source/dnode/vnode/src/meta/metaCache.c index 16cf9335fe..91aa513aa6 100644 --- a/source/dnode/vnode/src/meta/metaCache.c +++ b/source/dnode/vnode/src/meta/metaCache.c @@ -216,7 +216,7 @@ void metaCacheClose(SMeta* pMeta) { } } -static int32_t metaRehashCache(SMetaCache* pCache, int8_t expand) { +static void metaRehashCache(SMetaCache* pCache, int8_t expand) { int32_t code = 0; int32_t nBucket; @@ -228,8 +228,7 @@ static int32_t metaRehashCache(SMetaCache* pCache, int8_t expand) { SMetaCacheEntry** aBucket = (SMetaCacheEntry**)taosMemoryCalloc(nBucket, sizeof(SMetaCacheEntry*)); if (aBucket == NULL) { - code = terrno; - goto _exit; + return; } // rehash @@ -250,9 +249,7 @@ static int32_t metaRehashCache(SMetaCache* pCache, int8_t expand) { taosMemoryFree(pCache->sEntryCache.aBucket); pCache->sEntryCache.nBucket = nBucket; pCache->sEntryCache.aBucket = aBucket; - -_exit: - return code; + return; } int32_t metaCacheUpsert(SMeta* pMeta, SMetaInfo* pInfo) { @@ -279,7 +276,7 @@ int32_t metaCacheUpsert(SMeta* pMeta, SMetaInfo* pInfo) { } } else { // insert if (pCache->sEntryCache.nEntry >= pCache->sEntryCache.nBucket) { - TAOS_UNUSED(metaRehashCache(pCache, 1)); + metaRehashCache(pCache, 1); iBucket = TABS(pInfo->uid) % pCache->sEntryCache.nBucket; } @@ -317,7 +314,7 @@ int32_t metaCacheDrop(SMeta* pMeta, int64_t uid) { pCache->sEntryCache.nEntry--; if (pCache->sEntryCache.nEntry < pCache->sEntryCache.nBucket / 4 && pCache->sEntryCache.nBucket > META_CACHE_BASE_BUCKET) { - TAOS_UNUSED(metaRehashCache(pCache, 0)); + metaRehashCache(pCache, 0); } } else { code = TSDB_CODE_NOT_FOUND; diff --git a/source/dnode/vnode/src/meta/metaOpen.c b/source/dnode/vnode/src/meta/metaOpen.c index d1ffe82e32..1da6ed584e 100644 --- a/source/dnode/vnode/src/meta/metaOpen.c +++ b/source/dnode/vnode/src/meta/metaOpen.c @@ -60,7 +60,7 @@ int32_t metaOpen(SVnode *pVnode, SMeta **ppMeta, int8_t rollback) { pMeta->path = (char *)&pMeta[1]; strcpy(pMeta->path, path); - (void)taosRealPath(pMeta->path, NULL, strlen(path) + 1); + int32_t ret = taosRealPath(pMeta->path, NULL, strlen(path) + 1); pMeta->pVnode = pVnode; @@ -98,7 +98,7 @@ int32_t metaOpen(SVnode *pVnode, SMeta **ppMeta, int8_t rollback) { TSDB_CHECK_CODE(code, lino, _exit); sprintf(indexFullPath, "%s/%s", pMeta->path, "invert"); - TAOS_UNUSED(taosMkDir(indexFullPath)); + ret = taosMkDir(indexFullPath); SIndexOpts opts = {.cacheSize = 8 * 1024 * 1024}; code = indexOpen(&opts, indexFullPath, (SIndex **)&pMeta->pTagIvtIdx); diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index 1024803083..d489535c02 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -285,7 +285,9 @@ static inline void metaTimeSeriesNotifyCheck(SMeta *pMeta) { int64_t deltaTS = nTimeSeries - pMeta->pVnode->config.vndStats.numOfReportedTimeSeries; if (deltaTS > tsTimeSeriesThreshold) { if (0 == atomic_val_compare_exchange_8(&dmNotifyHdl.state, 1, 2)) { - (void)tsem_post(&dmNotifyHdl.sem); + if (tsem_post(&dmNotifyHdl.sem) != 0) { + metaError("vgId:%d, failed to post semaphore, errno:%d", TD_VID(pMeta->pVnode), errno); + } } } #endif diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index cf0a9701d9..ee8ee962e9 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -89,7 +89,7 @@ void *tdFreeRSmaInfo(SSma *pSma, SRSmaInfo *pInfo) { if (pItem->tmrId) { smaDebug("vgId:%d, stop fetch timer %p for table %" PRIi64 " level %d", SMA_VID(pSma), pItem->tmrId, pInfo->suid, i + 1); - if(!taosTmrStopA(&pItem->tmrId)){ + if (!taosTmrStopA(&pItem->tmrId)) { smaError("vgId:%d, failed to stop fetch timer for table %" PRIi64 " level %d", SMA_VID(pSma), pInfo->suid, i + 1); } @@ -404,7 +404,7 @@ int32_t tdRSmaProcessCreateImpl(SSma *pSma, SRSmaParam *param, int64_t suid, con } STSchema *pTSchema; - code = metaGetTbTSchemaNotNull(SMA_META(pSma), suid, -1, 1, &pTSchema); + code = metaGetTbTSchemaNotNull(SMA_META(pSma), suid, -1, 1, &pTSchema); TAOS_CHECK_EXIT(code); pRSmaInfo->pSma = pSma; pRSmaInfo->pTSchema = pTSchema; @@ -820,7 +820,10 @@ static int32_t tdExecuteRSmaImplAsync(SSma *pSma, int64_t version, const void *p int64_t nItems = atomic_fetch_add_64(&pRSmaStat->nBufItems, 1); if (atomic_load_8(&pInfo->assigned) == 0) { - (void)tsem_post(&(pRSmaStat->notEmpty)); + if (tsem_post(&(pRSmaStat->notEmpty)) != 0) { + smaError("vgId:%d, failed to post notEmpty semaphore for rsma %" PRIi64 " since %s", SMA_VID(pSma), suid, + tstrerror(terrno)); + } } // smoothing consume @@ -1385,7 +1388,8 @@ static void tdRSmaFetchTrigger(void *param, void *tmrId) { if (rsmaTriggerStat == TASK_TRIGGER_STAT_PAUSED) { bool ret = taosTmrReset(tdRSmaFetchTrigger, RSMA_FETCH_INTERVAL, pItem, smaMgmt.tmrHandle, &pItem->tmrId); if (!ret) { - smaWarn("vgId:%d, rsma fetch task not reset for level %" PRIi8 " since tmr reset failed, rsetId:%d refId:%" PRIi64, + smaWarn("vgId:%d, rsma fetch task not reset for level %" PRIi8 + " since tmr reset failed, rsetId:%d refId:%" PRIi64, SMA_VID(pSma), pItem->level, smaMgmt.rsetId, pRSmaRef->refId); } } @@ -1407,7 +1411,10 @@ static void tdRSmaFetchTrigger(void *param, void *tmrId) { atomic_store_8(&pItem->fetchLevel, 1); if (atomic_load_8(&pRSmaInfo->assigned) == 0) { - (void)tsem_post(&(pStat->notEmpty)); + if (tsem_post(&(pStat->notEmpty)) != 0) { + smaError("vgId:%d, rsma fetch task not start for level:%" PRIi8 " suid:%" PRIi64 " since sem post failed", + SMA_VID(pSma), pItem->level, pRSmaInfo->suid); + } } } break; case TASK_TRIGGER_STAT_INACTIVE: { @@ -1641,7 +1648,7 @@ int32_t tdRSmaProcessExecImpl(SSma *pSma, ERsmaExecType type) { batchMax = 100 / batchMax; batchMax = TMAX(batchMax, 4); } - while (occupied || (++batchCnt < batchMax)) { // greedy mode + while (occupied || (++batchCnt < batchMax)) { // greedy mode TAOS_UNUSED(taosReadAllQitems(pInfo->queue, pInfo->qall)); // queue has mutex lock int32_t qallItemSize = taosQallItemSize(pInfo->qall); if (qallItemSize > 0) { diff --git a/source/dnode/vnode/src/tsdb/tsdbCommit2.c b/source/dnode/vnode/src/tsdb/tsdbCommit2.c index 2ffc1d1648..57f6aa3592 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCommit2.c +++ b/source/dnode/vnode/src/tsdb/tsdbCommit2.c @@ -413,7 +413,7 @@ static void tsdbCommitInfoDestroy(STsdb *pTsdb) { if (pTsdb->commitInfo) { for (int32_t i = 0; i < taosArrayGetSize(pTsdb->commitInfo->arr); i++) { SFileSetCommitInfo *info = *(SFileSetCommitInfo **)taosArrayGet(pTsdb->commitInfo->arr, i); - TAOS_UNUSED(vHashDrop(pTsdb->commitInfo->ht, info)); + int32_t ret = vHashDrop(pTsdb->commitInfo->ht, info); tsdbTFileSetClear(&info->fset); taosMemoryFree(info); } @@ -514,7 +514,7 @@ static int32_t tsdbCommitInfoBuild(STsdb *tsdb) { SFileSetCommitInfo tinfo = { .fid = fid, }; - TAOS_UNUSED(vHashGet(tsdb->commitInfo->ht, &tinfo, (void **)&info)); + int32_t ret = vHashGet(tsdb->commitInfo->ht, &tinfo, (void **)&info); if (info == NULL) { TAOS_CHECK_GOTO(tsdbCommitInfoAdd(tsdb, fid), &lino, _exit); } @@ -538,7 +538,7 @@ static int32_t tsdbCommitInfoBuild(STsdb *tsdb) { }; // check if the file set already on the commit list - TAOS_UNUSED(vHashGet(tsdb->commitInfo->ht, &tinfo, (void **)&info)); + int32_t ret = vHashGet(tsdb->commitInfo->ht, &tinfo, (void **)&info); if (info != NULL) { continue; } diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.c b/source/dnode/vnode/src/tsdb/tsdbFS2.c index 7afc61e5dc..d3b783847c 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.c @@ -63,7 +63,9 @@ static void destroy_fs(STFileSystem **fs) { TARRAY2_DESTROY(fs[0]->fSetArr, NULL); TARRAY2_DESTROY(fs[0]->fSetArrTmp, NULL); - (void)tsem_destroy(&fs[0]->canEdit); + if (tsem_destroy(&fs[0]->canEdit) != 0) { + tsdbError("failed to destroy semaphore"); + } taosMemoryFree(fs[0]); fs[0] = NULL; } @@ -808,7 +810,11 @@ void tsdbEnableBgTask(STsdb *pTsdb) { void tsdbCloseFS(STFileSystem **fs) { if (fs[0] == NULL) return; - TAOS_UNUSED(tsdbDisableAndCancelAllBgTask((*fs)->tsdb)); + int32_t code = tsdbDisableAndCancelAllBgTask((*fs)->tsdb); + if (code) { + tsdbError("vgId:%d %s failed at line %d since %s", TD_VID((*fs)->tsdb->pVnode), __func__, __LINE__, + tstrerror(code)); + } close_file_system(fs[0]); destroy_fs(fs); return; @@ -838,7 +844,9 @@ int32_t tsdbFSEditBegin(STFileSystem *fs, const TFileOpArray *opArray, EFEditT e current_fname(fs->tsdb, current_t, TSDB_FCURRENT_M); } - (void)tsem_wait(&fs->canEdit); + if (tsem_wait(&fs->canEdit) != 0) { + tsdbError("vgId:%d failed to wait semaphore", TD_VID(fs->tsdb->pVnode)); + } fs->etype = etype; // edit @@ -944,13 +952,17 @@ _exit: } else { tsdbInfo("vgId:%d %s done, etype:%d", TD_VID(fs->tsdb->pVnode), __func__, fs->etype); } - (void)tsem_post(&fs->canEdit); + if (tsem_post(&fs->canEdit) != 0) { + tsdbError("vgId:%d failed to post semaphore", TD_VID(fs->tsdb->pVnode)); + } return code; } int32_t tsdbFSEditAbort(STFileSystem *fs) { int32_t code = abort_edit(fs); - (void)tsem_post(&fs->canEdit); + if (tsem_post(&fs->canEdit) != 0) { + tsdbError("vgId:%d failed to post semaphore", TD_VID(fs->tsdb->pVnode)); + } return code; } diff --git a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c index 74b7ebc06b..c0d8f7f17d 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c +++ b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c @@ -436,7 +436,7 @@ static int32_t tsdbReadFileS3(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64 code = tsdbCacheGetPageS3(pFD->pTsdb->pgCache, pFD, pgno, &handle); if (code != TSDB_CODE_SUCCESS) { if (handle) { - (void)tsdbCacheRelease(pFD->pTsdb->pgCache, handle); + tsdbCacheRelease(pFD->pTsdb->pgCache, handle); } TSDB_CHECK_CODE(code, lino, _exit); } @@ -447,7 +447,7 @@ static int32_t tsdbReadFileS3(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64 uint8_t *pPage = (uint8_t *)taosLRUCacheValue(pFD->pTsdb->pgCache, handle); memcpy(pFD->pBuf, pPage, pFD->szPage); - (void)tsdbCacheRelease(pFD->pTsdb->pgCache, handle); + tsdbCacheRelease(pFD->pTsdb->pgCache, handle); // check if (pgno > 1 && !taosCheckChecksumWhole(pFD->pBuf, pFD->szPage)) { diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil.c b/source/dnode/vnode/src/tsdb/tsdbUtil.c index 34a07333ae..5b8a062361 100644 --- a/source/dnode/vnode/src/tsdb/tsdbUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbUtil.c @@ -609,7 +609,10 @@ void tsdbRowGetColVal(TSDBROW *pRow, STSchema *pTSchema, int32_t iCol, SColVal * SValue value; if (pRow->type == TSDBROW_ROW_FMT) { - (void)tRowGet(pRow->pTSRow, pTSchema, iCol, pColVal); + int32_t ret = tRowGet(pRow->pTSRow, pTSchema, iCol, pColVal); + if (ret != 0) { + tsdbError("failed to get column value, code:%d", ret); + } } else if (pRow->type == TSDBROW_COL_FMT) { if (iCol == 0) { *pColVal = diff --git a/source/dnode/vnode/src/vnd/vnodeAsync.c b/source/dnode/vnode/src/vnd/vnodeAsync.c index 0953c2615d..9e4fbd84a9 100644 --- a/source/dnode/vnode/src/vnd/vnodeAsync.c +++ b/source/dnode/vnode/src/vnd/vnodeAsync.c @@ -432,7 +432,7 @@ static void vnodeAsyncLaunchWorker(SVAsync *async) { if (async->workers[i].state == EVA_WORKER_STATE_ACTIVE) { continue; } else if (async->workers[i].state == EVA_WORKER_STATE_STOP) { - TAOS_UNUSED(taosThreadJoin(async->workers[i].thread, NULL)); + int32_t ret = taosThreadJoin(async->workers[i].thread, NULL); async->workers[i].state = EVA_WORKER_STATE_UINIT; } diff --git a/source/dnode/vnode/src/vnd/vnodeOpen.c b/source/dnode/vnode/src/vnd/vnodeOpen.c index 9fba8df90d..b857cdeb42 100644 --- a/source/dnode/vnode/src/vnd/vnodeOpen.c +++ b/source/dnode/vnode/src/vnd/vnodeOpen.c @@ -414,7 +414,10 @@ SVnode *vnodeOpen(const char *path, int32_t diskPrimary, STfs *pTfs, SMsgCb msgC pVnode->blocked = false; pVnode->disableWrite = false; - (void)tsem_init(&pVnode->syncSem, 0, 0); + if (tsem_init(&pVnode->syncSem, 0, 0) != 0) { + vError("vgId:%d, failed to init semaphore", TD_VID(pVnode)); + goto _err; + } (void)taosThreadMutexInit(&pVnode->mutex, NULL); (void)taosThreadCondInit(&pVnode->poolNotEmpty, NULL); diff --git a/source/dnode/vnode/src/vnd/vnodeSvr.c b/source/dnode/vnode/src/vnd/vnodeSvr.c index c5699796c1..9dbf16cb48 100644 --- a/source/dnode/vnode/src/vnd/vnodeSvr.c +++ b/source/dnode/vnode/src/vnd/vnodeSvr.c @@ -1833,7 +1833,9 @@ static int32_t vnodeProcessSubmitReq(SVnode *pVnode, int64_t ver, void *pReq, in } if (info.suid) { - (void)metaGetInfo(pVnode->pMeta, info.suid, &info, NULL); + if (metaGetInfo(pVnode->pMeta, info.suid, &info, NULL) != 0) { + vWarn("vgId:%d, table uid:%" PRId64 " not exists", TD_VID(pVnode), info.suid); + } } if (pSubmitTbData->sver != info.skmVer) { From 83f1a590b0cd4f4909e086425fc13bddfcd4576c Mon Sep 17 00:00:00 2001 From: Jinqing Kuang Date: Mon, 23 Sep 2024 19:54:33 +0800 Subject: [PATCH 18/46] fix(query)[TD-32258]. Fix error handling in operator interface functions - Contain errors within individual operators, preventing error propagation to upper-level operators - Use longjmp to jump directly to the outermost error handler for unresolvable issues, avoiding unnecessary error code returns through multiple layers - Simplify error-handling logic for better maintainability --- source/libs/executor/src/cachescanoperator.c | 12 +- .../libs/executor/src/dynqueryctrloperator.c | 2 + source/libs/executor/src/exchangeoperator.c | 18 +-- source/libs/executor/src/groupoperator.c | 6 +- source/libs/executor/src/hashjoinoperator.c | 38 +++---- source/libs/executor/src/mergejoinoperator.c | 1 + source/libs/executor/src/mergeoperator.c | 22 ++-- source/libs/executor/src/operator.c | 15 ++- source/libs/executor/src/projectoperator.c | 58 +++++----- source/libs/executor/src/scanoperator.c | 51 ++++++--- source/libs/executor/src/sortoperator.c | 103 ++++++++++-------- .../executor/src/streamcountwindowoperator.c | 3 +- .../executor/src/streameventwindowoperator.c | 3 +- source/libs/executor/src/streamfilloperator.c | 3 +- .../executor/src/streamtimewindowoperator.c | 19 +++- source/libs/executor/src/sysscanoperator.c | 12 +- 16 files changed, 201 insertions(+), 165 deletions(-) diff --git a/source/libs/executor/src/cachescanoperator.c b/source/libs/executor/src/cachescanoperator.c index 7c1ca294e7..649a7a4524 100644 --- a/source/libs/executor/src/cachescanoperator.c +++ b/source/libs/executor/src/cachescanoperator.c @@ -347,11 +347,7 @@ static int32_t doScanCacheNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { SExprSupp* pSup = &pInfo->pseudoExprSup; code = addTagPseudoColumnData(&pInfo->readHandle, pSup->pExprInfo, pSup->numOfExprs, pRes, pRes->info.rows, pTaskInfo, NULL); - if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; - (*ppRes) = NULL; - return code; - } + QUERY_CHECK_CODE(code, lino, _end); pRes->info.id.groupId = tableListGetTableGroupId(pTableList, pRes->info.id.uid); pInfo->indexOfBufferedRes += 1; @@ -414,11 +410,7 @@ static int32_t doScanCacheNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { pInfo->pRes->info.id.uid = *(tb_uid_t*)pUid; code = addTagPseudoColumnData(&pInfo->readHandle, pSup->pExprInfo, pSup->numOfExprs, pInfo->pRes, pInfo->pRes->info.rows, pTaskInfo, NULL); - if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; - (*ppRes) = NULL; - return code; - } + QUERY_CHECK_CODE(code, lino, _end); } } diff --git a/source/libs/executor/src/dynqueryctrloperator.c b/source/libs/executor/src/dynqueryctrloperator.c index 638536349d..eb49057d89 100644 --- a/source/libs/executor/src/dynqueryctrloperator.c +++ b/source/libs/executor/src/dynqueryctrloperator.c @@ -938,7 +938,9 @@ _return: } if (code) { + qError("%s failed since %s", __func__, tstrerror(code)); pOperator->pTaskInfo->code = code; + T_LONG_JMP(pOperator->pTaskInfo->env, code); } else { seqStableJoinComposeRes(pStbJoin, *pRes); } diff --git a/source/libs/executor/src/exchangeoperator.c b/source/libs/executor/src/exchangeoperator.c index fa6f61406c..9af5845a84 100644 --- a/source/libs/executor/src/exchangeoperator.c +++ b/source/libs/executor/src/exchangeoperator.c @@ -1094,6 +1094,7 @@ int32_t addDynamicExchangeSource(SOperatorInfo* pOperator) { int32_t prepareLoadRemoteData(SOperatorInfo* pOperator) { SExchangeInfo* pExchangeInfo = pOperator->info; int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if ((OPTR_IS_OPENED(pOperator) && !pExchangeInfo->dynamicOp) || (pExchangeInfo->dynamicOp && NULL == pOperator->pOperatorGetParam)) { return TSDB_CODE_SUCCESS; @@ -1101,23 +1102,26 @@ int32_t prepareLoadRemoteData(SOperatorInfo* pOperator) { if (pExchangeInfo->dynamicOp) { code = addDynamicExchangeSource(pOperator); - if (code) { - return code; - } + QUERY_CHECK_CODE(code, lino, _end); } int64_t st = taosGetTimestampUs(); if (!pExchangeInfo->seqLoadData) { - int32_t code = prepareConcurrentlyLoad(pOperator); - if (code != TSDB_CODE_SUCCESS) { - return code; - } + code = prepareConcurrentlyLoad(pOperator); + QUERY_CHECK_CODE(code, lino, _end); pExchangeInfo->openedTs = taosGetTimestampUs(); } OPTR_SET_OPENED(pOperator); pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pOperator->pTaskInfo->code = code; + T_LONG_JMP(pOperator->pTaskInfo->env, code); + } return TSDB_CODE_SUCCESS; } diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c index 83a579615c..13b6896272 100644 --- a/source/libs/executor/src/groupoperator.c +++ b/source/libs/executor/src/groupoperator.c @@ -441,7 +441,7 @@ static int32_t hashGroupbyAggregateNext(SOperatorInfo* pOperator, SSDataBlock** QRY_PARAM_CHECK(ppRes); if (pOperator->status == OP_EXEC_DONE) { - return TSDB_CODE_SUCCESS; + return code; } if (pOperator->status == OP_RES_TO_RETURN) { @@ -493,6 +493,7 @@ _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } else { (*ppRes) = buildGroupResultDataBlockByHash(pOperator); } @@ -1522,8 +1523,9 @@ static int32_t doStreamHashPartitionNext(SOperatorInfo* pOperator, SSDataBlock** _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } (*ppRes) = NULL; return code; diff --git a/source/libs/executor/src/hashjoinoperator.c b/source/libs/executor/src/hashjoinoperator.c index 347c48b4d1..1f43a429b3 100644 --- a/source/libs/executor/src/hashjoinoperator.c +++ b/source/libs/executor/src/hashjoinoperator.c @@ -993,6 +993,7 @@ static int32_t hJoinMainProcess(struct SOperatorInfo* pOperator, SSDataBlock** p SHJoinOperatorInfo* pJoin = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SSDataBlock* pRes = pJoin->finBlk; int64_t st = 0; @@ -1003,7 +1004,7 @@ static int32_t hJoinMainProcess(struct SOperatorInfo* pOperator, SSDataBlock** p if (pOperator->status == OP_EXEC_DONE) { pRes->info.rows = 0; - goto _return; + goto _end; } if (!pJoin->keyHashBuilt) { @@ -1011,13 +1012,10 @@ static int32_t hJoinMainProcess(struct SOperatorInfo* pOperator, SSDataBlock** p bool queryDone = false; code = hJoinBuildHash(pOperator, &queryDone); - if (code) { - pTaskInfo->code = code; - return code; - } + QUERY_CHECK_CODE(code, lino, _end); if (queryDone) { - goto _return; + goto _end; } } @@ -1025,17 +1023,11 @@ static int32_t hJoinMainProcess(struct SOperatorInfo* pOperator, SSDataBlock** p if (pJoin->ctx.rowRemains) { code = (*pJoin->joinFp)(pOperator); - if (code) { - pTaskInfo->code = code; - return pTaskInfo->code; - } + QUERY_CHECK_CODE(code, lino, _end); if (pRes->info.rows > 0 && pJoin->pFinFilter != NULL) { code = doFilter(pRes, pJoin->pFinFilter, NULL); - if (code) { - pTaskInfo->code = code; - return pTaskInfo->code; - } + QUERY_CHECK_CODE(code, lino, _end); } if (pRes->info.rows > 0) { @@ -1055,10 +1047,7 @@ static int32_t hJoinMainProcess(struct SOperatorInfo* pOperator, SSDataBlock** p pJoin->execInfo.probeBlkRows += pBlock->info.rows; code = hJoinPrepareStart(pOperator, pBlock); - if (code) { - pTaskInfo->code = code; - return pTaskInfo->code; - } + QUERY_CHECK_CODE(code, lino, _end); if (!hJoinBlkReachThreshold(pJoin, pRes->info.rows)) { continue; @@ -1066,10 +1055,7 @@ static int32_t hJoinMainProcess(struct SOperatorInfo* pOperator, SSDataBlock** p if (pRes->info.rows > 0 && pJoin->pFinFilter != NULL) { code = doFilter(pRes, pJoin->pFinFilter, NULL); - if (code) { - pTaskInfo->code = code; - return pTaskInfo->code; - } + QUERY_CHECK_CODE(code, lino, _end); } if (pRes->info.rows > 0) { @@ -1077,11 +1063,15 @@ static int32_t hJoinMainProcess(struct SOperatorInfo* pOperator, SSDataBlock** p } } -_return: +_end: if (pOperator->cost.openCost == 0) { pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; } - + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } if (pRes->info.rows > 0) { *pResBlock = pRes; } diff --git a/source/libs/executor/src/mergejoinoperator.c b/source/libs/executor/src/mergejoinoperator.c index af5e4ed235..e007504ffb 100644 --- a/source/libs/executor/src/mergejoinoperator.c +++ b/source/libs/executor/src/mergejoinoperator.c @@ -1731,6 +1731,7 @@ int32_t mJoinMainProcess(struct SOperatorInfo* pOperator, SSDataBlock** pResBloc if (pJoin->pFinFilter != NULL) { code = doFilter(pBlock, pJoin->pFinFilter, NULL); if (code) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); pJoin->errCode = code; T_LONG_JMP(pOperator->pTaskInfo->env, pJoin->errCode); } diff --git a/source/libs/executor/src/mergeoperator.c b/source/libs/executor/src/mergeoperator.c index 49973ac373..45cd755f78 100644 --- a/source/libs/executor/src/mergeoperator.c +++ b/source/libs/executor/src/mergeoperator.c @@ -492,6 +492,8 @@ int32_t openMultiwayMergeOperator(SOperatorInfo* pOperator) { pOperator->status = OP_RES_TO_RETURN; if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + pOperator->pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, terrno); } @@ -501,6 +503,8 @@ int32_t openMultiwayMergeOperator(SOperatorInfo* pOperator) { int32_t doMultiwayMerge(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { QRY_PARAM_CHECK(pResBlock); + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pOperator->status == OP_EXEC_DONE) { return 0; @@ -509,18 +513,12 @@ int32_t doMultiwayMerge(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SMultiwayMergeOperatorInfo* pInfo = pOperator->info; - int32_t code = pOperator->fpSet._openFn(pOperator); - if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; - return code; - } + code = pOperator->fpSet._openFn(pOperator); + QUERY_CHECK_CODE(code, lino, _end); if (NULL != gMultiwayMergeFps[pInfo->type].getNextFn) { code = (*gMultiwayMergeFps[pInfo->type].getNextFn)(pOperator, pResBlock); - if (code) { - pTaskInfo->code = code; - return code; - } + QUERY_CHECK_CODE(code, lino, _end); } if ((*pResBlock) != NULL) { @@ -530,6 +528,12 @@ int32_t doMultiwayMerge(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { setOperatorCompleted(pOperator); } +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } return code; } diff --git a/source/libs/executor/src/operator.c b/source/libs/executor/src/operator.c index fe2f3f8dfe..c96c45b634 100644 --- a/source/libs/executor/src/operator.c +++ b/source/libs/executor/src/operator.c @@ -883,14 +883,17 @@ SSDataBlock* getNextBlockFromDownstreamRemain(struct SOperatorInfo* pOperator, i int32_t optrDefaultGetNextExtFn(struct SOperatorInfo* pOperator, SOperatorParam* pParam, SSDataBlock** pRes) { QRY_PARAM_CHECK(pRes); + int32_t lino = 0; int32_t code = setOperatorParams(pOperator, pParam, OP_GET_PARAM); - if (TSDB_CODE_SUCCESS != code) { + QUERY_CHECK_CODE(code, lino, _end); + code = pOperator->fpSet.getNextFn(pOperator, pRes); + QUERY_CHECK_CODE(code, lino, _end); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); pOperator->pTaskInfo->code = code; - } else { - code = pOperator->fpSet.getNextFn(pOperator, pRes); - if (code) { - pOperator->pTaskInfo->code = code; - } + T_LONG_JMP(pOperator->pTaskInfo->env, code); } return code; diff --git a/source/libs/executor/src/projectoperator.c b/source/libs/executor/src/projectoperator.c index 790e97b27c..5b9e531679 100644 --- a/source/libs/executor/src/projectoperator.c +++ b/source/libs/executor/src/projectoperator.c @@ -270,6 +270,7 @@ int32_t doProjectOperation(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { SSDataBlock* pRes = pInfo->pRes; SSDataBlock* pFinalRes = pProjectInfo->pFinalRes; int32_t code = 0; + int32_t lino = 0; int64_t st = 0; int32_t order = pInfo->inputTsOrder; int32_t scanFlag = 0; @@ -290,9 +291,7 @@ int32_t doProjectOperation(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { if (downstream == NULL) { code = doGenerateSourceData(pOperator); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); if (pProjectInfo->outputIgnoreGroup) { pRes->info.id.groupId = 0; @@ -348,20 +347,14 @@ int32_t doProjectOperation(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { } code = setInputDataBlock(pSup, pBlock, order, scanFlag, false); - if (code) { - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); code = blockDataEnsureCapacity(pInfo->pRes, pInfo->pRes->info.rows + pBlock->info.rows); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); code = projectApplyFunctions(pSup->pExprInfo, pInfo->pRes, pBlock, pSup->pCtx, pSup->numOfExprs, pProjectInfo->pPseudoColInfo); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); status = doIngroupLimitOffset(pLimitInfo, pBlock->info.id.groupId, pInfo->pRes, pOperator); if (status == PROJECT_RETRIEVE_CONTINUE) { @@ -377,11 +370,8 @@ int32_t doProjectOperation(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { pFinalRes->info.version = pRes->info.version; // continue merge data, ignore the group id - int32_t ret = blockDataMerge(pFinalRes, pRes); - if (ret < 0) { - pTaskInfo->code = code; - return code; - } + code = blockDataMerge(pFinalRes, pRes); + QUERY_CHECK_CODE(code, lino, _end); if (pFinalRes->info.rows + pRes->info.rows <= pOperator->resultInfo.threshold && (pOperator->status != OP_EXEC_DONE)) { continue; @@ -390,10 +380,7 @@ int32_t doProjectOperation(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { // do apply filter code = doFilter(pFinalRes, pOperator->exprSupp.pFilterInfo, NULL); - if (code) { - pTaskInfo->code = code; - return code; - } + QUERY_CHECK_CODE(code, lino, _end); // when apply the limit/offset for each group, pRes->info.rows may be 0, due to limit constraint. if (pFinalRes->info.rows > 0 || (pOperator->status == OP_EXEC_DONE)) { @@ -404,10 +391,7 @@ int32_t doProjectOperation(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { // do apply filter if (pRes->info.rows > 0) { code = doFilter(pRes, pOperator->exprSupp.pFilterInfo, NULL); - if (code) { - pTaskInfo->code = code; - return code; - } + QUERY_CHECK_CODE(code, lino, _end); if (pRes->info.rows == 0) { continue; @@ -436,6 +420,13 @@ int32_t doProjectOperation(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { } *pResBlock = (p->info.rows > 0)? p:NULL; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } return code; } @@ -578,14 +569,15 @@ int32_t doApplyIndefinitFunction(SOperatorInfo* pOperator, SSDataBlock** pResBlo SOptrBasicInfo* pInfo = &pIndefInfo->binfo; SExprSupp* pSup = &pOperator->exprSupp; int64_t st = 0; - int32_t code = 0; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SSDataBlock* pRes = pInfo->pRes; blockDataCleanup(pRes); SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (pOperator->status == OP_EXEC_DONE) { - return 0; + return code; } if (pOperator->cost.openCost == 0) { @@ -637,10 +629,7 @@ int32_t doApplyIndefinitFunction(SOperatorInfo* pOperator, SSDataBlock** pResBlo } code = doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); - if (code) { - pTaskInfo->code = code; - return code; - } + QUERY_CHECK_CODE(code, lino, _end); size_t rows = pInfo->pRes->info.rows; if (rows > 0 || pOperator->status == OP_EXEC_DONE) { @@ -658,6 +647,13 @@ int32_t doApplyIndefinitFunction(SOperatorInfo* pOperator, SSDataBlock** pResBlo } *pResBlock = (rows > 0) ? pInfo->pRes : NULL; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } return code; } diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 76e4f8ba56..dcd401bf84 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -951,7 +951,8 @@ static int32_t doTableScanImplNext(SOperatorInfo* pOperator, SSDataBlock** ppRes if (isTaskKilled(pTaskInfo)) { pAPI->tsdReader.tsdReaderReleaseDataBlock(pTableScanInfo->base.dataReader); - return pTaskInfo->code; + code = pTaskInfo->code; + goto _end; } if (pOperator->status == OP_EXEC_DONE) { @@ -996,6 +997,7 @@ _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } return code; } @@ -1416,6 +1418,7 @@ _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } return code; @@ -2944,8 +2947,9 @@ static int32_t doQueueScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pResult && pResult->info.rows > 0) { bool hasPrimaryKey = pAPI->tqReaderFn.tqGetTablePrimaryKey(pInfo->tqReader); code = processPrimaryKey(pResult, hasPrimaryKey, &pTaskInfo->streamInfo.currentOffset); + QUERY_CHECK_CODE(code, lino, _end); qDebug("tmqsnap doQueueScan get data utid:%" PRId64 "", pResult->info.id.uid); - if (pResult->info.rows > 0 || code != TSDB_CODE_SUCCESS) { + if (pResult->info.rows > 0) { (*ppRes) = pResult; return code; } @@ -3009,8 +3013,9 @@ static int32_t doQueueScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } (*ppRes) = NULL; return code; @@ -3340,9 +3345,7 @@ FETCH_NEXT_BLOCK: if (pBlock->info.parTbName[0]) { code = pAPI->stateStore.streamStatePutParName(pStreamInfo->pState, pBlock->info.id.groupId, pBlock->info.parTbName); - if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); - } + QUERY_CHECK_CODE(code, lino, _end); } // TODO move into scan @@ -3658,8 +3661,9 @@ FETCH_NEXT_BLOCK: _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } (*ppRes) = NULL; return code; @@ -3730,6 +3734,7 @@ static int32_t doRawScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pBlock && pBlock->info.rows > 0) { bool hasPrimaryKey = pAPI->snapshotFn.taosXGetTablePrimaryKey(pInfo->sContext); code = processPrimaryKey(pBlock, hasPrimaryKey, &pTaskInfo->streamInfo.currentOffset); + QUERY_CHECK_CODE(code, lino, _end); qDebug("tmqsnap doRawScan get data uid:%" PRId64 "", pBlock->info.id.uid); (*ppRes) = pBlock; return code; @@ -3741,7 +3746,7 @@ static int32_t doRawScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { QUERY_CHECK_CODE(code, lino, _end); if (code != 0) { tDeleteSchemaWrapper(mtInfo.schema); - goto _end; + QUERY_CHECK_CODE(code, lino, _end); } STqOffsetVal offset = {0}; if (mtInfo.uid == 0 || pInfo->sContext->withMeta == ONLY_META) { // read snapshot done, change to get data from wal @@ -3831,6 +3836,7 @@ _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } (*ppRes) = NULL; @@ -4677,6 +4683,7 @@ _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } return code; @@ -4684,6 +4691,7 @@ _end: static int32_t doTagScanFromMetaEntryNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pOperator->status == OP_EXEC_DONE) { (*ppRes) = NULL; return code; @@ -4699,10 +4707,7 @@ static int32_t doTagScanFromMetaEntryNext(SOperatorInfo* pOperator, SSDataBlock* int32_t size = 0; code = tableListGetSize(pInfo->pTableListInfo, &size); - if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - return code; - } + QUERY_CHECK_CODE(code, lino, _end); if (size == 0) { setTaskStatus(pTaskInfo, TASK_COMPLETED); @@ -4716,11 +4721,11 @@ static int32_t doTagScanFromMetaEntryNext(SOperatorInfo* pOperator, SSDataBlock* while (pInfo->curPos < size && count < pOperator->resultInfo.capacity) { code = doTagScanOneTable(pOperator, pRes, count, &mr, &pTaskInfo->storageAPI); - if (code == TSDB_CODE_OUT_OF_MEMORY) { - break; - } else { + if (code != TSDB_CODE_OUT_OF_MEMORY) { // ignore other error + code = TSDB_CODE_SUCCESS; } + QUERY_CHECK_CODE(code, lino, _end); ++count; if (++pInfo->curPos >= size) { @@ -4744,6 +4749,13 @@ static int32_t doTagScanFromMetaEntryNext(SOperatorInfo* pOperator, SSDataBlock* pOperator->resultInfo.totalRows += pRes->info.rows; (*ppRes) = (pRes->info.rows == 0) ? NULL : pInfo->pRes; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } return code; } @@ -5429,6 +5441,7 @@ _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } else { (*ppRes) = pBlock; } @@ -5945,6 +5958,7 @@ _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } else { (*ppRes) = pBlock; } @@ -6460,7 +6474,12 @@ static int32_t doTableCountScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRe } code = buildVnodeDbTableCount(pOperator, pInfo, pSupp, pRes); - if ((pRes->info.rows > 0) && (code == 0)) { + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed since %s", __func__, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } + if (pRes->info.rows > 0) { *ppRes = pRes; } diff --git a/source/libs/executor/src/sortoperator.c b/source/libs/executor/src/sortoperator.c index d12f6dd94c..11b3fa8c70 100644 --- a/source/libs/executor/src/sortoperator.c +++ b/source/libs/executor/src/sortoperator.c @@ -349,82 +349,84 @@ void applyScalarFunction(SSDataBlock* pBlock, void* param) { int32_t doOpenSortOperator(SOperatorInfo* pOperator) { SSortOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SSortSource* pSource =NULL; if (OPTR_IS_OPENED(pOperator)) { - return TSDB_CODE_SUCCESS; + return code; } pInfo->startTs = taosGetTimestampUs(); // pInfo->binfo.pRes is not equalled to the input datablock. pInfo->pSortHandle = NULL; - int32_t code = + code = tsortCreateSortHandle(pInfo->pSortInfo, SORT_SINGLESOURCE_SORT, -1, -1, NULL, pTaskInfo->id.str, pInfo->maxRows, pInfo->maxTupleLength, tsPQSortMemThreshold * 1024 * 1024, &pInfo->pSortHandle); - if (code) { - return code; - } + QUERY_CHECK_CODE(code, lino, _end); tsortSetFetchRawDataFp(pInfo->pSortHandle, loadNextDataBlock, applyScalarFunction, pOperator); - SSortSource* pSource = taosMemoryCalloc(1, sizeof(SSortSource)); - if (pSource == NULL) { - return terrno; - } + pSource = taosMemoryCalloc(1, sizeof(SSortSource)); + QUERY_CHECK_NULL(pSource, code, lino, _end, terrno); pSource->param = pOperator->pDownstream[0]; pSource->onlyRef = true; code = tsortAddSource(pInfo->pSortHandle, pSource); - if (code) { - taosMemoryFree(pSource); - return code; - } + QUERY_CHECK_CODE(code, lino, _end); + pSource = NULL; code = tsortOpen(pInfo->pSortHandle); - if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; - } else { - pOperator->cost.openCost = (taosGetTimestampUs() - pInfo->startTs) / 1000.0; - pOperator->status = OP_RES_TO_RETURN; - OPTR_SET_OPENED(pOperator); - } + QUERY_CHECK_CODE(code, lino, _end); + pOperator->cost.openCost = (taosGetTimestampUs() - pInfo->startTs) / 1000.0; + pOperator->status = OP_RES_TO_RETURN; + OPTR_SET_OPENED(pOperator); +_end: + if (pSource) { + taosMemoryFree(pSource); + } + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } return code; } int32_t doSort(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { QRY_PARAM_CHECK(pResBlock); + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pOperator->status == OP_EXEC_DONE) { - return 0; + return code; } SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SSortOperatorInfo* pInfo = pOperator->info; - int32_t code = pOperator->fpSet._openFn(pOperator); - if (code != TSDB_CODE_SUCCESS) { - return code; - } + code = pOperator->fpSet._openFn(pOperator); + QUERY_CHECK_CODE(code, lino, _end); // multi-group case not handle here SSDataBlock* pBlock = NULL; while (1) { if (tsortIsClosed(pInfo->pSortHandle)) { code = TSDB_CODE_TSC_QUERY_CANCELLED; - T_LONG_JMP(pTaskInfo->env, code); + QUERY_CHECK_CODE(code, lino, _end); } code = getSortedBlockData(pInfo->pSortHandle, pInfo->binfo.pRes, pOperator->resultInfo.capacity, pInfo->matchInfo.pList, pInfo, &pBlock); - if (pBlock == NULL || code != 0) { + QUERY_CHECK_CODE(code, lino, _end); + if (pBlock == NULL) { setOperatorCompleted(pOperator); return code; } code = doFilter(pBlock, pOperator->exprSupp.pFilterInfo, &pInfo->matchInfo); - if (code) { - break; - } + QUERY_CHECK_CODE(code, lino, _end); if (blockDataGetNumOfRows(pBlock) == 0) { continue; @@ -443,6 +445,12 @@ int32_t doSort(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { } *pResBlock = blockDataGetNumOfRows(pBlock) > 0 ? pBlock : NULL; +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } return code; } @@ -692,16 +700,16 @@ int32_t doGroupSort(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { QRY_PARAM_CHECK(pResBlock); SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SGroupSortOperatorInfo* pInfo = pOperator->info; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pOperator->status == OP_EXEC_DONE) { - return 0; - } - - int32_t code = pOperator->fpSet._openFn(pOperator); - if (code != TSDB_CODE_SUCCESS) { return code; } + code = pOperator->fpSet._openFn(pOperator); + QUERY_CHECK_CODE(code, lino, _end); + if (!pInfo->hasGroupId) { pInfo->hasGroupId = true; @@ -714,30 +722,25 @@ int32_t doGroupSort(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { pInfo->currGroupId = pInfo->prefetchedSortInput->info.id.groupId; pInfo->childOpStatus = CHILD_OP_NEW_GROUP; code = beginSortGroup(pOperator); - if (code) { - return code; - } + QUERY_CHECK_CODE(code, lino, _end); } SSDataBlock* pBlock = NULL; while (pInfo->pCurrSortHandle != NULL) { if (tsortIsClosed(pInfo->pCurrSortHandle)) { code = TSDB_CODE_TSC_QUERY_CANCELLED; - T_LONG_JMP(pTaskInfo->env, code); + QUERY_CHECK_CODE(code, lino, _end); } // beginSortGroup would fetch all child blocks of pInfo->currGroupId; if (pInfo->childOpStatus == CHILD_OP_SAME_GROUP) { - pTaskInfo->code = code = TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - return code; + code = TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + QUERY_CHECK_CODE(code, lino, _end); } code = getGroupSortedBlockData(pInfo->pCurrSortHandle, pInfo->binfo.pRes, pOperator->resultInfo.capacity, pInfo->matchInfo.pList, pInfo, &pBlock); - if (code != TSDB_CODE_SUCCESS) { - return code; - } + QUERY_CHECK_CODE(code, lino, _end); if (pBlock != NULL) { pBlock->info.id.groupId = pInfo->currGroupId; pOperator->resultInfo.totalRows += pBlock->info.rows; @@ -748,9 +751,7 @@ int32_t doGroupSort(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { (void) finishSortGroup(pOperator); pInfo->currGroupId = pInfo->prefetchedSortInput->info.id.groupId; code = beginSortGroup(pOperator); - if (code) { - return code; - } + QUERY_CHECK_CODE(code, lino, _end); } else if (pInfo->childOpStatus == CHILD_OP_FINISHED) { (void) finishSortGroup(pOperator); setOperatorCompleted(pOperator); @@ -759,6 +760,12 @@ int32_t doGroupSort(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { } } +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } return code; } diff --git a/source/libs/executor/src/streamcountwindowoperator.c b/source/libs/executor/src/streamcountwindowoperator.c index adf764a8c5..367d94f614 100644 --- a/source/libs/executor/src/streamcountwindowoperator.c +++ b/source/libs/executor/src/streamcountwindowoperator.c @@ -741,8 +741,9 @@ static int32_t doStreamCountAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; diff --git a/source/libs/executor/src/streameventwindowoperator.c b/source/libs/executor/src/streameventwindowoperator.c index a325616bd3..84be2beeb2 100644 --- a/source/libs/executor/src/streameventwindowoperator.c +++ b/source/libs/executor/src/streameventwindowoperator.c @@ -731,8 +731,9 @@ static int32_t doStreamEventAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; diff --git a/source/libs/executor/src/streamfilloperator.c b/source/libs/executor/src/streamfilloperator.c index 4d5f597ab6..291cc3b67b 100644 --- a/source/libs/executor/src/streamfilloperator.c +++ b/source/libs/executor/src/streamfilloperator.c @@ -1155,8 +1155,9 @@ static int32_t doStreamFillNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } setOperatorCompleted(pOperator); resetStreamFillInfo(pInfo); diff --git a/source/libs/executor/src/streamtimewindowoperator.c b/source/libs/executor/src/streamtimewindowoperator.c index 09bf73c1ee..390a9a3660 100644 --- a/source/libs/executor/src/streamtimewindowoperator.c +++ b/source/libs/executor/src/streamtimewindowoperator.c @@ -1798,8 +1798,9 @@ static int32_t doStreamFinalIntervalAggNext(SOperatorInfo* pOperator, SSDataBloc _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; @@ -3563,8 +3564,9 @@ static int32_t doStreamSessionAggNext(SOperatorInfo* pOperator, SSDataBlock** pp _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; @@ -4067,8 +4069,9 @@ static int32_t doStreamSessionSemiAggNext(SOperatorInfo* pOperator, SSDataBlock* _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } clearFunctionContext(&pOperator->exprSupp); @@ -4803,8 +4806,9 @@ static int32_t doStreamStateAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; @@ -5202,6 +5206,7 @@ static int32_t doStreamIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock** p code = TSDB_CODE_SUCCESS; break; } + QUERY_CHECK_CODE(code, lino, _end); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.window.ekey); pInfo->twAggSup.minTs = TMIN(pInfo->twAggSup.minTs, pBlock->info.window.skey); } @@ -5244,8 +5249,9 @@ static int32_t doStreamIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock** p _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; @@ -5779,8 +5785,9 @@ static int32_t doStreamMidIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock* _end: if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); } (*ppRes) = NULL; return code; diff --git a/source/libs/executor/src/sysscanoperator.c b/source/libs/executor/src/sysscanoperator.c index dcebdf59a9..7467d391d8 100644 --- a/source/libs/executor/src/sysscanoperator.c +++ b/source/libs/executor/src/sysscanoperator.c @@ -2049,7 +2049,7 @@ static int32_t doSysTableScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) if (isTaskKilled(pOperator->pTaskInfo)) { setOperatorCompleted(pOperator); (*ppRes) = NULL; - return pTaskInfo->code; + break; } blockDataCleanup(pInfo->pRes); @@ -2092,12 +2092,18 @@ static int32_t doSysTableScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) continue; } (*ppRes) = pBlock; - return pTaskInfo->code; } else { (*ppRes) = NULL; - return pTaskInfo->code; } + break; } + +_end: + if (pTaskInfo->code) { + qError("%s failed since %s", __func__, tstrerror(pTaskInfo->code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } + return pTaskInfo->code; } static void sysTableScanFillTbName(SOperatorInfo* pOperator, const SSysTableScanInfo* pInfo, const char* name, From 78a4cf4e908c4f058fa9e9ac82156639a09dbd28 Mon Sep 17 00:00:00 2001 From: xiao-77 Date: Tue, 24 Sep 2024 18:33:52 +0800 Subject: [PATCH 19/46] fix mem leak when open wal --- source/libs/wal/src/walMgmt.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/libs/wal/src/walMgmt.c b/source/libs/wal/src/walMgmt.c index 81d31f9ecd..2d9ca4cce3 100644 --- a/source/libs/wal/src/walMgmt.c +++ b/source/libs/wal/src/walMgmt.c @@ -189,6 +189,7 @@ SWal *walOpen(const char *path, SWalCfg *pCfg) { _err: taosArrayDestroy(pWal->fileInfoSet); + taosArrayDestroy(pWal->toDeleteFiles); taosHashCleanup(pWal->pRefHash); TAOS_UNUSED(taosThreadRwlockDestroy(&pWal->mutex)); taosMemoryFreeClear(pWal); From 7f3c6c5e9737a53b04bf4b0a1040a23efaa613a9 Mon Sep 17 00:00:00 2001 From: Jinqing Kuang Date: Mon, 23 Sep 2024 14:21:29 +0800 Subject: [PATCH 20/46] fix(query)[TD-32259]. Fix error handling in merge sort - Ensure proper release of allocated datablocks on error - Address potential double free issue --- source/libs/executor/src/tsort.c | 55 ++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/source/libs/executor/src/tsort.c b/source/libs/executor/src/tsort.c index 00daafa59d..6fef9a5e10 100644 --- a/source/libs/executor/src/tsort.c +++ b/source/libs/executor/src/tsort.c @@ -437,41 +437,36 @@ int32_t tsortAddSource(SSortHandle* pSortHandle, void* pSource) { static int32_t doAddNewExternalMemSource(SDiskbasedBuf* pBuf, SArray* pAllSources, SSDataBlock* pBlock, int32_t* sourceId, SArray* pPageIdList) { + int32_t code = 0; + int32_t lino = 0; SSortSource* pSource = taosMemoryCalloc(1, sizeof(SSortSource)); - if (pSource == NULL) { - taosArrayDestroy(pPageIdList); - return terrno; - } + QUERY_CHECK_NULL(pSource, code, lino, _err, terrno); pSource->src.pBlock = pBlock; pSource->pageIdList = pPageIdList; - void* p = taosArrayPush(pAllSources, &pSource); - if (p == NULL) { - taosArrayDestroy(pPageIdList); - return terrno; - } + SSortSource** p = taosArrayPush(pAllSources, &pSource); + QUERY_CHECK_NULL(p, code, lino, _err, terrno); + pSource = NULL; (*sourceId) += 1; - int32_t rowSize = blockDataGetSerialRowSize(pSource->src.pBlock); + int32_t rowSize = blockDataGetSerialRowSize((*p)->src.pBlock); // The value of numOfRows must be greater than 0, which is guaranteed by the previous memory allocation int32_t numOfRows = (getBufPageSize(pBuf) - blockDataGetSerialMetaSize(taosArrayGetSize(pBlock->pDataBlock))) / rowSize; - if (numOfRows <= 0) { - qError("sort failed at: %s:%d", __func__, __LINE__); - taosArrayDestroy(pPageIdList); - return TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; - } + QUERY_CHECK_CONDITION((numOfRows > 0), code, lino, _err, TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); - int32_t code = blockDataEnsureCapacity(pSource->src.pBlock, numOfRows); - if (code != 0) { - qError("sort failed at: %s:%d", __func__, __LINE__); - taosArrayDestroy(pPageIdList); - } + code = blockDataEnsureCapacity((*p)->src.pBlock, numOfRows); + QUERY_CHECK_CODE(code, lino, _err); return code; + +_err: + if (pSource) taosMemoryFree(pSource); + qError("sort failed at %s:%d since %s", __func__, lino, tstrerror(code)); + return code; } static int32_t doAddToBuf(SSDataBlock* pDataBlock, SSortHandle* pHandle) { @@ -554,7 +549,12 @@ static int32_t doAddToBuf(SSDataBlock* pDataBlock, SSortHandle* pHandle) { return code; } - return doAddNewExternalMemSource(pHandle->pBuf, pHandle->pOrderedSource, pBlock, &pHandle->sourceId, pPageIdList); + code = doAddNewExternalMemSource(pHandle->pBuf, pHandle->pOrderedSource, pBlock, &pHandle->sourceId, pPageIdList); + if (code) { + blockDataDestroy(pBlock); + taosArrayDestroy(pPageIdList); + } + return code; } static void setCurrentSourceDone(SSortSource* pSource, SSortHandle* pHandle) { @@ -1023,6 +1023,9 @@ static int32_t doSortForEachGroup(SSortHandle* pHandle, int32_t sortTimes, int32 QUERY_CHECK_CODE(code, lino, _err); code = doAddNewExternalMemSource(pHandle->pBuf, pResList, pBlock, &pHandle->sourceId, pPageIdList); + if (code != TSDB_CODE_SUCCESS) { + blockDataDestroy(pBlock); + } QUERY_CHECK_CODE(code, lino, _err); } @@ -2144,6 +2147,10 @@ static int32_t sortBlocksToExtSource(SSortHandle* pHandle, SArray* aBlk, SArray* if (code) goto _error; code = doAddNewExternalMemSource(pHandle->pBuf, aExtSrc, pMemSrcBlk, &pHandle->sourceId, aPgId); + if (code != TSDB_CODE_SUCCESS) { + blockDataDestroy(pMemSrcBlk); + goto _error; + } cleanupMergeSup(&sup); tMergeTreeDestroy(&pTree); @@ -2306,9 +2313,15 @@ static int32_t createBlocksMergeSortInitialSources(SSortHandle* pHandle) { } code = tSimpleHashPut(mUidBlk, &pBlk->info.id.uid, sizeof(pBlk->info.id.uid), &tBlk, POINTER_BYTES); + if (code != TSDB_CODE_SUCCESS) { + blockDataDestroy(tBlk); + } QUERY_CHECK_CODE(code, lino, _err); void* px = taosArrayPush(aBlkSort, &tBlk); + if (px == NULL) { + blockDataDestroy(tBlk); + } QUERY_CHECK_NULL(px, code, lino, _err, terrno); } } From 0ef3774c7494bd426c7ac4ab18309a59c9eb0ec8 Mon Sep 17 00:00:00 2001 From: sheyanjie-qq <249478495@qq.com> Date: Tue, 24 Sep 2024 20:08:19 +0800 Subject: [PATCH 21/46] update ci --- .../rust/nativeexample/examples/connect.rs | 2 +- .../examples/rust/restexample/examples/tmq.rs | 1 - tests/docs-examples-test/rust.sh | 87 + tests/parallel_test/cases.task | 1550 +---------------- 4 files changed, 89 insertions(+), 1551 deletions(-) create mode 100644 tests/docs-examples-test/rust.sh diff --git a/docs/examples/rust/nativeexample/examples/connect.rs b/docs/examples/rust/nativeexample/examples/connect.rs index ad2533d4c3..f316a70631 100644 --- a/docs/examples/rust/nativeexample/examples/connect.rs +++ b/docs/examples/rust/nativeexample/examples/connect.rs @@ -2,7 +2,7 @@ use taos::*; #[tokio::main] async fn main() -> anyhow::Result<()> { - let dsn = "taos://localhost:6030".to_string(); + let dsn = "taos://localhost:6031".to_string(); match TaosBuilder::from_dsn(&dsn)?.build().await { Ok(_taos) => { diff --git a/docs/examples/rust/restexample/examples/tmq.rs b/docs/examples/rust/restexample/examples/tmq.rs index 61416133e3..8586bbc5c7 100644 --- a/docs/examples/rust/restexample/examples/tmq.rs +++ b/docs/examples/rust/restexample/examples/tmq.rs @@ -83,7 +83,6 @@ async fn main() -> anyhow::Result<()> { eprintln!("Failed to execute insert: {:?}", e); } tokio::time::sleep(Duration::from_millis(10)).await; - println!("Succed to execute insert 1 row"); } }); }); diff --git a/tests/docs-examples-test/rust.sh b/tests/docs-examples-test/rust.sh new file mode 100644 index 0000000000..91489d8bcd --- /dev/null +++ b/tests/docs-examples-test/rust.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +set -e + + +check_transactions() { + for i in {1..30} + do + output=$(taos -s "show transactions;") + if [[ $output == *"Query OK, 0 row(s)"* ]]; then + echo "Success: No transactions are in progress." + return 0 + fi + sleep 1 + done + + echo "Error: Transactions are still in progress after 30 attempts." + return 1 +} + +reset_cache() { + response=$(curl --location -uroot:taosdata 'http://127.0.0.1:6041/rest/sql' --data 'reset query cache') + + if [[ $response == \{\"code\":0* ]]; then + echo "Success: Query cache reset successfully." + else + echo "Error: Failed to reset query cache. Response: $response" + return 1 + fi +} + +taosd >>/dev/null 2>&1 & +taosadapter >>/dev/null 2>&1 & + +sleep 5 + +cd ../../docs/examples/rust/nativeexample + +cargo run --example connect + +cargo run --example createdb + +cargo run --example insert + +cargo run --example query + +taos -s "drop database if exists power" +check_transactions || exit 1 +reset_cache || exit 1 + +cargo run --example schemaless + +taos -s "drop database if exists power" +check_transactions || exit 1 +reset_cache || exit 1 + + +cargo run --example stmt + +cargo run --example tmq + + + +cd ../restexample + +cargo run --example connect + +cargo run --example createdb + +cargo run --example insert + +cargo run --example query + +taos -s "drop database if exists power" +check_transactions || exit 1 +reset_cache || exit 1 +taos -s "create database if not exists power" +cargo run --example schemaless + +taos -s "drop database if exists power" +check_transactions || exit 1 +reset_cache || exit 1 + + +cargo run --example stmt + +cargo run --example tmq diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 1a00787a6b..30c79fea02 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -2,1559 +2,11 @@ #caseID,rerunTimes,Run with Sanitizer,casePath,caseCommand #NA,NA,y or n,script,./test.sh -f tsim/user/basic.sim -#unit-test - -,,n,unit-test,bash test.sh - - -# -# army-test -# -,,y,army,./pytest.sh python3 ./test.py -f multi-level/mlevel_basic.py -N 3 -L 3 -D 2 -,,y,army,./pytest.sh python3 ./test.py -f db-encrypt/basic.py -,,n,army,python3 ./test.py -f storage/s3/s3Basic.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f cluster/snapshot.py -N 3 -L 3 -D 2 -,,y,army,./pytest.sh python3 ./test.py -f query/function/test_func_elapsed.py -,,y,army,./pytest.sh python3 ./test.py -f query/function/test_function.py -,,y,army,./pytest.sh python3 ./test.py -f query/function/concat.py -,,y,army,./pytest.sh python3 ./test.py -f query/function/cast.py -,,y,army,./pytest.sh python3 ./test.py -f query/test_join.py -,,y,army,./pytest.sh python3 ./test.py -f query/test_compare.py -,,y,army,./pytest.sh python3 ./test.py -f insert/test_column_tag_boundary.py -,,y,army,./pytest.sh python3 ./test.py -f query/fill/fill_desc.py -N 3 -L 3 -D 2 -,,y,army,./pytest.sh python3 ./test.py -f query/fill/fill_null.py -,,y,army,./pytest.sh python3 ./test.py -f cluster/incSnapshot.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f cluster/clusterBasic.py -N 5 -,,y,army,./pytest.sh python3 ./test.py -f query/query_basic.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f query/accuracy/test_query_accuracy.py -,,y,army,./pytest.sh python3 ./test.py -f query/accuracy/test_ts5400.py -,,y,army,./pytest.sh python3 ./test.py -f query/accuracy/test_having.py -,,y,army,./pytest.sh python3 ./test.py -f insert/insert_basic.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f cluster/splitVgroupByLearner.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f authorith/authBasic.py -N 3 -,,n,army,python3 ./test.py -f cmdline/fullopt.py -,,y,army,./pytest.sh python3 ./test.py -f query/show.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f alter/alterConfig.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f query/subquery/subqueryBugs.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f storage/oneStageComp.py -N 3 -L 3 -D 1 -,,y,army,./pytest.sh python3 ./test.py -f storage/compressBasic.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f grant/grantBugs.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f query/queryBugs.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f tmq/tmqBugs.py -N 3 -,,y,army,./pytest.sh python3 ./test.py -f query/fill/fill_compare_asc_desc.py -,,y,army,./pytest.sh python3 ./test.py -f query/last/test_last.py -,,y,army,./pytest.sh python3 ./test.py -f query/window/base.py -,,y,army,./pytest.sh python3 ./test.py -f query/sys/tb_perf_queries_exist_test.py -N 3 - -# -# system test -# -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/stream_multi_agg.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/stream_basic.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/scalar_function.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/at_once_interval.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/at_once_session.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/at_once_state_window.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/window_close_interval.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/window_close_session.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/window_close_state_window.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/max_delay_interval.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/max_delay_session.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/at_once_interval_ext.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/max_delay_interval_ext.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/window_close_session_ext.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/partition_interval.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/pause_resume_test.py -,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/state_window_case.py -#,,n,system-test,python3 ./test.py -f 8-stream/vnode_restart.py -N 4 -#,,n,system-test,python3 ./test.py -f 8-stream/snode_restart.py -N 4 -,,n,system-test,python3 ./test.py -f 8-stream/snode_restart_with_checkpoint.py -N 4 - -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_error.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_func.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_varchar.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_func_group.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_expr.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/project_group.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname_vgroup.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_interval.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/compact-col.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tms_memleak.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hint.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hint.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hint.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hint.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/para_tms.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/para_tms2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_str.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_math.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_time.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_26.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_str.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_math.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_time.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_26.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/columnLenUpdated.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/columnLenUpdated.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/columnLenUpdated.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/columnLenUpdated.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_str.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_math.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_time.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_26.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_limit_opt.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_unit.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_unit.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_unit.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_unit.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col_agg.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col_agg.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col_agg.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col_agg.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_limit_opt_2.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_limit_opt_2.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_limit_opt_2.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_limit_opt_2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/func_to_char_timestamp.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/func_to_char_timestamp.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/func_to_char_timestamp.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/func_to_char_timestamp.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_cache_scan.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_cache_scan.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_cache_scan.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_cache_scan.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma2.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma2.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma2.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma2.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqShow.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropStb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb0.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb3.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb0.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/ins_topics_test.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqMaxTopic.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqParamsTest.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqParamsTest.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqClientConsLog.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqMaxGroupIds.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsumeDiscontinuousData.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqOffset.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_primary_key.py -,,n,system-test,python3 ./test.py -f 7-tmq/tmqDropConsumer.py - - -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/insert_stb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_stable.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/stt_blocks_check.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/out_of_order.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/out_of_order.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_null.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/database_pre_suf.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/out_of_order.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/out_of_order.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_str.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_math.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_time.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_26.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/select_null.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/select_null.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/select_null.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/select_null.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/select_null.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4233.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4233.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4233.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4233.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/like.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/like.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/like.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/like.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/match.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/match.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/match.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/match.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/td-28068.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/td-28068.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/td-28068.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/td-28068.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_AlwaysReturnValue.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_AlwaysReturnValue.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_AlwaysReturnValue.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_AlwaysReturnValue.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_NotReturnValue.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_NotReturnValue.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_NotReturnValue.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_NotReturnValue.py -Q 4 - -,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreDnode.py -N 5 -M 3 -i False -,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreVnode.py -N 5 -M 3 -i False -,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreMnode.py -N 5 -M 3 -i False -,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreQnode.py -N 5 -M 3 -i False - -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/create_wrong_topic.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dropDbR3ConflictTransaction.py -N 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/basic5.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/ts-4674.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb3.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb4.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb4.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/db.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqError.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/schema.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/stbFilterWhere.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/stbFilter.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqCheckData.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqCheckData1.py -#,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsumerGroup.py -,,n,system-test,python3 ./test.py -f 7-tmq/tmqConsumerGroup.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqAlterSchema.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb-mutilVg.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb-1ctb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-1ctb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb-funcNFilter.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqAutoCreateTbl.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDnodeRestart.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDnodeRestart1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdate-1ctb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdateWithConsume.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot0.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDelete-1ctb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDelete-multiCtb.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropStbCtb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropNtb-snapshot0.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropNtb-snapshot1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUdf.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUdf-multCtb-snapshot0.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUdf-multCtb-snapshot1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/stbTagFilter-1ctb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dataFromTsdbNWal.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dataFromTsdbNWal-multiCtb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_taosx.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_ts4563.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_replay.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqSeekAndCommit.py -,,n,system-test,python3 ./test.py -f 7-tmq/tmq_offset.py -,,n,system-test,python3 ./test.py -f 7-tmq/tmqDataPrecisionUnit.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/raw_block_interface_test.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/stbTagFilter-multiCtb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqSubscribeStb-r3.py -N 5 -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq3mnodeSwitch.py -N 6 -M 3 -i True -,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq3mnodeSwitch.py -N 6 -M 3 -n 3 -i True -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-db-removewal.py -N 2 -n 1 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-stb-removewal.py -N 6 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-stb.py -N 2 -n 1 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-stb.py -N 6 -n 3 -#,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-db.py -N 6 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-select.py -N 2 -n 1 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-select-duplicatedata.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-select-duplicatedata-false.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-select.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-select-false.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-false.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-column.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-column-false.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-db.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-db-false.py -N 3 -n 3 - -,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeReplicate.py -M 3 -N 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-19201.py -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-21561.py -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TS-3404.py -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TS-3581.py -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TS-3311.py -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TS-3821.py -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TS-5130.py - -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/balance_vgroups_r1.py -N 6 -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShell.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShellError.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShellNetChk.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/telemetry.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/backquote_check.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosdMonitor.py -,,n,system-test,python3 ./test.py -f 0-others/taosdShell.py -N 5 -M 3 -Q 3 -,,n,system-test,python3 ./test.py -f 0-others/udfTest.py -,,n,system-test,python3 ./test.py -f 0-others/udf_create.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/udf_restart_taosd.py -,,n,system-test,python3 ./test.py -f 0-others/udf_cfg1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/udf_cfg2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/cachemodel.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/sysinfo.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_control.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_manage.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege_show.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege_all.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/fsync.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/multilevel.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/ttl.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/ttlChangeOnWrite.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/compress_tsz1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/compress_tsz2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/view/non_marterial_view/test_view.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/test_show_table_distributed.py -,,n,system-test,python3 ./test.py -f 0-others/compatibility.py -,,n,system-test,python3 ./test.py -f 0-others/tag_index_basic.py -,,n,system-test,python3 ./test.py -f 0-others/udfpy_main.py -,,n,system-test,python3 ./test.py -N 3 -f 0-others/walRetention.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/splitVGroup.py -N 3 -n 1 -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/splitVGroupWal.py -N 3 -n 1 -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/splitVGroup.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/splitVGroupWal.py -N 3 -n 3 -,,n,system-test,python3 ./test.py -f 0-others/timeRangeWise.py -N 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/delete_check.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/test_hot_refresh_configurations.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/subscribe_stream_privilege.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/empty_identifier.py - -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/composite_primary_key_create.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/composite_primary_key_insert.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/composite_primary_key_delete.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/insert_double.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_database.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_replica.py -N 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/influxdb_line_taosc_insert.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/opentsdb_telnet_line_taosc_insert.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/opentsdb_json_taosc_insert.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_stmt_muti_insert_query.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_stmt_set_tbname_tag.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_stable.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_table.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/boundary.py -,,n,system-test,python3 ./test.py -f 1-insert/insertWithMoreVgroup.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/table_comment.py -#,,n,system-test,python3 ./test.py -f 1-insert/time_range_wise.py -#,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/block_wise.py -#,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/create_retentions.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/mutil_stage.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/table_param_ttl.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/table_param_ttl.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/update_data_muti_rows.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/db_tb_name_check.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/InsertFuturets.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/insert_wide_column.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/insert_column_value.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_benchmark.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_1.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_1.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_1.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_1.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_2.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_2.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_2.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_2.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_3.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_3.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_3.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_3.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_3.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_4.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_4.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_4.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_4.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_4.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/precisionUS.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/precisionNS.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_ts4219.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/ts-4272.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_ts4295.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_td27388.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_ts4479.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_td29793.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/insert_timestamp.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_td29157.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/show.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/show_tag_index.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/information_schema.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/abs.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/abs.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/and_or_for_byte.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/and_or_for_byte.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/apercentile.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/apercentile.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arccos.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arccos.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arcsin.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arcsin.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arctan.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arctan.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/between.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/between.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cast.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cast.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ceil.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ceil.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/char_length.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/char_length.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/check_tsdb.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/check_tsdb.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws2.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cos.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cos.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/group_partition.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/group_partition.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/group_partition.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/group_partition.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/group_partition.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_partition.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_partition.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/db.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/db.py -N 3 -n 3 -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_apercentile.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_apercentile.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_avg.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_avg.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_count.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_count.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_max.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_max.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_min.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_min.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_spread.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_spread.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_stddev.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_stddev.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_sum.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_sum.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/explain.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/explain.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/first.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/first.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/floor.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/floor.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_null.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_null.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_stateduration.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_stateduration.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/histogram.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/histogram.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hyperloglog.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hyperloglog.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interp.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interp.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/fill.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/irate.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/irate.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_and_last_row.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_and_last_row.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_and_last_row.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_and_last_row.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_and_last_row.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last+last_row.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last+last_row.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last+last_row.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last+last_row.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_1.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_1.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_1.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_1.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_2.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_2.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_2.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_2.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_3.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_3.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_3.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_3.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_3.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_4.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_4.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_4.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_4.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_4.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_5.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_5.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_5.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_5.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_5.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/leastsquares.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/leastsquares.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/length.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/length.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/limit.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/log.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/log.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/logical_operators.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/logical_operators.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/lower.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/lower.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ltrim.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ltrim.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mavg.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mavg.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_partition.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_partition.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_limit_interval.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_limit_interval.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_min_last_interval.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row_interval.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/min.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/min.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/normal.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/normal.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mode.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mode.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Now.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Now.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/orderBy.py -N 5 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pow.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pow.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/query_cols_tags_and_or.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/query_cols_tags_and_or.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/round.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/round.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/rtrim.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/rtrim.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/smaBasic.py -N 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/smaTest.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/smaTest.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/sma_index.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml_TS-3724.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml-TD19291.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varbinary.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sqrt.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sqrt.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/statecount.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/statecount.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stateduration.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stateduration.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/substr.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/substr.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sum.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sum.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tail.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tail.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tan.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tan.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timezone.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timezone.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_iso8601.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_iso8601.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_unixtimestamp.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_unixtimestamp.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Today.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Today.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsbsQuery.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsbsQuery.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ttl_comment.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ttl_comment.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/twa.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/twa.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/unique.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/unique.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/upper.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/upper.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varchar.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varchar.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/case_when.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/case_when.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/blockSMA.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/blockSMA.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/update_data.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/tb_100w_data_order.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_childtable.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_normaltable.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_systable.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/keep_expired.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/stmt_error.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py -,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py -N 3 -M 3 -i False -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat2.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQueryInterval.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/systable_func.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/test_ts4382.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/test_ts4403.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/test_td28163.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity_1.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_diff.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tagFilter.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts_3405_3398_3423.py -N 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4348-td-27939.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/backslash_g.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/test_ts4467.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/geometry.py - -,,n,system-test,python3 ./test.py -f 2-query/queryQnode.py -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode1mnode.py -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode2mnode.py -N 5 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStop.py -N 5 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStop.py -N 5 -M 3 -i False -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStop2Follower.py -N 5 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStop2Follower.py -N 5 -M 3 -i False -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStopLoop.py -N 5 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py -N 6 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py -N 6 -M 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py -N 6 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py -N 6 -M 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 6 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 6 -M 3 -n 3 - -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeModifyMeta.py -N 6 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeModifyMeta.py -N 6 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py -N 6 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py -N 6 -M 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py -N 6 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py -N 6 -M 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py -N 6 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py -N 6 -M 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertData.py -N 6 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertData.py -N 6 -M 3 -n 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py -N 6 -M 3 -#,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py -N 6 -M 3 -n 3 -,,n,system-test,python3 ./test.py -f 6-cluster/manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py -N 6 -M 3 -#,,n,system-test,python3 ./test.py -f 6-cluster/5dnode3mnodeRoll.py -N 3 -C 1 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeAdd1Ddnoe.py -N 7 -M 3 -C 6 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeAdd1Ddnoe.py -N 7 -M 3 -C 6 -n 3 -#,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeDrop.py -N 5 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRecreateMnode.py -N 6 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStopFollowerLeader.py -N 5 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStop2Follower.py -N 5 -M 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py -N 4 -M 1 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py -N 4 -M 1 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py -N 4 -M 1 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py -N 4 -M 1 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py -N 4 -M 1 -,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py -N 4 -M 1 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/between.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varchar.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ltrim.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/rtrim.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/length.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/char_length.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/upper.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/lower.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cast.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/substr.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union1.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat2.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws2.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/check_tsdb.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hyperloglog.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/explain.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/leastsquares.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timezone.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Now.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Today.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/min.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/normal.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mode.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/first.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_iso8601.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_unixtimestamp.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/apercentile.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/abs.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ceil.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/floor.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/round.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/log.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pow.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sqrt.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cos.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tan.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arcsin.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arccos.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arctan.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/query_cols_tags_and_or.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interp.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/fill.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQueryInterval.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity_1.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mavg.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_diff.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/unique.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stateduration.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_stateduration.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/statecount.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tail.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ttl_comment.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_count.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_max.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_min.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_sum.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_spread.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_apercentile.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_avg.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_stddev.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/twa.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/irate.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_null.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_partition.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_partition.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_limit_interval.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_min_last_interval.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row_interval.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsbsQuery.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/case_when.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/blockSMA.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-21561.py -Q 2 - -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/between.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varchar.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ltrim.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/rtrim.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/length.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/char_length.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/upper.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/lower.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cast.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/substr.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union1.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat2.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws2.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/check_tsdb.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hyperloglog.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/explain.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/leastsquares.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timezone.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Now.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Today.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/min.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/normal.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mode.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/first.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_iso8601.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_unixtimestamp.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/apercentile.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/abs.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ceil.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/floor.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/round.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/log.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pow.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sqrt.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cos.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tan.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arcsin.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arccos.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arctan.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/query_cols_tags_and_or.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQueryInterval.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity_1.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mavg.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_diff.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/unique.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stateduration.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_stateduration.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/statecount.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tail.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ttl_comment.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_count.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_max.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_min.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_sum.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_spread.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_apercentile.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_avg.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_stddev.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/twa.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/irate.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_null.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_partition.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_partition.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_limit_interval.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_min_last_interval.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row_interval.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsbsQuery.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interp.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/fill.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/case_when.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/blockSMA.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-21561.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/between.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varchar.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ltrim.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/rtrim.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/length.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/char_length.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/upper.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/lower.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/substr.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union1.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat2.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws2.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/check_tsdb.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hyperloglog.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/explain.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/leastsquares.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timezone.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Now.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Today.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/min.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/normal.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mode.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/first.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_iso8601.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_unixtimestamp.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/apercentile.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/abs.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ceil.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/floor.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/round.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/log.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pow.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sqrt.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cos.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tan.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arcsin.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arccos.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arctan.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/query_cols_tags_and_or.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQueryInterval.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity_1.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mavg.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cast.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_diff.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/unique.py -Q 4 -#,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stateduration.py -Q 4 -#,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_stateduration.py -Q 4 -#,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/statecount.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tail.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ttl_comment.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_count.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_max.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_min.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_sum.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_spread.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_apercentile.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_avg.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_stddev.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/twa.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/irate.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_null.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_partition.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_partition.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_limit_interval.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_min_last_interval.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row_interval.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsbsQuery.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interp.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/fill.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/case_when.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -Q 2 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/out_of_order.py -R -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/blockSMA.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/odbc.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/fill_with_group.py -,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/state_window.py -Q 3 -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-21561.py -Q 4 -,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-20582.py -,,n,system-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/insertMix.py -N 3 -,,n,system-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/stt.py -N 3 -,,n,system-test,python3 ./test.py -f eco-system/meta/database/keep_time_offset.py - -#tsim test -,,y,script,./test.sh -f tsim/query/timeline.sim -,,y,script,./test.sh -f tsim/join/join.sim -,,y,script,./test.sh -f tsim/tmq/basic2Of2ConsOverlap.sim -,,y,script,./test.sh -f tsim/parser/where.sim -,,y,script,./test.sh -f tsim/parser/join_manyblocks.sim -,,y,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v1_leader.sim -,,y,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v1_follower.sim -,,y,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v2.sim -,,y,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v3.sim -,,y,script,./test.sh -f tsim/parser/limit1.sim -,,y,script,./test.sh -f tsim/parser/union.sim -,,y,script,./test.sh -f tsim/parser/commit.sim -,,y,script,./test.sh -f tsim/parser/nestquery.sim -,,n,script,./test.sh -f tsim/valgrind/checkError7.sim -,,y,script,./test.sh -f tsim/parser/groupby.sim -,,y,script,./test.sh -f tsim/parser/sliding.sim -,,y,script,./test.sh -f tsim/dnode/balance2.sim -,,y,script,./test.sh -f tsim/vnode/replica3_repeat.sim -,,y,script,./test.sh -f tsim/parser/col_arithmetic_operation.sim -#,,y,script,./test.sh -f tsim/trans/create_db.sim -,,y,script,./test.sh -f tsim/dnode/balance3.sim -,,y,script,./test.sh -f tsim/vnode/replica3_many.sim -,,y,script,./test.sh -f tsim/stable/metrics_idx.sim -# ,,y,script,./test.sh -f tsim/db/alter_replica_13.sim -,,y,script,./test.sh -f tsim/sync/3Replica1VgElect.sim -,,y,script,./test.sh -f tsim/sync/3Replica5VgElect.sim -,,n,script,./test.sh -f tsim/valgrind/checkError6.sim - -,,y,script,./test.sh -f tsim/user/basic.sim -,,y,script,./test.sh -f tsim/user/password.sim -,,y,script,./test.sh -f tsim/user/whitelist.sim -,,y,script,./test.sh -f tsim/user/privilege_db.sim -,,y,script,./test.sh -f tsim/user/privilege_sysinfo.sim -,,y,script,./test.sh -f tsim/user/privilege_topic.sim -,,y,script,./test.sh -f tsim/user/privilege_table.sim -,,y,script,./test.sh -f tsim/user/privilege_create_db.sim -,,y,script,./test.sh -f tsim/db/alter_option.sim -# ,,y,script,./test.sh -f tsim/db/alter_replica_31.sim -,,y,script,./test.sh -f tsim/db/basic1.sim -,,y,script,./test.sh -f tsim/db/basic2.sim -,,y,script,./test.sh -f tsim/db/basic3.sim -,,y,script,./test.sh -f tsim/db/basic4.sim -,,y,script,./test.sh -f tsim/db/basic5.sim -,,y,script,./test.sh -f tsim/db/basic6.sim -,,y,script,./test.sh -f tsim/db/commit.sim -,,y,script,./test.sh -f tsim/db/create_all_options.sim -,,y,script,./test.sh -f tsim/db/delete_reuse1.sim -,,y,script,./test.sh -f tsim/db/delete_reuse2.sim -,,y,script,./test.sh -f tsim/db/delete_reusevnode.sim -,,y,script,./test.sh -f tsim/db/delete_reusevnode2.sim -,,y,script,./test.sh -f tsim/db/delete_writing1.sim -,,y,script,./test.sh -f tsim/db/delete_writing2.sim -,,y,script,./test.sh -f tsim/db/error1.sim -,,y,script,./test.sh -f tsim/db/keep.sim -,,y,script,./test.sh -f tsim/db/len.sim -,,y,script,./test.sh -f tsim/db/repeat.sim -,,y,script,./test.sh -f tsim/db/show_create_db.sim -,,y,script,./test.sh -f tsim/db/show_create_table.sim -,,y,script,./test.sh -f tsim/db/tables.sim -,,y,script,./test.sh -f tsim/db/taosdlog.sim -,,y,script,./test.sh -f tsim/db/table_prefix_suffix.sim -,,y,script,./test.sh -f tsim/dnode/balance_replica1.sim -,,y,script,./test.sh -f tsim/dnode/balance_replica3.sim -,,y,script,./test.sh -f tsim/dnode/balance1.sim -,,y,script,./test.sh -f tsim/dnode/balancex.sim -,,y,script,./test.sh -f tsim/dnode/create_dnode.sim -,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_mnode.sim -,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_qnode_snode.sim -,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_vnode_replica1.sim -,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_vnode_replica3.sim -,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_multi_vnode_replica1.sim -,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_multi_vnode_replica3.sim -,,y,script,./test.sh -f tsim/dnode/drop_dnode_force.sim -,,y,script,./test.sh -f tsim/dnode/offline_reason.sim -,,y,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica1.sim -,,y,script,./test.sh -f tsim/dnode/vnode_clean.sim -,,y,script,./test.sh -f tsim/dnode/use_dropped_dnode.sim -,,y,script,./test.sh -f tsim/dnode/split_vgroup_replica1.sim -,,y,script,./test.sh -f tsim/dnode/split_vgroup_replica3.sim -,,y,script,./test.sh -f tsim/import/basic.sim -,,y,script,./test.sh -f tsim/import/commit.sim -,,y,script,./test.sh -f tsim/import/large.sim -,,y,script,./test.sh -f tsim/import/replica1.sim -,,y,script,./test.sh -f tsim/insert/backquote.sim -,,y,script,./test.sh -f tsim/insert/basic.sim -,,y,script,./test.sh -f tsim/insert/basic0.sim -,,y,script,./test.sh -f tsim/insert/basic1.sim -,,y,script,./test.sh -f tsim/insert/basic2.sim -,,y,script,./test.sh -f tsim/insert/commit-merge0.sim -,,y,script,./test.sh -f tsim/insert/insert_drop.sim -,,y,script,./test.sh -f tsim/insert/insert_select.sim -,,y,script,./test.sh -f tsim/insert/null.sim -,,y,script,./test.sh -f tsim/insert/query_block1_file.sim -,,y,script,./test.sh -f tsim/insert/query_block1_memory.sim -,,y,script,./test.sh -f tsim/insert/query_block2_file.sim -,,y,script,./test.sh -f tsim/insert/query_block2_memory.sim -,,y,script,./test.sh -f tsim/insert/query_file_memory.sim -,,y,script,./test.sh -f tsim/insert/query_multi_file.sim -,,y,script,./test.sh -f tsim/insert/tcp.sim -,,y,script,./test.sh -f tsim/insert/update0.sim -,,y,script,./test.sh -f tsim/insert/delete0.sim -,,y,script,./test.sh -f tsim/insert/update1_sort_merge.sim -,,y,script,./test.sh -f tsim/insert/update2.sim -,,y,script,./test.sh -f tsim/insert/insert_stb.sim -,,y,script,./test.sh -f tsim/parser/alter__for_community_version.sim -,,y,script,./test.sh -f tsim/parser/alter_column.sim -,,y,script,./test.sh -f tsim/parser/alter_stable.sim -,,y,script,./test.sh -f tsim/parser/alter.sim -,,y,script,./test.sh -f tsim/parser/alter1.sim -,,y,script,./test.sh -f tsim/parser/auto_create_tb_drop_tb.sim -,,y,script,./test.sh -f tsim/parser/auto_create_tb.sim -,,y,script,./test.sh -f tsim/parser/between_and.sim -,,y,script,./test.sh -f tsim/parser/binary_escapeCharacter.sim -,,y,script,./test.sh -f tsim/parser/columnValue_bigint.sim -,,y,script,./test.sh -f tsim/parser/columnValue_bool.sim -,,y,script,./test.sh -f tsim/parser/columnValue_double.sim -,,y,script,./test.sh -f tsim/parser/columnValue_float.sim -,,y,script,./test.sh -f tsim/parser/columnValue_int.sim -,,y,script,./test.sh -f tsim/parser/columnValue_smallint.sim -,,y,script,./test.sh -f tsim/parser/columnValue_tinyint.sim -,,y,script,./test.sh -f tsim/parser/columnValue_unsign.sim -,,y,script,./test.sh -f tsim/parser/columnValue_uint.sim -,,y,script,./test.sh -f tsim/parser/columnValue_timestamp.sim -,,y,script,./test.sh -f tsim/parser/columnValue_varchar.sim -,,y,script,./test.sh -f tsim/parser/columnValue_nchar.sim -,,y,script,./test.sh -f tsim/parser/columnValue_varbinary.sim -,,y,script,./test.sh -f tsim/parser/columnValue_json.sim -,,y,script,./test.sh -f tsim/parser/columnValue_geometry.sim -,,y,script,./test.sh -f tsim/parser/condition.sim -,,y,script,./test.sh -f tsim/parser/condition_scl.sim -,,y,script,./test.sh -f tsim/parser/constCol.sim -,,y,script,./test.sh -f tsim/parser/create_db.sim -,,y,script,./test.sh -f tsim/parser/create_mt.sim -,,y,script,./test.sh -f tsim/parser/create_tb_with_tag_name.sim -,,y,script,./test.sh -f tsim/parser/create_tb.sim -,,y,script,./test.sh -f tsim/parser/dbtbnameValidate.sim -,,y,script,./test.sh -f tsim/parser/distinct.sim -,,y,script,./test.sh -f tsim/parser/fill_us.sim -,,y,script,./test.sh -f tsim/parser/fill.sim -,,y,script,./test.sh -f tsim/parser/first_last.sim -,,y,script,./test.sh -f tsim/parser/fill_stb.sim -,,y,script,./test.sh -f tsim/parser/interp.sim -,,y,script,./test.sh -f tsim/parser/fourArithmetic-basic.sim -,,y,script,./test.sh -f tsim/parser/function.sim -,,y,script,./test.sh -f tsim/parser/groupby-basic.sim -,,y,script,./test.sh -f tsim/parser/having_child.sim -,,y,script,./test.sh -f tsim/parser/having.sim -,,y,script,./test.sh -f tsim/parser/import_commit1.sim -,,y,script,./test.sh -f tsim/parser/import_commit2.sim -,,y,script,./test.sh -f tsim/parser/import_commit3.sim -,,y,script,./test.sh -f tsim/parser/import_file.sim -,,y,script,./test.sh -f tsim/parser/import.sim -,,y,script,./test.sh -f tsim/parser/insert_multiTbl.sim -,,y,script,./test.sh -f tsim/parser/insert_tb.sim -,,y,script,./test.sh -f tsim/parser/join_multitables.sim -,,y,script,./test.sh -f tsim/parser/join_multivnode.sim -,,y,script,./test.sh -f tsim/parser/join.sim -,,y,script,./test.sh -f tsim/parser/last_cache.sim -,,y,script,./test.sh -f tsim/parser/last_both.sim -,,y,script,./test.sh -f tsim/parser/last_groupby.sim -,,y,script,./test.sh -f tsim/parser/lastrow.sim -,,y,script,./test.sh -f tsim/parser/lastrow2.sim -,,y,script,./test.sh -f tsim/parser/like.sim -,,y,script,./test.sh -f tsim/parser/limit.sim -,,y,script,./test.sh -f tsim/parser/mixed_blocks.sim -,,y,script,./test.sh -f tsim/parser/nchar.sim -,,y,script,./test.sh -f tsim/parser/null_char.sim -,,y,script,./test.sh -f tsim/parser/precision_ns.sim -,,y,script,./test.sh -f tsim/parser/projection_limit_offset.sim -,,y,script,./test.sh -f tsim/parser/regex.sim -,,y,script,./test.sh -f tsim/parser/regressiontest.sim -,,y,script,./test.sh -f tsim/parser/select_across_vnodes.sim -,,y,script,./test.sh -f tsim/parser/select_distinct_tag.sim -,,y,script,./test.sh -f tsim/parser/select_from_cache_disk.sim -,,y,script,./test.sh -f tsim/parser/select_with_tags.sim -,,y,script,./test.sh -f tsim/parser/selectResNum.sim -,,y,script,./test.sh -f tsim/parser/set_tag_vals.sim -,,y,script,./test.sh -f tsim/parser/single_row_in_tb.sim -,,y,script,./test.sh -f tsim/parser/slimit_alter_tags.sim -,,y,script,./test.sh -f tsim/parser/slimit.sim -,,y,script,./test.sh -f tsim/parser/slimit1.sim -,,y,script,./test.sh -f tsim/parser/stableOp.sim -,,y,script,./test.sh -f tsim/parser/tags_dynamically_specifiy.sim -,,y,script,./test.sh -f tsim/parser/tags_filter.sim -,,y,script,./test.sh -f tsim/parser/tbnameIn.sim -,,y,script,./test.sh -f tsim/parser/timestamp.sim -,,y,script,./test.sh -f tsim/parser/top_groupby.sim -,,y,script,./test.sh -f tsim/parser/topbot.sim -,,y,script,./test.sh -f tsim/parser/union_sysinfo.sim -,,y,script,./test.sh -f tsim/parser/slimit_limit.sim -,,y,script,./test.sh -f tsim/parser/table_merge_limit.sim -,,y,script,./test.sh -f tsim/query/tagLikeFilter.sim -,,y,script,./test.sh -f tsim/query/charScalarFunction.sim -,,y,script,./test.sh -f tsim/query/explain.sim -,,y,script,./test.sh -f tsim/query/interval-offset.sim -,,y,script,./test.sh -f tsim/query/interval.sim -,,y,script,./test.sh -f tsim/query/scalarFunction.sim -,,y,script,./test.sh -f tsim/query/scalarNull.sim -,,y,script,./test.sh -f tsim/query/session.sim -,,y,script,./test.sh -f tsim/query/udf.sim -,,n,script,./test.sh -f tsim/query/udfpy.sim -,,y,script,./test.sh -f tsim/query/udf_with_const.sim -,,y,script,./test.sh -f tsim/query/join_interval.sim -,,y,script,./test.sh -f tsim/query/join_pk.sim -,,y,script,./test.sh -f tsim/query/join_order.sim -,,y,script,./test.sh -f tsim/query/count_spread.sim -,,y,script,./test.sh -f tsim/query/unionall_as_table.sim -,,y,script,./test.sh -f tsim/query/multi_order_by.sim -,,y,script,./test.sh -f tsim/query/sys_tbname.sim -,,y,script,./test.sh -f tsim/query/sort-pre-cols.sim -,,y,script,./test.sh -f tsim/query/groupby.sim -,,y,script,./test.sh -f tsim/query/groupby_distinct.sim -,,y,script,./test.sh -f tsim/query/event.sim -,,y,script,./test.sh -f tsim/query/forceFill.sim -,,y,script,./test.sh -f tsim/query/emptyTsRange.sim -,,y,script,./test.sh -f tsim/query/emptyTsRange_scl.sim -,,y,script,./test.sh -f tsim/query/partitionby.sim -,,y,script,./test.sh -f tsim/query/tableCount.sim -,,y,script,./test.sh -f tsim/query/show_db_table_kind.sim -,,y,script,./test.sh -f tsim/query/bi_star_table.sim -,,y,script,./test.sh -f tsim/query/bi_tag_scan.sim -,,y,script,./test.sh -f tsim/query/bi_tbname_col.sim -,,y,script,./test.sh -f tsim/query/tag_scan.sim -,,y,script,./test.sh -f tsim/query/nullColSma.sim -,,y,script,./test.sh -f tsim/query/bug3398.sim -,,y,script,./test.sh -f tsim/query/explain_tsorder.sim -,,y,script,./test.sh -f tsim/query/apercentile.sim -,,y,script,./test.sh -f tsim/query/query_count0.sim -,,y,script,./test.sh -f tsim/query/query_count_sliding0.sim -,,y,script,./test.sh -f tsim/query/union_precision.sim -,,y,script,./test.sh -f tsim/qnode/basic1.sim -,,y,script,./test.sh -f tsim/snode/basic1.sim -,,y,script,./test.sh -f tsim/mnode/basic1.sim -,,y,script,./test.sh -f tsim/mnode/basic2.sim -#,,y,script,./test.sh -f tsim/mnode/basic3.sim -,,y,script,./test.sh -f tsim/mnode/basic4.sim -,,y,script,./test.sh -f tsim/mnode/basic5.sim -,,y,script,./test.sh -f tsim/show/basic.sim -,,y,script,./test.sh -f tsim/table/autocreate.sim -,,y,script,./test.sh -f tsim/table/basic1.sim -,,y,script,./test.sh -f tsim/table/basic2.sim -,,y,script,./test.sh -f tsim/table/basic3.sim -,,y,script,./test.sh -f tsim/table/bigint.sim -,,y,script,./test.sh -f tsim/table/binary.sim -,,y,script,./test.sh -f tsim/table/bool.sim -,,y,script,./test.sh -f tsim/table/column_name.sim -,,y,script,./test.sh -f tsim/table/column_num.sim -,,y,script,./test.sh -f tsim/table/column_value.sim -,,y,script,./test.sh -f tsim/table/column2.sim -,,y,script,./test.sh -f tsim/table/createmulti.sim -,,y,script,./test.sh -f tsim/table/date.sim -,,y,script,./test.sh -f tsim/table/db.table.sim -,,y,script,./test.sh -f tsim/table/delete_reuse1.sim -,,y,script,./test.sh -f tsim/table/delete_reuse2.sim -,,y,script,./test.sh -f tsim/table/delete_writing.sim -,,y,script,./test.sh -f tsim/table/describe.sim -,,y,script,./test.sh -f tsim/table/double.sim -,,y,script,./test.sh -f tsim/table/float.sim -,,y,script,./test.sh -f tsim/table/hash.sim -,,y,script,./test.sh -f tsim/table/int.sim -,,y,script,./test.sh -f tsim/table/limit.sim -,,y,script,./test.sh -f tsim/table/smallint.sim -,,y,script,./test.sh -f tsim/table/table_len.sim -,,y,script,./test.sh -f tsim/table/table.sim -,,y,script,./test.sh -f tsim/table/tinyint.sim -,,y,script,./test.sh -f tsim/table/vgroup.sim -,,n,script,./test.sh -f tsim/stream/basic0.sim -g -,,y,script,./test.sh -f tsim/stream/basic1.sim -,,y,script,./test.sh -f tsim/stream/basic2.sim -,,y,script,./test.sh -f tsim/stream/basic3.sim -,,y,script,./test.sh -f tsim/stream/basic4.sim -,,y,script,./test.sh -f tsim/stream/checkpointInterval0.sim -,,y,script,./test.sh -f tsim/stream/checkStreamSTable1.sim -,,y,script,./test.sh -f tsim/stream/checkStreamSTable.sim -,,y,script,./test.sh -f tsim/stream/count0.sim -,,y,script,./test.sh -f tsim/stream/count1.sim -,,y,script,./test.sh -f tsim/stream/count2.sim -,,y,script,./test.sh -f tsim/stream/count3.sim -,,y,script,./test.sh -f tsim/stream/countSliding0.sim -,,y,script,./test.sh -f tsim/stream/countSliding1.sim -,,y,script,./test.sh -f tsim/stream/countSliding2.sim -,,y,script,./test.sh -f tsim/stream/deleteInterval.sim -,,y,script,./test.sh -f tsim/stream/deleteScalar.sim -,,y,script,./test.sh -f tsim/stream/deleteSession.sim -,,y,script,./test.sh -f tsim/stream/deleteState.sim -,,y,script,./test.sh -f tsim/stream/distributeInterval0.sim -,,y,script,./test.sh -f tsim/stream/distributeIntervalRetrive0.sim -,,y,script,./test.sh -f tsim/stream/distributeMultiLevelInterval0.sim -,,y,script,./test.sh -f tsim/stream/distributeSession0.sim -,,y,script,./test.sh -f tsim/stream/drop_stream.sim -,,y,script,./test.sh -f tsim/stream/event0.sim -,,y,script,./test.sh -f tsim/stream/event1.sim -,,y,script,./test.sh -f tsim/stream/event2.sim -,,y,script,./test.sh -f tsim/stream/fillHistoryBasic1.sim -,,y,script,./test.sh -f tsim/stream/fillHistoryBasic2.sim -,,y,script,./test.sh -f tsim/stream/fillHistoryBasic3.sim -,,y,script,./test.sh -f tsim/stream/fillIntervalDelete0.sim -,,y,script,./test.sh -f tsim/stream/fillIntervalDelete1.sim -,,y,script,./test.sh -f tsim/stream/fillIntervalLinear.sim -,,y,script,./test.sh -f tsim/stream/fillIntervalPartitionBy.sim -,,y,script,./test.sh -f tsim/stream/fillIntervalPrevNext1.sim -,,y,script,./test.sh -f tsim/stream/fillIntervalPrevNext.sim -,,y,script,./test.sh -f tsim/stream/fillIntervalRange.sim -,,y,script,./test.sh -f tsim/stream/fillIntervalValue.sim -,,y,script,./test.sh -f tsim/stream/ignoreCheckUpdate.sim -,,y,script,./test.sh -f tsim/stream/ignoreExpiredData.sim -,,y,script,./test.sh -f tsim/stream/partitionby1.sim -,,y,script,./test.sh -f tsim/stream/partitionbyColumnInterval.sim -,,y,script,./test.sh -f tsim/stream/partitionbyColumnOther.sim -,,y,script,./test.sh -f tsim/stream/partitionbyColumnSession.sim -,,y,script,./test.sh -f tsim/stream/partitionbyColumnState.sim -,,y,script,./test.sh -f tsim/stream/partitionby.sim -,,y,script,./test.sh -f tsim/stream/pauseAndResume.sim -,,y,script,./test.sh -f tsim/stream/schedSnode.sim -,,y,script,./test.sh -f tsim/stream/session0.sim -,,y,script,./test.sh -f tsim/stream/session1.sim -,,y,script,./test.sh -f tsim/stream/sliding.sim -,,y,script,./test.sh -f tsim/stream/state0.sim -,,y,script,./test.sh -f tsim/stream/state1.sim -,,y,script,./test.sh -f tsim/stream/streamPrimaryKey0.sim -,,y,script,./test.sh -f tsim/stream/streamPrimaryKey1.sim -,,y,script,./test.sh -f tsim/stream/streamPrimaryKey2.sim -,,y,script,./test.sh -f tsim/stream/streamPrimaryKey3.sim -,,y,script,./test.sh -f tsim/stream/triggerInterval0.sim -,,y,script,./test.sh -f tsim/stream/triggerSession0.sim -,,y,script,./test.sh -f tsim/stream/udTableAndCol0.sim -,,y,script,./test.sh -f tsim/stream/udTableAndTag0.sim -,,y,script,./test.sh -f tsim/stream/udTableAndTag1.sim -,,y,script,./test.sh -f tsim/stream/udTableAndTag2.sim -,,y,script,./test.sh -f tsim/stream/windowClose.sim -,,y,script,./test.sh -f tsim/trans/lossdata1.sim -,,y,script,./test.sh -f tsim/tmq/basic1.sim -,,y,script,./test.sh -f tsim/tmq/basic2.sim -,,y,script,./test.sh -f tsim/tmq/basic3.sim -,,y,script,./test.sh -f tsim/tmq/basic4.sim -,,y,script,./test.sh -f tsim/tmq/basic1Of2Cons.sim -,,y,script,./test.sh -f tsim/tmq/basic2Of2Cons.sim -,,y,script,./test.sh -f tsim/tmq/basic3Of2Cons.sim -,,y,script,./test.sh -f tsim/tmq/basic4Of2Cons.sim -,,y,script,./test.sh -f tsim/tmq/topic.sim -,,y,script,./test.sh -f tsim/tmq/snapshot.sim -,,y,script,./test.sh -f tsim/tmq/snapshot1.sim -,,y,script,./test.sh -f tsim/stable/alter_comment.sim -,,y,script,./test.sh -f tsim/stable/alter_count.sim -,,y,script,./test.sh -f tsim/stable/alter_import.sim -,,y,script,./test.sh -f tsim/stable/alter_insert1.sim -,,y,script,./test.sh -f tsim/stable/alter_insert2.sim -,,y,script,./test.sh -f tsim/stable/alter_metrics.sim -,,y,script,./test.sh -f tsim/stable/column_add.sim -,,y,script,./test.sh -f tsim/stable/column_drop.sim -,,y,script,./test.sh -f tsim/stable/column_modify.sim -,,y,script,./test.sh -f tsim/stable/disk.sim -,,y,script,./test.sh -f tsim/stable/dnode3.sim -,,y,script,./test.sh -f tsim/stable/metrics.sim -,,y,script,./test.sh -f tsim/stable/refcount.sim -,,y,script,./test.sh -f tsim/stable/tag_add.sim -,,y,script,./test.sh -f tsim/stable/tag_drop.sim -,,y,script,./test.sh -f tsim/stable/tag_filter.sim -,,y,script,./test.sh -f tsim/stable/tag_modify.sim -,,y,script,./test.sh -f tsim/stable/tag_rename.sim -,,y,script,./test.sh -f tsim/stable/values.sim -,,y,script,./test.sh -f tsim/stable/vnode3.sim -,,n,script,./test.sh -f tsim/sma/drop_sma.sim -,,y,script,./test.sh -f tsim/sma/sma_leak.sim -,,y,script,./test.sh -f tsim/sma/tsmaCreateInsertQuery.sim -,,y,script,./test.sh -f tsim/sma/rsmaCreateInsertQuery.sim -,,y,script,./test.sh -f tsim/sma/rsmaCreateInsertQueryDelete.sim - -### refactor stream backend, open case after rsma refactored -#,,y,script,./test.sh -f tsim/sma/rsmaPersistenceRecovery.sim -,,y,script,./test.sh -f tsim/sync/vnodesnapshot-rsma-test.sim -,,n,script,./test.sh -f tsim/valgrind/checkError1.sim -,,n,script,./test.sh -f tsim/valgrind/checkError2.sim -,,n,script,./test.sh -f tsim/valgrind/checkError3.sim -,,n,script,./test.sh -f tsim/valgrind/checkError4.sim -,,n,script,./test.sh -f tsim/valgrind/checkError5.sim -,,n,script,./test.sh -f tsim/valgrind/checkError8.sim -,,n,script,./test.sh -f tsim/valgrind/checkUdf.sim -,,y,script,./test.sh -f tsim/vnode/replica3_basic.sim -,,y,script,./test.sh -f tsim/vnode/replica3_vgroup.sim -,,y,script,./test.sh -f tsim/vnode/replica3_import.sim -,,y,script,./test.sh -f tsim/vnode/stable_balance_replica1.sim -,,y,script,./test.sh -f tsim/vnode/stable_dnode2_stop.sim -,,y,script,./test.sh -f tsim/vnode/stable_dnode2.sim -,,y,script,./test.sh -f tsim/vnode/stable_dnode3.sim -,,y,script,./test.sh -f tsim/vnode/stable_replica3_dnode6.sim -,,y,script,./test.sh -f tsim/vnode/stable_replica3_vnode3.sim -,,y,script,./test.sh -f tsim/sync/oneReplica1VgElect.sim -,,y,script,./test.sh -f tsim/sync/oneReplica5VgElect.sim -,,y,script,./test.sh -f tsim/catalog/alterInCurrent.sim -,,y,script,./test.sh -f tsim/scalar/in.sim -,,y,script,./test.sh -f tsim/scalar/scalar.sim -,,y,script,./test.sh -f tsim/scalar/filter.sim -,,y,script,./test.sh -f tsim/scalar/caseWhen.sim -,,y,script,./test.sh -f tsim/scalar/tsConvert.sim -,,y,script,./test.sh -f tsim/alter/cached_schema_after_alter.sim -,,y,script,./test.sh -f tsim/alter/dnode.sim -,,y,script,./test.sh -f tsim/alter/table.sim -,,y,script,./test.sh -f tsim/cache/new_metrics.sim -,,y,script,./test.sh -f tsim/cache/restart_table.sim -,,y,script,./test.sh -f tsim/cache/restart_metrics.sim -,,y,script,./test.sh -f tsim/column/commit.sim -,,y,script,./test.sh -f tsim/column/metrics.sim -,,y,script,./test.sh -f tsim/column/table.sim -,,y,script,./test.sh -f tsim/compress/commitlog.sim -,,y,script,./test.sh -f tsim/compress/compress2.sim -,,y,script,./test.sh -f tsim/compress/compress.sim -,,y,script,./test.sh -f tsim/compress/compress_col.sim -,,y,script,./test.sh -f tsim/compress/uncompress.sim -,,y,script,./test.sh -f tsim/compute/avg.sim -,,y,script,./test.sh -f tsim/compute/block_dist.sim -,,y,script,./test.sh -f tsim/compute/bottom.sim -,,y,script,./test.sh -f tsim/compute/count.sim -,,y,script,./test.sh -f tsim/compute/diff.sim -,,y,script,./test.sh -f tsim/compute/diff2.sim -,,y,script,./test.sh -f tsim/compute/first.sim -,,y,script,./test.sh -f tsim/compute/interval.sim -,,y,script,./test.sh -f tsim/compute/interval1.sim -,,y,script,./test.sh -f tsim/compute/last_row.sim -,,y,script,./test.sh -f tsim/compute/last.sim -,,y,script,./test.sh -f tsim/compute/leastsquare.sim -,,y,script,./test.sh -f tsim/compute/max.sim -,,y,script,./test.sh -f tsim/compute/min.sim -,,y,script,./test.sh -f tsim/compute/null.sim -,,y,script,./test.sh -f tsim/compute/percentile.sim -,,y,script,./test.sh -f tsim/compute/stddev.sim -,,y,script,./test.sh -f tsim/compute/sum.sim -,,y,script,./test.sh -f tsim/compute/top.sim -,,y,script,./test.sh -f tsim/field/2.sim -,,y,script,./test.sh -f tsim/field/3.sim -,,y,script,./test.sh -f tsim/field/4.sim -,,y,script,./test.sh -f tsim/field/5.sim -,,y,script,./test.sh -f tsim/field/6.sim -,,y,script,./test.sh -f tsim/field/binary.sim -,,y,script,./test.sh -f tsim/field/bigint.sim -,,y,script,./test.sh -f tsim/field/bool.sim -,,y,script,./test.sh -f tsim/field/double.sim -,,y,script,./test.sh -f tsim/field/float.sim -,,y,script,./test.sh -f tsim/field/int.sim -,,y,script,./test.sh -f tsim/field/single.sim -,,y,script,./test.sh -f tsim/field/smallint.sim -,,y,script,./test.sh -f tsim/field/tinyint.sim -,,y,script,./test.sh -f tsim/field/unsigined_bigint.sim -,,y,script,./test.sh -f tsim/vector/metrics_field.sim -,,y,script,./test.sh -f tsim/vector/metrics_mix.sim -,,y,script,./test.sh -f tsim/vector/metrics_query.sim -,,y,script,./test.sh -f tsim/vector/metrics_tag.sim -,,y,script,./test.sh -f tsim/vector/metrics_time.sim -,,y,script,./test.sh -f tsim/vector/multi.sim -,,y,script,./test.sh -f tsim/vector/single.sim -,,y,script,./test.sh -f tsim/vector/table_field.sim -,,y,script,./test.sh -f tsim/vector/table_mix.sim -,,y,script,./test.sh -f tsim/vector/table_query.sim -,,y,script,./test.sh -f tsim/vector/table_time.sim -,,y,script,./test.sh -f tsim/wal/kill.sim -,,y,script,./test.sh -f tsim/tag/3.sim -,,y,script,./test.sh -f tsim/tag/4.sim -,,y,script,./test.sh -f tsim/tag/5.sim -,,y,script,./test.sh -f tsim/tag/6.sim -,,y,script,./test.sh -f tsim/tag/add.sim -,,y,script,./test.sh -f tsim/tag/bigint.sim -,,y,script,./test.sh -f tsim/tag/binary_binary.sim -,,y,script,./test.sh -f tsim/tag/binary.sim -,,y,script,./test.sh -f tsim/tag/bool_binary.sim -,,y,script,./test.sh -f tsim/tag/bool_int.sim -,,y,script,./test.sh -f tsim/tag/bool.sim -,,y,script,./test.sh -f tsim/tag/change.sim -,,y,script,./test.sh -f tsim/tag/column.sim -,,y,script,./test.sh -f tsim/tag/commit.sim -,,y,script,./test.sh -f tsim/tag/create.sim -,,y,script,./test.sh -f tsim/tag/delete.sim -,,y,script,./test.sh -f tsim/tag/double.sim -,,y,script,./test.sh -f tsim/tag/filter.sim -,,y,script,./test.sh -f tsim/tag/float.sim -,,y,script,./test.sh -f tsim/tag/int_binary.sim -,,y,script,./test.sh -f tsim/tag/int_float.sim -,,y,script,./test.sh -f tsim/tag/int.sim -,,y,script,./test.sh -f tsim/tag/set.sim -,,y,script,./test.sh -f tsim/tag/smallint.sim -,,y,script,./test.sh -f tsim/tag/tinyint.sim -,,y,script,./test.sh -f tsim/tag/drop_tag.sim -,,y,script,./test.sh -f tsim/tag/tbNameIn.sim -,,y,script,./test.sh -f tmp/monitor.sim -,,y,script,./test.sh -f tsim/tagindex/add_index.sim -,,n,script,./test.sh -f tsim/tagindex/sma_and_tag_index.sim -,,y,script,./test.sh -f tsim/tagindex/indexOverflow.sim -,,y,script,./test.sh -f tsim/view/view.sim -,,y,script,./test.sh -f tsim/query/cache_last.sim -,,y,script,./test.sh -f tsim/query/const.sim -,,y,script,./test.sh -f tsim/query/nestedJoinView.sim - - - -#develop test -,,n,develop-test,python3 ./test.py -f 2-query/table_count_scan.py -,,n,develop-test,python3 ./test.py -f 2-query/pseudo_column.py -,,n,develop-test,python3 ./test.py -f 2-query/ts-range.py -,,n,develop-test,python3 ./test.py -f 2-query/tag_scan.py -,,n,develop-test,python3 ./test.py -f 2-query/show_create_db.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/auto_create_table_json.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/custom_col_tag.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/default_json.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/demo.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/insert_alltypes_json.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/invalid_commandline.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/json_tag.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/query_json.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/sample_csv_json.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/sml_json_alltypes.py -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/taosdemoTestQueryWithJson.py -R -,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/telnet_tcp.py -R - #docs-examples test ,,n,docs-examples-test,bash python.sh #,,n,docs-examples-test,bash node.sh ,,n,docs-examples-test,bash csharp.sh ,,n,docs-examples-test,bash jdbc.sh ,,n,docs-examples-test,bash go.sh +,,n,docs-examples-test,bash rust.sh ,,n,docs-examples-test,bash test_R.sh From 4e7a0ba91f97c8f8c90db6181041d1cf234ad40e Mon Sep 17 00:00:00 2001 From: sheyanjie-qq <249478495@qq.com> Date: Tue, 24 Sep 2024 20:28:10 +0800 Subject: [PATCH 22/46] update develp doc --- docs/examples/rust/nativeexample/examples/connect.rs | 2 +- docs/zh/07-develop/index.md | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/examples/rust/nativeexample/examples/connect.rs b/docs/examples/rust/nativeexample/examples/connect.rs index f316a70631..ad2533d4c3 100644 --- a/docs/examples/rust/nativeexample/examples/connect.rs +++ b/docs/examples/rust/nativeexample/examples/connect.rs @@ -2,7 +2,7 @@ use taos::*; #[tokio::main] async fn main() -> anyhow::Result<()> { - let dsn = "taos://localhost:6031".to_string(); + let dsn = "taos://localhost:6030".to_string(); match TaosBuilder::from_dsn(&dsn)?.build().await { Ok(_taos) => { diff --git a/docs/zh/07-develop/index.md b/docs/zh/07-develop/index.md index 9d4adce01c..4759027344 100644 --- a/docs/zh/07-develop/index.md +++ b/docs/zh/07-develop/index.md @@ -14,7 +14,8 @@ description: 让开发者能够快速上手的指南 7. 在很多场景下(如车辆管理),应用需要获取每个数据采集点的最新状态,那么建议你采用 TDengine 的 Cache 功能,而不用单独部署 Redis 等缓存软件。 8. 如果你发现 TDengine 的函数无法满足你的要求,那么你可以使用用户自定义函数(UDF)来解决问题。 -本部分内容就是按照上述顺序组织的。为便于理解,TDengine 为每个功能和每个支持的编程语言都提供了示例代码。如果你希望深入了解 SQL 的使用,需要查看[SQL 手册](../reference/taos-sql/)。如果想更深入地了解各连接器的使用,请阅读[连接器参考指南](../reference/connector/)。如果还希望想将 TDengine 与第三方系统集成起来,比如 Grafana, 请参考[第三方工具](../third-party/)。 +本部分内容就是按照上述顺序组织的。为便于理解,TDengine 为每个功能和每个支持的编程语言都提供了示例代码,位于 [示例代码](https://github.com/taosdata/TDengine/tree/main/docs/examples)。所有示例代码都会有 CI 保证正确性,脚本位于 [示例代码 CI](https://github.com/taosdata/TDengine/tree/main/tests/docs-examples-test)。 +如果你希望深入了解 SQL 的使用,需要查看[SQL 手册](../reference/taos-sql/)。如果想更深入地了解各连接器的使用,请阅读[连接器参考指南](../reference/connector/)。如果还希望想将 TDengine 与第三方系统集成起来,比如 Grafana, 请参考[第三方工具](../third-party/)。 如果在开发过程中遇到任何问题,请点击每个页面下方的["反馈问题"](https://github.com/taosdata/TDengine/issues/new/choose), 在 GitHub 上直接递交 Issue。 From d43ce06dc2d69d17528f14895adc1521499f22b1 Mon Sep 17 00:00:00 2001 From: sheyanjie-qq <249478495@qq.com> Date: Tue, 24 Sep 2024 20:31:09 +0800 Subject: [PATCH 23/46] add rust ci --- tests/parallel_test/cases.task | 1552 +++++++++++++++++++++++++++++++- 1 file changed, 1551 insertions(+), 1 deletion(-) diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 30c79fea02..602ac9ad66 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -2,11 +2,1561 @@ #caseID,rerunTimes,Run with Sanitizer,casePath,caseCommand #NA,NA,y or n,script,./test.sh -f tsim/user/basic.sim +#unit-test + +,,n,unit-test,bash test.sh + + +# +# army-test +# +,,y,army,./pytest.sh python3 ./test.py -f multi-level/mlevel_basic.py -N 3 -L 3 -D 2 +,,y,army,./pytest.sh python3 ./test.py -f db-encrypt/basic.py +,,n,army,python3 ./test.py -f storage/s3/s3Basic.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f cluster/snapshot.py -N 3 -L 3 -D 2 +,,y,army,./pytest.sh python3 ./test.py -f query/function/test_func_elapsed.py +,,y,army,./pytest.sh python3 ./test.py -f query/function/test_function.py +,,y,army,./pytest.sh python3 ./test.py -f query/function/concat.py +,,y,army,./pytest.sh python3 ./test.py -f query/function/cast.py +,,y,army,./pytest.sh python3 ./test.py -f query/test_join.py +,,y,army,./pytest.sh python3 ./test.py -f query/test_compare.py +,,y,army,./pytest.sh python3 ./test.py -f insert/test_column_tag_boundary.py +,,y,army,./pytest.sh python3 ./test.py -f query/fill/fill_desc.py -N 3 -L 3 -D 2 +,,y,army,./pytest.sh python3 ./test.py -f query/fill/fill_null.py +,,y,army,./pytest.sh python3 ./test.py -f cluster/incSnapshot.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f cluster/clusterBasic.py -N 5 +,,y,army,./pytest.sh python3 ./test.py -f query/query_basic.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f query/accuracy/test_query_accuracy.py +,,y,army,./pytest.sh python3 ./test.py -f query/accuracy/test_ts5400.py +,,y,army,./pytest.sh python3 ./test.py -f query/accuracy/test_having.py +,,y,army,./pytest.sh python3 ./test.py -f insert/insert_basic.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f cluster/splitVgroupByLearner.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f authorith/authBasic.py -N 3 +,,n,army,python3 ./test.py -f cmdline/fullopt.py +,,y,army,./pytest.sh python3 ./test.py -f query/show.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f alter/alterConfig.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f query/subquery/subqueryBugs.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f storage/oneStageComp.py -N 3 -L 3 -D 1 +,,y,army,./pytest.sh python3 ./test.py -f storage/compressBasic.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f grant/grantBugs.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f query/queryBugs.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f tmq/tmqBugs.py -N 3 +,,y,army,./pytest.sh python3 ./test.py -f query/fill/fill_compare_asc_desc.py +,,y,army,./pytest.sh python3 ./test.py -f query/last/test_last.py +,,y,army,./pytest.sh python3 ./test.py -f query/window/base.py +,,y,army,./pytest.sh python3 ./test.py -f query/sys/tb_perf_queries_exist_test.py -N 3 + +# +# system test +# +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/stream_multi_agg.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/stream_basic.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/scalar_function.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/at_once_interval.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/at_once_session.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/at_once_state_window.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/window_close_interval.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/window_close_session.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/window_close_state_window.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/max_delay_interval.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/max_delay_session.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/at_once_interval_ext.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/max_delay_interval_ext.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/window_close_session_ext.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/partition_interval.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/pause_resume_test.py +,,y,system-test,./pytest.sh python3 ./test.py -f 8-stream/state_window_case.py +#,,n,system-test,python3 ./test.py -f 8-stream/vnode_restart.py -N 4 +#,,n,system-test,python3 ./test.py -f 8-stream/snode_restart.py -N 4 +,,n,system-test,python3 ./test.py -f 8-stream/snode_restart_with_checkpoint.py -N 4 + +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_error.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_func.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_varchar.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_func_group.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_expr.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/project_group.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname_vgroup.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_interval.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/compact-col.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tms_memleak.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stbJoin.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hint.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hint.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hint.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hint.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/para_tms.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/para_tms2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_str.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_math.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_time.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_26.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_str.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_math.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_time.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_26.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/columnLenUpdated.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/columnLenUpdated.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/columnLenUpdated.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/columnLenUpdated.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_str.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_math.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_time.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_26.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_limit_opt.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_unit.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_unit.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_unit.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_unit.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col_agg.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col_agg.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col_agg.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_by_col_agg.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_limit_opt_2.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_limit_opt_2.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_limit_opt_2.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interval_limit_opt_2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/func_to_char_timestamp.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/func_to_char_timestamp.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/func_to_char_timestamp.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/func_to_char_timestamp.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_cache_scan.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_cache_scan.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_cache_scan.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_cache_scan.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma2.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma2.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma2.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsma2.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqShow.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropStb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb0.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb3.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb0.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/ins_topics_test.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqMaxTopic.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqParamsTest.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqParamsTest.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqClientConsLog.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqMaxGroupIds.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsumeDiscontinuousData.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqOffset.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_primary_key.py +,,n,system-test,python3 ./test.py -f 7-tmq/tmqDropConsumer.py + + +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/insert_stb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_stable.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/stt_blocks_check.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/out_of_order.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/out_of_order.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_null.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/database_pre_suf.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/out_of_order.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/out_of_order.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_str.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_math.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_time.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQuery_26.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/select_null.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/select_null.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/select_null.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/select_null.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/select_null.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/slimit.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4233.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4233.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4233.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4233.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/like.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/like.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/like.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/like.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/match.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/match.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/match.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/match.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/td-28068.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/td-28068.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/td-28068.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/td-28068.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_AlwaysReturnValue.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_AlwaysReturnValue.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_AlwaysReturnValue.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_AlwaysReturnValue.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_NotReturnValue.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_NotReturnValue.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_NotReturnValue.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/agg_group_NotReturnValue.py -Q 4 + +,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreDnode.py -N 5 -M 3 -i False +,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreVnode.py -N 5 -M 3 -i False +,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreMnode.py -N 5 -M 3 -i False +,,y,system-test,./pytest.sh python3 ./test.py -f 3-enterprise/restore/restoreQnode.py -N 5 -M 3 -i False + +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/create_wrong_topic.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dropDbR3ConflictTransaction.py -N 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/basic5.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/ts-4674.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb3.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeDb4.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/subscribeStb4.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/db.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqError.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/schema.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/stbFilterWhere.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/stbFilter.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqCheckData.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqCheckData1.py +#,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsumerGroup.py +,,n,system-test,python3 ./test.py -f 7-tmq/tmqConsumerGroup.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqAlterSchema.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb-mutilVg.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb-1ctb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-1ctb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb-funcNFilter.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqAutoCreateTbl.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDnodeRestart.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDnodeRestart1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdate-1ctb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdateWithConsume.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot0.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDelete-1ctb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDelete-multiCtb.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropStbCtb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropNtb-snapshot0.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropNtb-snapshot1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUdf.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUdf-multCtb-snapshot0.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUdf-multCtb-snapshot1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/stbTagFilter-1ctb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dataFromTsdbNWal.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dataFromTsdbNWal-multiCtb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_taosx.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_ts-5473.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_ts4563.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq_replay.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqSeekAndCommit.py +,,n,system-test,python3 ./test.py -f 7-tmq/tmq_offset.py +,,n,system-test,python3 ./test.py -f 7-tmq/tmqDataPrecisionUnit.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/raw_block_interface_test.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/stbTagFilter-multiCtb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqSubscribeStb-r3.py -N 5 +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq3mnodeSwitch.py -N 6 -M 3 -i True +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmq3mnodeSwitch.py -N 6 -M 3 -n 3 -i True +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-db-removewal.py -N 2 -n 1 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-stb-removewal.py -N 6 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-stb.py -N 2 -n 1 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-stb.py -N 6 -n 3 +#,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeTransform-db.py -N 6 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-select.py -N 2 -n 1 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-select-duplicatedata.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-select-duplicatedata-false.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-select.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-select-false.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-stb-false.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-column.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-column-false.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-db.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeSplit-db-false.py -N 3 -n 3 + +,,y,system-test,./pytest.sh python3 test.py -f 7-tmq/tmqVnodeReplicate.py -M 3 -N 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-19201.py +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-21561.py +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TS-3404.py +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TS-3581.py +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TS-3311.py +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TS-3821.py +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TS-5130.py + +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/balance_vgroups_r1.py -N 6 +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShell.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShellError.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShellNetChk.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/telemetry.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/backquote_check.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosdMonitor.py +,,n,system-test,python3 ./test.py -f 0-others/taosdShell.py -N 5 -M 3 -Q 3 +,,n,system-test,python3 ./test.py -f 0-others/udfTest.py +,,n,system-test,python3 ./test.py -f 0-others/udf_create.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/udf_restart_taosd.py +,,n,system-test,python3 ./test.py -f 0-others/udf_cfg1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/udf_cfg2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/cachemodel.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/sysinfo.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_control.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_manage.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege_show.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege_all.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/fsync.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/multilevel.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/ttl.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/ttlChangeOnWrite.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/compress_tsz1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/compress_tsz2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/view/non_marterial_view/test_view.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/test_show_table_distributed.py +,,n,system-test,python3 ./test.py -f 0-others/compatibility.py +,,n,system-test,python3 ./test.py -f 0-others/tag_index_basic.py +,,n,system-test,python3 ./test.py -f 0-others/udfpy_main.py +,,n,system-test,python3 ./test.py -N 3 -f 0-others/walRetention.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/splitVGroup.py -N 3 -n 1 +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/splitVGroupWal.py -N 3 -n 1 +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/splitVGroup.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/splitVGroupWal.py -N 3 -n 3 +,,n,system-test,python3 ./test.py -f 0-others/timeRangeWise.py -N 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/delete_check.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/test_hot_refresh_configurations.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/subscribe_stream_privilege.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/empty_identifier.py + +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/composite_primary_key_create.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/composite_primary_key_insert.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/composite_primary_key_delete.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/insert_double.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_database.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_replica.py -N 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/influxdb_line_taosc_insert.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/opentsdb_telnet_line_taosc_insert.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/opentsdb_json_taosc_insert.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_stmt_muti_insert_query.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_stmt_set_tbname_tag.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_stable.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_table.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/boundary.py +,,n,system-test,python3 ./test.py -f 1-insert/insertWithMoreVgroup.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/table_comment.py +#,,n,system-test,python3 ./test.py -f 1-insert/time_range_wise.py +#,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/block_wise.py +#,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/create_retentions.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/mutil_stage.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/table_param_ttl.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/table_param_ttl.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/update_data_muti_rows.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/db_tb_name_check.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/InsertFuturets.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/insert_wide_column.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/insert_column_value.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_benchmark.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_1.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_1.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_1.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_1.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_2.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_2.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_2.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_2.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_3.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_3.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_3.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_3.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_3.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_4.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_4.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_4.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_4.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/rowlength64k_4.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/precisionUS.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/precisionNS.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_ts4219.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/ts-4272.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_ts4295.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_td27388.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_ts4479.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_td29793.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/insert_timestamp.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_td29157.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/show.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/show_tag_index.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/information_schema.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/abs.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/abs.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/and_or_for_byte.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/and_or_for_byte.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/apercentile.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/apercentile.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arccos.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arccos.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arcsin.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arcsin.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arctan.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arctan.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/between.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/between.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cast.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cast.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ceil.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ceil.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/char_length.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/char_length.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/check_tsdb.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/check_tsdb.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws2.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cos.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cos.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/group_partition.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/group_partition.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/group_partition.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/group_partition.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/group_partition.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_partition.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_partition.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/db.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/db.py -N 3 -n 3 -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_apercentile.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_apercentile.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_avg.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_avg.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_count.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_count.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_max.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_max.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_min.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_min.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_spread.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_spread.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_stddev.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_stddev.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_sum.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_sum.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/explain.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/explain.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/first.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/first.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/floor.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/floor.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_null.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_null.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_stateduration.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_stateduration.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/histogram.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/histogram.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hyperloglog.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hyperloglog.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interp.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interp.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/fill.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/irate.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/irate.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_and_last_row.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_and_last_row.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_and_last_row.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_and_last_row.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_and_last_row.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last+last_row.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last+last_row.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last+last_row.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last+last_row.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_1.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_1.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_1.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_1.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_2.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_2.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_2.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_2.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_3.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_3.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_3.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_3.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_3.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_4.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_4.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_4.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_4.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_4.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_5.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_5.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_5.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_5.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/primary_ts_base_5.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/leastsquares.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/leastsquares.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/length.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/length.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/limit.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/log.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/log.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/logical_operators.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/logical_operators.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/lower.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/lower.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ltrim.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ltrim.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mavg.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mavg.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_partition.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_partition.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_limit_interval.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_limit_interval.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_min_last_interval.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row_interval.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/min.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/min.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/normal.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/normal.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mode.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mode.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Now.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Now.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/orderBy.py -N 5 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pow.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pow.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/query_cols_tags_and_or.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/query_cols_tags_and_or.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/round.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/round.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/rtrim.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/rtrim.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/smaBasic.py -N 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/smaTest.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/smaTest.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/sma_index.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml_TS-3724.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml-TD19291.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varbinary.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sqrt.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sqrt.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/statecount.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/statecount.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stateduration.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stateduration.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/substr.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/substr.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sum.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sum.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tail.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tail.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tan.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tan.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timezone.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timezone.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_iso8601.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_iso8601.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_unixtimestamp.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_unixtimestamp.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Today.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Today.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsbsQuery.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsbsQuery.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ttl_comment.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ttl_comment.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/twa.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/twa.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/unique.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/unique.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/upper.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/upper.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varchar.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varchar.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/case_when.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/case_when.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/blockSMA.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/blockSMA.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/update_data.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/tb_100w_data_order.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_childtable.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_normaltable.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_systable.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/keep_expired.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/stmt_error.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py -N 3 -M 3 -i False -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat2.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQueryInterval.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/systable_func.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/test_ts4382.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/test_ts4403.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/test_td28163.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity_1.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_diff.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tagFilter.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts_3405_3398_3423.py -N 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ts-4348-td-27939.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/backslash_g.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/test_ts4467.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/geometry.py + +,,n,system-test,python3 ./test.py -f 2-query/queryQnode.py +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode1mnode.py +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode2mnode.py -N 5 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStop.py -N 5 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStop.py -N 5 -M 3 -i False +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStop2Follower.py -N 5 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStop2Follower.py -N 5 -M 3 -i False +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStopLoop.py -N 5 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py -N 6 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py -N 6 -M 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py -N 6 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py -N 6 -M 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 6 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 6 -M 3 -n 3 + +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeModifyMeta.py -N 6 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeModifyMeta.py -N 6 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py -N 6 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py -N 6 -M 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py -N 6 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py -N 6 -M 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py -N 6 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py -N 6 -M 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertData.py -N 6 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertData.py -N 6 -M 3 -n 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py -N 6 -M 3 +#,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py -N 6 -M 3 -n 3 +,,n,system-test,python3 ./test.py -f 6-cluster/manually-test/6dnode3mnodeInsertLessDataAlterRep3to1to3.py -N 6 -M 3 +#,,n,system-test,python3 ./test.py -f 6-cluster/5dnode3mnodeRoll.py -N 3 -C 1 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeAdd1Ddnoe.py -N 7 -M 3 -C 6 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeAdd1Ddnoe.py -N 7 -M 3 -C 6 -n 3 +#,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeDrop.py -N 5 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRecreateMnode.py -N 6 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStopFollowerLeader.py -N 5 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeStop2Follower.py -N 5 -M 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py -N 4 -M 1 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py -N 4 -M 1 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py -N 4 -M 1 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py -N 4 -M 1 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py -N 4 -M 1 +,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py -N 4 -M 1 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/between.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varchar.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ltrim.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/rtrim.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/length.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/char_length.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/upper.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/lower.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cast.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/substr.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union1.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat2.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws2.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/check_tsdb.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hyperloglog.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/explain.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/leastsquares.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timezone.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Now.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Today.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/min.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/normal.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mode.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/first.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_iso8601.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_unixtimestamp.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/apercentile.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/abs.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ceil.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/floor.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/round.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/log.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pow.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sqrt.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cos.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tan.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arcsin.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arccos.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arctan.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/query_cols_tags_and_or.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interp.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/fill.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQueryInterval.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity_1.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mavg.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_diff.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/unique.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stateduration.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_stateduration.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/statecount.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tail.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ttl_comment.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_count.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_max.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_min.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_sum.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_spread.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_apercentile.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_avg.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_stddev.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/twa.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/irate.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_null.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_partition.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_partition.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_limit_interval.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_min_last_interval.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row_interval.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsbsQuery.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/case_when.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/blockSMA.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-21561.py -Q 2 + +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/between.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varchar.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ltrim.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/rtrim.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/length.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/char_length.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/upper.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/lower.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cast.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/substr.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union1.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat2.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws2.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/check_tsdb.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hyperloglog.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/explain.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/leastsquares.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timezone.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Now.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Today.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/min.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/normal.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mode.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/first.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_iso8601.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_unixtimestamp.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/apercentile.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/abs.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ceil.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/floor.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/round.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/log.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pow.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sqrt.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cos.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tan.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arcsin.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arccos.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arctan.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/query_cols_tags_and_or.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQueryInterval.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity_1.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mavg.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_diff.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/unique.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stateduration.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_stateduration.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/statecount.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tail.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ttl_comment.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_count.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_max.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_min.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_sum.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_spread.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_apercentile.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_avg.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_stddev.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/twa.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/irate.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_null.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_partition.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_partition.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_limit_interval.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_min_last_interval.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row_interval.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsbsQuery.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interp.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/fill.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/case_when.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/blockSMA.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-21561.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/between.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/varchar.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ltrim.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/rtrim.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/length.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/char_length.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/upper.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/lower.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/substr.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union1.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat2.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat_ws2.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/check_tsdb.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/hyperloglog.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/explain.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/leastsquares.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timezone.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Now.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Today.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/min.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/normal.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mode.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/first.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_iso8601.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/To_unixtimestamp.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/apercentile.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/abs.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ceil.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/floor.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/round.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/log.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pow.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sqrt.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cos.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tan.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arcsin.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arccos.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/arctan.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/query_cols_tags_and_or.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/nestedQueryInterval.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity_1.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/mavg.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/cast.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_diff.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/unique.py -Q 4 +#,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stateduration.py -Q 4 +#,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_stateduration.py -Q 4 +#,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/statecount.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tail.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/ttl_comment.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_count.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_max.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_min.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_sum.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_spread.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_apercentile.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_avg.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distribute_agg_stddev.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/twa.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/irate.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_null.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count_partition.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_partition.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_limit_interval.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/max_min_last_interval.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row_interval.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/last_row.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tsbsQuery.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/interp.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/fill.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/case_when.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/out_of_order.py -R +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/blockSMA.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/projectionDesc.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/odbc.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/fill_with_group.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/state_window.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-21561.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-20582.py +,,n,system-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/insertMix.py -N 3 +,,n,system-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/stt.py -N 3 +,,n,system-test,python3 ./test.py -f eco-system/meta/database/keep_time_offset.py + +#tsim test +,,y,script,./test.sh -f tsim/query/timeline.sim +,,y,script,./test.sh -f tsim/join/join.sim +,,y,script,./test.sh -f tsim/tmq/basic2Of2ConsOverlap.sim +,,y,script,./test.sh -f tsim/parser/where.sim +,,y,script,./test.sh -f tsim/parser/join_manyblocks.sim +,,y,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v1_leader.sim +,,y,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v1_follower.sim +,,y,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v2.sim +,,y,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v3.sim +,,y,script,./test.sh -f tsim/parser/limit1.sim +,,y,script,./test.sh -f tsim/parser/union.sim +,,y,script,./test.sh -f tsim/parser/commit.sim +,,y,script,./test.sh -f tsim/parser/nestquery.sim +,,n,script,./test.sh -f tsim/valgrind/checkError7.sim +,,y,script,./test.sh -f tsim/parser/groupby.sim +,,y,script,./test.sh -f tsim/parser/sliding.sim +,,y,script,./test.sh -f tsim/dnode/balance2.sim +,,y,script,./test.sh -f tsim/vnode/replica3_repeat.sim +,,y,script,./test.sh -f tsim/parser/col_arithmetic_operation.sim +#,,y,script,./test.sh -f tsim/trans/create_db.sim +,,y,script,./test.sh -f tsim/dnode/balance3.sim +,,y,script,./test.sh -f tsim/vnode/replica3_many.sim +,,y,script,./test.sh -f tsim/stable/metrics_idx.sim +# ,,y,script,./test.sh -f tsim/db/alter_replica_13.sim +,,y,script,./test.sh -f tsim/sync/3Replica1VgElect.sim +,,y,script,./test.sh -f tsim/sync/3Replica5VgElect.sim +,,n,script,./test.sh -f tsim/valgrind/checkError6.sim + +,,y,script,./test.sh -f tsim/user/basic.sim +,,y,script,./test.sh -f tsim/user/password.sim +,,y,script,./test.sh -f tsim/user/whitelist.sim +,,y,script,./test.sh -f tsim/user/privilege_db.sim +,,y,script,./test.sh -f tsim/user/privilege_sysinfo.sim +,,y,script,./test.sh -f tsim/user/privilege_topic.sim +,,y,script,./test.sh -f tsim/user/privilege_table.sim +,,y,script,./test.sh -f tsim/user/privilege_create_db.sim +,,y,script,./test.sh -f tsim/db/alter_option.sim +# ,,y,script,./test.sh -f tsim/db/alter_replica_31.sim +,,y,script,./test.sh -f tsim/db/basic1.sim +,,y,script,./test.sh -f tsim/db/basic2.sim +,,y,script,./test.sh -f tsim/db/basic3.sim +,,y,script,./test.sh -f tsim/db/basic4.sim +,,y,script,./test.sh -f tsim/db/basic5.sim +,,y,script,./test.sh -f tsim/db/basic6.sim +,,y,script,./test.sh -f tsim/db/commit.sim +,,y,script,./test.sh -f tsim/db/create_all_options.sim +,,y,script,./test.sh -f tsim/db/delete_reuse1.sim +,,y,script,./test.sh -f tsim/db/delete_reuse2.sim +,,y,script,./test.sh -f tsim/db/delete_reusevnode.sim +,,y,script,./test.sh -f tsim/db/delete_reusevnode2.sim +,,y,script,./test.sh -f tsim/db/delete_writing1.sim +,,y,script,./test.sh -f tsim/db/delete_writing2.sim +,,y,script,./test.sh -f tsim/db/error1.sim +,,y,script,./test.sh -f tsim/db/keep.sim +,,y,script,./test.sh -f tsim/db/len.sim +,,y,script,./test.sh -f tsim/db/repeat.sim +,,y,script,./test.sh -f tsim/db/show_create_db.sim +,,y,script,./test.sh -f tsim/db/show_create_table.sim +,,y,script,./test.sh -f tsim/db/tables.sim +,,y,script,./test.sh -f tsim/db/taosdlog.sim +,,y,script,./test.sh -f tsim/db/table_prefix_suffix.sim +,,y,script,./test.sh -f tsim/dnode/balance_replica1.sim +,,y,script,./test.sh -f tsim/dnode/balance_replica3.sim +,,y,script,./test.sh -f tsim/dnode/balance1.sim +,,y,script,./test.sh -f tsim/dnode/balancex.sim +,,y,script,./test.sh -f tsim/dnode/create_dnode.sim +,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_mnode.sim +,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_qnode_snode.sim +,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_vnode_replica1.sim +,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_vnode_replica3.sim +,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_multi_vnode_replica1.sim +,,y,script,./test.sh -f tsim/dnode/drop_dnode_has_multi_vnode_replica3.sim +,,y,script,./test.sh -f tsim/dnode/drop_dnode_force.sim +,,y,script,./test.sh -f tsim/dnode/offline_reason.sim +,,y,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica1.sim +,,y,script,./test.sh -f tsim/dnode/vnode_clean.sim +,,y,script,./test.sh -f tsim/dnode/use_dropped_dnode.sim +,,y,script,./test.sh -f tsim/dnode/split_vgroup_replica1.sim +,,y,script,./test.sh -f tsim/dnode/split_vgroup_replica3.sim +,,y,script,./test.sh -f tsim/import/basic.sim +,,y,script,./test.sh -f tsim/import/commit.sim +,,y,script,./test.sh -f tsim/import/large.sim +,,y,script,./test.sh -f tsim/import/replica1.sim +,,y,script,./test.sh -f tsim/insert/backquote.sim +,,y,script,./test.sh -f tsim/insert/basic.sim +,,y,script,./test.sh -f tsim/insert/basic0.sim +,,y,script,./test.sh -f tsim/insert/basic1.sim +,,y,script,./test.sh -f tsim/insert/basic2.sim +,,y,script,./test.sh -f tsim/insert/commit-merge0.sim +,,y,script,./test.sh -f tsim/insert/insert_drop.sim +,,y,script,./test.sh -f tsim/insert/insert_select.sim +,,y,script,./test.sh -f tsim/insert/null.sim +,,y,script,./test.sh -f tsim/insert/query_block1_file.sim +,,y,script,./test.sh -f tsim/insert/query_block1_memory.sim +,,y,script,./test.sh -f tsim/insert/query_block2_file.sim +,,y,script,./test.sh -f tsim/insert/query_block2_memory.sim +,,y,script,./test.sh -f tsim/insert/query_file_memory.sim +,,y,script,./test.sh -f tsim/insert/query_multi_file.sim +,,y,script,./test.sh -f tsim/insert/tcp.sim +,,y,script,./test.sh -f tsim/insert/update0.sim +,,y,script,./test.sh -f tsim/insert/delete0.sim +,,y,script,./test.sh -f tsim/insert/update1_sort_merge.sim +,,y,script,./test.sh -f tsim/insert/update2.sim +,,y,script,./test.sh -f tsim/insert/insert_stb.sim +,,y,script,./test.sh -f tsim/parser/alter__for_community_version.sim +,,y,script,./test.sh -f tsim/parser/alter_column.sim +,,y,script,./test.sh -f tsim/parser/alter_stable.sim +,,y,script,./test.sh -f tsim/parser/alter.sim +,,y,script,./test.sh -f tsim/parser/alter1.sim +,,y,script,./test.sh -f tsim/parser/auto_create_tb_drop_tb.sim +,,y,script,./test.sh -f tsim/parser/auto_create_tb.sim +,,y,script,./test.sh -f tsim/parser/between_and.sim +,,y,script,./test.sh -f tsim/parser/binary_escapeCharacter.sim +,,y,script,./test.sh -f tsim/parser/columnValue_bigint.sim +,,y,script,./test.sh -f tsim/parser/columnValue_bool.sim +,,y,script,./test.sh -f tsim/parser/columnValue_double.sim +,,y,script,./test.sh -f tsim/parser/columnValue_float.sim +,,y,script,./test.sh -f tsim/parser/columnValue_int.sim +,,y,script,./test.sh -f tsim/parser/columnValue_smallint.sim +,,y,script,./test.sh -f tsim/parser/columnValue_tinyint.sim +,,y,script,./test.sh -f tsim/parser/columnValue_unsign.sim +,,y,script,./test.sh -f tsim/parser/columnValue_uint.sim +,,y,script,./test.sh -f tsim/parser/columnValue_timestamp.sim +,,y,script,./test.sh -f tsim/parser/columnValue_varchar.sim +,,y,script,./test.sh -f tsim/parser/columnValue_nchar.sim +,,y,script,./test.sh -f tsim/parser/columnValue_varbinary.sim +,,y,script,./test.sh -f tsim/parser/columnValue_json.sim +,,y,script,./test.sh -f tsim/parser/columnValue_geometry.sim +,,y,script,./test.sh -f tsim/parser/condition.sim +,,y,script,./test.sh -f tsim/parser/condition_scl.sim +,,y,script,./test.sh -f tsim/parser/constCol.sim +,,y,script,./test.sh -f tsim/parser/create_db.sim +,,y,script,./test.sh -f tsim/parser/create_mt.sim +,,y,script,./test.sh -f tsim/parser/create_tb_with_tag_name.sim +,,y,script,./test.sh -f tsim/parser/create_tb.sim +,,y,script,./test.sh -f tsim/parser/dbtbnameValidate.sim +,,y,script,./test.sh -f tsim/parser/distinct.sim +,,y,script,./test.sh -f tsim/parser/fill_us.sim +,,y,script,./test.sh -f tsim/parser/fill.sim +,,y,script,./test.sh -f tsim/parser/first_last.sim +,,y,script,./test.sh -f tsim/parser/fill_stb.sim +,,y,script,./test.sh -f tsim/parser/interp.sim +,,y,script,./test.sh -f tsim/parser/fourArithmetic-basic.sim +,,y,script,./test.sh -f tsim/parser/function.sim +,,y,script,./test.sh -f tsim/parser/groupby-basic.sim +,,y,script,./test.sh -f tsim/parser/having_child.sim +,,y,script,./test.sh -f tsim/parser/having.sim +,,y,script,./test.sh -f tsim/parser/import_commit1.sim +,,y,script,./test.sh -f tsim/parser/import_commit2.sim +,,y,script,./test.sh -f tsim/parser/import_commit3.sim +,,y,script,./test.sh -f tsim/parser/import_file.sim +,,y,script,./test.sh -f tsim/parser/import.sim +,,y,script,./test.sh -f tsim/parser/insert_multiTbl.sim +,,y,script,./test.sh -f tsim/parser/insert_tb.sim +,,y,script,./test.sh -f tsim/parser/join_multitables.sim +,,y,script,./test.sh -f tsim/parser/join_multivnode.sim +,,y,script,./test.sh -f tsim/parser/join.sim +,,y,script,./test.sh -f tsim/parser/last_cache.sim +,,y,script,./test.sh -f tsim/parser/last_both.sim +,,y,script,./test.sh -f tsim/parser/last_groupby.sim +,,y,script,./test.sh -f tsim/parser/lastrow.sim +,,y,script,./test.sh -f tsim/parser/lastrow2.sim +,,y,script,./test.sh -f tsim/parser/like.sim +,,y,script,./test.sh -f tsim/parser/limit.sim +,,y,script,./test.sh -f tsim/parser/mixed_blocks.sim +,,y,script,./test.sh -f tsim/parser/nchar.sim +,,y,script,./test.sh -f tsim/parser/null_char.sim +,,y,script,./test.sh -f tsim/parser/precision_ns.sim +,,y,script,./test.sh -f tsim/parser/projection_limit_offset.sim +,,y,script,./test.sh -f tsim/parser/regex.sim +,,y,script,./test.sh -f tsim/parser/regressiontest.sim +,,y,script,./test.sh -f tsim/parser/select_across_vnodes.sim +,,y,script,./test.sh -f tsim/parser/select_distinct_tag.sim +,,y,script,./test.sh -f tsim/parser/select_from_cache_disk.sim +,,y,script,./test.sh -f tsim/parser/select_with_tags.sim +,,y,script,./test.sh -f tsim/parser/selectResNum.sim +,,y,script,./test.sh -f tsim/parser/set_tag_vals.sim +,,y,script,./test.sh -f tsim/parser/single_row_in_tb.sim +,,y,script,./test.sh -f tsim/parser/slimit_alter_tags.sim +,,y,script,./test.sh -f tsim/parser/slimit.sim +,,y,script,./test.sh -f tsim/parser/slimit1.sim +,,y,script,./test.sh -f tsim/parser/stableOp.sim +,,y,script,./test.sh -f tsim/parser/tags_dynamically_specifiy.sim +,,y,script,./test.sh -f tsim/parser/tags_filter.sim +,,y,script,./test.sh -f tsim/parser/tbnameIn.sim +,,y,script,./test.sh -f tsim/parser/timestamp.sim +,,y,script,./test.sh -f tsim/parser/top_groupby.sim +,,y,script,./test.sh -f tsim/parser/topbot.sim +,,y,script,./test.sh -f tsim/parser/union_sysinfo.sim +,,y,script,./test.sh -f tsim/parser/slimit_limit.sim +,,y,script,./test.sh -f tsim/parser/table_merge_limit.sim +,,y,script,./test.sh -f tsim/query/tagLikeFilter.sim +,,y,script,./test.sh -f tsim/query/charScalarFunction.sim +,,y,script,./test.sh -f tsim/query/explain.sim +,,y,script,./test.sh -f tsim/query/interval-offset.sim +,,y,script,./test.sh -f tsim/query/interval.sim +,,y,script,./test.sh -f tsim/query/scalarFunction.sim +,,y,script,./test.sh -f tsim/query/scalarNull.sim +,,y,script,./test.sh -f tsim/query/session.sim +,,y,script,./test.sh -f tsim/query/udf.sim +,,n,script,./test.sh -f tsim/query/udfpy.sim +,,y,script,./test.sh -f tsim/query/udf_with_const.sim +,,y,script,./test.sh -f tsim/query/join_interval.sim +,,y,script,./test.sh -f tsim/query/join_pk.sim +,,y,script,./test.sh -f tsim/query/join_order.sim +,,y,script,./test.sh -f tsim/query/count_spread.sim +,,y,script,./test.sh -f tsim/query/unionall_as_table.sim +,,y,script,./test.sh -f tsim/query/multi_order_by.sim +,,y,script,./test.sh -f tsim/query/sys_tbname.sim +,,y,script,./test.sh -f tsim/query/sort-pre-cols.sim +,,y,script,./test.sh -f tsim/query/groupby.sim +,,y,script,./test.sh -f tsim/query/groupby_distinct.sim +,,y,script,./test.sh -f tsim/query/event.sim +,,y,script,./test.sh -f tsim/query/forceFill.sim +,,y,script,./test.sh -f tsim/query/emptyTsRange.sim +,,y,script,./test.sh -f tsim/query/emptyTsRange_scl.sim +,,y,script,./test.sh -f tsim/query/partitionby.sim +,,y,script,./test.sh -f tsim/query/tableCount.sim +,,y,script,./test.sh -f tsim/query/show_db_table_kind.sim +,,y,script,./test.sh -f tsim/query/bi_star_table.sim +,,y,script,./test.sh -f tsim/query/bi_tag_scan.sim +,,y,script,./test.sh -f tsim/query/bi_tbname_col.sim +,,y,script,./test.sh -f tsim/query/tag_scan.sim +,,y,script,./test.sh -f tsim/query/nullColSma.sim +,,y,script,./test.sh -f tsim/query/bug3398.sim +,,y,script,./test.sh -f tsim/query/explain_tsorder.sim +,,y,script,./test.sh -f tsim/query/apercentile.sim +,,y,script,./test.sh -f tsim/query/query_count0.sim +,,y,script,./test.sh -f tsim/query/query_count_sliding0.sim +,,y,script,./test.sh -f tsim/query/union_precision.sim +,,y,script,./test.sh -f tsim/qnode/basic1.sim +,,y,script,./test.sh -f tsim/snode/basic1.sim +,,y,script,./test.sh -f tsim/mnode/basic1.sim +,,y,script,./test.sh -f tsim/mnode/basic2.sim +#,,y,script,./test.sh -f tsim/mnode/basic3.sim +,,y,script,./test.sh -f tsim/mnode/basic4.sim +,,y,script,./test.sh -f tsim/mnode/basic5.sim +,,y,script,./test.sh -f tsim/show/basic.sim +,,y,script,./test.sh -f tsim/table/autocreate.sim +,,y,script,./test.sh -f tsim/table/basic1.sim +,,y,script,./test.sh -f tsim/table/basic2.sim +,,y,script,./test.sh -f tsim/table/basic3.sim +,,y,script,./test.sh -f tsim/table/bigint.sim +,,y,script,./test.sh -f tsim/table/binary.sim +,,y,script,./test.sh -f tsim/table/bool.sim +,,y,script,./test.sh -f tsim/table/column_name.sim +,,y,script,./test.sh -f tsim/table/column_num.sim +,,y,script,./test.sh -f tsim/table/column_value.sim +,,y,script,./test.sh -f tsim/table/column2.sim +,,y,script,./test.sh -f tsim/table/createmulti.sim +,,y,script,./test.sh -f tsim/table/date.sim +,,y,script,./test.sh -f tsim/table/db.table.sim +,,y,script,./test.sh -f tsim/table/delete_reuse1.sim +,,y,script,./test.sh -f tsim/table/delete_reuse2.sim +,,y,script,./test.sh -f tsim/table/delete_writing.sim +,,y,script,./test.sh -f tsim/table/describe.sim +,,y,script,./test.sh -f tsim/table/double.sim +,,y,script,./test.sh -f tsim/table/float.sim +,,y,script,./test.sh -f tsim/table/hash.sim +,,y,script,./test.sh -f tsim/table/int.sim +,,y,script,./test.sh -f tsim/table/limit.sim +,,y,script,./test.sh -f tsim/table/smallint.sim +,,y,script,./test.sh -f tsim/table/table_len.sim +,,y,script,./test.sh -f tsim/table/table.sim +,,y,script,./test.sh -f tsim/table/tinyint.sim +,,y,script,./test.sh -f tsim/table/vgroup.sim +,,n,script,./test.sh -f tsim/stream/basic0.sim -g +,,y,script,./test.sh -f tsim/stream/basic1.sim +,,y,script,./test.sh -f tsim/stream/basic2.sim +,,y,script,./test.sh -f tsim/stream/basic3.sim +,,y,script,./test.sh -f tsim/stream/basic4.sim +,,y,script,./test.sh -f tsim/stream/checkpointInterval0.sim +,,y,script,./test.sh -f tsim/stream/checkStreamSTable1.sim +,,y,script,./test.sh -f tsim/stream/checkStreamSTable.sim +,,y,script,./test.sh -f tsim/stream/count0.sim +,,y,script,./test.sh -f tsim/stream/count1.sim +,,y,script,./test.sh -f tsim/stream/count2.sim +,,y,script,./test.sh -f tsim/stream/count3.sim +,,y,script,./test.sh -f tsim/stream/countSliding0.sim +,,y,script,./test.sh -f tsim/stream/countSliding1.sim +,,y,script,./test.sh -f tsim/stream/countSliding2.sim +,,y,script,./test.sh -f tsim/stream/deleteInterval.sim +,,y,script,./test.sh -f tsim/stream/deleteScalar.sim +,,y,script,./test.sh -f tsim/stream/deleteSession.sim +,,y,script,./test.sh -f tsim/stream/deleteState.sim +,,y,script,./test.sh -f tsim/stream/distributeInterval0.sim +,,y,script,./test.sh -f tsim/stream/distributeIntervalRetrive0.sim +,,y,script,./test.sh -f tsim/stream/distributeMultiLevelInterval0.sim +,,y,script,./test.sh -f tsim/stream/distributeSession0.sim +,,y,script,./test.sh -f tsim/stream/drop_stream.sim +,,y,script,./test.sh -f tsim/stream/event0.sim +,,y,script,./test.sh -f tsim/stream/event1.sim +,,y,script,./test.sh -f tsim/stream/event2.sim +,,y,script,./test.sh -f tsim/stream/fillHistoryBasic1.sim +,,y,script,./test.sh -f tsim/stream/fillHistoryBasic2.sim +,,y,script,./test.sh -f tsim/stream/fillHistoryBasic3.sim +,,y,script,./test.sh -f tsim/stream/fillIntervalDelete0.sim +,,y,script,./test.sh -f tsim/stream/fillIntervalDelete1.sim +,,y,script,./test.sh -f tsim/stream/fillIntervalLinear.sim +,,y,script,./test.sh -f tsim/stream/fillIntervalPartitionBy.sim +,,y,script,./test.sh -f tsim/stream/fillIntervalPrevNext1.sim +,,y,script,./test.sh -f tsim/stream/fillIntervalPrevNext.sim +,,y,script,./test.sh -f tsim/stream/fillIntervalRange.sim +,,y,script,./test.sh -f tsim/stream/fillIntervalValue.sim +,,y,script,./test.sh -f tsim/stream/ignoreCheckUpdate.sim +,,y,script,./test.sh -f tsim/stream/ignoreExpiredData.sim +,,y,script,./test.sh -f tsim/stream/partitionby1.sim +,,y,script,./test.sh -f tsim/stream/partitionbyColumnInterval.sim +,,y,script,./test.sh -f tsim/stream/partitionbyColumnOther.sim +,,y,script,./test.sh -f tsim/stream/partitionbyColumnSession.sim +,,y,script,./test.sh -f tsim/stream/partitionbyColumnState.sim +,,y,script,./test.sh -f tsim/stream/partitionby.sim +,,y,script,./test.sh -f tsim/stream/pauseAndResume.sim +,,y,script,./test.sh -f tsim/stream/schedSnode.sim +,,y,script,./test.sh -f tsim/stream/session0.sim +,,y,script,./test.sh -f tsim/stream/session1.sim +,,y,script,./test.sh -f tsim/stream/sliding.sim +,,y,script,./test.sh -f tsim/stream/state0.sim +,,y,script,./test.sh -f tsim/stream/state1.sim +,,y,script,./test.sh -f tsim/stream/streamPrimaryKey0.sim +,,y,script,./test.sh -f tsim/stream/streamPrimaryKey1.sim +,,y,script,./test.sh -f tsim/stream/streamPrimaryKey2.sim +,,y,script,./test.sh -f tsim/stream/streamPrimaryKey3.sim +,,y,script,./test.sh -f tsim/stream/triggerInterval0.sim +,,y,script,./test.sh -f tsim/stream/triggerSession0.sim +,,y,script,./test.sh -f tsim/stream/udTableAndCol0.sim +,,y,script,./test.sh -f tsim/stream/udTableAndTag0.sim +,,y,script,./test.sh -f tsim/stream/udTableAndTag1.sim +,,y,script,./test.sh -f tsim/stream/udTableAndTag2.sim +,,y,script,./test.sh -f tsim/stream/windowClose.sim +,,y,script,./test.sh -f tsim/trans/lossdata1.sim +,,y,script,./test.sh -f tsim/tmq/basic1.sim +,,y,script,./test.sh -f tsim/tmq/basic2.sim +,,y,script,./test.sh -f tsim/tmq/basic3.sim +,,y,script,./test.sh -f tsim/tmq/basic4.sim +,,y,script,./test.sh -f tsim/tmq/basic1Of2Cons.sim +,,y,script,./test.sh -f tsim/tmq/basic2Of2Cons.sim +,,y,script,./test.sh -f tsim/tmq/basic3Of2Cons.sim +,,y,script,./test.sh -f tsim/tmq/basic4Of2Cons.sim +,,y,script,./test.sh -f tsim/tmq/topic.sim +,,y,script,./test.sh -f tsim/tmq/snapshot.sim +,,y,script,./test.sh -f tsim/tmq/snapshot1.sim +,,y,script,./test.sh -f tsim/stable/alter_comment.sim +,,y,script,./test.sh -f tsim/stable/alter_count.sim +,,y,script,./test.sh -f tsim/stable/alter_import.sim +,,y,script,./test.sh -f tsim/stable/alter_insert1.sim +,,y,script,./test.sh -f tsim/stable/alter_insert2.sim +,,y,script,./test.sh -f tsim/stable/alter_metrics.sim +,,y,script,./test.sh -f tsim/stable/column_add.sim +,,y,script,./test.sh -f tsim/stable/column_drop.sim +,,y,script,./test.sh -f tsim/stable/column_modify.sim +,,y,script,./test.sh -f tsim/stable/disk.sim +,,y,script,./test.sh -f tsim/stable/dnode3.sim +,,y,script,./test.sh -f tsim/stable/metrics.sim +,,y,script,./test.sh -f tsim/stable/refcount.sim +,,y,script,./test.sh -f tsim/stable/tag_add.sim +,,y,script,./test.sh -f tsim/stable/tag_drop.sim +,,y,script,./test.sh -f tsim/stable/tag_filter.sim +,,y,script,./test.sh -f tsim/stable/tag_modify.sim +,,y,script,./test.sh -f tsim/stable/tag_rename.sim +,,y,script,./test.sh -f tsim/stable/values.sim +,,y,script,./test.sh -f tsim/stable/vnode3.sim +,,n,script,./test.sh -f tsim/sma/drop_sma.sim +,,y,script,./test.sh -f tsim/sma/sma_leak.sim +,,y,script,./test.sh -f tsim/sma/tsmaCreateInsertQuery.sim +,,y,script,./test.sh -f tsim/sma/rsmaCreateInsertQuery.sim +,,y,script,./test.sh -f tsim/sma/rsmaCreateInsertQueryDelete.sim + +### refactor stream backend, open case after rsma refactored +#,,y,script,./test.sh -f tsim/sma/rsmaPersistenceRecovery.sim +,,y,script,./test.sh -f tsim/sync/vnodesnapshot-rsma-test.sim +,,n,script,./test.sh -f tsim/valgrind/checkError1.sim +,,n,script,./test.sh -f tsim/valgrind/checkError2.sim +,,n,script,./test.sh -f tsim/valgrind/checkError3.sim +,,n,script,./test.sh -f tsim/valgrind/checkError4.sim +,,n,script,./test.sh -f tsim/valgrind/checkError5.sim +,,n,script,./test.sh -f tsim/valgrind/checkError8.sim +,,n,script,./test.sh -f tsim/valgrind/checkUdf.sim +,,y,script,./test.sh -f tsim/vnode/replica3_basic.sim +,,y,script,./test.sh -f tsim/vnode/replica3_vgroup.sim +,,y,script,./test.sh -f tsim/vnode/replica3_import.sim +,,y,script,./test.sh -f tsim/vnode/stable_balance_replica1.sim +,,y,script,./test.sh -f tsim/vnode/stable_dnode2_stop.sim +,,y,script,./test.sh -f tsim/vnode/stable_dnode2.sim +,,y,script,./test.sh -f tsim/vnode/stable_dnode3.sim +,,y,script,./test.sh -f tsim/vnode/stable_replica3_dnode6.sim +,,y,script,./test.sh -f tsim/vnode/stable_replica3_vnode3.sim +,,y,script,./test.sh -f tsim/sync/oneReplica1VgElect.sim +,,y,script,./test.sh -f tsim/sync/oneReplica5VgElect.sim +,,y,script,./test.sh -f tsim/catalog/alterInCurrent.sim +,,y,script,./test.sh -f tsim/scalar/in.sim +,,y,script,./test.sh -f tsim/scalar/scalar.sim +,,y,script,./test.sh -f tsim/scalar/filter.sim +,,y,script,./test.sh -f tsim/scalar/caseWhen.sim +,,y,script,./test.sh -f tsim/scalar/tsConvert.sim +,,y,script,./test.sh -f tsim/alter/cached_schema_after_alter.sim +,,y,script,./test.sh -f tsim/alter/dnode.sim +,,y,script,./test.sh -f tsim/alter/table.sim +,,y,script,./test.sh -f tsim/cache/new_metrics.sim +,,y,script,./test.sh -f tsim/cache/restart_table.sim +,,y,script,./test.sh -f tsim/cache/restart_metrics.sim +,,y,script,./test.sh -f tsim/column/commit.sim +,,y,script,./test.sh -f tsim/column/metrics.sim +,,y,script,./test.sh -f tsim/column/table.sim +,,y,script,./test.sh -f tsim/compress/commitlog.sim +,,y,script,./test.sh -f tsim/compress/compress2.sim +,,y,script,./test.sh -f tsim/compress/compress.sim +,,y,script,./test.sh -f tsim/compress/compress_col.sim +,,y,script,./test.sh -f tsim/compress/uncompress.sim +,,y,script,./test.sh -f tsim/compute/avg.sim +,,y,script,./test.sh -f tsim/compute/block_dist.sim +,,y,script,./test.sh -f tsim/compute/bottom.sim +,,y,script,./test.sh -f tsim/compute/count.sim +,,y,script,./test.sh -f tsim/compute/diff.sim +,,y,script,./test.sh -f tsim/compute/diff2.sim +,,y,script,./test.sh -f tsim/compute/first.sim +,,y,script,./test.sh -f tsim/compute/interval.sim +,,y,script,./test.sh -f tsim/compute/interval1.sim +,,y,script,./test.sh -f tsim/compute/last_row.sim +,,y,script,./test.sh -f tsim/compute/last.sim +,,y,script,./test.sh -f tsim/compute/leastsquare.sim +,,y,script,./test.sh -f tsim/compute/max.sim +,,y,script,./test.sh -f tsim/compute/min.sim +,,y,script,./test.sh -f tsim/compute/null.sim +,,y,script,./test.sh -f tsim/compute/percentile.sim +,,y,script,./test.sh -f tsim/compute/stddev.sim +,,y,script,./test.sh -f tsim/compute/sum.sim +,,y,script,./test.sh -f tsim/compute/top.sim +,,y,script,./test.sh -f tsim/field/2.sim +,,y,script,./test.sh -f tsim/field/3.sim +,,y,script,./test.sh -f tsim/field/4.sim +,,y,script,./test.sh -f tsim/field/5.sim +,,y,script,./test.sh -f tsim/field/6.sim +,,y,script,./test.sh -f tsim/field/binary.sim +,,y,script,./test.sh -f tsim/field/bigint.sim +,,y,script,./test.sh -f tsim/field/bool.sim +,,y,script,./test.sh -f tsim/field/double.sim +,,y,script,./test.sh -f tsim/field/float.sim +,,y,script,./test.sh -f tsim/field/int.sim +,,y,script,./test.sh -f tsim/field/single.sim +,,y,script,./test.sh -f tsim/field/smallint.sim +,,y,script,./test.sh -f tsim/field/tinyint.sim +,,y,script,./test.sh -f tsim/field/unsigined_bigint.sim +,,y,script,./test.sh -f tsim/vector/metrics_field.sim +,,y,script,./test.sh -f tsim/vector/metrics_mix.sim +,,y,script,./test.sh -f tsim/vector/metrics_query.sim +,,y,script,./test.sh -f tsim/vector/metrics_tag.sim +,,y,script,./test.sh -f tsim/vector/metrics_time.sim +,,y,script,./test.sh -f tsim/vector/multi.sim +,,y,script,./test.sh -f tsim/vector/single.sim +,,y,script,./test.sh -f tsim/vector/table_field.sim +,,y,script,./test.sh -f tsim/vector/table_mix.sim +,,y,script,./test.sh -f tsim/vector/table_query.sim +,,y,script,./test.sh -f tsim/vector/table_time.sim +,,y,script,./test.sh -f tsim/wal/kill.sim +,,y,script,./test.sh -f tsim/tag/3.sim +,,y,script,./test.sh -f tsim/tag/4.sim +,,y,script,./test.sh -f tsim/tag/5.sim +,,y,script,./test.sh -f tsim/tag/6.sim +,,y,script,./test.sh -f tsim/tag/add.sim +,,y,script,./test.sh -f tsim/tag/bigint.sim +,,y,script,./test.sh -f tsim/tag/binary_binary.sim +,,y,script,./test.sh -f tsim/tag/binary.sim +,,y,script,./test.sh -f tsim/tag/bool_binary.sim +,,y,script,./test.sh -f tsim/tag/bool_int.sim +,,y,script,./test.sh -f tsim/tag/bool.sim +,,y,script,./test.sh -f tsim/tag/change.sim +,,y,script,./test.sh -f tsim/tag/column.sim +,,y,script,./test.sh -f tsim/tag/commit.sim +,,y,script,./test.sh -f tsim/tag/create.sim +,,y,script,./test.sh -f tsim/tag/delete.sim +,,y,script,./test.sh -f tsim/tag/double.sim +,,y,script,./test.sh -f tsim/tag/filter.sim +,,y,script,./test.sh -f tsim/tag/float.sim +,,y,script,./test.sh -f tsim/tag/int_binary.sim +,,y,script,./test.sh -f tsim/tag/int_float.sim +,,y,script,./test.sh -f tsim/tag/int.sim +,,y,script,./test.sh -f tsim/tag/set.sim +,,y,script,./test.sh -f tsim/tag/smallint.sim +,,y,script,./test.sh -f tsim/tag/tinyint.sim +,,y,script,./test.sh -f tsim/tag/drop_tag.sim +,,y,script,./test.sh -f tsim/tag/tbNameIn.sim +,,y,script,./test.sh -f tmp/monitor.sim +,,y,script,./test.sh -f tsim/tagindex/add_index.sim +,,n,script,./test.sh -f tsim/tagindex/sma_and_tag_index.sim +,,y,script,./test.sh -f tsim/tagindex/indexOverflow.sim +,,y,script,./test.sh -f tsim/view/view.sim +,,y,script,./test.sh -f tsim/query/cache_last.sim +,,y,script,./test.sh -f tsim/query/const.sim +,,y,script,./test.sh -f tsim/query/nestedJoinView.sim + + + +#develop test +,,n,develop-test,python3 ./test.py -f 2-query/table_count_scan.py +,,n,develop-test,python3 ./test.py -f 2-query/pseudo_column.py +,,n,develop-test,python3 ./test.py -f 2-query/ts-range.py +,,n,develop-test,python3 ./test.py -f 2-query/tag_scan.py +,,n,develop-test,python3 ./test.py -f 2-query/show_create_db.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/auto_create_table_json.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/custom_col_tag.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/default_json.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/demo.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/insert_alltypes_json.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/invalid_commandline.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/json_tag.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/query_json.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/sample_csv_json.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/sml_json_alltypes.py +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/taosdemoTestQueryWithJson.py -R +,,n,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/telnet_tcp.py -R + #docs-examples test ,,n,docs-examples-test,bash python.sh #,,n,docs-examples-test,bash node.sh ,,n,docs-examples-test,bash csharp.sh ,,n,docs-examples-test,bash jdbc.sh -,,n,docs-examples-test,bash go.sh ,,n,docs-examples-test,bash rust.sh +,,n,docs-examples-test,bash go.sh ,,n,docs-examples-test,bash test_R.sh From e0559749c038e1efe89cadd3edab58e9e97bbf59 Mon Sep 17 00:00:00 2001 From: yingzhao Date: Tue, 24 Sep 2024 23:46:09 +0800 Subject: [PATCH 24/46] docs(data-in): add new page for parser plugin --- .../05-data-in/99-parser-plugin.md | 30 ++++++++++++++++++ docs/zh/06-advanced/05-data-in/plugin-01.png | Bin 0 -> 27789 bytes 2 files changed, 30 insertions(+) create mode 100644 docs/zh/06-advanced/05-data-in/99-parser-plugin.md create mode 100644 docs/zh/06-advanced/05-data-in/plugin-01.png diff --git a/docs/zh/06-advanced/05-data-in/99-parser-plugin.md b/docs/zh/06-advanced/05-data-in/99-parser-plugin.md new file mode 100644 index 0000000000..7138fc28be --- /dev/null +++ b/docs/zh/06-advanced/05-data-in/99-parser-plugin.md @@ -0,0 +1,30 @@ +--- +title: "数据解析插件" +sidebar_label: "数据解析插件" +--- + +接入消息中间时,如果使用 json/regex 等模式解析器无法满足解析需求,同时 UDT 也无法满足性能需求的情况,可以自定义数据解析插件。 + +## 插件概述 + +taosX Parser 插件是一个要求用 C/Rust 语言开发的 C ABI 兼容动态库,该动态库要实现约定的 API 并编译为在 taosX 所在运行环境中能够正确运行的动态库,然后复制到约定位置由 taosX 在运行时加载,并在处理数据的 Parsing 阶段调用。 + +## 插件部署 + +编译插件,需要在和目标环境兼容的环境中编译。 + +编译好插件后可将插件的动态库复制到插件目录下,taosX 启动时后,系统首次使用插件时初始化加载插件。可以在 explorer 的 kafka 或者 mqtt 数据接入配置页面中,检查是否加载成功。如下图,如果加载成功,则在解析器选择列表中展示出来。 + +插件目录在 `taosx.toml` 配置文件中复用 plugins 配置,追加`/parsers`作为插件安装路径,默认值在 UNIX 环境下为 `/usr/local/taos/plugins/parsers`,在 Windows 下为 `C:\TDengine\plugins\parsers`。 + +![](./plugin-01.png) + +## 插件接口规范 + +| 函数签名 | 描述 | 参数说明 | 返回值 | +| -------- | -------- | -------- | ----------- | +| const char* parser_name() | 插件名,用于前端显示。 | 无 | 字符串 | +| const char* parser_version() | 版本,方便定位问题。 | 无 | 字符串 | +| struct parser_resp_t {
char* e; // Error if null.
void* p; // Success if contains.
}
parser_resp_t parser_new(char* ctx, uint32_t len); | 使用用户自定义配置生成解析器对象或返回错误信息。| char* ctx: 用户自定义配置字符串。
uint32_t len: 该字符串的二进制长度(不含 `\0`)。 | 返回值为结构体。
struct parser_resp_t {
char* e; // Error if null.
void* p; // Success if contains.
}
当创建对象失败时,第一个指针 e 不为 NULL。
当创建成功时,e 为 NULL,p 为解析器对象。 | +| const char* parser_mutate(
void* parser,
const uint8_t* in_ptr, uint32_t in_len,
const void* uint8_t* out_ptr, uint32_t* out_len
) | 使用解析器对象对输入 payload 进行解析,返回结果为 JSON 格式 [u8] 。
返回的 JSON 将使用默认的 JSON 解析器进行完全解码(展开根数组和所有的对象)。 | void* parser: parser_new 生成的对象指针。
const uint8_t* in_ptr, uint32_t in_len:输入 Payload 的指针和 bytes 长度(不含 `\0`)。
const void* uint8_t* out_ptr, uint32_t * out_len:输出 JSON 字符串的指针和长度(不含 `\0`)。当 out_ptr 指向为空时,表示输出为空。当 out_ptr 不为空时,应用(taosx)在使用完毕后应当释放该内存空间。| 字符串指针。
当调用成功时,返回值为 NULL。
当调用失败时,返回错误信息字符串。 | +| void parser_free(void* parser); | 释放解析器对象内存。 | void* parser: parser_new 生成的对象指针。 | 无。 | \ No newline at end of file diff --git a/docs/zh/06-advanced/05-data-in/plugin-01.png b/docs/zh/06-advanced/05-data-in/plugin-01.png new file mode 100644 index 0000000000000000000000000000000000000000..18bc2ca242e9a3d3b0a67e196994a8e2d3c56d5e GIT binary patch literal 27789 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�g5+@AHo1r69k~Vz;?gLx7 zwT2MJzDS!OBg|`8wsy|zrgP<9>!OIp>Q5l;*|%&D%%ts~T9o&KMMVPh6H6C8-3Ice z${OhKU%!d+zA@1fb`7aqdIQ|&C|K<@^tX!2#olGu68`Oe%Wc8RpiUI*1Gie95~-d? zjVe~6DspT<&SCj0pLTPjqPw)|s|V~{{7ws6OsDqofz}5VA3+_#rO?o*)>~<&^L()stHLBEv@P8U8!p zAaf$S1Lt{+DgGm6k_W;Wam$Y^IKLr*>{FB`Cee}B)+ zS2e_`KelasbxcnpUV)_^p|sbqmYB|q0{W+G_?m!m@jIsZQC+uH+?By*$7ppA>>FGcr~*m7KS3G%O+2DL-FzIq=B}&o zK=$q1eH#zIWb1?If?!$R42)N`+-^IJkU{Uv6F=hS`}Vxwb7?_7R`qbY9YDBpKI7 z8DMVWfNmO<#NPzh4GkcW>+!PRFDUJY)QKuEv9F(gBQbM>YZt$X($2U0Y_Wr>W+YQGBxTi<&7F6O3`b}|@j;_#=9!M?F zh=|fQx(d|8(#B!Y9*fb@=#3m6N>F|t&G{+)`G~AI%%%*FaN*UsuG~Qv52c#{ajluD zD;Y_f&B-wS+htC+ru9;_KhL(1ZtCgjxsvc*ssp(36)g5){QvR;8mSbr!1vioY?2wY zl=+jLV<%5+2t3^;!IPDsd3v;6K$>TMS-_AJFx+GXkPc`_Ue3i1sFG~FK=}-lYLap_ z&y1Npz1%t)yH;BYU7C9$Npl?40XUM`r+?;e86LFBPmW_8wbI{TF|InF$j=G}TA?qd zm$>*S4G=vg7n^RISNcb$9wx`acxf+Fr1A;{V^d-ib(Ve*;-dn*@x_eqL#rF0ChZ;Qdag>3mC^>q&SA8&y=+b4h0B8U_=0?dnIx0n9m3WM#- zd_tfPuJVBi54csB&`y$d>Pm(JI-tc7=#{as5$;8npp9VNFS)%&L`P}CQc63qTjN6x z;a6?A`qm^oy&!k9h=!R_jnA;QNEHjwZst}H2XaspK+Cj92h~%AN@-3Tnpx1rNn5>O z3uDV{He5xP2f9Eksl`>c>F9Tm2muB`QUWu6r#&-_q9r~hOseq*9#AMuzyL&P#l-nY zI&+u9^74vYJH6|#Nw1#Hk6aoP=O@!PMe*K?hIgk{IsQXj3%QW(mjHD)sYa8vh_9Ui z2U&p7mg-l^(eMwd8xy0v^BF)W&vA5|^WGA0GC}jqXj4S>m0D#=drDoQH`EE93Dbb) z7*H?2F*=|wNGOfFFCOZElKyEL(La=pK)!id(A9*tJJJGeQ}I$e64YGwKu;s^+F__S zkjX?bCl~0vQ{@b+At&2}aKe62(7Ia;?YZ%|vO;$9O!%50{l@(uC&}>KQRJ|e!-6R4 z+-qUJoK8s3RG6&r$TWZw+G$Wfw+8gsuJ9R2r&%Wx(hGW*BS>DQ*N?Id=8a=V+ZW>C z9_8lcruHdu-K!~ic?wgfqJW|^{#R??9o1C#wRyz?iY>HIL@~i8q)S5Yp^DT{rI%0yq(hkN`_6nbvwrjaH*00ByY9NVr|h%O+0V20 zIs3wd&xao^-Vy|lQZ2o*T%B-PBBngA3Cc1Ve{>c_={*}4>FR=itq+i;I15zL66_yH z(fvI!bswX(&_+5BFcTlY`uy7ojh3-=hEFnB?-ZDDF3lTVY4bP_@;_i=(m^cypSt(; zu(H0h+KI;93RJ54_T=j4U@e~aLL-l~Zws8gz#bqsEB8o?>&AHv@oQ)kBa^)m=Mo1V zL`9tlcC+e07*78Fk?xR16NkBGk@?3bj~`ygfu%isXSI}Z(xDuNvx>NoDE2OOba&SB zuHa07ZJ+l-!tT-uVSSvwekYV%#m0n-G_EqTf-%UJ=;S@^|7+|=c!{Cu!*)$r@y8Fh zoAwXRJzxoXUPqsgpv!wqN6#I!LYlt~mbj#RqST_{Yw+&T9IwOP#U2P-?#Q(^==Z7M z#wE6#CabJls`3k78*Q4>_60bg#=o;!6t~r-Yh+6LEy*lVktmsNIUi3OaW|ZtzMJtq z#F##a7uj61`<8S@!tK{sMHIefDQmpkrUd!5L!&#< z{Y<2B)sl4aSf?Bw6Zl;L|Iqd3I^?NvCe31XAn0mO*Q(wsi_*qCv{t$$A}K9ucki4yMac^w}?n z_jnH*6dHGG8=G@D7cGNa@;&I^xL?Wbc)X)CJh2(zy8FA~QeQ@hrC8n3EVlZFniyF> z`E{e(Q`1PXC;XCA{5>^}!+T7ETekt%yEMi|KlFnF4u`j)Rn*3Up4IoRtHepmzM4Lq ztQrv`SBcdezcHa+>=|{366vppYjKaN%HX6j2IfO8nQz54)~5C97)jUk&y)^HFvN z<#xNhn(1sCC;bu(BF?_faGm+n)5ZGqIl-JQTzZs(vsRseA0K#rje^`|;>Y=V^=MXx zv{4*ZCB=BC%pu;T>1RCt8~*?&rdVU0-OIy+nrb1gfym9*5YSsWs_w|pH#2P;HKMfe zgCTLO2IWubSB#oI{ZqU+W2FQI?)TIXlcn7%HYnZOE1}z{yey;(N{Zod|LpK}ot~s0 z;ZSb&@RpP4sH^AQ#4qu;KUj==F>+(mM9F~X&CMElGY#7X)iz>%R0hkYK@&o9-COI? zqcU7Ffxq(Hct7zEB#>PYd|ye9_t2+ie-=pmXyyo>>~V4;f@~ zP38(VHvF`Ys_B%TG@1XfmkMu4$S4F7I{WsjF%eeyJkNtaYFhs7Kc)s#tg~p&=i_=8 z;4e!J%gf6(YK)hJFLJKD?@mfd5g{J`@7ET@%dT8`Ycf5pY_FvXUS2nu7qf7qNEvVK zD#m82FK^Fx$cVpsGYxH3|2ffTSjo-30O6iTK~r0<;grO$?Mn3 zna}eHe$4#8q^E`nYlL@7idwd|A>$8|x^ z^8&!H&gpGtsl|L>d7(fa+wzoLgsjHAOE4w_lwK{dHVc$7 z3qam+*&MP!NdT>ktC6lAOAlWmm{f%#u6&qPrkKC{Op_X>y8lI$pv)6%jpD2~T2x6QtMDS3|y zY?DC-#VqYBelGI%m@vxjnUc`?j}cbZ<9;V!_-^+oiJYSXKU~kIoL&)C; z43~;yBxUDkymG}Oy_Y8LZP@HHQBj`Q+X<2u_iH;(q12?xuYutA)bVgpKW5Rj(jewB z0@FGZncDuGMRZ$Y$~!u0(i;jKjtBdpvY(WlE~@5nJoQUs<8Dbt*)XzDQQW=&6tsjS zv1QMjhl?a^b-FI)6{1t2zlv0ibaPu;uP{qLQad<0k*Fn-bX1he-2(v5<{n0LY}1_S zxp_Sc%Y=0A`()N9pnwJiHeG<{Z^y!zcloIND=U+5MP5IOi+3+fYbn zRc$g2%Op`=7ZQN^(}!;u;j*_s%s0&iwBDh)knEol&cX6~GR}0r|A7s-s)G{4FWhey z5JpDQf4!(Ga4eZon;8!PO8T$XSnfz6_|bRxFWcS+0E?0Q($~?v6c?7k2IjKKF72>D zTwk^tWDDZ3MhSNQjI>yqUPXa7l-ce7HKP;O{+-^=UF^-gB?pD)XCql>bLStXZi6Kh zblH1dI8_VumNE!2T~ zm>hU{XSro^aq+q>EO10o9PNXd8>)m;(CC~THnjMnzbaTpU(0)qkk^lYHHFuo;H>pV zCOzi&+jA8g4tz9UAtQ{9O^F(}oQFKmI{MH4Gz9LQ+w`Xm`~6u#uk{n>&lnyG3f^Km z>P8#{Eq8Gz*AtJ6EB;g*O#7cZR0r%C9R#$HA;AuEviXucW4=AM-Boxnb@H`Rq=*Kh zHb^CZWHPwrz2WS9xW{MP!y$#hAX*R%Wk*NU?*V@5q`6k zNu%rdld735k!dY0EyoxtjV#lbHiKZ_Rg)wme^`{Bo*hqcbMYQcj2n#%Po5qVuy2|^ z&TLiZ+xu*OoI?5TEZ`n9n>#-T-=KK9!zv5Gb(PI{E;IIGO^t#&zRDbqo-cZ3^>z2& zuroZYw~{t9v$I>Rup8`gVh4c7vdSoUzFnHY9mh&Tu$OA(_y;uIQPf#}i^HQg8IK=> z8?Y;d>i(SMsPOi8cJgCOL4jRm_0>&23_vh6>}p_VUh?vA9{nCG-I6~26+@TP)+TRu z8qhnQUOzNEoRnnUut%t#{O%Qt=eZ23@Pns5aL>;k{}{z6r3H3E_RBOI$tr)+rJhci ztrq!BX%?7tmW#PLGdFj)O?fEc`pujB`};OlR{W+hN{TW&RN_Cib#$oOd}1hy=_+H{ z0AQQyrrtYS`vXXr?7fDWpkohzAEqbRDd*~mY&70cxGD)0jA(j+RJ<#pYGW5_%nQ?d zU}E6~CQk)&(FIeA-}l3Y+XIKdTTz$i*mzK%0q8$Q?0>2Je}Cg_zokfK{IP{;pY!P- zlXW;4^a0GZ^3jP-)l}5EsZ$9rS!KUe1cW=S)VD`*O^(t6{5TJ_g9C@WaZ(B%s)zR1 z0pK=!6x!-bp;UbW{sw4lF9ARVlf2F&H4!ZJ!2e-U|Fbcpwz|qdPj7iSx};_x%gjVn18z7$*vIJzh3+b7 z-;T^5EE}wxU_4T`_swxn^`ZB={s&GYA!x5B+HSAs;6HVBB42zu*RMgPNP!{D!;e1A z+S;>z-MiubzGw7031GtlA>r3F@5gFYT4Y52P|^!SVOpf{?t)JzPQwFWFuZ%YL!qKV z;mAG)@dSc5*&3J9e)O$!K=97BmZ6=e%Vo8npga;&cOkfLvue?d-?eJ7pUN_b7{Ad} zk08J)z=UY)BnGhqT9fRg_d<6*TuEi!X6v(>W&LMQ9eHAl<)k53M}}{iR{F%;lm`WG zMgzSiGN!4sYBx48O@V()2G}q|NIr;nUE}rww@hwWvmY}i_4&>@#Gw;X8j5Xv;NL6j zK1tNs=QgZ<;G(dXW>(SD->(Q&7=qa0SEIqKXRarNwKEuO{}H56?urC_M_zKuaJ%PI zpIcKg>2EL-wlQ8vxBwdq*1Fc`1e<$G5uBwc(QfF!%13Yi_yukL1p zNf?K(k5~*CL!<&UeG8XeHKu;=%E7|dVjaDgE;3*Q+d)gRwzexQ6b4^E^2*A4&Z;4f zX%m>ppLOyy>eh|1w-zTORoE2$c4#MX5=my~E+Y znx9Kn?cvYW*_5tY4I0x#M6!1>^+vC=2c|_G%l$8UA+ulO85i?TkI>rOtw{(HSjNAzKnru2lsc4 zteZElL`P-J%0dP_rzWNlU7qOt@14kZ*&I<~W`NR-xSCLhsi;dT`c}H9mcaEfaI6l2_KyF!G+iAtW+220qEQ z4XpK?*r&^3W6E?qaWShoBAA_EMW%grgNVNsH6-^}YJJ_!5KhbeL7E4LmNPs&oB{{w zB%J-4OMgz>%JiaKG^*FSar)I9V;=fE-IQX4{ScNa#P+)P79@M?2RK$xq%U`K%lGNr z_SsODu#r#Ij#5RDog;qU;PPM>=}(Z}L({XY92t&(@klj+qwVj^F5X8utHt~lnHc;g z=Qp{*W6eSn2UnN76nsfwk@8c-3MTNd6S<5!L$=J4{UN=3o{}dVKtOdl=!VIDVn_KM zix>s^ABb!Q%(n3;#^0T)-@BaW?w2y^f8I_Sdr-f##-yHc_;Mn-H!dSXrXlF}r*NjT zbz7NToQA1^Z*P~`=~hs~Syjnd$L_gj$A%gEO_C)Crx_l)%II~}nRKeb_p*tpikUU{ zaf{faE8e5nn>}jfD*P4%ItX&EZ9vD!3nN9{XYC8CfBm(c_;9~scyW9L@dWwHK@49h z)HM5T#ld+5-ugj}BlC>C4dXV{F2FdIhR8L6v+^}GuiE!&-ipx|ottvk=PA6ZciEl&mJh8|U z%RR`=4aJu{Gh4+D<;BIEeM~4a(IG`qw|;v__Q^Azl1KXx5AEUWq0O%LkCs?$`g>oB z{i;rZDt5pjbo9Zx;VBG?J+C}$v`giLfO0mY5nNXn=Cn*D%WtkURnRts+|$HcJoB!` za%1CT!|~KQc1K|&Q|C>nbkN{NHG*f&{U($2PFG!4O3qwVs9=Tkr(Dyyd9mga)Gyi<|92Kr4hhg{3PzB`H94 z0%*L0#^3m04&psL9zVelB*M?n3`@)P^sS5fTy*+p2gHMidrMFdXE{w(A-1Ng*6#5{rx)BwlMAe?LFDPv*M1x(g$3uQbe@XOc1* z9IY-oxad2*{}4 zTj7PccaDgVEApCdZe?KXruo$m&oynrK=$j$=B}>4Z%LTBNcnlpHea4S7Eb5kcQIiwr{HF~WS3oTO4;yrxp(gTmnCtOaBN1y~V$HRtr$ZH~4wK`5pU&B&x5l*f1B327L-UFo*3DQ|vd7ZDi1X8Ao z70g|-OE>SHHgfRs@T7`awyW^f-66a5rs>ygi(*U?8_c3KAAunD^{JbT3aJT}Y=8w^ zeE}ArsNN?uS`@H?RE)NLk67)l1ap|Crl!IY39bPr^+97t$Hmb^dtzCk-sZ%CSD-0s zJDDygCuy{(78II$H}`a)e?vhpDFEOFZ<903n3la9)@Yq!LDoA zl1t|IFEd=f;$BuB>&f~eEq8DK7-YCbBdjyNkmcDGMU<>!8X6t-nKoXtStvE(8o;k9 zYOIE0#VLDXrEF@@XfZMTD`${%G!8vnRQ$(j_xk^$7!(e7KiQ5*mZt~f5`${n)4_G5^hzL@;`ZiQt8GeYq=7Cmjs?99>Mn@M0)5r6)-cTIt}N;lD>Qhhn3Yh5GJl zOz|~L7Z6~utnVBw=w@hf)?FQoQaGui_sL^z+_blU_S0e`Bvi+ulItPY*(&TE<6qap z{Z`PmaPjT<2@eAH6H2ymXqkfVZK85NY>}4Nq?Xsz(V@Ff5%`dGM+^X#)&A$4?p+Uq zr-S<|`b(q^0@B-HIej4~S<$U2Ti@smp6O_7ehw}CJEJLO|E?2WXaw_s?2E)6mY%MP zl^#6k6^K;ROp5WS?0`PR-Wy0{h2-LMt)S}X!89wQaQNurLc#00tv?n1S7Ki>Twk3= znSV4J^jzHwjj;y+bM$j<`9X?eCWo$gdWI`+{roIE>*G|?)ST=#y8Bi9*HdrFyxfb9 zKy!%%&5vGi8KsU?QhvP% zP1isy(EBW;LwPu=&rkJ=8L=3yl0Koe_3;U*bIMc^W4&jRh-+6&!LgEORfbg<km`P)KDD ztDy^UqhFCsOd?NzI@%l3LqOGQ)ktJ*F2MfK*P)J1^|UEo z<|dB=-~K%pU(>))!Lf0A6A-`aR1bouIi_${f*cM4}YZ5CW#A%agkYo3}H1C;a5??^^w?c`-9VRUCcdi~h<8qbClFi?0N_`AZ z3~g+Aqw7N#3_wZ^Qf}J*sbUO5t5#HQ|HuRe`^!D592dg3yj?)_eckb^_l=Yzg4ffH zYl=F){!{8M8`nDUw`|OGom}v%_K9=o-yO#=>8@0PrHKp7_c)H>9r^!horBAnC-P}N zct=L4Ivnk`3Uf||C2< zWy3iq2owYrL7S%rve&L1JV>RGJee@EfyRkIqW+8OiA&w+Eh`%@%M1MW!0l2^Wu0?Y z>BV5fbt+tG)EB+QLy&lmEFPv~bj+%)r>=!ZRIGdWbN#H7I4!2_C^ev0O+?!_i)l~HTW0ow|r z9Na}b3{lQyGj;6jL3ZB$?$r^0L^8kW=!DSUysnc`-OLHoqQv(vJJI*0pw2ci!i2T8 z)6>p4Wn{#rLS^kwG2#PqAQxouO2RGKjW7v6IDE|nn>k`}b+g!e<1U&a^QZBNu~B%| zLB!C;?N>I}_gKaUb#LV;*baBj+CXq-3q_e5cKI$P`P$*65iG}KMiYda1-lV%0SeQn zY|XoLhtFA@g|fL4eY`U-BVJOr&dA-M@&(OD(|Jg+>wHg{&jZZKrk^bN$ILaw6INVp8Au zn)~qxU>-;HG-O$XvMArRbxP601nx0FZ9-?5C#B8&Ilt?NAaZVXwJCw-T6@Nqf{2IO zHyZKQeArFZC5dX^5ah-0p!)zG1+|T-CMM9z)$Qt9`O{Arbt$Obadaw?cv1NEHl(|3 zZO$5G?w}xZi)p2zfrOV@91wLfc?d+FN|O~f#QC{1LJgvlG2mSq{rJwM`v#_d1&Br? zQ)92@DK3~`rcMp&3RZmNYtx2ZAZA)DaJ4u8Zyo? zp%n9z^-LR~7lM86{T&|ES^YaUJfZ8$Vu&bL#u4dc?-csIRjd9ffnm&Wiwl)5Y|%gq zfmBK^DTeEDNC=|Cy2UX$70sJsOWl3QC57tu`R$Fbs!XVna-_B0V~8t{n?Wy@lJHS< z1_5T;XY|6w`A-rr1HNu_+_akSgOmu?3uyu>x0ApL8KO5fFa=C#y2X&@r?0EeAa!Yd z_i*S`atp<1-!|7YHMLqP_BK3*?f%z|8&g#~Rm3Ir7heT}FF{A)FCEu}XC;_PDB0{8 zWLe`*%X*G%@q>c7vy1H`g*$M=v+(uRO3l;qTwxX?m zIyrt?L#JnF^)>sx*5D5u{B;EADQk!@G+ovAN*3Y<5}wUrB2KpnlYJVEi$oP zZ{Tu3W9v^LsS6k5#XxMW&{CvIc+5P+c_DtZe?#>)sa)o3jD_ZKrz~aqB|r&+$vru# zbi}rS=3DR{g#HzOzy)3|Rhi-Gt&N-Z_tco`2b2%5uy4EEP1INjc#^H+DoSnt^b$l~ z;j1rcjiD^u@TW`vi2rH>O+kQBd30Y+8|T6&V$kn!2J zbP7&Jl;>Ws)YkR;RDPrvfZNFLY|R5#`OxvMF?OMim!t5z-c>Q8$2=ers5{()pm?ad z@XO>1G>JD~srS*WwyTF*Hb8-3E9>U2!~s5*WpX!x_7K{6IK9OAt1Dm#=*KxJWKXHa UeEexAs49T6ygIyC*8I)?06?E9b^rhX literal 0 HcmV?d00001 From 20d9befb9bd1f4abaec9861de78b269d0287b67f Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Wed, 25 Sep 2024 08:45:21 +0800 Subject: [PATCH 25/46] enh: handle memory leak when error occurs --- source/dnode/vnode/src/meta/metaQuery.c | 12 ++++++++++-- source/dnode/vnode/src/meta/metaSnapshot.c | 1 + source/dnode/vnode/src/meta/metaTable.c | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index 3f6d17a5a7..14207e7fb3 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -62,7 +62,10 @@ int metaGetTableEntryByVersion(SMetaReader *pReader, int64_t version, tb_uid_t u tDecoderInit(&pReader->coder, pReader->pBuf, pReader->szBuf); code = metaDecodeEntry(&pReader->coder, &pReader->me); - if (code) return code; + if (code) { + tDecoderClear(&pReader->coder); + return code; + } // taosMemoryFreeClear(pReader->me.colCmpr.pColCmpr); return 0; @@ -393,6 +396,7 @@ _query: tDecoderInit(&dc, pData, nData); int32_t code = metaDecodeEntry(&dc, &me); if (code) { + tDecoderClear(&dc); goto _err; } if (me.type == TSDB_SUPER_TABLE) { @@ -1277,7 +1281,11 @@ int32_t metaFilterTableIds(void *pVnode, SMetaFltParam *arg, SArray *pUids) { tDecoderInit(&dc, pData, nData); - TAOS_CHECK_GOTO(metaDecodeEntry(&dc, &oStbEntry), NULL, END); + code = metaDecodeEntry(&dc, &oStbEntry); + if (code) { + tDecoderClear(&dc); + goto END; + } if (oStbEntry.stbEntry.schemaTag.pSchema == NULL || oStbEntry.stbEntry.schemaTag.pSchema == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_INVALID_PARA, NULL, END); diff --git a/source/dnode/vnode/src/meta/metaSnapshot.c b/source/dnode/vnode/src/meta/metaSnapshot.c index ecd5feeb10..0936d8f092 100644 --- a/source/dnode/vnode/src/meta/metaSnapshot.c +++ b/source/dnode/vnode/src/meta/metaSnapshot.c @@ -605,6 +605,7 @@ int32_t getTableInfoFromSnapshot(SSnapContext* ctx, void** pBuf, int32_t* contLe tDecoderInit(&dc, pVal, vLen); ret = metaDecodeEntry(&dc, &me); if (ret < 0) { + tDecoderClear(&dc); ret = TAOS_GET_TERRNO(ret); goto END; } diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index d489535c02..8814e87140 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -565,6 +565,7 @@ int metaAlterSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { if (ret < 0) { metaError("vgId:%d, failed to decode stb:%s uid:%" PRId64 " since %s", TD_VID(pMeta->pVnode), pReq->name, pReq->suid, tstrerror(ret)); + tDecoderClear(&dc); tdbTbcClose(pTbDbc); tdbTbcClose(pUidIdxc); return terrno; @@ -1504,6 +1505,7 @@ static int metaDropTableByUid(SMeta *pMeta, tb_uid_t uid, int *type, tb_uid_t *p tDecoderInit(&tdc, tData, tLen); int32_t ret = metaDecodeEntry(&tdc, &stbEntry); if (ret < 0) { + tDecoderClear(&tdc); metaError("vgId:%d, failed to decode child table:%s uid:%" PRId64 " since %s", TD_VID(pMeta->pVnode), e.name, e.ctbEntry.suid, tstrerror(ret)); return ret; @@ -2399,6 +2401,7 @@ static int metaAddTagIndex(SMeta *pMeta, int64_t version, SVAlterTbReq *pAlterTb tDecoderInit(&dc, pVal, nVal); ret = metaDecodeEntry(&dc, &stbEntry); if (ret < 0) { + tDecoderClear(&dc); goto _err; } @@ -2540,6 +2543,7 @@ static int metaDropTagIndex(SMeta *pMeta, int64_t version, SVAlterTbReq *pAlterT tDecoderInit(&dc, pVal, nVal); ret = metaDecodeEntry(&dc, &stbEntry); if (ret < 0) { + tDecoderClear(&dc); goto _err; } From c54a89b47a2d22f075fa59d3e90635c4c824d28a Mon Sep 17 00:00:00 2001 From: wade zhang <95411902+gccgdb1234@users.noreply.github.com> Date: Wed, 25 Sep 2024 09:01:38 +0800 Subject: [PATCH 26/46] Update 99-parser-plugin.md --- docs/zh/06-advanced/05-data-in/99-parser-plugin.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/zh/06-advanced/05-data-in/99-parser-plugin.md b/docs/zh/06-advanced/05-data-in/99-parser-plugin.md index 7138fc28be..976a5e2c04 100644 --- a/docs/zh/06-advanced/05-data-in/99-parser-plugin.md +++ b/docs/zh/06-advanced/05-data-in/99-parser-plugin.md @@ -3,7 +3,7 @@ title: "数据解析插件" sidebar_label: "数据解析插件" --- -接入消息中间时,如果使用 json/regex 等模式解析器无法满足解析需求,同时 UDT 也无法满足性能需求的情况,可以自定义数据解析插件。 +接入消息中间件时,如果使用 json/regex 等模式解析器无法满足解析需求,同时使用 UDT(自定义解析器) 也无法满足性能需求的情况,可以自定义数据解析插件。 ## 插件概述 @@ -27,4 +27,4 @@ taosX Parser 插件是一个要求用 C/Rust 语言开发的 C ABI 兼容动态 | const char* parser_version() | 版本,方便定位问题。 | 无 | 字符串 | | struct parser_resp_t {
char* e; // Error if null.
void* p; // Success if contains.
}
parser_resp_t parser_new(char* ctx, uint32_t len); | 使用用户自定义配置生成解析器对象或返回错误信息。| char* ctx: 用户自定义配置字符串。
uint32_t len: 该字符串的二进制长度(不含 `\0`)。 | 返回值为结构体。
struct parser_resp_t {
char* e; // Error if null.
void* p; // Success if contains.
}
当创建对象失败时,第一个指针 e 不为 NULL。
当创建成功时,e 为 NULL,p 为解析器对象。 | | const char* parser_mutate(
void* parser,
const uint8_t* in_ptr, uint32_t in_len,
const void* uint8_t* out_ptr, uint32_t* out_len
) | 使用解析器对象对输入 payload 进行解析,返回结果为 JSON 格式 [u8] 。
返回的 JSON 将使用默认的 JSON 解析器进行完全解码(展开根数组和所有的对象)。 | void* parser: parser_new 生成的对象指针。
const uint8_t* in_ptr, uint32_t in_len:输入 Payload 的指针和 bytes 长度(不含 `\0`)。
const void* uint8_t* out_ptr, uint32_t * out_len:输出 JSON 字符串的指针和长度(不含 `\0`)。当 out_ptr 指向为空时,表示输出为空。当 out_ptr 不为空时,应用(taosx)在使用完毕后应当释放该内存空间。| 字符串指针。
当调用成功时,返回值为 NULL。
当调用失败时,返回错误信息字符串。 | -| void parser_free(void* parser); | 释放解析器对象内存。 | void* parser: parser_new 生成的对象指针。 | 无。 | \ No newline at end of file +| void parser_free(void* parser); | 释放解析器对象内存。 | void* parser: parser_new 生成的对象指针。 | 无。 | From 82962c5811f1a5e0648a168854105870a05fecab Mon Sep 17 00:00:00 2001 From: dmchen Date: Tue, 24 Sep 2024 09:20:06 +0000 Subject: [PATCH 27/46] fix/TD-31891-remove-void-monitor3 --- source/libs/monitor/src/monFramework.c | 60 +++++-- source/libs/monitor/src/monMain.c | 209 ++++++++++++++----------- 2 files changed, 159 insertions(+), 110 deletions(-) diff --git a/source/libs/monitor/src/monFramework.c b/source/libs/monitor/src/monFramework.c index 76473ccbb1..1e358ac8d4 100644 --- a/source/libs/monitor/src/monFramework.c +++ b/source/libs/monitor/src/monFramework.c @@ -100,7 +100,9 @@ extern char* tsMonFwUri; #define VNODE_ROLE "taosd_vnodes_info:role" void monInitMonitorFW(){ - (void)taos_collector_registry_default_init(); + if (taos_collector_registry_default_init() != 0) { + uError("failed to init default collector registry"); + } tsMonitor.metrics = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); taos_gauge_t *gauge = NULL; @@ -115,7 +117,9 @@ void monInitMonitorFW(){ for(int32_t i = 0; i < 25; i++){ gauge= taos_gauge_new(dnodes_gauges[i], "", dnodes_label_count, dnodes_sample_labels); if(taos_collector_registry_register_metric(gauge) == 1){ - (void)taos_counter_destroy(gauge); + if (taos_counter_destroy(gauge) != 0) { + uError("failed to delete metric %s", dnodes_gauges[i]); + } } if (taosHashPut(tsMonitor.metrics, dnodes_gauges[i], strlen(dnodes_gauges[i]), &gauge, sizeof(taos_gauge_t *)) != 0) { @@ -129,7 +133,9 @@ void monInitMonitorFW(){ for(int32_t i = 0; i < 3; i++){ gauge= taos_gauge_new(dnodes_data_gauges[i], "", dnodes_data_label_count, dnodes_data_sample_labels); if(taos_collector_registry_register_metric(gauge) == 1){ - (void)taos_counter_destroy(gauge); + if (taos_counter_destroy(gauge) != 0) { + uError("failed to delete metric %s", dnodes_data_gauges[i]); + } } if (taosHashPut(tsMonitor.metrics, dnodes_data_gauges[i], strlen(dnodes_data_gauges[i]), &gauge, sizeof(taos_gauge_t *)) != 0) { @@ -143,7 +149,9 @@ void monInitMonitorFW(){ for(int32_t i = 0; i < 3; i++){ gauge= taos_gauge_new(dnodes_log_gauges[i], "", dnodes_log_label_count, dnodes_log_sample_labels); if(taos_collector_registry_register_metric(gauge) == 1){ - (void)taos_counter_destroy(gauge); + if (taos_counter_destroy(gauge) != 0) { + uError("failed to delete metric %s", dnodes_log_gauges[i]); + } } if (taosHashPut(tsMonitor.metrics, dnodes_log_gauges[i], strlen(dnodes_log_gauges[i]), &gauge, sizeof(taos_gauge_t *)) != 0) { @@ -154,7 +162,9 @@ void monInitMonitorFW(){ void monCleanupMonitorFW(){ taosHashCleanup(tsMonitor.metrics); - (void)taos_collector_registry_destroy(TAOS_COLLECTOR_REGISTRY_DEFAULT); + if (taos_collector_registry_destroy(TAOS_COLLECTOR_REGISTRY_DEFAULT) != 0) { + uError("failed to destroy default collector registry"); + } TAOS_COLLECTOR_REGISTRY_DEFAULT = NULL; } @@ -174,7 +184,9 @@ void monGenClusterInfoTable(SMonInfo *pMonitor){ uError("failed to delete metric %s", metric_names[i]); } - (void)taosHashRemove(tsMonitor.metrics, metric_names[i], strlen(metric_names[i])); + if (taosHashRemove(tsMonitor.metrics, metric_names[i], strlen(metric_names[i])) != 0) { + uError("failed to remove metric %s", metric_names[i]); + } } if(pBasicInfo->cluster_id == 0) { @@ -191,7 +203,9 @@ void monGenClusterInfoTable(SMonInfo *pMonitor){ for(int32_t i = 0; i < 18; i++){ gauge= taos_gauge_new(metric_names[i], "", label_count, sample_labels1); if(taos_collector_registry_register_metric(gauge) == 1){ - (void)taos_counter_destroy(gauge); + if (taos_counter_destroy(gauge) != 0) { + uError("failed to delete metric %s", metric_names[i]); + } } if (taosHashPut(tsMonitor.metrics, metric_names[i], strlen(metric_names[i]), &gauge, sizeof(taos_gauge_t *)) != 0) { uError("failed to add cluster gauge at%d:%s", i, metric_names[i]); @@ -317,11 +331,15 @@ void monGenVgroupInfoTable(SMonInfo *pMonitor){ const char *vgroup_sample_labels[] = {"cluster_id", "vgroup_id", "database_name"}; taos_gauge_t *tableNumGauge = taos_gauge_new(TABLES_NUM, "", vgroup_label_count, vgroup_sample_labels); if(taos_collector_registry_register_metric(tableNumGauge) == 1){ - (void)taos_counter_destroy(tableNumGauge); + if (taos_counter_destroy(tableNumGauge) != 0) { + uError("failed to delete metric " TABLES_NUM); + } } taos_gauge_t *statusGauge = taos_gauge_new(STATUS, "", vgroup_label_count, vgroup_sample_labels); if(taos_collector_registry_register_metric(statusGauge) == 1){ - (void)taos_counter_destroy(statusGauge); + if (taos_counter_destroy(statusGauge) != 0) { + uError("failed to delete metric " STATUS); + } } char cluster_id[TSDB_CLUSTER_ID_LEN] = {0}; @@ -530,7 +548,9 @@ void monGenDnodeStatusInfoTable(SMonInfo *pMonitor){ gauge= taos_gauge_new(DNODE_STATUS, "", dnodes_label_count, dnodes_sample_labels); if(taos_collector_registry_register_metric(gauge) == 1){ - (void)taos_counter_destroy(gauge); + if (taos_counter_destroy(gauge) != 0) { + uError("failed to delete metric " DNODE_STATUS); + } } char cluster_id[TSDB_CLUSTER_ID_LEN]; @@ -633,7 +653,9 @@ void monGenMnodeRoleTable(SMonInfo *pMonitor){ uError("failed to delete metric %s", mnodes_role_gauges[i]); } - (void)taosHashRemove(tsMonitor.metrics, mnodes_role_gauges[i], strlen(mnodes_role_gauges[i])); + if (taosHashRemove(tsMonitor.metrics, mnodes_role_gauges[i], strlen(mnodes_role_gauges[i])) != 0) { + uError("failed to remove metric %s", mnodes_role_gauges[i]); + } } SMonClusterInfo *pInfo = &pMonitor->mmInfo.cluster; @@ -647,7 +669,9 @@ void monGenMnodeRoleTable(SMonInfo *pMonitor){ for(int32_t i = 0; i < 1; i++){ gauge= taos_gauge_new(mnodes_role_gauges[i], "", mnodes_role_label_count, mnodes_role_sample_labels); if(taos_collector_registry_register_metric(gauge) == 1){ - (void)taos_counter_destroy(gauge); + if (taos_counter_destroy(gauge) != 0) { + uError("failed to destroy gauge"); + } } if (taosHashPut(tsMonitor.metrics, mnodes_role_gauges[i], strlen(mnodes_role_gauges[i]), &gauge, sizeof(taos_gauge_t *)) != 0) { @@ -702,7 +726,9 @@ void monGenVnodeRoleTable(SMonInfo *pMonitor){ uError("failed to delete metric %s", vnodes_role_gauges[i]); } - (void)taosHashRemove(tsMonitor.metrics, vnodes_role_gauges[i], strlen(vnodes_role_gauges[i])); + if (taosHashRemove(tsMonitor.metrics, vnodes_role_gauges[i], strlen(vnodes_role_gauges[i])) != 0) { + uError("failed to remove metric %s", vnodes_role_gauges[i]); + } } SMonVgroupInfo *pInfo = &pMonitor->mmInfo.vgroup; @@ -716,7 +742,9 @@ void monGenVnodeRoleTable(SMonInfo *pMonitor){ for(int32_t i = 0; i < 1; i++){ gauge= taos_gauge_new(vnodes_role_gauges[i], "", vnodes_role_label_count, vnodes_role_sample_labels); if(taos_collector_registry_register_metric(gauge) == 1){ - (void)taos_counter_destroy(gauge); + if (taos_counter_destroy(gauge) != 0) { + uError("failed to destroy gauge"); + } } if (taosHashPut(tsMonitor.metrics, vnodes_role_gauges[i], strlen(vnodes_role_gauges[i]), &gauge, sizeof(taos_gauge_t *)) != 0) { @@ -774,7 +802,9 @@ void monSendPromReport() { tmp) != 0) { uError("failed to send monitor msg"); } else { - (void)taos_collector_registry_clear_batch(TAOS_COLLECTOR_REGISTRY_DEFAULT); + if (taos_collector_registry_clear_batch(TAOS_COLLECTOR_REGISTRY_DEFAULT) != 0) { + uError("failed to clear batch"); + } } taosMemoryFreeClear(pCont); } diff --git a/source/libs/monitor/src/monMain.c b/source/libs/monitor/src/monMain.c index f581d8c83d..ba075e996a 100644 --- a/source/libs/monitor/src/monMain.c +++ b/source/libs/monitor/src/monMain.c @@ -145,7 +145,9 @@ void monInitVnode() { counter = taos_counter_new(VNODE_METRIC_SQL_COUNT, "counter for insert sql", label_count, sample_labels); uDebug("new metric:%p", counter); if (taos_collector_registry_register_metric(counter) == 1) { - (void)taos_counter_destroy(counter); + if (taos_counter_destroy(counter) != 0) { + uError("failed to destroy metric:%p", counter); + } uError("failed to register metric:%p", counter); } else { tsInsertCounter = counter; @@ -226,14 +228,17 @@ static void monGenBasicJson(SMonInfo *pMonitor) { SJson *pJson = pMonitor->pJson; char buf[40] = {0}; - (void)taosFormatUtcTime(buf, sizeof(buf), pMonitor->curTime, TSDB_TIME_PRECISION_MILLI); + if (taosFormatUtcTime(buf, sizeof(buf), pMonitor->curTime, TSDB_TIME_PRECISION_MILLI) == 0) { + uError("failed to format time"); + return; + } - (void)tjsonAddStringToObject(pJson, "ts", buf); - (void)tjsonAddDoubleToObject(pJson, "dnode_id", pInfo->dnode_id); - (void)tjsonAddStringToObject(pJson, "dnode_ep", pInfo->dnode_ep); + if (tjsonAddStringToObject(pJson, "ts", buf) != 0) uError("failed to add ts"); + if (tjsonAddDoubleToObject(pJson, "dnode_id", pInfo->dnode_id) != 0) uError("failed to add dnode_id"); + if (tjsonAddStringToObject(pJson, "dnode_ep", pInfo->dnode_ep) != 0) uError("failed to add dnode_ep"); snprintf(buf, sizeof(buf), "%" PRId64, pInfo->cluster_id); - (void)tjsonAddStringToObject(pJson, "cluster_id", buf); - (void)tjsonAddDoubleToObject(pJson, "protocol", pInfo->protocol); + if (tjsonAddStringToObject(pJson, "cluster_id", buf) != 0) uError("failed to add cluster_id"); + if (tjsonAddDoubleToObject(pJson, "protocol", pInfo->protocol) != 0) uError("failed to add protocol"); } static void monGenBasicJsonBasic(SMonInfo *pMonitor) { @@ -244,12 +249,12 @@ static void monGenBasicJsonBasic(SMonInfo *pMonitor) { char buf[40] = {0}; sprintf(buf, "%" PRId64, taosGetTimestamp(TSDB_TIME_PRECISION_MILLI)); - (void)tjsonAddStringToObject(pJson, "ts", buf); - (void)tjsonAddDoubleToObject(pJson, "dnode_id", pInfo->dnode_id); - (void)tjsonAddStringToObject(pJson, "dnode_ep", pInfo->dnode_ep); + if (tjsonAddStringToObject(pJson, "ts", buf) != 0) uError("failed to add ts"); + if (tjsonAddDoubleToObject(pJson, "dnode_id", pInfo->dnode_id) != 0) uError("failed to add dnode_id"); + if (tjsonAddStringToObject(pJson, "dnode_ep", pInfo->dnode_ep) != 0) uError("failed to add dnode_ep"); snprintf(buf, sizeof(buf), "%" PRId64, pInfo->cluster_id); - (void)tjsonAddStringToObject(pJson, "cluster_id", buf); - (void)tjsonAddDoubleToObject(pJson, "protocol", pInfo->protocol); + if (tjsonAddStringToObject(pJson, "cluster_id", buf) != 0) uError("failed to add cluster_id"); + if (tjsonAddDoubleToObject(pJson, "protocol", pInfo->protocol) != 0) uError("failed to add protocol"); } static void monGenClusterJson(SMonInfo *pMonitor) { @@ -263,21 +268,24 @@ static void monGenClusterJson(SMonInfo *pMonitor) { return; } - (void)tjsonAddStringToObject(pJson, "first_ep", pInfo->first_ep); - (void)tjsonAddDoubleToObject(pJson, "first_ep_dnode_id", pInfo->first_ep_dnode_id); - (void)tjsonAddStringToObject(pJson, "version", pInfo->version); - (void)tjsonAddDoubleToObject(pJson, "master_uptime", pInfo->master_uptime); - (void)tjsonAddDoubleToObject(pJson, "monitor_interval", pInfo->monitor_interval); - (void)tjsonAddDoubleToObject(pJson, "dbs_total", pInfo->dbs_total); - (void)tjsonAddDoubleToObject(pJson, "tbs_total", pInfo->tbs_total); - (void)tjsonAddDoubleToObject(pJson, "stbs_total", pInfo->stbs_total); - (void)tjsonAddDoubleToObject(pJson, "vgroups_total", pInfo->vgroups_total); - (void)tjsonAddDoubleToObject(pJson, "vgroups_alive", pInfo->vgroups_alive); - (void)tjsonAddDoubleToObject(pJson, "vnodes_total", pInfo->vnodes_total); - (void)tjsonAddDoubleToObject(pJson, "vnodes_alive", pInfo->vnodes_alive); - (void)tjsonAddDoubleToObject(pJson, "connections_total", pInfo->connections_total); - (void)tjsonAddDoubleToObject(pJson, "topics_total", pInfo->topics_toal); - (void)tjsonAddDoubleToObject(pJson, "streams_total", pInfo->streams_total); + if (tjsonAddStringToObject(pJson, "first_ep", pInfo->first_ep) != 0) uError("failed to add first_ep"); + if (tjsonAddDoubleToObject(pJson, "first_ep_dnode_id", pInfo->first_ep_dnode_id) != 0) + uError("failed to add first_ep_dnode_id"); + if (tjsonAddStringToObject(pJson, "version", pInfo->version) != 0) uError("failed to add version"); + if (tjsonAddDoubleToObject(pJson, "master_uptime", pInfo->master_uptime) != 0) uError("failed to add master_uptime"); + if (tjsonAddDoubleToObject(pJson, "monitor_interval", pInfo->monitor_interval) != 0) + uError("failed to add monitor_interval"); + if (tjsonAddDoubleToObject(pJson, "dbs_total", pInfo->dbs_total) != 0) uError("failed to add dbs_total"); + if (tjsonAddDoubleToObject(pJson, "tbs_total", pInfo->tbs_total) != 0) uError("failed to add tbs_total"); + if (tjsonAddDoubleToObject(pJson, "stbs_total", pInfo->stbs_total) != 0) uError("failed to add stbs_total"); + if (tjsonAddDoubleToObject(pJson, "vgroups_total", pInfo->vgroups_total) != 0) uError("failed to add vgroups_total"); + if (tjsonAddDoubleToObject(pJson, "vgroups_alive", pInfo->vgroups_alive) != 0) uError("failed to add vgroups_alive"); + if (tjsonAddDoubleToObject(pJson, "vnodes_total", pInfo->vnodes_total) != 0) uError("failed to add vnodes_total"); + if (tjsonAddDoubleToObject(pJson, "vnodes_alive", pInfo->vnodes_alive) != 0) uError("failed to add vnodes_alive"); + if (tjsonAddDoubleToObject(pJson, "connections_total", pInfo->connections_total) != 0) + uError("failed to add connections_total"); + if (tjsonAddDoubleToObject(pJson, "topics_total", pInfo->topics_toal) != 0) uError("failed to add topics_total"); + if (tjsonAddDoubleToObject(pJson, "streams_total", pInfo->streams_total) != 0) uError("failed to add streams_total"); SJson *pDnodesJson = tjsonAddArrayToObject(pJson, "dnodes"); if (pDnodesJson == NULL) return; @@ -287,9 +295,9 @@ static void monGenClusterJson(SMonInfo *pMonitor) { if (pDnodeJson == NULL) continue; SMonDnodeDesc *pDnodeDesc = taosArrayGet(pInfo->dnodes, i); - (void)tjsonAddDoubleToObject(pDnodeJson, "dnode_id", pDnodeDesc->dnode_id); - (void)tjsonAddStringToObject(pDnodeJson, "dnode_ep", pDnodeDesc->dnode_ep); - (void)tjsonAddStringToObject(pDnodeJson, "status", pDnodeDesc->status); + if (tjsonAddDoubleToObject(pDnodeJson, "dnode_id", pDnodeDesc->dnode_id) != 0) uError("failed to add dnode_id"); + if (tjsonAddStringToObject(pDnodeJson, "dnode_ep", pDnodeDesc->dnode_ep) != 0) uError("failed to add dnode_ep"); + if (tjsonAddStringToObject(pDnodeJson, "status", pDnodeDesc->status) != 0) uError("failed to add status"); if (tjsonAddItemToArray(pDnodesJson, pDnodeJson) != 0) tjsonDelete(pDnodeJson); } @@ -302,9 +310,9 @@ static void monGenClusterJson(SMonInfo *pMonitor) { if (pMnodeJson == NULL) continue; SMonMnodeDesc *pMnodeDesc = taosArrayGet(pInfo->mnodes, i); - (void)tjsonAddDoubleToObject(pMnodeJson, "mnode_id", pMnodeDesc->mnode_id); - (void)tjsonAddStringToObject(pMnodeJson, "mnode_ep", pMnodeDesc->mnode_ep); - (void)tjsonAddStringToObject(pMnodeJson, "role", pMnodeDesc->role); + if (tjsonAddDoubleToObject(pMnodeJson, "mnode_id", pMnodeDesc->mnode_id) != 0) uError("failed to add mnode_id"); + if (tjsonAddStringToObject(pMnodeJson, "mnode_ep", pMnodeDesc->mnode_ep) != 0) uError("failed to add mnode_ep"); + if (tjsonAddStringToObject(pMnodeJson, "role", pMnodeDesc->role) != 0) uError("failed to add role"); if (tjsonAddItemToArray(pMnodesJson, pMnodeJson) != 0) tjsonDelete(pMnodeJson); } @@ -314,11 +322,11 @@ static void monGenClusterJsonBasic(SMonInfo *pMonitor) { SMonClusterInfo *pInfo = &pMonitor->mmInfo.cluster; if (pMonitor->mmInfo.cluster.first_ep_dnode_id == 0) return; - // (void)tjsonAddStringToObject(pMonitor->pJson, "first_ep", pInfo->first_ep); - (void)tjsonAddStringToObject(pMonitor->pJson, "first_ep", tsFirst); - (void)tjsonAddDoubleToObject(pMonitor->pJson, "first_ep_dnode_id", pInfo->first_ep_dnode_id); - (void)tjsonAddStringToObject(pMonitor->pJson, "cluster_version", pInfo->version); - // (void)tjsonAddDoubleToObject(pMonitor->pJson, "monitor_interval", pInfo->monitor_interval); + if (tjsonAddStringToObject(pMonitor->pJson, "first_ep", tsFirst) != 0) uError("failed to add first_ep"); + if (tjsonAddDoubleToObject(pMonitor->pJson, "first_ep_dnode_id", pInfo->first_ep_dnode_id) != 0) + uError("failed to add first_ep_dnode_id"); + if (tjsonAddStringToObject(pMonitor->pJson, "cluster_version", pInfo->version) != 0) + uError("failed to add cluster_version"); } static void monGenVgroupJson(SMonInfo *pMonitor) { @@ -337,10 +345,13 @@ static void monGenVgroupJson(SMonInfo *pMonitor) { } SMonVgroupDesc *pVgroupDesc = taosArrayGet(pInfo->vgroups, i); - (void)tjsonAddDoubleToObject(pVgroupJson, "vgroup_id", pVgroupDesc->vgroup_id); - (void)tjsonAddStringToObject(pVgroupJson, "database_name", pVgroupDesc->database_name); - (void)tjsonAddDoubleToObject(pVgroupJson, "tables_num", pVgroupDesc->tables_num); - (void)tjsonAddStringToObject(pVgroupJson, "status", pVgroupDesc->status); + if (tjsonAddDoubleToObject(pVgroupJson, "vgroup_id", pVgroupDesc->vgroup_id) != 0) + uError("failed to add vgroup_id"); + if (tjsonAddStringToObject(pVgroupJson, "database_name", pVgroupDesc->database_name) != 0) + uError("failed to add database_name"); + if (tjsonAddDoubleToObject(pVgroupJson, "tables_num", pVgroupDesc->tables_num) != 0) + uError("failed to add tables_num"); + if (tjsonAddStringToObject(pVgroupJson, "status", pVgroupDesc->status) != 0) uError("failed to add status"); SJson *pVnodesJson = tjsonAddArrayToObject(pVgroupJson, "vnodes"); if (pVnodesJson == NULL) continue; @@ -352,8 +363,9 @@ static void monGenVgroupJson(SMonInfo *pMonitor) { SJson *pVnodeJson = tjsonCreateObject(); if (pVnodeJson == NULL) continue; - (void)tjsonAddDoubleToObject(pVnodeJson, "dnode_id", pVnodeDesc->dnode_id); - (void)tjsonAddStringToObject(pVnodeJson, "vnode_role", pVnodeDesc->vnode_role); + if (tjsonAddDoubleToObject(pVnodeJson, "dnode_id", pVnodeDesc->dnode_id) != 0) uError("failed to add dnode_id"); + if (tjsonAddStringToObject(pVnodeJson, "vnode_role", pVnodeDesc->vnode_role) != 0) + uError("failed to add vnode_role"); if (tjsonAddItemToArray(pVnodesJson, pVnodeJson) != 0) tjsonDelete(pVnodeJson); } @@ -376,8 +388,9 @@ static void monGenStbJson(SMonInfo *pMonitor) { } SMonStbDesc *pStbDesc = taosArrayGet(pInfo->stbs, i); - (void)tjsonAddStringToObject(pStbJson, "stb_name", pStbDesc->stb_name); - (void)tjsonAddStringToObject(pStbJson, "database_name", pStbDesc->database_name); + if (tjsonAddStringToObject(pStbJson, "stb_name", pStbDesc->stb_name) != 0) uError("failed to add stb_name"); + if (tjsonAddStringToObject(pStbJson, "database_name", pStbDesc->database_name) != 0) + uError("failed to add database_name"); } } @@ -392,9 +405,11 @@ static void monGenGrantJson(SMonInfo *pMonitor) { return; } - (void)tjsonAddDoubleToObject(pJson, "expire_time", pInfo->expire_time); - (void)tjsonAddDoubleToObject(pJson, "timeseries_used", pInfo->timeseries_used); - (void)tjsonAddDoubleToObject(pJson, "timeseries_total", pInfo->timeseries_total); + if (tjsonAddDoubleToObject(pJson, "expire_time", pInfo->expire_time) != 0) uError("failed to add expire_time"); + if (tjsonAddDoubleToObject(pJson, "timeseries_used", pInfo->timeseries_used) != 0) + uError("failed to add timeseries_used"); + if (tjsonAddDoubleToObject(pJson, "timeseries_total", pInfo->timeseries_total) != 0) + uError("failed to add timeseries_total"); } static void monGenDnodeJson(SMonInfo *pMonitor) { @@ -451,36 +466,40 @@ static void monGenDnodeJson(SMonInfo *pMonitor) { double io_read_disk_rate = io_read_disk / interval; double io_write_disk_rate = io_write_disk / interval; - (void)tjsonAddDoubleToObject(pJson, "uptime", pInfo->uptime); - (void)tjsonAddDoubleToObject(pJson, "cpu_engine", cpu_engine); - (void)tjsonAddDoubleToObject(pJson, "cpu_system", pSys->cpu_system); - (void)tjsonAddDoubleToObject(pJson, "cpu_cores", pSys->cpu_cores); - (void)tjsonAddDoubleToObject(pJson, "mem_engine", mem_engine); - (void)tjsonAddDoubleToObject(pJson, "mem_system", pSys->mem_system); - (void)tjsonAddDoubleToObject(pJson, "mem_total", pSys->mem_total); - (void)tjsonAddDoubleToObject(pJson, "disk_engine", pSys->disk_engine); - (void)tjsonAddDoubleToObject(pJson, "disk_used", pSys->disk_used); - (void)tjsonAddDoubleToObject(pJson, "disk_total", pSys->disk_total); - (void)tjsonAddDoubleToObject(pJson, "net_in", net_in_rate); - (void)tjsonAddDoubleToObject(pJson, "net_out", net_out_rate); - (void)tjsonAddDoubleToObject(pJson, "io_read", io_read_rate); - (void)tjsonAddDoubleToObject(pJson, "io_write", io_write_rate); - (void)tjsonAddDoubleToObject(pJson, "io_read_disk", io_read_disk_rate); - (void)tjsonAddDoubleToObject(pJson, "io_write_disk", io_write_disk_rate); - (void)tjsonAddDoubleToObject(pJson, "req_select", pStat->numOfSelectReqs); - (void)tjsonAddDoubleToObject(pJson, "req_select_rate", req_select_rate); - (void)tjsonAddDoubleToObject(pJson, "req_insert", pStat->numOfInsertReqs); - (void)tjsonAddDoubleToObject(pJson, "req_insert_success", pStat->numOfInsertSuccessReqs); - (void)tjsonAddDoubleToObject(pJson, "req_insert_rate", req_insert_rate); - (void)tjsonAddDoubleToObject(pJson, "req_insert_batch", pStat->numOfBatchInsertReqs); - (void)tjsonAddDoubleToObject(pJson, "req_insert_batch_success", pStat->numOfBatchInsertSuccessReqs); - (void)tjsonAddDoubleToObject(pJson, "req_insert_batch_rate", req_insert_batch_rate); - (void)tjsonAddDoubleToObject(pJson, "errors", pStat->errors); - (void)tjsonAddDoubleToObject(pJson, "vnodes_num", pStat->totalVnodes); - (void)tjsonAddDoubleToObject(pJson, "masters", pStat->masterNum); - (void)tjsonAddDoubleToObject(pJson, "has_mnode", pInfo->has_mnode); - (void)tjsonAddDoubleToObject(pJson, "has_qnode", pInfo->has_qnode); - (void)tjsonAddDoubleToObject(pJson, "has_snode", pInfo->has_snode); + if (tjsonAddDoubleToObject(pJson, "uptime", pInfo->uptime) != 0) uError("failed to add uptime"); + if (tjsonAddDoubleToObject(pJson, "cpu_engine", cpu_engine) != 0) uError("failed to add cpu_engine"); + if (tjsonAddDoubleToObject(pJson, "cpu_system", pSys->cpu_system) != 0) uError("failed to add cpu_system"); + if (tjsonAddDoubleToObject(pJson, "cpu_cores", pSys->cpu_cores) != 0) uError("failed to add cpu_cores"); + if (tjsonAddDoubleToObject(pJson, "mem_engine", mem_engine) != 0) uError("failed to add mem_engine"); + if (tjsonAddDoubleToObject(pJson, "mem_system", pSys->mem_system) != 0) uError("failed to add mem_system"); + if (tjsonAddDoubleToObject(pJson, "mem_total", pSys->mem_total) != 0) uError("failed to add mem_total"); + if (tjsonAddDoubleToObject(pJson, "disk_engine", pSys->disk_engine) != 0) uError("failed to add disk_engine"); + if (tjsonAddDoubleToObject(pJson, "disk_used", pSys->disk_used) != 0) uError("failed to add disk_used"); + if (tjsonAddDoubleToObject(pJson, "disk_total", pSys->disk_total) != 0) uError("failed to add disk_total"); + if (tjsonAddDoubleToObject(pJson, "net_in", net_in_rate) != 0) uError("failed to add net_in"); + if (tjsonAddDoubleToObject(pJson, "net_out", net_out_rate) != 0) uError("failed to add net_out"); + if (tjsonAddDoubleToObject(pJson, "io_read", io_read_rate) != 0) uError("failed to add io_read"); + if (tjsonAddDoubleToObject(pJson, "io_write", io_write_rate) != 0) uError("failed to add io_write"); + if (tjsonAddDoubleToObject(pJson, "io_read_disk", io_read_disk_rate) != 0) uError("failed to add io_read_disk"); + if (tjsonAddDoubleToObject(pJson, "io_write_disk", io_write_disk_rate) != 0) uError("failed to add io_write_disk"); + if (tjsonAddDoubleToObject(pJson, "req_select", pStat->numOfSelectReqs) != 0) uError("failed to add req_select"); + if (tjsonAddDoubleToObject(pJson, "req_select_rate", req_select_rate) != 0) uError("failed to add req_select_rate"); + if (tjsonAddDoubleToObject(pJson, "req_insert", pStat->numOfInsertReqs) != 0) uError("failed to add req_insert"); + if (tjsonAddDoubleToObject(pJson, "req_insert_success", pStat->numOfInsertSuccessReqs) != 0) + uError("failed to add req_insert_success"); + if (tjsonAddDoubleToObject(pJson, "req_insert_rate", req_insert_rate) != 0) uError("failed to add req_insert_rate"); + if (tjsonAddDoubleToObject(pJson, "req_insert_batch", pStat->numOfBatchInsertReqs) != 0) + uError("failed to add req_insert_batch"); + if (tjsonAddDoubleToObject(pJson, "req_insert_batch_success", pStat->numOfBatchInsertSuccessReqs) != 0) + uError("failed to add req_insert_batch_success"); + if (tjsonAddDoubleToObject(pJson, "req_insert_batch_rate", req_insert_batch_rate) != 0) + uError("failed to add req_insert_batch_rate"); + if (tjsonAddDoubleToObject(pJson, "errors", pStat->errors) != 0) uError("failed to add errors"); + if (tjsonAddDoubleToObject(pJson, "vnodes_num", pStat->totalVnodes) != 0) uError("failed to add vnodes_num"); + if (tjsonAddDoubleToObject(pJson, "masters", pStat->masterNum) != 0) uError("failed to add masters"); + if (tjsonAddDoubleToObject(pJson, "has_mnode", pInfo->has_mnode) != 0) uError("failed to add has_mnode"); + if (tjsonAddDoubleToObject(pJson, "has_qnode", pInfo->has_qnode) != 0) uError("failed to add has_qnode"); + if (tjsonAddDoubleToObject(pJson, "has_snode", pInfo->has_snode) != 0) uError("failed to add has_snode"); } static void monGenDiskJson(SMonInfo *pMonitor) { @@ -515,18 +534,18 @@ static void monGenDiskJson(SMonInfo *pMonitor) { SJson *pLogdirJson = tjsonCreateObject(); if (pLogdirJson == NULL) return; if (tjsonAddItemToObject(pJson, "logdir", pLogdirJson) != 0) return; - (void)tjsonAddStringToObject(pLogdirJson, "name", pLogDesc->name); - (void)tjsonAddDoubleToObject(pLogdirJson, "avail", pLogDesc->size.avail); - (void)tjsonAddDoubleToObject(pLogdirJson, "used", pLogDesc->size.used); - (void)tjsonAddDoubleToObject(pLogdirJson, "total", pLogDesc->size.total); + if (tjsonAddStringToObject(pLogdirJson, "name", pLogDesc->name) != 0) uError("failed to add string to json"); + if (tjsonAddDoubleToObject(pLogdirJson, "avail", pLogDesc->size.avail) != 0) uError("failed to add double to json"); + if (tjsonAddDoubleToObject(pLogdirJson, "used", pLogDesc->size.used) != 0) uError("failed to add double to json"); + if (tjsonAddDoubleToObject(pLogdirJson, "total", pLogDesc->size.total) != 0) uError("failed to add double to json"); SJson *pTempdirJson = tjsonCreateObject(); if (pTempdirJson == NULL) return; if (tjsonAddItemToObject(pJson, "tempdir", pTempdirJson) != 0) return; - (void)tjsonAddStringToObject(pTempdirJson, "name", pTempDesc->name); - (void)tjsonAddDoubleToObject(pTempdirJson, "avail", pTempDesc->size.avail); - (void)tjsonAddDoubleToObject(pTempdirJson, "used", pTempDesc->size.used); - (void)tjsonAddDoubleToObject(pTempdirJson, "total", pTempDesc->size.total); + if (tjsonAddStringToObject(pTempdirJson, "name", pTempDesc->name) != 0) uError("failed to add string to json"); + if (tjsonAddDoubleToObject(pTempdirJson, "avail", pTempDesc->size.avail) != 0) uError("failed to add double to json"); + if (tjsonAddDoubleToObject(pTempdirJson, "used", pTempDesc->size.used) != 0) uError("failed to add double to json"); + if (tjsonAddDoubleToObject(pTempdirJson, "total", pTempDesc->size.total) != 0) uError("failed to add double to json"); } static const char *monLogLevelStr(ELogLevel level) { @@ -571,26 +590,26 @@ static void monGenLogJson(SMonInfo *pMonitor) { SJson *pLogError = tjsonCreateObject(); if (pLogError == NULL) return; - (void)tjsonAddStringToObject(pLogError, "level", "error"); - (void)tjsonAddDoubleToObject(pLogError, "total", numOfErrorLogs); + if (tjsonAddStringToObject(pLogError, "level", "error") != 0) uError("failed to add string to json"); + if (tjsonAddDoubleToObject(pLogError, "total", numOfErrorLogs) != 0) uError("failed to add double to json"); if (tjsonAddItemToArray(pSummaryJson, pLogError) != 0) tjsonDelete(pLogError); SJson *pLogInfo = tjsonCreateObject(); if (pLogInfo == NULL) return; - (void)tjsonAddStringToObject(pLogInfo, "level", "info"); - (void)tjsonAddDoubleToObject(pLogInfo, "total", numOfInfoLogs); + if (tjsonAddStringToObject(pLogInfo, "level", "info") != 0) uError("failed to add string to json"); + if (tjsonAddDoubleToObject(pLogInfo, "total", numOfInfoLogs) != 0) uError("failed to add double to json"); if (tjsonAddItemToArray(pSummaryJson, pLogInfo) != 0) tjsonDelete(pLogInfo); SJson *pLogDebug = tjsonCreateObject(); if (pLogDebug == NULL) return; - (void)tjsonAddStringToObject(pLogDebug, "level", "debug"); - (void)tjsonAddDoubleToObject(pLogDebug, "total", numOfDebugLogs); + if (tjsonAddStringToObject(pLogDebug, "level", "debug") != 0) uError("failed to add string to json"); + if (tjsonAddDoubleToObject(pLogDebug, "total", numOfDebugLogs) != 0) uError("failed to add double to json"); if (tjsonAddItemToArray(pSummaryJson, pLogDebug) != 0) tjsonDelete(pLogDebug); SJson *pLogTrace = tjsonCreateObject(); if (pLogTrace == NULL) return; - (void)tjsonAddStringToObject(pLogTrace, "level", "trace"); - (void)tjsonAddDoubleToObject(pLogTrace, "total", numOfTraceLogs); + if (tjsonAddStringToObject(pLogTrace, "level", "trace") != 0) uError("failed to add string to json"); + if (tjsonAddDoubleToObject(pLogTrace, "total", numOfTraceLogs) != 0) uError("failed to add double to json"); if (tjsonAddItemToArray(pSummaryJson, pLogTrace) != 0) tjsonDelete(pLogTrace); } From 9f3990b8ed5cbff1ea62b1170e9ef309f2d27015 Mon Sep 17 00:00:00 2001 From: dmchen Date: Wed, 25 Sep 2024 01:10:24 +0000 Subject: [PATCH 28/46] fix/TD-31891-remove-void-monitor3-fix-case --- source/libs/monitor/src/monMain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/monitor/src/monMain.c b/source/libs/monitor/src/monMain.c index ba075e996a..744177b7a1 100644 --- a/source/libs/monitor/src/monMain.c +++ b/source/libs/monitor/src/monMain.c @@ -228,7 +228,7 @@ static void monGenBasicJson(SMonInfo *pMonitor) { SJson *pJson = pMonitor->pJson; char buf[40] = {0}; - if (taosFormatUtcTime(buf, sizeof(buf), pMonitor->curTime, TSDB_TIME_PRECISION_MILLI) == 0) { + if (taosFormatUtcTime(buf, sizeof(buf), pMonitor->curTime, TSDB_TIME_PRECISION_MILLI) != 0) { uError("failed to format time"); return; } From 92146c510adf2fb4f149b62dc1d1396b2bf71fd3 Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 25 Sep 2024 09:22:56 +0800 Subject: [PATCH 29/46] fix: unify the error code when drop stable --- source/libs/parser/src/parTranslater.c | 9 +++++--- tests/system-test/1-insert/drop.py | 29 +++++++++++++++++++------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 798793bf55..3781479f36 100755 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -14705,7 +14705,7 @@ static int32_t rewriteDropSuperTablewithOpt(STranslateContext* pCxt, SQuery* pQu break; } if (!isdigit(pStmt->tableName[i])) { - return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_TABLE_NOT_EXIST, "Table does not exist: `%s`.`%s`", + return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_TABLE_NOT_EXIST, "STable not exist: `%s`.`%s`", pStmt->dbName, pStmt->tableName); } } @@ -14715,8 +14715,11 @@ static int32_t rewriteDropSuperTablewithOpt(STranslateContext* pCxt, SQuery* pQu toName(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, &name); code = getTargetName(pCxt, &name, pTableName); if (TSDB_CODE_SUCCESS != code) { - return generateSyntaxErrMsgExt(&pCxt->msgBuf, code, "%s: db:`%s`, tbuid:`%s`", tstrerror(code), pStmt->dbName, - pStmt->tableName); + return generateSyntaxErrMsgExt(&pCxt->msgBuf, code, "%s: db:`%s`, tbuid:`%s`", + (code == TSDB_CODE_PAR_TABLE_NOT_EXIST || code == TSDB_CODE_TDB_TABLE_NOT_EXIST) + ? "STable not exist" + : tstrerror(code), + pStmt->dbName, pStmt->tableName); } tstrncpy(pStmt->tableName, pTableName, TSDB_TABLE_NAME_LEN); // rewrite table uid to table name diff --git a/tests/system-test/1-insert/drop.py b/tests/system-test/1-insert/drop.py index 7e41aad4a8..e28b24b5ca 100644 --- a/tests/system-test/1-insert/drop.py +++ b/tests/system-test/1-insert/drop.py @@ -147,13 +147,28 @@ class TDTestCase: if i == 0: dropTable = f'drop table with `{stb_result[1]}`.`{stb_result[10]}`,' dropStable = f'drop stable with `{stb_result[1]}`.`{stb_result[10]}`,' + dropTableWithSpace = f'drop table with `{stb_result[1]}`.`{stb_result[10]} `,' + dropStableWithSpace = f'drop stable with `{stb_result[1]}`.` {stb_result[10]}`,' + dropStableNotExist = f'drop stable with `{stb_result[1]}`.`{stb_result[10]}_notexist`,' + tdLog.info(dropTableWithSpace[:-1]) + tdSql.error(dropTableWithSpace[:-1], expectErrInfo="Table does not exist", fullMatched=False) + tdLog.info(dropStableWithSpace[:-1]) + tdSql.error(dropStableWithSpace[:-1], expectErrInfo="STable not exist", fullMatched=False) + tdLog.info(dropStableNotExist[:-1]) + tdSql.error(dropStableWithSpace[:-1], expectErrInfo="STable not exist", fullMatched=False) else: dropTable += f'`{stb_result[1]}`.`{stb_result[10]}`,' dropStable += f'`{stb_result[1]}`.`{stb_result[10]}`,' tdLog.info(dropTable[:-1]) tdLog.info(dropStable[:-1]) - tdSql.error(dropTable[:-1]) - tdSql.error(dropStable[:-1]) + tdSql.error(dropTable[:-1], expectErrInfo="Cannot drop super table in batch") + tdSql.error(dropStable[:-1], expectErrInfo="syntax error", fullMatched=False) + dropTableWithSpace += f'`{stb_result[1]}`.` {stb_result[10]}`,' + dropStableWithSpace += f'`{stb_result[1]}`.`{stb_result[10]} `,' + tdLog.info(dropTableWithSpace[:-1]) + tdLog.info(dropStableWithSpace[:-1]) + tdSql.error(dropTableWithSpace[:-1], expectErrInfo="Table does not exist", fullMatched=False) + tdSql.error(dropStableWithSpace[:-1], expectErrInfo="syntax error", fullMatched=False) i += 1 i = 0 for stb_result in result: @@ -172,9 +187,9 @@ class TDTestCase: tdSql.checkRows(0) tdSql.query(f'select * from information_schema.ins_tables where db_name like "dbtest_%"') tdSql.checkRows(8) - tdSql.error(f'drop stable with information_schema.`ins_tables`;') - tdSql.error(f'drop stable with performance_schema.`perf_connections`;') - self.drop_table_check_end() + tdSql.error(f'drop stable with information_schema.`ins_tables`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) + tdSql.error(f'drop stable with performance_schema.`perf_connections`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) + self.drop_table_check_end() def drop_table_with_check(self): self.drop_table_check_init() tdSql.query(f'select * from information_schema.ins_tables where db_name like "dbtest_%"') @@ -196,8 +211,8 @@ class TDTestCase: tdSql.checkRows(0) tdSql.query(f'select * from information_schema.ins_stables where db_name like "dbtest_%"') tdSql.checkRows(2) - tdSql.error(f'drop table with information_schema.`ins_tables`;') - tdSql.error(f'drop table with performance_schema.`perf_connections`;') + tdSql.error(f'drop table with information_schema.`ins_tables`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) + tdSql.error(f'drop table with performance_schema.`perf_connections`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) self.drop_table_check_end() def drop_table_with_check_tsma(self): tdSql.execute(f'create database if not exists {self.dbname} {self.vgroups_opt}') From 790d1a42508d1430f68aa1684d1578cf33f9b6d2 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Wed, 25 Sep 2024 09:35:52 +0800 Subject: [PATCH 30/46] stmt2/get tbname: ignore stmt error --- source/client/src/clientStmt2.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/source/client/src/clientStmt2.c b/source/client/src/clientStmt2.c index a9738e4e9c..a8949732f3 100644 --- a/source/client/src/clientStmt2.c +++ b/source/client/src/clientStmt2.c @@ -1873,6 +1873,8 @@ int stmtGetParamNum2(TAOS_STMT2* stmt, int* nums) { int stmtGetParamTbName(TAOS_STMT2* stmt, int* nums) { STscStmt2* pStmt = (STscStmt2*)stmt; + int32_t code = 0; + int32_t preCode = pStmt->errCode; STMT_DLOG_E("start to get param num"); @@ -1895,17 +1897,19 @@ int stmtGetParamTbName(TAOS_STMT2* stmt, int* nums) { STMT_ERR_RET(stmtCreateRequest(pStmt)); if (pStmt->bInfo.needParse) { - STMT_ERR_RET(stmtParseSql(pStmt)); + STMT_ERRI_JRET(stmtParseSql(pStmt)); } - if (TSDB_CODE_TSC_STMT_TBNAME_ERROR == pStmt->errCode) { + *nums = STMT_TYPE_MULTI_INSERT == pStmt->sql.type ? 1 : 0; + +_return: + if (TSDB_CODE_TSC_STMT_TBNAME_ERROR == code) { *nums = 1; - pStmt->errCode = TSDB_CODE_SUCCESS; - } else { - *nums = STMT_TYPE_MULTI_INSERT == pStmt->sql.type ? 1 : 0; + code = TSDB_CODE_SUCCESS; } - return TSDB_CODE_SUCCESS; + pStmt->errCode = preCode; + return code; } /* int stmtGetParam(TAOS_STMT* stmt, int idx, int* type, int* bytes) { From c2c3be3aa6c6c65a3dca202592bb972ab14f3542 Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 25 Sep 2024 09:40:26 +0800 Subject: [PATCH 31/46] enh: test case optimization --- tests/system-test/1-insert/drop.py | 47 ++++++++++++++++++------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/tests/system-test/1-insert/drop.py b/tests/system-test/1-insert/drop.py index 6d674c5ad5..7ff48e8d40 100644 --- a/tests/system-test/1-insert/drop.py +++ b/tests/system-test/1-insert/drop.py @@ -54,6 +54,7 @@ class TDTestCase: self.ctb_names = [ f'ctb0', 'ctb1', f'aa\u00bf\u200bctb0', f'aa\u00bf\u200bctb1'] self.ntb_names = [ f'ntb0', f'aa\u00bf\u200bntb0', f'ntb1', f'aa\u00bf\u200bntb1'] self.vgroups_opt = f'vgroups 4' + self.err_dup_cnt = 5 def insert_data(self,column_dict,tbname,row_num): insert_sql = self.setsql.set_insertsql(column_dict,tbname,self.binary_str,self.nchar_str) for i in range(row_num): @@ -150,25 +151,31 @@ class TDTestCase: dropTableWithSpace = f'drop table with `{stb_result[1]}`.`{stb_result[10]} `,' dropStableWithSpace = f'drop stable with `{stb_result[1]}`.` {stb_result[10]}`,' dropStableNotExist = f'drop stable with `{stb_result[1]}`.`{stb_result[10]}_notexist`,' - tdLog.info(dropTableWithSpace[:-1]) - tdSql.error(dropTableWithSpace[:-1], expectErrInfo="Table does not exist", fullMatched=False) - tdLog.info(dropStableWithSpace[:-1]) - tdSql.error(dropStableWithSpace[:-1], expectErrInfo="STable not exist", fullMatched=False) - tdLog.info(dropStableNotExist[:-1]) - tdSql.error(dropStableWithSpace[:-1], expectErrInfo="STable not exist", fullMatched=False) + k = 0 + for k in range(self.err_dup_cnt): + tdLog.info(dropTableWithSpace[:-1]) + tdSql.error(dropTableWithSpace[:-1], expectErrInfo="Table does not exist", fullMatched=False) + tdLog.info(dropStableWithSpace[:-1]) + tdSql.error(dropStableWithSpace[:-1], expectErrInfo="STable not exist", fullMatched=False) + tdLog.info(dropStableNotExist[:-1]) + tdSql.error(dropStableWithSpace[:-1], expectErrInfo="STable not exist", fullMatched=False) else: dropTable += f'`{stb_result[1]}`.`{stb_result[10]}`,' dropStable += f'`{stb_result[1]}`.`{stb_result[10]}`,' - tdLog.info(dropTable[:-1]) - tdLog.info(dropStable[:-1]) - tdSql.error(dropTable[:-1], expectErrInfo="Cannot drop super table in batch") - tdSql.error(dropStable[:-1], expectErrInfo="syntax error", fullMatched=False) + k = 0 + for k in range(self.err_dup_cnt): + tdLog.info(dropTable[:-1]) + tdLog.info(dropStable[:-1]) + tdSql.error(dropTable[:-1], expectErrInfo="Cannot drop super table in batch") + tdSql.error(dropStable[:-1], expectErrInfo="syntax error", fullMatched=False) dropTableWithSpace += f'`{stb_result[1]}`.` {stb_result[10]}`,' dropStableWithSpace += f'`{stb_result[1]}`.`{stb_result[10]} `,' - tdLog.info(dropTableWithSpace[:-1]) - tdLog.info(dropStableWithSpace[:-1]) - tdSql.error(dropTableWithSpace[:-1], expectErrInfo="Table does not exist", fullMatched=False) - tdSql.error(dropStableWithSpace[:-1], expectErrInfo="syntax error", fullMatched=False) + k = 0 + for k in range(self.err_dup_cnt): + tdLog.info(dropTableWithSpace[:-1]) + tdLog.info(dropStableWithSpace[:-1]) + tdSql.error(dropTableWithSpace[:-1], expectErrInfo="Table does not exist", fullMatched=False) + tdSql.error(dropStableWithSpace[:-1], expectErrInfo="syntax error", fullMatched=False) i += 1 i = 0 for stb_result in result: @@ -187,8 +194,10 @@ class TDTestCase: tdSql.checkRows(0) tdSql.query(f'select * from information_schema.ins_tables where db_name like "dbtest_%"') tdSql.checkRows(8) - tdSql.error(f'drop stable with information_schema.`ins_tables`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) - tdSql.error(f'drop stable with performance_schema.`perf_connections`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) + k = 0 + for k in range(self.err_dup_cnt): + tdSql.error(f'drop stable with information_schema.`ins_tables`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) + tdSql.error(f'drop stable with performance_schema.`perf_connections`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) self.drop_table_check_end() def drop_table_with_check(self): self.drop_table_check_init() @@ -211,8 +220,10 @@ class TDTestCase: tdSql.checkRows(0) tdSql.query(f'select * from information_schema.ins_stables where db_name like "dbtest_%"') tdSql.checkRows(2) - tdSql.error(f'drop table with information_schema.`ins_tables`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) - tdSql.error(f'drop table with performance_schema.`perf_connections`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) + k = 0 + for k in range(self.err_dup_cnt): + tdSql.error(f'drop table with information_schema.`ins_tables`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) + tdSql.error(f'drop table with performance_schema.`perf_connections`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) self.drop_table_check_end() def drop_table_with_check_tsma(self): tdSql.execute(f'create database if not exists {self.dbname} {self.vgroups_opt}') From 234b95fcd6259fa9d0ee4efefcf7ff5db913baaf Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 25 Sep 2024 09:51:27 +0800 Subject: [PATCH 32/46] enh: test case optimization --- tests/system-test/1-insert/drop.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/tests/system-test/1-insert/drop.py b/tests/system-test/1-insert/drop.py index 7ff48e8d40..ad9f6c9be6 100644 --- a/tests/system-test/1-insert/drop.py +++ b/tests/system-test/1-insert/drop.py @@ -151,8 +151,7 @@ class TDTestCase: dropTableWithSpace = f'drop table with `{stb_result[1]}`.`{stb_result[10]} `,' dropStableWithSpace = f'drop stable with `{stb_result[1]}`.` {stb_result[10]}`,' dropStableNotExist = f'drop stable with `{stb_result[1]}`.`{stb_result[10]}_notexist`,' - k = 0 - for k in range(self.err_dup_cnt): + for _ in range(self.err_dup_cnt): tdLog.info(dropTableWithSpace[:-1]) tdSql.error(dropTableWithSpace[:-1], expectErrInfo="Table does not exist", fullMatched=False) tdLog.info(dropStableWithSpace[:-1]) @@ -162,16 +161,14 @@ class TDTestCase: else: dropTable += f'`{stb_result[1]}`.`{stb_result[10]}`,' dropStable += f'`{stb_result[1]}`.`{stb_result[10]}`,' - k = 0 - for k in range(self.err_dup_cnt): + for _ in range(self.err_dup_cnt): tdLog.info(dropTable[:-1]) tdLog.info(dropStable[:-1]) tdSql.error(dropTable[:-1], expectErrInfo="Cannot drop super table in batch") tdSql.error(dropStable[:-1], expectErrInfo="syntax error", fullMatched=False) dropTableWithSpace += f'`{stb_result[1]}`.` {stb_result[10]}`,' dropStableWithSpace += f'`{stb_result[1]}`.`{stb_result[10]} `,' - k = 0 - for k in range(self.err_dup_cnt): + for _ in range(self.err_dup_cnt): tdLog.info(dropTableWithSpace[:-1]) tdLog.info(dropStableWithSpace[:-1]) tdSql.error(dropTableWithSpace[:-1], expectErrInfo="Table does not exist", fullMatched=False) @@ -194,8 +191,7 @@ class TDTestCase: tdSql.checkRows(0) tdSql.query(f'select * from information_schema.ins_tables where db_name like "dbtest_%"') tdSql.checkRows(8) - k = 0 - for k in range(self.err_dup_cnt): + for _ in range(self.err_dup_cnt): tdSql.error(f'drop stable with information_schema.`ins_tables`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) tdSql.error(f'drop stable with performance_schema.`perf_connections`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) self.drop_table_check_end() @@ -220,8 +216,7 @@ class TDTestCase: tdSql.checkRows(0) tdSql.query(f'select * from information_schema.ins_stables where db_name like "dbtest_%"') tdSql.checkRows(2) - k = 0 - for k in range(self.err_dup_cnt): + for _ in range(self.err_dup_cnt): tdSql.error(f'drop table with information_schema.`ins_tables`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) tdSql.error(f'drop table with performance_schema.`perf_connections`;', expectErrInfo="Cannot drop table of system database", fullMatched=False) self.drop_table_check_end() From 8d02e3e310b142d3678c16f58f0726ac19bd5ce6 Mon Sep 17 00:00:00 2001 From: Jing Sima Date: Wed, 25 Sep 2024 11:15:48 +0800 Subject: [PATCH 33/46] fix:[TD-32310] Avoid access null pointer when error occurs.. --- source/libs/executor/src/aggregateoperator.c | 11 +++++--- .../libs/executor/src/eventwindowoperator.c | 2 +- source/libs/executor/src/groupoperator.c | 12 +++++---- .../executor/src/streamcountwindowoperator.c | 11 +++++--- .../executor/src/streameventwindowoperator.c | 8 +++--- .../executor/src/streamtimewindowoperator.c | 24 ++++++++++------- source/libs/executor/src/timewindowoperator.c | 27 ++++++++++++------- 7 files changed, 62 insertions(+), 33 deletions(-) diff --git a/source/libs/executor/src/aggregateoperator.c b/source/libs/executor/src/aggregateoperator.c index 863ce01256..9e5ad132f7 100644 --- a/source/libs/executor/src/aggregateoperator.c +++ b/source/libs/executor/src/aggregateoperator.c @@ -152,12 +152,17 @@ _error: } void destroyAggOperatorInfo(void* param) { + if (param == NULL) { + return; + } SAggOperatorInfo* pInfo = (SAggOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); - cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, - &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); - pInfo->pOperator = NULL; + if (pInfo->pOperator) { + cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, + &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); + pInfo->pOperator = NULL; + } cleanupAggSup(&pInfo->aggSup); cleanupExprSupp(&pInfo->scalarExprSup); cleanupGroupResInfo(&pInfo->groupResInfo); diff --git a/source/libs/executor/src/eventwindowoperator.c b/source/libs/executor/src/eventwindowoperator.c index 79e7494518..f473626953 100644 --- a/source/libs/executor/src/eventwindowoperator.c +++ b/source/libs/executor/src/eventwindowoperator.c @@ -155,7 +155,7 @@ _error: } void cleanupResultInfoInEventWindow(SOperatorInfo* pOperator, SEventWindowOperatorInfo* pInfo) { - if (pInfo == NULL || pInfo->pRow == NULL) { + if (pInfo == NULL || pInfo->pRow == NULL || pOperator == NULL) { return; } SExprSupp* pSup = &pOperator->exprSupp; diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c index 3ce20dbbd9..ff238df68b 100644 --- a/source/libs/executor/src/groupoperator.c +++ b/source/libs/executor/src/groupoperator.c @@ -76,21 +76,23 @@ static void freeGroupKey(void* param) { } static void destroyGroupOperatorInfo(void* param) { - SGroupbyOperatorInfo* pInfo = (SGroupbyOperatorInfo*)param; - if (pInfo == NULL) { + if (param == NULL) { return; } + SGroupbyOperatorInfo* pInfo = (SGroupbyOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); taosMemoryFreeClear(pInfo->keyBuf); taosArrayDestroy(pInfo->pGroupCols); taosArrayDestroyEx(pInfo->pGroupColVals, freeGroupKey); cleanupExprSupp(&pInfo->scalarSup); - cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, - &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); + if (pInfo->pOperator) { + cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, + &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); + pInfo->pOperator = NULL; + } cleanupGroupResInfo(&pInfo->groupResInfo); cleanupAggSup(&pInfo->aggSup); - pInfo->pOperator = NULL; taosMemoryFreeClear(param); } diff --git a/source/libs/executor/src/streamcountwindowoperator.c b/source/libs/executor/src/streamcountwindowoperator.c index 577af29bf7..6803c0ff60 100644 --- a/source/libs/executor/src/streamcountwindowoperator.c +++ b/source/libs/executor/src/streamcountwindowoperator.c @@ -46,11 +46,16 @@ typedef struct SBuffInfo { } SBuffInfo; void destroyStreamCountAggOperatorInfo(void* param) { + if (param == NULL) { + return; + } SStreamCountAggOperatorInfo* pInfo = (SStreamCountAggOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); - cleanupResultInfoInStream(pInfo->pOperator->pTaskInfo, pInfo->streamAggSup.pState, &pInfo->pOperator->exprSupp, - &pInfo->groupResInfo); - pInfo->pOperator = NULL; + if (pInfo->pOperator) { + cleanupResultInfoInStream(pInfo->pOperator->pTaskInfo, pInfo->streamAggSup.pState, &pInfo->pOperator->exprSupp, + &pInfo->groupResInfo); + pInfo->pOperator = NULL; + } destroyStreamAggSupporter(&pInfo->streamAggSup); cleanupExprSupp(&pInfo->scalarSupp); clearGroupResInfo(&pInfo->groupResInfo); diff --git a/source/libs/executor/src/streameventwindowoperator.c b/source/libs/executor/src/streameventwindowoperator.c index a46bbdace3..3f16272af1 100644 --- a/source/libs/executor/src/streameventwindowoperator.c +++ b/source/libs/executor/src/streameventwindowoperator.c @@ -48,9 +48,11 @@ void destroyStreamEventOperatorInfo(void* param) { } SStreamEventAggOperatorInfo* pInfo = (SStreamEventAggOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); - cleanupResultInfoInStream(pInfo->pOperator->pTaskInfo, pInfo->streamAggSup.pState, &pInfo->pOperator->exprSupp, - &pInfo->groupResInfo); - pInfo->pOperator = NULL; + if (pInfo->pOperator) { + cleanupResultInfoInStream(pInfo->pOperator->pTaskInfo, pInfo->streamAggSup.pState, &pInfo->pOperator->exprSupp, + &pInfo->groupResInfo); + pInfo->pOperator = NULL; + } destroyStreamAggSupporter(&pInfo->streamAggSup); clearGroupResInfo(&pInfo->groupResInfo); taosArrayDestroyP(pInfo->pUpdated, destroyFlusedPos); diff --git a/source/libs/executor/src/streamtimewindowoperator.c b/source/libs/executor/src/streamtimewindowoperator.c index 22e462abab..58ab56efb7 100644 --- a/source/libs/executor/src/streamtimewindowoperator.c +++ b/source/libs/executor/src/streamtimewindowoperator.c @@ -473,9 +473,11 @@ void destroyStreamFinalIntervalOperatorInfo(void* param) { } SStreamIntervalOperatorInfo* pInfo = (SStreamIntervalOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); - cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, - &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); - pInfo->pOperator = NULL; + if (pInfo->pOperator) { + cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, + &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); + pInfo->pOperator = NULL; + } cleanupAggSup(&pInfo->aggSup); clearGroupResInfo(&pInfo->groupResInfo); taosArrayDestroyP(pInfo->pUpdated, destroyFlusedPos); @@ -2092,9 +2094,11 @@ void destroyStreamSessionAggOperatorInfo(void* param) { } SStreamSessionAggOperatorInfo* pInfo = (SStreamSessionAggOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); - cleanupResultInfoInStream(pInfo->pOperator->pTaskInfo, pInfo->streamAggSup.pState, &pInfo->pOperator->exprSupp, - &pInfo->groupResInfo); - pInfo->pOperator = NULL; + if (pInfo->pOperator) { + cleanupResultInfoInStream(pInfo->pOperator->pTaskInfo, pInfo->streamAggSup.pState, &pInfo->pOperator->exprSupp, + &pInfo->groupResInfo); + pInfo->pOperator = NULL; + } destroyStreamAggSupporter(&pInfo->streamAggSup); cleanupExprSupp(&pInfo->scalarSupp); clearGroupResInfo(&pInfo->groupResInfo); @@ -4182,9 +4186,11 @@ void destroyStreamStateOperatorInfo(void* param) { } SStreamStateAggOperatorInfo* pInfo = (SStreamStateAggOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); - cleanupResultInfoInStream(pInfo->pOperator->pTaskInfo, pInfo->streamAggSup.pState, &pInfo->pOperator->exprSupp, - &pInfo->groupResInfo); - pInfo->pOperator = NULL; + if (pInfo->pOperator) { + cleanupResultInfoInStream(pInfo->pOperator->pTaskInfo, pInfo->streamAggSup.pState, &pInfo->pOperator->exprSupp, + &pInfo->groupResInfo); + pInfo->pOperator = NULL; + } destroyStreamAggSupporter(&pInfo->streamAggSup); clearGroupResInfo(&pInfo->groupResInfo); taosArrayDestroyP(pInfo->pUpdated, destroyFlusedPos); diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index 6ac24ad313..cacc4f4cee 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -1223,12 +1223,17 @@ _end: } static void destroyStateWindowOperatorInfo(void* param) { + if (param == NULL) { + return; + } SStateWindowOperatorInfo* pInfo = (SStateWindowOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); taosMemoryFreeClear(pInfo->stateKey.pData); - cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, - &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); - pInfo->pOperator = NULL; + if (pInfo->pOperator) { + cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, + &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); + pInfo->pOperator = NULL; + } cleanupExprSupp(&pInfo->scalarSup); colDataDestroy(&pInfo->twAggSup.timeWindowData); cleanupAggSup(&pInfo->aggSup); @@ -1248,9 +1253,11 @@ void destroyIntervalOperatorInfo(void* param) { } SIntervalAggOperatorInfo* pInfo = (SIntervalAggOperatorInfo*)param; cleanupBasicInfo(&pInfo->binfo); - cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, - &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); - pInfo->pOperator = NULL; + if (pInfo->pOperator) { + cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, + &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); + pInfo->pOperator = NULL; + } cleanupAggSup(&pInfo->aggSup); cleanupExprSupp(&pInfo->scalarSupp); @@ -1747,9 +1754,11 @@ void destroySWindowOperatorInfo(void* param) { cleanupBasicInfo(&pInfo->binfo); colDataDestroy(&pInfo->twAggSup.timeWindowData); - cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, - &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); - pInfo->pOperator = NULL; + if (pInfo->pOperator) { + cleanupResultInfo(pInfo->pOperator->pTaskInfo, &pInfo->pOperator->exprSupp, pInfo->aggSup.pResultBuf, + &pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable); + pInfo->pOperator = NULL; + } cleanupAggSup(&pInfo->aggSup); cleanupExprSupp(&pInfo->scalarSupp); From 2dbdc0bbc863c992638271497a1da1f6513aad18 Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 25 Sep 2024 11:17:40 +0800 Subject: [PATCH 34/46] enh: return value process --- source/util/src/tlog.c | 136 +++++++++++++++++++++++++++-------------- 1 file changed, 89 insertions(+), 47 deletions(-) diff --git a/source/util/src/tlog.c b/source/util/src/tlog.c index aea6647e4c..b8433d3b5d 100644 --- a/source/util/src/tlog.c +++ b/source/util/src/tlog.c @@ -153,14 +153,16 @@ static void getDay(char* buf){ time_t t = taosTime(NULL); struct tm tmInfo; if (taosLocalTime(&t, &tmInfo, buf) != NULL) { - (void)strftime(buf, LOG_FILE_DAY_LEN, "%Y-%m-%d", &tmInfo); + TAOS_UNUSED(strftime(buf, LOG_FILE_DAY_LEN, "%Y-%m-%d", &tmInfo)); } } static int64_t getTimestampToday() { time_t t = taosTime(NULL); struct tm tm; - (void) taosLocalTime(&t, &tm, NULL); + if (taosLocalTime(&t, &tm, NULL) == NULL) { + return 0; + } tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; @@ -203,7 +205,7 @@ int32_t taosInitSlowLog() { tsLogObj.slowHandle = taosLogBuffNew(LOG_SLOW_BUF_SIZE); if (tsLogObj.slowHandle == NULL) return terrno; - (void)taosUmaskFile(0); + TAOS_UNUSED(taosUmaskFile(0)); tsLogObj.slowHandle->pFile = taosOpenFile(name, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND); if (tsLogObj.slowHandle->pFile == NULL) { (void)printf("\nfailed to open slow log file:%s, reason:%s\n", name, strerror(errno)); @@ -281,7 +283,10 @@ static void taosUnLockLogFile(TdFilePtr pFile) { if (pFile == NULL) return; if (tsLogObj.fileNum > 1) { - (void)taosUnLockFile(pFile); + int32_t code = taosUnLockFile(pFile); + if (code != 0) { + printf("failed to unlock log file:%p, reason:%s\n", pFile, tstrerror(code)); + } } } @@ -310,7 +315,10 @@ static void taosKeepOldLog(char *oldName) { char compressFileName[PATH_MAX + 20]; snprintf(compressFileName, PATH_MAX + 20, "%s.gz", oldName); if (taosCompressFile(oldName, compressFileName) == 0) { - (void)taosRemoveFile(oldName); + int32_t code = taosRemoveFile(oldName); + if (code != 0) { + printf("failed to remove file:%s, reason:%s\n", oldName, tstrerror(code)); + } } } @@ -331,7 +339,7 @@ static OldFileKeeper *taosOpenNewFile() { char name[PATH_MAX + 20]; sprintf(name, "%s.%d", tsLogObj.logName, tsLogObj.flag); - (void)taosUmaskFile(0); + TAOS_UNUSED(taosUmaskFile(0)); TdFilePtr pFile = taosOpenFile(name, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC); if (pFile == NULL) { @@ -341,8 +349,8 @@ static OldFileKeeper *taosOpenNewFile() { return NULL; } - (void)taosLockLogFile(pFile); - (void)taosLSeekFile(pFile, 0, SEEK_SET); + TAOS_UNUSED(taosLockLogFile(pFile)); + TAOS_UNUSED(taosLSeekFile(pFile, 0, SEEK_SET)); TdFilePtr pOldFile = tsLogObj.logHandle->pFile; tsLogObj.logHandle->pFile = pFile; @@ -384,7 +392,14 @@ static int32_t taosOpenNewLogFile() { (void)taosThreadAttrSetDetachState(&attr, PTHREAD_CREATE_DETACHED); OldFileKeeper *oldFileKeeper = taosOpenNewFile(); - (void)taosThreadCreate(&thread, &attr, taosThreadToCloseOldFile, oldFileKeeper); + if (!oldFileKeeper) { + (void)taosThreadMutexUnlock(&tsLogObj.logMutex); + return terrno; + } + if (taosThreadCreate(&thread, &attr, taosThreadToCloseOldFile, oldFileKeeper) != 0) { + uError("failed to create thread to close old log file"); + taosMemoryFreeClear(oldFileKeeper); + } (void)taosThreadAttrDestroy(&attr); } @@ -404,7 +419,7 @@ static void taosOpenNewSlowLogFile() { for (int32_t i = 1; atomic_val_compare_exchange_32(&tsLogObj.slowHandle->lock, 0, 1) == 1; ++i) { if (i % 1000 == 0) { - (void)sched_yield(); + TAOS_UNUSED(sched_yield()); } } tsLogObj.slowHandle->lastDuration = LOG_MAX_WAIT_MSEC; // force write @@ -435,7 +450,10 @@ void taosResetLog() { tsLogObj.lines = tsNumOfLogLines + 10; if (tsLogObj.logHandle) { - (void)taosOpenNewLogFile(); + int32_t code = taosOpenNewLogFile(); + if(code != 0){ + uError("failed to open new log file, reason:%s", tstrerror(code)); + } uInfo("=================================="); uInfo(" reset log file "); } @@ -521,6 +539,7 @@ static void processLogFileName(const char* logName , int32_t maxFileNum){ } static int32_t taosInitNormalLog(const char *logName, int32_t maxFileNum) { + int32_t code = 0; #ifdef WINDOWS_STASH /* * always set maxFileNum to 1 @@ -528,14 +547,13 @@ static int32_t taosInitNormalLog(const char *logName, int32_t maxFileNum) { */ maxFileNum = 1; #endif - processLogFileName(logName, maxFileNum); char name[PATH_MAX + 50] = "\0"; (void)sprintf(name, "%s.%d", tsLogObj.logName, tsLogObj.flag); (void)taosThreadMutexInit(&tsLogObj.logMutex, NULL); - (void)taosUmaskFile(0); + TAOS_UNUSED(taosUmaskFile(0)); tsLogObj.logHandle = taosLogBuffNew(LOG_DEFAULT_BUF_SIZE); if (tsLogObj.logHandle == NULL) return terrno; @@ -544,7 +562,7 @@ static int32_t taosInitNormalLog(const char *logName, int32_t maxFileNum) { (void)printf("\nfailed to open log file:%s, reason:%s\n", name, strerror(errno)); return terrno; } - (void)taosLockLogFile(tsLogObj.logHandle->pFile); + TAOS_UNUSED(taosLockLogFile(tsLogObj.logHandle->pFile)); // only an estimate for number of lines int64_t filesize = 0; @@ -554,14 +572,26 @@ static int32_t taosInitNormalLog(const char *logName, int32_t maxFileNum) { } tsLogObj.lines = (int32_t)(filesize / 60); - (void)taosLSeekFile(tsLogObj.logHandle->pFile, 0, SEEK_END); + if ((code = taosLSeekFile(tsLogObj.logHandle->pFile, 0, SEEK_END)) < 0) { + TAOS_UNUSED(printf("failed to seek to the end of log file:%s, reason:%s\n", name, tstrerror(code))); + return code; + } (void)sprintf(name, "==================================================\n"); - (void)taosWriteFile(tsLogObj.logHandle->pFile, name, (uint32_t)strlen(name)); + if (taosWriteFile(tsLogObj.logHandle->pFile, name, (uint32_t)strlen(name)) <= 0) { + TAOS_UNUSED(printf("failed to write to log file:%s, reason:%s\n", name, tstrerror(terrno))); + return terrno; + } (void)sprintf(name, " new log file \n"); - (void)taosWriteFile(tsLogObj.logHandle->pFile, name, (uint32_t)strlen(name)); + if (taosWriteFile(tsLogObj.logHandle->pFile, name, (uint32_t)strlen(name)) <= 0) { + TAOS_UNUSED(printf("failed to write to log file:%s, reason:%s\n", name, tstrerror(terrno))); + return terrno; + } (void)sprintf(name, "==================================================\n"); - (void)taosWriteFile(tsLogObj.logHandle->pFile, name, (uint32_t)strlen(name)); + if (taosWriteFile(tsLogObj.logHandle->pFile, name, (uint32_t)strlen(name)) <= 0) { + TAOS_UNUSED(printf("failed to write to log file:%s, reason:%s\n", name, tstrerror(terrno))); + return terrno; + } return 0; } @@ -569,17 +599,17 @@ static int32_t taosInitNormalLog(const char *logName, int32_t maxFileNum) { static void taosUpdateLogNums(ELogLevel level) { switch (level) { case DEBUG_ERROR: - (void)atomic_add_fetch_64(&tsNumOfErrorLogs, 1); + TAOS_UNUSED(atomic_add_fetch_64(&tsNumOfErrorLogs, 1)); break; case DEBUG_INFO: - (void)atomic_add_fetch_64(&tsNumOfInfoLogs, 1); + TAOS_UNUSED(atomic_add_fetch_64(&tsNumOfInfoLogs, 1)); break; case DEBUG_DEBUG: - (void)atomic_add_fetch_64(&tsNumOfDebugLogs, 1); + TAOS_UNUSED(atomic_add_fetch_64(&tsNumOfDebugLogs, 1)); break; case DEBUG_DUMP: case DEBUG_TRACE: - (void)atomic_add_fetch_64(&tsNumOfTraceLogs, 1); + TAOS_UNUSED(atomic_add_fetch_64(&tsNumOfTraceLogs, 1)); break; default: break; @@ -590,7 +620,7 @@ static inline int32_t taosBuildLogHead(char *buffer, const char *flags) { struct tm Tm, *ptm; struct timeval timeSecs; - (void)taosGetTimeOfDay(&timeSecs); + TAOS_UNUSED(taosGetTimeOfDay(&timeSecs)); time_t curTime = timeSecs.tv_sec; ptm = taosLocalTime(&curTime, &Tm, NULL); @@ -603,15 +633,20 @@ static inline void taosPrintLogImp(ELogLevel level, int32_t dflag, const char *b if ((dflag & DEBUG_FILE) && tsLogObj.logHandle && tsLogObj.logHandle->pFile != NULL && osLogSpaceSufficient()) { taosUpdateLogNums(level); if (tsAsyncLog) { - (void)taosPushLogBuffer(tsLogObj.logHandle, buffer, len); + TAOS_UNUSED(taosPushLogBuffer(tsLogObj.logHandle, buffer, len)); } else { - (void)taosWriteFile(tsLogObj.logHandle->pFile, buffer, len); + if (taosWriteFile(tsLogObj.logHandle->pFile, buffer, len) <= 0) { + printf("failed to write log to file, reason:%s\n", tstrerror(terrno)); + } } if (tsNumOfLogLines > 0) { - (void)atomic_add_fetch_32(&tsLogObj.lines, 1); + TAOS_UNUSED(atomic_add_fetch_32(&tsLogObj.lines, 1)); if ((tsLogObj.lines > tsNumOfLogLines) && (tsLogObj.openInProgress == 0)) { - (void)taosOpenNewLogFile(); + int32_t code = taosOpenNewLogFile(); + if (code != 0) { + uError("failed to open new log file, reason:%s", tstrerror(code)); + } } } } @@ -619,7 +654,9 @@ static inline void taosPrintLogImp(ELogLevel level, int32_t dflag, const char *b if (dflag & DEBUG_SCREEN) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-result" - (void)write(1, buffer, (uint32_t)len); + if (write(1, buffer, (uint32_t)len) < 0) { + printf("failed to write log to screen, reason:%s\n", strerror(errno)); + } #pragma GCC diagnostic pop } } @@ -690,12 +727,14 @@ void taosPrintSlowLog(const char *format, ...) { buffer[len++] = '\n'; buffer[len] = 0; - (void)atomic_add_fetch_64(&tsNumOfSlowLogs, 1); + TAOS_UNUSED(atomic_add_fetch_64(&tsNumOfSlowLogs, 1)); if (tsAsyncLog) { - (void)taosPushLogBuffer(tsLogObj.slowHandle, buffer, len); + TAOS_UNUSED(taosPushLogBuffer(tsLogObj.slowHandle, buffer, len)); } else { - (void)taosWriteFile(tsLogObj.slowHandle->pFile, buffer, len); + if (taosWriteFile(tsLogObj.slowHandle->pFile, buffer, len) <= 0) { + printf("failed to write slow log to file, reason:%s\n", tstrerror(terrno)); + } } taosMemoryFree(buffer); @@ -714,7 +753,7 @@ void taosDumpData(unsigned char *msg, int32_t len) { pos += 3; if (c >= 16) { temp[pos++] = '\n'; - (void)taosWriteFile(tsLogObj.logHandle->pFile, temp, (uint32_t)pos); + TAOS_UNUSED((taosWriteFile(tsLogObj.logHandle->pFile, temp, (uint32_t)pos) <= 0)); c = 0; pos = 0; } @@ -722,7 +761,7 @@ void taosDumpData(unsigned char *msg, int32_t len) { temp[pos++] = '\n'; - (void)taosWriteFile(tsLogObj.logHandle->pFile, temp, (uint32_t)pos); + TAOS_UNUSED(taosWriteFile(tsLogObj.logHandle->pFile, temp, (uint32_t)pos)); } static void taosCloseLogByFd(TdFilePtr pFile) { @@ -855,12 +894,12 @@ static void taosWriteLog(SLogBuff *pLogBuf) { pLogBuf->lastDuration = 0; if (start < end) { - (void)taosWriteFile(pLogBuf->pFile, LOG_BUF_BUFFER(pLogBuf) + start, pollSize); + TAOS_UNUSED(taosWriteFile(pLogBuf->pFile, LOG_BUF_BUFFER(pLogBuf) + start, pollSize)); } else { int32_t tsize = LOG_BUF_SIZE(pLogBuf) - start; - (void)taosWriteFile(pLogBuf->pFile, LOG_BUF_BUFFER(pLogBuf) + start, tsize); + TAOS_UNUSED(taosWriteFile(pLogBuf->pFile, LOG_BUF_BUFFER(pLogBuf) + start, tsize)); - (void)taosWriteFile(pLogBuf->pFile, LOG_BUF_BUFFER(pLogBuf), end); + TAOS_UNUSED(taosWriteFile(pLogBuf->pFile, LOG_BUF_BUFFER(pLogBuf), end)); } dbgWN++; @@ -981,11 +1020,14 @@ void taosLogCrashInfo(char *nodeType, char *pMsg, int64_t msgLen, int signum, vo goto _return; } - (void)taosLockFile(pFile); + if (taosLockFile(pFile) < 0) { + taosPrintLog(flags, level, dflag, "failed to lock file:%s since %s", filepath, terrstr()); + goto _return; + } int64_t writeSize = taosWriteFile(pFile, &msgLen, sizeof(msgLen)); if (sizeof(msgLen) != writeSize) { - (void)taosUnLockFile(pFile); + TAOS_UNUSED(taosUnLockFile(pFile)); taosPrintLog(flags, level, dflag, "failed to write len to file:%s,%p wlen:%" PRId64 " tlen:%lu since %s", filepath, pFile, writeSize, sizeof(msgLen), terrstr()); goto _return; @@ -993,13 +1035,13 @@ void taosLogCrashInfo(char *nodeType, char *pMsg, int64_t msgLen, int signum, vo writeSize = taosWriteFile(pFile, pMsg, msgLen); if (msgLen != writeSize) { - (void)taosUnLockFile(pFile); + TAOS_UNUSED(taosUnLockFile(pFile)); taosPrintLog(flags, level, dflag, "failed to write file:%s,%p wlen:%" PRId64 " tlen:%" PRId64 " since %s", filepath, pFile, writeSize, msgLen, terrstr()); goto _return; } - (void)taosUnLockFile(pFile); + TAOS_UNUSED(taosUnLockFile(pFile)); } _return: @@ -1054,7 +1096,7 @@ void taosReadCrashInfo(char *filepath, char **pMsg, int64_t *pMsgLen, TdFilePtr return; } - (void)taosLockFile(pFile); + TAOS_UNUSED(taosLockFile(pFile)); } else { pFile = *pFd; } @@ -1093,10 +1135,10 @@ void taosReadCrashInfo(char *filepath, char **pMsg, int64_t *pMsgLen, TdFilePtr _return: if (truncateFile) { - (void)taosFtruncateFile(pFile, 0); + TAOS_UNUSED(taosFtruncateFile(pFile, 0)); } - (void)taosUnLockFile(pFile); - (void)taosCloseFile(&pFile); + TAOS_UNUSED(taosUnLockFile(pFile)); + TAOS_UNUSED(taosCloseFile(&pFile)); taosMemoryFree(buf); *pMsg = NULL; @@ -1106,11 +1148,11 @@ _return: void taosReleaseCrashLogFile(TdFilePtr pFile, bool truncateFile) { if (truncateFile) { - (void)taosFtruncateFile(pFile, 0); + TAOS_UNUSED(taosFtruncateFile(pFile, 0)); } - (void)taosUnLockFile(pFile); - (void)taosCloseFile(&pFile); + TAOS_UNUSED(taosUnLockFile(pFile)); + TAOS_UNUSED(taosCloseFile(&pFile)); } #ifdef NDEBUG From caa44873b899643e15bb021b934b61715798b8d7 Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 25 Sep 2024 11:24:44 +0800 Subject: [PATCH 35/46] enh: return value process --- source/util/src/tlog.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/util/src/tlog.c b/source/util/src/tlog.c index b8433d3b5d..bae19a91bd 100644 --- a/source/util/src/tlog.c +++ b/source/util/src/tlog.c @@ -285,7 +285,7 @@ static void taosUnLockLogFile(TdFilePtr pFile) { if (tsLogObj.fileNum > 1) { int32_t code = taosUnLockFile(pFile); if (code != 0) { - printf("failed to unlock log file:%p, reason:%s\n", pFile, tstrerror(code)); + TAOS_UNUSED(printf("failed to unlock log file:%p, reason:%s\n", pFile, tstrerror(code))); } } } @@ -317,7 +317,7 @@ static void taosKeepOldLog(char *oldName) { if (taosCompressFile(oldName, compressFileName) == 0) { int32_t code = taosRemoveFile(oldName); if (code != 0) { - printf("failed to remove file:%s, reason:%s\n", oldName, tstrerror(code)); + TAOS_UNUSED(printf("failed to remove file:%s, reason:%s\n", oldName, tstrerror(code))); } } } @@ -393,7 +393,7 @@ static int32_t taosOpenNewLogFile() { OldFileKeeper *oldFileKeeper = taosOpenNewFile(); if (!oldFileKeeper) { - (void)taosThreadMutexUnlock(&tsLogObj.logMutex); + TAOS_UNUSED(taosThreadMutexUnlock(&tsLogObj.logMutex)); return terrno; } if (taosThreadCreate(&thread, &attr, taosThreadToCloseOldFile, oldFileKeeper) != 0) { @@ -636,7 +636,7 @@ static inline void taosPrintLogImp(ELogLevel level, int32_t dflag, const char *b TAOS_UNUSED(taosPushLogBuffer(tsLogObj.logHandle, buffer, len)); } else { if (taosWriteFile(tsLogObj.logHandle->pFile, buffer, len) <= 0) { - printf("failed to write log to file, reason:%s\n", tstrerror(terrno)); + TAOS_UNUSED(printf("failed to write log to file, reason:%s\n", tstrerror(terrno))); } } @@ -655,7 +655,7 @@ static inline void taosPrintLogImp(ELogLevel level, int32_t dflag, const char *b #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-result" if (write(1, buffer, (uint32_t)len) < 0) { - printf("failed to write log to screen, reason:%s\n", strerror(errno)); + TAOS_UNUSED(printf("failed to write log to screen, reason:%s\n", strerror(errno))); } #pragma GCC diagnostic pop } @@ -733,7 +733,7 @@ void taosPrintSlowLog(const char *format, ...) { TAOS_UNUSED(taosPushLogBuffer(tsLogObj.slowHandle, buffer, len)); } else { if (taosWriteFile(tsLogObj.slowHandle->pFile, buffer, len) <= 0) { - printf("failed to write slow log to file, reason:%s\n", tstrerror(terrno)); + TAOS_UNUSED(printf("failed to write slow log to file, reason:%s\n", tstrerror(terrno))); } } From 6e6df9fa08ae3c468e9898189e1411c0d10583a1 Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 25 Sep 2024 14:18:47 +0800 Subject: [PATCH 36/46] enh: return value process --- source/util/src/tlog.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/source/util/src/tlog.c b/source/util/src/tlog.c index bae19a91bd..2a5de3dfe0 100644 --- a/source/util/src/tlog.c +++ b/source/util/src/tlog.c @@ -350,7 +350,9 @@ static OldFileKeeper *taosOpenNewFile() { } TAOS_UNUSED(taosLockLogFile(pFile)); - TAOS_UNUSED(taosLSeekFile(pFile, 0, SEEK_SET)); + if (taosLSeekFile(pFile, 0, SEEK_SET) < 0) { + uWarn("failed to seek file:%s, reason:%s", name, tstrerror(terrno)); + } TdFilePtr pOldFile = tsLogObj.logHandle->pFile; tsLogObj.logHandle->pFile = pFile; @@ -568,28 +570,33 @@ static int32_t taosInitNormalLog(const char *logName, int32_t maxFileNum) { int64_t filesize = 0; if (taosFStatFile(tsLogObj.logHandle->pFile, &filesize, NULL) != 0) { (void)printf("\nfailed to fstat log file:%s, reason:%s\n", name, strerror(errno)); + taosUnLockLogFile(tsLogObj.logHandle->pFile); return terrno; } tsLogObj.lines = (int32_t)(filesize / 60); if ((code = taosLSeekFile(tsLogObj.logHandle->pFile, 0, SEEK_END)) < 0) { TAOS_UNUSED(printf("failed to seek to the end of log file:%s, reason:%s\n", name, tstrerror(code))); + taosUnLockLogFile(tsLogObj.logHandle->pFile); return code; } (void)sprintf(name, "==================================================\n"); if (taosWriteFile(tsLogObj.logHandle->pFile, name, (uint32_t)strlen(name)) <= 0) { TAOS_UNUSED(printf("failed to write to log file:%s, reason:%s\n", name, tstrerror(terrno))); + taosUnLockLogFile(tsLogObj.logHandle->pFile); return terrno; } (void)sprintf(name, " new log file \n"); if (taosWriteFile(tsLogObj.logHandle->pFile, name, (uint32_t)strlen(name)) <= 0) { TAOS_UNUSED(printf("failed to write to log file:%s, reason:%s\n", name, tstrerror(terrno))); + taosUnLockLogFile(tsLogObj.logHandle->pFile); return terrno; } (void)sprintf(name, "==================================================\n"); if (taosWriteFile(tsLogObj.logHandle->pFile, name, (uint32_t)strlen(name)) <= 0) { TAOS_UNUSED(printf("failed to write to log file:%s, reason:%s\n", name, tstrerror(terrno))); + taosUnLockLogFile(tsLogObj.logHandle->pFile); return terrno; } @@ -635,9 +642,7 @@ static inline void taosPrintLogImp(ELogLevel level, int32_t dflag, const char *b if (tsAsyncLog) { TAOS_UNUSED(taosPushLogBuffer(tsLogObj.logHandle, buffer, len)); } else { - if (taosWriteFile(tsLogObj.logHandle->pFile, buffer, len) <= 0) { - TAOS_UNUSED(printf("failed to write log to file, reason:%s\n", tstrerror(terrno))); - } + TAOS_UNUSED(taosWriteFile(tsLogObj.logHandle->pFile, buffer, len)); } if (tsNumOfLogLines > 0) { @@ -732,9 +737,7 @@ void taosPrintSlowLog(const char *format, ...) { if (tsAsyncLog) { TAOS_UNUSED(taosPushLogBuffer(tsLogObj.slowHandle, buffer, len)); } else { - if (taosWriteFile(tsLogObj.slowHandle->pFile, buffer, len) <= 0) { - TAOS_UNUSED(printf("failed to write slow log to file, reason:%s\n", tstrerror(terrno))); - } + TAOS_UNUSED(taosWriteFile(tsLogObj.slowHandle->pFile, buffer, len)); } taosMemoryFree(buffer); From 9fae6c25e39a716f3798a36b558a1dcfc064ec0c Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 25 Sep 2024 14:22:51 +0800 Subject: [PATCH 37/46] enh: return value process --- source/util/src/tlog.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/util/src/tlog.c b/source/util/src/tlog.c index 2a5de3dfe0..274edeaa90 100644 --- a/source/util/src/tlog.c +++ b/source/util/src/tlog.c @@ -549,6 +549,7 @@ static int32_t taosInitNormalLog(const char *logName, int32_t maxFileNum) { */ maxFileNum = 1; #endif + processLogFileName(logName, maxFileNum); char name[PATH_MAX + 50] = "\0"; From 7aa0c5a9cac78c6da7bb52d60982cd09419fde5c Mon Sep 17 00:00:00 2001 From: zhiyong Date: Wed, 25 Sep 2024 15:40:09 +0800 Subject: [PATCH 38/46] fix microsecond typo --- docs/zh/05-basic/03-query.md | 2 +- docs/zh/14-reference/03-taos-sql/02-database.md | 1 - docs/zh/14-reference/03-taos-sql/10-function.md | 2 +- docs/zh/14-reference/03-taos-sql/28-index.md | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/zh/05-basic/03-query.md b/docs/zh/05-basic/03-query.md index 1b4c3731e6..6afdba0997 100644 --- a/docs/zh/05-basic/03-query.md +++ b/docs/zh/05-basic/03-query.md @@ -181,7 +181,7 @@ INTERVAL(interval_val [, interval_offset]) - FILL:用于指定窗口区间数据缺失的情况下,数据的填充模式。 对于时间窗口,interval_val 和 sliding_val 都表示时间段, 语法上支持三种方式。例如: -1. INTERVAL(1s, 500a) SLIDING(1s),带时间单位的形式,其中的时间单位是单字符表示, 分别为: a (毫秒), b (纳秒), d (天), h (小时), m (分钟), n (月), s (秒), u (微妙), w (周), y (年); +1. INTERVAL(1s, 500a) SLIDING(1s),带时间单位的形式,其中的时间单位是单字符表示, 分别为: a (毫秒), b (纳秒), d (天), h (小时), m (分钟), n (月), s (秒), u (微秒), w (周), y (年); 2. INTERVAL(1000, 500) SLIDING(1000),不带时间单位的形式,将使用查询库的时间精度作为默认时间单位,当存在多个库时默认采用精度更高的库; 3. INTERVAL('1s', '500a') SLIDING('1s'),带时间单位的字符串形式,字符串内部不能有任何空格等其它字符。 diff --git a/docs/zh/14-reference/03-taos-sql/02-database.md b/docs/zh/14-reference/03-taos-sql/02-database.md index d2e9ba0646..7d040a2c44 100644 --- a/docs/zh/14-reference/03-taos-sql/02-database.md +++ b/docs/zh/14-reference/03-taos-sql/02-database.md @@ -80,7 +80,6 @@ database_option: { ```sql create database if not exists db vgroups 10 buffer 10 - ``` 以上示例创建了一个有 10 个 vgroup 名为 db 的数据库, 其中每个 vnode 分配 10MB 的写入缓存 diff --git a/docs/zh/14-reference/03-taos-sql/10-function.md b/docs/zh/14-reference/03-taos-sql/10-function.md index 007e1dd64a..ac69f64f08 100644 --- a/docs/zh/14-reference/03-taos-sql/10-function.md +++ b/docs/zh/14-reference/03-taos-sql/10-function.md @@ -1214,7 +1214,7 @@ TO_TIMESTAMP(ts_str_literal, format_str_literal) - 如果没有指定完整的时间,那么默认时间值为指定或默认时区的 `1970-01-01 00:00:00`, 未指定部分使用该默认值中的对应部分. 暂不支持只指定年日而不指定月日的格式, 如'yyyy-mm-DDD', 支持'yyyy-mm-DD'. - 如果格式串中有`AM`, `PM`等, 那么小时必须是12小时制, 范围必须是01-12. - `to_timestamp`转换具有一定的容错机制, 在格式串和时间戳串不完全对应时, 有时也可转换, 如: `to_timestamp('200101/2', 'yyyyMM1/dd')`, 格式串中多出来的1会被丢弃. 格式串与时间戳串中多余的空格字符(空格, tab等)也会被 自动忽略. 如`to_timestamp(' 23 年 - 1 月 - 01 日 ', 'yy 年-MM月-dd日')` 可以被成功转换. 虽然`MM`等字段需要两个数字对应(只有一位时前面补0), 在`to_timestamp`时, 一个数字也可以成功转换. -- 输出时间戳的精度与查询表的精度相同, 若查询未指定表, 则输出精度为毫秒. 如`select to_timestamp('2023-08-1 10:10:10.123456789', 'yyyy-mm-dd hh:mi:ss.ns')`的输出将会把微妙和纳秒进行截断. 如果指定一张纳秒表, 那么就不会发生截断, 如`select to_timestamp('2023-08-1 10:10:10.123456789', 'yyyy-mm-dd hh:mi:ss.ns') from db_ns.table_ns limit 1`. +- 输出时间戳的精度与查询表的精度相同, 若查询未指定表, 则输出精度为毫秒. 如`select to_timestamp('2023-08-1 10:10:10.123456789', 'yyyy-mm-dd hh:mi:ss.ns')`的输出将会把微秒和纳秒进行截断. 如果指定一张纳秒表, 那么就不会发生截断, 如`select to_timestamp('2023-08-1 10:10:10.123456789', 'yyyy-mm-dd hh:mi:ss.ns') from db_ns.table_ns limit 1`. ### 时间和日期函数 diff --git a/docs/zh/14-reference/03-taos-sql/28-index.md b/docs/zh/14-reference/03-taos-sql/28-index.md index 14c45b6585..ef625de1e7 100644 --- a/docs/zh/14-reference/03-taos-sql/28-index.md +++ b/docs/zh/14-reference/03-taos-sql/28-index.md @@ -28,7 +28,7 @@ TSMA只能基于超级表和普通表创建, 不能基于子表创建. 由于TSMA输出为一张超级表, 因此输出表的行长度受最大行长度限制, 不同函数的`中间结果`大小各异, 一般都大于原始数据大小, 若输出表的行长度大于最大行长度限制, 将会报`Row length exceeds max length`错误. 此时需要减少函数个数或者将常用的函数进行分组拆分到多个TSMA中. -窗口大小的限制为[1m ~ 1y/12n]. INTERVAL 的单位与查询中INTERVAL子句相同, 如 a (毫秒), b (纳秒), h (小时), m (分钟), s (秒), u (微妙), d (天), w(周), n(月), y(年). +窗口大小的限制为[1m ~ 1y/12n]. INTERVAL 的单位与查询中INTERVAL子句相同, 如 a (毫秒), b (纳秒), h (小时), m (分钟), s (秒), u (微秒), d (天), w(周), n(月), y(年). TSMA为库内对象, 但名字全局唯一. 集群内一共可创建TSMA个数受参数`maxTsmaNum`限制, 参数默认值为3, 范围: [0-3]. 注意, 由于TSMA后台计算使用流计算, 因此每创建一条TSMA, 将会创建一条流, 因此能够创建的TSMA条数也受当前已经存在的流条数和最大可创建流条数限制. From e19514e2c4bcdff78e2eaa469e447b03b4c968e5 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Wed, 25 Sep 2024 16:52:17 +0800 Subject: [PATCH 39/46] void cleanups --- source/common/src/cos.c | 2 -- source/common/src/cos_cp.c | 2 +- source/dnode/vnode/src/inc/tsdb.h | 4 ++-- source/dnode/vnode/src/tsdb/tsdbCache.c | 7 ++----- source/dnode/vnode/src/tsdb/tsdbReaderWriter.c | 2 +- 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/source/common/src/cos.c b/source/common/src/cos.c index 88f97a498d..b5032bbecd 100644 --- a/source/common/src/cos.c +++ b/source/common/src/cos.c @@ -897,8 +897,6 @@ upload: if (partData.put_object_data.status != S3StatusOK) { s3PrintError(__FILE__, __LINE__, __func__, partData.put_object_data.status, partData.put_object_data.err_msg); TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(EIO), &lino, _exit); - - //(void)cos_cp_dump(&cp); } if (!manager.etags[seq - 1]) { diff --git a/source/common/src/cos_cp.c b/source/common/src/cos_cp.c index adf4160abe..6aa84c0c3c 100644 --- a/source/common/src/cos_cp.c +++ b/source/common/src/cos_cp.c @@ -309,7 +309,7 @@ int32_t cos_cp_dump(SCheckpoint* cp) { if (!item) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } - (void)cJSON_AddItemToArray(ajson, item); + cJSON_AddItemToArray(ajson, item); if (NULL == cJSON_AddNumberToObject(item, "index", cp->parts[i].index)) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index 20c43bb185..30efee42e5 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -375,7 +375,7 @@ struct STsdb { struct { SVHashTable *ht; SArray *arr; - } *commitInfo; + } * commitInfo; }; struct TSDBKEY { @@ -949,7 +949,7 @@ int32_t tsdbBICacheRelease(SLRUCache *pCache, LRUHandle *h); int32_t tsdbCacheGetBlockS3(SLRUCache *pCache, STsdbFD *pFD, LRUHandle **handle); int32_t tsdbCacheGetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, LRUHandle **handle); -int32_t tsdbCacheSetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, uint8_t *pPage); +void tsdbCacheSetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, uint8_t *pPage); int32_t tsdbCacheDeleteLastrow(SLRUCache *pCache, tb_uid_t uid, TSKEY eKey); int32_t tsdbCacheDeleteLast(SLRUCache *pCache, tb_uid_t uid, TSKEY eKey); diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index 2c70fc1816..6da705423a 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -3682,8 +3682,7 @@ int32_t tsdbCacheGetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, LRUHan return code; } -int32_t tsdbCacheSetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, uint8_t *pPage) { - int32_t code = 0; +void tsdbCacheSetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, uint8_t *pPage) { char key[128] = {0}; int keyLen = 0; LRUHandle *handle = NULL; @@ -3696,7 +3695,7 @@ int32_t tsdbCacheSetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, uint8_ _taos_lru_deleter_t deleter = deleteBCache; uint8_t *pPg = taosMemoryMalloc(charge); if (!pPg) { - TAOS_RETURN(terrno); + return; // ignore error with s3 cache and leave error untouched } memcpy(pPg, pPage, charge); @@ -3710,6 +3709,4 @@ int32_t tsdbCacheSetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, uint8_ (void)taosThreadMutexUnlock(&pFD->pTsdb->pgMutex); tsdbCacheRelease(pFD->pTsdb->pgCache, handle); - - TAOS_RETURN(code); } diff --git a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c index c0d8f7f17d..d867318e1c 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c +++ b/source/dnode/vnode/src/tsdb/tsdbReaderWriter.c @@ -483,7 +483,7 @@ static int32_t tsdbReadFileS3(STsdbFD *pFD, int64_t offset, uint8_t *pBuf, int64 int nPage = pgnoEnd - pgno + 1; for (int i = 0; i < nPage; ++i) { if (pFD->szFile != pgno) { // DONOT cache last volatile page - (void)tsdbCacheSetPageS3(pFD->pTsdb->pgCache, pFD, pgno, pBlock + i * pFD->szPage); + tsdbCacheSetPageS3(pFD->pTsdb->pgCache, pFD, pgno, pBlock + i * pFD->szPage); } if (szHint > 0 && n >= size) { From 3c2420fa9ba8cef9f1a57641ec9301ecd0331660 Mon Sep 17 00:00:00 2001 From: gccgdb1234 Date: Wed, 25 Sep 2024 16:58:59 +0800 Subject: [PATCH 40/46] doc: add NOT IN operator --- docs/zh/14-reference/03-taos-sql/16-operators.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/zh/14-reference/03-taos-sql/16-operators.md b/docs/zh/14-reference/03-taos-sql/16-operators.md index 76af4037c8..50586c3a89 100644 --- a/docs/zh/14-reference/03-taos-sql/16-operators.md +++ b/docs/zh/14-reference/03-taos-sql/16-operators.md @@ -41,9 +41,10 @@ TDengine 支持 `UNION ALL` 和 `UNION` 操作符。UNION ALL 将查询返回的 | 5 | IS [NOT] NULL | 所有类型 | 是否为空值 | | 6 | [NOT] BETWEEN AND | 除 BOOL、BLOB、MEDIUMBLOB、JSON 和 GEOMETRY 外的所有类型 | 闭区间比较 | | 7 | IN | 除 BLOB、MEDIUMBLOB 和 JSON 外的所有类型,且不可以为表的时间戳主键列 | 与列表内的任意值相等 | -| 8 | LIKE | BINARY、NCHAR 和 VARCHAR | 通配符匹配 | -| 9 | MATCH, NMATCH | BINARY、NCHAR 和 VARCHAR | 正则表达式匹配 | -| 10 | CONTAINS | JSON | JSON 中是否存在某键 | +| 8 | NOT IN | 除 BLOB、MEDIUMBLOB 和 JSON 外的所有类型,且不可以为表的时间戳主键列 | 与列表内的任意值都不相等 | +| 9 | LIKE | BINARY、NCHAR 和 VARCHAR | 通配符匹配 | +| 10 | MATCH, NMATCH | BINARY、NCHAR 和 VARCHAR | 正则表达式匹配 | +| 11 | CONTAINS | JSON | JSON 中是否存在某键 | LIKE 条件使用通配符字符串进行匹配检查,规则如下: From 10204b8d78b0ba6a25c9ea17cf469b8b029d44a3 Mon Sep 17 00:00:00 2001 From: gccgdb1234 Date: Wed, 25 Sep 2024 17:09:46 +0800 Subject: [PATCH 41/46] docs: add NOT LIKE operator --- docs/zh/14-reference/03-taos-sql/16-operators.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/zh/14-reference/03-taos-sql/16-operators.md b/docs/zh/14-reference/03-taos-sql/16-operators.md index 50586c3a89..96a35e9ebf 100644 --- a/docs/zh/14-reference/03-taos-sql/16-operators.md +++ b/docs/zh/14-reference/03-taos-sql/16-operators.md @@ -42,9 +42,10 @@ TDengine 支持 `UNION ALL` 和 `UNION` 操作符。UNION ALL 将查询返回的 | 6 | [NOT] BETWEEN AND | 除 BOOL、BLOB、MEDIUMBLOB、JSON 和 GEOMETRY 外的所有类型 | 闭区间比较 | | 7 | IN | 除 BLOB、MEDIUMBLOB 和 JSON 外的所有类型,且不可以为表的时间戳主键列 | 与列表内的任意值相等 | | 8 | NOT IN | 除 BLOB、MEDIUMBLOB 和 JSON 外的所有类型,且不可以为表的时间戳主键列 | 与列表内的任意值都不相等 | -| 9 | LIKE | BINARY、NCHAR 和 VARCHAR | 通配符匹配 | -| 10 | MATCH, NMATCH | BINARY、NCHAR 和 VARCHAR | 正则表达式匹配 | -| 11 | CONTAINS | JSON | JSON 中是否存在某键 | +| 9 | LIKE | BINARY、NCHAR 和 VARCHAR | 通配符匹配所指定的模式串 | +| 10 | NOT LIKE | BINARY、NCHAR 和 VARCHAR | 通配符不匹配所指定的模式串 | +| 11 | MATCH, NMATCH | BINARY、NCHAR 和 VARCHAR | 正则表达式匹配 | +| 12 | CONTAINS | JSON | JSON 中是否存在某键 | LIKE 条件使用通配符字符串进行匹配检查,规则如下: From d183a7b77203fc4f646e2f1556622992c7fc6273 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Wed, 25 Sep 2024 18:21:27 +0800 Subject: [PATCH 42/46] ehn: remove void --- include/util/tcompression.h | 4 +- source/dnode/mgmt/exe/dmMain.c | 77 ++++++++++++------- source/dnode/mgmt/mgmt_dnode/src/dmHandle.c | 16 +++- source/dnode/mgmt/mgmt_dnode/src/dmWorker.c | 9 ++- source/dnode/mgmt/mgmt_mnode/src/mmHandle.c | 4 +- source/dnode/mgmt/mgmt_qnode/src/qmWorker.c | 2 +- source/dnode/mgmt/mgmt_snode/src/smWorker.c | 6 +- source/dnode/mgmt/mgmt_vnode/src/vmHandle.c | 16 +++- source/dnode/mgmt/mgmt_vnode/src/vmInt.c | 16 +++- source/dnode/mgmt/mgmt_vnode/src/vmWorker.c | 30 ++++++-- source/dnode/mgmt/node_mgmt/src/dmEnv.c | 14 +++- source/dnode/mgmt/node_mgmt/src/dmMgmt.c | 23 ++++-- source/dnode/mgmt/node_mgmt/src/dmTransport.c | 39 ++++++++-- source/dnode/mgmt/node_util/src/dmEps.c | 22 ++++-- source/libs/index/src/index.c | 36 +++++++-- source/libs/index/src/indexCache.c | 61 +++++++++++---- source/libs/index/src/indexFst.c | 4 +- source/libs/index/src/indexTfile.c | 25 ++++-- source/util/src/tcompression.c | 6 +- 19 files changed, 305 insertions(+), 105 deletions(-) diff --git a/include/util/tcompression.h b/include/util/tcompression.h index 182465548b..c8821234b6 100644 --- a/include/util/tcompression.h +++ b/include/util/tcompression.h @@ -72,8 +72,8 @@ extern "C" { #ifdef TD_TSZ extern bool lossyFloat; extern bool lossyDouble; -int32_t tsCompressInit(char *lossyColumns, float fPrecision, double dPrecision, uint32_t maxIntervals, - uint32_t intervals, int32_t ifAdtFse, const char *compressor); +void tsCompressInit(char *lossyColumns, float fPrecision, double dPrecision, uint32_t maxIntervals, uint32_t intervals, + int32_t ifAdtFse, const char *compressor); void tsCompressExit(); diff --git a/source/dnode/mgmt/exe/dmMain.c b/source/dnode/mgmt/exe/dmMain.c index 377e4752f8..89569d69d6 100644 --- a/source/dnode/mgmt/exe/dmMain.c +++ b/source/dnode/mgmt/exe/dmMain.c @@ -81,11 +81,21 @@ static void dmSetAssert(int32_t signum, void *sigInfo, void *context) { tsAssert static void dmStopDnode(int signum, void *sigInfo, void *context) { // taosIgnSignal(SIGUSR1); // taosIgnSignal(SIGUSR2); - (void)taosIgnSignal(SIGTERM); - (void)taosIgnSignal(SIGHUP); - (void)taosIgnSignal(SIGINT); - (void)taosIgnSignal(SIGABRT); - (void)taosIgnSignal(SIGBREAK); + if (taosIgnSignal(SIGTERM) != 0) { + dWarn("failed to ignore signal SIGTERM"); + } + if (taosIgnSignal(SIGHUP) != 0) { + dWarn("failed to ignore signal SIGHUP"); + } + if (taosIgnSignal(SIGINT) != 0) { + dWarn("failed to ignore signal SIGINT"); + } + if (taosIgnSignal(SIGABRT) != 0) { + dWarn("failed to ignore signal SIGABRT"); + } + if (taosIgnSignal(SIGBREAK) != 0) { + dWarn("failed to ignore signal SIGBREAK"); + } dInfo("shut down signal is %d", signum); #ifndef WINDOWS @@ -103,11 +113,19 @@ void dmLogCrash(int signum, void *sigInfo, void *context) { // taosIgnSignal(SIGBREAK); #ifndef WINDOWS - (void)taosIgnSignal(SIGBUS); + if (taosIgnSignal(SIGBUS) != 0) { + dWarn("failed to ignore signal SIGBUS"); + } #endif - (void)taosIgnSignal(SIGABRT); - (void)taosIgnSignal(SIGFPE); - (void)taosIgnSignal(SIGSEGV); + if (taosIgnSignal(SIGABRT) != 0) { + dWarn("failed to ignore signal SIGABRT"); + } + if (taosIgnSignal(SIGFPE) != 0) { + dWarn("failed to ignore signal SIGABRT"); + } + if (taosIgnSignal(SIGSEGV) != 0) { + dWarn("failed to ignore signal SIGABRT"); + } char *pMsg = NULL; const char *flags = "UTL FATAL "; @@ -136,24 +154,31 @@ _return: } static void dmSetSignalHandle() { - (void)taosSetSignal(SIGUSR1, dmSetDebugFlag); - (void)taosSetSignal(SIGUSR2, dmSetAssert); - (void)taosSetSignal(SIGTERM, dmStopDnode); - (void)taosSetSignal(SIGHUP, dmStopDnode); - (void)taosSetSignal(SIGINT, dmStopDnode); - (void)taosSetSignal(SIGBREAK, dmStopDnode); + if (taosSetSignal(SIGUSR1, dmSetDebugFlag) != 0) { + dWarn("failed to set signal SIGUSR1"); + } + if (taosSetSignal(SIGUSR2, dmSetAssert) != 0) { + dWarn("failed to set signal SIGUSR1"); + } + if (taosSetSignal(SIGTERM, dmStopDnode) != 0) { + dWarn("failed to set signal SIGUSR1"); + } + if (taosSetSignal(SIGHUP, dmStopDnode) != 0) { + dWarn("failed to set signal SIGUSR1"); + } + if (taosSetSignal(SIGINT, dmStopDnode) != 0) { + dWarn("failed to set signal SIGUSR1"); + } + if (taosSetSignal(SIGBREAK, dmStopDnode) != 0) { + dWarn("failed to set signal SIGUSR1"); + } #ifndef WINDOWS - (void)taosSetSignal(SIGTSTP, dmStopDnode); - (void)taosSetSignal(SIGQUIT, dmStopDnode); -#endif - -#if 0 -#ifndef WINDOWS - (void)taosSetSignal(SIGBUS, dmLogCrash); -#endif - (void)taosSetSignal(SIGABRT, dmLogCrash); - (void)taosSetSignal(SIGFPE, dmLogCrash); - (void)taosSetSignal(SIGSEGV, dmLogCrash); + if (taosSetSignal(SIGTSTP, dmStopDnode) != 0) { + dWarn("failed to set signal SIGUSR1"); + } + if (taosSetSignal(SIGQUIT, dmStopDnode) != 0) { + dWarn("failed to set signal SIGUSR1"); + } #endif } diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c index 020a8077b2..419c669103 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c @@ -45,7 +45,9 @@ static void dmMayShouldUpdateIpWhiteList(SDnodeMgmt *pMgmt, int64_t ver) { if (pMgmt->pData->ipWhiteVer == ver) { if (ver == 0) { dDebug("disable ip-white-list on dnode ver: %" PRId64 ", status ver: %" PRId64 "", pMgmt->pData->ipWhiteVer, ver); - (void)rpcSetIpWhite(pMgmt->msgCb.serverRpc, NULL); + if (rpcSetIpWhite(pMgmt->msgCb.serverRpc, NULL) != 0) { + dError("failed to disable ip white list on dnode"); + } } return; } @@ -91,7 +93,9 @@ static void dmProcessStatusRsp(SDnodeMgmt *pMgmt, SRpcMsg *pRsp) { dGInfo("dnode:%d, set to dropped since not exist in mnode, statusSeq:%d", pMgmt->pData->dnodeId, pMgmt->statusSeq); pMgmt->pData->dropped = 1; - (void)dmWriteEps(pMgmt->pData); + if (dmWriteEps(pMgmt->pData) != 0) { + dError("failed to write dnode file"); + } dInfo("dnode will exit since it is in the dropped state"); (void)raise(SIGINT); } @@ -147,7 +151,9 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) { req.clusterCfg.monitorParas.tsSlowLogThresholdTest = tsSlowLogThresholdTest; tstrncpy(req.clusterCfg.monitorParas.tsSlowLogExceptDb, tsSlowLogExceptDb, TSDB_DB_NAME_LEN); char timestr[32] = "1970-01-01 00:00:00.00"; - (void)taosParseTime(timestr, &req.clusterCfg.checkTime, (int32_t)strlen(timestr), TSDB_TIME_PRECISION_MILLI, 0); + if (taosParseTime(timestr, &req.clusterCfg.checkTime, (int32_t)strlen(timestr), TSDB_TIME_PRECISION_MILLI, 0) != 0) { + dError("failed to parse time since %s", tstrerror(code)); + } memcpy(req.clusterCfg.timezone, tsTimezoneStr, TD_TIMEZONE_LEN); memcpy(req.clusterCfg.locale, tsLocale, TD_LOCALE_LEN); memcpy(req.clusterCfg.charset, tsCharset, TD_LOCALE_LEN); @@ -243,7 +249,9 @@ void dmSendNotifyReq(SDnodeMgmt *pMgmt, SNotifyReq *pReq) { SEpSet epSet = {0}; dmGetMnodeEpSet(pMgmt->pData, &epSet); - (void)rpcSendRequest(pMgmt->msgCb.clientRpc, &epSet, &rpcMsg, NULL); + if (rpcSendRequest(pMgmt->msgCb.clientRpc, &epSet, &rpcMsg, NULL) != 0) { + dError("failed to send notify req"); + } } int32_t dmProcessAuthRsp(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c b/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c index 1ed7c9ecd9..58b86b20b1 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c @@ -305,11 +305,16 @@ int32_t dmStartNotifyThread(SDnodeMgmt *pMgmt) { void dmStopNotifyThread(SDnodeMgmt *pMgmt) { if (taosCheckPthreadValid(pMgmt->notifyThread)) { - (void)tsem_post(&dmNotifyHdl.sem); + if (tsem_post(&dmNotifyHdl.sem) != 0) { + dError("failed to post notify sem"); + } + (void)taosThreadJoin(pMgmt->notifyThread, NULL); taosThreadClear(&pMgmt->notifyThread); } - (void)tsem_destroy(&dmNotifyHdl.sem); + if (tsem_destroy(&dmNotifyHdl.sem) != 0) { + dError("failed to destroy notify sem"); + } } int32_t dmStartMonitorThread(SDnodeMgmt *pMgmt) { diff --git a/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c b/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c index 43c40c65c3..7204cde8f7 100644 --- a/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c +++ b/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c @@ -17,7 +17,9 @@ #include "mmInt.h" void mmGetMonitorInfo(SMnodeMgmt *pMgmt, SMonMmInfo *pInfo) { - (void)mndGetMonitorInfo(pMgmt->pMnode, &pInfo->cluster, &pInfo->vgroup, &pInfo->stb, &pInfo->grant); + if (mndGetMonitorInfo(pMgmt->pMnode, &pInfo->cluster, &pInfo->vgroup, &pInfo->stb, &pInfo->grant) != 0) { + dError("failed to get monitor info"); + } } void mmGetMnodeLoads(SMnodeMgmt *pMgmt, SMonMloadInfo *pInfo) { diff --git a/source/dnode/mgmt/mgmt_qnode/src/qmWorker.c b/source/dnode/mgmt/mgmt_qnode/src/qmWorker.c index 9ae16f7581..65c2bb9bf3 100644 --- a/source/dnode/mgmt/mgmt_qnode/src/qmWorker.c +++ b/source/dnode/mgmt/mgmt_qnode/src/qmWorker.c @@ -23,7 +23,7 @@ static inline void qmSendRsp(SRpcMsg *pMsg, int32_t code) { .contLen = pMsg->info.rspLen, .info = pMsg->info, }; - (void)tmsgSendRsp(&rsp); + tmsgSendRsp(&rsp); } static void qmProcessQueue(SQueueInfo *pInfo, SRpcMsg *pMsg) { diff --git a/source/dnode/mgmt/mgmt_snode/src/smWorker.c b/source/dnode/mgmt/mgmt_snode/src/smWorker.c index e8594130d6..8c33c5bb4b 100644 --- a/source/dnode/mgmt/mgmt_snode/src/smWorker.c +++ b/source/dnode/mgmt/mgmt_snode/src/smWorker.c @@ -23,15 +23,15 @@ static inline void smSendRsp(SRpcMsg *pMsg, int32_t code) { .contLen = pMsg->info.rspLen, .info = pMsg->info, }; - (void)tmsgSendRsp(&rsp); + tmsgSendRsp(&rsp); } static void smProcessWriteQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numOfMsgs) { SSnodeMgmt *pMgmt = pInfo->ahandle; for (int32_t i = 0; i < numOfMsgs; i++) { - SRpcMsg *pMsg = NULL; - (void)taosGetQitem(qall, (void **)&pMsg); + SRpcMsg *pMsg = NULL; + int32_t num = taosGetQitem(qall, (void **)&pMsg); const STraceId *trace = &pMsg->info.traceId; dTrace("msg:%p, get from snode-write queue", pMsg); diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c b/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c index 3d6ff48dd1..70c873e0f5 100644 --- a/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c +++ b/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c @@ -35,10 +35,14 @@ void vmGetVnodeLoads(SVnodeMgmt *pMgmt, SMonVloadInfo *pInfo, bool isReset) { SVnodeObj *pVnode = *ppVnode; SVnodeLoad vload = {.vgId = pVnode->vgId}; if (!pVnode->failed) { - (void)vnodeGetLoad(pVnode->pImpl, &vload); + if (vnodeGetLoad(pVnode->pImpl, &vload) != 0) { + dError("failed to get vnode load"); + } if (isReset) vnodeResetLoad(pVnode->pImpl, &vload); } - (void)taosArrayPush(pInfo->pVloads, &vload); + if (taosArrayPush(pInfo->pVloads, &vload) == NULL) { + dError("failed to push vnode load"); + } pIter = taosHashIterate(pMgmt->hash, pIter); } @@ -116,7 +120,9 @@ void vmGetMonitorInfo(SVnodeMgmt *pMgmt, SMonVmInfo *pInfo) { pMgmt->state.numOfBatchInsertReqs = numOfBatchInsertReqs; pMgmt->state.numOfBatchInsertSuccessReqs = numOfBatchInsertSuccessReqs; - (void)tfsGetMonitorInfo(pMgmt->pTfs, &pInfo->tfs); + if (tfsGetMonitorInfo(pMgmt->pTfs, &pInfo->tfs) != 0) { + dError("failed to get tfs monitor info"); + } taosArrayDestroy(pVloads); } @@ -845,7 +851,9 @@ int32_t vmProcessDropVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) { } vmCloseVnode(pMgmt, pVnode, false); - (void)vmWriteVnodeListToFile(pMgmt); + if (vmWriteVnodeListToFile(pMgmt) != 0) { + dError("vgId:%d, failed to write vnode list since %s", vgId, terrstr()); + } dInfo("vgId:%d, is dropped", vgId); return 0; diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmInt.c b/source/dnode/mgmt/mgmt_vnode/src/vmInt.c index dd921c615b..bb73f43ebb 100644 --- a/source/dnode/mgmt/mgmt_vnode/src/vmInt.c +++ b/source/dnode/mgmt/mgmt_vnode/src/vmInt.c @@ -233,8 +233,12 @@ void vmCloseVnode(SVnodeMgmt *pMgmt, SVnodeObj *pVnode, bool commitAndRemoveWal) if (commitAndRemoveWal) { dInfo("vgId:%d, commit data for vnode split", pVnode->vgId); - (void)vnodeSyncCommit(pVnode->pImpl); - (void)vnodeBegin(pVnode->pImpl); + if (vnodeSyncCommit(pVnode->pImpl) != 0) { + dError("vgId:%d, failed to commit data", pVnode->vgId); + } + if (vnodeBegin(pVnode->pImpl) != 0) { + dError("vgId:%d, failed to begin", pVnode->vgId); + } dInfo("vgId:%d, commit data finished", pVnode->vgId); } @@ -248,8 +252,12 @@ _closed: if (commitAndRemoveWal) { snprintf(path, TSDB_FILENAME_LEN, "vnode%svnode%d%swal", TD_DIRSEP, pVnode->vgId, TD_DIRSEP); dInfo("vgId:%d, remove all wals, path:%s", pVnode->vgId, path); - (void)tfsRmdir(pMgmt->pTfs, path); - (void)tfsMkdir(pMgmt->pTfs, path); + if (tfsRmdir(pMgmt->pTfs, path) != 0) { + dTrace("vgId:%d, failed to remove wals, path:%s", pVnode->vgId, path); + } + if (tfsMkdir(pMgmt->pTfs, path) != 0) { + dTrace("vgId:%d, failed to create wals, path:%s", pVnode->vgId, path); + } } if (pVnode->dropped) { diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmWorker.c b/source/dnode/mgmt/mgmt_vnode/src/vmWorker.c index 9829d5ab3a..9c436a3dfa 100644 --- a/source/dnode/mgmt/mgmt_vnode/src/vmWorker.c +++ b/source/dnode/mgmt/mgmt_vnode/src/vmWorker.c @@ -187,7 +187,9 @@ static void vmProcessSyncQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numOf static void vmSendResponse(SRpcMsg *pMsg) { if (pMsg->info.handle) { SRpcMsg rsp = {.info = pMsg->info, .code = terrno}; - (void)rpcSendResponse(&rsp); + if (rpcSendResponse(&rsp) != 0) { + dError("failed to send response since %s", terrstr()); + } } } @@ -389,10 +391,28 @@ int32_t vmAllocQueue(SVnodeMgmt *pMgmt, SVnodeObj *pVnode) { SMultiWorkerCfg scfg = {.max = 1, .name = "vnode-sync", .fp = (FItems)vmProcessSyncQueue, .param = pVnode}; SMultiWorkerCfg sccfg = {.max = 1, .name = "vnode-sync-rd", .fp = (FItems)vmProcessSyncQueue, .param = pVnode}; SMultiWorkerCfg acfg = {.max = 1, .name = "vnode-apply", .fp = (FItems)vnodeApplyWriteMsg, .param = pVnode->pImpl}; - (void)tMultiWorkerInit(&pVnode->pWriteW, &wcfg); - (void)tMultiWorkerInit(&pVnode->pSyncW, &scfg); - (void)tMultiWorkerInit(&pVnode->pSyncRdW, &sccfg); - (void)tMultiWorkerInit(&pVnode->pApplyW, &acfg); + code = tMultiWorkerInit(&pVnode->pWriteW, &wcfg); + if (code) { + return code; + } + code = tMultiWorkerInit(&pVnode->pSyncW, &scfg); + if (code) { + tMultiWorkerCleanup(&pVnode->pWriteW); + return code; + } + code = tMultiWorkerInit(&pVnode->pSyncRdW, &sccfg); + if (code) { + tMultiWorkerCleanup(&pVnode->pWriteW); + tMultiWorkerCleanup(&pVnode->pSyncW); + return code; + } + code = tMultiWorkerInit(&pVnode->pApplyW, &acfg); + if (code) { + tMultiWorkerCleanup(&pVnode->pWriteW); + tMultiWorkerCleanup(&pVnode->pSyncW); + tMultiWorkerCleanup(&pVnode->pSyncRdW); + return code; + } pVnode->pQueryQ = tQueryAutoQWorkerAllocQueue(&pMgmt->queryPool, pVnode, (FItem)vmProcessQueryQueue); pVnode->pStreamQ = tAutoQWorkerAllocQueue(&pMgmt->streamPool, pVnode, (FItem)vmProcessStreamQueue); diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index f48ca35330..2d0ad70adf 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -47,8 +47,14 @@ static int32_t dmCheckRepeatInit(SDnode *pDnode) { } static int32_t dmInitSystem() { - (void)taosIgnSIGPIPE(); - (void)taosBlockSIGPIPE(); + if (taosIgnSIGPIPE() != 0) { + dError("failed to ignore SIGPIPE"); + } + + if (taosBlockSIGPIPE() != 0) { + dError("failed to block SIGPIPE"); + } + taosResolveCRC(); return 0; } @@ -204,7 +210,9 @@ void dmCleanup() { auditCleanup(); syncCleanUp(); walCleanUp(); - (void)udfcClose(); + if (udfcClose() != 0) { + dError("failed to close udfc"); + } udfStopUdfd(); taosStopCacheRefreshWorker(); (void)dmDiskClose(); diff --git a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c index ba0a40e048..f77571c665 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c +++ b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c @@ -47,8 +47,7 @@ int32_t dmInitDnode(SDnode *pDnode) { } // compress module init - (void)tsCompressInit(tsLossyColumns, tsFPrecision, tsDPrecision, tsMaxRange, tsCurRange, (int)tsIfAdtFse, - tsCompressor); + tsCompressInit(tsLossyColumns, tsFPrecision, tsDPrecision, tsMaxRange, tsCurRange, (int)tsIfAdtFse, tsCompressor); pDnode->wrappers[DNODE].func = dmGetMgmtFunc(); pDnode->wrappers[MNODE].func = mmGetMgmtFunc(); @@ -226,7 +225,10 @@ void dmClearVars(SDnode *pDnode) { (void)taosThreadRwlockDestroy(&pWrapper->lock); } if (pDnode->lockfile != NULL) { - (void)taosUnLockFile(pDnode->lockfile); + if (taosUnLockFile(pDnode->lockfile) != 0) { + dError("failed to unlock file"); + } + (void)taosCloseFile(&pDnode->lockfile); pDnode->lockfile = NULL; } @@ -343,7 +345,9 @@ void dmProcessNetTestReq(SDnode *pDnode, SRpcMsg *pMsg) { rsp.contLen = pMsg->contLen; } - (void)rpcSendResponse(&rsp); + if (rpcSendResponse(&rsp) != 0) { + dError("failed to send response, msg:%p", &rsp); + } rpcFreeCont(pMsg->pCont); } @@ -360,11 +364,16 @@ void dmProcessServerStartupStatus(SDnode *pDnode, SRpcMsg *pMsg) { } else { rsp.pCont = rpcMallocCont(contLen); if (rsp.pCont != NULL) { - (void)tSerializeSServerStatusRsp(rsp.pCont, contLen, &statusRsp); - rsp.contLen = contLen; + if (tSerializeSServerStatusRsp(rsp.pCont, contLen, &statusRsp) < 0) { + rsp.code = TSDB_CODE_APP_ERROR; + } else { + rsp.contLen = contLen; + } } } - (void)rpcSendResponse(&rsp); + if (rpcSendResponse(&rsp) != 0) { + dError("failed to send response, msg:%p", &rsp); + } rpcFreeCont(pMsg->pCont); } diff --git a/source/dnode/mgmt/node_mgmt/src/dmTransport.c b/source/dnode/mgmt/node_mgmt/src/dmTransport.c index e204b5d4aa..b9f4ab54f4 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmTransport.c +++ b/source/dnode/mgmt/node_mgmt/src/dmTransport.c @@ -18,7 +18,11 @@ #include "qworker.h" #include "tversion.h" -static inline void dmSendRsp(SRpcMsg *pMsg) { (void)rpcSendResponse(pMsg); } +static inline void dmSendRsp(SRpcMsg *pMsg) { + if (rpcSendResponse(pMsg) != 0) { + dError("failed to send response, msg:%p", pMsg); + } +} static inline void dmBuildMnodeRedirectRsp(SDnode *pDnode, SRpcMsg *pMsg) { SEpSet epSet = {0}; @@ -113,7 +117,11 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) { pRpc->info.handle, pRpc->contLen, pRpc->code, pRpc->info.ahandle, pRpc->info.refId); int32_t svrVer = 0; - (void)taosVersionStrToInt(version, &svrVer); + code = taosVersionStrToInt(version, &svrVer); + if (code != 0) { + dError("failed to convert version string:%s to int, code:%d", version, code); + goto _OVER; + } if ((code = taosCheckVersionCompatible(pRpc->info.cliVer, svrVer, 3)) != 0) { dError("Version not compatible, cli ver: %d, svr ver: %d, ip:0x%x", pRpc->info.cliVer, svrVer, pRpc->info.conn.clientIp); @@ -253,7 +261,9 @@ _OVER: if (pWrapper != NULL) { dmSendRsp(&rsp); } else { - (void)rpcSendResponse(&rsp); + if (rpcSendResponse(&rsp) != 0) { + dError("failed to send response, msg:%p", &rsp); + } } } @@ -310,7 +320,9 @@ static inline int32_t dmSendReq(const SEpSet *pEpSet, SRpcMsg *pMsg) { return code; } else { pMsg->info.handle = 0; - (void)rpcSendRequest(pDnode->trans.clientRpc, pEpSet, pMsg, NULL); + if (rpcSendRequest(pDnode->trans.clientRpc, pEpSet, pMsg, NULL) != 0) { + dError("failed to send rpc msg"); + } return 0; } } @@ -396,7 +408,9 @@ int32_t dmInitClient(SDnode *pDnode) { rpcInit.timeToGetConn = tsTimeToGetAvailableConn; rpcInit.notWaitAvaliableConn = 0; - (void)taosVersionStrToInt(version, &(rpcInit.compatibilityVer)); + if (taosVersionStrToInt(version, &(rpcInit.compatibilityVer)) != 0) { + dError("failed to convert version string:%s to int", version); + } pTrans->clientRpc = rpcOpen(&rpcInit); if (pTrans->clientRpc == NULL) { @@ -440,7 +454,10 @@ int32_t dmInitStatusClient(SDnode *pDnode) { rpcInit.supportBatch = 1; rpcInit.batchSize = 8 * 1024; rpcInit.timeToGetConn = tsTimeToGetAvailableConn; - (void)taosVersionStrToInt(version, &(rpcInit.compatibilityVer)); + + if (taosVersionStrToInt(version, &(rpcInit.compatibilityVer)) != 0) { + dError("failed to convert version string:%s to int", version); + } pTrans->statusRpc = rpcOpen(&rpcInit); if (pTrans->statusRpc == NULL) { @@ -485,7 +502,9 @@ int32_t dmInitSyncClient(SDnode *pDnode) { rpcInit.supportBatch = 1; rpcInit.batchSize = 8 * 1024; rpcInit.timeToGetConn = tsTimeToGetAvailableConn; - (void)taosVersionStrToInt(version, &(rpcInit.compatibilityVer)); + if (taosVersionStrToInt(version, &(rpcInit.compatibilityVer)) != 0) { + dError("failed to convert version string:%s to int", version); + } pTrans->syncRpc = rpcOpen(&rpcInit); if (pTrans->syncRpc == NULL) { @@ -536,7 +555,11 @@ int32_t dmInitServer(SDnode *pDnode) { rpcInit.idleTime = tsShellActivityTimer * 1000; rpcInit.parent = pDnode; rpcInit.compressSize = tsCompressMsgSize; - (void)taosVersionStrToInt(version, &(rpcInit.compatibilityVer)); + + if (taosVersionStrToInt(version, &(rpcInit.compatibilityVer)) != 0) { + dError("failed to convert version string:%s to int", version); + } + pTrans->serverRpc = rpcOpen(&rpcInit); if (pTrans->serverRpc == NULL) { dError("failed to init dnode rpc server since:%s", tstrerror(terrno)); diff --git a/source/dnode/mgmt/node_util/src/dmEps.c b/source/dnode/mgmt/node_util/src/dmEps.c index 0ae184ffd3..db401375c7 100644 --- a/source/dnode/mgmt/node_util/src/dmEps.c +++ b/source/dnode/mgmt/node_util/src/dmEps.c @@ -259,7 +259,9 @@ _OVER: if (taosArrayGetSize(pData->dnodeEps) == 0) { SDnodeEp dnodeEp = {0}; dnodeEp.isMnode = 1; - (void)taosGetFqdnPortFromEp(tsFirst, &dnodeEp.ep); + if (taosGetFqdnPortFromEp(tsFirst, &dnodeEp.ep) != 0) { + dError("failed to get fqdn and port from ep:%s", tsFirst); + } if (taosArrayPush(pData->dnodeEps, &dnodeEp) == NULL) { return terrno; } @@ -370,11 +372,19 @@ int32_t dmGetDnodeSize(SDnodeData *pData) { } void dmUpdateEps(SDnodeData *pData, SArray *eps) { - (void)taosThreadRwlockWrlock(&pData->lock); + if (taosThreadRwlockWrlock(&pData->lock) != 0) { + dError("failed to lock dnode lock"); + } + dDebug("new dnode list get from mnode, dnodeVer:%" PRId64, pData->dnodeVer); dmResetEps(pData, eps); - (void)dmWriteEps(pData); - (void)taosThreadRwlockUnlock(&pData->lock); + if (dmWriteEps(pData) != 0) { + dError("failed to write dnode file"); + } + + if (taosThreadRwlockUnlock(&pData->lock) != 0) { + dError("failed to unlock dnode lock"); + } } static void dmResetEps(SDnodeData *pData, SArray *dnodeEps) { @@ -590,7 +600,9 @@ void dmRemoveDnodePairs(SDnodeData *pData) { snprintf(file, sizeof(file), "%s%sdnode%sep.json", tsDataDir, TD_DIRSEP, TD_DIRSEP); snprintf(bak, sizeof(bak), "%s%sdnode%sep.json.bak", tsDataDir, TD_DIRSEP, TD_DIRSEP); dInfo("dnode file:%s is rename to bak file", file); - (void)taosRenameFile(file, bak); + if (taosRenameFile(file, bak) != 0) { + dError("failed to rename dnode file:%s to bak file:%s since %s", file, bak, tstrerror(terrno)); + } } static int32_t dmReadDnodePairs(SDnodeData *pData) { diff --git a/source/libs/index/src/index.c b/source/libs/index/src/index.c index 38d4efd1ed..7d26b30276 100644 --- a/source/libs/index/src/index.c +++ b/source/libs/index/src/index.c @@ -137,8 +137,12 @@ int32_t indexOpen(SIndexOpts* opts, const char* path, SIndex** index) { TAOS_CHECK_GOTO(terrno, NULL, END); } - TAOS_UNUSED(taosThreadMutexInit(&idx->mtx, NULL)); - TAOS_UNUSED(tsem_init(&idx->sem, 0, 0)); + if (taosThreadMutexInit(&idx->mtx, NULL) != 0) { + TAOS_CHECK_GOTO(terrno, NULL, END); + } + if (tsem_init(&idx->sem, 0, 0) != 0) { + TAOS_CHECK_GOTO(terrno, NULL, END); + } idx->refId = idxAddRef(idx); idx->opts = *opts; @@ -213,7 +217,10 @@ void idxReleaseRef(int64_t ref) { int32_t indexPut(SIndex* index, SIndexMultiTerm* fVals, uint64_t uid) { // TODO(yihao): reduce the lock range int32_t code = 0; - TAOS_UNUSED(taosThreadMutexLock(&index->mtx)); + if (taosThreadMutexLock(&index->mtx) != 0) { + indexError("failed to lock index mutex"); + } + for (int i = 0; i < taosArrayGetSize(fVals); i++) { SIndexTerm* p = taosArrayGetP(fVals, i); @@ -231,7 +238,9 @@ int32_t indexPut(SIndex* index, SIndexMultiTerm* fVals, uint64_t uid) { } } } - TAOS_UNUSED(taosThreadMutexUnlock(&index->mtx)); + if (taosThreadMutexUnlock(&index->mtx) != 0) { + indexError("failed to unlock index mutex"); + } if (code != 0) { return code; @@ -463,7 +472,10 @@ static int32_t idxTermSearch(SIndex* sIdx, SIndexTermQuery* query, SArray** resu int32_t sz = idxSerialCacheKey(&key, buf); - TAOS_UNUSED(taosThreadMutexLock(&sIdx->mtx)); + if (taosThreadMutexLock(&sIdx->mtx) != 0) { + indexError("failed to lock index mutex"); + } + IndexCache** pCache = taosHashGet(sIdx->colObj, buf, sz); cache = (pCache == NULL) ? NULL : *pCache; TAOS_UNUSED(taosThreadMutexUnlock(&sIdx->mtx)); @@ -757,7 +769,9 @@ static int64_t idxGetAvailableVer(SIndex* sIdx, IndexCache* cache) { IndexTFile* tf = (IndexTFile*)(sIdx->tindex); - TAOS_UNUSED(taosThreadMutexLock(&tf->mtx)); + if (taosThreadMutexLock(&tf->mtx) != 0) { + indexError("failed to lock tfile mutex"); + } TFileReader* rd = tfileCacheGet(tf->cache, &key); TAOS_UNUSED(taosThreadMutexUnlock(&tf->mtx)); @@ -801,9 +815,15 @@ static int32_t idxGenTFile(SIndex* sIdx, IndexCache* cache, SArray* batch) { TFileHeader* header = &reader->header; ICacheKey key = {.suid = cache->suid, .colName = header->colName, .nColName = strlen(header->colName)}; - TAOS_UNUSED(taosThreadMutexLock(&tf->mtx)); + if (taosThreadMutexLock(&tf->mtx) != 0) { + indexError("failed to lock tfile mutex"); + } + code = tfileCachePut(tf->cache, &key, reader); - TAOS_UNUSED(taosThreadMutexUnlock(&tf->mtx)); + + if (taosThreadMutexUnlock(&tf->mtx) != 0) { + indexError("failed to unlock tfile mutex"); + } return code; diff --git a/source/libs/index/src/indexCache.c b/source/libs/index/src/indexCache.c index 4a03edaef4..eff2922119 100644 --- a/source/libs/index/src/indexCache.c +++ b/source/libs/index/src/indexCache.c @@ -398,8 +398,17 @@ IndexCache* idxCacheCreate(SIndex* idx, uint64_t suid, const char* colName, int8 cache->suid = suid; cache->occupiedMem = 0; - TAOS_UNUSED(taosThreadMutexInit(&cache->mtx, NULL)); - TAOS_UNUSED(taosThreadCondInit(&cache->finished, NULL)); + if (taosThreadMutexInit(&cache->mtx, NULL) != 0) { + indexError("failed to create mutex for index cache"); + taosMemoryFree(cache); + return NULL; + } + + if (taosThreadCondInit(&cache->finished, NULL) != 0) { + indexError("failed to create cond for index cache"); + taosMemoryFree(cache); + return NULL; + } idxCacheRef(cache); if (idx != NULL) { @@ -410,10 +419,16 @@ IndexCache* idxCacheCreate(SIndex* idx, uint64_t suid, const char* colName, int8 void idxCacheDebug(IndexCache* cache) { MemTable* tbl = NULL; - TAOS_UNUSED(taosThreadMutexLock(&cache->mtx)); + if ((taosThreadMutexLock(&cache->mtx)) != 0) { + indexError("failed to lock cache mutex"); + } + tbl = cache->mem; idxMemRef(tbl); - TAOS_UNUSED(taosThreadMutexUnlock(&cache->mtx)); + + if (taosThreadMutexUnlock(&cache->mtx) != 0) { + indexError("failed to unlock cache mutex"); + } { SSkipList* slt = tbl->mem; @@ -432,7 +447,9 @@ void idxCacheDebug(IndexCache* cache) { } { - TAOS_UNUSED(taosThreadMutexLock(&cache->mtx)); + if (taosThreadMutexLock(&cache->mtx) != 0) { + indexError("failed to lock cache mutex"); + } tbl = cache->imm; idxMemRef(tbl); TAOS_UNUSED(taosThreadMutexUnlock(&cache->mtx)); @@ -480,7 +497,9 @@ void idxCacheDestroyImm(IndexCache* cache) { return; } MemTable* tbl = NULL; - TAOS_UNUSED(taosThreadMutexLock(&cache->mtx)); + if (taosThreadMutexLock(&cache->mtx) != 0) { + indexError("failed to lock cache mutex"); + } tbl = cache->imm; cache->imm = NULL; // or throw int bg thread @@ -517,7 +536,11 @@ Iterate* idxCacheIteratorCreate(IndexCache* cache) { if (iter == NULL) { return NULL; } - TAOS_UNUSED(taosThreadMutexLock(&cache->mtx)); + if (taosThreadMutexLock(&cache->mtx) != 0) { + indexError("failed to lock cache mutex"); + taosMemoryFree(iter); + return NULL; + } idxMemRef(cache->imm); @@ -615,7 +638,9 @@ int idxCachePut(void* cache, SIndexTerm* term, uint64_t uid) { // ugly code, refactor later int64_t estimate = sizeof(ct) + strlen(ct->colVal); - TAOS_UNUSED(taosThreadMutexLock(&pCache->mtx)); + if (taosThreadMutexLock(&pCache->mtx) != 0) { + indexError("failed to lock cache mutex"); + } pCache->occupiedMem += estimate; idxCacheMakeRoomForWrite(pCache); MemTable* tbl = pCache->mem; @@ -623,7 +648,9 @@ int idxCachePut(void* cache, SIndexTerm* term, uint64_t uid) { TAOS_UNUSED(tSkipListPut(tbl->mem, (char*)ct)); idxMemUnRef(tbl); - TAOS_UNUSED(taosThreadMutexUnlock(&pCache->mtx)); + if (taosThreadMutexUnlock(&pCache->mtx) != 0) { + indexError("failed to unlock cache mutex"); + } idxCacheUnRef(pCache); return 0; } @@ -631,13 +658,17 @@ void idxCacheForceToMerge(void* cache) { IndexCache* pCache = cache; idxCacheRef(pCache); - TAOS_UNUSED(taosThreadMutexLock(&pCache->mtx)); + if (taosThreadMutexLock(&pCache->mtx) != 0) { + indexError("failed to lock cache mutex"); + } indexInfo("%p is forced to merge into tfile", pCache); pCache->occupiedMem += MEM_SIGNAL_QUIT; idxCacheMakeRoomForWrite(pCache); - TAOS_UNUSED(taosThreadMutexUnlock(&pCache->mtx)); + if (taosThreadMutexUnlock(&pCache->mtx) != 0) { + indexError("failed to unlock cache mutex"); + } idxCacheUnRef(pCache); return; } @@ -668,12 +699,16 @@ int idxCacheSearch(void* cache, SIndexTermQuery* query, SIdxTRslt* result, STerm IndexCache* pCache = cache; MemTable *mem = NULL, *imm = NULL; - TAOS_UNUSED(taosThreadMutexLock(&pCache->mtx)); + if (taosThreadMutexLock(&pCache->mtx) != 0) { + indexError("failed to lock cache mutex"); + } mem = pCache->mem; imm = pCache->imm; idxMemRef(mem); idxMemRef(imm); - TAOS_UNUSED(taosThreadMutexUnlock(&pCache->mtx)); + if (taosThreadMutexUnlock(&pCache->mtx) != 0) { + indexError("failed to unlock cache mutex"); + } int64_t st = taosGetTimestampUs(); diff --git a/source/libs/index/src/indexFst.c b/source/libs/index/src/indexFst.c index 6f07df50fb..4f1cc61719 100644 --- a/source/libs/index/src/indexFst.c +++ b/source/libs/index/src/indexFst.c @@ -994,7 +994,9 @@ Fst* fstCreate(FstSlice* slice) { *s = fstSliceCopy(slice, 0, FST_SLICE_LEN(slice) - 1); fst->data = s; - TAOS_UNUSED(taosThreadMutexInit(&fst->mtx, NULL)); + if (taosThreadMutexInit(&fst->mtx, NULL) != 0) { + goto FST_CREAT_FAILED; + } return fst; FST_CREAT_FAILED: diff --git a/source/libs/index/src/indexTfile.c b/source/libs/index/src/indexTfile.c index d92fec104b..1130243e27 100644 --- a/source/libs/index/src/indexTfile.c +++ b/source/libs/index/src/indexTfile.c @@ -739,7 +739,11 @@ IndexTFile* idxTFileCreate(SIndex* idx, const char* path) { tfileCacheDestroy(cache); return NULL; } - TAOS_UNUSED(taosThreadMutexInit(&tfile->mtx, NULL)); + if (taosThreadMutexInit(&tfile->mtx, NULL) != 0) { + taosMemoryFree(tfile); + tfileCacheDestroy(cache); + return NULL; + } tfile->cache = cache; return tfile; } @@ -764,9 +768,16 @@ int idxTFileSearch(void* tfile, SIndexTermQuery* query, SIdxTRslt* result) { SIndexTerm* term = query->term; ICacheKey key = {.suid = term->suid, .colType = term->colType, .colName = term->colName, .nColName = term->nColName}; - TAOS_UNUSED(taosThreadMutexLock(&pTfile->mtx)); + if (taosThreadMutexLock(&pTfile->mtx) != 0) { + indexError("failed to lock tfile mutex"); + } + TFileReader* reader = tfileCacheGet(pTfile->cache, &key); - TAOS_UNUSED(taosThreadMutexUnlock(&pTfile->mtx)); + + if (taosThreadMutexUnlock(&pTfile->mtx) != 0) { + indexError("failed to unlock tfile mutex"); + } + if (reader == NULL) { return 0; } @@ -883,9 +894,13 @@ TFileReader* tfileGetReaderByCol(IndexTFile* tf, uint64_t suid, char* colName) { TFileReader* rd = NULL; ICacheKey key = {.suid = suid, .colType = TSDB_DATA_TYPE_BINARY, .colName = colName, .nColName = strlen(colName)}; - TAOS_UNUSED(taosThreadMutexLock(&tf->mtx)); + if (taosThreadMutexLock(&tf->mtx) != 0) { + indexError("failed to lock tfile mutex"); + } rd = tfileCacheGet(tf->cache, &key); - TAOS_UNUSED(taosThreadMutexUnlock(&tf->mtx)); + if (taosThreadMutexUnlock(&tf->mtx) != 0) { + indexError("failed to unlock tfile mutex"); + } return rd; } diff --git a/source/util/src/tcompression.c b/source/util/src/tcompression.c index eec89617c9..2ced73a3f0 100644 --- a/source/util/src/tcompression.c +++ b/source/util/src/tcompression.c @@ -324,8 +324,8 @@ bool lossyFloat = false; bool lossyDouble = false; // init call -int32_t tsCompressInit(char *lossyColumns, float fPrecision, double dPrecision, uint32_t maxIntervals, - uint32_t intervals, int32_t ifAdtFse, const char *compressor) { +void tsCompressInit(char *lossyColumns, float fPrecision, double dPrecision, uint32_t maxIntervals, uint32_t intervals, + int32_t ifAdtFse, const char *compressor) { // config lossyFloat = strstr(lossyColumns, "float") != NULL; lossyDouble = strstr(lossyColumns, "double") != NULL; @@ -333,7 +333,7 @@ int32_t tsCompressInit(char *lossyColumns, float fPrecision, double dPrecision, tdszInit(fPrecision, dPrecision, maxIntervals, intervals, ifAdtFse, compressor); if (lossyFloat) uTrace("lossy compression float is opened. "); if (lossyDouble) uTrace("lossy compression double is opened. "); - return 0; + return; } // exit call void tsCompressExit() { tdszExit(); } From 49a6bf4c23e00c03e16ccf87e8562714b28e1fb8 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Wed, 25 Sep 2024 18:25:40 +0800 Subject: [PATCH 43/46] void sync query return val --- include/common/cos.h | 1 - source/client/inc/clientInt.h | 81 ++++---- source/client/src/clientImpl.c | 8 +- source/client/src/clientRawBlockWrite.c | 24 +-- source/client/src/clientSml.c | 214 +++++++++++---------- source/client/src/clientStmt.c | 23 ++- source/client/src/clientStmt2.c | 2 +- source/common/src/cos.c | 25 ++- source/common/src/cos_cp.c | 2 +- source/libs/stream/test/checkpointTest.cpp | 1 - 10 files changed, 194 insertions(+), 187 deletions(-) diff --git a/include/common/cos.h b/include/common/cos.h index 17c48d594b..b336a1e5ee 100644 --- a/include/common/cos.h +++ b/include/common/cos.h @@ -32,7 +32,6 @@ extern int32_t tsS3PageCacheSize; extern int32_t tsS3UploadDelaySec; int32_t s3Init(); -void s3CleanUp(); int32_t s3CheckCfg(); int32_t s3PutObjectFromFile(const char *file, const char *object); int32_t s3PutObjectFromFile2(const char *file, const char *object, int8_t withcp); diff --git a/source/client/inc/clientInt.h b/source/client/inc/clientInt.h index 9811003254..a70c3b8e64 100644 --- a/source/client/inc/clientInt.h +++ b/source/client/inc/clientInt.h @@ -26,10 +26,10 @@ extern "C" { #include "query.h" #include "taos.h" #include "tcommon.h" -#include "tmisce.h" #include "tdef.h" #include "thash.h" #include "tlist.h" +#include "tmisce.h" #include "tmsg.h" #include "tmsgtype.h" #include "trpc.h" @@ -86,7 +86,7 @@ typedef struct { int8_t threadStop; int8_t quitByKill; TdThread thread; - TdThreadMutex lock; // used when app init and cleanup + TdThreadMutex lock; // used when app init and cleanup SHashObj* appSummary; SHashObj* appHbHash; // key: clusterId SArray* appHbMgrs; // SArray one for each cluster @@ -95,11 +95,11 @@ typedef struct { } SClientHbMgr; typedef struct SQueryExecMetric { - int64_t start; // start timestamp, us - int64_t ctgStart; // start to parse, us - int64_t execStart; // start to parse, us + int64_t start; // start timestamp, us + int64_t ctgStart; // start to parse, us + int64_t execStart; // start to parse, us - int64_t parseCostUs; + int64_t parseCostUs; int64_t ctgCostUs; int64_t analyseCostUs; int64_t planCostUs; @@ -193,7 +193,7 @@ typedef struct SReqResultInfo { char** convertBuf; TAOS_ROW row; SResultColumn* pCol; - uint64_t numOfRows; // from int32_t change to int64_t + uint64_t numOfRows; // from int32_t change to int64_t uint64_t totalRows; uint64_t current; bool localResultFetched; @@ -319,12 +319,14 @@ void syncCatalogFn(SMetaData* pResult, void* param, int32_t code); TAOS_RES* taosQueryImpl(TAOS* taos, const char* sql, bool validateOnly, int8_t source); TAOS_RES* taosQueryImplWithReqid(TAOS* taos, const char* sql, bool validateOnly, int64_t reqid); -void taosAsyncQueryImpl(uint64_t connId, const char* sql, __taos_async_fn_t fp, void* param, bool validateOnly, int8_t source); +void taosAsyncQueryImpl(uint64_t connId, const char* sql, __taos_async_fn_t fp, void* param, bool validateOnly, + int8_t source); void taosAsyncQueryImplWithReqid(uint64_t connId, const char* sql, __taos_async_fn_t fp, void* param, bool validateOnly, int64_t reqid); -void taosAsyncFetchImpl(SRequestObj *pRequest, __taos_async_fn_t fp, void *param); -int32_t clientParseSql(void* param, const char* dbName, const char* sql, bool parseOnly, const char* effectiveUser, SParseSqlRes* pRes); -void syncQueryFn(void* param, void* res, int32_t code); +void taosAsyncFetchImpl(SRequestObj* pRequest, __taos_async_fn_t fp, void* param); +int32_t clientParseSql(void* param, const char* dbName, const char* sql, bool parseOnly, const char* effectiveUser, + SParseSqlRes* pRes); +void syncQueryFn(void* param, void* res, int32_t code); int32_t getVersion1BlockMetaSize(const char* p, int32_t numOfCols); @@ -333,7 +335,7 @@ static FORCE_INLINE SReqResultInfo* tmqGetCurResInfo(TAOS_RES* res) { return (SReqResultInfo*)&msg->common.resInfo; } -int32_t tmqGetNextResInfo(TAOS_RES* res, bool convertUcs4, SReqResultInfo** pResInfo); +int32_t tmqGetNextResInfo(TAOS_RES* res, bool convertUcs4, SReqResultInfo** pResInfo); static FORCE_INLINE SReqResultInfo* tscGetCurResInfo(TAOS_RES* res) { if (TD_RES_QUERY(res)) return &(((SRequestObj*)res)->body.resInfo); return tmqGetCurResInfo(res); @@ -349,8 +351,8 @@ __async_send_cb_fn_t getMsgRspHandle(int32_t msgType); SMsgSendInfo* buildMsgInfoImpl(SRequestObj* pReqObj); -int32_t createTscObj(const char *user, const char *auth, const char *db, int32_t connType, SAppInstInfo *pAppInfo, - STscObj **p); +int32_t createTscObj(const char* user, const char* auth, const char* db, int32_t connType, SAppInstInfo* pAppInfo, + STscObj** p); void destroyTscObj(void* pObj); STscObj* acquireTscObj(int64_t rid); void releaseTscObj(int64_t rid); @@ -358,7 +360,7 @@ void destroyAppInst(void* pAppInfo); uint64_t generateRequestId(); -int32_t createRequest(uint64_t connId, int32_t type, int64_t reqid, SRequestObj **pRequest); +int32_t createRequest(uint64_t connId, int32_t type, int64_t reqid, SRequestObj** pRequest); void destroyRequest(SRequestObj* pRequest); SRequestObj* acquireRequest(int64_t rid); int32_t releaseRequest(int64_t rid); @@ -372,9 +374,9 @@ void resetConnectDB(STscObj* pTscObj); int taos_options_imp(TSDB_OPTION option, const char* str); -int32_t openTransporter(const char* user, const char* auth, int32_t numOfThreads, void **pDnodeConn); -void tscStopCrashReport(); -void cleanupAppInfo(); +int32_t openTransporter(const char* user, const char* auth, int32_t numOfThreads, void** pDnodeConn); +void tscStopCrashReport(); +void cleanupAppInfo(); typedef struct AsyncArg { SRpcMsg msg; @@ -402,17 +404,17 @@ int32_t hbMgrInit(); void hbMgrCleanUp(); // cluster level -int32_t appHbMgrInit(SAppInstInfo *pAppInstInfo, char *key, SAppHbMgr **pAppHbMgr); -void appHbMgrCleanup(void); -void hbRemoveAppHbMrg(SAppHbMgr** pAppHbMgr); -void destroyAllRequests(SHashObj* pRequests); -void stopAllRequests(SHashObj* pRequests); +int32_t appHbMgrInit(SAppInstInfo* pAppInstInfo, char* key, SAppHbMgr** pAppHbMgr); +void appHbMgrCleanup(void); +void hbRemoveAppHbMrg(SAppHbMgr** pAppHbMgr); +void destroyAllRequests(SHashObj* pRequests); +void stopAllRequests(SHashObj* pRequests); -//SAppInstInfo* getAppInstInfo(const char* clusterKey); +// SAppInstInfo* getAppInstInfo(const char* clusterKey); // conn level int32_t hbRegisterConn(SAppHbMgr* pAppHbMgr, int64_t tscRefId, int64_t clusterId, int8_t connType); -void hbDeregisterConn(STscObj* pTscObj, SClientHbKey connKey); +void hbDeregisterConn(STscObj* pTscObj, SClientHbKey connKey); typedef struct SSqlCallbackWrapper { SParseContext* pParseCtx; @@ -421,9 +423,9 @@ typedef struct SSqlCallbackWrapper { void* pPlanInfo; } SSqlCallbackWrapper; -void setQueryRequest(int64_t rId); -SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, bool keepQuery, void** res); -int32_t scheduleQuery(SRequestObj* pRequest, SQueryPlan* pDag, SArray* pNodeList); +void setQueryRequest(int64_t rId); +void launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, bool keepQuery, void** res); +int32_t scheduleQuery(SRequestObj* pRequest, SQueryPlan* pDag, SArray* pNodeList); void launchAsyncQuery(SRequestObj* pRequest, SQuery* pQuery, SMetaData* pResultMeta, SSqlCallbackWrapper* pWrapper); int32_t refreshMeta(STscObj* pTscObj, SRequestObj* pRequest); int32_t updateQnodeList(SAppInstInfo* pInfo, SArray* pNodeList); @@ -431,20 +433,21 @@ void doAsyncQuery(SRequestObj* pRequest, bool forceUpdateMeta); int32_t removeMeta(STscObj* pTscObj, SArray* tbList, bool isView); int32_t handleAlterTbExecRes(void* res, struct SCatalog* pCatalog); int32_t handleCreateTbExecRes(void* res, SCatalog* pCatalog); -int32_t qnodeRequired(SRequestObj* pRequest, bool *required); +int32_t qnodeRequired(SRequestObj* pRequest, bool* required); void continueInsertFromCsv(SSqlCallbackWrapper* pWrapper, SRequestObj* pRequest); void destorySqlCallbackWrapper(SSqlCallbackWrapper* pWrapper); -void handleQueryAnslyseRes(SSqlCallbackWrapper *pWrapper, SMetaData *pResultMeta, int32_t code); -void restartAsyncQuery(SRequestObj *pRequest, int32_t code); -int32_t buildPreviousRequest(SRequestObj *pRequest, const char* sql, SRequestObj** pNewRequest); -int32_t prepareAndParseSqlSyntax(SSqlCallbackWrapper **ppWrapper, SRequestObj *pRequest, bool updateMetaForce); +void handleQueryAnslyseRes(SSqlCallbackWrapper* pWrapper, SMetaData* pResultMeta, int32_t code); +void restartAsyncQuery(SRequestObj* pRequest, int32_t code); +int32_t buildPreviousRequest(SRequestObj* pRequest, const char* sql, SRequestObj** pNewRequest); +int32_t prepareAndParseSqlSyntax(SSqlCallbackWrapper** ppWrapper, SRequestObj* pRequest, bool updateMetaForce); void returnToUser(SRequestObj* pRequest); -void stopAllQueries(SRequestObj *pRequest); +void stopAllQueries(SRequestObj* pRequest); void doRequestCallback(SRequestObj* pRequest, int32_t code); void freeQueryParam(SSyncQueryParam* param); #ifdef TD_ENTERPRISE -int32_t clientParseSqlImpl(void* param, const char* dbName, const char* sql, bool parseOnly, const char* effeciveUser, SParseSqlRes* pRes); +int32_t clientParseSqlImpl(void* param, const char* dbName, const char* sql, bool parseOnly, const char* effeciveUser, + SParseSqlRes* pRes); #endif #define TSC_ERR_RET(c) \ @@ -474,13 +477,9 @@ int32_t clientParseSqlImpl(void* param, const char* dbName, const char* sql, boo void slowQueryLog(int64_t rid, bool killed, int32_t code, int32_t cost); -enum { - MONITORSQLTYPESELECT = 0, - MONITORSQLTYPEINSERT = 1, - MONITORSQLTYPEDELETE = 2 -}; +enum { MONITORSQLTYPESELECT = 0, MONITORSQLTYPEINSERT = 1, MONITORSQLTYPEDELETE = 2 }; -void sqlReqLog(int64_t rid, bool killed, int32_t code, int8_t type); +void sqlReqLog(int64_t rid, bool killed, int32_t code, int8_t type); void tmqMgmtClose(void); diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index 9ddf012bf2..a8555926f1 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -1249,7 +1249,7 @@ void schedulerExecCb(SExecResult* pResult, void* param, int32_t code) { } } -SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, bool keepQuery, void** res) { +void launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, bool keepQuery, void** res) { int32_t code = 0; if (pQuery->pRoot) { @@ -1335,8 +1335,6 @@ SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, bool keepQue *res = pRequest->body.resInfo.execRes.res; pRequest->body.resInfo.execRes.res = NULL; } - - return pRequest; } static int32_t asyncExecSchQuery(SRequestObj* pRequest, SQuery* pQuery, SMetaData* pResultMeta, @@ -2934,8 +2932,8 @@ TAOS_RES* taosQueryImpl(TAOS* taos, const char* sql, bool validateOnly, int8_t s return NULL; } code = tsem_destroy(¶m->sem); - if(TSDB_CODE_SUCCESS != code) { - tscError("failed to destroy semaphore since %s", tstrerror(code)); + if (TSDB_CODE_SUCCESS != code) { + tscError("failed to destroy semaphore since %s", tstrerror(code)); } SRequestObj* pRequest = NULL; diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c index a1022cf12a..48049f0baf 100644 --- a/source/client/src/clientRawBlockWrite.c +++ b/source/client/src/clientRawBlockWrite.c @@ -394,7 +394,7 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { uint8_t tagNum = pCreateReq->ctb.tagNum; int32_t code = 0; cJSON* tags = NULL; - cJSON* tableName = cJSON_CreateString(name); + cJSON* tableName = cJSON_CreateString(name); RAW_NULL_CHECK(tableName); RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableName", tableName)); cJSON* using = cJSON_CreateString(sname); @@ -417,7 +417,7 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { } char* pJson = NULL; parseTagDatatoJson(pTag, &pJson); - if(pJson == NULL) { + if (pJson == NULL) { uError("parseTagDatatoJson failed, pJson == NULL"); goto end; } @@ -731,7 +731,7 @@ static void processAlterTable(SMqMetaRsp* metaRsp, cJSON** pJson) { goto end; } parseTagDatatoJson(vAlterTbReq.pTagVal, &buf); - if(buf == NULL) { + if (buf == NULL) { uError("parseTagDatatoJson failed, buf == NULL"); goto end; } @@ -978,7 +978,7 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) { pQuery.msgType = pQuery.pCmdMsg->msgType; pQuery.stableQuery = true; - (void)launchQueryImpl(pRequest, &pQuery, true, NULL); // ignore, because return value is pRequest + launchQueryImpl(pRequest, &pQuery, true, NULL); // ignore, because return value is pRequest taosMemoryFree(pCmdMsg.pMsg); @@ -1082,7 +1082,7 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) { pQuery.msgType = pQuery.pCmdMsg->msgType; pQuery.stableQuery = true; - (void)launchQueryImpl(pRequest, &pQuery, true, NULL); // ignore, because return value is pRequest + launchQueryImpl(pRequest, &pQuery, true, NULL); // ignore, because return value is pRequest taosMemoryFree(pCmdMsg.pMsg); if (pRequest->code == TSDB_CODE_SUCCESS) { // ignore the error code @@ -1236,7 +1236,7 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { RAW_RETURN_CHECK(rewriteToVnodeModifyOpStmt(pQuery, pBufArray)); - (void)launchQueryImpl(pRequest, pQuery, true, NULL); + launchQueryImpl(pRequest, pQuery, true, NULL); if (pRequest->code == TSDB_CODE_SUCCESS) { RAW_RETURN_CHECK(removeMeta(pTscObj, pRequest->tableList, false)); } @@ -1365,7 +1365,7 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) { if (TSDB_CODE_SUCCESS != code) goto end; RAW_RETURN_CHECK(rewriteToVnodeModifyOpStmt(pQuery, pBufArray)); - (void)launchQueryImpl(pRequest, pQuery, true, NULL); + launchQueryImpl(pRequest, pQuery, true, NULL); if (pRequest->code == TSDB_CODE_SUCCESS) { RAW_RETURN_CHECK(removeMeta(pTscObj, pRequest->tableList, false)); } @@ -1510,7 +1510,7 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) { if (TSDB_CODE_SUCCESS != code) goto end; RAW_RETURN_CHECK(rewriteToVnodeModifyOpStmt(pQuery, pArray)); - (void)launchQueryImpl(pRequest, pQuery, true, NULL); + launchQueryImpl(pRequest, pQuery, true, NULL); pVgData = NULL; pArray = NULL; @@ -1587,7 +1587,7 @@ int taos_write_raw_block_with_fields_with_reqid(TAOS* taos, int rows, char* pDat RAW_RETURN_CHECK(rawBlockBindData(pQuery, pTableMeta, pData, NULL, fields, numFields, false, NULL, 0)); RAW_RETURN_CHECK(smlBuildOutput(pQuery, pVgHash)); - (void)launchQueryImpl(pRequest, pQuery, true, NULL); + launchQueryImpl(pRequest, pQuery, true, NULL); code = pRequest->code; end: @@ -1647,7 +1647,7 @@ int taos_write_raw_block_with_reqid(TAOS* taos, int rows, char* pData, const cha RAW_RETURN_CHECK(rawBlockBindData(pQuery, pTableMeta, pData, NULL, NULL, 0, false, NULL, 0)); RAW_RETURN_CHECK(smlBuildOutput(pQuery, pVgHash)); - (void)launchQueryImpl(pRequest, pQuery, true, NULL); + launchQueryImpl(pRequest, pQuery, true, NULL); code = pRequest->code; end: @@ -1766,7 +1766,7 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) { RAW_RETURN_CHECK(smlBuildOutput(pQuery, pVgHash)); - (void)launchQueryImpl(pRequest, pQuery, true, NULL); + launchQueryImpl(pRequest, pQuery, true, NULL); code = pRequest->code; end: @@ -1935,7 +1935,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) RAW_RETURN_CHECK(smlBuildOutput(pQuery, pVgHash)); - (void)launchQueryImpl(pRequest, pQuery, true, NULL); + launchQueryImpl(pRequest, pQuery, true, NULL); code = pRequest->code; end: diff --git a/source/client/src/clientSml.c b/source/client/src/clientSml.c index 6a19f61383..f3a22bff75 100644 --- a/source/client/src/clientSml.c +++ b/source/client/src/clientSml.c @@ -112,7 +112,7 @@ static int32_t smlCheckAuth(SSmlHandle *info, SRequestConnInfo *conn, const char SUserAuthInfo pAuth = {0}; (void)snprintf(pAuth.user, sizeof(pAuth.user), "%s", info->taos->user); if (NULL == pTabName) { - if (tNameSetDbName(&pAuth.tbName, info->taos->acctId, info->pRequest->pDb, strlen(info->pRequest->pDb)) != 0){ + if (tNameSetDbName(&pAuth.tbName, info->taos->acctId, info->pRequest->pDb, strlen(info->pRequest->pDb)) != 0) { return TSDB_CODE_SML_INVALID_DATA; } } else { @@ -165,7 +165,7 @@ int64_t smlGetTimeValue(const char *value, int32_t len, uint8_t fromPrecision, u return convertTimePrecision(tsInt64, fromPrecision, toPrecision); } -int32_t smlBuildTableInfo(int numRows, const char *measure, int32_t measureLen, SSmlTableInfo** tInfo) { +int32_t smlBuildTableInfo(int numRows, const char *measure, int32_t measureLen, SSmlTableInfo **tInfo) { SSmlTableInfo *tag = (SSmlTableInfo *)taosMemoryCalloc(sizeof(SSmlTableInfo), 1); if (!tag) { return terrno; @@ -203,13 +203,13 @@ static void smlDestroySTableMeta(void *para) { taosMemoryFree(meta); } -int32_t smlBuildSuperTableInfo(SSmlHandle *info, SSmlLineInfo *currElement, SSmlSTableMeta** sMeta) { - int32_t code = TSDB_CODE_SUCCESS; - char *measure = currElement->measure; - int measureLen = currElement->measureLen; +int32_t smlBuildSuperTableInfo(SSmlHandle *info, SSmlLineInfo *currElement, SSmlSTableMeta **sMeta) { + int32_t code = TSDB_CODE_SUCCESS; + char *measure = currElement->measure; + int measureLen = currElement->measureLen; if (currElement->measureEscaped) { measure = (char *)taosMemoryMalloc(measureLen); - if (measure == NULL){ + if (measure == NULL) { return terrno; } (void)memcpy(measure, currElement->measure, measureLen); @@ -233,7 +233,7 @@ int32_t smlBuildSuperTableInfo(SSmlHandle *info, SSmlLineInfo *currElement, SSml } (*sMeta)->tableMeta = pTableMeta; code = taosHashPut(info->superTables, currElement->measure, currElement->measureLen, sMeta, POINTER_BYTES); - if (code != TSDB_CODE_SUCCESS){ + if (code != TSDB_CODE_SUCCESS) { smlDestroySTableMeta(*sMeta); return code; } @@ -250,11 +250,11 @@ int32_t smlBuildSuperTableInfo(SSmlHandle *info, SSmlLineInfo *currElement, SSml } if (i < pTableMeta->tableInfo.numOfColumns) { - if(taosArrayPush((*sMeta)->cols, &kv) == NULL){ + if (taosArrayPush((*sMeta)->cols, &kv) == NULL) { return terrno; } } else { - if(taosArrayPush((*sMeta)->tags, &kv) == NULL){ + if (taosArrayPush((*sMeta)->tags, &kv) == NULL) { return terrno; } } @@ -277,7 +277,7 @@ bool isSmlColAligned(SSmlHandle *info, int cnt, SSmlKv *kv) { goto END; } SSmlKv *maxKV = (SSmlKv *)taosArrayGet(info->maxColKVs, cnt); - if (maxKV == NULL){ + if (maxKV == NULL) { goto END; } if (unlikely(!IS_SAME_KEY)) { @@ -336,9 +336,9 @@ int32_t smlJoinMeasureTag(SSmlLineInfo *elements) { return TSDB_CODE_SUCCESS; } -static bool smlIsPKTable(STableMeta *pTableMeta){ - for(int i = 0; i < pTableMeta->tableInfo.numOfColumns; i++){ - if(pTableMeta->schema[i].flags & COL_IS_KEY){ +static bool smlIsPKTable(STableMeta *pTableMeta) { + for (int i = 0; i < pTableMeta->tableInfo.numOfColumns; i++) { + if (pTableMeta->schema[i].flags & COL_IS_KEY) { return true; } } @@ -368,14 +368,14 @@ int32_t smlProcessSuperTable(SSmlHandle *info, SSmlLineInfo *elements) { info->maxTagKVs = sMeta->tags; info->maxColKVs = sMeta->cols; - if(smlIsPKTable(sMeta->tableMeta)){ + if (smlIsPKTable(sMeta->tableMeta)) { return TSDB_CODE_SML_NOT_SUPPORT_PK; } return 0; } int32_t smlProcessChildTable(SSmlHandle *info, SSmlLineInfo *elements) { - int32_t code = TSDB_CODE_SUCCESS; + int32_t code = TSDB_CODE_SUCCESS; SSmlTableInfo **oneTable = (SSmlTableInfo **)taosHashGet(info->childTables, elements->measureTag, elements->measureTagsLen); SSmlTableInfo *tinfo = NULL; @@ -385,19 +385,19 @@ int32_t smlProcessChildTable(SSmlHandle *info, SSmlLineInfo *elements) { return code; } code = taosHashPut(info->childTables, elements->measureTag, elements->measureTagsLen, &tinfo, POINTER_BYTES); - if(code != 0){ + if (code != 0) { smlDestroyTableInfo(&tinfo); return code; } tinfo->tags = taosArrayDup(info->preLineTagKV, NULL); - if(tinfo->tags == NULL){ + if (tinfo->tags == NULL) { smlDestroyTableInfo(&tinfo); return TSDB_CODE_OUT_OF_MEMORY; } for (size_t i = 0; i < taosArrayGetSize(info->preLineTagKV); i++) { SSmlKv *kv = (SSmlKv *)taosArrayGet(info->preLineTagKV, i); - if(kv == NULL){ + if (kv == NULL) { smlDestroyTableInfo(&tinfo); return TSDB_CODE_SML_INVALID_DATA; } @@ -406,12 +406,12 @@ int32_t smlProcessChildTable(SSmlHandle *info, SSmlLineInfo *elements) { } code = smlSetCTableName(tinfo, info->tbnameKey); - if (code != TSDB_CODE_SUCCESS){ + if (code != TSDB_CODE_SUCCESS) { smlDestroyTableInfo(&tinfo); return code; } code = getTableUid(info, elements, tinfo); - if (code != TSDB_CODE_SUCCESS){ + if (code != TSDB_CODE_SUCCESS) { smlDestroyTableInfo(&tinfo); return code; } @@ -458,10 +458,10 @@ int32_t smlParseEndTelnetJson(SSmlHandle *info, SSmlLineInfo *elements, SSmlKv * return terrno; } } - if (taosArrayPush(elements->colArray, kvTs) == NULL){ + if (taosArrayPush(elements->colArray, kvTs) == NULL) { return terrno; } - if (taosArrayPush(elements->colArray, kv) == NULL){ + if (taosArrayPush(elements->colArray, kv) == NULL) { return terrno; } } @@ -495,11 +495,11 @@ int32_t smlParseEndLine(SSmlHandle *info, SSmlLineInfo *elements, SSmlKv *kvTs) static int32_t smlParseTableName(SArray *tags, char *childTableName, char *tbnameKey) { bool autoChildName = false; size_t delimiter = strlen(tsSmlAutoChildTableNameDelimiter); - if(delimiter > 0 && tbnameKey == NULL){ + if (delimiter > 0 && tbnameKey == NULL) { size_t totalNameLen = delimiter * (taosArrayGetSize(tags) - 1); for (int i = 0; i < taosArrayGetSize(tags); i++) { SSmlKv *tag = (SSmlKv *)taosArrayGet(tags, i); - if(tag == NULL){ + if (tag == NULL) { return TSDB_CODE_SML_INVALID_DATA; } totalNameLen += tag->length; @@ -512,7 +512,7 @@ static int32_t smlParseTableName(SArray *tags, char *childTableName, char *tbnam (void)memset(childTableName, 0, TSDB_TABLE_NAME_LEN); for (int i = 0; i < taosArrayGetSize(tags); i++) { SSmlKv *tag = (SSmlKv *)taosArrayGet(tags, i); - if(tag == NULL){ + if (tag == NULL) { return TSDB_CODE_SML_INVALID_DATA; } (void)strncat(childTableName, tag->value, tag->length); @@ -523,8 +523,8 @@ static int32_t smlParseTableName(SArray *tags, char *childTableName, char *tbnam if (tsSmlDot2Underline) { smlStrReplace(childTableName, strlen(childTableName)); } - }else{ - if (tbnameKey == NULL){ + } else { + if (tbnameKey == NULL) { tbnameKey = tsSmlChildTableName; } size_t childTableNameLen = strlen(tbnameKey); @@ -532,13 +532,14 @@ static int32_t smlParseTableName(SArray *tags, char *childTableName, char *tbnam for (int i = 0; i < taosArrayGetSize(tags); i++) { SSmlKv *tag = (SSmlKv *)taosArrayGet(tags, i); - if(tag == NULL){ + if (tag == NULL) { return TSDB_CODE_SML_INVALID_DATA; } // handle child table name if (childTableNameLen == tag->keyLen && strncmp(tag->key, tbnameKey, tag->keyLen) == 0) { (void)memset(childTableName, 0, TSDB_TABLE_NAME_LEN); - (void)strncpy(childTableName, tag->value, (tag->length < TSDB_TABLE_NAME_LEN ? tag->length : TSDB_TABLE_NAME_LEN)); + (void)strncpy(childTableName, tag->value, + (tag->length < TSDB_TABLE_NAME_LEN ? tag->length : TSDB_TABLE_NAME_LEN)); if (tsSmlDot2Underline) { smlStrReplace(childTableName, strlen(childTableName)); } @@ -553,7 +554,7 @@ static int32_t smlParseTableName(SArray *tags, char *childTableName, char *tbnam int32_t smlSetCTableName(SSmlTableInfo *oneTable, char *tbnameKey) { int32_t code = smlParseTableName(oneTable->tags, oneTable->childTableName, tbnameKey); - if(code != TSDB_CODE_SUCCESS){ + if (code != TSDB_CODE_SUCCESS) { return code; } @@ -562,7 +563,7 @@ int32_t smlSetCTableName(SSmlTableInfo *oneTable, char *tbnameKey) { if (dst == NULL) { return TSDB_CODE_OUT_OF_MEMORY; } - if(oneTable->sTableNameLen >= TSDB_TABLE_NAME_LEN){ + if (oneTable->sTableNameLen >= TSDB_TABLE_NAME_LEN) { uError("SML:smlSetCTableName super table name is too long"); taosArrayDestroy(dst); return TSDB_CODE_SML_INTERNAL_ERROR; @@ -578,7 +579,7 @@ int32_t smlSetCTableName(SSmlTableInfo *oneTable, char *tbnameKey) { } code = buildChildTableName(&rName); - if (code != TSDB_CODE_SUCCESS){ + if (code != TSDB_CODE_SUCCESS) { return code; } taosArrayDestroy(dst); @@ -906,13 +907,13 @@ static int32_t smlFindNearestPowerOf2(int32_t length, uint8_t type) { return result; } -static int32_t smlProcessSchemaAction(SSmlHandle *info, SSchema *schemaField, SHashObj *schemaHash, SArray *cols, SArray *checkDumplicateCols, - ESchemaAction *action, bool isTag) { +static int32_t smlProcessSchemaAction(SSmlHandle *info, SSchema *schemaField, SHashObj *schemaHash, SArray *cols, + SArray *checkDumplicateCols, ESchemaAction *action, bool isTag) { int32_t code = TSDB_CODE_SUCCESS; for (int j = 0; j < taosArrayGetSize(cols); ++j) { if (j == 0 && !isTag) continue; SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, j); - if (kv == NULL){ + if (kv == NULL) { return TSDB_CODE_SML_INVALID_DATA; } code = smlGenerateSchemaAction(schemaField, schemaHash, kv, isTag, action, info); @@ -923,10 +924,10 @@ static int32_t smlProcessSchemaAction(SSmlHandle *info, SSchema *schemaField, SH for (int j = 0; j < taosArrayGetSize(checkDumplicateCols); ++j) { SSmlKv *kv = (SSmlKv *)taosArrayGet(checkDumplicateCols, j); - if (kv == NULL){ + if (kv == NULL) { return TSDB_CODE_SML_INVALID_DATA; } - if(taosHashGet(schemaHash, kv->key, kv->keyLen) != NULL){ + if (taosHashGet(schemaHash, kv->key, kv->keyLen) != NULL) { return TSDB_CODE_PAR_DUPLICATED_COLUMN; } } @@ -934,16 +935,16 @@ static int32_t smlProcessSchemaAction(SSmlHandle *info, SSchema *schemaField, SH } static int32_t smlCheckMeta(SSchema *schema, int32_t length, SArray *cols, bool isTag) { - int32_t code = TSDB_CODE_SUCCESS; + int32_t code = TSDB_CODE_SUCCESS; SHashObj *hashTmp = taosHashInit(length, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK); if (hashTmp == NULL) { code = terrno; goto END; } - int32_t i = 0; + int32_t i = 0; for (; i < length; i++) { code = taosHashPut(hashTmp, schema[i].name, strlen(schema[i].name), &i, SHORT_BYTES); - if (code != 0){ + if (code != 0) { goto END; } } @@ -955,7 +956,7 @@ static int32_t smlCheckMeta(SSchema *schema, int32_t length, SArray *cols, bool } for (; i < taosArrayGetSize(cols); i++) { SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, i); - if (kv == NULL){ + if (kv == NULL) { code = TSDB_CODE_SML_INVALID_DATA; goto END; } @@ -982,8 +983,8 @@ static int32_t getBytes(uint8_t type, int32_t length) { static int32_t smlBuildFieldsList(SSmlHandle *info, SSchema *schemaField, SHashObj *schemaHash, SArray *cols, SArray *results, int32_t numOfCols, bool isTag) { for (int j = 0; j < taosArrayGetSize(cols); ++j) { - SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, j); - if (kv == NULL){ + SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, j); + if (kv == NULL) { return TSDB_CODE_SML_INVALID_DATA; } ESchemaAction action = SCHEMA_ACTION_NULL; @@ -996,7 +997,7 @@ static int32_t smlBuildFieldsList(SSmlHandle *info, SSchema *schemaField, SHashO field.type = kv->type; field.bytes = getBytes(kv->type, kv->length); (void)memcpy(field.name, kv->key, kv->keyLen); - if (taosArrayPush(results, &field) == NULL){ + if (taosArrayPush(results, &field) == NULL) { return terrno; } } else if (action == SCHEMA_ACTION_CHANGE_COLUMN_SIZE || action == SCHEMA_ACTION_CHANGE_TAG_SIZE) { @@ -1008,7 +1009,7 @@ static int32_t smlBuildFieldsList(SSmlHandle *info, SSchema *schemaField, SHashO uint16_t newIndex = *index; if (isTag) newIndex -= numOfCols; SField *field = (SField *)taosArrayGet(results, newIndex); - if (field == NULL){ + if (field == NULL) { return TSDB_CODE_SML_INVALID_DATA; } field->bytes = getBytes(kv->type, kv->length); @@ -1019,7 +1020,7 @@ static int32_t smlBuildFieldsList(SSmlHandle *info, SSchema *schemaField, SHashO int32_t len = 0; for (int j = 0; j < taosArrayGetSize(results); ++j) { SField *field = taosArrayGet(results, j); - if (field == NULL){ + if (field == NULL) { return TSDB_CODE_SML_INVALID_DATA; } len += field->bytes; @@ -1051,14 +1052,14 @@ static int32_t smlSendMetaMsg(SSmlHandle *info, SName *pName, SArray *pColumns, } for (int32_t i = 0; i < pReq.numOfColumns; ++i) { SField *pField = taosArrayGet(pColumns, i); - if (pField == NULL){ + if (pField == NULL) { code = TSDB_CODE_SML_INVALID_DATA; goto end; } SFieldWithOptions fieldWithOption = {0}; setFieldWithOptions(&fieldWithOption, pField); setDefaultOptionsForField(&fieldWithOption); - if (taosArrayPush(pReq.pColumns, &fieldWithOption) == NULL){ + if (taosArrayPush(pReq.pColumns, &fieldWithOption) == NULL) { code = terrno; goto end; } @@ -1105,7 +1106,7 @@ static int32_t smlSendMetaMsg(SSmlHandle *info, SName *pName, SArray *pColumns, field.type = TSDB_DATA_TYPE_NCHAR; field.bytes = TSDB_NCHAR_SIZE + VARSTR_HEADER_SIZE; tstrncpy(field.name, tsSmlTagName, sizeof(field.name)); - if (taosArrayPush(pReq.pTags, &field) == NULL){ + if (taosArrayPush(pReq.pTags, &field) == NULL) { code = terrno; goto end; } @@ -1121,7 +1122,7 @@ static int32_t smlSendMetaMsg(SSmlHandle *info, SName *pName, SArray *pColumns, pCmdMsg.epSet = getEpSet_s(&info->taos->pAppInfo->mgmtEp); pCmdMsg.msgType = TDMT_MND_CREATE_STB; pCmdMsg.msgLen = tSerializeSMCreateStbReq(NULL, 0, &pReq); - if (pCmdMsg.msgLen < 0){ + if (pCmdMsg.msgLen < 0) { code = TSDB_CODE_OUT_OF_MEMORY; goto end; } @@ -1131,7 +1132,7 @@ static int32_t smlSendMetaMsg(SSmlHandle *info, SName *pName, SArray *pColumns, goto end; } - if (tSerializeSMCreateStbReq(pCmdMsg.pMsg, pCmdMsg.msgLen, &pReq) < 0){ + if (tSerializeSMCreateStbReq(pCmdMsg.pMsg, pCmdMsg.msgLen, &pReq) < 0) { code = TSDB_CODE_OUT_OF_MEMORY; taosMemoryFree(pCmdMsg.pMsg); goto end; @@ -1144,11 +1145,11 @@ static int32_t smlSendMetaMsg(SSmlHandle *info, SName *pName, SArray *pColumns, pQuery.msgType = pQuery.pCmdMsg->msgType; pQuery.stableQuery = true; - (void)launchQueryImpl(pRequest, &pQuery, true, NULL); // no need to check return value + launchQueryImpl(pRequest, &pQuery, true, NULL); // no need to check return value if (pRequest->code == TSDB_CODE_SUCCESS) { code = catalogRemoveTableMeta(info->pCatalog, pName); - if (code != TSDB_CODE_SUCCESS){ + if (code != TSDB_CODE_SUCCESS) { goto end; } } @@ -1187,7 +1188,7 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { size_t superTableLen = 0; void *superTable = taosHashGetKey(tmp, &superTableLen); char *measure = taosMemoryMalloc(superTableLen); - if (measure == NULL){ + if (measure == NULL) { code = terrno; goto end; } @@ -1246,28 +1247,28 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { goto end; } } else if (code == TSDB_CODE_SUCCESS) { - - if(smlIsPKTable(pTableMeta)){ + if (smlIsPKTable(pTableMeta)) { code = TSDB_CODE_SML_NOT_SUPPORT_PK; goto end; } hashTmp = taosHashInit(pTableMeta->tableInfo.numOfTags, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK); - if (hashTmp == NULL){ + if (hashTmp == NULL) { code = terrno; goto end; } for (uint16_t i = pTableMeta->tableInfo.numOfColumns; i < pTableMeta->tableInfo.numOfColumns + pTableMeta->tableInfo.numOfTags; i++) { code = taosHashPut(hashTmp, pTableMeta->schema[i].name, strlen(pTableMeta->schema[i].name), &i, SHORT_BYTES); - if (code != 0){ + if (code != 0) { goto end; } } ESchemaAction action = SCHEMA_ACTION_NULL; - code = smlProcessSchemaAction(info, pTableMeta->schema, hashTmp, sTableData->tags, sTableData->cols, &action, true); + code = + smlProcessSchemaAction(info, pTableMeta->schema, hashTmp, sTableData->tags, sTableData->cols, &action, true); if (code != TSDB_CODE_SUCCESS) { goto end; } @@ -1280,13 +1281,13 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { action); SArray *pColumns = taosArrayInit(taosArrayGetSize(sTableData->cols) + pTableMeta->tableInfo.numOfColumns, sizeof(SField)); - if (pColumns == NULL){ + if (pColumns == NULL) { code = terrno; goto end; } SArray *pTags = taosArrayInit(taosArrayGetSize(sTableData->tags) + pTableMeta->tableInfo.numOfTags, sizeof(SField)); - if (pTags == NULL){ + if (pTags == NULL) { taosArrayDestroy(pColumns); code = terrno; goto end; @@ -1297,14 +1298,14 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { field.bytes = pTableMeta->schema[i].bytes; tstrncpy(field.name, pTableMeta->schema[i].name, sizeof(field.name)); if (i < pTableMeta->tableInfo.numOfColumns) { - if (taosArrayPush(pColumns, &field) == NULL){ + if (taosArrayPush(pColumns, &field) == NULL) { taosArrayDestroy(pColumns); taosArrayDestroy(pTags); code = terrno; goto end; } } else { - if (taosArrayPush(pTags, &field) == NULL){ + if (taosArrayPush(pTags, &field) == NULL) { taosArrayDestroy(pColumns); taosArrayDestroy(pTags); code = terrno; @@ -1363,7 +1364,8 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { } } action = SCHEMA_ACTION_NULL; - code = smlProcessSchemaAction(info, pTableMeta->schema, hashTmp, sTableData->cols, sTableData->tags, &action, false); + code = + smlProcessSchemaAction(info, pTableMeta->schema, hashTmp, sTableData->cols, sTableData->tags, &action, false); if (code != TSDB_CODE_SUCCESS) { goto end; } @@ -1376,13 +1378,13 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { action); SArray *pColumns = taosArrayInit(taosArrayGetSize(sTableData->cols) + pTableMeta->tableInfo.numOfColumns, sizeof(SField)); - if (pColumns == NULL){ + if (pColumns == NULL) { code = terrno; goto end; } SArray *pTags = taosArrayInit(taosArrayGetSize(sTableData->tags) + pTableMeta->tableInfo.numOfTags, sizeof(SField)); - if (pTags == NULL){ + if (pTags == NULL) { taosArrayDestroy(pColumns); code = terrno; goto end; @@ -1393,14 +1395,14 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { field.bytes = pTableMeta->schema[i].bytes; tstrncpy(field.name, pTableMeta->schema[i].name, sizeof(field.name)); if (i < pTableMeta->tableInfo.numOfColumns) { - if (taosArrayPush(pColumns, &field) == NULL){ + if (taosArrayPush(pColumns, &field) == NULL) { taosArrayDestroy(pColumns); taosArrayDestroy(pTags); code = terrno; goto end; } } else { - if (taosArrayPush(pTags, &field) == NULL){ + if (taosArrayPush(pTags, &field) == NULL) { taosArrayDestroy(pColumns); taosArrayDestroy(pTags); code = terrno; @@ -1483,7 +1485,7 @@ end: taosHashCancelIterate(info->superTables, tmp); taosHashCleanup(hashTmp); taosMemoryFreeClear(pTableMeta); - (void)catalogRefreshTableMeta(info->pCatalog, &conn, &pName, 1); // ignore refresh meta code if there is an error + (void)catalogRefreshTableMeta(info->pCatalog, &conn, &pName, 1); // ignore refresh meta code if there is an error uError("SML:0x%" PRIx64 " smlModifyDBSchemas end failed:%d:%s, format:%d, needModifySchema:%d", info->id, code, tstrerror(code), info->dataFormat, info->needModifySchema); @@ -1494,34 +1496,35 @@ static int32_t smlInsertMeta(SHashObj *metaHash, SArray *metaArray, SArray *cols terrno = 0; for (int16_t i = 0; i < taosArrayGetSize(cols); ++i) { SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, i); - if (kv == NULL){ + if (kv == NULL) { return TSDB_CODE_SML_INVALID_DATA; } - int ret = taosHashPut(metaHash, kv->key, kv->keyLen, &i, SHORT_BYTES); + int ret = taosHashPut(metaHash, kv->key, kv->keyLen, &i, SHORT_BYTES); if (ret == 0) { - if (taosArrayPush(metaArray, kv) == NULL){ + if (taosArrayPush(metaArray, kv) == NULL) { return terrno; } - if(taosHashGet(checkDuplicate, kv->key, kv->keyLen) != NULL) { + if (taosHashGet(checkDuplicate, kv->key, kv->keyLen) != NULL) { return TSDB_CODE_PAR_DUPLICATED_COLUMN; } - }else if(terrno == TSDB_CODE_DUP_KEY){ + } else if (terrno == TSDB_CODE_DUP_KEY) { return TSDB_CODE_PAR_DUPLICATED_COLUMN; } } return TSDB_CODE_SUCCESS; } -static int32_t smlUpdateMeta(SHashObj *metaHash, SArray *metaArray, SArray *cols, bool isTag, SSmlMsgBuf *msg, SHashObj* checkDuplicate) { +static int32_t smlUpdateMeta(SHashObj *metaHash, SArray *metaArray, SArray *cols, bool isTag, SSmlMsgBuf *msg, + SHashObj *checkDuplicate) { for (int i = 0; i < taosArrayGetSize(cols); ++i) { SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, i); - if (kv == NULL){ + if (kv == NULL) { return TSDB_CODE_SML_INVALID_DATA; } int16_t *index = (int16_t *)taosHashGet(metaHash, kv->key, kv->keyLen); if (index) { SSmlKv *value = (SSmlKv *)taosArrayGet(metaArray, *index); - if (value == NULL){ + if (value == NULL) { return TSDB_CODE_SML_INVALID_DATA; } @@ -1549,13 +1552,13 @@ static int32_t smlUpdateMeta(SHashObj *metaHash, SArray *metaArray, SArray *cols int16_t size = tmp; int ret = taosHashPut(metaHash, kv->key, kv->keyLen, &size, SHORT_BYTES); if (ret == 0) { - if(taosArrayPush(metaArray, kv) == NULL){ + if (taosArrayPush(metaArray, kv) == NULL) { return terrno; } - if(taosHashGet(checkDuplicate, kv->key, kv->keyLen) != NULL) { + if (taosHashGet(checkDuplicate, kv->key, kv->keyLen) != NULL) { return TSDB_CODE_PAR_DUPLICATED_COLUMN; } - }else{ + } else { return ret; } } @@ -1586,7 +1589,7 @@ void freeSSmlKv(void *data) { void smlDestroyInfo(SSmlHandle *info) { if (!info) return; -// qDestroyQuery(info->pQuery); + // qDestroyQuery(info->pQuery); taosHashCleanup(info->pVgHash); taosHashCleanup(info->childTables); @@ -1657,7 +1660,7 @@ int32_t smlBuildSmlInfo(TAOS *taos, SSmlHandle **handle) { info->id = smlGenId(); code = smlInitHandle(&info->pQuery); - if (code != TSDB_CODE_SUCCESS){ + if (code != TSDB_CODE_SUCCESS) { goto FAILED; } info->dataFormat = true; @@ -1688,7 +1691,7 @@ static int32_t smlPushCols(SArray *colsArray, SArray *cols) { } for (size_t i = 0; i < taosArrayGetSize(cols); i++) { SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, i); - if (kv == NULL){ + if (kv == NULL) { taosHashCleanup(kvHash); return TSDB_CODE_SML_INVALID_DATA; } @@ -1698,7 +1701,7 @@ static int32_t smlPushCols(SArray *colsArray, SArray *cols) { taosHashCleanup(kvHash); return TSDB_CODE_PAR_DUPLICATED_COLUMN; } - if (code != TSDB_CODE_SUCCESS){ + if (code != TSDB_CODE_SUCCESS) { taosHashCleanup(kvHash); return code; } @@ -1759,9 +1762,11 @@ static int32_t smlParseLineBottom(SSmlHandle *info) { if (tableMeta) { // update meta uDebug("SML:0x%" PRIx64 " smlParseLineBottom update meta, format:%d, linenum:%d", info->id, info->dataFormat, info->lineNum); - ret = smlUpdateMeta((*tableMeta)->colHash, (*tableMeta)->cols, elements->colArray, false, &info->msgBuf, (*tableMeta)->tagHash); + ret = smlUpdateMeta((*tableMeta)->colHash, (*tableMeta)->cols, elements->colArray, false, &info->msgBuf, + (*tableMeta)->tagHash); if (ret == TSDB_CODE_SUCCESS) { - ret = smlUpdateMeta((*tableMeta)->tagHash, (*tableMeta)->tags, tinfo->tags, true, &info->msgBuf, (*tableMeta)->colHash); + ret = smlUpdateMeta((*tableMeta)->tagHash, (*tableMeta)->tags, tinfo->tags, true, &info->msgBuf, + (*tableMeta)->colHash); } if (ret != TSDB_CODE_SUCCESS) { uError("SML:0x%" PRIx64 " smlUpdateMeta failed, ret:%d", info->id, ret); @@ -1801,17 +1806,17 @@ static int32_t smlInsertData(SSmlHandle *info) { if (info->pRequest->dbList == NULL) { info->pRequest->dbList = taosArrayInit(1, TSDB_DB_FNAME_LEN); - if (info->pRequest->dbList == NULL){ + if (info->pRequest->dbList == NULL) { return terrno; } } char *data = (char *)taosArrayReserve(info->pRequest->dbList, 1); - if (data == NULL){ + if (data == NULL) { return terrno; } SName pName = {TSDB_TABLE_NAME_T, info->taos->acctId, {0}, {0}}; tstrncpy(pName.dbname, info->pRequest->pDb, sizeof(pName.dbname)); - (void)tNameGetFullDbName(&pName, data); //ignore + (void)tNameGetFullDbName(&pName, data); // ignore SSmlTableInfo **oneTable = (SSmlTableInfo **)taosHashIterate(info->childTables, NULL); while (oneTable) { @@ -1819,7 +1824,7 @@ static int32_t smlInsertData(SSmlHandle *info) { int measureLen = tableData->sTableNameLen; char *measure = (char *)taosMemoryMalloc(tableData->sTableNameLen); - if (measure == NULL){ + if (measure == NULL) { return terrno; } (void)memcpy(measure, tableData->sTableName, tableData->sTableNameLen); @@ -1830,11 +1835,11 @@ static int32_t smlInsertData(SSmlHandle *info) { if (info->pRequest->tableList == NULL) { info->pRequest->tableList = taosArrayInit(1, sizeof(SName)); - if (info->pRequest->tableList == NULL){ + if (info->pRequest->tableList == NULL) { return terrno; } } - if (taosArrayPush(info->pRequest->tableList, &pName) == NULL){ + if (taosArrayPush(info->pRequest->tableList, &pName) == NULL) { return terrno; } @@ -1862,7 +1867,7 @@ static int32_t smlInsertData(SSmlHandle *info) { return code; } code = taosHashPut(info->pVgHash, (const char *)&vg.vgId, sizeof(vg.vgId), (char *)&vg, sizeof(vg)); - if (code != TSDB_CODE_SUCCESS){ + if (code != TSDB_CODE_SUCCESS) { uError("SML:0x%" PRIx64 " taosHashPut failed. table name: %s", info->id, tableData->childTableName); taosMemoryFree(measure); taosHashCancelIterate(info->childTables, oneTable); @@ -1904,9 +1909,9 @@ static int32_t smlInsertData(SSmlHandle *info) { info->cost.insertRpcTime = taosGetTimestampUs(); SAppClusterSummary *pActivity = &info->taos->pAppInfo->summary; - (void)atomic_add_fetch_64((int64_t *)&pActivity->numOfInsertsReq, 1); // no need to check return code + (void)atomic_add_fetch_64((int64_t *)&pActivity->numOfInsertsReq, 1); // no need to check return code - (void)launchQueryImpl(info->pRequest, info->pQuery, true, NULL); // no need to check return code + launchQueryImpl(info->pRequest, info->pQuery, true, NULL); // no need to check return code uDebug("SML:0x%" PRIx64 " smlInsertData end, format:%d, code:%d,%s", info->id, info->dataFormat, info->pRequest->code, tstrerror(info->pRequest->code)); @@ -1975,12 +1980,12 @@ static bool getLine(SSmlHandle *info, char *lines[], char **rawLine, char *rawLi if (*rawLine != NULL && (uDebugFlag & DEBUG_DEBUG)) { char *print = taosMemoryCalloc(*len + 1, 1); - if (print != NULL){ + if (print != NULL) { (void)memcpy(print, *tmp, *len); uDebug("SML:0x%" PRIx64 " smlParseLine is raw, numLines:%d, protocol:%d, len:%d, data:%s", info->id, numLines, info->protocol, *len, print); taosMemoryFree(print); - } else{ + } else { uError("SML:0x%" PRIx64 " smlParseLine taosMemoryCalloc failed", info->id); } } else { @@ -2228,7 +2233,7 @@ TAOS_RES *taos_schemaless_insert_inner(TAOS *taos, char *lines[], char *rawLine, uInfo("SML:%" PRIx64 " retry:%d/10,ver is old retry or object is creating code:%d, msg:%s", info->id, cnt, code, tstrerror(code)); code = refreshMeta(request->pTscObj, request); - if (code != 0){ + if (code != 0) { uInfo("SML:%" PRIx64 " refresh meta error code:%d, msg:%s", info->id, code, tstrerror(code)); } smlDestroyInfo(info); @@ -2266,7 +2271,7 @@ end: */ TAOS_RES *taos_schemaless_insert_ttl_with_reqid_tbname_key(TAOS *taos, char *lines[], int numLines, int protocol, - int precision, int32_t ttl, int64_t reqid, char *tbnameKey){ + int precision, int32_t ttl, int64_t reqid, char *tbnameKey) { return taos_schemaless_insert_inner(taos, lines, NULL, NULL, numLines, protocol, precision, ttl, reqid, tbnameKey); } @@ -2306,14 +2311,17 @@ static void getRawLineLen(char *lines, int len, int32_t *totalRows, int protocol } TAOS_RES *taos_schemaless_insert_raw_ttl_with_reqid_tbname_key(TAOS *taos, char *lines, int len, int32_t *totalRows, - int protocol, int precision, int32_t ttl, int64_t reqid, char *tbnameKey){ + int protocol, int precision, int32_t ttl, int64_t reqid, + char *tbnameKey) { getRawLineLen(lines, len, totalRows, protocol); - return taos_schemaless_insert_inner(taos, NULL, lines, lines + len, *totalRows, protocol, precision, ttl, reqid, tbnameKey); + return taos_schemaless_insert_inner(taos, NULL, lines, lines + len, *totalRows, protocol, precision, ttl, reqid, + tbnameKey); } TAOS_RES *taos_schemaless_insert_raw_ttl_with_reqid(TAOS *taos, char *lines, int len, int32_t *totalRows, int protocol, int precision, int32_t ttl, int64_t reqid) { - return taos_schemaless_insert_raw_ttl_with_reqid_tbname_key(taos, lines, len, totalRows, protocol, precision, ttl, reqid, NULL); + return taos_schemaless_insert_raw_ttl_with_reqid_tbname_key(taos, lines, len, totalRows, protocol, precision, ttl, + reqid, NULL); } TAOS_RES *taos_schemaless_insert_raw_with_reqid(TAOS *taos, char *lines, int len, int32_t *totalRows, int protocol, diff --git a/source/client/src/clientStmt.c b/source/client/src/clientStmt.c index ee6e2d71a0..63bc27c624 100644 --- a/source/client/src/clientStmt.c +++ b/source/client/src/clientStmt.c @@ -25,7 +25,7 @@ static FORCE_INLINE int32_t stmtAllocQNodeFromBuf(STableBufInfo* pTblBuf, void** return terrno; } - if(taosArrayPush(pTblBuf->pBufList, &buff) == NULL){ + if (taosArrayPush(pTblBuf->pBufList, &buff) == NULL) { return terrno; } @@ -224,8 +224,8 @@ int32_t stmtUpdateBindInfo(TAOS_STMT* stmt, STableMeta* pTableMeta, void* tags, bool autoCreateTbl) { STscStmt* pStmt = (STscStmt*)stmt; char tbFName[TSDB_TABLE_FNAME_LEN]; - int32_t code = tNameExtractFullName(tbName, tbFName); - if (code != 0){ + int32_t code = tNameExtractFullName(tbName, tbFName); + if (code != 0) { return code; } @@ -772,7 +772,7 @@ void* stmtBindThreadFunc(void* param) { } int ret = stmtAsyncOutput(pStmt, asyncParam); - if (ret != 0){ + if (ret != 0) { qError("stmtAsyncOutput failed, reason:%s", tstrerror(ret)); } } @@ -821,7 +821,7 @@ int32_t stmtInitTableBuf(STableBufInfo* pTblBuf) { return terrno; } - if (taosArrayPush(pTblBuf->pBufList, &buff) == NULL){ + if (taosArrayPush(pTblBuf->pBufList, &buff) == NULL) { return terrno; } @@ -967,7 +967,7 @@ int32_t stmtInitStbInterlaceTableInfo(STscStmt* pStmt) { } int stmtSetDbName(TAOS_STMT* stmt, const char* dbName) { - STscStmt *pStmt = (STscStmt *) stmt; + STscStmt* pStmt = (STscStmt*)stmt; STMT_DLOG("start to set dbName: %s", dbName); @@ -1045,7 +1045,7 @@ int stmtSetTbTags(TAOS_STMT* stmt, TAOS_MULTI_BIND* tags) { STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_SETTAGS)); - SBoundColInfo *tags_info = (SBoundColInfo*)pStmt->bInfo.boundTags; + SBoundColInfo* tags_info = (SBoundColInfo*)pStmt->bInfo.boundTags; if (tags_info->numOfBound <= 0 || tags_info->numOfCols <= 0) { tscWarn("no tags bound in sql, will not bound tags"); return TSDB_CODE_SUCCESS; @@ -1192,7 +1192,7 @@ static FORCE_INLINE int32_t stmtGetTableColsFromCache(STscStmt* pStmt, SArray** return terrno; } - if (taosArrayPush(pStmt->sql.siInfo.pTableCols, &pTblCols) == NULL){ + if (taosArrayPush(pStmt->sql.siInfo.pTableCols, &pTblCols) == NULL) { return terrno; } } @@ -1216,7 +1216,6 @@ int stmtBindBatch(TAOS_STMT* stmt, TAOS_MULTI_BIND* bind, int32_t colIdx) { STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_BIND)); - if (pStmt->bInfo.needParse && pStmt->sql.runTimes && pStmt->sql.type > 0 && STMT_TYPE_MULTI_INSERT != pStmt->sql.type) { pStmt->bInfo.needParse = false; @@ -1256,7 +1255,7 @@ int stmtBindBatch(TAOS_STMT* stmt, TAOS_MULTI_BIND* bind, int32_t colIdx) { if (pStmt->sql.pQuery->haveResultSet) { STMT_ERR_RET(setResSchemaInfo(&pStmt->exec.pRequest->body.resInfo, pStmt->sql.pQuery->pResSchema, - pStmt->sql.pQuery->numOfResCols)); + pStmt->sql.pQuery->numOfResCols)); taosMemoryFreeClear(pStmt->sql.pQuery->pResSchema); setResPrecision(&pStmt->exec.pRequest->body.resInfo, pStmt->sql.pQuery->precision); } @@ -1549,7 +1548,7 @@ int stmtExec(TAOS_STMT* stmt) { STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_EXECUTE)); if (STMT_TYPE_QUERY == pStmt->sql.type) { - (void)launchQueryImpl(pStmt->exec.pRequest, pStmt->sql.pQuery, true, NULL); + launchQueryImpl(pStmt->exec.pRequest, pStmt->sql.pQuery, true, NULL); } else { if (pStmt->sql.stbInterlaceMode) { int64_t startTs = taosGetTimestampUs(); @@ -1571,7 +1570,7 @@ int stmtExec(TAOS_STMT* stmt) { STMT_ERR_RET(qBuildStmtOutput(pStmt->sql.pQuery, pStmt->sql.pVgHash, pStmt->exec.pBlockHash)); } - (void)launchQueryImpl(pStmt->exec.pRequest, pStmt->sql.pQuery, true, NULL); + launchQueryImpl(pStmt->exec.pRequest, pStmt->sql.pQuery, true, NULL); } if (pStmt->exec.pRequest->code && NEED_CLIENT_HANDLE_ERROR(pStmt->exec.pRequest->code)) { diff --git a/source/client/src/clientStmt2.c b/source/client/src/clientStmt2.c index a8949732f3..56337e5469 100644 --- a/source/client/src/clientStmt2.c +++ b/source/client/src/clientStmt2.c @@ -1645,7 +1645,7 @@ int stmtExec2(TAOS_STMT2* stmt, int* affected_rows) { __taos_async_fn_t fp = pStmt->options.asyncExecFn; if (!fp) { - (void)launchQueryImpl(pStmt->exec.pRequest, pStmt->sql.pQuery, true, NULL); + launchQueryImpl(pStmt->exec.pRequest, pStmt->sql.pQuery, true, NULL); if (pStmt->exec.pRequest->code && NEED_CLIENT_HANDLE_ERROR(pStmt->exec.pRequest->code)) { code = refreshMeta(pStmt->exec.pRequest->pTscObj, pStmt->exec.pRequest); diff --git a/source/common/src/cos.c b/source/common/src/cos.c index b5032bbecd..ee4fbb0d82 100644 --- a/source/common/src/cos.c +++ b/source/common/src/cos.c @@ -63,13 +63,10 @@ int32_t s3Begin() { TAOS_RETURN(TSDB_CODE_SUCCESS); } -void s3End() { (void)S3_deinitialize(); } +void s3End() { S3_deinitialize(); } int32_t s3Init() { TAOS_RETURN(TSDB_CODE_SUCCESS); /*s3Begin();*/ } -void s3CleanUp() { /*s3End();*/ -} - static int32_t s3ListBucket(char const *bucketname); static void s3DumpCfgByEp(int8_t epIndex) { @@ -506,7 +503,9 @@ S3Status initial_multipart_callback(const char *upload_id, void *callbackData) { } S3Status MultipartResponseProperiesCallback(const S3ResponseProperties *properties, void *callbackData) { - (void)responsePropertiesCallbackNull(properties, callbackData); + if (S3StatusOK != responsePropertiesCallbackNull(properties, callbackData)) { + uError("%s failed at line %d to process null callback.", __func__, __LINE__); + } MultipartPartData *data = (MultipartPartData *)callbackData; int seq = data->seq; @@ -517,7 +516,9 @@ S3Status MultipartResponseProperiesCallback(const S3ResponseProperties *properti } S3Status MultipartResponseProperiesCallbackWithCp(const S3ResponseProperties *properties, void *callbackData) { - (void)responsePropertiesCallbackNull(properties, callbackData); + if (S3StatusOK != responsePropertiesCallbackNull(properties, callbackData)) { + uError("%s failed at line %d to process null callback.", __func__, __LINE__); + } MultipartPartData *data = (MultipartPartData *)callbackData; int seq = data->seq; @@ -950,7 +951,9 @@ _exit: } if (cp.thefile) { - (void)cos_cp_close(cp.thefile); + if (cos_cp_close(cp.thefile)) { + uError("%s failed at line %d to close cp file.", __func__, lino); + } } if (cp.parts) { taosMemoryFree(cp.parts); @@ -1290,7 +1293,10 @@ int32_t s3DeleteObjects(const char *object_name[], int nobject) { void s3DeleteObjectsByPrefix(const char *prefix) { SArray *objectArray = getListByPrefix(prefix); if (objectArray == NULL) return; - (void)s3DeleteObjects(TARRAY_DATA(objectArray), TARRAY_SIZE(objectArray)); + int32_t code = s3DeleteObjects(TARRAY_DATA(objectArray), TARRAY_SIZE(objectArray)); + if (!code) { + uError("%s failed at line %d since %s.", __func__, __LINE__, tstrerror(code)); + } taosArrayDestroyEx(objectArray, s3FreeObjectKey); } @@ -1537,7 +1543,7 @@ int32_t s3Init() { TAOS_RETURN(TSDB_CODE_SUCCESS); } -void s3CleanUp() { cos_http_io_deinitialize(); } +// void s3CleanUp() { cos_http_io_deinitialize(); } static void log_status(cos_status_t *s) { cos_warn_log("status->code: %d", s->code); @@ -1961,7 +1967,6 @@ long s3Size(const char *object_name) { #else int32_t s3Init() { return 0; } -void s3CleanUp() {} int32_t s3PutObjectFromFile(const char *file, const char *object) { return 0; } int32_t s3PutObjectFromFile2(const char *file, const char *object, int8_t withcp) { return 0; } int32_t s3PutObjectFromFileOffset(const char *file, const char *object_name, int64_t offset, int64_t size) { return 0; } diff --git a/source/common/src/cos_cp.c b/source/common/src/cos_cp.c index 6aa84c0c3c..078b14c9e8 100644 --- a/source/common/src/cos_cp.c +++ b/source/common/src/cos_cp.c @@ -309,7 +309,7 @@ int32_t cos_cp_dump(SCheckpoint* cp) { if (!item) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } - cJSON_AddItemToArray(ajson, item); + if (!cJSON_AddItemToArray(ajson, item)) goto _exit; if (NULL == cJSON_AddNumberToObject(item, "index", cp->parts[i].index)) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); diff --git a/source/libs/stream/test/checkpointTest.cpp b/source/libs/stream/test/checkpointTest.cpp index 34e80fc08b..c14343c92b 100644 --- a/source/libs/stream/test/checkpointTest.cpp +++ b/source/libs/stream/test/checkpointTest.cpp @@ -43,7 +43,6 @@ // } // strcpy(tsSnodeAddress, "127.0.0.1"); // int ret = RUN_ALL_TESTS(); -// s3CleanUp(); // return ret; // } From aaf44cdf4784b37a2a4d6f9b9dc0e734b8fc098f Mon Sep 17 00:00:00 2001 From: dmchen Date: Wed, 25 Sep 2024 12:04:32 +0000 Subject: [PATCH 44/46] fix/TD-31891-remove-void-sync2-fix-case --- source/libs/sync/src/syncPipeline.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/libs/sync/src/syncPipeline.c b/source/libs/sync/src/syncPipeline.c index de83c51211..016ee5cf20 100644 --- a/source/libs/sync/src/syncPipeline.c +++ b/source/libs/sync/src/syncPipeline.c @@ -1139,10 +1139,15 @@ int32_t syncLogReplProcessReply(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncApp pMgr->peerStartTime = pMsg->startTime; } + int32_t code = 0; if (pMgr->restored) { - TAOS_CHECK_RETURN(syncLogReplContinue(pMgr, pNode, pMsg)); + if ((code = syncLogReplContinue(pMgr, pNode, pMsg)) != 0) { + sError("vgId:%d, failed to continue sync log repl since %s", pNode->vgId, tstrerror(code)); + } } else { - TAOS_CHECK_RETURN(syncLogReplRecover(pMgr, pNode, pMsg)); + if ((code = syncLogReplRecover(pMgr, pNode, pMsg)) != 0) { + sError("vgId:%d, failed to recover sync log repl since %s", pNode->vgId, tstrerror(code)); + } } (void)taosThreadMutexUnlock(&pBuf->mutex); return 0; @@ -1439,7 +1444,10 @@ int32_t syncLogBufferReset(SSyncLogBuffer* pBuf, SSyncNode* pNode) { if (lastVer != pBuf->matchIndex) return TSDB_CODE_SYN_INTERNAL_ERROR; SyncIndex index = pBuf->endIndex - 1; - TAOS_CHECK_RETURN(syncLogBufferRollback(pBuf, pNode, pBuf->matchIndex + 1)); + int32_t code = 0; + if ((code = syncLogBufferRollback(pBuf, pNode, pBuf->matchIndex + 1)) != 0) { + sError("vgId:%d, failed to rollback sync log buffer since %s", pNode->vgId, tstrerror(code)); + } sInfo("vgId:%d, reset sync log buffer. buffer: [%" PRId64 " %" PRId64 " %" PRId64 ", %" PRId64 ")", pNode->vgId, pBuf->startIndex, pBuf->commitIndex, pBuf->matchIndex, pBuf->endIndex); From 69a5b9e6567b0b4beeef19d3ce8007e9002854ee Mon Sep 17 00:00:00 2001 From: yingzhao Date: Wed, 25 Sep 2024 21:20:39 +0800 Subject: [PATCH 45/46] docs(datain): parser plugin content append in component taosx --- .../zh/14-reference/01-components/04-taosx.md | 91 +++++++++++++++++- .../14-reference/01-components/plugin-01.png | Bin 0 -> 27789 bytes 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 docs/zh/14-reference/01-components/plugin-01.png diff --git a/docs/zh/14-reference/01-components/04-taosx.md b/docs/zh/14-reference/01-components/04-taosx.md index e378c18800..86d9cf8ad6 100644 --- a/docs/zh/14-reference/01-components/04-taosx.md +++ b/docs/zh/14-reference/01-components/04-taosx.md @@ -421,7 +421,6 @@ taosX 会将监控指标上报给 taosKeeper,这些监控指标会被 taosKeep | write_raw_fails | 本次运行写入 raw meta 失败的次数 | | success_blocks | 本次写入成功的数据块数 | - ### taosX 其他数据源 任务 这些数据源包括: InfluxDB,OpenTSDB,OPC UA,OPC DA,PI,CSV,MQTT,AVEVA Historian 和 Kafka。 @@ -452,3 +451,93 @@ taosX 会将监控指标上报给 taosKeeper,这些监控指标会被 taosKeep | written_blocks | 本次运行此任务写人成功的 raw block 数 | | failed_blocks | 本次运行此任务写入失败的 raw block 数 | +## taosX 数据解析插件 + +接入 kafka / mqtt 消息时,需要对原始数据进行解析,如果使用 json/regex 等模式解析器无法满足解析需求,同时 UDT 也无法满足性能要求时,可以自定义数据解析插件。 + +### 插件概述 + +taosX Parser 插件是一个要求用 C/Rust 语言开发的 C ABI 兼容动态库,该动态库要实现约定的 API 并编译为在 taosX 所在运行环境中能够正确运行的动态库,然后复制到约定位置由 taosX 在运行时加载,并在处理数据的 Parsing 阶段调用。 + +### 插件部署 + +完成插件开发后,编译环境需要和目标运行环境兼容,将编译好的插件动态库复制到插件目录下,taosX 启动后,系统首次使用插件时初始化加载插件。可以在 explorer 的 kafka 或者 mqtt 数据接入配置页面中,检查是否加载成功。如下图,如果加载成功,则在解析器选择列表中展示出来。 + +![插件示例](./plugin-01.png) + +插件目录在 `taosx.toml` 配置文件中复用 plugins 配置,追加`/parsers`作为插件安装路径,默认值在 UNIX 环境下为 `/usr/local/taos/plugins/parsers`,在 Windows 下为 `C:\TDengine\plugins\parsers`。 + +### 插件 api 说明 + +#### 1. 获取插件名称 + +获取插件名,用于前端显示。 + +**函数签名**:const char* parser_name() + +**返回值**:字符串。 + +#### 2. 获取插件版本 + +插件版本,方便问题定位。 + +**函数签名**:const char* parser_version() + +**返回值**:字符串。 + +#### 3. 配置解析器 + +将一个字符串参数解析为一个配置对象,仅插件内部使用。 + +**函数签名**:parser_resp_t parser_new(char* ctx, uint32_t len); + +char* ctx: 用户自定义配置字符串。 + +uint32_t len: 该字符串的二进制长度(不含 `\0`)。 + +**返回值**: + +``` c +struct parser_resp_t { + int e; // 0 if success. + void* p; // Success if contains. +} +``` + +当创建对象失败时,e 不为 0。 + +当创建成功时,e = 0,p 为解析器对象。 + +#### 4. 解析数据 + +**函数签名**: + +对输入 payload 进行解析,返回结果为 JSON 格式 [u8] 。返回的 JSON 将使用默认的 JSON 解析器进行完全解码(展开根数组和所有的对象)。 + +``` c +const char* parser_mutate( + void* parser, + const uint8_t* in_ptr, uint32_t in_len, + const void* uint8_t* out_ptr, uint32_t* out_len +); +``` + +`void* parser`: parser_new 生成的对象指针; + +`const uint8_t* in_ptr`:输入 Payload 的指针; + +`uint32_t in_len`: 输入 Payload 的 bytes 长度(不含 `\0`); + +`const void* uint8_t* out_ptr`:输出 JSON 字符串的指针(不含 \0)。当 out_ptr 指向为空时,表示输出为空。 + +`uint32_t * out_len`:输出 JSON 字符串长度。 + +**返回值**: 当调用成功时,返回值为 NULL。 + +#### 5. 释放解析器 + +释放解析器对象内存。 + +**函数签名**: void parser_free(void* parser); + +void* parser: parser_new 生成的对象指针。 diff --git a/docs/zh/14-reference/01-components/plugin-01.png b/docs/zh/14-reference/01-components/plugin-01.png new file mode 100644 index 0000000000000000000000000000000000000000..18bc2ca242e9a3d3b0a67e196994a8e2d3c56d5e GIT binary patch literal 27789 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
;P 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�g5+@AHo1r69k~Vz;?gLx7 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 UeEexAs49T6ygIyC*8I)?06?E9b^rhX literal 0 HcmV?d00001 From 49cb23b05f011bdfba22e1de4665fab20b06d6c6 Mon Sep 17 00:00:00 2001 From: yingzhao Date: Wed, 25 Sep 2024 21:39:08 +0800 Subject: [PATCH 46/46] docs(datain): remove 99-parser-plugin, append the content to compoment taosx --- .../05-data-in/99-parser-plugin.md | 30 ------------------ docs/zh/06-advanced/05-data-in/plugin-01.png | Bin 27789 -> 0 bytes .../zh/14-reference/01-components/04-taosx.md | 2 +- 3 files changed, 1 insertion(+), 31 deletions(-) delete mode 100644 docs/zh/06-advanced/05-data-in/99-parser-plugin.md delete mode 100644 docs/zh/06-advanced/05-data-in/plugin-01.png diff --git a/docs/zh/06-advanced/05-data-in/99-parser-plugin.md b/docs/zh/06-advanced/05-data-in/99-parser-plugin.md deleted file mode 100644 index 976a5e2c04..0000000000 --- a/docs/zh/06-advanced/05-data-in/99-parser-plugin.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: "数据解析插件" -sidebar_label: "数据解析插件" ---- - -接入消息中间件时,如果使用 json/regex 等模式解析器无法满足解析需求,同时使用 UDT(自定义解析器) 也无法满足性能需求的情况,可以自定义数据解析插件。 - -## 插件概述 - -taosX Parser 插件是一个要求用 C/Rust 语言开发的 C ABI 兼容动态库,该动态库要实现约定的 API 并编译为在 taosX 所在运行环境中能够正确运行的动态库,然后复制到约定位置由 taosX 在运行时加载,并在处理数据的 Parsing 阶段调用。 - -## 插件部署 - -编译插件,需要在和目标环境兼容的环境中编译。 - -编译好插件后可将插件的动态库复制到插件目录下,taosX 启动时后,系统首次使用插件时初始化加载插件。可以在 explorer 的 kafka 或者 mqtt 数据接入配置页面中,检查是否加载成功。如下图,如果加载成功,则在解析器选择列表中展示出来。 - -插件目录在 `taosx.toml` 配置文件中复用 plugins 配置,追加`/parsers`作为插件安装路径,默认值在 UNIX 环境下为 `/usr/local/taos/plugins/parsers`,在 Windows 下为 `C:\TDengine\plugins\parsers`。 - -![](./plugin-01.png) - -## 插件接口规范 - -| 函数签名 | 描述 | 参数说明 | 返回值 | -| -------- | -------- | -------- | ----------- | -| const char* parser_name() | 插件名,用于前端显示。 | 无 | 字符串 | -| const char* parser_version() | 版本,方便定位问题。 | 无 | 字符串 | -| struct parser_resp_t {
char* e; // Error if null.
void* p; // Success if contains.
}
parser_resp_t parser_new(char* ctx, uint32_t len); | 使用用户自定义配置生成解析器对象或返回错误信息。| char* ctx: 用户自定义配置字符串。
uint32_t len: 该字符串的二进制长度(不含 `\0`)。 | 返回值为结构体。
struct parser_resp_t {
char* e; // Error if null.
void* p; // Success if contains.
}
当创建对象失败时,第一个指针 e 不为 NULL。
当创建成功时,e 为 NULL,p 为解析器对象。 | -| const char* parser_mutate(
void* parser,
const uint8_t* in_ptr, uint32_t in_len,
const void* uint8_t* out_ptr, uint32_t* out_len
) | 使用解析器对象对输入 payload 进行解析,返回结果为 JSON 格式 [u8] 。
返回的 JSON 将使用默认的 JSON 解析器进行完全解码(展开根数组和所有的对象)。 | void* parser: parser_new 生成的对象指针。
const uint8_t* in_ptr, uint32_t in_len:输入 Payload 的指针和 bytes 长度(不含 `\0`)。
const void* uint8_t* out_ptr, uint32_t * out_len:输出 JSON 字符串的指针和长度(不含 `\0`)。当 out_ptr 指向为空时,表示输出为空。当 out_ptr 不为空时,应用(taosx)在使用完毕后应当释放该内存空间。| 字符串指针。
当调用成功时,返回值为 NULL。
当调用失败时,返回错误信息字符串。 | -| void parser_free(void* parser); | 释放解析器对象内存。 | void* parser: parser_new 生成的对象指针。 | 无。 | diff --git a/docs/zh/06-advanced/05-data-in/plugin-01.png b/docs/zh/06-advanced/05-data-in/plugin-01.png deleted file mode 100644 index 18bc2ca242e9a3d3b0a67e196994a8e2d3c56d5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27789 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
;P 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�g5+@AHo1r69k~Vz;?gLx7 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 UeEexAs49T6ygIyC*8I)?06?E9b^rhX diff --git a/docs/zh/14-reference/01-components/04-taosx.md b/docs/zh/14-reference/01-components/04-taosx.md index 86d9cf8ad6..ce372a8007 100644 --- a/docs/zh/14-reference/01-components/04-taosx.md +++ b/docs/zh/14-reference/01-components/04-taosx.md @@ -453,7 +453,7 @@ taosX 会将监控指标上报给 taosKeeper,这些监控指标会被 taosKeep ## taosX 数据解析插件 -接入 kafka / mqtt 消息时,需要对原始数据进行解析,如果使用 json/regex 等模式解析器无法满足解析需求,同时 UDT 也无法满足性能要求时,可以自定义数据解析插件。 +接入 kafka / mqtt 消息中间件时,需要对原始数据进行解析,如果使用 json/regex 等模式解析器无法满足解析需求,同时 UDT(自定义解析脚本) 也无法满足性能要求时,可以自定义数据解析插件。 ### 插件概述