diff --git a/source/client/src/clientEnv.c b/source/client/src/clientEnv.c index fbab1ee08b847544c3711d73697636f502c2ce25..2b79fc7388099875a06692a805e3ab5b7c872e4d 100644 --- a/source/client/src/clientEnv.c +++ b/source/client/src/clientEnv.c @@ -23,12 +23,12 @@ #include "scheduler.h" #include "tcache.h" #include "tglobal.h" +#include "thttp.h" #include "tmsg.h" #include "tref.h" #include "trpc.h" #include "tsched.h" #include "ttime.h" -#include "thttp.h" #define TSC_VAR_NOT_RELEASE 1 #define TSC_VAR_RELEASED 0 @@ -65,7 +65,7 @@ static int32_t registerRequest(SRequestObj *pRequest, STscObj *pTscObj) { static void deregisterRequest(SRequestObj *pRequest) { const static int64_t SLOW_QUERY_INTERVAL = 3000000L; // todo configurable - if(pRequest == NULL){ + if (pRequest == NULL) { tscError("pRequest == NULL"); return; } @@ -380,9 +380,9 @@ void doDestroyRequest(void *p) { } if (pRequest->syncQuery) { - if (pRequest->body.param){ - tsem_destroy(&((SSyncQueryParam*)pRequest->body.param)->sem); - } + if (pRequest->body.param) { + tsem_destroy(&((SSyncQueryParam *)pRequest->body.param)->sem); + } taosMemoryFree(pRequest->body.param); } @@ -406,20 +406,20 @@ static void *tscCrashReportThreadFp(void *param) { setThreadName("client-crashReport"); char filepath[PATH_MAX] = {0}; snprintf(filepath, sizeof(filepath), "%s%s.taosCrashLog", tsLogDir, TD_DIRSEP); - char *pMsg = NULL; - int64_t msgLen = 0; + char *pMsg = NULL; + int64_t msgLen = 0; TdFilePtr pFile = NULL; - bool truncateFile = false; - int32_t sleepTime = 200; - int32_t reportPeriodNum = 3600 * 1000 / sleepTime; - int32_t loopTimes = reportPeriodNum; + bool truncateFile = false; + int32_t sleepTime = 200; + int32_t reportPeriodNum = 3600 * 1000 / sleepTime; + int32_t loopTimes = reportPeriodNum; #ifdef WINDOWS if (taosCheckCurrentInDll()) { atexit(crashReportThreadFuncUnexpectedStopped); } #endif - + while (1) { if (clientStop) break; if (loopTimes++ < reportPeriodNum) { @@ -449,12 +449,12 @@ static void *tscCrashReportThreadFp(void *param) { pMsg = NULL; continue; } - + if (pFile) { taosReleaseCrashLogFile(pFile, truncateFile); truncateFile = false; } - + taosMsleep(sleepTime); loopTimes = 0; } @@ -467,11 +467,11 @@ int32_t tscCrashReportInit() { if (!tsEnableCrashReport) { return 0; } - + TdThreadAttr thAttr; taosThreadAttrInit(&thAttr); taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); - TdThread crashReportThread; + TdThread crashReportThread; if (taosThreadCreate(&crashReportThread, &thAttr, tscCrashReportThreadFp, NULL) != 0) { tscError("failed to create crashReport thread since %s", strerror(errno)); return -1; @@ -496,26 +496,24 @@ void tscStopCrashReport() { } } - void tscWriteCrashInfo(int signum, void *sigInfo, void *context) { - char *pMsg = NULL; + char *pMsg = NULL; const char *flags = "UTL FATAL "; ELogLevel level = DEBUG_FATAL; int32_t dflag = 255; - int64_t msgLen= -1; + int64_t msgLen = -1; if (tsEnableCrashReport) { if (taosGenCrashJsonMsg(signum, &pMsg, lastClusterId, appInfo.startTime)) { taosPrintLog(flags, level, dflag, "failed to generate crash json msg"); } else { - msgLen = strlen(pMsg); + msgLen = strlen(pMsg); } } taosLogCrashInfo("taos", pMsg, msgLen, signum, sigInfo); } - void taos_init_imp(void) { // In the APIs of other program language, taos_cleanup is not available yet. // So, to make sure taos_cleanup will be invoked to clean up the allocated resource to suppress the valgrind warning. @@ -570,7 +568,7 @@ void taos_init_imp(void) { taosThreadMutexInit(&appInfo.mutex, NULL); tscCrashReportInit(); - + tscDebug("client is initialized successfully"); } @@ -621,6 +619,9 @@ int taos_options_imp(TSDB_OPTION option, const char *str) { tscError("failed to set cfg:%s to %s since %s", pItem->name, str, terrstr()); } else { tscInfo("set cfg:%s to %s", pItem->name, str); + if (TSDB_OPTION_SHELL_ACTIVITY_TIMER == option || TSDB_OPTION_USE_ADAPTER == option) { + code = taosSetCfg(pCfg, pItem->name); + } } return code; diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index a9ff9a1e8b054adafde820653ede70868e9a7c46..370a23282775696f4b2d680d82de3af6066a78ea 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -76,19 +76,19 @@ bool tsEnableTelem = true; int32_t tsTelemInterval = 43200; char tsTelemServer[TSDB_FQDN_LEN] = "telemetry.taosdata.com"; uint16_t tsTelemPort = 80; -char* tsTelemUri = "/report"; +char *tsTelemUri = "/report"; -bool tsEnableCrashReport = true; -char* tsClientCrashReportUri = "/ccrashreport"; -char* tsSvrCrashReportUri = "/dcrashreport"; +bool tsEnableCrashReport = true; +char *tsClientCrashReportUri = "/ccrashreport"; +char *tsSvrCrashReportUri = "/dcrashreport"; // schemaless char tsSmlTagName[TSDB_COL_NAME_LEN] = "_tag_null"; char tsSmlChildTableName[TSDB_TABLE_NAME_LEN] = ""; // user defined child table name can be specified in tag value. // If set to empty system will generate table name using MD5 hash. // true means that the name and order of cols in each line are the same(only for influx protocol) -//bool tsSmlDataFormat = false; -//int32_t tsSmlBatchSize = 10000; +// bool tsSmlDataFormat = false; +// int32_t tsSmlBatchSize = 10000; // query int32_t tsQueryPolicy = 1; @@ -210,9 +210,7 @@ int32_t taosSetTfsCfg(SConfig *pCfg) { int32_t taosSetTfsCfg(SConfig *pCfg); #endif -struct SConfig *taosGetCfg() { - return tsCfg; -} +struct SConfig *taosGetCfg() { return tsCfg; } static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *inputCfgDir, const char *envFile, char *apolloUrl) { @@ -319,8 +317,8 @@ static int32_t taosAddClientCfg(SConfig *pCfg) { if (cfgAddBool(pCfg, "keepColumnName", tsKeepColumnName, true) != 0) return -1; if (cfgAddString(pCfg, "smlChildTableName", "", 1) != 0) return -1; if (cfgAddString(pCfg, "smlTagName", tsSmlTagName, 1) != 0) return -1; -// if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, 1) != 0) return -1; -// if (cfgAddInt32(pCfg, "smlBatchSize", tsSmlBatchSize, 1, INT32_MAX, true) != 0) return -1; + // if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, 1) != 0) return -1; + // if (cfgAddInt32(pCfg, "smlBatchSize", tsSmlBatchSize, 1, INT32_MAX, true) != 0) return -1; if (cfgAddInt32(pCfg, "maxMemUsedByInsert", tsMaxMemUsedByInsert, 1, INT32_MAX, true) != 0) return -1; if (cfgAddInt32(pCfg, "maxRetryWaitTime", tsMaxRetryWaitTime, 0, 86400000, 0) != 0) return -1; if (cfgAddBool(pCfg, "useAdapter", tsUseAdapter, true) != 0) return -1; @@ -662,9 +660,9 @@ static int32_t taosSetClientCfg(SConfig *pCfg) { tstrncpy(tsSmlChildTableName, cfgGetItem(pCfg, "smlChildTableName")->str, TSDB_TABLE_NAME_LEN); tstrncpy(tsSmlTagName, cfgGetItem(pCfg, "smlTagName")->str, TSDB_COL_NAME_LEN); -// tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval; + // tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval; -// tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32; + // tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32; tsMaxMemUsedByInsert = cfgGetItem(pCfg, "maxMemUsedByInsert")->i32; tsShellActivityTimer = cfgGetItem(pCfg, "shellActivityTimer")->i32; @@ -1048,10 +1046,10 @@ int32_t taosSetCfg(SConfig *pCfg, char *name) { tstrncpy(tsSmlChildTableName, cfgGetItem(pCfg, "smlChildTableName")->str, TSDB_TABLE_NAME_LEN); } else if (strcasecmp("smlTagName", name) == 0) { tstrncpy(tsSmlTagName, cfgGetItem(pCfg, "smlTagName")->str, TSDB_COL_NAME_LEN); -// } else if (strcasecmp("smlDataFormat", name) == 0) { -// tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval; -// } else if (strcasecmp("smlBatchSize", name) == 0) { -// tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32; + // } else if (strcasecmp("smlDataFormat", name) == 0) { + // tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval; + // } else if (strcasecmp("smlBatchSize", name) == 0) { + // tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32; } else if (strcasecmp("shellActivityTimer", name) == 0) { tsShellActivityTimer = cfgGetItem(pCfg, "shellActivityTimer")->i32; } else if (strcasecmp("supportVnodes", name) == 0) { @@ -1121,6 +1119,8 @@ int32_t taosSetCfg(SConfig *pCfg, char *name) { tsStartUdfd = cfgGetItem(pCfg, "udf")->bval; } else if (strcasecmp("uDebugFlag", name) == 0) { uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32; + } else if (strcasecmp("useAdapter", name) == 0) { + tsUseAdapter = cfgGetItem(pCfg, "useAdapter")->bval; } break; } diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 94d87c705cfaa07028ed64caf30ae668ad245cf3..3b4f61daeeea33817c81a35b0a871ab099fbe6bc 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -179,6 +179,7 @@ ,,y,script,./test.sh -f tsim/query/udf_with_const.sim ,,y,script,./test.sh -f tsim/query/sys_tbname.sim ,,y,script,./test.sh -f tsim/query/groupby.sim +,,y,script,./test.sh -f tsim/query/event.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 diff --git a/tests/script/tsim/query/event.sim b/tests/script/tsim/query/event.sim index adc94a34decca06f43f4dbc3c2417415ea583214..16fe0f4a137426a9ef6b9bf0fd0434290584e581 100644 --- a/tests/script/tsim/query/event.sim +++ b/tests/script/tsim/query/event.sim @@ -11,20 +11,18 @@ sql use db1; sql create stable sta (ts timestamp, f1 int, f2 binary(10), f3 bool) tags(t1 int, t2 bool, t3 binary(10)); sql create table tba1 using sta tags(0, false, '0'); sql create table tba2 using sta tags(1, true, '1'); -sql create table tba3 using sta tags(null, null, ''); -sql create table tba4 using sta tags(1, false, null); -sql create table tba5 using sta tags(3, true, 'aa'); sql insert into tba1 values ('2022-09-26 15:15:01', 0, "a", false); sql insert into tba1 values ('2022-09-26 15:15:02', 1, "0", true); sql insert into tba1 values ('2022-09-26 15:15:03', 5, "5", false); sql insert into tba1 values ('2022-09-26 15:15:04', 3, 'b', false); sql insert into tba1 values ('2022-09-26 15:15:05', 0, '1', false); sql insert into tba1 values ('2022-09-26 15:15:06', 2, 'd', true); - -sql insert into tba2 values ('2022-09-27 15:15:01', 0, "a", false); -sql insert into tba2 values ('2022-09-27 15:15:02', 1, "0", true); -sql insert into tba2 values ('2022-09-27 15:15:03', 5, "5", false); -sql insert into tba2 values ('2022-09-27 15:15:04', null, null, null); +sql insert into tba2 values ('2022-09-26 15:15:01', 0, "a", false); +sql insert into tba2 values ('2022-09-26 15:15:02', 1, "0", true); +sql insert into tba2 values ('2022-09-26 15:15:03', 5, "5", false); +sql insert into tba2 values ('2022-09-26 15:15:04', 3, 'b', false); +sql insert into tba2 values ('2022-09-26 15:15:05', 0, '1', false); +sql insert into tba2 values ('2022-09-26 15:15:06', 2, 'd', true); # child table: no window print ====> select count(*) from tba1 event_window start with f1 = 0 end with f2 = 'c'; @@ -35,7 +33,7 @@ endi # child table: single row window print ====> select count(*) from tba1 event_window start with f1 = 0 end with f3 = false; -sql select count(*) from tba1 event_window start with f1 = 0 end with f3 = false +sql select count(*) from tba1 event_window start with f1 = 0 end with f3 = false; if $rows != 2 then return -1 endi @@ -66,4 +64,176 @@ if $data10 != 4 then return -1 endi +# super table: no window +print ====> select count(*) from sta event_window start with f1 = 0 end with f2 = 'c'; +sql select count(*) from sta event_window start with f1 = 0 end with f2 = 'c'; +if $rows != 0 then + return -1 +endi + +# super table: single row window +print ====> select count(*) from sta event_window start with f1 = 0 end with f3 = false; +sql select count(*) from sta event_window start with f1 = 0 end with f3 = false; +if $rows != 4 then + return -1 +endi +if $data00 != 1 then + return -1 +endi + +# super table: multi rows window +print ====> select count(*) from sta event_window start with f1 = 0 end with f2 = 'b'; +sql select count(*) from sta event_window start with f1 = 0 end with f2 = 'b'; +if $rows != 1 then + return -1 +endi +if $data00 != 7 then + return -1 +endi + +# super table: multi windows +print ====> select count(*) from sta event_window start with f1 >= 0 end with f3 = true; +sql select count(*) from sta event_window start with f1 >= 0 end with f3 = true; +if $rows != 4 then + return -1 +endi +if $data00 != 3 then + return -1 +endi +if $data10 != 1 then + return -1 +endi +if $data20 != 7 then + return -1 +endi +if $data30 != 1 then + return -1 +endi + +# multi-child table: no window +print ====> select tbname, count(*) from sta partition by tbname event_window start with f1 = 0 end with f2 = 'c'; +sql select tbname, count(*) from sta partition by tbname event_window start with f1 = 0 end with f2 = 'c'; +if $rows != 0 then + return -1 +endi + +# multi-child table: single row window +print ====> select tbname, count(*) from sta partition by tbname event_window start with f1 = 0 end with f3 = false; +sql select tbname, count(*) from sta partition by tbname event_window start with f1 = 0 end with f3 = false; +if $rows != 4 then + return -1 +endi +if $data01 != 1 then + return -1 +endi + +# multi-child table: multi rows window +print ====> select tbname, count(*) from sta partition by tbname event_window start with f1 = 0 end with f2 = 'b'; +sql select tbname, count(*) from sta partition by tbname event_window start with f1 = 0 end with f2 = 'b'; +if $rows != 2 then + return -1 +endi +if $data01 != 4 then + return -1 +endi +if $data11 != 4 then + return -1 +endi + +# multi-child table: multi windows +print ====> select tbname, count(*) from sta partition by tbname event_window start with f1 >= 0 end with f3 = true; +sql select tbname, count(*) from sta partition by tbname event_window start with f1 >= 0 end with f3 = true; +if $rows != 4 then + return -1 +endi +if $data01 != 2 then + return -1 +endi +if $data11 != 4 then + return -1 +endi + +# where + partition by +print ====> select tbname, count(*) from sta where f3 = false partition by tbname event_window start with f1 >0 end with f2 > 0; +sql select tbname, count(*) from sta where f3 = false partition by tbname event_window start with f1 >0 end with f2 > 0; +if $rows != 4 then + return -1 +endi +if $data01 != 1 then + return -1 +endi +if $data11 != 2 then + return -1 +endi + +# where + order by +print ====> select count(*) cnt from tba1 where f3 = false event_window start with f1 >0 end with f2 > 0 order by cnt desc; +sql select count(*) cnt from tba1 where f3 = false event_window start with f1 >0 end with f2 > 0 order by cnt desc; +if $rows != 2 then + return -1 +endi +if $data00 != 2 then + return -1 +endi +if $data10 != 1 then + return -1 +endi + +# where + partition by + order by +print ====> select tbname, count(*) cnt from sta where f3 = false partition by tbname event_window start with f1 >0 end with f2 > 0 order by cnt; +sql select tbname, count(*) cnt from sta where f3 = false partition by tbname event_window start with f1 >0 end with f2 > 0 order by cnt; +if $rows != 4 then + return -1 +endi +if $data01 != 1 then + return -1 +endi +if $data11 != 1 then + return -1 +endi + +# where + partition by + order by + limit +print ====> select tbname, count(*) cnt from sta where f3 = false partition by tbname event_window start with f1 >0 end with f2 > 0 order by cnt limit 2 offset 2; +sql select tbname, count(*) cnt from sta where f3 = false partition by tbname event_window start with f1 >0 end with f2 > 0 order by cnt limit 2 offset 2; +if $rows != 2 then + return -1 +endi +if $data01 != 2 then + return -1 +endi +if $data11 != 2 then + return -1 +endi + +# subquery(where + partition by + order by + limit) +print ====> select * from (select tbname tname, count(*) cnt from sta where f3 = false partition by tbname event_window start with f1 >0 end with f2 > 0 order by cnt limit 2 offset 2); +sql select * from (select tbname tname, count(*) cnt from sta where f3 = false partition by tbname event_window start with f1 >0 end with f2 > 0 order by cnt limit 2 offset 2); +if $rows != 2 then + return -1 +endi +if $data01 != 2 then + return -1 +endi +if $data11 != 2 then + return -1 +endi + +# subquery + where + partition by + order by + limit +print ====> select tname, count(*) cnt from (select tbname tname, * from sta) where f3 = false partition by tname event_window start with f1 >0 end with f2 > 0 order by cnt limit 2 offset 2; +sql select tname, count(*) cnt from (select tbname tname, * from sta) where f3 = false partition by tname event_window start with f1 >0 end with f2 > 0 order by cnt limit 2 offset 2; +if $rows != 2 then + return -1 +endi +if $data01 != 2 then + return -1 +endi +if $data11 != 2 then + return -1 +endi + +sql_error select f1, f2 from sta event_window start with f1 >0 end with f2 > 0; +sql_error select count(*) from sta event_window start with f1 >0 end with f2 > 0 partition by tbname; +sql_error select count(*) from sta event_window start with f1 >0 end with f2 > 0 group by tbname; +sql_error select count(*) from sta event_window start with f1 >0 end with f2 > 0 fill(NULL); + system sh/exec.sh -n dnode1 -s stop -x SIGINT