From d75ce1715e6f9d71e1d713d8eb59447d6e429f96 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Wed, 2 Sep 2020 10:52:32 +0000 Subject: [PATCH 01/58] TD-1310 --- CMakeLists.txt | 2 + cmake/define.inc | 8 ++++ deps/CMakeLists.txt | 2 +- deps/MQTT-C/CMakeLists.txt | 3 +- src/dnode/CMakeLists.txt | 14 ++++++- src/dnode/src/dnodeModule.c | 2 + src/mnode/src/mnodeDb.c | 7 ++++ src/mnode/src/mnodeDnode.c | 63 ++++++++++++++++++++++++++++++ src/plugins/CMakeLists.txt | 4 +- src/plugins/http/CMakeLists.txt | 5 ++- src/plugins/monitor/CMakeLists.txt | 6 +-- src/plugins/mqtt/CMakeLists.txt | 16 ++++---- src/query/CMakeLists.txt | 5 +-- src/tsdb/CMakeLists.txt | 7 +--- src/util/CMakeLists.txt | 7 ++-- src/vnode/src/vnodeMain.c | 13 ++++++ 16 files changed, 133 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fee2e548a..0991a97d6e 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,8 @@ ENDIF () SET(TD_ACCOUNT FALSE) SET(TD_ADMIN FALSE) SET(TD_GRANT FALSE) +SET(TD_SYNC TRUE) +SET(TD_MQTT TRUE) SET(TD_COVER FALSE) SET(TD_MEM_CHECK FALSE) diff --git a/cmake/define.inc b/cmake/define.inc index 0a25dd9ee7..e449d4c213 100755 --- a/cmake/define.inc +++ b/cmake/define.inc @@ -13,6 +13,14 @@ IF (TD_GRANT) ADD_DEFINITIONS(-D_GRANT) ENDIF () +IF (TD_SYNC) + ADD_DEFINITIONS(-D_SYNC) +ENDIF () + +IF (TD_MQTT) + ADD_DEFINITIONS(-D_MQTT) +ENDIF () + IF (TD_GODLL) ADD_DEFINITIONS(-D_TD_GO_DLL_) ENDIF () diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 64930b29d2..8c6c73c440 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -10,6 +10,6 @@ ADD_SUBDIRECTORY(cJson) ADD_SUBDIRECTORY(wepoll) ADD_SUBDIRECTORY(MsvcLibX) -IF (TD_LINUX) +IF (TD_LINUX AND TD_MQTT) ADD_SUBDIRECTORY(MQTT-C) ENDIF () \ No newline at end of file diff --git a/deps/MQTT-C/CMakeLists.txt b/deps/MQTT-C/CMakeLists.txt index ea5d4238d5..15b3552521 100644 --- a/deps/MQTT-C/CMakeLists.txt +++ b/deps/MQTT-C/CMakeLists.txt @@ -1,5 +1,4 @@ -cmake_minimum_required(VERSION 3.5) -project(MQTT-C VERSION 1.1.2 LANGUAGES C) +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) # MQTT-C build options option(MQTT_C_OpenSSL_SUPPORT "Build MQTT-C with OpenSSL support?" OFF) diff --git a/src/dnode/CMakeLists.txt b/src/dnode/CMakeLists.txt index 24a109dd29..dea90811ad 100644 --- a/src/dnode/CMakeLists.txt +++ b/src/dnode/CMakeLists.txt @@ -11,10 +11,12 @@ AUX_SOURCE_DIRECTORY(src SRC) IF (TD_LINUX) ADD_EXECUTABLE(taosd ${SRC}) + TARGET_LINK_LIBRARIES(taosd mnode monitor http tsdb twal vnode cJson lz4) + IF (TD_SOMODE_STATIC) - TARGET_LINK_LIBRARIES(taosd mnode taos_static monitor http mqtt tsdb twal vnode cJson lz4 balance sync) + TARGET_LINK_LIBRARIES(taosd taos_static) ELSE () - TARGET_LINK_LIBRARIES(taosd mnode taos monitor http mqtt tsdb twal vnode cJson lz4 balance sync) + TARGET_LINK_LIBRARIES(taosd taos) ENDIF () IF (TD_ACCOUNT) @@ -25,6 +27,14 @@ IF (TD_LINUX) TARGET_LINK_LIBRARIES(taosd grant) ENDIF () + IF (TD_MQTT) + TARGET_LINK_LIBRARIES(taosd mqtt) + ENDIF () + + IF (TD_SYNC) + TARGET_LINK_LIBRARIES(taosd balance sync) + ENDIF () + SET(PREPARE_ENV_CMD "prepare_env_cmd") SET(PREPARE_ENV_TARGET "prepare_env_target") ADD_CUSTOM_COMMAND(OUTPUT ${PREPARE_ENV_CMD} diff --git a/src/dnode/src/dnodeModule.c b/src/dnode/src/dnodeModule.c index f8acb871c5..e1d298089c 100644 --- a/src/dnode/src/dnodeModule.c +++ b/src/dnode/src/dnodeModule.c @@ -62,6 +62,7 @@ static void dnodeAllocModules() { dnodeSetModuleStatus(TSDB_MOD_HTTP); } +#ifdef _MQTT tsModule[TSDB_MOD_MQTT].enable = (tsEnableMqttModule == 1); tsModule[TSDB_MOD_MQTT].name = "mqtt"; tsModule[TSDB_MOD_MQTT].initFp = mqttInitSystem; @@ -71,6 +72,7 @@ static void dnodeAllocModules() { if (tsEnableMqttModule) { dnodeSetModuleStatus(TSDB_MOD_MQTT); } +#endif tsModule[TSDB_MOD_MONITOR].enable = (tsEnableMonitorModule == 1); tsModule[TSDB_MOD_MONITOR].name = "monitor"; diff --git a/src/mnode/src/mnodeDb.c b/src/mnode/src/mnodeDb.c index cdea9eda60..8187cfd265 100644 --- a/src/mnode/src/mnodeDb.c +++ b/src/mnode/src/mnodeDb.c @@ -310,6 +310,13 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) { return TSDB_CODE_MND_INVALID_DB_OPTION; } +#ifndef _SYNC + if (pCfg->replications != 1) { + mError("invalid db option replications:%d can only be 1 in this version", pCfg->replications); + return TSDB_CODE_MND_INVALID_DB_OPTION; + } +#endif + return TSDB_CODE_SUCCESS; } diff --git a/src/mnode/src/mnodeDnode.c b/src/mnode/src/mnodeDnode.c index d5b9d18e37..aaad2462ea 100644 --- a/src/mnode/src/mnodeDnode.c +++ b/src/mnode/src/mnodeDnode.c @@ -78,6 +78,9 @@ static int32_t mnodeDnodeActionInsert(SSdbOper *pOper) { static int32_t mnodeDnodeActionDelete(SSdbOper *pOper) { SDnodeObj *pDnode = pOper->pObj; +#ifndef _SYNC + mnodeDropAllDnodeVgroups(pDnode); +#endif mnodeDropMnodeLocal(pDnode->dnodeId); balanceAsyncNotify(); @@ -585,7 +588,11 @@ static int32_t mnodeDropDnodeByEp(char *ep, SMnodeMsg *pMsg) { mInfo("dnode:%d, start to drop it", pDnode->dnodeId); +#ifndef _SYNC + int32_t code = mnodeDropDnode(pDnode, pMsg); +#else int32_t code = balanceDropDnode(pDnode); +#endif mnodeDecDnodeRef(pDnode); return code; } @@ -1043,3 +1050,59 @@ static char* mnodeGetDnodeAlternativeRoleStr(int32_t alternativeRole) { } } +#ifndef _SYNC + +int32_t balanceInit() { return TSDB_CODE_SUCCESS; } +void balanceCleanUp() {} +void balanceAsyncNotify() {} +void balanceSyncNotify() {} +void balanceReset() {} +int32_t balanceAlterDnode(struct SDnodeObj *pDnode, int32_t vnodeId, int32_t dnodeId) { return TSDB_CODE_SYN_NOT_ENABLED; } + +char* syncRole[] = { + "offline", + "unsynced", + "syncing", + "slave", + "master" +}; + +int32_t balanceAllocVnodes(SVgObj *pVgroup) { + void * pIter = NULL; + SDnodeObj *pDnode = NULL; + SDnodeObj *pSelDnode = NULL; + float vnodeUsage = 1000.0; + + while (1) { + pIter = mnodeGetNextDnode(pIter, &pDnode); + if (pDnode == NULL) break; + + if (pDnode->numOfCores > 0 && pDnode->openVnodes < TSDB_MAX_VNODES) { + float openVnodes = pDnode->openVnodes; + if (pDnode->isMgmt) openVnodes += tsMnodeEqualVnodeNum; + + float usage = openVnodes / pDnode->numOfCores; + if (usage <= vnodeUsage) { + pSelDnode = pDnode; + vnodeUsage = usage; + } + } + mnodeDecDnodeRef(pDnode); + } + + sdbFreeIter(pIter); + + if (pSelDnode == NULL) { + mError("failed to alloc vnode to vgroup"); + return TSDB_CODE_MND_NO_ENOUGH_DNODES; + } + + pVgroup->vnodeGid[0].dnodeId = pSelDnode->dnodeId; + pVgroup->vnodeGid[0].pDnode = pSelDnode; + + mDebug("dnode:%d, alloc one vnode to vgroup, openVnodes:%d", pSelDnode->dnodeId, pSelDnode->openVnodes); + return TSDB_CODE_SUCCESS; +} + +#endif + diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt index 2bc6bf54bf..742235894a 100644 --- a/src/plugins/CMakeLists.txt +++ b/src/plugins/CMakeLists.txt @@ -3,4 +3,6 @@ PROJECT(TDengine) ADD_SUBDIRECTORY(monitor) ADD_SUBDIRECTORY(http) -ADD_SUBDIRECTORY(mqtt) +IF (TD_MQTT) + ADD_SUBDIRECTORY(mqtt) +ENDIF () \ No newline at end of file diff --git a/src/plugins/http/CMakeLists.txt b/src/plugins/http/CMakeLists.txt index 2c3cbf636f..5d8b52986a 100644 --- a/src/plugins/http/CMakeLists.txt +++ b/src/plugins/http/CMakeLists.txt @@ -11,11 +11,12 @@ AUX_SOURCE_DIRECTORY(src SRC) IF (TD_LINUX) ADD_LIBRARY(http ${SRC}) + TARGET_LINK_LIBRARIES(http z) IF (TD_SOMODE_STATIC) - TARGET_LINK_LIBRARIES(http taos_static z) + TARGET_LINK_LIBRARIES(http taos_static) ELSE () - TARGET_LINK_LIBRARIES(http taos z) + TARGET_LINK_LIBRARIES(http taos) ENDIF () IF (TD_ADMIN) diff --git a/src/plugins/monitor/CMakeLists.txt b/src/plugins/monitor/CMakeLists.txt index 26a7775e9c..edea2187ea 100644 --- a/src/plugins/monitor/CMakeLists.txt +++ b/src/plugins/monitor/CMakeLists.txt @@ -2,11 +2,11 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) INCLUDE_DIRECTORIES(inc) +INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc) +INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/query/inc) AUX_SOURCE_DIRECTORY(./src SRC) - + IF (TD_LINUX) - INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc) - INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/query/inc) ADD_LIBRARY(monitor ${SRC}) IF (TD_SOMODE_STATIC) diff --git a/src/plugins/mqtt/CMakeLists.txt b/src/plugins/mqtt/CMakeLists.txt index 2467af588c..cf5729d608 100644 --- a/src/plugins/mqtt/CMakeLists.txt +++ b/src/plugins/mqtt/CMakeLists.txt @@ -2,21 +2,19 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) INCLUDE_DIRECTORIES(inc) +INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc) +INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/query/inc) +INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/MQTT-C/include) +INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/MQTT-C/examples/templates) AUX_SOURCE_DIRECTORY(src SRC) IF (TD_LINUX) - INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc) - INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/query/inc) - INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/MQTT-C/include) - INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/MQTT-C/examples/templates) ADD_LIBRARY(mqtt ${SRC}) + TARGET_LINK_LIBRARIES(mqtt cJson mqttc) IF (TD_SOMODE_STATIC) - TARGET_LINK_LIBRARIES(mqtt taos_static cJson mqttc) + TARGET_LINK_LIBRARIES(mqtt taos_static) ELSE () - TARGET_LINK_LIBRARIES(mqtt taos cJson mqttc) - ENDIF () - IF (TD_ADMIN) - TARGET_LINK_LIBRARIES(mqtt admin cJson) + TARGET_LINK_LIBRARIES(mqtt taos) ENDIF () ENDIF () diff --git a/src/query/CMakeLists.txt b/src/query/CMakeLists.txt index e2bee4285f..c1024f0080 100644 --- a/src/query/CMakeLists.txt +++ b/src/query/CMakeLists.txt @@ -8,10 +8,9 @@ INCLUDE_DIRECTORIES(inc) AUX_SOURCE_DIRECTORY(src SRC) ADD_LIBRARY(query ${SRC}) SET_SOURCE_FILES_PROPERTIES(src/sql.c PROPERTIES COMPILE_FLAGS -w) +TARGET_LINK_LIBRARIES(query tsdb tutil) IF (TD_LINUX) - TARGET_LINK_LIBRARIES(query tsdb tutil m rt) + TARGET_LINK_LIBRARIES(query m rt) ADD_SUBDIRECTORY(tests) -ELSEIF (TD_WINDOWS) - TARGET_LINK_LIBRARIES(query tsdb tutil) ENDIF () diff --git a/src/tsdb/CMakeLists.txt b/src/tsdb/CMakeLists.txt index cef1d0bba7..d86b104f23 100644 --- a/src/tsdb/CMakeLists.txt +++ b/src/tsdb/CMakeLists.txt @@ -3,13 +3,10 @@ PROJECT(TDengine) INCLUDE_DIRECTORIES(inc) AUX_SOURCE_DIRECTORY(src SRC) +ADD_LIBRARY(tsdb ${SRC}) +TARGET_LINK_LIBRARIES(tsdb common tutil) IF (TD_LINUX) - ADD_LIBRARY(tsdb ${SRC}) - TARGET_LINK_LIBRARIES(tsdb common tutil) # Someone has no gtest directory, so comment it # ADD_SUBDIRECTORY(tests) -ELSEIF (TD_WINDOWS) - ADD_LIBRARY(tsdb ${SRC}) - TARGET_LINK_LIBRARIES(tsdb common tutil) ENDIF () diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index b2778b69d9..e63a085cc8 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -3,9 +3,10 @@ PROJECT(TDengine) AUX_SOURCE_DIRECTORY(src SRC) ADD_LIBRARY(tutil ${SRC}) +TARGET_LINK_LIBRARIES(tutil pthread osdetail lz4) IF (TD_LINUX) - TARGET_LINK_LIBRARIES(tutil pthread osdetail m rt lz4) + TARGET_LINK_LIBRARIES(tutil m rt) ADD_SUBDIRECTORY(tests) FIND_PATH(ICONV_INCLUDE_EXIST iconv.h /usr/include/ /usr/local/include/) @@ -24,7 +25,7 @@ IF (TD_LINUX) ENDIF () ELSEIF (TD_WINDOWS) - TARGET_LINK_LIBRARIES(tutil iconv regex pthread osdetail winmm IPHLPAPI ws2_32 lz4 wepoll) + TARGET_LINK_LIBRARIES(tutil iconv regex winmm IPHLPAPI ws2_32 wepoll) ELSEIF(TD_DARWIN) - TARGET_LINK_LIBRARIES(tutil iconv pthread osdetail lz4) + TARGET_LINK_LIBRARIES(tutil iconv) ENDIF() diff --git a/src/vnode/src/vnodeMain.c b/src/vnode/src/vnodeMain.c index c294e86839..5a778156ff 100644 --- a/src/vnode/src/vnodeMain.c +++ b/src/vnode/src/vnodeMain.c @@ -47,6 +47,15 @@ static void vnodeNotifyRole(void *ahandle, int8_t role); static void vnodeCtrlFlow(void *handle, int32_t mseconds); static int vnodeNotifyFileSynced(void *ahandle, uint64_t fversion); +#ifndef _SYNC +tsync_h syncStart(const SSyncInfo *info) { return NULL; } +int32_t syncForwardToPeer(tsync_h shandle, void *pHead, void *mhandle, int qtype) { return 0; } +void syncStop(tsync_h shandle) {} +int32_t syncReconfig(tsync_h shandle, const SSyncCfg * cfg) { return 0; } +int syncGetNodesRole(tsync_h shandle, SNodesRole * cfg) { return 0; } +void syncConfirmForward(tsync_h shandle, uint64_t version, int32_t code) {} +#endif + int32_t vnodeInitResources() { vnodeInitWriteFp(); vnodeInitReadFp(); @@ -289,12 +298,16 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) { syncInfo.notifyFileSynced = vnodeNotifyFileSynced; pVnode->sync = syncStart(&syncInfo); +#ifndef _SYNC + pVnode->role = TAOS_SYNC_ROLE_MASTER; +#else if (pVnode->sync == NULL) { vError("vgId:%d, failed to open sync module, replica:%d reason:%s", pVnode->vgId, pVnode->syncCfg.replica, tstrerror(terrno)); vnodeCleanUp(pVnode); return terrno; } +#endif pVnode->qMgmt = qOpenQueryMgmt(pVnode->vgId); if (pVnode->qMgmt == NULL) { From 48f5309e0d2792cad815a4b4103b3e2ef8a7f384 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Thu, 3 Sep 2020 12:35:46 +0800 Subject: [PATCH 02/58] remove system-files interface. --- snap/snapcraft.yaml | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 7a0e1c3b80..3f5b5f1de0 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -18,14 +18,12 @@ apps: - network - network-bind - system-observe - - systemfiles taos: command: taoswrapper.sh plugs: - network - system-observe - - systemfiles - historyfile taosdemo: @@ -41,18 +39,6 @@ plugs: write: - $HOME/.taos_history - systemfiles: - interface: system-files - read: - - /etc/taos - - /var/lib/taos - - /var/log/taos - - /tmp - write: - - /var/log/taos - - /var/lib/taos - - /tmp - parts: script: plugin: dump @@ -119,4 +105,4 @@ layout: hooks: install: - plugs: [systemfiles, historyfile] + plugs: [historyfile] From 60416be4ea1706e6b836c22882b3176c8a1ca370 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Thu, 3 Sep 2020 07:59:51 +0000 Subject: [PATCH 03/58] TD-1310 --- packaging/cfg/taos.cfg | 11 +- src/common/inc/tglobal.h | 8 +- src/common/src/tglobal.c | 32 +++- src/inc/taosdef.h | 7 + src/plugins/mqtt/inc/mqttInit.h | 6 - src/plugins/mqtt/src/mqttSystem.c | 206 ++++++++--------------- src/wal/CMakeLists.txt | 1 - tests/script/general/connection/mqtt.sim | 11 ++ 8 files changed, 123 insertions(+), 159 deletions(-) create mode 100644 tests/script/general/connection/mqtt.sim diff --git a/packaging/cfg/taos.cfg b/packaging/cfg/taos.cfg index a91dde8796..7be6e72962 100644 --- a/packaging/cfg/taos.cfg +++ b/packaging/cfg/taos.cfg @@ -122,11 +122,14 @@ # number of replications, for cluster only # replica 1 -# mqtt uri -# mqttBrokerAddress mqtt://username:password@hostname:1883/taos/ +# mqtt hostname +# mqttHostName test.mosquitto.org -# mqtt client name -# mqttBrokerClientId taos_mqtt +# mqtt port +# mqttPort 1883 + +# mqtt topic +# mqttTopic /weather/loop # the compressed rpc message, option: # -1 (no compression) diff --git a/src/common/inc/tglobal.h b/src/common/inc/tglobal.h index ef0713c415..fedafe5b02 100644 --- a/src/common/inc/tglobal.h +++ b/src/common/inc/tglobal.h @@ -104,8 +104,12 @@ extern int32_t tsTelegrafUseFieldNum; // mqtt extern int32_t tsEnableMqttModule; -extern char tsMqttBrokerAddress[]; -extern char tsMqttBrokerClientId[]; +extern char tsMqttHostName[]; +extern char tsMqttPort[]; +extern char tsMqttUser[]; +extern char tsMqttPass[]; +extern char tsMqttClientId[]; +extern char tsMqttTopic[]; // monitor extern int32_t tsEnableMonitorModule; diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index 795585e5c9..9549ccf607 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -137,8 +137,12 @@ int32_t tsTelegrafUseFieldNum = 0; // mqtt int32_t tsEnableMqttModule = 0; // not finished yet, not started it by default -char tsMqttBrokerAddress[128] = {0}; -char tsMqttBrokerClientId[128] = {0}; +char tsMqttHostName[TSDB_MQTT_HOSTNAME_LEN] = "test.mosquitto.org"; +char tsMqttPort[TSDB_MQTT_PORT_LEN] = "1883"; +char tsMqttUser[TSDB_MQTT_USER_LEN] = {0}; +char tsMqttPass[TSDB_MQTT_PASS_LEN] = {0}; +char tsMqttClientId[TSDB_MQTT_CLIENT_ID_LEN] = "TDengineMqttSubscriber"; +char tsMqttTopic[TSDB_MQTT_TOPIC_LEN] = "/weather/loop"; // monitor int32_t tsEnableMonitorModule = 1; @@ -767,26 +771,36 @@ static void doInitGlobalConfig(void) { cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); - cfg.option = "mqttBrokerAddress"; - cfg.ptr = tsMqttBrokerAddress; + cfg.option = "mqttHostName"; + cfg.ptr = tsMqttHostName; cfg.valType = TAOS_CFG_VTYPE_STRING; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT; cfg.minValue = 0; cfg.maxValue = 0; - cfg.ptrLength = 126; + cfg.ptrLength = TSDB_MQTT_HOSTNAME_LEN; cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); - cfg.option = "mqttBrokerClientId"; - cfg.ptr = tsMqttBrokerClientId; + cfg.option = "mqttPort"; + cfg.ptr = tsMqttPort; cfg.valType = TAOS_CFG_VTYPE_STRING; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT; cfg.minValue = 0; cfg.maxValue = 0; - cfg.ptrLength = 126; + cfg.ptrLength = TSDB_MQTT_PORT_LEN; cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); - + + cfg.option = "mqttTopic"; + cfg.ptr = tsMqttTopic; + cfg.valType = TAOS_CFG_VTYPE_STRING; + cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT; + cfg.minValue = 0; + cfg.maxValue = 0; + cfg.ptrLength = TSDB_MQTT_TOPIC_LEN; + cfg.unitType = TAOS_CFG_UTYPE_NONE; + taosInitConfigOption(cfg); + cfg.option = "compressMsgSize"; cfg.ptr = &tsCompressMsgSize; cfg.valType = TAOS_CFG_VTYPE_INT32; diff --git a/src/inc/taosdef.h b/src/inc/taosdef.h index cd25ddcc55..1a40f3b56d 100644 --- a/src/inc/taosdef.h +++ b/src/inc/taosdef.h @@ -272,6 +272,13 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size); #define TSDB_SHOW_SQL_LEN 64 #define TSDB_SLOW_QUERY_SQL_LEN 512 +#define TSDB_MQTT_HOSTNAME_LEN 64 +#define TSDB_MQTT_PORT_LEN 8 +#define TSDB_MQTT_USER_LEN 24 +#define TSDB_MQTT_PASS_LEN 24 +#define TSDB_MQTT_TOPIC_LEN 64 +#define TSDB_MQTT_CLIENT_ID_LEN 32 + #define TSDB_METER_STATE_OFFLINE 0 #define TSDB_METER_STATE_ONLLINE 1 diff --git a/src/plugins/mqtt/inc/mqttInit.h b/src/plugins/mqtt/inc/mqttInit.h index 5dbd62789b..af8c5069ad 100644 --- a/src/plugins/mqtt/inc/mqttInit.h +++ b/src/plugins/mqtt/inc/mqttInit.h @@ -37,12 +37,6 @@ extern "C" { * \ref mqttReconnectClient is called, this instance will be passed. */ struct reconnect_state_t { - char* hostname; - char* port; - char* topic; - char* client_id; - char* user_name; - char* password; uint8_t* sendbuf; size_t sendbufsz; uint8_t* recvbuf; diff --git a/src/plugins/mqtt/src/mqttSystem.c b/src/plugins/mqtt/src/mqttSystem.c index 69810e2785..84dc5eea2a 100644 --- a/src/plugins/mqtt/src/mqttSystem.c +++ b/src/plugins/mqtt/src/mqttSystem.c @@ -30,123 +30,58 @@ #include "tsocket.h" #include "ttimer.h" #include "mqttSystem.h" -struct mqtt_client mqttClient = {0}; -pthread_t clientDaemonThread = {0}; -void* mqttConnect=NULL; -struct reconnect_state_t recntStatus = {0}; -char* topicPath=NULL; -int mttIsRuning = 1; -int32_t mqttInitSystem() { - int rc = 0; -#if 0 - uint8_t sendbuf[2048]; - uint8_t recvbuf[1024]; - recntStatus.sendbuf = sendbuf; - recntStatus.sendbufsz = sizeof(sendbuf); - recntStatus.recvbuf = recvbuf; - recntStatus.recvbufsz = sizeof(recvbuf); - char* url = tsMqttBrokerAddress; - recntStatus.user_name = strstr(url, "@") != NULL ? strbetween(url, "//", ":") : NULL; - - char * passStr = strstr(url, recntStatus.user_name); - if (passStr != NULL) { - recntStatus.password = strstr(url, "@") != NULL ? strbetween(passStr, ":", "@") : NULL; - } +#define MQTT_SEND_BUF_SIZE 102400 +#define MQTT_RECV_BUF_SIZE 102400 - if (strlen(url) == 0) { - mqttDebug("mqtt module not init, url is null"); - return rc; - } +struct mqtt_client tsMqttClient = {0}; +struct reconnect_state_t tsMqttStatus = {0}; +static pthread_t tsMqttClientDaemonThread = {0}; +static void* tsMqttConnect = NULL; +static bool mqttIsRuning = false; - if (strstr(url, "@") != NULL) { - recntStatus.hostname = strbetween(url, "@", ":"); - } else if (strstr(strstr(url, "://") + 3, ":") != NULL) { - recntStatus.hostname = strbetween(url, "//", ":"); +void mqttPublishCallback(void** unused, struct mqtt_response_publish* published); +void mqttCleanupRes(int status, int sockfd, pthread_t* client_daemon); +void* mqttClientRefresher(void* client); - } else { - recntStatus.hostname = strbetween(url, "//", "/"); - } - - char* _begin_hostname = strstr(url, recntStatus.hostname); - if (_begin_hostname != NULL && strstr(_begin_hostname, ":") != NULL) { - recntStatus.port = strbetween(_begin_hostname, ":", "/"); - } else { - recntStatus.port = strbetween("'1883'", "'", "'"); - } - - char* portStr = recntStatus.hostname; - if (_begin_hostname != NULL) { - char* colonStr = strstr(_begin_hostname, ":"); - if (colonStr != NULL) { - portStr = recntStatus.port; - } - } - - char* topicStr = strstr(url, portStr); - if (topicStr != NULL) { - topicPath = strbetween(topicStr, "/", "/"); - char* _topic = "+/+/+/"; - int _tpsize = strlen(topicPath) + strlen(_topic) + 1; - recntStatus.topic = calloc(1, _tpsize); - sprintf(recntStatus.topic, "/%s/%s", topicPath, _topic); - recntStatus.client_id = strlen(tsMqttBrokerClientId) < 3 ? tsMqttBrokerClientId : "taos_mqtt"; - mqttConnect = NULL; - } else { - topicPath = NULL; - } - -#endif - return rc; -} +int32_t mqttInitSystem() { return 0; } int32_t mqttStartSystem() { - int rc = 0; -#if 0 - if (recntStatus.user_name != NULL && recntStatus.password != NULL) { - mqttInfo("connecting to mqtt://%s:%s@%s:%s/%s/", recntStatus.user_name, recntStatus.password, - recntStatus.hostname, recntStatus.port, topicPath); - } else if (recntStatus.user_name != NULL && recntStatus.password == NULL) { - mqttInfo("connecting to mqtt://%s@%s:%s/%s/", recntStatus.user_name, recntStatus.hostname, recntStatus.port, - topicPath); + tsMqttStatus.sendbufsz = MQTT_SEND_BUF_SIZE; + tsMqttStatus.recvbufsz = MQTT_RECV_BUF_SIZE; + tsMqttStatus.sendbuf = malloc(MQTT_SEND_BUF_SIZE); + tsMqttStatus.recvbuf = malloc(MQTT_RECV_BUF_SIZE); + mqttIsRuning = true; + + mqtt_init_reconnect(&tsMqttClient, mqttReconnectClient, &tsMqttStatus, mqttPublishCallback); + if (pthread_create(&tsMqttClientDaemonThread, NULL, mqttClientRefresher, &tsMqttClient)) { + mqttError("mqtt client failed to start daemon."); + mqttCleanupRes(EXIT_FAILURE, -1, NULL); + return -1; } - mqtt_init_reconnect(&mqttClient, mqttReconnectClient, &recntStatus, mqtt_PublishCallback); - if (pthread_create(&clientDaemonThread, NULL, mqttClientRefresher, &mqttClient)) { - mqttError("Failed to start client daemon."); - mqttCleanup(EXIT_FAILURE, -1, NULL); - rc = -1; - } else { - mqttInfo("listening for '%s' messages.", recntStatus.topic); - } -#endif - return rc; + mqttInfo("mqtt client listening for %s messages", tsMqttTopic); + return 0; } void mqttStopSystem() { -#if 0 - mqttClient.error = MQTT_ERROR_SOCKET_ERROR; - mttIsRuning = 0; - usleep(300000U); - mqttCleanup(EXIT_SUCCESS, mqttClient.socketfd, &clientDaemonThread); - mqttInfo("mqtt is stoped"); -#endif + if (mqttIsRuning) { + mqttIsRuning = false; + tsMqttClient.error = MQTT_ERROR_SOCKET_ERROR; + + taosMsleep(300); + mqttCleanupRes(EXIT_SUCCESS, tsMqttClient.socketfd, &tsMqttClientDaemonThread); + + mqttInfo("mqtt is stopped"); + } } void mqttCleanUpSystem() { -#if 0 - mqttInfo("starting to cleanup mqtt"); - free(recntStatus.user_name); - free(recntStatus.password); - free(recntStatus.hostname); - free(recntStatus.port); - free(recntStatus.topic); - free(topicPath); + mqttStopSystem(); mqttInfo("mqtt is cleaned up"); -#endif } -void mqtt_PublishCallback(void** unused, struct mqtt_response_publish* published) { +void mqttPublishCallback(void** unused, struct mqtt_response_publish* published) { /* note that published->topic_name is NOT null-terminated (here we'll change it to a c-string) */ char* topic_name = (char*)malloc(published->topic_name_size + 1); memcpy(topic_name, published->topic_name, published->topic_name_size); @@ -155,28 +90,29 @@ void mqtt_PublishCallback(void** unused, struct mqtt_response_publish* published char _token[128] = {0}; char _dbname[128] = {0}; char _tablename[128] = {0}; - if (mqttConnect == NULL) { + if (tsMqttConnect == NULL) { mqttInfo("connect database"); - taos_connect_a(NULL, "_root", tsInternalPass, "", 0, mqttInitConnCb, &mqttClient, &mqttConnect); + taos_connect_a(NULL, "_root", tsInternalPass, "", 0, mqttInitConnCb, &tsMqttClient, &tsMqttConnect); } - if (topic_name[1]=='/' && strncmp((char*)&topic_name[1], topicPath, strlen(topicPath)) == 0) { + if (topic_name[1] == '/' && strncmp((char*)&topic_name[1], tsMqttTopic, strlen(tsMqttTopic)) == 0) { char* p_p_cmd_part[5] = {0}; char copystr[1024] = {0}; strncpy(copystr, topic_name, MIN(1024, published->topic_name_size)); char part_index = split(copystr, "/", p_p_cmd_part, 10); if (part_index < 4) { - mqttError("The topic %s is't format '/path/token/dbname/table name/'. for expmle: '/taos/token/db/t'", topic_name); + mqttError("The topic %s is't format '/path/token/dbname/table name/'. for expmle: '/taos/token/db/t'", + topic_name); } else { strncpy(_token, p_p_cmd_part[1], 127); strncpy(_dbname, p_p_cmd_part[2], 127); strncpy(_tablename, p_p_cmd_part[3], 127); mqttInfo("part count=%d,access token:%s,database name:%s, table name:%s", part_index, _token, _dbname, - _tablename); + _tablename); - if (mqttConnect != NULL) { + if (tsMqttConnect != NULL) { char* _sql = converJsonToSql((char*)published->application_message, _dbname, _tablename); mqttInfo("query:%s", _sql); - taos_query_a(mqttConnect, _sql, mqttQueryInsertCallback, &mqttClient); + taos_query_a(tsMqttConnect, _sql, mqttQueryInsertCallback, &tsMqttClient); mqttInfo("free sql:%s", _sql); free(_sql); } @@ -186,27 +122,31 @@ void mqtt_PublishCallback(void** unused, struct mqtt_response_publish* published } void* mqttClientRefresher(void* client) { - while (mttIsRuning) { + while (mqttIsRuning) { mqtt_sync((struct mqtt_client*)client); taosMsleep(100); } - mqttDebug("quit refresher"); + + mqttDebug("mqtt client quit refresher"); return NULL; } -void mqttCleanup(int status, int sockfd, pthread_t* client_daemon) { -#if 0 +void mqttCleanupRes(int status, int sockfd, pthread_t* client_daemon) { mqttInfo("clean up mqtt module"); - if (sockfd != -1) close(sockfd); - if (client_daemon != NULL) pthread_cancel(*client_daemon); -#endif + if (sockfd != -1) { + close(sockfd); + } + + if (client_daemon != NULL) { + pthread_cancel(*client_daemon); + } } void mqttInitConnCb(void* param, TAOS_RES* result, int32_t code) { if (code < 0) { mqttError("mqtt:%d, connect to database failed, reason:%s", code, tstrerror(code)); - taos_close(mqttConnect); - mqttConnect = NULL; + taos_close(tsMqttConnect); + tsMqttConnect = NULL; return; } mqttDebug("mqtt:%d, connect to database success, reason:%s", code, tstrerror(code)); @@ -222,36 +162,28 @@ void mqttQueryInsertCallback(void* param, TAOS_RES* result, int32_t code) { } } -void mqttReconnectClient(struct mqtt_client* client, void** reconnect_state_vptr) { - mqttInfo("reconnect client"); - struct reconnect_state_t* reconnect_state = *((struct reconnect_state_t**)reconnect_state_vptr); +void mqttReconnectClient(struct mqtt_client* client, void** unused) { + mqttInfo("mqtt client tries to connect to the server"); - /* Close the clients socket if this isn't the initial reconnect call */ if (client->error != MQTT_ERROR_INITIAL_RECONNECT) { close(client->socketfd); } - /* Perform error handling here. */ if (client->error != MQTT_ERROR_INITIAL_RECONNECT) { - mqttError("mqttReconnectClient: called while client was in error state \"%s\"", mqtt_error_str(client->error)); + mqttError("mqtt client was in error state %s", mqtt_error_str(client->error)); } - /* Open a new socket. */ - int sockfd = open_nb_socket(reconnect_state->hostname, reconnect_state->port); - if (sockfd == -1) { - mqttError("failed to open socket: "); - mqttCleanup(EXIT_FAILURE, sockfd, NULL); + int sockfd = open_nb_socket("test.mosquitto.org", "1883"); + if (sockfd < 0) { + mqttError("mqtt client failed to open socket %s:%s", tsMqttHostName, tsMqttPort); + mqttCleanupRes(EXIT_FAILURE, sockfd, NULL); } - /* Reinitialize the client. */ - mqtt_reinit(client, sockfd, reconnect_state->sendbuf, reconnect_state->sendbufsz, reconnect_state->recvbuf, - reconnect_state->recvbufsz); + // mqtt_reinit(client, sockfd, tsMqttStatus.sendbuf, tsMqttStatus.sendbufsz, tsMqttStatus.recvbuf, tsMqttStatus.recvbufsz); + // mqtt_connect(client, tsMqttClientId, NULL, NULL, 0, tsMqttUser, tsMqttPass, MQTT_CONNECT_CLEAN_SESSION, 400); + // mqtt_subscribe(client, tsMqttTopic, 0); - /* Ensure we have a clean session */ - uint8_t connect_flags = MQTT_CONNECT_CLEAN_SESSION; - /* Send connection request to the broker. */ - mqtt_connect(client, reconnect_state->client_id, NULL, NULL, 0, reconnect_state->user_name, reconnect_state->password,connect_flags, 400); - - /* Subscribe to the topic. */ - mqtt_subscribe(client, reconnect_state->topic, 0); + mqtt_reinit(client, sockfd, tsMqttStatus.sendbuf, tsMqttStatus.sendbufsz, tsMqttStatus.recvbuf, tsMqttStatus.recvbufsz); + mqtt_connect(client, tsMqttClientId, NULL, NULL, 0, NULL, NULL, MQTT_CONNECT_CLEAN_SESSION, 400); + mqtt_subscribe(client, "datetime", 0); } \ No newline at end of file diff --git a/src/wal/CMakeLists.txt b/src/wal/CMakeLists.txt index e7d5ae1510..359e09287a 100644 --- a/src/wal/CMakeLists.txt +++ b/src/wal/CMakeLists.txt @@ -7,6 +7,5 @@ AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src SRC) IF (TD_LINUX) ADD_LIBRARY(twal ${SRC}) TARGET_LINK_LIBRARIES(twal tutil common) - ADD_SUBDIRECTORY(test) ENDIF () diff --git a/tests/script/general/connection/mqtt.sim b/tests/script/general/connection/mqtt.sim new file mode 100644 index 0000000000..6533e414aa --- /dev/null +++ b/tests/script/general/connection/mqtt.sim @@ -0,0 +1,11 @@ +system sh/stop_dnodes.sh + +system sh/deploy.sh -n dnode1 -i 1 +system sh/cfg.sh -n dnode1 -c walLevel -v 2 +system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1 +system sh/cfg.sh -n dnode1 -c mnodeEqualVnodeNum -v 4 +system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 100000 +system sh/cfg.sh -n dnode1 -c http -v 1 +system sh/cfg.sh -n dnode1 -c http -v 1 +system sh/cfg.sh -n dnode1 -c mqttBrokerAddress -v mqtt://test.mosquitto.org:1883/# +system sh/cfg.sh -n dnode1 -c mqttBrokerClientId -v taosmqtt \ No newline at end of file From 91d7c7748f29af9049d2acce352cdc88ab15e4af Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 3 Sep 2020 17:21:23 +0800 Subject: [PATCH 04/58] refactor part of code --- src/tsdb/inc/tsdbMain.h | 8 +- src/tsdb/src/tsdbFile.c | 73 +++++++++------- src/tsdb/src/tsdbMain.c | 4 +- src/tsdb/src/tsdbRWHelper.c | 168 ++++++++++++++++++++++-------------- 4 files changed, 153 insertions(+), 100 deletions(-) diff --git a/src/tsdb/inc/tsdbMain.h b/src/tsdb/inc/tsdbMain.h index e7a86798ee..ede0b33d01 100644 --- a/src/tsdb/inc/tsdbMain.h +++ b/src/tsdb/inc/tsdbMain.h @@ -45,6 +45,8 @@ extern int tsdbDebugFlag; #define TSDB_FILE_DELIMITER 0xF00AFA0F #define TSDB_FILE_INIT_MAGIC 0xFFFFFFFF +#define TAOS_IN_RANGE(key, keyMin, keyLast) (((key) >= (keyMin)) && ((key) <= (keyMax))) + // NOTE: Any file format change must increase this version number by 1 // Also, implement the convert function #define TSDB_FILE_VERSION ((uint32_t)0) @@ -475,6 +477,7 @@ int tsdbUpdateFileHeader(SFile* pFile); int tsdbEncodeSFileInfo(void** buf, const STsdbFileInfo* pInfo); void* tsdbDecodeSFileInfo(void* buf, STsdbFileInfo* pInfo); void tsdbRemoveFileGroup(STsdbRepo* pRepo, SFileGroup* pFGroup); +int tsdbLoadFileHeader(SFile* pFile, uint32_t* version); void tsdbGetFileInfoImpl(char* fname, uint32_t* magic, int64_t* size); void tsdbGetFidKeyRange(int daysPerFile, int8_t precision, int fileId, TSKEY *minKey, TSKEY *maxKey); @@ -513,7 +516,10 @@ int tsdbCommitTableData(SRWHelper* pHelper, SCommitIter* pCommitIter, SDataCols int tsdbMoveLastBlockIfNeccessary(SRWHelper* pHelper); int tsdbWriteCompInfo(SRWHelper* pHelper); int tsdbWriteCompIdx(SRWHelper* pHelper); +int tsdbLoadCompIdxImpl(SFile* pFile, uint32_t offset, uint32_t len, void* buffer); +int tsdbDecodeSCompIdxImpl(void* buffer, uint32_t len, SCompIdx** ppCompIdx, int* numOfIdx); int tsdbLoadCompIdx(SRWHelper* pHelper, void* target); +int tsdbLoadCompInfoImpl(SFile* pFile, SCompIdx* pIdx, SCompInfo** ppCompInfo); int tsdbLoadCompInfo(SRWHelper* pHelper, void* target); int tsdbLoadCompData(SRWHelper* phelper, SCompBlock* pcompblock, void* target); void tsdbGetDataStatis(SRWHelper* pHelper, SDataStatis* pStatis, int numOfCols); @@ -537,7 +543,7 @@ static FORCE_INLINE int compTSKEY(const void* key1, const void* key2) { #define TSDB_SUBMIT_MSG_HEAD_SIZE sizeof(SSubmitMsg) char* tsdbGetMetaFileName(char* rootDir); -void tsdbGetDataFileName(STsdbRepo* pRepo, int fid, int type, char* fname); +void tsdbGetDataFileName(char* rootDir, int vid, int fid, int type, char* fname); int tsdbLockRepo(STsdbRepo* pRepo); int tsdbUnlockRepo(STsdbRepo* pRepo); char* tsdbGetDataDirName(char* rootDir); diff --git a/src/tsdb/src/tsdbFile.c b/src/tsdb/src/tsdbFile.c index 29e46a88af..1009a61e86 100644 --- a/src/tsdb/src/tsdbFile.c +++ b/src/tsdb/src/tsdbFile.c @@ -302,7 +302,7 @@ int tsdbCreateFile(SFile *pFile, STsdbRepo *pRepo, int fid, int type) { memset((void *)pFile, 0, sizeof(SFile)); pFile->fd = -1; - tsdbGetDataFileName(pRepo, fid, type, pFile->fname); + tsdbGetDataFileName(pRepo->rootDir, REPO_ID(pRepo), fid, type, pFile->fname); if (access(pFile->fname, F_OK) == 0) { tsdbError("vgId:%d file %s already exists", REPO_ID(pRepo), pFile->fname); @@ -424,33 +424,57 @@ void tsdbRemoveFileGroup(STsdbRepo *pRepo, SFileGroup *pFGroup) { } } -void tsdbGetFileInfoImpl(char *fname, uint32_t *magic, int64_t *size) { - char buf[TSDB_FILE_HEAD_SIZE] = "\0"; - uint32_t version = 0; - STsdbFileInfo info = {0}; +int tsdbLoadFileHeader(SFile *pFile, uint32_t *version) { + char buf[TSDB_FILE_HEAD_SIZE] = "\0"; - int fd = open(fname, O_RDONLY); - if (fd < 0) goto _err; + if (lseek(pFile->fd, 0, SEEK_SET) < 0) { + tsdbError("failed to lseek file %s to start since %s", pFile->fname, strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } - if (taosTRead(fd, buf, TSDB_FILE_HEAD_SIZE) < TSDB_FILE_HEAD_SIZE) goto _err; + if (taosTRead(pFile->fd, buf, TSDB_FILE_HEAD_SIZE) < TSDB_FILE_HEAD_SIZE) { + tsdbError("failed to read file %s header part with %d bytes, reason:%s", pFile->fname, TSDB_FILE_HEAD_SIZE, + strerror(errno)); + terrno = TSDB_CODE_TDB_FILE_CORRUPTED; + return -1; + } - if (!taosCheckChecksumWhole((uint8_t *)buf, TSDB_FILE_HEAD_SIZE)) goto _err; + if (!taosCheckChecksumWhole((uint8_t *)buf, TSDB_FILE_HEAD_SIZE)) { + tsdbError("file %s header part is corrupted with failed checksum", pFile->fname); + terrno = TSDB_CODE_TDB_FILE_CORRUPTED; + return -1; + } void *pBuf = (void *)buf; - pBuf = taosDecodeFixedU32(pBuf, &version); - pBuf = tsdbDecodeSFileInfo(pBuf, &info); + pBuf = taosDecodeFixedU32(pBuf, version); + pBuf = tsdbDecodeSFileInfo(pBuf, &(pFile->info)); - off_t offset = lseek(fd, 0, SEEK_END); + return 0; +} + +void tsdbGetFileInfoImpl(char *fname, uint32_t *magic, int64_t *size) { + uint32_t version = 0; + SFile file = {0}; + SFile * pFile = &file; + + strncpy(pFile->fname, fname, TSDB_FILENAME_LEN); + pFile->fd = -1; + + if (tsdbOpenFile(pFile, O_RDONLY) < 0) goto _err; + if (tsdbLoadFileHeader(pFile, &version) < 0) goto _err; + + off_t offset = lseek(pFile->fd, 0, SEEK_END); if (offset < 0) goto _err; - close(fd); + tsdbCloseFile(pFile); - *magic = info.magic; + *magic = pFile->info.magic; *size = offset; return; _err: - if (fd >= 0) close(fd); + tsdbCloseFile(pFile); *magic = TSDB_FILE_INIT_MAGIC; *size = 0; } @@ -458,34 +482,23 @@ _err: // ---------------- LOCAL FUNCTIONS ---------------- static int tsdbInitFile(SFile *pFile, STsdbRepo *pRepo, int fid, int type) { uint32_t version; - char buf[512] = "\0"; - tsdbGetDataFileName(pRepo, fid, type, pFile->fname); + tsdbGetDataFileName(pRepo->rootDir, REPO_ID(pRepo), fid, type, pFile->fname); pFile->fd = -1; if (tsdbOpenFile(pFile, O_RDONLY) < 0) goto _err; - if (taosTRead(pFile->fd, buf, TSDB_FILE_HEAD_SIZE) < TSDB_FILE_HEAD_SIZE) { - tsdbError("vgId:%d failed to read %d bytes from file %s since %s", REPO_ID(pRepo), TSDB_FILE_HEAD_SIZE, - pFile->fname, strerror(errno)); - terrno = TAOS_SYSTEM_ERROR(errno); + if (tsdbLoadFileHeader(pFile, &version) < 0) { + tsdbError("vgId:%d failed to load file %s header part since %s", REPO_ID(pRepo), pFile->fname, tstrerror(terrno)); goto _err; } - if (!taosCheckChecksumWhole((uint8_t *)buf, TSDB_FILE_HEAD_SIZE)) { - tsdbError("vgId:%d file %s head part is corrupted", REPO_ID(pRepo), pFile->fname); - terrno = TSDB_CODE_TDB_FILE_CORRUPTED; - goto _err; - } - - void *pBuf = buf; - pBuf = taosDecodeFixedU32(pBuf, &version); - pBuf = tsdbDecodeSFileInfo(pBuf, &(pFile->info)); if (pFile->info.size == TSDB_FILE_HEAD_SIZE) { pFile->info.size = lseek(pFile->fd, 0, SEEK_END); } if (version != TSDB_FILE_VERSION) { + // TODO: deal with error tsdbError("vgId:%d file %s version %u is not the same as program version %u which may cause problem", REPO_ID(pRepo), pFile->fname, version, TSDB_FILE_VERSION); } diff --git a/src/tsdb/src/tsdbMain.c b/src/tsdb/src/tsdbMain.c index ea912ad1f4..294df10edb 100644 --- a/src/tsdb/src/tsdbMain.c +++ b/src/tsdb/src/tsdbMain.c @@ -354,8 +354,8 @@ char *tsdbGetMetaFileName(char *rootDir) { return fname; } -void tsdbGetDataFileName(STsdbRepo *pRepo, int fid, int type, char *fname) { - snprintf(fname, TSDB_FILENAME_LEN, "%s/%s/v%df%d%s", pRepo->rootDir, TSDB_DATA_DIR_NAME, REPO_ID(pRepo), fid, tsdbFileSuffix[type]); +void tsdbGetDataFileName(char *rootDir, int vid, int fid, int type, char *fname) { + snprintf(fname, TSDB_FILENAME_LEN, "%s/%s/v%df%d%s", rootDir, TSDB_DATA_DIR_NAME, vid, fid, tsdbFileSuffix[type]); } int tsdbLockRepo(STsdbRepo *pRepo) { diff --git a/src/tsdb/src/tsdbRWHelper.c b/src/tsdb/src/tsdbRWHelper.c index 84f22918ec..db24eae148 100644 --- a/src/tsdb/src/tsdbRWHelper.c +++ b/src/tsdb/src/tsdbRWHelper.c @@ -102,7 +102,8 @@ void tsdbResetHelper(SRWHelper *pHelper) { int tsdbSetAndOpenHelperFile(SRWHelper *pHelper, SFileGroup *pGroup) { ASSERT(pHelper != NULL && pGroup != NULL); - SFile *pFile = NULL; + SFile * pFile = NULL; + STsdbRepo *pRepo = pHelper->pRepo; // Clear the helper object tsdbResetHelper(pHelper); @@ -112,8 +113,10 @@ int tsdbSetAndOpenHelperFile(SRWHelper *pHelper, SFileGroup *pGroup) { // Set the files pHelper->files.fGroup = *pGroup; if (helperType(pHelper) == TSDB_WRITE_HELPER) { - tsdbGetDataFileName(pHelper->pRepo, pGroup->fileId, TSDB_FILE_TYPE_NHEAD, helperNewHeadF(pHelper)->fname); - tsdbGetDataFileName(pHelper->pRepo, pGroup->fileId, TSDB_FILE_TYPE_NLAST, helperNewLastF(pHelper)->fname); + tsdbGetDataFileName(pRepo->rootDir, REPO_ID(pRepo), pGroup->fileId, TSDB_FILE_TYPE_NHEAD, + helperNewHeadF(pHelper)->fname); + tsdbGetDataFileName(pRepo->rootDir, REPO_ID(pRepo), pGroup->fileId, TSDB_FILE_TYPE_NLAST, + helperNewLastF(pHelper)->fname); } // Open the files @@ -443,10 +446,64 @@ int tsdbWriteCompIdx(SRWHelper *pHelper) { return 0; } +int tsdbLoadCompIdxImpl(SFile *pFile, uint32_t offset, uint32_t len, void *buffer) { + const char *prefixMsg = "failed to load SCompIdx part"; + if (lseek(pFile->fd, offset, SEEK_SET) < 0) { + tsdbError("%s: seek to file %s offset %u failed since %s", prefixMsg, pFile->fname, offset, strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } + + if (taosTRead(pFile->fd, buffer, len) < len) { + tsdbError("%s: read file %s offset %u len %u failed since %s", prefixMsg, pFile->fname, offset, len, + strerror(errno)); + terrno = TSDB_CODE_TDB_FILE_CORRUPTED; + return -1; + } + + if (!taosCheckChecksumWhole((uint8_t *)buffer, len)) { + tsdbError("%s: file %s corrupted, offset %u len %u", prefixMsg, pFile->fname, offset, len); + terrno = TSDB_CODE_TDB_FILE_CORRUPTED; + return -1; + } + + return 0; +} + +int tsdbDecodeSCompIdxImpl(void *buffer, uint32_t len, SCompIdx **ppCompIdx, int *numOfIdx) { + int nIdx = 0; + void *pPtr = buffer; + + while (POINTER_DISTANCE(pPtr, buffer) < (int)(len - sizeof(TSCKSUM))) { + size_t tlen = taosTSizeof(*ppCompIdx); + if (tlen < sizeof(SCompIdx) * (nIdx + 1)) { + *ppCompIdx = (SCompIdx *)taosTRealloc(*ppCompIdx, (tlen == 0) ? 1024 : tlen * 2); + if (*ppCompIdx == NULL) { + terrno = TSDB_CODE_TDB_OUT_OF_MEMORY; + return -1; + } + } + + pPtr = tsdbDecodeSCompIdx(pPtr, &((*ppCompIdx)[nIdx])); + if (pPtr == NULL) { + tsdbError("failed to decode SCompIdx part, idx:%d", nIdx); + terrno = TSDB_CODE_TDB_FILE_CORRUPTED; + return -1; + } + + nIdx++; + + ASSERT(nIdx == 1 || (*ppCompIdx)[nIdx - 1].tid > (*ppCompIdx)[nIdx - 2].tid); + ASSERT(POINTER_DISTANCE(pPtr, buffer) <= (int)(len - sizeof(TSCKSUM))); + } + + *numOfIdx = nIdx; + return 0; +} + int tsdbLoadCompIdx(SRWHelper *pHelper, void *target) { ASSERT(pHelper->state == TSDB_HELPER_FILE_SET_AND_OPEN); SFile *pFile = helperHeadF(pHelper); - int fd = pFile->fd; if (!helperHasState(pHelper, TSDB_HELPER_IDX_LOAD)) { // If not load from file, just load it in object @@ -456,54 +513,18 @@ int tsdbLoadCompIdx(SRWHelper *pHelper, void *target) { return -1; } - if (lseek(fd, pFile->info.offset, SEEK_SET) < 0) { - tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), pFile->fname, strerror(errno)); - terrno = TAOS_SYSTEM_ERROR(errno); + // Load SCompIdx binary from file + if (tsdbLoadCompIdxImpl(pFile, pFile->info.offset, pFile->info.len, (void *)(pHelper->pBuffer)) < 0) { return -1; } - if (taosTRead(fd, (void *)(pHelper->pBuffer), pFile->info.len) < (int)pFile->info.len) { - tsdbError("vgId:%d failed to read %d bytes from file %s since %s", REPO_ID(pHelper->pRepo), pFile->info.len, - pFile->fname, strerror(errno)); - terrno = TAOS_SYSTEM_ERROR(errno); + // Decode the SCompIdx part + if (tsdbDecodeSCompIdxImpl(pHelper->pBuffer, pFile->info.len, &(pHelper->idxH.pIdxArray), + &(pHelper->idxH.numOfIdx)) < 0) { + tsdbError("vgId:%d failed to decode SCompIdx part from file %s since %s", REPO_ID(pHelper->pRepo), pFile->fname, + tstrerror(errno)); return -1; } - - if (!taosCheckChecksumWhole((uint8_t *)(pHelper->pBuffer), pFile->info.len)) { - tsdbError("vgId:%d file %s SCompIdx part is corrupted. len %u", REPO_ID(pHelper->pRepo), pFile->fname, - pFile->info.len); - terrno = TSDB_CODE_TDB_FILE_CORRUPTED; - return -1; - } - - // Decode it - pHelper->idxH.numOfIdx = 0; - void *ptr = pHelper->pBuffer; - while (POINTER_DISTANCE(ptr, pHelper->pBuffer) < (int)(pFile->info.len - sizeof(TSCKSUM))) { - size_t tlen = taosTSizeof(pHelper->idxH.pIdxArray); - pHelper->idxH.numOfIdx++; - - if (tlen < pHelper->idxH.numOfIdx * sizeof(SCompIdx)) { - pHelper->idxH.pIdxArray = (SCompIdx *)taosTRealloc(pHelper->idxH.pIdxArray, (tlen == 0) ? 1024 : tlen * 2); - if (pHelper->idxH.pIdxArray == NULL) { - terrno = TSDB_CODE_TDB_OUT_OF_MEMORY; - return -1; - } - } - - ptr = tsdbDecodeSCompIdx(ptr, &(pHelper->idxH.pIdxArray[pHelper->idxH.numOfIdx - 1])); - if (ptr == NULL) { - tsdbError("vgId:%d file %s SCompIdx part is corrupted. len %u", REPO_ID(pHelper->pRepo), pFile->fname, - pFile->info.len); - terrno = TSDB_CODE_TDB_FILE_CORRUPTED; - return -1; - } - - ASSERT(pHelper->idxH.numOfIdx == 1 || pHelper->idxH.pIdxArray[pHelper->idxH.numOfIdx - 1].tid > - pHelper->idxH.pIdxArray[pHelper->idxH.numOfIdx - 2].tid); - - ASSERT(POINTER_DISTANCE(ptr, pHelper->pBuffer) <= (int)(pFile->info.len - sizeof(TSCKSUM))); - } } } helperSetState(pHelper, TSDB_HELPER_IDX_LOAD); @@ -515,36 +536,49 @@ int tsdbLoadCompIdx(SRWHelper *pHelper, void *target) { return 0; } +int tsdbLoadCompInfoImpl(SFile *pFile, SCompIdx *pIdx, SCompInfo **ppCompInfo) { + const char *prefixMsg = "failed to load SCompInfo/SCompBlock part"; + + if (lseek(pFile->fd, pIdx->offset, SEEK_SET) < 0) { + tsdbError("%s: seek to file %s offset %u failed since %s", prefixMsg, pFile->fname, pIdx->offset, strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } + + *ppCompInfo = taosTRealloc((void *)(*ppCompInfo), pIdx->len); + if (*ppCompInfo == NULL) { + terrno = TSDB_CODE_TDB_OUT_OF_MEMORY; + return -1; + } + + if (taosTRead(pFile->fd, (void *)(*ppCompInfo), pIdx->len) < (int)pIdx->len) { + tsdbError("%s: read file %s offset %u len %u failed since %s", prefixMsg, pFile->fname, pIdx->offset, pIdx->len, + strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } + + if (!taosCheckChecksumWhole((uint8_t *)(*ppCompInfo), pIdx->len)) { + tsdbError("%s: file %s corrupted, offset %u len %u", prefixMsg, pFile->fname, pIdx->offset, pIdx->len); + terrno = TSDB_CODE_TDB_FILE_CORRUPTED; + return -1; + } + + return 0; +} + int tsdbLoadCompInfo(SRWHelper *pHelper, void *target) { ASSERT(helperHasState(pHelper, TSDB_HELPER_TABLE_SET)); SCompIdx *pIdx = &(pHelper->curCompIdx); - int fd = helperHeadF(pHelper)->fd; + SFile *pFile = helperHeadF(pHelper); if (!helperHasState(pHelper, TSDB_HELPER_INFO_LOAD)) { if (pIdx->offset > 0) { ASSERT(pIdx->uid == pHelper->tableInfo.uid); - if (lseek(fd, pIdx->offset, SEEK_SET) < 0) { - tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), helperHeadF(pHelper)->fname, - strerror(errno)); - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; - } - pHelper->pCompInfo = taosTRealloc((void *)pHelper->pCompInfo, pIdx->len); - if (taosTRead(fd, (void *)(pHelper->pCompInfo), pIdx->len) < (int)pIdx->len) { - tsdbError("vgId:%d failed to read %d bytes from file %s since %s", REPO_ID(pHelper->pRepo), pIdx->len, - helperHeadF(pHelper)->fname, strerror(errno)); - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; - } - if (!taosCheckChecksumWhole((uint8_t *)pHelper->pCompInfo, pIdx->len)) { - tsdbError("vgId:%d file %s SCompInfo part is corrupted, tid %d uid %" PRIu64, REPO_ID(pHelper->pRepo), - helperHeadF(pHelper)->fname, pHelper->tableInfo.tid, pHelper->tableInfo.uid); - terrno = TSDB_CODE_TDB_FILE_CORRUPTED; - return -1; - } + if (tsdbLoadCompInfoImpl(pFile, pIdx, &(pHelper->pCompInfo)) < 0) return -1; ASSERT(pIdx->uid == pHelper->pCompInfo->uid && pIdx->tid == pHelper->pCompInfo->tid); } From 139dabf1515dabcf760868a7152b80548025f06e Mon Sep 17 00:00:00 2001 From: Bomin Zhang Date: Thu, 3 Sep 2020 18:32:06 +0800 Subject: [PATCH 05/58] td-804: fix infinite SQL parse retry --- src/client/inc/tsclient.h | 1 + src/client/src/tscAsync.c | 1 + src/client/src/tscParseInsert.c | 12 ++++-------- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/client/inc/tsclient.h b/src/client/inc/tsclient.h index 78544b9b99..5f4a46ddad 100644 --- a/src/client/inc/tsclient.h +++ b/src/client/inc/tsclient.h @@ -348,6 +348,7 @@ typedef struct SSqlObj { void * pStream; void * pSubscription; char * sqlstr; + char parseRetry; char retry; char maxRetry; SRpcEpSet epSet; diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index 650f101645..d07089539a 100644 --- a/src/client/src/tscAsync.c +++ b/src/client/src/tscAsync.c @@ -43,6 +43,7 @@ void doAsyncQuery(STscObj* pObj, SSqlObj* pSql, void (*fp)(), void* param, const pSql->signature = pSql; pSql->param = param; pSql->pTscObj = pObj; + pSql->parseRetry= 0; pSql->maxRetry = TSDB_MAX_REPLICA; pSql->fp = fp; pSql->fetchFp = fp; diff --git a/src/client/src/tscParseInsert.c b/src/client/src/tscParseInsert.c index 7f8fd7f4fe..09eb8f167e 100644 --- a/src/client/src/tscParseInsert.c +++ b/src/client/src/tscParseInsert.c @@ -1335,13 +1335,13 @@ int tsParseSql(SSqlObj *pSql, bool initial) { // make a backup as tsParseInsertSql may modify the string char* sqlstr = strdup(pSql->sqlstr); ret = tsParseInsertSql(pSql); - if (sqlstr == NULL || pSql->retry >= 1 || ret != TSDB_CODE_TSC_INVALID_SQL) { + if (sqlstr == NULL || pSql->parseRetry >= 1 || ret != TSDB_CODE_TSC_INVALID_SQL) { free(sqlstr); } else { tscResetSqlCmdObj(pCmd, true); free(pSql->sqlstr); pSql->sqlstr = sqlstr; - pSql->retry++; + pSql->parseRetry++; if ((ret = tsInsertInitialCheck(pSql)) == TSDB_CODE_SUCCESS) { ret = tsParseInsertSql(pSql); } @@ -1349,18 +1349,14 @@ int tsParseSql(SSqlObj *pSql, bool initial) { } else { SSqlInfo SQLInfo = qSQLParse(pSql->sqlstr); ret = tscToSQLCmd(pSql, &SQLInfo); - if (ret == TSDB_CODE_TSC_INVALID_SQL && pSql->retry == 0 && SQLInfo.type == TSDB_SQL_NULL) { + if (ret == TSDB_CODE_TSC_INVALID_SQL && pSql->parseRetry == 0 && SQLInfo.type == TSDB_SQL_NULL) { tscResetSqlCmdObj(pCmd, true); - pSql->retry++; + pSql->parseRetry++; ret = tscToSQLCmd(pSql, &SQLInfo); } SQLInfoDestroy(&SQLInfo); } - if (ret == TSDB_CODE_SUCCESS) { - pSql->retry = 0; - } - /* * the pRes->code may be modified or released by another thread in tscTableMetaCallBack function, * so do NOT use pRes->code to determine if the getTableMeta function From 79bfe7a6a7eacd218b127dc83e373160c4f91542 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Thu, 3 Sep 2020 18:54:13 +0800 Subject: [PATCH 06/58] [td-1308]add test case --- tests/script/general/parser/topbot.sim | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/script/general/parser/topbot.sim b/tests/script/general/parser/topbot.sim index 5616f8ed16..8e529b4eb4 100644 --- a/tests/script/general/parser/topbot.sim +++ b/tests/script/general/parser/topbot.sim @@ -137,4 +137,23 @@ if $rows != 3 then return -1 endi +print =========>td-1308 +sql create database db; +sql use db; + +sql create table stb (ts timestamp, c1 int, c2 binary(10)) tags(t1 binary(10)); +sql create table tb1 using stb tags('a1'); + +sql insert into tb1 values('2020-09-03 15:30:48.812', 0, 'tb1'); +sql select count(*) from stb where ts > '2020-09-03 15:30:44' interval(4s); +if $rows != 1 then + return -1 +endi + +sql create table tb4 using stb tags('a4'); +sql select count(*) from stb where ts > '2020-09-03 15:30:44' interval(4s); +if $rows != 1 then + return -1 +endi + system sh/exec.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file From 79e0e4d42273cb6a924070c2135c1d1a24c2323a Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Thu, 3 Sep 2020 21:48:59 +0800 Subject: [PATCH 07/58] Update administrator-ch.md --- documentation20/webdocs/markdowndocs/administrator-ch.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/documentation20/webdocs/markdowndocs/administrator-ch.md b/documentation20/webdocs/markdowndocs/administrator-ch.md index 64cadf69cd..8342632eef 100644 --- a/documentation20/webdocs/markdowndocs/administrator-ch.md +++ b/documentation20/webdocs/markdowndocs/administrator-ch.md @@ -47,6 +47,8 @@ Raw DataSize = numOfTables * rowSizePerTable * rowsPerTable 因为TDengine具有很好的水平扩展能力,根据总量,再根据单个物理机或虚拟机的资源,就可以轻松决定需要购置多少台物理机或虚拟机了。 +具体计算公式,请参见页面:资源估算方法 + ## 容错和灾备 ### 容错 From 011ca825f9f91d3f10b2f9b8d5abcdcb326c04ab Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Thu, 3 Sep 2020 14:29:40 +0000 Subject: [PATCH 08/58] TD-1310 Refactor the mqtt module codes --- cmake/input.inc | 10 ++ src/common/src/tglobal.c | 8 +- src/dnode/src/dnodeMgmt.c | 4 +- src/inc/tmqtt.h | 6 +- src/plugins/mqtt/inc/mqttInit.h | 22 ++- src/plugins/mqtt/inc/mqttPayload.h | 6 +- src/plugins/mqtt/inc/mqttSystem.h | 30 ---- src/plugins/mqtt/src/mqttPayload.c | 178 +++++++++++++++++------ src/plugins/mqtt/src/mqttSystem.c | 134 ++++++----------- tests/script/general/connection/mqtt.sim | 14 +- 10 files changed, 220 insertions(+), 192 deletions(-) delete mode 100644 src/plugins/mqtt/inc/mqttSystem.h diff --git a/cmake/input.inc b/cmake/input.inc index f90b10a087..1ef2045f57 100755 --- a/cmake/input.inc +++ b/cmake/input.inc @@ -42,6 +42,16 @@ IF (${MEM_CHECK} MATCHES "true") MESSAGE(STATUS "build with memory check") ENDIF () +IF (${MQTT} MATCHES "false") + SET(TD_MQTT FALSE) + MESSAGE(STATUS "build without mqtt module") +ENDIF () + +IF (${SYNC} MATCHES "false") + SET(TD_SYNC FALSE) + MESSAGE(STATUS "build without sync module") +ENDIF () + IF (${RANDOM_FILE_FAIL} MATCHES "true") SET(TD_RANDOM_FILE_FAIL TRUE) MESSAGE(STATUS "build with random-file-fail enabled") diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index 9549ccf607..b232b41296 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -142,7 +142,7 @@ char tsMqttPort[TSDB_MQTT_PORT_LEN] = "1883"; char tsMqttUser[TSDB_MQTT_USER_LEN] = {0}; char tsMqttPass[TSDB_MQTT_PASS_LEN] = {0}; char tsMqttClientId[TSDB_MQTT_CLIENT_ID_LEN] = "TDengineMqttSubscriber"; -char tsMqttTopic[TSDB_MQTT_TOPIC_LEN] = "/weather/loop"; +char tsMqttTopic[TSDB_MQTT_TOPIC_LEN] = "/test"; // # // monitor int32_t tsEnableMonitorModule = 1; @@ -774,7 +774,7 @@ static void doInitGlobalConfig(void) { cfg.option = "mqttHostName"; cfg.ptr = tsMqttHostName; cfg.valType = TAOS_CFG_VTYPE_STRING; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT; + cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_NOT_PRINT; cfg.minValue = 0; cfg.maxValue = 0; cfg.ptrLength = TSDB_MQTT_HOSTNAME_LEN; @@ -784,7 +784,7 @@ static void doInitGlobalConfig(void) { cfg.option = "mqttPort"; cfg.ptr = tsMqttPort; cfg.valType = TAOS_CFG_VTYPE_STRING; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT; + cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_NOT_PRINT; cfg.minValue = 0; cfg.maxValue = 0; cfg.ptrLength = TSDB_MQTT_PORT_LEN; @@ -794,7 +794,7 @@ static void doInitGlobalConfig(void) { cfg.option = "mqttTopic"; cfg.ptr = tsMqttTopic; cfg.valType = TAOS_CFG_VTYPE_STRING; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT; + cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_NOT_PRINT; cfg.minValue = 0; cfg.maxValue = 0; cfg.ptrLength = TSDB_MQTT_TOPIC_LEN; diff --git a/src/dnode/src/dnodeMgmt.c b/src/dnode/src/dnodeMgmt.c index 1f41bc23eb..c968246a68 100644 --- a/src/dnode/src/dnodeMgmt.c +++ b/src/dnode/src/dnodeMgmt.c @@ -611,7 +611,7 @@ static bool dnodeReadMnodeInfos() { } for (int i = 0; i < size; ++i) { - cJSON* nodeInfo = cJSON_GetArrayItem(nodeInfos, i); + cJSON *nodeInfo = cJSON_GetArrayItem(nodeInfos, i); if (nodeInfo == NULL) continue; cJSON *nodeId = cJSON_GetObjectItem(nodeInfo, "nodeId"); @@ -627,7 +627,7 @@ static bool dnodeReadMnodeInfos() { goto PARSE_OVER; } strncpy(tsDMnodeInfos.nodeInfos[i].nodeEp, nodeEp->valuestring, TSDB_EP_LEN); - } + } ret = true; diff --git a/src/inc/tmqtt.h b/src/inc/tmqtt.h index 401aac16c6..256e61fbae 100644 --- a/src/inc/tmqtt.h +++ b/src/inc/tmqtt.h @@ -19,11 +19,11 @@ #ifdef __cplusplus extern "C" { #endif -#include + int32_t mqttInitSystem(); int32_t mqttStartSystem(); -void mqttStopSystem(); -void mqttCleanUpSystem(); +void mqttStopSystem(); +void mqttCleanUpSystem(); #ifdef __cplusplus } diff --git a/src/plugins/mqtt/inc/mqttInit.h b/src/plugins/mqtt/inc/mqttInit.h index af8c5069ad..81a9a39a2c 100644 --- a/src/plugins/mqtt/inc/mqttInit.h +++ b/src/plugins/mqtt/inc/mqttInit.h @@ -23,11 +23,12 @@ extern "C" { * @file * A simple subscriber program that performs automatic reconnections. */ -#include -#include -#include #include "mqtt.h" -#include "taos.h" + +#define QOS 1 +#define TIMEOUT 10000L +#define MQTT_SEND_BUF_SIZE 102400 +#define MQTT_RECV_BUF_SIZE 102400 /** * @brief A structure that I will use to keep track of some data needed @@ -36,12 +37,12 @@ extern "C" { * An instance of this struct will be created in my \c main(). Then, whenever * \ref mqttReconnectClient is called, this instance will be passed. */ -struct reconnect_state_t { +typedef struct SMqttReconnectState { uint8_t* sendbuf; size_t sendbufsz; uint8_t* recvbuf; size_t recvbufsz; -}; +} SMqttReconnectState; /** * @brief My reconnect callback. It will reestablish the connection whenever @@ -52,7 +53,7 @@ void mqttReconnectClient(struct mqtt_client* client, void** reconnect_state_vptr /** * @brief The function will be called whenever a PUBLISH message is received. */ -void mqtt_PublishCallback(void** unused, struct mqtt_response_publish* published); +void mqttPublishCallback(void** unused, struct mqtt_response_publish* published); /** * @brief The client's refresher. This function triggers back-end routines to @@ -67,12 +68,7 @@ void* mqttClientRefresher(void* client); /** * @brief Safelty closes the \p sockfd and cancels the \p client_daemon before \c exit. */ - -void mqttCleanup(int status, int sockfd, pthread_t* client_daemon); -void mqttInitConnCb(void* param, TAOS_RES* result, int32_t code); -void mqttQueryInsertCallback(void* param, TAOS_RES* result, int32_t code); -#define QOS 1 -#define TIMEOUT 10000L +void mqttCleanupRes(int status, int sockfd, pthread_t* client_daemon); #ifdef __cplusplus } diff --git a/src/plugins/mqtt/inc/mqttPayload.h b/src/plugins/mqtt/inc/mqttPayload.h index b7e7abbd96..12a714afac 100644 --- a/src/plugins/mqtt/inc/mqttPayload.h +++ b/src/plugins/mqtt/inc/mqttPayload.h @@ -15,11 +15,13 @@ #ifndef TDENGINE_MQTT_PLYLOAD_H #define TDENGINE_MQTT_PLYLOAD_H + #ifdef __cplusplus extern "C" { #endif -char split(char str[], char delims[], char** p_p_cmd_part, int max); -char* converJsonToSql(char* json, char* _dbname, char* _tablename); + +char* mqttConverJsonToSql(char* json, int maxSize); + #ifdef __cplusplus } #endif diff --git a/src/plugins/mqtt/inc/mqttSystem.h b/src/plugins/mqtt/inc/mqttSystem.h deleted file mode 100644 index a79fac33b5..0000000000 --- a/src/plugins/mqtt/inc/mqttSystem.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 . - */ - -#ifndef TDENGINE_MQTT_SYSTEM_H -#define TDENGINE_MQTT_SYSTEM_H -#ifdef __cplusplus -extern "C" { -#endif -#include -int32_t mqttInitSystem(); -int32_t mqttStartSystem(); -void mqttStopSystem(); -void mqttCleanUpSystem(); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/plugins/mqtt/src/mqttPayload.c b/src/plugins/mqtt/src/mqttPayload.c index 96c8e71edd..ab3cd4c633 100644 --- a/src/plugins/mqtt/src/mqttPayload.c +++ b/src/plugins/mqtt/src/mqttPayload.c @@ -14,52 +14,142 @@ */ #define _DEFAULT_SOURCE -#include "mqttPayload.h" -#include "cJSON.h" -#include "string.h" -#include "taos.h" -#include "mqttLog.h" #include "os.h" -char split(char str[], char delims[], char** p_p_cmd_part, int max) { - char* token = strtok(str, delims); - char part_index = 0; - char** tmp_part = p_p_cmd_part; - while (token) { - *tmp_part++ = token; - token = strtok(NULL, delims); - part_index++; - if (part_index >= max) break; - } - return part_index; -} +#include "cJSON.h" +#include "mqttLog.h" +#include "mqttPayload.h" -char* converJsonToSql(char* json, char* _dbname, char* _tablename) { - cJSON* jPlayload = cJSON_Parse(json); - char _names[102400] = {0}; - char _values[102400] = {0}; - int i = 0; - int count = cJSON_GetArraySize(jPlayload); - for (; i < count; i++) - { - cJSON* item = cJSON_GetArrayItem(jPlayload, i); - if (cJSON_Object == item->type) { - mqttInfo("The item '%s' is not supported", item->string); - } else { - strcat(_names, item->string); - if (i < count - 1) { - strcat(_names, ","); - } - char* __value_json = cJSON_Print(item); - strcat(_values, __value_json); - free(__value_json); - if (i < count - 1) { - strcat(_values, ","); - } +// subscribe message like this + +/* +/test { + "timestamp": 1599121290, + "gateway": { + "name": "AcuLink 810 Gateway", + "model": "AcuLink810-868", + "serial": "S8P20200207" + }, + "device": { + "name": "Acuvim L V3 .221", + "model": "Acuvim-L-V3", + "serial": "221", + "online": true, + "readings": [ + { + "param": "Freq_Hz", + "value": "59.977539", + "unit": "Hz" + }, + { + "param": "Va_V", + "value": "122.002907", + "unit": "V" + }, + { + "param": "DI4", + "value": "5.000000", + "unit": "" + } + ] } +} +*/ + +/* + * This is an example, this function needs to be implemented in order to parse the json file into a sql statement + * Note that you need to create a super table and database before writing data + * In this case: + * create database mqttdb; + * create table mqttdb.devices(ts timestamp, value bigint) tags(name binary(32), model binary(32), serial binary(16), param binary(16), unit binary(16)); + */ + +char* mqttConverJsonToSql(char* json, int maxSize) { + // const int32_t maxSize = 10240; + char* sql = malloc(maxSize); + + cJSON* root = cJSON_Parse(json); + if (root == NULL) { + mqttError("failed to parse msg, invalid json format"); + goto MQTT_PARSE_OVER; } - cJSON_free(jPlayload); - int sqllen = strlen(_names) + strlen(_values) + strlen(_dbname) + strlen(_tablename) + 1024; - char* _sql = calloc(1, sqllen); - sprintf(_sql, "INSERT INTO %s.%s (%s) VALUES(%s);", _dbname, _tablename, _names, _values); - return _sql; + + cJSON* timestamp = cJSON_GetObjectItem(root, "timestamp"); + if (!timestamp || timestamp->type != cJSON_Number) { + mqttError("failed to parse msg, timestamp not found"); + goto MQTT_PARSE_OVER; + } + + cJSON* device = cJSON_GetObjectItem(root, "device"); + if (!device) { + mqttError("failed to parse msg, device not found"); + goto MQTT_PARSE_OVER; + } + + cJSON* name = cJSON_GetObjectItem(device, "name"); + if (!name || name->type != cJSON_String) { + mqttError("failed to parse msg, name not found"); + goto MQTT_PARSE_OVER; + } + + cJSON* model = cJSON_GetObjectItem(device, "model"); + if (!model || model->type != cJSON_String) { + mqttError("failed to parse msg, model not found"); + goto MQTT_PARSE_OVER; + } + + cJSON* serial = cJSON_GetObjectItem(device, "serial"); + if (!serial || serial->type != cJSON_String) { + mqttError("failed to parse msg, serial not found"); + goto MQTT_PARSE_OVER; + } + + cJSON* readings = cJSON_GetObjectItem(device, "readings"); + if (!readings || readings->type != cJSON_Array) { + mqttError("failed to parse msg, readings not found"); + goto MQTT_PARSE_OVER; + } + + int count = cJSON_GetArraySize(readings); + if (count <= 0) { + mqttError("failed to parse msg, readings size smaller than 0"); + goto MQTT_PARSE_OVER; + } + + int len = snprintf(sql, maxSize, "insert into"); + + for (int i = 0; i < count; ++i) { + cJSON* reading = cJSON_GetArrayItem(readings, i); + if (reading == NULL) continue; + + cJSON* param = cJSON_GetObjectItem(reading, "param"); + if (!param || param->type != cJSON_String) { + mqttError("failed to parse msg, param not found"); + goto MQTT_PARSE_OVER; + } + + cJSON* value = cJSON_GetObjectItem(reading, "value"); + if (!value || value->type != cJSON_String) { + mqttError("failed to parse msg, value not found"); + goto MQTT_PARSE_OVER; + } + + cJSON* unit = cJSON_GetObjectItem(reading, "unit"); + if (!unit || unit->type != cJSON_String) { + mqttError("failed to parse msg, unit not found"); + goto MQTT_PARSE_OVER; + } + + len += snprintf(sql, maxSize - len, + " mqttdb.%s using mqttdb.devices tags('%s', '%s', '%s', '%s', '%s') values(%" PRId64 ", %s)", + serial->valuestring, name->valuestring, model->valuestring, serial->valuestring, param->valuestring, + unit->valuestring, timestamp->valueint * 1000, value->valuestring); + } + + cJSON_free(root); + return sql; + +MQTT_PARSE_OVER: + cJSON_free(root); + free(sql); + return NULL; } \ No newline at end of file diff --git a/src/plugins/mqtt/src/mqttSystem.c b/src/plugins/mqtt/src/mqttSystem.c index 84dc5eea2a..0779fd6d72 100644 --- a/src/plugins/mqtt/src/mqttSystem.c +++ b/src/plugins/mqtt/src/mqttSystem.c @@ -14,35 +14,21 @@ */ #define _DEFAULT_SOURCE - -#include "cJSON.h" +#include "os.h" #include "mqtt.h" #include "mqttInit.h" #include "mqttLog.h" #include "mqttPayload.h" -#include "os.h" +#include "tmqtt.h" #include "posix_sockets.h" -#include "string.h" #include "taos.h" #include "tglobal.h" -#include "tmqtt.h" -#include "tsclient.h" -#include "tsocket.h" -#include "ttimer.h" -#include "mqttSystem.h" -#define MQTT_SEND_BUF_SIZE 102400 -#define MQTT_RECV_BUF_SIZE 102400 - -struct mqtt_client tsMqttClient = {0}; -struct reconnect_state_t tsMqttStatus = {0}; -static pthread_t tsMqttClientDaemonThread = {0}; -static void* tsMqttConnect = NULL; -static bool mqttIsRuning = false; - -void mqttPublishCallback(void** unused, struct mqtt_response_publish* published); -void mqttCleanupRes(int status, int sockfd, pthread_t* client_daemon); -void* mqttClientRefresher(void* client); +struct mqtt_client tsMqttClient = {0}; +struct SMqttReconnectState tsMqttStatus = {0}; +static pthread_t tsMqttClientDaemonThread = {0}; +static void* tsMqttConnect = NULL; +static bool tsMqttIsRuning = false; int32_t mqttInitSystem() { return 0; } @@ -51,22 +37,22 @@ int32_t mqttStartSystem() { tsMqttStatus.recvbufsz = MQTT_RECV_BUF_SIZE; tsMqttStatus.sendbuf = malloc(MQTT_SEND_BUF_SIZE); tsMqttStatus.recvbuf = malloc(MQTT_RECV_BUF_SIZE); - mqttIsRuning = true; + tsMqttIsRuning = true; mqtt_init_reconnect(&tsMqttClient, mqttReconnectClient, &tsMqttStatus, mqttPublishCallback); if (pthread_create(&tsMqttClientDaemonThread, NULL, mqttClientRefresher, &tsMqttClient)) { - mqttError("mqtt client failed to start daemon."); + mqttError("mqtt failed to start daemon."); mqttCleanupRes(EXIT_FAILURE, -1, NULL); return -1; } - mqttInfo("mqtt client listening for %s messages", tsMqttTopic); + mqttInfo("mqtt listening for topic:%s messages", tsMqttTopic); return 0; } void mqttStopSystem() { - if (mqttIsRuning) { - mqttIsRuning = false; + if (tsMqttIsRuning) { + tsMqttIsRuning = false; tsMqttClient.error = MQTT_ERROR_SOCKET_ERROR; taosMsleep(300); @@ -82,52 +68,41 @@ void mqttCleanUpSystem() { } void mqttPublishCallback(void** unused, struct mqtt_response_publish* published) { - /* note that published->topic_name is NOT null-terminated (here we'll change it to a c-string) */ - char* topic_name = (char*)malloc(published->topic_name_size + 1); - memcpy(topic_name, published->topic_name, published->topic_name_size); - topic_name[published->topic_name_size] = '\0'; - mqttInfo("received publish('%s'): %s", topic_name, (const char*)published->application_message); - char _token[128] = {0}; - char _dbname[128] = {0}; - char _tablename[128] = {0}; - if (tsMqttConnect == NULL) { - mqttInfo("connect database"); - taos_connect_a(NULL, "_root", tsInternalPass, "", 0, mqttInitConnCb, &tsMqttClient, &tsMqttConnect); - } - if (topic_name[1] == '/' && strncmp((char*)&topic_name[1], tsMqttTopic, strlen(tsMqttTopic)) == 0) { - char* p_p_cmd_part[5] = {0}; - char copystr[1024] = {0}; - strncpy(copystr, topic_name, MIN(1024, published->topic_name_size)); - char part_index = split(copystr, "/", p_p_cmd_part, 10); - if (part_index < 4) { - mqttError("The topic %s is't format '/path/token/dbname/table name/'. for expmle: '/taos/token/db/t'", - topic_name); - } else { - strncpy(_token, p_p_cmd_part[1], 127); - strncpy(_dbname, p_p_cmd_part[2], 127); - strncpy(_tablename, p_p_cmd_part[3], 127); - mqttInfo("part count=%d,access token:%s,database name:%s, table name:%s", part_index, _token, _dbname, - _tablename); + const char* content = published->application_message; + mqttDebug("receive message size:%d", (int)published->application_message_size); - if (tsMqttConnect != NULL) { - char* _sql = converJsonToSql((char*)published->application_message, _dbname, _tablename); - mqttInfo("query:%s", _sql); - taos_query_a(tsMqttConnect, _sql, mqttQueryInsertCallback, &tsMqttClient); - mqttInfo("free sql:%s", _sql); - free(_sql); - } + if (tsMqttConnect == NULL) { + tsMqttConnect = taos_connect(NULL, "_root", tsInternalPass, "", 0); + if (tsMqttConnect == NULL) { + mqttError("failed to connect tdengine"); + return; + } else { + mqttInfo("successed to connect tdengine"); } } - free(topic_name); + + mqttTrace("receive message content:%s", content); + + char* sql = mqttConverJsonToSql((char*)content, (int)published->application_message_size); + if (sql != NULL) { + void* res = taos_query(tsMqttConnect, sql); + int code = taos_errno(res); + if (code != 0) { + mqttError("failed to exec sql%s", sql); + } + taos_free_result(res); + } else { + mqttDebug("failed to parse mqtt message"); + } } void* mqttClientRefresher(void* client) { - while (mqttIsRuning) { + while (tsMqttIsRuning) { mqtt_sync((struct mqtt_client*)client); taosMsleep(100); } - mqttDebug("mqtt client quit refresher"); + mqttDebug("mqtt quit refresher"); return NULL; } @@ -142,28 +117,8 @@ void mqttCleanupRes(int status, int sockfd, pthread_t* client_daemon) { } } -void mqttInitConnCb(void* param, TAOS_RES* result, int32_t code) { - if (code < 0) { - mqttError("mqtt:%d, connect to database failed, reason:%s", code, tstrerror(code)); - taos_close(tsMqttConnect); - tsMqttConnect = NULL; - return; - } - mqttDebug("mqtt:%d, connect to database success, reason:%s", code, tstrerror(code)); -} - -void mqttQueryInsertCallback(void* param, TAOS_RES* result, int32_t code) { - if (code < 0) { - mqttError("mqtt:%d, save data failed, code:%s", code, tstrerror(code)); - } else if (code == 0) { - mqttError("mqtt:%d, save data failed, affect rows:%d", code, code); - } else { - mqttInfo("mqtt:%d, save data success, code:%s", code, tstrerror(code)); - } -} - void mqttReconnectClient(struct mqtt_client* client, void** unused) { - mqttInfo("mqtt client tries to connect to the server"); + mqttInfo("mqtt tries to connect to the mqtt server"); if (client->error != MQTT_ERROR_INITIAL_RECONNECT) { close(client->socketfd); @@ -173,17 +128,14 @@ void mqttReconnectClient(struct mqtt_client* client, void** unused) { mqttError("mqtt client was in error state %s", mqtt_error_str(client->error)); } - int sockfd = open_nb_socket("test.mosquitto.org", "1883"); + int sockfd = open_nb_socket(tsMqttHostName, tsMqttPort); if (sockfd < 0) { mqttError("mqtt client failed to open socket %s:%s", tsMqttHostName, tsMqttPort); - mqttCleanupRes(EXIT_FAILURE, sockfd, NULL); + //mqttCleanupRes(EXIT_FAILURE, sockfd, NULL); + return; } - // mqtt_reinit(client, sockfd, tsMqttStatus.sendbuf, tsMqttStatus.sendbufsz, tsMqttStatus.recvbuf, tsMqttStatus.recvbufsz); - // mqtt_connect(client, tsMqttClientId, NULL, NULL, 0, tsMqttUser, tsMqttPass, MQTT_CONNECT_CLEAN_SESSION, 400); - // mqtt_subscribe(client, tsMqttTopic, 0); - mqtt_reinit(client, sockfd, tsMqttStatus.sendbuf, tsMqttStatus.sendbufsz, tsMqttStatus.recvbuf, tsMqttStatus.recvbufsz); - mqtt_connect(client, tsMqttClientId, NULL, NULL, 0, NULL, NULL, MQTT_CONNECT_CLEAN_SESSION, 400); - mqtt_subscribe(client, "datetime", 0); + mqtt_connect(client, "tsMqttClientId", NULL, NULL, 0, tsMqttUser, tsMqttPass, MQTT_CONNECT_CLEAN_SESSION, 400); + mqtt_subscribe(client, tsMqttTopic, 0); } \ No newline at end of file diff --git a/tests/script/general/connection/mqtt.sim b/tests/script/general/connection/mqtt.sim index 6533e414aa..f003252c5a 100644 --- a/tests/script/general/connection/mqtt.sim +++ b/tests/script/general/connection/mqtt.sim @@ -6,6 +6,14 @@ system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1 system sh/cfg.sh -n dnode1 -c mnodeEqualVnodeNum -v 4 system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 100000 system sh/cfg.sh -n dnode1 -c http -v 1 -system sh/cfg.sh -n dnode1 -c http -v 1 -system sh/cfg.sh -n dnode1 -c mqttBrokerAddress -v mqtt://test.mosquitto.org:1883/# -system sh/cfg.sh -n dnode1 -c mqttBrokerClientId -v taosmqtt \ No newline at end of file +system sh/cfg.sh -n dnode1 -c mqtt -v 1 + +system sh/exec.sh -n dnode1 -s start + +sql sleep 3000 +sql connect +sql create database mqttdb; +sql create table mqttdb.devices(ts timestamp, value bigint) tags(name binary(32), model binary(32), serial binary(16), param binary(16), unit binary(16)); + +sql sleep 1000 +system sh/exec.sh -n dnode1 -s stop -x SIGINT From 932761a2e136c9e080a5cfb1cf8292c89b1392f6 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Thu, 3 Sep 2020 14:35:58 +0000 Subject: [PATCH 09/58] minor changes --- src/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ede66d95bb..898b7cb032 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,7 +10,9 @@ ADD_SUBDIRECTORY(client) ADD_SUBDIRECTORY(query) ADD_SUBDIRECTORY(kit) ADD_SUBDIRECTORY(plugins) -ADD_SUBDIRECTORY(sync) +IF (TD_SYNC) + ADD_SUBDIRECTORY(sync) +ENDIF () ADD_SUBDIRECTORY(balance) ADD_SUBDIRECTORY(mnode) ADD_SUBDIRECTORY(vnode) From 42f83c3cb0f5000b22647528064c95f6c8d30147 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Thu, 3 Sep 2020 15:35:54 +0000 Subject: [PATCH 10/58] TD-1310 minor changes --- src/plugins/mqtt/src/mqttPayload.c | 12 ++++++++---- src/plugins/mqtt/src/mqttSystem.c | 10 ++++++---- tests/script/general/connection/mqtt.sim | 6 +++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/plugins/mqtt/src/mqttPayload.c b/src/plugins/mqtt/src/mqttPayload.c index ab3cd4c633..1af8b02fad 100644 --- a/src/plugins/mqtt/src/mqttPayload.c +++ b/src/plugins/mqtt/src/mqttPayload.c @@ -55,6 +55,9 @@ } */ +// send msg cmd +// mosquitto_pub -h test.mosquitto.org -t "/test" -m '{"timestamp": 1599121290,"gateway": {"name": "AcuLink 810 Gateway","model": "AcuLink810-868","serial": "S8P20200207"},"device": {"name": "Acuvim L V3 .221","model": "Acuvim-L-V3","serial": "221","online": true,"readings": [{"param": "Freq_Hz","value": "59.977539","unit": "Hz"},{"param": "Va_V","value": "122.002907","unit": "V"},{"param": "DI4","value": "5.000000","unit": ""}]}}' + /* * This is an example, this function needs to be implemented in order to parse the json file into a sql statement * Note that you need to create a super table and database before writing data @@ -65,6 +68,7 @@ char* mqttConverJsonToSql(char* json, int maxSize) { // const int32_t maxSize = 10240; + maxSize *= 5; char* sql = malloc(maxSize); cJSON* root = cJSON_Parse(json); @@ -139,10 +143,10 @@ char* mqttConverJsonToSql(char* json, int maxSize) { goto MQTT_PARSE_OVER; } - len += snprintf(sql, maxSize - len, - " mqttdb.%s using mqttdb.devices tags('%s', '%s', '%s', '%s', '%s') values(%" PRId64 ", %s)", - serial->valuestring, name->valuestring, model->valuestring, serial->valuestring, param->valuestring, - unit->valuestring, timestamp->valueint * 1000, value->valuestring); + len += snprintf(sql + len, maxSize - len, + " mqttdb.serial_%s_%s using mqttdb.devices tags('%s', '%s', '%s', '%s', '%s') values(%" PRId64 ", %s)", + serial->valuestring, param->valuestring, name->valuestring, model->valuestring, serial->valuestring, + param->valuestring, unit->valuestring, timestamp->valueint * 1000, value->valuestring); } cJSON_free(root); diff --git a/src/plugins/mqtt/src/mqttSystem.c b/src/plugins/mqtt/src/mqttSystem.c index 0779fd6d72..8079cedb27 100644 --- a/src/plugins/mqtt/src/mqttSystem.c +++ b/src/plugins/mqtt/src/mqttSystem.c @@ -74,10 +74,10 @@ void mqttPublishCallback(void** unused, struct mqtt_response_publish* published) if (tsMqttConnect == NULL) { tsMqttConnect = taos_connect(NULL, "_root", tsInternalPass, "", 0); if (tsMqttConnect == NULL) { - mqttError("failed to connect tdengine"); + mqttError("failed to connect to tdengine"); return; } else { - mqttInfo("successed to connect tdengine"); + mqttInfo("successfully connected to the tdengine"); } } @@ -88,7 +88,9 @@ void mqttPublishCallback(void** unused, struct mqtt_response_publish* published) void* res = taos_query(tsMqttConnect, sql); int code = taos_errno(res); if (code != 0) { - mqttError("failed to exec sql%s", sql); + mqttError("failed to exec sql:%s", sql); + } else { + mqttDebug("successfully to exec sql:%s", sql); } taos_free_result(res); } else { @@ -136,6 +138,6 @@ void mqttReconnectClient(struct mqtt_client* client, void** unused) { } mqtt_reinit(client, sockfd, tsMqttStatus.sendbuf, tsMqttStatus.sendbufsz, tsMqttStatus.recvbuf, tsMqttStatus.recvbufsz); - mqtt_connect(client, "tsMqttClientId", NULL, NULL, 0, tsMqttUser, tsMqttPass, MQTT_CONNECT_CLEAN_SESSION, 400); + mqtt_connect(client, tsMqttClientId, NULL, NULL, 0, tsMqttUser, tsMqttPass, MQTT_CONNECT_CLEAN_SESSION, 400); mqtt_subscribe(client, tsMqttTopic, 0); } \ No newline at end of file diff --git a/tests/script/general/connection/mqtt.sim b/tests/script/general/connection/mqtt.sim index f003252c5a..4b291f91ea 100644 --- a/tests/script/general/connection/mqtt.sim +++ b/tests/script/general/connection/mqtt.sim @@ -10,10 +10,10 @@ system sh/cfg.sh -n dnode1 -c mqtt -v 1 system sh/exec.sh -n dnode1 -s start -sql sleep 3000 +sleep 3000 sql connect sql create database mqttdb; -sql create table mqttdb.devices(ts timestamp, value bigint) tags(name binary(32), model binary(32), serial binary(16), param binary(16), unit binary(16)); +sql create table mqttdb.devices(ts timestamp, value double) tags(name binary(32), model binary(32), serial binary(16), param binary(16), unit binary(16)); -sql sleep 1000 +sleep 1000 system sh/exec.sh -n dnode1 -s stop -x SIGINT From 39e55b20218ba7dcf6c9bd8a7eb04841eea1a4cf Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 4 Sep 2020 10:33:57 +0800 Subject: [PATCH 11/58] [td-1315] --- src/util/src/tcache.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index e5526647cb..281576b507 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -364,16 +364,22 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { * that tries to do the same thing. */ if (inTrashCan) { - ref = T_REF_DEC(pNode); + ref = T_REF_VAL_GET(pNode); - if (ref == 0) { + if (ref == 1) { // it is the last ref, assert(pNode->pTNodeHeader->pData == pNode); __cache_wr_lock(pCacheObj); doRemoveElemInTrashcan(pCacheObj, pNode->pTNodeHeader); __cache_unlock(pCacheObj); + ref = T_REF_DEC(pNode); + assert(ref == 0); + doDestroyTrashcanElem(pCacheObj, pNode->pTNodeHeader); + } else { + ref = T_REF_DEC(pNode); + assert(ref > 0); } } else { // NOTE: remove it from hash in the first place, otherwise, the pNode may have been released by other thread From 510be650285947921ee1d98f69aef6e0099b975e Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 4 Sep 2020 11:50:57 +0800 Subject: [PATCH 12/58] [td-1315] --- src/util/src/tcache.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index 281576b507..e440e70b06 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -366,7 +366,9 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { if (inTrashCan) { ref = T_REF_VAL_GET(pNode); - if (ref == 1) { // it is the last ref, + if (ref == 1) { + // If it is the last ref, remove it from trashcan linked-list first, and then destroy it.Otherwise, it may be + // destroyed by refresh worker if decrease ref count before removing it from linked-list. assert(pNode->pTNodeHeader->pData == pNode); __cache_wr_lock(pCacheObj); @@ -379,7 +381,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { doDestroyTrashcanElem(pCacheObj, pNode->pTNodeHeader); } else { ref = T_REF_DEC(pNode); - assert(ref > 0); + assert(ref >= 0); } } else { // NOTE: remove it from hash in the first place, otherwise, the pNode may have been released by other thread From 4688f0a54973312d05aa79a84e66272e8c36bf06 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Fri, 4 Sep 2020 12:01:16 +0800 Subject: [PATCH 13/58] Update administrator-ch.md --- documentation20/webdocs/markdowndocs/administrator-ch.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation20/webdocs/markdowndocs/administrator-ch.md b/documentation20/webdocs/markdowndocs/administrator-ch.md index 8342632eef..ff5c0d5713 100644 --- a/documentation20/webdocs/markdowndocs/administrator-ch.md +++ b/documentation20/webdocs/markdowndocs/administrator-ch.md @@ -47,7 +47,7 @@ Raw DataSize = numOfTables * rowSizePerTable * rowsPerTable 因为TDengine具有很好的水平扩展能力,根据总量,再根据单个物理机或虚拟机的资源,就可以轻松决定需要购置多少台物理机或虚拟机了。 -具体计算公式,请参见页面:资源估算方法 +**立即计算CPU、内存、存储,请参见:资源估算方法** ## 容错和灾备 From bf8c9f7df3265154d25453f9b2b9c71b8a528ba6 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 4 Sep 2020 13:20:56 +0800 Subject: [PATCH 14/58] [td-225] --- src/util/src/tcache.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index e440e70b06..c34e9536a5 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -98,7 +98,7 @@ static FORCE_INLINE void taosCacheReleaseNode(SCacheObj *pCacheObj, SCacheDataNo int32_t size = (int32_t)taosHashGetSize(pCacheObj->pHashTable); assert(size > 0); - uDebug("cache:%s, key:%p, %p is destroyed from cache, size:%dbytes, num:%d size:%" PRId64 "bytes", + uError("cache:%s, key:%p, %p is destroyed from cache, size:%dbytes, num:%d size:%" PRId64 "bytes", pCacheObj->name, pNode->key, pNode->data, pNode->size, size - 1, pCacheObj->totalSize); if (pCacheObj->freeFp) { @@ -205,7 +205,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v int32_t succ = taosHashPut(pCacheObj->pHashTable, key, keyLen, &pNode1, sizeof(void *)); if (succ == 0) { atomic_add_fetch_64(&pCacheObj->totalSize, pNode1->size); - uDebug("cache:%s, key:%p, %p added into cache, added:%" PRIu64 ", expire:%" PRIu64 + uError("cache:%s, key:%p, %p added into cache, added:%" PRIu64 ", expire:%" PRIu64 ", totalNum:%d totalSize:%" PRId64 "bytes size:%" PRId64 "bytes", pCacheObj->name, key, pNode1->data, pNode1->addedTime, pNode1->expireTime, (int32_t)taosHashGetSize(pCacheObj->pHashTable), pCacheObj->totalSize, (int64_t)dataSize); @@ -224,7 +224,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v taosTFree(p); } else { taosAddToTrash(pCacheObj, p); - uDebug("cache:%s, key:%p, %p exist in cache, updated old:%p", pCacheObj->name, key, pNode1->data, p); + uError("cache:%s, key:%p, %p exist in cache, updated old:%p", pCacheObj->name, key, pNode1->data, p); } } @@ -234,7 +234,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v if (ret == 0) { atomic_add_fetch_64(&pCacheObj->totalSize, pNode1->size); - uDebug("cache:%s, key:%p, %p added into cache, added:%" PRIu64 ", expire:%" PRIu64 + uError("cache:%s, key:%p, %p added into cache, added:%" PRIu64 ", expire:%" PRIu64 ", totalNum:%d totalSize:%" PRId64 "bytes size:%" PRId64 "bytes", pCacheObj->name, key, pNode1->data, pNode1->addedTime, pNode1->expireTime, (int32_t)taosHashGetSize(pCacheObj->pHashTable), pCacheObj->totalSize, (int64_t)dataSize); @@ -275,10 +275,10 @@ void *taosCacheAcquireByKey(SCacheObj *pCacheObj, const void *key, size_t keyLen if (pData != NULL) { atomic_add_fetch_32(&pCacheObj->statistics.hitCount, 1); - uDebug("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, T_REF_VAL_GET(*ptNode)); + uError("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, T_REF_VAL_GET(*ptNode)); } else { atomic_add_fetch_32(&pCacheObj->statistics.missCount, 1); - uDebug("cache:%s, key:%p, not in cache, retrieved failed", pCacheObj->name, key); + uError("cache:%s, key:%p, not in cache, retrieved failed", pCacheObj->name, key); } atomic_add_fetch_32(&pCacheObj->statistics.totalAccess, 1); @@ -297,7 +297,7 @@ void *taosCacheAcquireByData(SCacheObj *pCacheObj, void *data) { } int32_t ref = T_REF_INC(ptNode); - uDebug("cache:%s, data: %p acquired by data in cache, refcnt:%d", pCacheObj->name, ptNode->data, ref); + uError("cache:%s, data: %p acquired by data in cache, refcnt:%d", pCacheObj->name, ptNode->data, ref); // the data if referenced by at least one object, so the reference count must be greater than the value of 2. assert(ref >= 2); @@ -345,7 +345,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { if (pCacheObj->extendLifespan && (!inTrashCan) && (!_remove)) { atomic_store_64(&pNode->expireTime, pNode->lifespan + taosGetTimestampMs()); - uDebug("cache:%s data:%p extend expire time: %"PRId64, pCacheObj->name, pNode->data, pNode->expireTime); + uError("cache:%s data:%p extend expire time: %"PRId64, pCacheObj->name, pNode->data, pNode->expireTime); } if (_remove) { @@ -354,7 +354,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { char* d = pNode->data; int32_t ref = T_REF_VAL_GET(pNode); - uDebug("cache:%s, key:%p, %p is released, refcnt:%d, intrash:%d", pCacheObj->name, key, d, ref - 1, inTrashCan); + uError("cache:%s, key:%p, %p is released, refcnt:%d, intrash:%d", pCacheObj->name, key, d, ref - 1, inTrashCan); /* * If it is not referenced by other users, remove it immediately. Otherwise move this node to trashcan wait for all users @@ -394,13 +394,13 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { // note that the remove operation can be executed only once. if (ret == 0) { if (p != pNode) { - uDebug( "cache:%s, key:%p, successfully removed a new entry:%p, refcnt:%d, prev entry:%p has been removed by " + uError( "cache:%s, key:%p, successfully removed a new entry:%p, refcnt:%d, prev entry:%p has been removed by " "others already", pCacheObj->name, pNode->key, p->data, T_REF_VAL_GET(p), pNode->data); assert(p->pTNodeHeader == NULL); taosAddToTrash(pCacheObj, p); } else { - uDebug("cache:%s, key:%p, %p successfully removed from hash table, refcnt:%d", pCacheObj->name, pNode->key, + uError("cache:%s, key:%p, %p successfully removed from hash table, refcnt:%d", pCacheObj->name, pNode->key, pNode->data, ref); if (ref > 0) { assert(pNode->pTNodeHeader == NULL); @@ -410,7 +410,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { atomic_sub_fetch_64(&pCacheObj->totalSize, pNode->size); int32_t size = (int32_t)taosHashGetSize(pCacheObj->pHashTable); - uDebug("cache:%s, key:%p, %p is destroyed from cache, size:%dbytes, num:%d size:%" PRId64 "bytes", + uError("cache:%s, key:%p, %p is destroyed from cache, size:%dbytes, num:%d size:%" PRId64 "bytes", pCacheObj->name, pNode->key, pNode->data, pNode->size, size, pCacheObj->totalSize); if (pCacheObj->freeFp) { @@ -421,7 +421,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { } } } else { - uDebug("cache:%s, key:%p, %p has been removed from hash table by other thread already, refcnt:%d", + uError("cache:%s, key:%p, %p has been removed from hash table by other thread already, refcnt:%d", pCacheObj->name, pNode->key, pNode->data, ref); } } @@ -432,7 +432,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { char* p = pNode->data; int32_t ref = T_REF_DEC(pNode); - uDebug("cache:%s, key:%p, %p released, refcnt:%d, data in trancan:%d", pCacheObj->name, key, p, ref, inTrashCan); + uError("cache:%s, key:%p, %p released, refcnt:%d, data in trashcan:%d", pCacheObj->name, key, p, ref, inTrashCan); } } @@ -524,7 +524,7 @@ void taosAddToTrash(SCacheObj *pCacheObj, SCacheDataNode *pNode) { pCacheObj->numOfElemsInTrash++; __cache_unlock(pCacheObj); - uDebug("cache:%s key:%p, %p move to trash, numOfElem in trash:%d", pCacheObj->name, pNode->key, pNode->data, + uError("cache:%s key:%p, %p move to trash, numOfElem in trash:%d", pCacheObj->name, pNode->key, pNode->data, pCacheObj->numOfElemsInTrash); } @@ -550,7 +550,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) { } if (force || (T_REF_VAL_GET(pElem->pData) == 0)) { - uDebug("key:%p, %p removed from trash. numOfElem in trash:%d", pElem->pData->key, pElem->pData->data, + uError("key:%p, %p removed from trash. numOfElem in trash:%d", pElem->pData->key, pElem->pData->data, pCacheObj->numOfElemsInTrash - 1); STrashElem *p = pElem; @@ -611,7 +611,7 @@ static void doCacheRefresh(SCacheObj* pCacheObj, int64_t time, __cache_free_fn_t void* taosCacheTimedRefresh(void *handle) { SCacheObj* pCacheObj = handle; if (pCacheObj == NULL) { - uDebug("object is destroyed. no refresh retry"); + uError("object is destroyed. no refresh retry"); return NULL; } @@ -624,7 +624,7 @@ void* taosCacheTimedRefresh(void *handle) { // check if current cache object will be deleted every 500ms. if (pCacheObj->deleting) { - uDebug("%s refresh threads quit", pCacheObj->name); + uError("%s refresh threads quit", pCacheObj->name); break; } From b7584337ab543ffcc1e143a0d7037975b8010bc2 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 4 Sep 2020 13:57:04 +0800 Subject: [PATCH 15/58] add more functionality file --- src/tsdb/src/tsdbCompact.c | 14 ++++++++++++++ src/tsdb/src/tsdbRecover.c | 14 ++++++++++++++ src/tsdb/src/tsdbScan.c | 14 ++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 src/tsdb/src/tsdbCompact.c create mode 100644 src/tsdb/src/tsdbRecover.c create mode 100644 src/tsdb/src/tsdbScan.c diff --git a/src/tsdb/src/tsdbCompact.c b/src/tsdb/src/tsdbCompact.c new file mode 100644 index 0000000000..6dea4a4e57 --- /dev/null +++ b/src/tsdb/src/tsdbCompact.c @@ -0,0 +1,14 @@ +/* + * 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 . + */ \ No newline at end of file diff --git a/src/tsdb/src/tsdbRecover.c b/src/tsdb/src/tsdbRecover.c new file mode 100644 index 0000000000..6dea4a4e57 --- /dev/null +++ b/src/tsdb/src/tsdbRecover.c @@ -0,0 +1,14 @@ +/* + * 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 . + */ \ No newline at end of file diff --git a/src/tsdb/src/tsdbScan.c b/src/tsdb/src/tsdbScan.c new file mode 100644 index 0000000000..6dea4a4e57 --- /dev/null +++ b/src/tsdb/src/tsdbScan.c @@ -0,0 +1,14 @@ +/* + * 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 . + */ \ No newline at end of file From e9c0e7d2f1e1369f6e04abe71d9f6d96d2ed3103 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 4 Sep 2020 14:04:30 +0800 Subject: [PATCH 16/58] [td-225] --- src/util/src/tcache.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index c34e9536a5..08b5d473a3 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -90,7 +90,6 @@ static void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force); static FORCE_INLINE void taosCacheReleaseNode(SCacheObj *pCacheObj, SCacheDataNode *pNode) { if (pNode->signature != (uint64_t)pNode) { uError("key:%s, %p data is invalid, or has been released", pNode->key, pNode); - assert(0); return; } @@ -98,7 +97,7 @@ static FORCE_INLINE void taosCacheReleaseNode(SCacheObj *pCacheObj, SCacheDataNo int32_t size = (int32_t)taosHashGetSize(pCacheObj->pHashTable); assert(size > 0); - uError("cache:%s, key:%p, %p is destroyed from cache, size:%dbytes, num:%d size:%" PRId64 "bytes", + uDebug("cache:%s, key:%p, %p is destroyed from cache, size:%dbytes, num:%d size:%" PRId64 "bytes", pCacheObj->name, pNode->key, pNode->data, pNode->size, size - 1, pCacheObj->totalSize); if (pCacheObj->freeFp) { @@ -275,10 +274,10 @@ void *taosCacheAcquireByKey(SCacheObj *pCacheObj, const void *key, size_t keyLen if (pData != NULL) { atomic_add_fetch_32(&pCacheObj->statistics.hitCount, 1); - uError("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, T_REF_VAL_GET(*ptNode)); + uDebug("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, T_REF_VAL_GET(*ptNode)); } else { atomic_add_fetch_32(&pCacheObj->statistics.missCount, 1); - uError("cache:%s, key:%p, not in cache, retrieved failed", pCacheObj->name, key); + uDebug("cache:%s, key:%p, not in cache, retrieved failed", pCacheObj->name, key); } atomic_add_fetch_32(&pCacheObj->statistics.totalAccess, 1); @@ -292,12 +291,12 @@ void *taosCacheAcquireByData(SCacheObj *pCacheObj, void *data) { SCacheDataNode *ptNode = (SCacheDataNode *)((char *)data - offset); if (ptNode->signature != (uint64_t)ptNode) { - uError("key: %p the data from cache is invalid", ptNode); + uError("cache:%s, key: %p the data from cache is invalid", pCacheObj->name, ptNode); return NULL; } int32_t ref = T_REF_INC(ptNode); - uError("cache:%s, data: %p acquired by data in cache, refcnt:%d", pCacheObj->name, ptNode->data, ref); + uDebug("cache:%s, data: %p acquired by data in cache, refcnt:%d", pCacheObj->name, ptNode->data, ref); // the data if referenced by at least one object, so the reference count must be greater than the value of 2. assert(ref >= 2); @@ -311,7 +310,7 @@ void *taosCacheTransfer(SCacheObj *pCacheObj, void **data) { SCacheDataNode *ptNode = (SCacheDataNode *)((char *)(*data) - offset); if (ptNode->signature != (uint64_t)ptNode) { - uError("key: %p the data from cache is invalid", ptNode); + uError("cache:%s, key: %p the data from cache is invalid", pCacheObj->name, ptNode); return NULL; } @@ -345,7 +344,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { if (pCacheObj->extendLifespan && (!inTrashCan) && (!_remove)) { atomic_store_64(&pNode->expireTime, pNode->lifespan + taosGetTimestampMs()); - uError("cache:%s data:%p extend expire time: %"PRId64, pCacheObj->name, pNode->data, pNode->expireTime); + uDebug("cache:%s data:%p extend expire time: %"PRId64, pCacheObj->name, pNode->data, pNode->expireTime); } if (_remove) { @@ -354,7 +353,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { char* d = pNode->data; int32_t ref = T_REF_VAL_GET(pNode); - uError("cache:%s, key:%p, %p is released, refcnt:%d, intrash:%d", pCacheObj->name, key, d, ref - 1, inTrashCan); + uError("cache:%s, key:%p, %p is released, refcnt:%d, in trashcan:%d", pCacheObj->name, key, d, ref - 1, inTrashCan); /* * If it is not referenced by other users, remove it immediately. Otherwise move this node to trashcan wait for all users @@ -432,7 +431,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { char* p = pNode->data; int32_t ref = T_REF_DEC(pNode); - uError("cache:%s, key:%p, %p released, refcnt:%d, data in trashcan:%d", pCacheObj->name, key, p, ref, inTrashCan); + uDebug("cache:%s, key:%p, %p released, refcnt:%d, data in trashcan:%d", pCacheObj->name, key, p, ref, inTrashCan); } } @@ -524,7 +523,7 @@ void taosAddToTrash(SCacheObj *pCacheObj, SCacheDataNode *pNode) { pCacheObj->numOfElemsInTrash++; __cache_unlock(pCacheObj); - uError("cache:%s key:%p, %p move to trash, numOfElem in trash:%d", pCacheObj->name, pNode->key, pNode->data, + uDebug("cache:%s key:%p, %p move to trash, numOfElem in trash:%d", pCacheObj->name, pNode->key, pNode->data, pCacheObj->numOfElemsInTrash); } @@ -533,7 +532,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) { if (pCacheObj->numOfElemsInTrash == 0) { if (pCacheObj->pTrash != NULL) { - uError("key:inconsistency data in cache, numOfElem in trash:%d", pCacheObj->numOfElemsInTrash); + uError("cache:%s, key:inconsistency data in cache, numOfElem in trash:%d", pCacheObj->name, pCacheObj->numOfElemsInTrash); } pCacheObj->pTrash = NULL; @@ -550,7 +549,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) { } if (force || (T_REF_VAL_GET(pElem->pData) == 0)) { - uError("key:%p, %p removed from trash. numOfElem in trash:%d", pElem->pData->key, pElem->pData->data, + uError("cache:%s, key:%p, %p removed from trash. numOfElem in trash:%d", pCacheObj->name, pElem->pData->key, pElem->pData->data, pCacheObj->numOfElemsInTrash - 1); STrashElem *p = pElem; @@ -611,7 +610,7 @@ static void doCacheRefresh(SCacheObj* pCacheObj, int64_t time, __cache_free_fn_t void* taosCacheTimedRefresh(void *handle) { SCacheObj* pCacheObj = handle; if (pCacheObj == NULL) { - uError("object is destroyed. no refresh retry"); + uDebug("object is destroyed. no refresh retry"); return NULL; } @@ -624,7 +623,7 @@ void* taosCacheTimedRefresh(void *handle) { // check if current cache object will be deleted every 500ms. if (pCacheObj->deleting) { - uError("%s refresh threads quit", pCacheObj->name); + uDebug("%s refresh threads quit", pCacheObj->name); break; } From f21200d9f13a79a2ffaa5b0a7ab324f8039d5e9c Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Fri, 4 Sep 2020 14:35:14 +0800 Subject: [PATCH 17/58] remove personalfiles interface. --- snap/snapcraft.yaml | 14 -------------- src/kit/shell/src/shellLinux.c | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 3f5b5f1de0..0ac0764217 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -24,21 +24,12 @@ apps: plugs: - network - system-observe - - historyfile taosdemo: command: usr/bin/taosdemo plugs: - network -plugs: - historyfile: - interface: personal-files - read: - - $HOME/.taos_history - write: - - $HOME/.taos_history - parts: script: plugin: dump @@ -101,8 +92,3 @@ layout: bind: $SNAP_DATA/var/log/taos /etc/taos: bind: $SNAP_DATA/etc/taos - - -hooks: - install: - plugs: [historyfile] diff --git a/src/kit/shell/src/shellLinux.c b/src/kit/shell/src/shellLinux.c index 6c09d5c9d0..69bab44985 100644 --- a/src/kit/shell/src/shellLinux.c +++ b/src/kit/shell/src/shellLinux.c @@ -409,7 +409,7 @@ void set_terminal_mode() { } } -void get_history_path(char *history) { sprintf(history, "%s/%s", getpwuid(getuid())->pw_dir, HISTORY_FILE); } +void get_history_path(char *history) { sprintf(history, "%s/%s", getenv("HOME"), HISTORY_FILE); } void clearScreen(int ecmd_pos, int cursor_pos) { struct winsize w; From 7f56ba6056a936dfd74c6c55ef868b9744c79d4b Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 4 Sep 2020 15:09:04 +0800 Subject: [PATCH 18/58] TD-1027 --- CMakeLists.txt | 1 + cmake/define.inc | 4 ++++ src/tsdb/inc/tsdbMain.h | 20 ++++++++++++++++++++ src/tsdb/src/tsdbScan.c | 24 +++++++++++++++++++++++- 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fee2e548a..946ceb95ab 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,7 @@ ENDIF () SET(TD_ACCOUNT FALSE) SET(TD_ADMIN FALSE) SET(TD_GRANT FALSE) +SET(TD_TSDB_PLUGINS FALSE) SET(TD_COVER FALSE) SET(TD_MEM_CHECK FALSE) diff --git a/cmake/define.inc b/cmake/define.inc index 0a25dd9ee7..6dd604057c 100755 --- a/cmake/define.inc +++ b/cmake/define.inc @@ -13,6 +13,10 @@ IF (TD_GRANT) ADD_DEFINITIONS(-D_GRANT) ENDIF () +IF (TD_TSDB_PLUGINS) + ADD_DEFINITIONS(-D_TSDB_PLUGINS) +ENDIF () + IF (TD_GODLL) ADD_DEFINITIONS(-D_TD_GO_DLL_) ENDIF () diff --git a/src/tsdb/inc/tsdbMain.h b/src/tsdb/inc/tsdbMain.h index ede0b33d01..256b8189f8 100644 --- a/src/tsdb/inc/tsdbMain.h +++ b/src/tsdb/inc/tsdbMain.h @@ -320,6 +320,16 @@ typedef struct { void* compBuffer; // Buffer for temperary compress/decompress purpose } SRWHelper; +// ------------------ tsdbScan.c +typedef struct { + SFileGroup fGroup; + int numOfIdx; + SCompIdx* pCompIdx; + SCompInfo* pCompInfo; + void* pBuf; + FILE* tLogStream; +} STsdbScanHandle; + // Operations // ------------------ tsdbMeta.c #define TSDB_INIT_NTABLES 1024 @@ -552,6 +562,16 @@ STsdbMeta* tsdbGetMeta(TSDB_REPO_T* pRepo); STsdbFileH* tsdbGetFile(TSDB_REPO_T* pRepo); int tsdbCheckCommit(STsdbRepo* pRepo); +// ------------------ tsdbScan.c +int tsdbScanFGroup(STsdbScanHandle* pScanHandle, char* rootDir, int fid); +STsdbScanHandle* tsdbNewScanHandle(); +void tsdbSetScanLogStream(STsdbScanHandle* pScanHandle, FILE* fLogStream); +int tsdbSetAndOpenScanFile(STsdbScanHandle* pScanHandle, char* rootDir, int fid); +int tsdbScanSCompIdx(STsdbScanHandle* pScanHandle); +int tsdbScanSCompBlock(STsdbScanHandle* pScanHandle, int idx); +int tsdbCloseScanFile(STsdbScanHandle* pScanHandle); +void tsdbFreeScanHandle(STsdbScanHandle* pScanHandle); + #ifdef __cplusplus } #endif diff --git a/src/tsdb/src/tsdbScan.c b/src/tsdb/src/tsdbScan.c index 6dea4a4e57..98fe1fd444 100644 --- a/src/tsdb/src/tsdbScan.c +++ b/src/tsdb/src/tsdbScan.c @@ -11,4 +11,26 @@ * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . - */ \ No newline at end of file + */ + +#include "tsdbMain.h" + +#ifndef _TSDB_PLUGINS + +int tsdbScanFGroup(STsdbScanHandle* pScanHandle, char* rootDir, int fid) { return 0; } + +STsdbScanHandle* tsdbNewScanHandle() { return NULL; } + +void tsdbSetScanLogStream(STsdbScanHandle* pScanHandle, FILE* fLogStream) {} + +int tsdbSetAndOpenScanFile(STsdbScanHandle* pScanHandle, char* rootDir, int fid) { return 0 } + +int tsdbScanSCompIdx(STsdbScanHandle* pScanHandle) { return 0; } + +int tsdbScanSCompBlock(STsdbScanHandle* pScanHandle, int idx) { return 0; } + +int tsdbCloseScanFile(STsdbScanHandle* pScanHandle) { return 0; } + +void tsdbFreeScanHandle(STsdbScanHandle* pScanHandle) {} + +#endif \ No newline at end of file From 10621dafd8f657f5c72bb7b340f12135eaa79a84 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 4 Sep 2020 16:06:28 +0800 Subject: [PATCH 19/58] TD-1027 --- src/inc/tsdb.h | 5 +++++ src/tsdb/src/tsdbFile.c | 1 + src/tsdb/src/tsdbMain.c | 7 ++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/inc/tsdb.h b/src/inc/tsdb.h index be73d8d383..85f9b3bdc7 100644 --- a/src/inc/tsdb.h +++ b/src/inc/tsdb.h @@ -38,6 +38,10 @@ extern "C" { #define TSDB_STATUS_COMMIT_START 1 #define TSDB_STATUS_COMMIT_OVER 2 +// TSDB STATE DEFINITION +#define TSDB_STATE_OK 0x0 +#define TSDB_STATE_BAD_FILE 0x1 + // --------- TSDB APPLICATION HANDLE DEFINITION typedef struct { void *appH; @@ -80,6 +84,7 @@ int32_t tsdbDropRepo(char *rootDir); TSDB_REPO_T *tsdbOpenRepo(char *rootDir, STsdbAppH *pAppH); void tsdbCloseRepo(TSDB_REPO_T *repo, int toCommit); int32_t tsdbConfigRepo(TSDB_REPO_T *repo, STsdbCfg *pCfg); +int tsdbGetState(TSDB_REPO_T *repo); // --------- TSDB TABLE DEFINITION typedef struct { diff --git a/src/tsdb/src/tsdbFile.c b/src/tsdb/src/tsdbFile.c index 1009a61e86..930c64c030 100644 --- a/src/tsdb/src/tsdbFile.c +++ b/src/tsdb/src/tsdbFile.c @@ -542,6 +542,7 @@ static void tsdbInitFileGroup(SFileGroup *pFGroup, STsdbRepo *pRepo) { memset(&pFGroup->files[type].info, 0, sizeof(STsdbFileInfo)); pFGroup->files[type].info.magic = TSDB_FILE_INIT_MAGIC; pFGroup->state = 1; + pRepo->state = TSDB_STATE_BAD_FILE; terrno = TSDB_CODE_TDB_FILE_CORRUPTED; } } diff --git a/src/tsdb/src/tsdbMain.c b/src/tsdb/src/tsdbMain.c index 294df10edb..a1e6376304 100644 --- a/src/tsdb/src/tsdbMain.c +++ b/src/tsdb/src/tsdbMain.c @@ -142,7 +142,6 @@ TSDB_REPO_T *tsdbOpenRepo(char *rootDir, STsdbAppH *pAppH) { } tsdbStartStream(pRepo); - // pRepo->state = TSDB_REPO_STATE_ACTIVE; tsdbDebug("vgId:%d open tsdb repository succeed!", REPO_ID(pRepo)); @@ -341,6 +340,10 @@ void tsdbReportStat(void *repo, int64_t *totalPoints, int64_t *totalStorage, int *compStorage = pRepo->stat.compStorage; } +int tsdbGetState(TSDB_REPO_T *repo) { + return ((STsdbRepo *)repo)->state; +} + // ----------------- INTERNAL FUNCTIONS ----------------- char *tsdbGetMetaFileName(char *rootDir) { int tlen = (int)(strlen(rootDir) + strlen(TSDB_META_FILE_NAME) + 2); @@ -661,6 +664,8 @@ static STsdbRepo *tsdbNewRepo(char *rootDir, STsdbAppH *pAppH, STsdbCfg *pCfg) { goto _err; } + pRepo->state = TSDB_STATE_OK; + int code = pthread_mutex_init(&pRepo->mutex, NULL); if (code != 0) { terrno = TAOS_SYSTEM_ERROR(code); From 3bdde80638965e9a99522c35ec354fd434ab2923 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 4 Sep 2020 16:35:32 +0800 Subject: [PATCH 20/58] fix compile error --- src/tsdb/src/tsdbScan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tsdb/src/tsdbScan.c b/src/tsdb/src/tsdbScan.c index 98fe1fd444..91f6787874 100644 --- a/src/tsdb/src/tsdbScan.c +++ b/src/tsdb/src/tsdbScan.c @@ -23,7 +23,7 @@ STsdbScanHandle* tsdbNewScanHandle() { return NULL; } void tsdbSetScanLogStream(STsdbScanHandle* pScanHandle, FILE* fLogStream) {} -int tsdbSetAndOpenScanFile(STsdbScanHandle* pScanHandle, char* rootDir, int fid) { return 0 } +int tsdbSetAndOpenScanFile(STsdbScanHandle* pScanHandle, char* rootDir, int fid) { return 0; } int tsdbScanSCompIdx(STsdbScanHandle* pScanHandle) { return 0; } From 4ae4d16043a9a7fc77dfbeedf59cf28235315337 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Fri, 4 Sep 2020 08:36:29 +0000 Subject: [PATCH 21/58] TD-1323 allow first and second not to configure port --- src/common/src/tglobal.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index b232b41296..4690b6654f 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -1284,6 +1284,9 @@ void taosInitGlobalCfg() { } bool taosCheckGlobalCfg() { + char fqdn[TSDB_EP_LEN]; + uint16_t port; + if (debugFlag & DEBUG_TRACE || debugFlag & DEBUG_DEBUG || debugFlag & DEBUG_DUMP) { taosSetAllDebugFlag(); } @@ -1297,12 +1300,18 @@ bool taosCheckGlobalCfg() { if (tsFirst[0] == 0) { strcpy(tsFirst, tsLocalEp); + } else { + taosGetFqdnPortFromEp(tsFirst, fqdn, &port); + snprintf(tsFirst, sizeof(tsFirst), "%s:%d", fqdn, port); } if (tsSecond[0] == 0) { strcpy(tsSecond, tsLocalEp); + } else { + taosGetFqdnPortFromEp(tsSecond, fqdn, &port); + snprintf(tsSecond, sizeof(tsSecond), "%s:%d", fqdn, port); } - + taosGetSystemInfo(); tsSetLocale(); From 0a7eca2cdf7e9f37e8014277169f954a38202c02 Mon Sep 17 00:00:00 2001 From: zyyang Date: Fri, 4 Sep 2020 16:37:41 +0800 Subject: [PATCH 22/58] [TD-1266]update the nodejs test case --- tests/examples/nodejs/node-example-raw.js | 2 +- tests/examples/nodejs/node-example.js | 44 ++++++++++++++++++----- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/tests/examples/nodejs/node-example-raw.js b/tests/examples/nodejs/node-example-raw.js index a644051ce1..058a50c4c3 100644 --- a/tests/examples/nodejs/node-example-raw.js +++ b/tests/examples/nodejs/node-example-raw.js @@ -26,7 +26,7 @@ var c1 = conn.cursor(); // c1.execute(query) will execute the query // Let's create a database named db try { - c1.execute('create database db;'); + c1.execute('create database if not exists db;'); } catch(err) { conn.close(); diff --git a/tests/examples/nodejs/node-example.js b/tests/examples/nodejs/node-example.js index ce77af9d7c..bfdd9e49a0 100644 --- a/tests/examples/nodejs/node-example.js +++ b/tests/examples/nodejs/node-example.js @@ -22,8 +22,9 @@ var c1 = conn.cursor(); // c1.query(query) will return a TaosQuery object, of which then we can execute. The execute function then returns a promise // Let's create a database named db try { - var query = c1.query('create database db;'); - query.execute(); + c1.execute('create database if not exists db;'); + //var query = c1.query('create database if not exists db;'); + //query.execute(); } catch(err) { conn.close(); @@ -71,6 +72,28 @@ catch (err) { throw err; } + +Date.prototype.Format = function(fmt){ + var o = { + 'M+': this.getMonth() + 1, + 'd+': this.getDate(), + 'H+': this.getHours(), + 'm+': this.getMinutes(), + 's+': this.getSeconds(), + 'S+': this.getMilliseconds() + }; + if (/(y+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)); + } + for (var k in o) { + if (new RegExp('(' + k + ')').test(fmt)) { + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(String(o[k]).length))); + } + } + return fmt; +} + + // Let's try to insert some random generated data to test with // We will use the bind function of the TaosQuery object to easily bind values to question marks in the query // For Timestamps, a normal Datetime object or TaosTimestamp or milliseconds can be passed in through the bind function @@ -79,17 +102,21 @@ let interval = 1000; try { for (let i = 0; i < 1000; i++) { stime.setMilliseconds(stime.getMilliseconds() + interval); + + //console.log(stime.Format('yyyy-MM-dd HH:mm:ss.SSS')); + let insertData = [stime, parseInt(Math.random()*100), parseInt(Math.random()*300), parseFloat(Math.random()*10 + 30), - "\"random note!\""]; + "Note"]; //c1.execute('insert into db.weather values(' + insertData.join(',') + ' );'); - var query = c1.query('insert into db.weather values(?, ?, ?, ?, ?);').bind(insertData); - query.execute(); + + //var query = c1.query('insert into db.weather values(?, ?, ?, ?, ?);').bind(insertData); + //query.execute(); + c1.execute('insert into db.weather values(\"'+stime.Format('yyyy-MM-dd HH:mm:ss.SSS')+'\",'+parseInt(Math.random() * 100)+','+parseInt(Math.random() * 300)+','+parseFloat(Math.random()*10 + 30)+',"Note");'); } -} -catch (err) { +}catch (err) { conn.close(); throw err; } @@ -98,7 +125,8 @@ catch (err) { var retrievedData; try { c1.query('select * from db.weather limit 5 offset 100;', true).then(function(result){ - result.pretty(); + //result.pretty(); + console.log('=========>'+JSON.stringify(result)); // Neat! }); From 083adfb4aedafc469a1cf8d758cbfd102dde0e24 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Fri, 4 Sep 2020 08:46:08 +0000 Subject: [PATCH 23/58] TD-1303 --- src/mnode/src/mnodeProfile.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/mnode/src/mnodeProfile.c b/src/mnode/src/mnodeProfile.c index 06f992c26a..26f38dde03 100644 --- a/src/mnode/src/mnodeProfile.c +++ b/src/mnode/src/mnodeProfile.c @@ -98,8 +98,10 @@ SConnObj *mnodeCreateConn(char *user, uint32_t ip, uint16_t port) { .connId = connId, .stime = taosGetTimestampMs() }; + tstrncpy(connObj.user, user, sizeof(connObj.user)); - + connObj.lastAccess = connObj.stime; + SConnObj *pConn = taosCachePut(tsMnodeConnCache, &connId, sizeof(int32_t), &connObj, sizeof(connObj), CONN_KEEP_TIME * 1000); mDebug("connId:%d, is created, user:%s ip:%s:%u", connId, user, taosIpStr(ip), port); @@ -244,6 +246,7 @@ static int32_t mnodeRetrieveConns(SShowObj *pShow, char *data, int32_t rows, voi cols++; pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; + if (pConnObj->lastAccess < pConnObj->stime) pConnObj->lastAccess = pConnObj->stime; *(int64_t *)pWrite = pConnObj->lastAccess; cols++; From 2932bc24bbf2c1fd280b4edf6616581249fc8250 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Fri, 4 Sep 2020 09:36:54 +0000 Subject: [PATCH 24/58] TD-1224 update the uid generate algorithm --- src/mnode/src/mnodeTable.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mnode/src/mnodeTable.c b/src/mnode/src/mnodeTable.c index 03b1399ea7..4400927e9b 100644 --- a/src/mnode/src/mnodeTable.c +++ b/src/mnode/src/mnodeTable.c @@ -1711,14 +1711,20 @@ static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) { mnodeDestroyChildTable(pTable); return TSDB_CODE_MND_INVALID_TABLE_NAME; } - + pTable->suid = pMsg->pSTable->uid; - pTable->uid = (((uint64_t)pTable->vgId) << 40) + ((((uint64_t)pTable->sid) & ((1ul << 24) - 1ul)) << 16) + - (sdbGetVersion() & ((1ul << 16) - 1ul)); + pTable->uid = (((uint64_t)pTable->vgId) << 48) + ((((uint64_t)pTable->sid) & ((1ul << 24) - 1ul)) << 24) + + ((sdbGetVersion() & ((1ul << 16) - 1ul)) << 8) + (taosRand() & ((1ul << 8) - 1ul)); pTable->superTable = pMsg->pSTable; } else { - pTable->uid = (((uint64_t)pTable->vgId) << 40) + ((((uint64_t)pTable->sid) & ((1ul << 24) - 1ul)) << 16) + - (sdbGetVersion() & ((1ul << 16) - 1ul)); + if (pTable->info.type == TSDB_SUPER_TABLE) { + int64_t us = taosGetTimestampUs(); + pTable->uid = (us << 24) + ((sdbGetVersion() & ((1ul << 16) - 1ul)) << 8) + (taosRand() & ((1ul << 8) - 1ul)); + } else { + pTable->uid = (((uint64_t)pTable->vgId) << 48) + ((((uint64_t)pTable->sid) & ((1ul << 24) - 1ul)) << 24) + + ((sdbGetVersion() & ((1ul << 16) - 1ul)) << 8) + (taosRand() & ((1ul << 8) - 1ul)); + } + pTable->sversion = 0; pTable->numOfColumns = htons(pCreate->numOfColumns); pTable->sqlLen = htons(pCreate->sqlLen); From 9bf2f5c29a57648b5ecf773f5835669afbaff288 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 4 Sep 2020 17:48:55 +0800 Subject: [PATCH 25/58] fix compile problem --- src/tsdb/src/tsdbFile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tsdb/src/tsdbFile.c b/src/tsdb/src/tsdbFile.c index 930c64c030..51c3a625e8 100644 --- a/src/tsdb/src/tsdbFile.c +++ b/src/tsdb/src/tsdbFile.c @@ -455,7 +455,7 @@ int tsdbLoadFileHeader(SFile *pFile, uint32_t *version) { void tsdbGetFileInfoImpl(char *fname, uint32_t *magic, int64_t *size) { uint32_t version = 0; - SFile file = {0}; + SFile file; SFile * pFile = &file; strncpy(pFile->fname, fname, TSDB_FILENAME_LEN); From 49f9d2787721dbe74e59516b2f6c6d3d20bd648b Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Fri, 4 Sep 2020 17:52:38 +0800 Subject: [PATCH 26/58] TD-1331: update md for alter database --- documentation20/webdocs/markdowndocs/TAOS SQL-ch.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md b/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md index b0f8ed276d..29f6e5ee57 100644 --- a/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md +++ b/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md @@ -82,13 +82,23 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic ``` 删除数据库。所包含的全部数据表将被删除,谨慎使用 +- **修改数据库参数** + ```mysql + ALTER DATABASE db_name COMP 2; + ``` + 修改数据库文件压缩标志位,有效数字为0,1,2. 0表示不压缩,1表示一阶段压缩,2表示两阶段压缩。修改后可以使用show databases命令查看是否修改成功 + + ```mysql + ALTER DATABASE db_name REPLICA 2; + ``` + 修改数据库副本数,有效副本数为1到3。在集群中使用,副本数必须小于dnode的数目。修改后可以使用show databases命令查看是否修改成功 + - **显示系统所有数据库** ```mysql SHOW DATABASES; ``` - ## 表管理 - **创建数据表** From 379d574d7d51dbdbd3fa11d94ef92d0d789d6336 Mon Sep 17 00:00:00 2001 From: Bomin Zhang Date: Fri, 4 Sep 2020 18:29:51 +0800 Subject: [PATCH 27/58] fix TD-1334: select count(*) returns wrong result github #3334 --- src/tsdb/src/tsdbRead.c | 59 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/src/tsdb/src/tsdbRead.c b/src/tsdb/src/tsdbRead.c index ac7eba72b2..7e10e7c6d6 100644 --- a/src/tsdb/src/tsdbRead.c +++ b/src/tsdb/src/tsdbRead.c @@ -734,6 +734,10 @@ static int32_t doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* p return TSDB_CODE_SUCCESS; } +static int32_t copyDataFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end); +static void moveDataToFront(STsdbQueryHandle* pQueryHandle, int32_t numOfRows, int32_t numOfCols); +static void doCheckGeneratedBlockRange(STsdbQueryHandle* pQueryHandle); + static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlock, STableCheckInfo* pCheckInfo){ SQueryFilePos* cur = &pQueryHandle->cur; SDataBlockInfo binfo = GET_FILE_DATA_BLOCK_INFO(pCheckInfo, pBlock); @@ -745,7 +749,6 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc TSKEY key = (row != NULL)? dataRowKey(row):TSKEY_INITIAL_VAL; tsdbDebug("%p key in mem:%"PRId64", %p", pQueryHandle, key, pQueryHandle->qinfo); - cur->pos = ASCENDING_TRAVERSE(pQueryHandle->order)? 0:(binfo.rows-1); if ((ASCENDING_TRAVERSE(pQueryHandle->order) && (key != TSKEY_INITIAL_VAL && key <= binfo.window.ekey)) || (!ASCENDING_TRAVERSE(pQueryHandle->order) && (key != TSKEY_INITIAL_VAL && key >= binfo.window.skey))) { @@ -784,14 +787,54 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc * * Here the buffer is not enough, so only part of file block can be loaded into memory buffer */ - assert(pQueryHandle->outputCapacity >= binfo.rows); - pQueryHandle->realNumOfRows = binfo.rows; + assert(pQueryHandle->outputCapacity >= binfo.rows); + + if ((cur->pos == 0 && ASCENDING_TRAVERSE(pQueryHandle->order)) || + (cur->pos == (binfo.rows - 1) && (!ASCENDING_TRAVERSE(pQueryHandle->order)))) { + pQueryHandle->realNumOfRows = binfo.rows; + + cur->rows = binfo.rows; + cur->win = binfo.window; + cur->mixBlock = false; + cur->lastKey = ASCENDING_TRAVERSE(pQueryHandle->order)? (binfo.window.ekey + 1): (binfo.window.skey -1); + } else { + + SDataCols* pCols = pQueryHandle->rhelper.pDataCols[0]; + TSKEY* tsArray = pCols->cols[0].pData; + + assert(pCols->cols[0].type == TSDB_DATA_TYPE_TIMESTAMP && pCols->cols[0].colId == PRIMARYKEY_TIMESTAMP_COL_INDEX && + cur->pos >= 0 && cur->pos < pBlock->numOfRows && + (tsArray[0] == binfo.window.skey && tsArray[binfo.rows - 1] == binfo.window.ekey)); + + if (ASCENDING_TRAVERSE(pQueryHandle->order)) { + cur->rows = binfo.rows - cur->pos; + + cur->win.skey = tsArray[cur->pos]; + cur->win.ekey = binfo.window.ekey; + + cur->lastKey = binfo.window.ekey + 1; + int32_t numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, 0, cur->pos, binfo.rows-1); + assert(numOfRows == cur->rows); + } else { + cur->rows = cur->pos + 1; + + cur->win.skey = binfo.window.skey; + cur->win.ekey = tsArray[cur->pos]; + + cur->lastKey = binfo.window.skey - 1; + int32_t numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, 0, 0, cur->pos); + assert(numOfRows == cur->rows); + + int32_t numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pQueryHandle)); + moveDataToFront(pQueryHandle, numOfRows, numOfCols); + doCheckGeneratedBlockRange(pQueryHandle); + } + + pQueryHandle->realNumOfRows = cur->rows; + cur->mixBlock = true; + } - cur->rows = binfo.rows; - cur->win = binfo.window; - cur->mixBlock = false; cur->blockCompleted = true; - cur->lastKey = binfo.window.ekey + (ASCENDING_TRAVERSE(pQueryHandle->order)? 1:-1); pCheckInfo->lastKey = cur->lastKey; } @@ -823,6 +866,7 @@ static int32_t loadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBl assert(pCheckInfo->lastKey <= pBlock->keyLast); doMergeTwoLevelData(pQueryHandle, pCheckInfo, pBlock); } else { // the whole block is loaded in to buffer + cur->pos = ASCENDING_TRAVERSE(pQueryHandle->order)? 0:(pBlock->numOfRows-1); code = handleDataMergeIfNeeded(pQueryHandle, pBlock, pCheckInfo); } } else { //desc order, query ended in current block @@ -842,6 +886,7 @@ static int32_t loadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBl assert(pCheckInfo->lastKey >= pBlock->keyFirst); doMergeTwoLevelData(pQueryHandle, pCheckInfo, pBlock); } else { + cur->pos = ASCENDING_TRAVERSE(pQueryHandle->order)? 0:(pBlock->numOfRows-1); code = handleDataMergeIfNeeded(pQueryHandle, pBlock, pCheckInfo); } } From bcee3a4ae96a64e31cdc78bcd662638ea1d2c857 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 4 Sep 2020 22:26:49 +0800 Subject: [PATCH 28/58] [td-1334] refactor codes. --- src/tsdb/src/tsdbRead.c | 125 +++++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 67 deletions(-) diff --git a/src/tsdb/src/tsdbRead.c b/src/tsdb/src/tsdbRead.c index 7e10e7c6d6..462d540c51 100644 --- a/src/tsdb/src/tsdbRead.c +++ b/src/tsdb/src/tsdbRead.c @@ -737,6 +737,7 @@ static int32_t doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* p static int32_t copyDataFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end); static void moveDataToFront(STsdbQueryHandle* pQueryHandle, int32_t numOfRows, int32_t numOfCols); static void doCheckGeneratedBlockRange(STsdbQueryHandle* pQueryHandle); +static void copyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SDataBlockInfo* pBlockInfo, int32_t endPos); static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlock, STableCheckInfo* pCheckInfo){ SQueryFilePos* cur = &pQueryHandle->cur; @@ -746,10 +747,11 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc /*bool hasData = */ initTableMemIterator(pQueryHandle, pCheckInfo); SDataRow row = getSDataRowInTableMem(pCheckInfo, pQueryHandle->order); + assert(cur->pos >= 0 && cur->pos <= binfo.rows); + TSKEY key = (row != NULL)? dataRowKey(row):TSKEY_INITIAL_VAL; tsdbDebug("%p key in mem:%"PRId64", %p", pQueryHandle, key, pQueryHandle->qinfo); - if ((ASCENDING_TRAVERSE(pQueryHandle->order) && (key != TSKEY_INITIAL_VAL && key <= binfo.window.ekey)) || (!ASCENDING_TRAVERSE(pQueryHandle->order) && (key != TSKEY_INITIAL_VAL && key >= binfo.window.skey))) { @@ -787,7 +789,7 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc * * Here the buffer is not enough, so only part of file block can be loaded into memory buffer */ - assert(pQueryHandle->outputCapacity >= binfo.rows); + assert(pQueryHandle->outputCapacity >= binfo.rows); if ((cur->pos == 0 && ASCENDING_TRAVERSE(pQueryHandle->order)) || (cur->pos == (binfo.rows - 1) && (!ASCENDING_TRAVERSE(pQueryHandle->order)))) { @@ -797,45 +799,15 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc cur->win = binfo.window; cur->mixBlock = false; cur->lastKey = ASCENDING_TRAVERSE(pQueryHandle->order)? (binfo.window.ekey + 1): (binfo.window.skey -1); - } else { - - SDataCols* pCols = pQueryHandle->rhelper.pDataCols[0]; - TSKEY* tsArray = pCols->cols[0].pData; - - assert(pCols->cols[0].type == TSDB_DATA_TYPE_TIMESTAMP && pCols->cols[0].colId == PRIMARYKEY_TIMESTAMP_COL_INDEX && - cur->pos >= 0 && cur->pos < pBlock->numOfRows && - (tsArray[0] == binfo.window.skey && tsArray[binfo.rows - 1] == binfo.window.ekey)); - - if (ASCENDING_TRAVERSE(pQueryHandle->order)) { - cur->rows = binfo.rows - cur->pos; - - cur->win.skey = tsArray[cur->pos]; - cur->win.ekey = binfo.window.ekey; - - cur->lastKey = binfo.window.ekey + 1; - int32_t numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, 0, cur->pos, binfo.rows-1); - assert(numOfRows == cur->rows); - } else { - cur->rows = cur->pos + 1; - - cur->win.skey = binfo.window.skey; - cur->win.ekey = tsArray[cur->pos]; - - cur->lastKey = binfo.window.skey - 1; - int32_t numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, 0, 0, cur->pos); - assert(numOfRows == cur->rows); - - int32_t numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pQueryHandle)); - moveDataToFront(pQueryHandle, numOfRows, numOfCols); - doCheckGeneratedBlockRange(pQueryHandle); - } - - pQueryHandle->realNumOfRows = cur->rows; + } else { // partially copy to dest buffer + int32_t endPos = ASCENDING_TRAVERSE(pQueryHandle->order)? (binfo.rows - 1): 0; + copyRowsFromFileBlock(pQueryHandle, pCheckInfo, &binfo, endPos); cur->mixBlock = true; } - cur->blockCompleted = true; - pCheckInfo->lastKey = cur->lastKey; + assert(cur->blockCompleted); + tsdbDebug("create data block from remain file block, brange:%"PRId64"-%"PRId64", rows:%d, lastKey:%"PRId64", %p", + cur->win.skey, cur->win.ekey, cur->rows, cur->lastKey, pQueryHandle); } return code; @@ -866,7 +838,7 @@ static int32_t loadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBl assert(pCheckInfo->lastKey <= pBlock->keyLast); doMergeTwoLevelData(pQueryHandle, pCheckInfo, pBlock); } else { // the whole block is loaded in to buffer - cur->pos = ASCENDING_TRAVERSE(pQueryHandle->order)? 0:(pBlock->numOfRows-1); + cur->pos = ASCENDING_TRAVERSE(pQueryHandle->order)? 0:(pBlock->numOfRows - 1); code = handleDataMergeIfNeeded(pQueryHandle, pBlock, pCheckInfo); } } else { //desc order, query ended in current block @@ -957,7 +929,7 @@ static int doBinarySearchKey(char* pValue, int num, TSKEY key, int order) { return midPos; } -static int32_t copyDataFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end) { +int32_t copyDataFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end) { char* pData = NULL; int32_t step = ASCENDING_TRAVERSE(pQueryHandle->order)? 1 : -1; @@ -1182,6 +1154,49 @@ static void doCheckGeneratedBlockRange(STsdbQueryHandle* pQueryHandle) { } } +static void copyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SDataBlockInfo* pBlockInfo, int32_t endPos) { + SQueryFilePos* cur = &pQueryHandle->cur; + + SDataCols* pCols = pQueryHandle->rhelper.pDataCols[0]; + TSKEY* tsArray = pCols->cols[0].pData; + + int32_t step = ASCENDING_TRAVERSE(pQueryHandle->order)? 1:-1; + int32_t numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pQueryHandle)); + + int32_t pos = cur->pos; + + int32_t start = cur->pos; + int32_t end = endPos; + + if (!ASCENDING_TRAVERSE(pQueryHandle->order)) { + assert(start >= end); + SWAP(start, end, int32_t); + } + + int32_t numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, 0, start, end); + + // the time window should always be ascending order: skey <= ekey + cur->win = (STimeWindow) {.skey = tsArray[start], .ekey = tsArray[end]}; + cur->mixBlock = (start == 0 && end == pBlockInfo->rows - 1); + cur->lastKey = tsArray[endPos] + step; + + pos += endPos + step; + + cur->blockCompleted = + (((pos >= endPos || cur->lastKey > pQueryHandle->window.ekey) && ASCENDING_TRAVERSE(pQueryHandle->order)) || + ((pos <= endPos || cur->lastKey < pQueryHandle->window.ekey) && !ASCENDING_TRAVERSE(pQueryHandle->order))); + + // if the buffer is not full in case of descending order query, move the data in the front of the buffer + moveDataToFront(pQueryHandle, numOfRows, numOfCols); + updateInfoAfterMerge(pQueryHandle, pCheckInfo, numOfRows, pos); + doCheckGeneratedBlockRange(pQueryHandle); + + tsdbDebug("%p uid:%" PRIu64",tid:%d data block created, mixblock:%d, brange:%"PRIu64"-%"PRIu64" rows:%d, %p", + pQueryHandle, pCheckInfo->tableId.uid, pCheckInfo->tableId.tid, cur->mixBlock, cur->win.skey, + cur->win.ekey, cur->rows, pQueryHandle->qinfo); +} + + // only return the qualified data to client in terms of query time window, data rows in the same block but do not // be included in the query time window will be discarded static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SCompBlock* pBlock) { @@ -1224,37 +1239,13 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* // compared with the data from in-memory buffer, to generate the correct timestamp array list int32_t numOfRows = 0; + int32_t pos = cur->pos; cur->win = TSWINDOW_INITIALIZER; // no data in buffer, load data from file directly if (pCheckInfo->iiter == NULL && pCheckInfo->iter == NULL) { - int32_t start = cur->pos; - int32_t end = endPos; - - if (!ASCENDING_TRAVERSE(pQueryHandle->order)) { - SWAP(start, end, int32_t); - } - - numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, numOfRows, start, end); - - // the time window should always be right order: skey <= ekey - cur->win = (STimeWindow) {.skey = tsArray[start], .ekey = tsArray[end]}; - cur->lastKey = tsArray[endPos]; - pos += (end - start + 1) * step; - - cur->blockCompleted = - (((pos >= endPos || cur->lastKey > pQueryHandle->window.ekey) && ASCENDING_TRAVERSE(pQueryHandle->order)) || - ((pos <= endPos || cur->lastKey < pQueryHandle->window.ekey) && !ASCENDING_TRAVERSE(pQueryHandle->order))); - - // if the buffer is not full in case of descending order query, move the data in the front of the buffer - moveDataToFront(pQueryHandle, numOfRows, numOfCols); - updateInfoAfterMerge(pQueryHandle, pCheckInfo, numOfRows, pos); - doCheckGeneratedBlockRange(pQueryHandle); - - tsdbDebug("%p uid:%" PRIu64",tid:%d data block created, mixblock:%d, brange:%"PRIu64"-%"PRIu64" rows:%d, %p", - pQueryHandle, pCheckInfo->tableId.uid, pCheckInfo->tableId.tid, cur->mixBlock, cur->win.skey, - cur->win.ekey, cur->rows, pQueryHandle->qinfo); + copyRowsFromFileBlock(pQueryHandle, pCheckInfo, &blockInfo, endPos); return; } else if (pCheckInfo->iter != NULL || pCheckInfo->iiter != NULL) { SSkipListNode* node = NULL; @@ -1703,7 +1694,7 @@ static int32_t getDataBlocksInFiles(STsdbQueryHandle* pQueryHandle, bool* exists return loadFileDataBlock(pQueryHandle, pNext->compBlock, pNext->pTableCheckInfo, exists); } } else { - tsdbDebug("%p continue in current data block, index:%d, %p", pQueryHandle, cur->slot, pQueryHandle->qinfo); + tsdbDebug("%p continue in current data block, index:%d, pos:%d, %p", pQueryHandle, cur->slot, cur->pos, pQueryHandle->qinfo); int32_t code = handleDataMergeIfNeeded(pQueryHandle, pBlockInfo->compBlock, pCheckInfo); *exists = pQueryHandle->realNumOfRows > 0; From 10af6ae3501a887f2da7c10fb4edaa779bb6c1c8 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 4 Sep 2020 22:31:12 +0800 Subject: [PATCH 29/58] [td-225] --- src/util/src/tcache.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index 08b5d473a3..1bc539f328 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -109,7 +109,7 @@ static FORCE_INLINE void taosCacheReleaseNode(SCacheObj *pCacheObj, SCacheDataNo static FORCE_INLINE void doRemoveElemInTrashcan(SCacheObj* pCacheObj, STrashElem *pElem) { if (pElem->pData->signature != (uint64_t) pElem->pData) { - uError("key:sig:0x%" PRIx64 " %p data has been released, ignore", pElem->pData->signature, pElem->pData); + uWarn("key:sig:0x%" PRIx64 " %p data has been released, ignore", pElem->pData->signature, pElem->pData); return; } @@ -204,7 +204,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v int32_t succ = taosHashPut(pCacheObj->pHashTable, key, keyLen, &pNode1, sizeof(void *)); if (succ == 0) { atomic_add_fetch_64(&pCacheObj->totalSize, pNode1->size); - uError("cache:%s, key:%p, %p added into cache, added:%" PRIu64 ", expire:%" PRIu64 + uDebug("cache:%s, key:%p, %p added into cache, added:%" PRIu64 ", expire:%" PRIu64 ", totalNum:%d totalSize:%" PRId64 "bytes size:%" PRId64 "bytes", pCacheObj->name, key, pNode1->data, pNode1->addedTime, pNode1->expireTime, (int32_t)taosHashGetSize(pCacheObj->pHashTable), pCacheObj->totalSize, (int64_t)dataSize); @@ -233,7 +233,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v if (ret == 0) { atomic_add_fetch_64(&pCacheObj->totalSize, pNode1->size); - uError("cache:%s, key:%p, %p added into cache, added:%" PRIu64 ", expire:%" PRIu64 + uDebug("cache:%s, key:%p, %p added into cache, added:%" PRIu64 ", expire:%" PRIu64 ", totalNum:%d totalSize:%" PRId64 "bytes size:%" PRId64 "bytes", pCacheObj->name, key, pNode1->data, pNode1->addedTime, pNode1->expireTime, (int32_t)taosHashGetSize(pCacheObj->pHashTable), pCacheObj->totalSize, (int64_t)dataSize); @@ -353,7 +353,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { char* d = pNode->data; int32_t ref = T_REF_VAL_GET(pNode); - uError("cache:%s, key:%p, %p is released, refcnt:%d, in trashcan:%d", pCacheObj->name, key, d, ref - 1, inTrashCan); + uDebug("cache:%s, key:%p, %p is released, refcnt:%d, in trashcan:%d", pCacheObj->name, key, d, ref - 1, inTrashCan); /* * If it is not referenced by other users, remove it immediately. Otherwise move this node to trashcan wait for all users @@ -393,13 +393,13 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { // note that the remove operation can be executed only once. if (ret == 0) { if (p != pNode) { - uError( "cache:%s, key:%p, successfully removed a new entry:%p, refcnt:%d, prev entry:%p has been removed by " + uDebug( "cache:%s, key:%p, successfully removed a new entry:%p, refcnt:%d, prev entry:%p has been removed by " "others already", pCacheObj->name, pNode->key, p->data, T_REF_VAL_GET(p), pNode->data); assert(p->pTNodeHeader == NULL); taosAddToTrash(pCacheObj, p); } else { - uError("cache:%s, key:%p, %p successfully removed from hash table, refcnt:%d", pCacheObj->name, pNode->key, + uDebug("cache:%s, key:%p, %p successfully removed from hash table, refcnt:%d", pCacheObj->name, pNode->key, pNode->data, ref); if (ref > 0) { assert(pNode->pTNodeHeader == NULL); @@ -409,7 +409,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { atomic_sub_fetch_64(&pCacheObj->totalSize, pNode->size); int32_t size = (int32_t)taosHashGetSize(pCacheObj->pHashTable); - uError("cache:%s, key:%p, %p is destroyed from cache, size:%dbytes, num:%d size:%" PRId64 "bytes", + uDebug("cache:%s, key:%p, %p is destroyed from cache, size:%dbytes, num:%d size:%" PRId64 "bytes", pCacheObj->name, pNode->key, pNode->data, pNode->size, size, pCacheObj->totalSize); if (pCacheObj->freeFp) { @@ -420,7 +420,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { } } } else { - uError("cache:%s, key:%p, %p has been removed from hash table by other thread already, refcnt:%d", + uDebug("cache:%s, key:%p, %p has been removed from hash table by others already, refcnt:%d", pCacheObj->name, pNode->key, pNode->data, ref); } } @@ -549,7 +549,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) { } if (force || (T_REF_VAL_GET(pElem->pData) == 0)) { - uError("cache:%s, key:%p, %p removed from trash. numOfElem in trash:%d", pCacheObj->name, pElem->pData->key, pElem->pData->data, + uError("cache:%s, key:%p, %p removed from trashcan. numOfElem in trash:%d", pCacheObj->name, pElem->pData->key, pElem->pData->data, pCacheObj->numOfElemsInTrash - 1); STrashElem *p = pElem; From 8795d190096f074b08f9cd4d03d0e816f9c20d01 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 4 Sep 2020 22:47:37 +0800 Subject: [PATCH 30/58] [td-225] --- src/tsdb/src/tsdbRead.c | 33 ++++++++++++++++----------------- src/util/src/tcache.c | 4 ++-- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/tsdb/src/tsdbRead.c b/src/tsdb/src/tsdbRead.c index 462d540c51..60f59e46f7 100644 --- a/src/tsdb/src/tsdbRead.c +++ b/src/tsdb/src/tsdbRead.c @@ -734,10 +734,10 @@ static int32_t doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* p return TSDB_CODE_SUCCESS; } -static int32_t copyDataFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end); +static int32_t doCopyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end); static void moveDataToFront(STsdbQueryHandle* pQueryHandle, int32_t numOfRows, int32_t numOfCols); static void doCheckGeneratedBlockRange(STsdbQueryHandle* pQueryHandle); -static void copyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SDataBlockInfo* pBlockInfo, int32_t endPos); +static void copyAllRemainRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SDataBlockInfo* pBlockInfo, int32_t endPos); static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlock, STableCheckInfo* pCheckInfo){ SQueryFilePos* cur = &pQueryHandle->cur; @@ -801,7 +801,7 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc cur->lastKey = ASCENDING_TRAVERSE(pQueryHandle->order)? (binfo.window.ekey + 1): (binfo.window.skey -1); } else { // partially copy to dest buffer int32_t endPos = ASCENDING_TRAVERSE(pQueryHandle->order)? (binfo.rows - 1): 0; - copyRowsFromFileBlock(pQueryHandle, pCheckInfo, &binfo, endPos); + copyAllRemainRowsFromFileBlock(pQueryHandle, pCheckInfo, &binfo, endPos); cur->mixBlock = true; } @@ -929,7 +929,7 @@ static int doBinarySearchKey(char* pValue, int num, TSKEY key, int order) { return midPos; } -int32_t copyDataFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end) { +int32_t doCopyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end) { char* pData = NULL; int32_t step = ASCENDING_TRAVERSE(pQueryHandle->order)? 1 : -1; @@ -1154,7 +1154,7 @@ static void doCheckGeneratedBlockRange(STsdbQueryHandle* pQueryHandle) { } } -static void copyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SDataBlockInfo* pBlockInfo, int32_t endPos) { +static void copyAllRemainRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SDataBlockInfo* pBlockInfo, int32_t endPos) { SQueryFilePos* cur = &pQueryHandle->cur; SDataCols* pCols = pQueryHandle->rhelper.pDataCols[0]; @@ -1173,21 +1173,20 @@ static void copyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STableCheckInf SWAP(start, end, int32_t); } - int32_t numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, 0, start, end); + assert(pQueryHandle->outputCapacity >= (end - start + 1)); + int32_t numOfRows = doCopyRowsFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, 0, start, end); // the time window should always be ascending order: skey <= ekey cur->win = (STimeWindow) {.skey = tsArray[start], .ekey = tsArray[end]}; - cur->mixBlock = (start == 0 && end == pBlockInfo->rows - 1); + cur->mixBlock = (start > 0 && end < pBlockInfo->rows - 1); cur->lastKey = tsArray[endPos] + step; - - pos += endPos + step; - - cur->blockCompleted = - (((pos >= endPos || cur->lastKey > pQueryHandle->window.ekey) && ASCENDING_TRAVERSE(pQueryHandle->order)) || - ((pos <= endPos || cur->lastKey < pQueryHandle->window.ekey) && !ASCENDING_TRAVERSE(pQueryHandle->order))); + cur->blockCompleted = true; // if the buffer is not full in case of descending order query, move the data in the front of the buffer moveDataToFront(pQueryHandle, numOfRows, numOfCols); + + // The value of pos may be -1 or pBlockInfo->rows, and it is invalid in both cases. + pos = endPos + step; updateInfoAfterMerge(pQueryHandle, pCheckInfo, numOfRows, pos); doCheckGeneratedBlockRange(pQueryHandle); @@ -1245,7 +1244,7 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* // no data in buffer, load data from file directly if (pCheckInfo->iiter == NULL && pCheckInfo->iter == NULL) { - copyRowsFromFileBlock(pQueryHandle, pCheckInfo, &blockInfo, endPos); + copyAllRemainRowsFromFileBlock(pQueryHandle, pCheckInfo, &blockInfo, endPos); return; } else if (pCheckInfo->iter != NULL || pCheckInfo->iiter != NULL) { SSkipListNode* node = NULL; @@ -1297,7 +1296,7 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* int32_t qstart = 0, qend = 0; getQualifiedRowsPos(pQueryHandle, pos, end, numOfRows, &qstart, &qend); - numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, numOfRows, qstart, qend); + numOfRows = doCopyRowsFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, numOfRows, qstart, qend); pos += (qend - qstart + 1) * step; cur->win.ekey = ASCENDING_TRAVERSE(pQueryHandle->order)? tsArray[qend]:tsArray[qstart]; @@ -1321,7 +1320,7 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* int32_t start = -1, end = -1; getQualifiedRowsPos(pQueryHandle, pos, endPos, numOfRows, &start, &end); - numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, numOfRows, start, end); + numOfRows = doCopyRowsFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, numOfRows, start, end); pos += (end - start + 1) * step; cur->win.ekey = ASCENDING_TRAVERSE(pQueryHandle->order)? tsArray[end]:tsArray[start]; @@ -2192,7 +2191,7 @@ SArray* tsdbRetrieveDataBlock(TsdbQueryHandleT* pQueryHandle, SArray* pIdList) { } // todo refactor - int32_t numOfRows = copyDataFromFileBlock(pHandle, pHandle->outputCapacity, 0, 0, pBlock->numOfRows - 1); + int32_t numOfRows = doCopyRowsFromFileBlock(pHandle, pHandle->outputCapacity, 0, 0, pBlock->numOfRows - 1); // if the buffer is not full in case of descending order query, move the data in the front of the buffer if (!ASCENDING_TRAVERSE(pHandle->order) && numOfRows < pHandle->outputCapacity) { diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index 1bc539f328..9872898468 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -532,7 +532,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) { if (pCacheObj->numOfElemsInTrash == 0) { if (pCacheObj->pTrash != NULL) { - uError("cache:%s, key:inconsistency data in cache, numOfElem in trash:%d", pCacheObj->name, pCacheObj->numOfElemsInTrash); + uError("cache:%s, key:inconsistency data in cache, numOfElem in trashcan:%d", pCacheObj->name, pCacheObj->numOfElemsInTrash); } pCacheObj->pTrash = NULL; @@ -549,7 +549,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) { } if (force || (T_REF_VAL_GET(pElem->pData) == 0)) { - uError("cache:%s, key:%p, %p removed from trashcan. numOfElem in trash:%d", pCacheObj->name, pElem->pData->key, pElem->pData->data, + uError("cache:%s, key:%p, %p removed from trashcan. numOfElem in trashcan:%d", pCacheObj->name, pElem->pData->key, pElem->pData->data, pCacheObj->numOfElemsInTrash - 1); STrashElem *p = pElem; From cf031759164099eaf4351b24c9f0ea2f81c51356 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 4 Sep 2020 22:55:07 +0800 Subject: [PATCH 31/58] [td-225] --- src/tsdb/src/tsdbRead.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/tsdb/src/tsdbRead.c b/src/tsdb/src/tsdbRead.c index 60f59e46f7..506d185d1c 100644 --- a/src/tsdb/src/tsdbRead.c +++ b/src/tsdb/src/tsdbRead.c @@ -798,7 +798,15 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc cur->rows = binfo.rows; cur->win = binfo.window; cur->mixBlock = false; - cur->lastKey = ASCENDING_TRAVERSE(pQueryHandle->order)? (binfo.window.ekey + 1): (binfo.window.skey -1); + cur->blockCompleted = true; + + if (ASCENDING_TRAVERSE(pQueryHandle->order)) { + cur->lastKey = binfo.window.ekey + 1; + cur->pos = binfo.rows; + } else { + cur->lastKey = binfo.window.skey - 1; + cur->pos = -1; + } } else { // partially copy to dest buffer int32_t endPos = ASCENDING_TRAVERSE(pQueryHandle->order)? (binfo.rows - 1): 0; copyAllRemainRowsFromFileBlock(pQueryHandle, pCheckInfo, &binfo, endPos); @@ -1195,7 +1203,6 @@ static void copyAllRemainRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STabl cur->win.ekey, cur->rows, pQueryHandle->qinfo); } - // only return the qualified data to client in terms of query time window, data rows in the same block but do not // be included in the query time window will be discarded static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SCompBlock* pBlock) { From 657fd611970b51fcd9993dbde585e6275afabfbe Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Sat, 5 Sep 2020 09:49:58 +0800 Subject: [PATCH 32/58] TD-1182: imporove test report --- tests/perftest-scripts/coverage_test.sh | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/tests/perftest-scripts/coverage_test.sh b/tests/perftest-scripts/coverage_test.sh index 6644cc62a3..a0c8fe4b3f 100755 --- a/tests/perftest-scripts/coverage_test.sh +++ b/tests/perftest-scripts/coverage_test.sh @@ -74,21 +74,36 @@ function runTest { runGeneralCaseOneByOne jenkins/basic.txt - totalSuccess=`grep 'success' $TDENGINE_COVERAGE_REPORT | wc -l` + sed -i "1i\SIM cases test result" $TDENGINE_COVERAGE_REPORT + totalSuccess=`grep 'success' $TDENGINE_COVERAGE_REPORT | wc -l` if [ "$totalSuccess" -gt "0" ]; then - echo -e "\n${GREEN} ### Total $totalSuccess coverage test case(s) succeed! ### ${NC}" | tee -a $TDENGINE_COVERAGE_REPORT + sed -i -e "2i\ ### Total $totalSuccess SIM test case(s) succeed! ###" $TDENGINE_COVERAGE_REPORT fi totalFailed=`grep 'failed\|fault' $TDENGINE_COVERAGE_REPORT | wc -l` if [ "$totalFailed" -ne "0" ]; then - echo -e "${RED} ### Total $totalFailed coverage test case(s) failed! ### ${NC}\n" | tee -a $TDENGINE_COVERAGE_REPORT -# exit $totalPyFailed + sed -i '3i\### Total $totalFailed SIM test case(s) failed! ###' $TDENGINE_COVERAGE_REPORT + else + sed -i '3i\\n' $TDENGINE_COVERAGE_REPORT fi cd $TDENGINE_DIR/tests rm -rf ../sim ./test-all.sh full python | tee -a $TDENGINE_COVERAGE_REPORT + + sed -i "4i\Python cases test result" $TDENGINE_COVERAGE_REPORT + totalPySuccess=`grep 'python case(s) succeed!' $TDENGINE_COVERAGE_REPORT | awk '{print $4}'` + if [ "$totalPySuccess" -gt "0" ]; then + sed -i -e "5i\ ### Total $totalPySuccess Python test case(s) succeed! ###" $TDENGINE_COVERAGE_REPORT + fi + + totalPyFailed=`grep 'python case(s) failed!' $TDENGINE_COVERAGE_REPORT | awk '{print $4}'` + if [ -z $totalPyFailed ]; then + sed -i '6i\\n' $TDENGINE_COVERAGE_REPORT + else + sed -i '6i\### Total $totalPyFailed Python test case(s) failed! ###' $TDENGINE_COVERAGE_REPORT + fi # Test Connector stopTaosd From fb9c2f4eff91e0a9fe54cf7a02915859e5eeb80c Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Sat, 5 Sep 2020 02:27:27 +0000 Subject: [PATCH 33/58] minor changes --- cmake/define.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/define.inc b/cmake/define.inc index 798787b14e..28770be254 100755 --- a/cmake/define.inc +++ b/cmake/define.inc @@ -19,6 +19,7 @@ ENDIF () IF (TD_MQTT) ADD_DEFINITIONS(-D_MQTT) +ENDIF () IF (TD_TSDB_PLUGINS) ADD_DEFINITIONS(-D_TSDB_PLUGINS) From 189c30345f792b36db311f6c6f86e3a3c8588546 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 5 Sep 2020 10:34:19 +0800 Subject: [PATCH 34/58] minor changes --- src/common/src/tglobal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index 4690b6654f..7f3cd46a55 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -1284,7 +1284,7 @@ void taosInitGlobalCfg() { } bool taosCheckGlobalCfg() { - char fqdn[TSDB_EP_LEN]; + char fqdn[TSDB_FQDN_LEN]; uint16_t port; if (debugFlag & DEBUG_TRACE || debugFlag & DEBUG_DEBUG || debugFlag & DEBUG_DUMP) { From f8dd744267900f331b688f62b841a69516dca3b6 Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Sat, 5 Sep 2020 10:18:29 +0800 Subject: [PATCH 35/58] TD-1177: Add performance test into daily test --- tests/perftest-scripts/perftest-taosdemo.sh | 20 ++++- tests/pytest/query/queryPerformance.py | 82 +++++++++++++++++++++ 2 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 tests/pytest/query/queryPerformance.py diff --git a/tests/perftest-scripts/perftest-taosdemo.sh b/tests/perftest-scripts/perftest-taosdemo.sh index e459769512..ae9e8dd737 100755 --- a/tests/perftest-scripts/perftest-taosdemo.sh +++ b/tests/perftest-scripts/perftest-taosdemo.sh @@ -1,6 +1,7 @@ #!/bin/bash WORK_DIR=/mnt/root +TDENGINE_DIR=/root/TDengine walLevel=`grep "^walLevel" /etc/taos/taos.cfg | awk '{print $2}'` if [[ "$walLevel" -eq "2" ]]; then @@ -71,9 +72,17 @@ function runCreateTableThenInsert { restartTaosd /usr/bin/time -f "Total: %e" -o totaltime.out bash -c "yes | taosdemo 2>&1 | tee -a taosdemo-$walPostfix-$today.log" - demoTableAndInsert=`grep "Total:" totaltime.out|awk '{print $2}'` - demoRPS=`grep "records\/second" taosdemo-$walPostfix-$today.log | tail -n1 | awk '{print $13}'` -} + demoTableAndInsert=`grep "Total:" totaltime.out|awk '{print $2}'` + demoRPS=`grep "records\/second" taosdemo-$walPostfix-$today.log | tail -n1 | awk '{print $13}'` +} + +function queryPerformance { + echoInfo "Restart Taosd" + restartTaosd + + cd $TDENGINE_DIR/tests/pytest + python3 query/queryPerformance.py +} function generateTaosdemoPlot { echo "${today} $walPostfix, demoCreateTableOnly: ${demoCreateTableOnly}, demoDeleteTableOnly: ${demoDeleteTableOnly}, demoTableAndInsert: ${demoTableAndInsert}" | tee -a taosdemo-$today.log @@ -101,13 +110,16 @@ today=`date +"%Y%m%d"` cd $WORK_DIR echoInfo "Test Create Table Only " runCreateTableOnly -echoInfo "Test Create Table then Insert data" +echoInfo "Test Delete Table Only" runDeleteTableOnly echoInfo "Test Create Table then Insert data" runCreateTableThenInsert +echoInfo "Query Performance for 10 Billion Records" +queryPerformance echoInfo "Generate plot for taosdemo" generateTaosdemoPlot + tar czf $WORK_DIR/taos-log-taosdemo-$today.tar.gz $logDir/* echoInfo "End of TaosDemo Test" | tee -a $WORK_DIR/cron.log diff --git a/tests/pytest/query/queryPerformance.py b/tests/pytest/query/queryPerformance.py new file mode 100644 index 0000000000..a7fc08c5a3 --- /dev/null +++ b/tests/pytest/query/queryPerformance.py @@ -0,0 +1,82 @@ +################################################################### +# Copyright (c) 2016 by TAOS Technologies, Inc. +# All rights reserved. +# +# This file is proprietary and confidential to TAOS Technologies. +# No part of this file may be reproduced, stored, transmitted, +# disclosed or used in any form or by any means other than as +# expressly provided by the written permission from Jianhui Tao +# +################################################################### + +# -*- coding: utf-8 -*- + +import sys +import os +import taos +import time + + +class taosdemoQueryPerformace: + def initConnection(self): + self.host = "127.0.0.1" + self.user = "root" + self.password = "taosdata" + self.config = "/etc/taos" + self.conn = taos.connect( + self.host, + self.user, + self.password, + self.config) + + + def query(self): + cursor = self.conn.cursor() + cursor.execute("use test") + + totalTime = 0 + for i in range(100): + startTime = time.time() + cursor.execute("select count(*) from test.meters") + totalTime += time.time() - startTime + print("query time for: select count(*) from test.meters %f seconds" % (totalTime / 100)) + + totalTime = 0 + for i in range(100): + startTime = time.time() + cursor.execute("select avg(f1), max(f2), min(f3) from test.meters") + totalTime += time.time() - startTime + print("query time for: select avg(f1), max(f2), min(f3) from test.meters %f seconds" % (totalTime / 100)) + + totalTime = 0 + for i in range(100): + startTime = time.time() + cursor.execute("select count(*) from test.meters where loc='beijing'") + totalTime += time.time() - startTime + print("query time for: select count(*) from test.meters where loc='beijing' %f seconds" % (totalTime / 100)) + + totalTime = 0 + for i in range(100): + startTime = time.time() + cursor.execute("select avg(f1), max(f2), min(f3) from test.meters where areaid=10") + totalTime += time.time() - startTime + print("query time for: select avg(f1), max(f2), min(f3) from test.meters where areaid=10 %f seconds" % (totalTime / 100)) + + totalTime = 0 + for i in range(100): + startTime = time.time() + cursor.execute("select avg(f1), max(f2), min(f3) from test.t10 interval(10s)") + totalTime += time.time() - startTime + print("query time for: select avg(f1), max(f2), min(f3) from test.t10 interval(10s) %f seconds" % (totalTime / 100)) + + totalTime = 0 + for i in range(100): + startTime = time.time() + cursor.execute("select last_row(*) from meters") + totalTime += time.time() - startTime + print("query time for: select last_row(*) from meters %f seconds" % (totalTime / 100)) + +if __name__ == '__main__': + perftest = taosdemoQueryPerformace() + perftest.initConnection() + perftest.query() \ No newline at end of file From eb9a1f9655e41a8e51c1bb5d5dff409272c930ae Mon Sep 17 00:00:00 2001 From: Hui Li Date: Sat, 5 Sep 2020 12:58:36 +0800 Subject: [PATCH 36/58] [issue:3375] --- cmake/platform.inc | 5 ++++- src/os/inc/os.h | 2 +- src/os/inc/osAlpine.h | 4 ++-- src/os/inc/osLinux64.h | 2 ++ src/os/src/detail/osSysinfo.c | 10 +++++++++- src/util/src/tnote.c | 2 +- 6 files changed, 19 insertions(+), 6 deletions(-) diff --git a/cmake/platform.inc b/cmake/platform.inc index 7834a35411..889f6c73cf 100755 --- a/cmake/platform.inc +++ b/cmake/platform.inc @@ -114,6 +114,9 @@ ELSEIF (${OSTYPE} MATCHES "Ningsi80") MESSAGE(STATUS "input osType: Ningsi80") ELSEIF (${OSTYPE} MATCHES "Linux") MESSAGE(STATUS "input osType: Linux") +ELSEIF (${OSTYPE} MATCHES "Alpine") + MESSAGE(STATUS "input osType: Alpine") + SET(TD_APLHINE TRUE) ELSE () MESSAGE(STATUS "input osType unknown: " ${OSTYPE}) -ENDIF () \ No newline at end of file +ENDIF () diff --git a/src/os/inc/os.h b/src/os/inc/os.h index df4b847fbb..d4b71173a0 100644 --- a/src/os/inc/os.h +++ b/src/os/inc/os.h @@ -36,7 +36,7 @@ extern "C" { #include "osLinux32.h" #endif -#ifdef _TD_ALPINE +#ifdef _ALPINE #include "osAlpine.h" #endif diff --git a/src/os/inc/osAlpine.h b/src/os/inc/osAlpine.h index b8212373ce..d939adfb6d 100644 --- a/src/os/inc/osAlpine.h +++ b/src/os/inc/osAlpine.h @@ -13,8 +13,8 @@ * along with this program. If not, see . */ -#ifndef TDENGINE_OS_LINUX64_H -#define TDENGINE_OS_LINUX64_H +#ifndef TDENGINE_OS_ALPINE_H +#define TDENGINE_OS_ALPINE_H #ifdef __cplusplus extern "C" { diff --git a/src/os/inc/osLinux64.h b/src/os/inc/osLinux64.h index 0a99f4b745..c0841c41bd 100644 --- a/src/os/inc/osLinux64.h +++ b/src/os/inc/osLinux64.h @@ -75,7 +75,9 @@ extern "C" { #include #include #include +#ifndef _ALPINE #include +#endif #include #ifdef __cplusplus diff --git a/src/os/src/detail/osSysinfo.c b/src/os/src/detail/osSysinfo.c index c75e254b0e..83ecd85809 100644 --- a/src/os/src/detail/osSysinfo.c +++ b/src/os/src/detail/osSysinfo.c @@ -579,7 +579,11 @@ void taosSetCoreDump() { struct rlimit rlim; struct rlimit rlim_new; if (getrlimit(RLIMIT_CORE, &rlim) == 0) { + #ifndef _ALPINE uInfo("the old unlimited para: rlim_cur=%" PRIu64 ", rlim_max=%" PRIu64, rlim.rlim_cur, rlim.rlim_max); + #else + uInfo("the old unlimited para: rlim_cur=%llu, rlim_max=%llu", rlim.rlim_cur, rlim.rlim_max); + #endif rlim_new.rlim_cur = RLIM_INFINITY; rlim_new.rlim_max = RLIM_INFINITY; if (setrlimit(RLIMIT_CORE, &rlim_new) != 0) { @@ -591,7 +595,11 @@ void taosSetCoreDump() { } if (getrlimit(RLIMIT_CORE, &rlim) == 0) { + #ifndef _ALPINE uInfo("the new unlimited para: rlim_cur=%" PRIu64 ", rlim_max=%" PRIu64, rlim.rlim_cur, rlim.rlim_max); + #else + uInfo("the new unlimited para: rlim_cur=%llu, rlim_max=%llu", rlim.rlim_cur, rlim.rlim_max); + #endif } #ifndef _TD_ARM_ @@ -659,4 +667,4 @@ bool taosGetSystemUid(char *uid) { return false; } -#endif \ No newline at end of file +#endif diff --git a/src/util/src/tnote.c b/src/util/src/tnote.c index ea09709449..4f05277a84 100644 --- a/src/util/src/tnote.c +++ b/src/util/src/tnote.c @@ -253,7 +253,7 @@ void taosNotePrint(taosNoteInfo * pNote, const char * const format, ...) ptm->tm_min, ptm->tm_sec, (int)timeSecs.tv_usec, taosGetPthreadId()); #else len = sprintf(buffer, "%02d/%02d %02d:%02d:%02d.%06d %lx ", ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, - ptm->tm_sec, (int)timeSecs.tv_usec, pthread_self()); + ptm->tm_sec, (int)timeSecs.tv_usec, (unsigned long int)pthread_self()); #endif va_start(argpointer, format); len += vsnprintf(buffer + len, MAX_NOTE_LINE_SIZE - len, format, argpointer); From 0f9543994a81c393d2ab4d109978ab19d727061d Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 5 Sep 2020 13:24:35 +0800 Subject: [PATCH 37/58] [td-1315] --- src/util/inc/hash.h | 12 +++++++++++- src/util/src/hash.c | 11 +++++++---- src/util/src/tcache.c | 17 +++++++---------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/util/inc/hash.h b/src/util/inc/hash.h index f289a4e8c3..2a58bec883 100644 --- a/src/util/inc/hash.h +++ b/src/util/inc/hash.h @@ -110,7 +110,17 @@ int32_t taosHashPut(SHashObj *pHashObj, const void *key, size_t keyLen, void *da */ void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen); -void *taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void(*fp)(void*)); +/** + * apply the udf before return the result + * @param pHashObj + * @param key + * @param keyLen + * @param fp + * @param d + * @param dsize + * @return + */ +void* taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *), void* d, size_t dsize); /** * remove item with the specified key diff --git a/src/util/src/hash.c b/src/util/src/hash.c index cc96f83f44..7427a2e4f3 100644 --- a/src/util/src/hash.c +++ b/src/util/src/hash.c @@ -255,10 +255,10 @@ int32_t taosHashPut(SHashObj *pHashObj, const void *key, size_t keyLen, void *da } void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen) { - return taosHashGetCB(pHashObj, key, keyLen, NULL); + return taosHashGetCB(pHashObj, key, keyLen, NULL, NULL, 0); } -void *taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *)) { +void* taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *), void* d, size_t dsize) { if (pHashObj->size <= 0 || keyLen == 0 || key == NULL) { return NULL; } @@ -273,7 +273,6 @@ void *taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*f // no data, return directly if (atomic_load_32(&pe->num) == 0) { - __rd_unlock(&pHashObj->lock, pHashObj->type); return NULL; } @@ -297,7 +296,11 @@ void *taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*f fp(pNode->data); } - data = pNode->data; + if (d != NULL) { + memcpy(d, pNode->data, dsize); + } else { + data = pNode->data; + } } if (pHashObj->type == HASH_ENTRY_LOCK) { diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index 9872898468..9c7a48bced 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -223,7 +223,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v taosTFree(p); } else { taosAddToTrash(pCacheObj, p); - uError("cache:%s, key:%p, %p exist in cache, updated old:%p", pCacheObj->name, key, pNode1->data, p); + uDebug("cache:%s, key:%p, %p exist in cache, updated old:%p", pCacheObj->name, key, pNode1->data, p->data); } } @@ -264,17 +264,14 @@ void *taosCacheAcquireByKey(SCacheObj *pCacheObj, const void *key, size_t keyLen return NULL; } - SCacheDataNode **ptNode = (SCacheDataNode **)taosHashGetCB(pCacheObj->pHashTable, key, keyLen, incRefFn); - if (ptNode != NULL) { - assert ((*ptNode) != NULL && (int64_t) ((*ptNode)->data) != 0x40); - } + SCacheDataNode* ptNode = NULL; + taosHashGetCB(pCacheObj->pHashTable, key, keyLen, incRefFn, &ptNode, sizeof(void*)); - void* pData = (ptNode != NULL)? (*ptNode)->data:NULL; - assert((int64_t)pData != 0x40); + void* pData = (ptNode != NULL)? ptNode->data:NULL; if (pData != NULL) { atomic_add_fetch_32(&pCacheObj->statistics.hitCount, 1); - uDebug("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, T_REF_VAL_GET(*ptNode)); + uDebug("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, T_REF_VAL_GET(ptNode)); } else { atomic_add_fetch_32(&pCacheObj->statistics.missCount, 1); uDebug("cache:%s, key:%p, not in cache, retrieved failed", pCacheObj->name, key); @@ -333,7 +330,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { SCacheDataNode *pNode = (SCacheDataNode *)((char *)(*data) - offset); if (pNode->signature != (uint64_t)pNode) { - uError("%p, release invalid cache data", pNode); + uError("cache:%s, %p, release invalid cache data", pCacheObj->name, pNode); return; } @@ -549,7 +546,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) { } if (force || (T_REF_VAL_GET(pElem->pData) == 0)) { - uError("cache:%s, key:%p, %p removed from trashcan. numOfElem in trashcan:%d", pCacheObj->name, pElem->pData->key, pElem->pData->data, + uDebug("cache:%s, key:%p, %p removed from trashcan. numOfElem in trashcan:%d", pCacheObj->name, pElem->pData->key, pElem->pData->data, pCacheObj->numOfElemsInTrash - 1); STrashElem *p = pElem; From b98ed27fe468d69eff24f9f94c15fa4941cc2851 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 5 Sep 2020 13:27:19 +0800 Subject: [PATCH 38/58] [td-1315] --- src/client/src/tscUtil.c | 2 ++ src/util/inc/tcache.h | 2 +- src/util/src/tcache.c | 14 +++++++------- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index b45d40f49c..80e3828c9d 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -718,6 +718,7 @@ int32_t tscMergeTableDataBlocks(SSqlObj* pSql, SArray* pTableDataBlockList) { return TSDB_CODE_SUCCESS; } +// TODO: all subqueries should be freed correctly before close this connection. void tscCloseTscObj(STscObj* pObj) { assert(pObj != NULL); @@ -727,6 +728,7 @@ void tscCloseTscObj(STscObj* pObj) { if (pObj->pDnodeConn != NULL) { rpcClose(pObj->pDnodeConn); + pObj->pDnodeConn = NULL; } tscDebug("%p DB connection is closed, dnodeConn:%p", pObj, pObj->pDnodeConn); diff --git a/src/util/inc/tcache.h b/src/util/inc/tcache.h index 3d6f9705ee..af5f30c7c3 100644 --- a/src/util/inc/tcache.h +++ b/src/util/inc/tcache.h @@ -42,7 +42,7 @@ typedef struct SCacheDataNode { uint64_t signature; struct STrashElem *pTNodeHeader; // point to trash node head uint16_t keySize: 15; // max key size: 32kb - bool inTrashCan: 1;// denote if it is in trash or not + bool inTrashcan: 1;// denote if it is in trash or not uint32_t size; // allocated size for current SCacheDataNode T_REF_DECLARE() char *key; diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index 9c7a48bced..ab489e2e46 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -337,9 +337,9 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { *data = NULL; // note: extend lifespan before dec ref count - bool inTrashCan = pNode->inTrashCan; + bool inTrashcan = pNode->inTrashcan; - if (pCacheObj->extendLifespan && (!inTrashCan) && (!_remove)) { + if (pCacheObj->extendLifespan && (!inTrashcan) && (!_remove)) { atomic_store_64(&pNode->expireTime, pNode->lifespan + taosGetTimestampMs()); uDebug("cache:%s data:%p extend expire time: %"PRId64, pCacheObj->name, pNode->data, pNode->expireTime); } @@ -350,7 +350,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { char* d = pNode->data; int32_t ref = T_REF_VAL_GET(pNode); - uDebug("cache:%s, key:%p, %p is released, refcnt:%d, in trashcan:%d", pCacheObj->name, key, d, ref - 1, inTrashCan); + uDebug("cache:%s, key:%p, %p is released, refcnt:%d, in trashcan:%d", pCacheObj->name, key, d, ref - 1, inTrashcan); /* * If it is not referenced by other users, remove it immediately. Otherwise move this node to trashcan wait for all users @@ -359,7 +359,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { * NOTE: previous ref is 0, and current ref is still 0, remove it. If previous is not 0, there is another thread * that tries to do the same thing. */ - if (inTrashCan) { + if (inTrashcan) { ref = T_REF_VAL_GET(pNode); if (ref == 1) { @@ -428,7 +428,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { char* p = pNode->data; int32_t ref = T_REF_DEC(pNode); - uDebug("cache:%s, key:%p, %p released, refcnt:%d, data in trashcan:%d", pCacheObj->name, key, p, ref, inTrashCan); + uDebug("cache:%s, key:%p, %p released, refcnt:%d, data in trashcan:%d", pCacheObj->name, key, p, ref, inTrashcan); } } @@ -499,7 +499,7 @@ SCacheDataNode *taosCreateCacheNode(const char *key, size_t keyLen, const char * } void taosAddToTrash(SCacheObj *pCacheObj, SCacheDataNode *pNode) { - if (pNode->inTrashCan) { /* node is already in trash */ + if (pNode->inTrashcan) { /* node is already in trash */ assert(pNode->pTNodeHeader != NULL && pNode->pTNodeHeader->pData == pNode); return; } @@ -507,7 +507,7 @@ void taosAddToTrash(SCacheObj *pCacheObj, SCacheDataNode *pNode) { STrashElem *pElem = calloc(1, sizeof(STrashElem)); pElem->pData = pNode; pElem->prev = NULL; - pNode->inTrashCan = true; + pNode->inTrashcan = true; pNode->pTNodeHeader = pElem; __cache_wr_lock(pCacheObj); From 3a54e379ad25aed6410185bb320d900f43145779 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 5 Sep 2020 14:52:15 +0800 Subject: [PATCH 39/58] [td-1333] --- src/client/src/tscSQLParser.c | 2 +- src/client/src/tscServer.c | 2 +- src/query/inc/sql.y | 3 - src/query/src/qTokenizer.c | 1 - src/query/src/sql.c | 2357 ++++++++++++++++----------------- 5 files changed, 1172 insertions(+), 1193 deletions(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index de608961c2..48980fefb6 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -5088,7 +5088,7 @@ static int32_t setTimePrecision(SSqlCmd* pCmd, SCMCreateDbMsg* pMsg, SCreateDBIn } static void setCreateDBOption(SCMCreateDbMsg* pMsg, SCreateDBInfo* pCreateDb) { - pMsg->maxTables = htonl(pCreateDb->maxTablesPerVnode); + pMsg->maxTables = htonl(-1); // max tables can not be set anymore pMsg->cacheBlockSize = htonl(pCreateDb->cacheBlockSize); pMsg->totalBlocks = htonl(pCreateDb->numOfBlocks); pMsg->daysPerFile = htonl(pCreateDb->daysPerFile); diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c index 16e3458e13..fbc02cc40e 100644 --- a/src/client/src/tscServer.c +++ b/src/client/src/tscServer.c @@ -406,7 +406,7 @@ int doProcessSql(SSqlObj *pSql) { if (code != TSDB_CODE_SUCCESS) { pRes->code = code; tscQueueAsyncRes(pSql); - return pRes->code; + return code; } return TSDB_CODE_SUCCESS; diff --git a/src/query/inc/sql.y b/src/query/inc/sql.y index 7500dcba56..79aec2f349 100644 --- a/src/query/inc/sql.y +++ b/src/query/inc/sql.y @@ -217,7 +217,6 @@ acct_optr(Y) ::= pps(C) tseries(D) storage(P) streams(F) qtime(Q) dbs(E) users(K %destructor keep {tVariantListDestroy($$);} keep(Y) ::= KEEP tagitemlist(X). { Y = X; } -tables(Y) ::= MAXTABLES INTEGER(X). { Y = X; } cache(Y) ::= CACHE INTEGER(X). { Y = X; } replica(Y) ::= REPLICA INTEGER(X). { Y = X; } quorum(Y) ::= QUORUM INTEGER(X). { Y = X; } @@ -234,7 +233,6 @@ prec(Y) ::= PRECISION STRING(X). { Y = X; } %type db_optr {SCreateDBInfo} db_optr(Y) ::= . {setDefaultCreateDbOption(&Y);} -db_optr(Y) ::= db_optr(Z) tables(X). { Y = Z; Y.maxTablesPerVnode = strtol(X.z, NULL, 10); } db_optr(Y) ::= db_optr(Z) cache(X). { Y = Z; Y.cacheBlockSize = strtol(X.z, NULL, 10); } db_optr(Y) ::= db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); } db_optr(Y) ::= db_optr(Z) quorum(X). { Y = Z; Y.quorum = strtol(X.z, NULL, 10); } @@ -254,7 +252,6 @@ alter_db_optr(Y) ::= . { setDefaultCreateDbOption(&Y);} alter_db_optr(Y) ::= alter_db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); } alter_db_optr(Y) ::= alter_db_optr(Z) quorum(X). { Y = Z; Y.quorum = strtol(X.z, NULL, 10); } -alter_db_optr(Y) ::= alter_db_optr(Z) tables(X). { Y = Z; Y.maxTablesPerVnode = strtol(X.z, NULL, 10); } alter_db_optr(Y) ::= alter_db_optr(Z) keep(X). { Y = Z; Y.keep = X; } alter_db_optr(Y) ::= alter_db_optr(Z) blocks(X). { Y = Z; Y.numOfBlocks = strtol(X.z, NULL, 10); } alter_db_optr(Y) ::= alter_db_optr(Z) comp(X). { Y = Z; Y.compressionLevel = strtol(X.z, NULL, 10); } diff --git a/src/query/src/qTokenizer.c b/src/query/src/qTokenizer.c index 5fdabca166..0c9f92786f 100644 --- a/src/query/src/qTokenizer.c +++ b/src/query/src/qTokenizer.c @@ -121,7 +121,6 @@ static SKeyword keywordTable[] = { {"MINROWS", TK_MINROWS}, {"MAXROWS", TK_MAXROWS}, {"BLOCKS", TK_BLOCKS}, - {"MAXTABLES", TK_MAXTABLES}, {"CACHE", TK_CACHE}, {"CTIME", TK_CTIME}, {"WAL", TK_WAL}, diff --git a/src/query/src/sql.c b/src/query/src/sql.c index f3f55791b0..373e57963c 100644 --- a/src/query/src/sql.c +++ b/src/query/src/sql.c @@ -97,26 +97,26 @@ #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned short int -#define YYNOCODE 274 +#define YYNOCODE 272 #define YYACTIONTYPE unsigned short int #define ParseTOKENTYPE SStrToken typedef union { int yyinit; ParseTOKENTYPE yy0; - int yy46; - tSQLExpr* yy64; - tVariant yy134; - SCreateAcctSQL yy149; - int64_t yy207; - SLimitVal yy216; - TAOS_FIELD yy223; - SSubclauseInfo* yy231; - SCreateDBInfo yy268; - tSQLExprList* yy290; - SQuerySQL* yy414; - SCreateTableSQL* yy470; - tVariantList* yy498; - tFieldList* yy523; + SSubclauseInfo* yy25; + tSQLExpr* yy66; + SCreateAcctSQL yy73; + int yy82; + SQuerySQL* yy150; + SCreateDBInfo yy158; + TAOS_FIELD yy181; + SLimitVal yy188; + tSQLExprList* yy224; + int64_t yy271; + tVariant yy312; + SCreateTableSQL* yy374; + tFieldList* yy449; + tVariantList* yy494; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -126,17 +126,17 @@ typedef union { #define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo #define ParseARG_STORE yypParser->pInfo = pInfo #define YYFALLBACK 1 -#define YYNSTATE 245 -#define YYNRULE 228 -#define YYNTOKEN 207 -#define YY_MAX_SHIFT 244 -#define YY_MIN_SHIFTREDUCE 407 -#define YY_MAX_SHIFTREDUCE 634 -#define YY_ERROR_ACTION 635 -#define YY_ACCEPT_ACTION 636 -#define YY_NO_ACTION 637 -#define YY_MIN_REDUCE 638 -#define YY_MAX_REDUCE 865 +#define YYNSTATE 244 +#define YYNRULE 225 +#define YYNTOKEN 206 +#define YY_MAX_SHIFT 243 +#define YY_MIN_SHIFTREDUCE 403 +#define YY_MAX_SHIFTREDUCE 627 +#define YY_ERROR_ACTION 628 +#define YY_ACCEPT_ACTION 629 +#define YY_NO_ACTION 630 +#define YY_MIN_REDUCE 631 +#define YY_MAX_REDUCE 855 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined @@ -202,219 +202,217 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (554) +#define YY_ACTTAB_COUNT (549) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 105, 448, 137, 677, 636, 244, 128, 517, 137, 449, - /* 10 */ 137, 160, 853, 41, 43, 11, 35, 36, 852, 159, - /* 20 */ 853, 29, 136, 448, 199, 39, 37, 40, 38, 157, - /* 30 */ 105, 449, 141, 34, 33, 219, 218, 32, 31, 30, - /* 40 */ 41, 43, 771, 35, 36, 32, 31, 30, 29, 760, - /* 50 */ 448, 199, 39, 37, 40, 38, 184, 808, 449, 194, - /* 60 */ 34, 33, 21, 21, 32, 31, 30, 408, 409, 410, - /* 70 */ 411, 412, 413, 414, 415, 416, 417, 418, 419, 243, - /* 80 */ 41, 43, 230, 35, 36, 196, 849, 60, 29, 21, - /* 90 */ 848, 199, 39, 37, 40, 38, 168, 169, 757, 757, - /* 100 */ 34, 33, 170, 56, 32, 31, 30, 782, 847, 16, - /* 110 */ 237, 210, 236, 235, 209, 208, 207, 234, 206, 233, - /* 120 */ 232, 231, 205, 217, 153, 757, 736, 590, 723, 724, - /* 130 */ 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, - /* 140 */ 735, 43, 8, 35, 36, 63, 115, 21, 29, 155, - /* 150 */ 242, 199, 39, 37, 40, 38, 241, 240, 97, 779, - /* 160 */ 34, 33, 167, 101, 32, 31, 30, 171, 35, 36, - /* 170 */ 216, 215, 596, 29, 599, 105, 199, 39, 37, 40, - /* 180 */ 38, 222, 760, 757, 238, 34, 33, 177, 12, 32, - /* 190 */ 31, 30, 164, 603, 181, 180, 594, 771, 597, 105, - /* 200 */ 600, 163, 164, 603, 760, 17, 594, 150, 597, 154, - /* 210 */ 600, 156, 26, 90, 89, 144, 187, 571, 572, 16, - /* 220 */ 237, 149, 236, 235, 161, 162, 221, 234, 198, 233, - /* 230 */ 232, 231, 807, 78, 161, 162, 164, 603, 549, 230, - /* 240 */ 594, 3, 597, 17, 600, 76, 80, 85, 88, 79, - /* 250 */ 26, 39, 37, 40, 38, 82, 61, 758, 21, 34, - /* 260 */ 33, 546, 62, 32, 31, 30, 18, 142, 161, 162, - /* 270 */ 183, 741, 541, 740, 27, 738, 739, 152, 686, 186, - /* 280 */ 742, 128, 744, 745, 743, 678, 533, 143, 128, 530, - /* 290 */ 42, 531, 562, 532, 756, 595, 46, 598, 34, 33, - /* 300 */ 42, 602, 32, 31, 30, 118, 119, 70, 66, 69, - /* 310 */ 592, 602, 145, 50, 75, 74, 601, 172, 173, 132, - /* 320 */ 130, 93, 92, 91, 100, 47, 601, 146, 563, 620, - /* 330 */ 51, 26, 14, 13, 42, 147, 604, 523, 522, 203, - /* 340 */ 13, 46, 22, 22, 48, 602, 593, 10, 9, 537, - /* 350 */ 535, 538, 536, 87, 86, 148, 139, 135, 862, 140, - /* 360 */ 601, 138, 759, 818, 817, 165, 814, 813, 166, 781, - /* 370 */ 751, 220, 800, 786, 788, 773, 102, 799, 26, 116, - /* 380 */ 114, 117, 688, 185, 204, 133, 24, 213, 685, 534, - /* 390 */ 214, 861, 95, 72, 860, 858, 558, 120, 706, 25, - /* 400 */ 23, 134, 52, 188, 675, 81, 673, 83, 84, 671, - /* 410 */ 670, 174, 192, 129, 668, 667, 666, 665, 664, 656, - /* 420 */ 49, 131, 662, 660, 658, 770, 57, 58, 801, 44, - /* 430 */ 197, 195, 193, 191, 189, 28, 106, 212, 77, 223, - /* 440 */ 224, 225, 226, 201, 53, 227, 228, 229, 239, 64, - /* 450 */ 67, 634, 151, 175, 176, 633, 178, 179, 632, 669, - /* 460 */ 186, 625, 94, 96, 123, 127, 2, 122, 707, 755, - /* 470 */ 121, 124, 125, 111, 107, 108, 126, 109, 110, 112, - /* 480 */ 663, 113, 182, 1, 543, 55, 59, 559, 103, 158, - /* 490 */ 564, 5, 190, 104, 6, 65, 490, 605, 4, 19, - /* 500 */ 20, 15, 200, 7, 202, 486, 484, 483, 482, 479, - /* 510 */ 452, 211, 68, 45, 22, 71, 73, 519, 518, 516, - /* 520 */ 54, 473, 471, 463, 469, 465, 467, 461, 459, 489, - /* 530 */ 488, 487, 485, 481, 480, 478, 46, 450, 423, 421, - /* 540 */ 638, 637, 637, 637, 637, 637, 637, 637, 637, 637, - /* 550 */ 637, 637, 98, 99, + /* 0 */ 731, 444, 221, 729, 730, 629, 243, 510, 732, 445, + /* 10 */ 734, 735, 733, 41, 43, 526, 35, 36, 523, 11, + /* 20 */ 524, 29, 525, 444, 199, 39, 37, 40, 38, 155, + /* 30 */ 241, 445, 748, 34, 33, 219, 218, 32, 31, 30, + /* 40 */ 41, 43, 761, 35, 36, 136, 172, 173, 29, 137, + /* 50 */ 21, 199, 39, 37, 40, 38, 184, 141, 160, 843, + /* 60 */ 34, 33, 839, 772, 32, 31, 30, 404, 405, 406, + /* 70 */ 407, 408, 409, 410, 411, 412, 413, 414, 415, 242, + /* 80 */ 41, 43, 230, 35, 36, 746, 62, 137, 29, 137, + /* 90 */ 21, 199, 39, 37, 40, 38, 159, 843, 27, 842, + /* 100 */ 34, 33, 56, 838, 32, 31, 30, 105, 43, 8, + /* 110 */ 35, 36, 63, 115, 769, 29, 761, 527, 199, 39, + /* 120 */ 37, 40, 38, 168, 539, 747, 583, 34, 33, 18, + /* 130 */ 156, 32, 31, 30, 16, 210, 236, 235, 209, 208, + /* 140 */ 207, 234, 206, 233, 232, 231, 205, 727, 105, 715, + /* 150 */ 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, + /* 160 */ 726, 35, 36, 798, 837, 194, 29, 177, 157, 199, + /* 170 */ 39, 37, 40, 38, 181, 180, 21, 21, 34, 33, + /* 180 */ 444, 12, 32, 31, 30, 164, 596, 750, 445, 587, + /* 190 */ 153, 590, 154, 593, 105, 164, 596, 21, 17, 587, + /* 200 */ 150, 590, 196, 593, 60, 26, 90, 89, 144, 169, + /* 210 */ 217, 747, 747, 16, 149, 236, 235, 161, 162, 167, + /* 220 */ 234, 198, 233, 232, 231, 142, 670, 161, 162, 128, + /* 230 */ 222, 542, 747, 164, 596, 17, 143, 587, 750, 590, + /* 240 */ 105, 593, 26, 39, 37, 40, 38, 100, 170, 145, + /* 250 */ 797, 34, 33, 101, 26, 32, 31, 30, 32, 31, + /* 260 */ 30, 78, 183, 564, 565, 161, 162, 230, 589, 152, + /* 270 */ 592, 76, 80, 85, 88, 79, 240, 239, 97, 34, + /* 280 */ 33, 82, 42, 32, 31, 30, 118, 119, 70, 66, + /* 290 */ 69, 237, 42, 595, 679, 163, 61, 128, 132, 130, + /* 300 */ 93, 92, 91, 595, 671, 187, 585, 128, 594, 588, + /* 310 */ 750, 591, 171, 534, 47, 216, 215, 146, 594, 555, + /* 320 */ 186, 147, 556, 46, 613, 148, 14, 597, 13, 139, + /* 330 */ 42, 13, 50, 48, 3, 135, 75, 74, 140, 516, + /* 340 */ 515, 595, 586, 46, 22, 138, 203, 10, 9, 51, + /* 350 */ 22, 852, 530, 528, 531, 529, 594, 87, 86, 749, + /* 360 */ 808, 807, 165, 804, 803, 166, 771, 741, 220, 776, + /* 370 */ 763, 778, 102, 790, 789, 116, 117, 114, 681, 204, + /* 380 */ 133, 24, 213, 678, 214, 851, 72, 850, 848, 26, + /* 390 */ 120, 699, 25, 23, 185, 95, 134, 668, 81, 551, + /* 400 */ 666, 83, 84, 664, 188, 663, 174, 129, 661, 660, + /* 410 */ 659, 658, 657, 649, 131, 655, 653, 192, 52, 651, + /* 420 */ 760, 57, 49, 58, 791, 44, 197, 195, 193, 191, + /* 430 */ 189, 28, 212, 77, 223, 224, 225, 226, 227, 228, + /* 440 */ 229, 238, 627, 176, 175, 626, 201, 178, 179, 53, + /* 450 */ 625, 618, 182, 536, 64, 151, 186, 67, 552, 55, + /* 460 */ 103, 158, 662, 59, 200, 94, 96, 123, 700, 121, + /* 470 */ 126, 106, 107, 122, 124, 125, 127, 112, 108, 109, + /* 480 */ 113, 745, 110, 656, 111, 1, 2, 190, 5, 557, + /* 490 */ 104, 19, 6, 598, 20, 4, 15, 7, 65, 485, + /* 500 */ 202, 481, 479, 478, 477, 474, 448, 211, 68, 45, + /* 510 */ 71, 73, 22, 512, 511, 509, 54, 469, 467, 459, + /* 520 */ 465, 461, 463, 457, 455, 484, 483, 482, 480, 476, + /* 530 */ 475, 46, 446, 419, 417, 631, 630, 630, 630, 630, + /* 540 */ 630, 630, 630, 630, 630, 630, 630, 98, 99, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 211, 1, 262, 215, 208, 209, 218, 5, 262, 9, - /* 10 */ 262, 271, 272, 13, 14, 262, 16, 17, 272, 271, - /* 20 */ 272, 21, 262, 1, 24, 25, 26, 27, 28, 228, - /* 30 */ 211, 9, 262, 33, 34, 33, 34, 37, 38, 39, - /* 40 */ 13, 14, 246, 16, 17, 37, 38, 39, 21, 248, - /* 50 */ 1, 24, 25, 26, 27, 28, 260, 268, 9, 270, - /* 60 */ 33, 34, 211, 211, 37, 38, 39, 45, 46, 47, + /* 0 */ 226, 1, 210, 229, 230, 207, 208, 5, 234, 9, + /* 10 */ 236, 237, 238, 13, 14, 2, 16, 17, 5, 260, + /* 20 */ 7, 21, 9, 1, 24, 25, 26, 27, 28, 209, + /* 30 */ 210, 9, 240, 33, 34, 33, 34, 37, 38, 39, + /* 40 */ 13, 14, 244, 16, 17, 260, 33, 34, 21, 260, + /* 50 */ 210, 24, 25, 26, 27, 28, 258, 260, 269, 270, + /* 60 */ 33, 34, 260, 210, 37, 38, 39, 45, 46, 47, /* 70 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* 80 */ 13, 14, 78, 16, 17, 266, 262, 268, 21, 211, - /* 90 */ 262, 24, 25, 26, 27, 28, 245, 245, 247, 247, - /* 100 */ 33, 34, 63, 103, 37, 38, 39, 211, 262, 85, - /* 110 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - /* 120 */ 96, 97, 98, 245, 262, 247, 227, 100, 229, 230, - /* 130 */ 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, - /* 140 */ 241, 14, 99, 16, 17, 102, 103, 211, 21, 210, - /* 150 */ 211, 24, 25, 26, 27, 28, 60, 61, 62, 263, - /* 160 */ 33, 34, 228, 211, 37, 38, 39, 128, 16, 17, - /* 170 */ 131, 132, 5, 21, 7, 211, 24, 25, 26, 27, - /* 180 */ 28, 245, 248, 247, 228, 33, 34, 127, 44, 37, - /* 190 */ 38, 39, 1, 2, 134, 135, 5, 246, 7, 211, - /* 200 */ 9, 59, 1, 2, 248, 99, 5, 63, 7, 262, - /* 210 */ 9, 260, 106, 69, 70, 71, 264, 116, 117, 85, - /* 220 */ 86, 77, 88, 89, 33, 34, 211, 93, 37, 95, - /* 230 */ 96, 97, 268, 72, 33, 34, 1, 2, 37, 78, - /* 240 */ 5, 99, 7, 99, 9, 64, 65, 66, 67, 68, - /* 250 */ 106, 25, 26, 27, 28, 74, 268, 242, 211, 33, - /* 260 */ 34, 104, 249, 37, 38, 39, 109, 262, 33, 34, - /* 270 */ 126, 227, 100, 229, 261, 231, 232, 133, 215, 107, - /* 280 */ 236, 218, 238, 239, 240, 215, 2, 262, 218, 5, - /* 290 */ 99, 7, 100, 9, 247, 5, 104, 7, 33, 34, - /* 300 */ 99, 110, 37, 38, 39, 64, 65, 66, 67, 68, - /* 310 */ 1, 110, 262, 104, 129, 130, 125, 33, 34, 64, - /* 320 */ 65, 66, 67, 68, 99, 104, 125, 262, 100, 100, - /* 330 */ 121, 106, 104, 104, 99, 262, 100, 100, 100, 100, - /* 340 */ 104, 104, 104, 104, 123, 110, 37, 129, 130, 5, - /* 350 */ 5, 7, 7, 72, 73, 262, 262, 262, 248, 262, - /* 360 */ 125, 262, 248, 243, 243, 243, 243, 243, 243, 211, - /* 370 */ 244, 243, 269, 211, 211, 246, 211, 269, 106, 211, - /* 380 */ 250, 211, 211, 246, 211, 211, 211, 211, 211, 105, - /* 390 */ 211, 211, 59, 211, 211, 211, 110, 211, 211, 211, - /* 400 */ 211, 211, 120, 265, 211, 211, 211, 211, 211, 211, - /* 410 */ 211, 211, 265, 211, 211, 211, 211, 211, 211, 211, - /* 420 */ 122, 211, 211, 211, 211, 259, 212, 212, 212, 119, - /* 430 */ 114, 118, 113, 112, 111, 124, 258, 75, 84, 83, - /* 440 */ 49, 80, 82, 212, 212, 53, 81, 79, 75, 216, - /* 450 */ 216, 5, 212, 136, 5, 5, 136, 5, 5, 212, - /* 460 */ 107, 87, 213, 213, 220, 219, 214, 224, 226, 246, - /* 470 */ 225, 223, 221, 253, 257, 256, 222, 255, 254, 252, - /* 480 */ 212, 251, 127, 217, 100, 108, 104, 100, 99, 1, - /* 490 */ 100, 115, 99, 99, 115, 72, 9, 100, 99, 104, - /* 500 */ 104, 99, 101, 99, 101, 5, 5, 5, 5, 5, - /* 510 */ 76, 15, 72, 16, 104, 130, 130, 5, 5, 100, - /* 520 */ 99, 5, 5, 5, 5, 5, 5, 5, 5, 5, - /* 530 */ 5, 5, 5, 5, 5, 5, 104, 76, 59, 58, - /* 540 */ 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 550 */ 273, 273, 21, 21, 273, 273, 273, 273, 273, 273, - /* 560 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 570 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 580 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 590 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 600 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 610 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 620 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 630 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 640 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 650 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 660 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 670 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 680 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 690 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 700 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 710 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 720 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 730 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 740 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 750 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - /* 760 */ 273, + /* 80 */ 13, 14, 78, 16, 17, 245, 247, 260, 21, 260, + /* 90 */ 210, 24, 25, 26, 27, 28, 269, 270, 259, 270, + /* 100 */ 33, 34, 102, 260, 37, 38, 39, 210, 14, 98, + /* 110 */ 16, 17, 101, 102, 261, 21, 244, 104, 24, 25, + /* 120 */ 26, 27, 28, 243, 103, 245, 99, 33, 34, 108, + /* 130 */ 258, 37, 38, 39, 85, 86, 87, 88, 89, 90, + /* 140 */ 91, 92, 93, 94, 95, 96, 97, 226, 210, 228, + /* 150 */ 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + /* 160 */ 239, 16, 17, 266, 260, 268, 21, 126, 227, 24, + /* 170 */ 25, 26, 27, 28, 133, 134, 210, 210, 33, 34, + /* 180 */ 1, 44, 37, 38, 39, 1, 2, 246, 9, 5, + /* 190 */ 260, 7, 260, 9, 210, 1, 2, 210, 98, 5, + /* 200 */ 63, 7, 264, 9, 266, 105, 69, 70, 71, 243, + /* 210 */ 243, 245, 245, 85, 77, 87, 88, 33, 34, 227, + /* 220 */ 92, 37, 94, 95, 96, 260, 214, 33, 34, 217, + /* 230 */ 243, 37, 245, 1, 2, 98, 260, 5, 246, 7, + /* 240 */ 210, 9, 105, 25, 26, 27, 28, 98, 63, 260, + /* 250 */ 266, 33, 34, 210, 105, 37, 38, 39, 37, 38, + /* 260 */ 39, 72, 125, 115, 116, 33, 34, 78, 5, 132, + /* 270 */ 7, 64, 65, 66, 67, 68, 60, 61, 62, 33, + /* 280 */ 34, 74, 98, 37, 38, 39, 64, 65, 66, 67, + /* 290 */ 68, 227, 98, 109, 214, 59, 266, 217, 64, 65, + /* 300 */ 66, 67, 68, 109, 214, 262, 1, 217, 124, 5, + /* 310 */ 246, 7, 127, 99, 103, 130, 131, 260, 124, 99, + /* 320 */ 106, 260, 99, 103, 99, 260, 103, 99, 103, 260, + /* 330 */ 98, 103, 103, 122, 98, 260, 128, 129, 260, 99, + /* 340 */ 99, 109, 37, 103, 103, 260, 99, 128, 129, 120, + /* 350 */ 103, 246, 5, 5, 7, 7, 124, 72, 73, 246, + /* 360 */ 241, 241, 241, 241, 241, 241, 210, 242, 241, 210, + /* 370 */ 244, 210, 210, 267, 267, 210, 210, 248, 210, 210, + /* 380 */ 210, 210, 210, 210, 210, 210, 210, 210, 210, 105, + /* 390 */ 210, 210, 210, 210, 244, 59, 210, 210, 210, 109, + /* 400 */ 210, 210, 210, 210, 263, 210, 210, 210, 210, 210, + /* 410 */ 210, 210, 210, 210, 210, 210, 210, 263, 119, 210, + /* 420 */ 257, 211, 121, 211, 211, 118, 113, 117, 112, 111, + /* 430 */ 110, 123, 75, 84, 83, 49, 80, 82, 53, 81, + /* 440 */ 79, 75, 5, 5, 135, 5, 211, 135, 5, 211, + /* 450 */ 5, 86, 126, 99, 215, 211, 106, 215, 99, 107, + /* 460 */ 98, 1, 211, 103, 100, 212, 212, 219, 225, 224, + /* 470 */ 221, 256, 255, 223, 222, 220, 218, 250, 254, 253, + /* 480 */ 249, 244, 252, 211, 251, 216, 213, 98, 114, 99, + /* 490 */ 98, 103, 114, 99, 103, 98, 98, 98, 72, 9, + /* 500 */ 100, 5, 5, 5, 5, 5, 76, 15, 72, 16, + /* 510 */ 129, 129, 103, 5, 5, 99, 98, 5, 5, 5, + /* 520 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + /* 530 */ 5, 103, 76, 59, 58, 0, 271, 271, 271, 271, + /* 540 */ 271, 271, 271, 271, 271, 271, 271, 21, 21, 271, + /* 550 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 560 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 570 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 580 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 590 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 600 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 610 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 620 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 630 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 640 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 650 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 660 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 670 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 680 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 690 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 700 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 710 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 720 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 730 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 740 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 750 */ 271, 271, 271, 271, 271, }; -#define YY_SHIFT_COUNT (244) +#define YY_SHIFT_COUNT (243) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (540) +#define YY_SHIFT_MAX (535) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 144, 24, 134, 191, 235, 49, 49, 49, 49, 49, - /* 10 */ 49, 0, 22, 235, 284, 284, 284, 106, 49, 49, - /* 20 */ 49, 49, 49, 161, 4, 4, 554, 201, 235, 235, - /* 30 */ 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - /* 40 */ 235, 235, 235, 235, 235, 284, 284, 2, 2, 2, - /* 50 */ 2, 2, 2, 43, 2, 225, 49, 49, 49, 49, - /* 60 */ 101, 101, 157, 49, 49, 49, 49, 49, 49, 49, - /* 70 */ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - /* 80 */ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - /* 90 */ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - /* 100 */ 272, 333, 333, 286, 286, 333, 282, 298, 310, 316, - /* 110 */ 313, 319, 321, 323, 311, 272, 333, 333, 362, 362, - /* 120 */ 333, 354, 356, 391, 361, 360, 392, 365, 368, 333, - /* 130 */ 373, 333, 373, 554, 554, 27, 67, 67, 67, 127, - /* 140 */ 152, 226, 226, 226, 181, 265, 265, 265, 265, 241, - /* 150 */ 255, 39, 60, 8, 8, 96, 172, 192, 228, 229, - /* 160 */ 236, 167, 290, 309, 142, 221, 209, 237, 238, 239, - /* 170 */ 185, 218, 344, 345, 281, 446, 317, 449, 450, 320, - /* 180 */ 452, 453, 374, 355, 353, 384, 377, 382, 387, 389, - /* 190 */ 488, 393, 390, 394, 395, 376, 396, 379, 397, 399, - /* 200 */ 402, 401, 404, 403, 423, 487, 500, 501, 502, 503, - /* 210 */ 504, 434, 496, 440, 497, 385, 386, 410, 512, 513, - /* 220 */ 419, 421, 410, 516, 517, 518, 519, 520, 521, 522, - /* 230 */ 523, 524, 525, 526, 527, 528, 529, 530, 432, 461, - /* 240 */ 531, 532, 479, 481, 540, + /* 0 */ 137, 49, 128, 184, 232, 179, 179, 179, 179, 179, + /* 10 */ 179, 0, 22, 232, 13, 13, 13, 100, 179, 179, + /* 20 */ 179, 179, 179, 189, 4, 4, 549, 194, 232, 232, + /* 30 */ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + /* 40 */ 232, 232, 232, 232, 232, 13, 13, 2, 2, 2, + /* 50 */ 2, 2, 2, 11, 2, 149, 179, 179, 179, 179, + /* 60 */ 148, 148, 21, 179, 179, 179, 179, 179, 179, 179, + /* 70 */ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + /* 80 */ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + /* 90 */ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + /* 100 */ 284, 336, 336, 290, 290, 336, 299, 301, 307, 313, + /* 110 */ 310, 316, 318, 320, 308, 284, 336, 336, 357, 357, + /* 120 */ 336, 349, 351, 386, 356, 355, 385, 358, 361, 336, + /* 130 */ 366, 336, 366, 549, 549, 27, 67, 67, 67, 94, + /* 140 */ 145, 218, 218, 218, 207, 246, 246, 246, 246, 222, + /* 150 */ 234, 185, 41, 221, 221, 216, 214, 220, 223, 225, + /* 160 */ 228, 263, 304, 305, 236, 211, 229, 240, 241, 247, + /* 170 */ 208, 219, 347, 348, 285, 437, 309, 438, 440, 312, + /* 180 */ 443, 445, 365, 326, 350, 354, 352, 360, 359, 362, + /* 190 */ 460, 389, 390, 392, 388, 374, 391, 378, 394, 397, + /* 200 */ 398, 364, 399, 400, 426, 490, 496, 497, 498, 499, + /* 210 */ 500, 430, 492, 436, 493, 381, 382, 409, 508, 509, + /* 220 */ 416, 418, 409, 512, 513, 514, 515, 516, 517, 518, + /* 230 */ 519, 520, 521, 522, 523, 524, 525, 428, 456, 526, + /* 240 */ 527, 474, 476, 535, }; #define YY_REDUCE_COUNT (134) -#define YY_REDUCE_MIN (-260) -#define YY_REDUCE_MAX (268) +#define YY_REDUCE_MIN (-241) +#define YY_REDUCE_MAX (273) static const short yy_reduce_ofst[] = { - /* 0 */ -204, -101, 44, -260, -252, -211, -181, -149, -148, -122, - /* 10 */ -64, -104, -61, -254, -199, -66, -44, -49, -48, -36, - /* 20 */ -12, 15, 47, -212, 63, 70, 13, -247, -240, -230, - /* 30 */ -176, -172, -154, -138, -53, 5, 25, 50, 65, 73, - /* 40 */ 93, 94, 95, 97, 99, 110, 114, 120, 121, 122, - /* 50 */ 123, 124, 125, 126, 128, 129, 158, 162, 163, 165, - /* 60 */ 103, 108, 130, 168, 170, 171, 173, 174, 175, 176, - /* 70 */ 177, 179, 180, 182, 183, 184, 186, 187, 188, 189, - /* 80 */ 190, 193, 194, 195, 196, 197, 198, 199, 200, 202, - /* 90 */ 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, - /* 100 */ 137, 214, 215, 138, 147, 216, 166, 178, 217, 219, - /* 110 */ 222, 224, 220, 227, 230, 223, 231, 232, 233, 234, - /* 120 */ 240, 242, 245, 243, 244, 248, 251, 254, 246, 247, - /* 130 */ 249, 268, 250, 266, 252, + /* 0 */ -202, -79, -226, -211, -173, -103, -62, -120, -34, -33, + /* 10 */ -13, -147, -180, -171, -59, -8, 64, -128, 43, -16, + /* 20 */ 30, -208, -160, 12, 80, 90, -161, -241, -215, -203, + /* 30 */ -198, -157, -96, -70, -68, -35, -24, -11, 57, 61, + /* 40 */ 65, 69, 75, 78, 85, 105, 113, 119, 120, 121, + /* 50 */ 122, 123, 124, 125, 127, 126, 156, 159, 161, 162, + /* 60 */ 106, 107, 129, 165, 166, 168, 169, 170, 171, 172, + /* 70 */ 173, 174, 175, 176, 177, 178, 180, 181, 182, 183, + /* 80 */ 186, 187, 188, 190, 191, 192, 193, 195, 196, 197, + /* 90 */ 198, 199, 200, 201, 202, 203, 204, 205, 206, 209, + /* 100 */ 150, 210, 212, 141, 154, 213, 163, 215, 217, 224, + /* 110 */ 226, 230, 233, 227, 231, 237, 235, 238, 239, 242, + /* 120 */ 244, 243, 245, 250, 248, 252, 255, 249, 258, 251, + /* 130 */ 253, 272, 254, 269, 273, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 635, 687, 676, 855, 855, 635, 635, 635, 635, 635, - /* 10 */ 635, 783, 653, 855, 635, 635, 635, 635, 635, 635, - /* 20 */ 635, 635, 635, 689, 689, 689, 778, 635, 635, 635, - /* 30 */ 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, - /* 40 */ 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, - /* 50 */ 635, 635, 635, 635, 635, 635, 635, 785, 787, 635, - /* 60 */ 804, 804, 776, 635, 635, 635, 635, 635, 635, 635, - /* 70 */ 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, - /* 80 */ 635, 674, 635, 672, 635, 635, 635, 635, 635, 635, - /* 90 */ 635, 635, 635, 635, 635, 635, 635, 661, 635, 635, - /* 100 */ 635, 655, 655, 635, 635, 655, 811, 815, 809, 797, - /* 110 */ 805, 796, 792, 791, 819, 635, 655, 655, 684, 684, - /* 120 */ 655, 705, 703, 701, 693, 699, 695, 697, 691, 655, - /* 130 */ 682, 655, 682, 722, 737, 635, 820, 854, 810, 838, - /* 140 */ 837, 850, 844, 843, 635, 842, 841, 840, 839, 635, - /* 150 */ 635, 635, 635, 846, 845, 635, 635, 635, 635, 635, - /* 160 */ 635, 635, 635, 635, 822, 816, 812, 635, 635, 635, - /* 170 */ 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, - /* 180 */ 635, 635, 635, 635, 775, 635, 635, 784, 635, 635, - /* 190 */ 635, 635, 635, 635, 806, 635, 798, 635, 635, 635, - /* 200 */ 635, 635, 635, 752, 635, 635, 635, 635, 635, 635, - /* 210 */ 635, 635, 635, 635, 635, 635, 635, 859, 635, 635, - /* 220 */ 635, 746, 857, 635, 635, 635, 635, 635, 635, 635, - /* 230 */ 635, 635, 635, 635, 635, 635, 635, 635, 708, 635, - /* 240 */ 659, 657, 635, 651, 635, + /* 0 */ 628, 680, 669, 845, 845, 628, 628, 628, 628, 628, + /* 10 */ 628, 773, 646, 845, 628, 628, 628, 628, 628, 628, + /* 20 */ 628, 628, 628, 682, 682, 682, 768, 628, 628, 628, + /* 30 */ 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, + /* 40 */ 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, + /* 50 */ 628, 628, 628, 628, 628, 628, 628, 775, 777, 628, + /* 60 */ 794, 794, 766, 628, 628, 628, 628, 628, 628, 628, + /* 70 */ 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, + /* 80 */ 628, 667, 628, 665, 628, 628, 628, 628, 628, 628, + /* 90 */ 628, 628, 628, 628, 628, 628, 628, 654, 628, 628, + /* 100 */ 628, 648, 648, 628, 628, 648, 801, 805, 799, 787, + /* 110 */ 795, 786, 782, 781, 809, 628, 648, 648, 677, 677, + /* 120 */ 648, 698, 696, 694, 686, 692, 688, 690, 684, 648, + /* 130 */ 675, 648, 675, 714, 728, 628, 810, 844, 800, 828, + /* 140 */ 827, 840, 834, 833, 628, 832, 831, 830, 829, 628, + /* 150 */ 628, 628, 628, 836, 835, 628, 628, 628, 628, 628, + /* 160 */ 628, 628, 628, 628, 812, 806, 802, 628, 628, 628, + /* 170 */ 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, + /* 180 */ 628, 628, 628, 628, 765, 628, 628, 774, 628, 628, + /* 190 */ 628, 628, 628, 628, 796, 628, 788, 628, 628, 628, + /* 200 */ 628, 628, 628, 742, 628, 628, 628, 628, 628, 628, + /* 210 */ 628, 628, 628, 628, 628, 628, 628, 849, 628, 628, + /* 220 */ 628, 736, 847, 628, 628, 628, 628, 628, 628, 628, + /* 230 */ 628, 628, 628, 628, 628, 628, 628, 701, 628, 652, + /* 240 */ 650, 628, 644, 628, }; /********** End of lemon-generated parsing tables *****************************/ @@ -520,7 +518,6 @@ static const YYCODETYPE yyFallback[] = { 0, /* CONNS => nothing */ 0, /* STATE => nothing */ 0, /* KEEP => nothing */ - 0, /* MAXTABLES => nothing */ 0, /* CACHE => nothing */ 0, /* REPLICA => nothing */ 0, /* QUORUM => nothing */ @@ -813,193 +810,191 @@ static const char *const yyTokenName[] = { /* 83 */ "CONNS", /* 84 */ "STATE", /* 85 */ "KEEP", - /* 86 */ "MAXTABLES", - /* 87 */ "CACHE", - /* 88 */ "REPLICA", - /* 89 */ "QUORUM", - /* 90 */ "DAYS", - /* 91 */ "MINROWS", - /* 92 */ "MAXROWS", - /* 93 */ "BLOCKS", - /* 94 */ "CTIME", - /* 95 */ "WAL", - /* 96 */ "FSYNC", - /* 97 */ "COMP", - /* 98 */ "PRECISION", - /* 99 */ "LP", - /* 100 */ "RP", - /* 101 */ "TAGS", - /* 102 */ "USING", - /* 103 */ "AS", - /* 104 */ "COMMA", - /* 105 */ "NULL", - /* 106 */ "SELECT", - /* 107 */ "UNION", - /* 108 */ "ALL", - /* 109 */ "FROM", - /* 110 */ "VARIABLE", - /* 111 */ "INTERVAL", - /* 112 */ "FILL", - /* 113 */ "SLIDING", - /* 114 */ "ORDER", - /* 115 */ "BY", - /* 116 */ "ASC", - /* 117 */ "DESC", - /* 118 */ "GROUP", - /* 119 */ "HAVING", - /* 120 */ "LIMIT", - /* 121 */ "OFFSET", - /* 122 */ "SLIMIT", - /* 123 */ "SOFFSET", - /* 124 */ "WHERE", - /* 125 */ "NOW", - /* 126 */ "RESET", - /* 127 */ "QUERY", - /* 128 */ "ADD", - /* 129 */ "COLUMN", - /* 130 */ "TAG", - /* 131 */ "CHANGE", - /* 132 */ "SET", - /* 133 */ "KILL", - /* 134 */ "CONNECTION", - /* 135 */ "STREAM", - /* 136 */ "COLON", - /* 137 */ "ABORT", - /* 138 */ "AFTER", - /* 139 */ "ATTACH", - /* 140 */ "BEFORE", - /* 141 */ "BEGIN", - /* 142 */ "CASCADE", - /* 143 */ "CLUSTER", - /* 144 */ "CONFLICT", - /* 145 */ "COPY", - /* 146 */ "DEFERRED", - /* 147 */ "DELIMITERS", - /* 148 */ "DETACH", - /* 149 */ "EACH", - /* 150 */ "END", - /* 151 */ "EXPLAIN", - /* 152 */ "FAIL", - /* 153 */ "FOR", - /* 154 */ "IGNORE", - /* 155 */ "IMMEDIATE", - /* 156 */ "INITIALLY", - /* 157 */ "INSTEAD", - /* 158 */ "MATCH", - /* 159 */ "KEY", - /* 160 */ "OF", - /* 161 */ "RAISE", - /* 162 */ "REPLACE", - /* 163 */ "RESTRICT", - /* 164 */ "ROW", - /* 165 */ "STATEMENT", - /* 166 */ "TRIGGER", - /* 167 */ "VIEW", - /* 168 */ "COUNT", - /* 169 */ "SUM", - /* 170 */ "AVG", - /* 171 */ "MIN", - /* 172 */ "MAX", - /* 173 */ "FIRST", - /* 174 */ "LAST", - /* 175 */ "TOP", - /* 176 */ "BOTTOM", - /* 177 */ "STDDEV", - /* 178 */ "PERCENTILE", - /* 179 */ "APERCENTILE", - /* 180 */ "LEASTSQUARES", - /* 181 */ "HISTOGRAM", - /* 182 */ "DIFF", - /* 183 */ "SPREAD", - /* 184 */ "TWA", - /* 185 */ "INTERP", - /* 186 */ "LAST_ROW", - /* 187 */ "RATE", - /* 188 */ "IRATE", - /* 189 */ "SUM_RATE", - /* 190 */ "SUM_IRATE", - /* 191 */ "AVG_RATE", - /* 192 */ "AVG_IRATE", - /* 193 */ "TBID", - /* 194 */ "SEMI", - /* 195 */ "NONE", - /* 196 */ "PREV", - /* 197 */ "LINEAR", - /* 198 */ "IMPORT", - /* 199 */ "METRIC", - /* 200 */ "TBNAME", - /* 201 */ "JOIN", - /* 202 */ "METRICS", - /* 203 */ "STABLE", - /* 204 */ "INSERT", - /* 205 */ "INTO", - /* 206 */ "VALUES", - /* 207 */ "error", - /* 208 */ "program", - /* 209 */ "cmd", - /* 210 */ "dbPrefix", - /* 211 */ "ids", - /* 212 */ "cpxName", - /* 213 */ "ifexists", - /* 214 */ "alter_db_optr", - /* 215 */ "acct_optr", - /* 216 */ "ifnotexists", - /* 217 */ "db_optr", - /* 218 */ "pps", - /* 219 */ "tseries", - /* 220 */ "dbs", - /* 221 */ "streams", - /* 222 */ "storage", - /* 223 */ "qtime", - /* 224 */ "users", - /* 225 */ "conns", - /* 226 */ "state", - /* 227 */ "keep", - /* 228 */ "tagitemlist", - /* 229 */ "tables", - /* 230 */ "cache", - /* 231 */ "replica", - /* 232 */ "quorum", - /* 233 */ "days", - /* 234 */ "minrows", - /* 235 */ "maxrows", - /* 236 */ "blocks", - /* 237 */ "ctime", - /* 238 */ "wal", - /* 239 */ "fsync", - /* 240 */ "comp", - /* 241 */ "prec", - /* 242 */ "typename", - /* 243 */ "signed", - /* 244 */ "create_table_args", - /* 245 */ "columnlist", - /* 246 */ "select", - /* 247 */ "column", - /* 248 */ "tagitem", - /* 249 */ "selcollist", - /* 250 */ "from", - /* 251 */ "where_opt", - /* 252 */ "interval_opt", - /* 253 */ "fill_opt", - /* 254 */ "sliding_opt", - /* 255 */ "groupby_opt", - /* 256 */ "orderby_opt", - /* 257 */ "having_opt", - /* 258 */ "slimit_opt", - /* 259 */ "limit_opt", - /* 260 */ "union", - /* 261 */ "sclp", - /* 262 */ "expr", - /* 263 */ "as", - /* 264 */ "tablelist", - /* 265 */ "tmvar", - /* 266 */ "sortlist", - /* 267 */ "sortitem", - /* 268 */ "item", - /* 269 */ "sortorder", - /* 270 */ "grouplist", - /* 271 */ "exprlist", - /* 272 */ "expritem", + /* 86 */ "CACHE", + /* 87 */ "REPLICA", + /* 88 */ "QUORUM", + /* 89 */ "DAYS", + /* 90 */ "MINROWS", + /* 91 */ "MAXROWS", + /* 92 */ "BLOCKS", + /* 93 */ "CTIME", + /* 94 */ "WAL", + /* 95 */ "FSYNC", + /* 96 */ "COMP", + /* 97 */ "PRECISION", + /* 98 */ "LP", + /* 99 */ "RP", + /* 100 */ "TAGS", + /* 101 */ "USING", + /* 102 */ "AS", + /* 103 */ "COMMA", + /* 104 */ "NULL", + /* 105 */ "SELECT", + /* 106 */ "UNION", + /* 107 */ "ALL", + /* 108 */ "FROM", + /* 109 */ "VARIABLE", + /* 110 */ "INTERVAL", + /* 111 */ "FILL", + /* 112 */ "SLIDING", + /* 113 */ "ORDER", + /* 114 */ "BY", + /* 115 */ "ASC", + /* 116 */ "DESC", + /* 117 */ "GROUP", + /* 118 */ "HAVING", + /* 119 */ "LIMIT", + /* 120 */ "OFFSET", + /* 121 */ "SLIMIT", + /* 122 */ "SOFFSET", + /* 123 */ "WHERE", + /* 124 */ "NOW", + /* 125 */ "RESET", + /* 126 */ "QUERY", + /* 127 */ "ADD", + /* 128 */ "COLUMN", + /* 129 */ "TAG", + /* 130 */ "CHANGE", + /* 131 */ "SET", + /* 132 */ "KILL", + /* 133 */ "CONNECTION", + /* 134 */ "STREAM", + /* 135 */ "COLON", + /* 136 */ "ABORT", + /* 137 */ "AFTER", + /* 138 */ "ATTACH", + /* 139 */ "BEFORE", + /* 140 */ "BEGIN", + /* 141 */ "CASCADE", + /* 142 */ "CLUSTER", + /* 143 */ "CONFLICT", + /* 144 */ "COPY", + /* 145 */ "DEFERRED", + /* 146 */ "DELIMITERS", + /* 147 */ "DETACH", + /* 148 */ "EACH", + /* 149 */ "END", + /* 150 */ "EXPLAIN", + /* 151 */ "FAIL", + /* 152 */ "FOR", + /* 153 */ "IGNORE", + /* 154 */ "IMMEDIATE", + /* 155 */ "INITIALLY", + /* 156 */ "INSTEAD", + /* 157 */ "MATCH", + /* 158 */ "KEY", + /* 159 */ "OF", + /* 160 */ "RAISE", + /* 161 */ "REPLACE", + /* 162 */ "RESTRICT", + /* 163 */ "ROW", + /* 164 */ "STATEMENT", + /* 165 */ "TRIGGER", + /* 166 */ "VIEW", + /* 167 */ "COUNT", + /* 168 */ "SUM", + /* 169 */ "AVG", + /* 170 */ "MIN", + /* 171 */ "MAX", + /* 172 */ "FIRST", + /* 173 */ "LAST", + /* 174 */ "TOP", + /* 175 */ "BOTTOM", + /* 176 */ "STDDEV", + /* 177 */ "PERCENTILE", + /* 178 */ "APERCENTILE", + /* 179 */ "LEASTSQUARES", + /* 180 */ "HISTOGRAM", + /* 181 */ "DIFF", + /* 182 */ "SPREAD", + /* 183 */ "TWA", + /* 184 */ "INTERP", + /* 185 */ "LAST_ROW", + /* 186 */ "RATE", + /* 187 */ "IRATE", + /* 188 */ "SUM_RATE", + /* 189 */ "SUM_IRATE", + /* 190 */ "AVG_RATE", + /* 191 */ "AVG_IRATE", + /* 192 */ "TBID", + /* 193 */ "SEMI", + /* 194 */ "NONE", + /* 195 */ "PREV", + /* 196 */ "LINEAR", + /* 197 */ "IMPORT", + /* 198 */ "METRIC", + /* 199 */ "TBNAME", + /* 200 */ "JOIN", + /* 201 */ "METRICS", + /* 202 */ "STABLE", + /* 203 */ "INSERT", + /* 204 */ "INTO", + /* 205 */ "VALUES", + /* 206 */ "error", + /* 207 */ "program", + /* 208 */ "cmd", + /* 209 */ "dbPrefix", + /* 210 */ "ids", + /* 211 */ "cpxName", + /* 212 */ "ifexists", + /* 213 */ "alter_db_optr", + /* 214 */ "acct_optr", + /* 215 */ "ifnotexists", + /* 216 */ "db_optr", + /* 217 */ "pps", + /* 218 */ "tseries", + /* 219 */ "dbs", + /* 220 */ "streams", + /* 221 */ "storage", + /* 222 */ "qtime", + /* 223 */ "users", + /* 224 */ "conns", + /* 225 */ "state", + /* 226 */ "keep", + /* 227 */ "tagitemlist", + /* 228 */ "cache", + /* 229 */ "replica", + /* 230 */ "quorum", + /* 231 */ "days", + /* 232 */ "minrows", + /* 233 */ "maxrows", + /* 234 */ "blocks", + /* 235 */ "ctime", + /* 236 */ "wal", + /* 237 */ "fsync", + /* 238 */ "comp", + /* 239 */ "prec", + /* 240 */ "typename", + /* 241 */ "signed", + /* 242 */ "create_table_args", + /* 243 */ "columnlist", + /* 244 */ "select", + /* 245 */ "column", + /* 246 */ "tagitem", + /* 247 */ "selcollist", + /* 248 */ "from", + /* 249 */ "where_opt", + /* 250 */ "interval_opt", + /* 251 */ "fill_opt", + /* 252 */ "sliding_opt", + /* 253 */ "groupby_opt", + /* 254 */ "orderby_opt", + /* 255 */ "having_opt", + /* 256 */ "slimit_opt", + /* 257 */ "limit_opt", + /* 258 */ "union", + /* 259 */ "sclp", + /* 260 */ "expr", + /* 261 */ "as", + /* 262 */ "tablelist", + /* 263 */ "tmvar", + /* 264 */ "sortlist", + /* 265 */ "sortitem", + /* 266 */ "item", + /* 267 */ "sortorder", + /* 268 */ "grouplist", + /* 269 */ "exprlist", + /* 270 */ "expritem", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -1078,163 +1073,160 @@ static const char *const yyRuleName[] = { /* 68 */ "state ::= STATE ids", /* 69 */ "acct_optr ::= pps tseries storage streams qtime dbs users conns state", /* 70 */ "keep ::= KEEP tagitemlist", - /* 71 */ "tables ::= MAXTABLES INTEGER", - /* 72 */ "cache ::= CACHE INTEGER", - /* 73 */ "replica ::= REPLICA INTEGER", - /* 74 */ "quorum ::= QUORUM INTEGER", - /* 75 */ "days ::= DAYS INTEGER", - /* 76 */ "minrows ::= MINROWS INTEGER", - /* 77 */ "maxrows ::= MAXROWS INTEGER", - /* 78 */ "blocks ::= BLOCKS INTEGER", - /* 79 */ "ctime ::= CTIME INTEGER", - /* 80 */ "wal ::= WAL INTEGER", - /* 81 */ "fsync ::= FSYNC INTEGER", - /* 82 */ "comp ::= COMP INTEGER", - /* 83 */ "prec ::= PRECISION STRING", - /* 84 */ "db_optr ::=", - /* 85 */ "db_optr ::= db_optr tables", - /* 86 */ "db_optr ::= db_optr cache", - /* 87 */ "db_optr ::= db_optr replica", - /* 88 */ "db_optr ::= db_optr quorum", - /* 89 */ "db_optr ::= db_optr days", - /* 90 */ "db_optr ::= db_optr minrows", - /* 91 */ "db_optr ::= db_optr maxrows", - /* 92 */ "db_optr ::= db_optr blocks", - /* 93 */ "db_optr ::= db_optr ctime", - /* 94 */ "db_optr ::= db_optr wal", - /* 95 */ "db_optr ::= db_optr fsync", - /* 96 */ "db_optr ::= db_optr comp", - /* 97 */ "db_optr ::= db_optr prec", - /* 98 */ "db_optr ::= db_optr keep", - /* 99 */ "alter_db_optr ::=", - /* 100 */ "alter_db_optr ::= alter_db_optr replica", - /* 101 */ "alter_db_optr ::= alter_db_optr quorum", - /* 102 */ "alter_db_optr ::= alter_db_optr tables", - /* 103 */ "alter_db_optr ::= alter_db_optr keep", - /* 104 */ "alter_db_optr ::= alter_db_optr blocks", - /* 105 */ "alter_db_optr ::= alter_db_optr comp", - /* 106 */ "alter_db_optr ::= alter_db_optr wal", - /* 107 */ "alter_db_optr ::= alter_db_optr fsync", - /* 108 */ "typename ::= ids", - /* 109 */ "typename ::= ids LP signed RP", - /* 110 */ "signed ::= INTEGER", - /* 111 */ "signed ::= PLUS INTEGER", - /* 112 */ "signed ::= MINUS INTEGER", - /* 113 */ "cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args", - /* 114 */ "create_table_args ::= LP columnlist RP", - /* 115 */ "create_table_args ::= LP columnlist RP TAGS LP columnlist RP", - /* 116 */ "create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP", - /* 117 */ "create_table_args ::= AS select", - /* 118 */ "columnlist ::= columnlist COMMA column", - /* 119 */ "columnlist ::= column", - /* 120 */ "column ::= ids typename", - /* 121 */ "tagitemlist ::= tagitemlist COMMA tagitem", - /* 122 */ "tagitemlist ::= tagitem", - /* 123 */ "tagitem ::= INTEGER", - /* 124 */ "tagitem ::= FLOAT", - /* 125 */ "tagitem ::= STRING", - /* 126 */ "tagitem ::= BOOL", - /* 127 */ "tagitem ::= NULL", - /* 128 */ "tagitem ::= MINUS INTEGER", - /* 129 */ "tagitem ::= MINUS FLOAT", - /* 130 */ "tagitem ::= PLUS INTEGER", - /* 131 */ "tagitem ::= PLUS FLOAT", - /* 132 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt", - /* 133 */ "union ::= select", - /* 134 */ "union ::= LP union RP", - /* 135 */ "union ::= union UNION ALL select", - /* 136 */ "union ::= union UNION ALL LP select RP", - /* 137 */ "cmd ::= union", - /* 138 */ "select ::= SELECT selcollist", - /* 139 */ "sclp ::= selcollist COMMA", - /* 140 */ "sclp ::=", - /* 141 */ "selcollist ::= sclp expr as", - /* 142 */ "selcollist ::= sclp STAR", - /* 143 */ "as ::= AS ids", - /* 144 */ "as ::= ids", - /* 145 */ "as ::=", - /* 146 */ "from ::= FROM tablelist", - /* 147 */ "tablelist ::= ids cpxName", - /* 148 */ "tablelist ::= ids cpxName ids", - /* 149 */ "tablelist ::= tablelist COMMA ids cpxName", - /* 150 */ "tablelist ::= tablelist COMMA ids cpxName ids", - /* 151 */ "tmvar ::= VARIABLE", - /* 152 */ "interval_opt ::= INTERVAL LP tmvar RP", - /* 153 */ "interval_opt ::=", - /* 154 */ "fill_opt ::=", - /* 155 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP", - /* 156 */ "fill_opt ::= FILL LP ID RP", - /* 157 */ "sliding_opt ::= SLIDING LP tmvar RP", - /* 158 */ "sliding_opt ::=", - /* 159 */ "orderby_opt ::=", - /* 160 */ "orderby_opt ::= ORDER BY sortlist", - /* 161 */ "sortlist ::= sortlist COMMA item sortorder", - /* 162 */ "sortlist ::= item sortorder", - /* 163 */ "item ::= ids cpxName", - /* 164 */ "sortorder ::= ASC", - /* 165 */ "sortorder ::= DESC", - /* 166 */ "sortorder ::=", - /* 167 */ "groupby_opt ::=", - /* 168 */ "groupby_opt ::= GROUP BY grouplist", - /* 169 */ "grouplist ::= grouplist COMMA item", - /* 170 */ "grouplist ::= item", - /* 171 */ "having_opt ::=", - /* 172 */ "having_opt ::= HAVING expr", - /* 173 */ "limit_opt ::=", - /* 174 */ "limit_opt ::= LIMIT signed", - /* 175 */ "limit_opt ::= LIMIT signed OFFSET signed", - /* 176 */ "limit_opt ::= LIMIT signed COMMA signed", - /* 177 */ "slimit_opt ::=", - /* 178 */ "slimit_opt ::= SLIMIT signed", - /* 179 */ "slimit_opt ::= SLIMIT signed SOFFSET signed", - /* 180 */ "slimit_opt ::= SLIMIT signed COMMA signed", - /* 181 */ "where_opt ::=", - /* 182 */ "where_opt ::= WHERE expr", - /* 183 */ "expr ::= LP expr RP", - /* 184 */ "expr ::= ID", - /* 185 */ "expr ::= ID DOT ID", - /* 186 */ "expr ::= ID DOT STAR", - /* 187 */ "expr ::= INTEGER", - /* 188 */ "expr ::= MINUS INTEGER", - /* 189 */ "expr ::= PLUS INTEGER", - /* 190 */ "expr ::= FLOAT", - /* 191 */ "expr ::= MINUS FLOAT", - /* 192 */ "expr ::= PLUS FLOAT", - /* 193 */ "expr ::= STRING", - /* 194 */ "expr ::= NOW", - /* 195 */ "expr ::= VARIABLE", - /* 196 */ "expr ::= BOOL", - /* 197 */ "expr ::= ID LP exprlist RP", - /* 198 */ "expr ::= ID LP STAR RP", - /* 199 */ "expr ::= expr AND expr", - /* 200 */ "expr ::= expr OR expr", - /* 201 */ "expr ::= expr LT expr", - /* 202 */ "expr ::= expr GT expr", - /* 203 */ "expr ::= expr LE expr", - /* 204 */ "expr ::= expr GE expr", - /* 205 */ "expr ::= expr NE expr", - /* 206 */ "expr ::= expr EQ expr", - /* 207 */ "expr ::= expr PLUS expr", - /* 208 */ "expr ::= expr MINUS expr", - /* 209 */ "expr ::= expr STAR expr", - /* 210 */ "expr ::= expr SLASH expr", - /* 211 */ "expr ::= expr REM expr", - /* 212 */ "expr ::= expr LIKE expr", - /* 213 */ "expr ::= expr IN LP exprlist RP", - /* 214 */ "exprlist ::= exprlist COMMA expritem", - /* 215 */ "exprlist ::= expritem", - /* 216 */ "expritem ::= expr", - /* 217 */ "expritem ::=", - /* 218 */ "cmd ::= RESET QUERY CACHE", - /* 219 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist", - /* 220 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids", - /* 221 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist", - /* 222 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids", - /* 223 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids", - /* 224 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem", - /* 225 */ "cmd ::= KILL CONNECTION INTEGER", - /* 226 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER", - /* 227 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER", + /* 71 */ "cache ::= CACHE INTEGER", + /* 72 */ "replica ::= REPLICA INTEGER", + /* 73 */ "quorum ::= QUORUM INTEGER", + /* 74 */ "days ::= DAYS INTEGER", + /* 75 */ "minrows ::= MINROWS INTEGER", + /* 76 */ "maxrows ::= MAXROWS INTEGER", + /* 77 */ "blocks ::= BLOCKS INTEGER", + /* 78 */ "ctime ::= CTIME INTEGER", + /* 79 */ "wal ::= WAL INTEGER", + /* 80 */ "fsync ::= FSYNC INTEGER", + /* 81 */ "comp ::= COMP INTEGER", + /* 82 */ "prec ::= PRECISION STRING", + /* 83 */ "db_optr ::=", + /* 84 */ "db_optr ::= db_optr cache", + /* 85 */ "db_optr ::= db_optr replica", + /* 86 */ "db_optr ::= db_optr quorum", + /* 87 */ "db_optr ::= db_optr days", + /* 88 */ "db_optr ::= db_optr minrows", + /* 89 */ "db_optr ::= db_optr maxrows", + /* 90 */ "db_optr ::= db_optr blocks", + /* 91 */ "db_optr ::= db_optr ctime", + /* 92 */ "db_optr ::= db_optr wal", + /* 93 */ "db_optr ::= db_optr fsync", + /* 94 */ "db_optr ::= db_optr comp", + /* 95 */ "db_optr ::= db_optr prec", + /* 96 */ "db_optr ::= db_optr keep", + /* 97 */ "alter_db_optr ::=", + /* 98 */ "alter_db_optr ::= alter_db_optr replica", + /* 99 */ "alter_db_optr ::= alter_db_optr quorum", + /* 100 */ "alter_db_optr ::= alter_db_optr keep", + /* 101 */ "alter_db_optr ::= alter_db_optr blocks", + /* 102 */ "alter_db_optr ::= alter_db_optr comp", + /* 103 */ "alter_db_optr ::= alter_db_optr wal", + /* 104 */ "alter_db_optr ::= alter_db_optr fsync", + /* 105 */ "typename ::= ids", + /* 106 */ "typename ::= ids LP signed RP", + /* 107 */ "signed ::= INTEGER", + /* 108 */ "signed ::= PLUS INTEGER", + /* 109 */ "signed ::= MINUS INTEGER", + /* 110 */ "cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args", + /* 111 */ "create_table_args ::= LP columnlist RP", + /* 112 */ "create_table_args ::= LP columnlist RP TAGS LP columnlist RP", + /* 113 */ "create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP", + /* 114 */ "create_table_args ::= AS select", + /* 115 */ "columnlist ::= columnlist COMMA column", + /* 116 */ "columnlist ::= column", + /* 117 */ "column ::= ids typename", + /* 118 */ "tagitemlist ::= tagitemlist COMMA tagitem", + /* 119 */ "tagitemlist ::= tagitem", + /* 120 */ "tagitem ::= INTEGER", + /* 121 */ "tagitem ::= FLOAT", + /* 122 */ "tagitem ::= STRING", + /* 123 */ "tagitem ::= BOOL", + /* 124 */ "tagitem ::= NULL", + /* 125 */ "tagitem ::= MINUS INTEGER", + /* 126 */ "tagitem ::= MINUS FLOAT", + /* 127 */ "tagitem ::= PLUS INTEGER", + /* 128 */ "tagitem ::= PLUS FLOAT", + /* 129 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt", + /* 130 */ "union ::= select", + /* 131 */ "union ::= LP union RP", + /* 132 */ "union ::= union UNION ALL select", + /* 133 */ "union ::= union UNION ALL LP select RP", + /* 134 */ "cmd ::= union", + /* 135 */ "select ::= SELECT selcollist", + /* 136 */ "sclp ::= selcollist COMMA", + /* 137 */ "sclp ::=", + /* 138 */ "selcollist ::= sclp expr as", + /* 139 */ "selcollist ::= sclp STAR", + /* 140 */ "as ::= AS ids", + /* 141 */ "as ::= ids", + /* 142 */ "as ::=", + /* 143 */ "from ::= FROM tablelist", + /* 144 */ "tablelist ::= ids cpxName", + /* 145 */ "tablelist ::= ids cpxName ids", + /* 146 */ "tablelist ::= tablelist COMMA ids cpxName", + /* 147 */ "tablelist ::= tablelist COMMA ids cpxName ids", + /* 148 */ "tmvar ::= VARIABLE", + /* 149 */ "interval_opt ::= INTERVAL LP tmvar RP", + /* 150 */ "interval_opt ::=", + /* 151 */ "fill_opt ::=", + /* 152 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP", + /* 153 */ "fill_opt ::= FILL LP ID RP", + /* 154 */ "sliding_opt ::= SLIDING LP tmvar RP", + /* 155 */ "sliding_opt ::=", + /* 156 */ "orderby_opt ::=", + /* 157 */ "orderby_opt ::= ORDER BY sortlist", + /* 158 */ "sortlist ::= sortlist COMMA item sortorder", + /* 159 */ "sortlist ::= item sortorder", + /* 160 */ "item ::= ids cpxName", + /* 161 */ "sortorder ::= ASC", + /* 162 */ "sortorder ::= DESC", + /* 163 */ "sortorder ::=", + /* 164 */ "groupby_opt ::=", + /* 165 */ "groupby_opt ::= GROUP BY grouplist", + /* 166 */ "grouplist ::= grouplist COMMA item", + /* 167 */ "grouplist ::= item", + /* 168 */ "having_opt ::=", + /* 169 */ "having_opt ::= HAVING expr", + /* 170 */ "limit_opt ::=", + /* 171 */ "limit_opt ::= LIMIT signed", + /* 172 */ "limit_opt ::= LIMIT signed OFFSET signed", + /* 173 */ "limit_opt ::= LIMIT signed COMMA signed", + /* 174 */ "slimit_opt ::=", + /* 175 */ "slimit_opt ::= SLIMIT signed", + /* 176 */ "slimit_opt ::= SLIMIT signed SOFFSET signed", + /* 177 */ "slimit_opt ::= SLIMIT signed COMMA signed", + /* 178 */ "where_opt ::=", + /* 179 */ "where_opt ::= WHERE expr", + /* 180 */ "expr ::= LP expr RP", + /* 181 */ "expr ::= ID", + /* 182 */ "expr ::= ID DOT ID", + /* 183 */ "expr ::= ID DOT STAR", + /* 184 */ "expr ::= INTEGER", + /* 185 */ "expr ::= MINUS INTEGER", + /* 186 */ "expr ::= PLUS INTEGER", + /* 187 */ "expr ::= FLOAT", + /* 188 */ "expr ::= MINUS FLOAT", + /* 189 */ "expr ::= PLUS FLOAT", + /* 190 */ "expr ::= STRING", + /* 191 */ "expr ::= NOW", + /* 192 */ "expr ::= VARIABLE", + /* 193 */ "expr ::= BOOL", + /* 194 */ "expr ::= ID LP exprlist RP", + /* 195 */ "expr ::= ID LP STAR RP", + /* 196 */ "expr ::= expr AND expr", + /* 197 */ "expr ::= expr OR expr", + /* 198 */ "expr ::= expr LT expr", + /* 199 */ "expr ::= expr GT expr", + /* 200 */ "expr ::= expr LE expr", + /* 201 */ "expr ::= expr GE expr", + /* 202 */ "expr ::= expr NE expr", + /* 203 */ "expr ::= expr EQ expr", + /* 204 */ "expr ::= expr PLUS expr", + /* 205 */ "expr ::= expr MINUS expr", + /* 206 */ "expr ::= expr STAR expr", + /* 207 */ "expr ::= expr SLASH expr", + /* 208 */ "expr ::= expr REM expr", + /* 209 */ "expr ::= expr LIKE expr", + /* 210 */ "expr ::= expr IN LP exprlist RP", + /* 211 */ "exprlist ::= exprlist COMMA expritem", + /* 212 */ "exprlist ::= expritem", + /* 213 */ "expritem ::= expr", + /* 214 */ "expritem ::=", + /* 215 */ "cmd ::= RESET QUERY CACHE", + /* 216 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist", + /* 217 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids", + /* 218 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist", + /* 219 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids", + /* 220 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids", + /* 221 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem", + /* 222 */ "cmd ::= KILL CONNECTION INTEGER", + /* 223 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER", + /* 224 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER", }; #endif /* NDEBUG */ @@ -1355,50 +1347,50 @@ static void yy_destructor( ** inside the C code. */ /********* Begin destructor definitions ***************************************/ - case 227: /* keep */ - case 228: /* tagitemlist */ - case 253: /* fill_opt */ - case 255: /* groupby_opt */ - case 256: /* orderby_opt */ - case 266: /* sortlist */ - case 270: /* grouplist */ + case 226: /* keep */ + case 227: /* tagitemlist */ + case 251: /* fill_opt */ + case 253: /* groupby_opt */ + case 254: /* orderby_opt */ + case 264: /* sortlist */ + case 268: /* grouplist */ { -tVariantListDestroy((yypminor->yy498)); +tVariantListDestroy((yypminor->yy494)); } break; - case 245: /* columnlist */ + case 243: /* columnlist */ { -tFieldListDestroy((yypminor->yy523)); +tFieldListDestroy((yypminor->yy449)); } break; - case 246: /* select */ + case 244: /* select */ { -doDestroyQuerySql((yypminor->yy414)); +doDestroyQuerySql((yypminor->yy150)); } break; - case 249: /* selcollist */ - case 261: /* sclp */ - case 271: /* exprlist */ + case 247: /* selcollist */ + case 259: /* sclp */ + case 269: /* exprlist */ { -tSQLExprListDestroy((yypminor->yy290)); +tSQLExprListDestroy((yypminor->yy224)); } break; - case 251: /* where_opt */ - case 257: /* having_opt */ - case 262: /* expr */ - case 272: /* expritem */ + case 249: /* where_opt */ + case 255: /* having_opt */ + case 260: /* expr */ + case 270: /* expritem */ { -tSQLExprDestroy((yypminor->yy64)); +tSQLExprDestroy((yypminor->yy66)); } break; - case 260: /* union */ + case 258: /* union */ { -destroyAllSelectClause((yypminor->yy231)); +destroyAllSelectClause((yypminor->yy25)); } break; - case 267: /* sortitem */ + case 265: /* sortitem */ { -tVariantDestroy(&(yypminor->yy134)); +tVariantDestroy(&(yypminor->yy312)); } break; /********* End destructor definitions *****************************************/ @@ -1692,234 +1684,231 @@ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { - { 208, -1 }, /* (0) program ::= cmd */ - { 209, -2 }, /* (1) cmd ::= SHOW DATABASES */ - { 209, -2 }, /* (2) cmd ::= SHOW MNODES */ - { 209, -2 }, /* (3) cmd ::= SHOW DNODES */ - { 209, -2 }, /* (4) cmd ::= SHOW ACCOUNTS */ - { 209, -2 }, /* (5) cmd ::= SHOW USERS */ - { 209, -2 }, /* (6) cmd ::= SHOW MODULES */ - { 209, -2 }, /* (7) cmd ::= SHOW QUERIES */ - { 209, -2 }, /* (8) cmd ::= SHOW CONNECTIONS */ - { 209, -2 }, /* (9) cmd ::= SHOW STREAMS */ - { 209, -2 }, /* (10) cmd ::= SHOW VARIABLES */ - { 209, -2 }, /* (11) cmd ::= SHOW SCORES */ - { 209, -2 }, /* (12) cmd ::= SHOW GRANTS */ - { 209, -2 }, /* (13) cmd ::= SHOW VNODES */ - { 209, -3 }, /* (14) cmd ::= SHOW VNODES IPTOKEN */ - { 210, 0 }, /* (15) dbPrefix ::= */ - { 210, -2 }, /* (16) dbPrefix ::= ids DOT */ - { 212, 0 }, /* (17) cpxName ::= */ - { 212, -2 }, /* (18) cpxName ::= DOT ids */ - { 209, -3 }, /* (19) cmd ::= SHOW dbPrefix TABLES */ - { 209, -5 }, /* (20) cmd ::= SHOW dbPrefix TABLES LIKE ids */ - { 209, -3 }, /* (21) cmd ::= SHOW dbPrefix STABLES */ - { 209, -5 }, /* (22) cmd ::= SHOW dbPrefix STABLES LIKE ids */ - { 209, -3 }, /* (23) cmd ::= SHOW dbPrefix VGROUPS */ - { 209, -4 }, /* (24) cmd ::= SHOW dbPrefix VGROUPS ids */ - { 209, -5 }, /* (25) cmd ::= DROP TABLE ifexists ids cpxName */ - { 209, -4 }, /* (26) cmd ::= DROP DATABASE ifexists ids */ - { 209, -3 }, /* (27) cmd ::= DROP DNODE ids */ - { 209, -3 }, /* (28) cmd ::= DROP USER ids */ - { 209, -3 }, /* (29) cmd ::= DROP ACCOUNT ids */ - { 209, -2 }, /* (30) cmd ::= USE ids */ - { 209, -3 }, /* (31) cmd ::= DESCRIBE ids cpxName */ - { 209, -5 }, /* (32) cmd ::= ALTER USER ids PASS ids */ - { 209, -5 }, /* (33) cmd ::= ALTER USER ids PRIVILEGE ids */ - { 209, -4 }, /* (34) cmd ::= ALTER DNODE ids ids */ - { 209, -5 }, /* (35) cmd ::= ALTER DNODE ids ids ids */ - { 209, -3 }, /* (36) cmd ::= ALTER LOCAL ids */ - { 209, -4 }, /* (37) cmd ::= ALTER LOCAL ids ids */ - { 209, -4 }, /* (38) cmd ::= ALTER DATABASE ids alter_db_optr */ - { 209, -4 }, /* (39) cmd ::= ALTER ACCOUNT ids acct_optr */ - { 209, -6 }, /* (40) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ - { 211, -1 }, /* (41) ids ::= ID */ - { 211, -1 }, /* (42) ids ::= STRING */ - { 213, -2 }, /* (43) ifexists ::= IF EXISTS */ - { 213, 0 }, /* (44) ifexists ::= */ - { 216, -3 }, /* (45) ifnotexists ::= IF NOT EXISTS */ - { 216, 0 }, /* (46) ifnotexists ::= */ - { 209, -3 }, /* (47) cmd ::= CREATE DNODE ids */ - { 209, -6 }, /* (48) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ - { 209, -5 }, /* (49) cmd ::= CREATE DATABASE ifnotexists ids db_optr */ - { 209, -5 }, /* (50) cmd ::= CREATE USER ids PASS ids */ - { 218, 0 }, /* (51) pps ::= */ - { 218, -2 }, /* (52) pps ::= PPS INTEGER */ - { 219, 0 }, /* (53) tseries ::= */ - { 219, -2 }, /* (54) tseries ::= TSERIES INTEGER */ - { 220, 0 }, /* (55) dbs ::= */ - { 220, -2 }, /* (56) dbs ::= DBS INTEGER */ - { 221, 0 }, /* (57) streams ::= */ - { 221, -2 }, /* (58) streams ::= STREAMS INTEGER */ - { 222, 0 }, /* (59) storage ::= */ - { 222, -2 }, /* (60) storage ::= STORAGE INTEGER */ - { 223, 0 }, /* (61) qtime ::= */ - { 223, -2 }, /* (62) qtime ::= QTIME INTEGER */ - { 224, 0 }, /* (63) users ::= */ - { 224, -2 }, /* (64) users ::= USERS INTEGER */ - { 225, 0 }, /* (65) conns ::= */ - { 225, -2 }, /* (66) conns ::= CONNS INTEGER */ - { 226, 0 }, /* (67) state ::= */ - { 226, -2 }, /* (68) state ::= STATE ids */ - { 215, -9 }, /* (69) acct_optr ::= pps tseries storage streams qtime dbs users conns state */ - { 227, -2 }, /* (70) keep ::= KEEP tagitemlist */ - { 229, -2 }, /* (71) tables ::= MAXTABLES INTEGER */ - { 230, -2 }, /* (72) cache ::= CACHE INTEGER */ - { 231, -2 }, /* (73) replica ::= REPLICA INTEGER */ - { 232, -2 }, /* (74) quorum ::= QUORUM INTEGER */ - { 233, -2 }, /* (75) days ::= DAYS INTEGER */ - { 234, -2 }, /* (76) minrows ::= MINROWS INTEGER */ - { 235, -2 }, /* (77) maxrows ::= MAXROWS INTEGER */ - { 236, -2 }, /* (78) blocks ::= BLOCKS INTEGER */ - { 237, -2 }, /* (79) ctime ::= CTIME INTEGER */ - { 238, -2 }, /* (80) wal ::= WAL INTEGER */ - { 239, -2 }, /* (81) fsync ::= FSYNC INTEGER */ - { 240, -2 }, /* (82) comp ::= COMP INTEGER */ - { 241, -2 }, /* (83) prec ::= PRECISION STRING */ - { 217, 0 }, /* (84) db_optr ::= */ - { 217, -2 }, /* (85) db_optr ::= db_optr tables */ - { 217, -2 }, /* (86) db_optr ::= db_optr cache */ - { 217, -2 }, /* (87) db_optr ::= db_optr replica */ - { 217, -2 }, /* (88) db_optr ::= db_optr quorum */ - { 217, -2 }, /* (89) db_optr ::= db_optr days */ - { 217, -2 }, /* (90) db_optr ::= db_optr minrows */ - { 217, -2 }, /* (91) db_optr ::= db_optr maxrows */ - { 217, -2 }, /* (92) db_optr ::= db_optr blocks */ - { 217, -2 }, /* (93) db_optr ::= db_optr ctime */ - { 217, -2 }, /* (94) db_optr ::= db_optr wal */ - { 217, -2 }, /* (95) db_optr ::= db_optr fsync */ - { 217, -2 }, /* (96) db_optr ::= db_optr comp */ - { 217, -2 }, /* (97) db_optr ::= db_optr prec */ - { 217, -2 }, /* (98) db_optr ::= db_optr keep */ - { 214, 0 }, /* (99) alter_db_optr ::= */ - { 214, -2 }, /* (100) alter_db_optr ::= alter_db_optr replica */ - { 214, -2 }, /* (101) alter_db_optr ::= alter_db_optr quorum */ - { 214, -2 }, /* (102) alter_db_optr ::= alter_db_optr tables */ - { 214, -2 }, /* (103) alter_db_optr ::= alter_db_optr keep */ - { 214, -2 }, /* (104) alter_db_optr ::= alter_db_optr blocks */ - { 214, -2 }, /* (105) alter_db_optr ::= alter_db_optr comp */ - { 214, -2 }, /* (106) alter_db_optr ::= alter_db_optr wal */ - { 214, -2 }, /* (107) alter_db_optr ::= alter_db_optr fsync */ - { 242, -1 }, /* (108) typename ::= ids */ - { 242, -4 }, /* (109) typename ::= ids LP signed RP */ - { 243, -1 }, /* (110) signed ::= INTEGER */ - { 243, -2 }, /* (111) signed ::= PLUS INTEGER */ - { 243, -2 }, /* (112) signed ::= MINUS INTEGER */ - { 209, -6 }, /* (113) cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ - { 244, -3 }, /* (114) create_table_args ::= LP columnlist RP */ - { 244, -7 }, /* (115) create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ - { 244, -7 }, /* (116) create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ - { 244, -2 }, /* (117) create_table_args ::= AS select */ - { 245, -3 }, /* (118) columnlist ::= columnlist COMMA column */ - { 245, -1 }, /* (119) columnlist ::= column */ - { 247, -2 }, /* (120) column ::= ids typename */ - { 228, -3 }, /* (121) tagitemlist ::= tagitemlist COMMA tagitem */ - { 228, -1 }, /* (122) tagitemlist ::= tagitem */ - { 248, -1 }, /* (123) tagitem ::= INTEGER */ - { 248, -1 }, /* (124) tagitem ::= FLOAT */ - { 248, -1 }, /* (125) tagitem ::= STRING */ - { 248, -1 }, /* (126) tagitem ::= BOOL */ - { 248, -1 }, /* (127) tagitem ::= NULL */ - { 248, -2 }, /* (128) tagitem ::= MINUS INTEGER */ - { 248, -2 }, /* (129) tagitem ::= MINUS FLOAT */ - { 248, -2 }, /* (130) tagitem ::= PLUS INTEGER */ - { 248, -2 }, /* (131) tagitem ::= PLUS FLOAT */ - { 246, -12 }, /* (132) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ - { 260, -1 }, /* (133) union ::= select */ - { 260, -3 }, /* (134) union ::= LP union RP */ - { 260, -4 }, /* (135) union ::= union UNION ALL select */ - { 260, -6 }, /* (136) union ::= union UNION ALL LP select RP */ - { 209, -1 }, /* (137) cmd ::= union */ - { 246, -2 }, /* (138) select ::= SELECT selcollist */ - { 261, -2 }, /* (139) sclp ::= selcollist COMMA */ - { 261, 0 }, /* (140) sclp ::= */ - { 249, -3 }, /* (141) selcollist ::= sclp expr as */ - { 249, -2 }, /* (142) selcollist ::= sclp STAR */ - { 263, -2 }, /* (143) as ::= AS ids */ - { 263, -1 }, /* (144) as ::= ids */ - { 263, 0 }, /* (145) as ::= */ - { 250, -2 }, /* (146) from ::= FROM tablelist */ - { 264, -2 }, /* (147) tablelist ::= ids cpxName */ - { 264, -3 }, /* (148) tablelist ::= ids cpxName ids */ - { 264, -4 }, /* (149) tablelist ::= tablelist COMMA ids cpxName */ - { 264, -5 }, /* (150) tablelist ::= tablelist COMMA ids cpxName ids */ - { 265, -1 }, /* (151) tmvar ::= VARIABLE */ - { 252, -4 }, /* (152) interval_opt ::= INTERVAL LP tmvar RP */ - { 252, 0 }, /* (153) interval_opt ::= */ - { 253, 0 }, /* (154) fill_opt ::= */ - { 253, -6 }, /* (155) fill_opt ::= FILL LP ID COMMA tagitemlist RP */ - { 253, -4 }, /* (156) fill_opt ::= FILL LP ID RP */ - { 254, -4 }, /* (157) sliding_opt ::= SLIDING LP tmvar RP */ - { 254, 0 }, /* (158) sliding_opt ::= */ - { 256, 0 }, /* (159) orderby_opt ::= */ - { 256, -3 }, /* (160) orderby_opt ::= ORDER BY sortlist */ - { 266, -4 }, /* (161) sortlist ::= sortlist COMMA item sortorder */ - { 266, -2 }, /* (162) sortlist ::= item sortorder */ - { 268, -2 }, /* (163) item ::= ids cpxName */ - { 269, -1 }, /* (164) sortorder ::= ASC */ - { 269, -1 }, /* (165) sortorder ::= DESC */ - { 269, 0 }, /* (166) sortorder ::= */ - { 255, 0 }, /* (167) groupby_opt ::= */ - { 255, -3 }, /* (168) groupby_opt ::= GROUP BY grouplist */ - { 270, -3 }, /* (169) grouplist ::= grouplist COMMA item */ - { 270, -1 }, /* (170) grouplist ::= item */ - { 257, 0 }, /* (171) having_opt ::= */ - { 257, -2 }, /* (172) having_opt ::= HAVING expr */ - { 259, 0 }, /* (173) limit_opt ::= */ - { 259, -2 }, /* (174) limit_opt ::= LIMIT signed */ - { 259, -4 }, /* (175) limit_opt ::= LIMIT signed OFFSET signed */ - { 259, -4 }, /* (176) limit_opt ::= LIMIT signed COMMA signed */ - { 258, 0 }, /* (177) slimit_opt ::= */ - { 258, -2 }, /* (178) slimit_opt ::= SLIMIT signed */ - { 258, -4 }, /* (179) slimit_opt ::= SLIMIT signed SOFFSET signed */ - { 258, -4 }, /* (180) slimit_opt ::= SLIMIT signed COMMA signed */ - { 251, 0 }, /* (181) where_opt ::= */ - { 251, -2 }, /* (182) where_opt ::= WHERE expr */ - { 262, -3 }, /* (183) expr ::= LP expr RP */ - { 262, -1 }, /* (184) expr ::= ID */ - { 262, -3 }, /* (185) expr ::= ID DOT ID */ - { 262, -3 }, /* (186) expr ::= ID DOT STAR */ - { 262, -1 }, /* (187) expr ::= INTEGER */ - { 262, -2 }, /* (188) expr ::= MINUS INTEGER */ - { 262, -2 }, /* (189) expr ::= PLUS INTEGER */ - { 262, -1 }, /* (190) expr ::= FLOAT */ - { 262, -2 }, /* (191) expr ::= MINUS FLOAT */ - { 262, -2 }, /* (192) expr ::= PLUS FLOAT */ - { 262, -1 }, /* (193) expr ::= STRING */ - { 262, -1 }, /* (194) expr ::= NOW */ - { 262, -1 }, /* (195) expr ::= VARIABLE */ - { 262, -1 }, /* (196) expr ::= BOOL */ - { 262, -4 }, /* (197) expr ::= ID LP exprlist RP */ - { 262, -4 }, /* (198) expr ::= ID LP STAR RP */ - { 262, -3 }, /* (199) expr ::= expr AND expr */ - { 262, -3 }, /* (200) expr ::= expr OR expr */ - { 262, -3 }, /* (201) expr ::= expr LT expr */ - { 262, -3 }, /* (202) expr ::= expr GT expr */ - { 262, -3 }, /* (203) expr ::= expr LE expr */ - { 262, -3 }, /* (204) expr ::= expr GE expr */ - { 262, -3 }, /* (205) expr ::= expr NE expr */ - { 262, -3 }, /* (206) expr ::= expr EQ expr */ - { 262, -3 }, /* (207) expr ::= expr PLUS expr */ - { 262, -3 }, /* (208) expr ::= expr MINUS expr */ - { 262, -3 }, /* (209) expr ::= expr STAR expr */ - { 262, -3 }, /* (210) expr ::= expr SLASH expr */ - { 262, -3 }, /* (211) expr ::= expr REM expr */ - { 262, -3 }, /* (212) expr ::= expr LIKE expr */ - { 262, -5 }, /* (213) expr ::= expr IN LP exprlist RP */ - { 271, -3 }, /* (214) exprlist ::= exprlist COMMA expritem */ - { 271, -1 }, /* (215) exprlist ::= expritem */ - { 272, -1 }, /* (216) expritem ::= expr */ - { 272, 0 }, /* (217) expritem ::= */ - { 209, -3 }, /* (218) cmd ::= RESET QUERY CACHE */ - { 209, -7 }, /* (219) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ - { 209, -7 }, /* (220) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ - { 209, -7 }, /* (221) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ - { 209, -7 }, /* (222) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ - { 209, -8 }, /* (223) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ - { 209, -9 }, /* (224) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ - { 209, -3 }, /* (225) cmd ::= KILL CONNECTION INTEGER */ - { 209, -5 }, /* (226) cmd ::= KILL STREAM INTEGER COLON INTEGER */ - { 209, -5 }, /* (227) cmd ::= KILL QUERY INTEGER COLON INTEGER */ + { 207, -1 }, /* (0) program ::= cmd */ + { 208, -2 }, /* (1) cmd ::= SHOW DATABASES */ + { 208, -2 }, /* (2) cmd ::= SHOW MNODES */ + { 208, -2 }, /* (3) cmd ::= SHOW DNODES */ + { 208, -2 }, /* (4) cmd ::= SHOW ACCOUNTS */ + { 208, -2 }, /* (5) cmd ::= SHOW USERS */ + { 208, -2 }, /* (6) cmd ::= SHOW MODULES */ + { 208, -2 }, /* (7) cmd ::= SHOW QUERIES */ + { 208, -2 }, /* (8) cmd ::= SHOW CONNECTIONS */ + { 208, -2 }, /* (9) cmd ::= SHOW STREAMS */ + { 208, -2 }, /* (10) cmd ::= SHOW VARIABLES */ + { 208, -2 }, /* (11) cmd ::= SHOW SCORES */ + { 208, -2 }, /* (12) cmd ::= SHOW GRANTS */ + { 208, -2 }, /* (13) cmd ::= SHOW VNODES */ + { 208, -3 }, /* (14) cmd ::= SHOW VNODES IPTOKEN */ + { 209, 0 }, /* (15) dbPrefix ::= */ + { 209, -2 }, /* (16) dbPrefix ::= ids DOT */ + { 211, 0 }, /* (17) cpxName ::= */ + { 211, -2 }, /* (18) cpxName ::= DOT ids */ + { 208, -3 }, /* (19) cmd ::= SHOW dbPrefix TABLES */ + { 208, -5 }, /* (20) cmd ::= SHOW dbPrefix TABLES LIKE ids */ + { 208, -3 }, /* (21) cmd ::= SHOW dbPrefix STABLES */ + { 208, -5 }, /* (22) cmd ::= SHOW dbPrefix STABLES LIKE ids */ + { 208, -3 }, /* (23) cmd ::= SHOW dbPrefix VGROUPS */ + { 208, -4 }, /* (24) cmd ::= SHOW dbPrefix VGROUPS ids */ + { 208, -5 }, /* (25) cmd ::= DROP TABLE ifexists ids cpxName */ + { 208, -4 }, /* (26) cmd ::= DROP DATABASE ifexists ids */ + { 208, -3 }, /* (27) cmd ::= DROP DNODE ids */ + { 208, -3 }, /* (28) cmd ::= DROP USER ids */ + { 208, -3 }, /* (29) cmd ::= DROP ACCOUNT ids */ + { 208, -2 }, /* (30) cmd ::= USE ids */ + { 208, -3 }, /* (31) cmd ::= DESCRIBE ids cpxName */ + { 208, -5 }, /* (32) cmd ::= ALTER USER ids PASS ids */ + { 208, -5 }, /* (33) cmd ::= ALTER USER ids PRIVILEGE ids */ + { 208, -4 }, /* (34) cmd ::= ALTER DNODE ids ids */ + { 208, -5 }, /* (35) cmd ::= ALTER DNODE ids ids ids */ + { 208, -3 }, /* (36) cmd ::= ALTER LOCAL ids */ + { 208, -4 }, /* (37) cmd ::= ALTER LOCAL ids ids */ + { 208, -4 }, /* (38) cmd ::= ALTER DATABASE ids alter_db_optr */ + { 208, -4 }, /* (39) cmd ::= ALTER ACCOUNT ids acct_optr */ + { 208, -6 }, /* (40) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ + { 210, -1 }, /* (41) ids ::= ID */ + { 210, -1 }, /* (42) ids ::= STRING */ + { 212, -2 }, /* (43) ifexists ::= IF EXISTS */ + { 212, 0 }, /* (44) ifexists ::= */ + { 215, -3 }, /* (45) ifnotexists ::= IF NOT EXISTS */ + { 215, 0 }, /* (46) ifnotexists ::= */ + { 208, -3 }, /* (47) cmd ::= CREATE DNODE ids */ + { 208, -6 }, /* (48) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ + { 208, -5 }, /* (49) cmd ::= CREATE DATABASE ifnotexists ids db_optr */ + { 208, -5 }, /* (50) cmd ::= CREATE USER ids PASS ids */ + { 217, 0 }, /* (51) pps ::= */ + { 217, -2 }, /* (52) pps ::= PPS INTEGER */ + { 218, 0 }, /* (53) tseries ::= */ + { 218, -2 }, /* (54) tseries ::= TSERIES INTEGER */ + { 219, 0 }, /* (55) dbs ::= */ + { 219, -2 }, /* (56) dbs ::= DBS INTEGER */ + { 220, 0 }, /* (57) streams ::= */ + { 220, -2 }, /* (58) streams ::= STREAMS INTEGER */ + { 221, 0 }, /* (59) storage ::= */ + { 221, -2 }, /* (60) storage ::= STORAGE INTEGER */ + { 222, 0 }, /* (61) qtime ::= */ + { 222, -2 }, /* (62) qtime ::= QTIME INTEGER */ + { 223, 0 }, /* (63) users ::= */ + { 223, -2 }, /* (64) users ::= USERS INTEGER */ + { 224, 0 }, /* (65) conns ::= */ + { 224, -2 }, /* (66) conns ::= CONNS INTEGER */ + { 225, 0 }, /* (67) state ::= */ + { 225, -2 }, /* (68) state ::= STATE ids */ + { 214, -9 }, /* (69) acct_optr ::= pps tseries storage streams qtime dbs users conns state */ + { 226, -2 }, /* (70) keep ::= KEEP tagitemlist */ + { 228, -2 }, /* (71) cache ::= CACHE INTEGER */ + { 229, -2 }, /* (72) replica ::= REPLICA INTEGER */ + { 230, -2 }, /* (73) quorum ::= QUORUM INTEGER */ + { 231, -2 }, /* (74) days ::= DAYS INTEGER */ + { 232, -2 }, /* (75) minrows ::= MINROWS INTEGER */ + { 233, -2 }, /* (76) maxrows ::= MAXROWS INTEGER */ + { 234, -2 }, /* (77) blocks ::= BLOCKS INTEGER */ + { 235, -2 }, /* (78) ctime ::= CTIME INTEGER */ + { 236, -2 }, /* (79) wal ::= WAL INTEGER */ + { 237, -2 }, /* (80) fsync ::= FSYNC INTEGER */ + { 238, -2 }, /* (81) comp ::= COMP INTEGER */ + { 239, -2 }, /* (82) prec ::= PRECISION STRING */ + { 216, 0 }, /* (83) db_optr ::= */ + { 216, -2 }, /* (84) db_optr ::= db_optr cache */ + { 216, -2 }, /* (85) db_optr ::= db_optr replica */ + { 216, -2 }, /* (86) db_optr ::= db_optr quorum */ + { 216, -2 }, /* (87) db_optr ::= db_optr days */ + { 216, -2 }, /* (88) db_optr ::= db_optr minrows */ + { 216, -2 }, /* (89) db_optr ::= db_optr maxrows */ + { 216, -2 }, /* (90) db_optr ::= db_optr blocks */ + { 216, -2 }, /* (91) db_optr ::= db_optr ctime */ + { 216, -2 }, /* (92) db_optr ::= db_optr wal */ + { 216, -2 }, /* (93) db_optr ::= db_optr fsync */ + { 216, -2 }, /* (94) db_optr ::= db_optr comp */ + { 216, -2 }, /* (95) db_optr ::= db_optr prec */ + { 216, -2 }, /* (96) db_optr ::= db_optr keep */ + { 213, 0 }, /* (97) alter_db_optr ::= */ + { 213, -2 }, /* (98) alter_db_optr ::= alter_db_optr replica */ + { 213, -2 }, /* (99) alter_db_optr ::= alter_db_optr quorum */ + { 213, -2 }, /* (100) alter_db_optr ::= alter_db_optr keep */ + { 213, -2 }, /* (101) alter_db_optr ::= alter_db_optr blocks */ + { 213, -2 }, /* (102) alter_db_optr ::= alter_db_optr comp */ + { 213, -2 }, /* (103) alter_db_optr ::= alter_db_optr wal */ + { 213, -2 }, /* (104) alter_db_optr ::= alter_db_optr fsync */ + { 240, -1 }, /* (105) typename ::= ids */ + { 240, -4 }, /* (106) typename ::= ids LP signed RP */ + { 241, -1 }, /* (107) signed ::= INTEGER */ + { 241, -2 }, /* (108) signed ::= PLUS INTEGER */ + { 241, -2 }, /* (109) signed ::= MINUS INTEGER */ + { 208, -6 }, /* (110) cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ + { 242, -3 }, /* (111) create_table_args ::= LP columnlist RP */ + { 242, -7 }, /* (112) create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ + { 242, -7 }, /* (113) create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ + { 242, -2 }, /* (114) create_table_args ::= AS select */ + { 243, -3 }, /* (115) columnlist ::= columnlist COMMA column */ + { 243, -1 }, /* (116) columnlist ::= column */ + { 245, -2 }, /* (117) column ::= ids typename */ + { 227, -3 }, /* (118) tagitemlist ::= tagitemlist COMMA tagitem */ + { 227, -1 }, /* (119) tagitemlist ::= tagitem */ + { 246, -1 }, /* (120) tagitem ::= INTEGER */ + { 246, -1 }, /* (121) tagitem ::= FLOAT */ + { 246, -1 }, /* (122) tagitem ::= STRING */ + { 246, -1 }, /* (123) tagitem ::= BOOL */ + { 246, -1 }, /* (124) tagitem ::= NULL */ + { 246, -2 }, /* (125) tagitem ::= MINUS INTEGER */ + { 246, -2 }, /* (126) tagitem ::= MINUS FLOAT */ + { 246, -2 }, /* (127) tagitem ::= PLUS INTEGER */ + { 246, -2 }, /* (128) tagitem ::= PLUS FLOAT */ + { 244, -12 }, /* (129) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ + { 258, -1 }, /* (130) union ::= select */ + { 258, -3 }, /* (131) union ::= LP union RP */ + { 258, -4 }, /* (132) union ::= union UNION ALL select */ + { 258, -6 }, /* (133) union ::= union UNION ALL LP select RP */ + { 208, -1 }, /* (134) cmd ::= union */ + { 244, -2 }, /* (135) select ::= SELECT selcollist */ + { 259, -2 }, /* (136) sclp ::= selcollist COMMA */ + { 259, 0 }, /* (137) sclp ::= */ + { 247, -3 }, /* (138) selcollist ::= sclp expr as */ + { 247, -2 }, /* (139) selcollist ::= sclp STAR */ + { 261, -2 }, /* (140) as ::= AS ids */ + { 261, -1 }, /* (141) as ::= ids */ + { 261, 0 }, /* (142) as ::= */ + { 248, -2 }, /* (143) from ::= FROM tablelist */ + { 262, -2 }, /* (144) tablelist ::= ids cpxName */ + { 262, -3 }, /* (145) tablelist ::= ids cpxName ids */ + { 262, -4 }, /* (146) tablelist ::= tablelist COMMA ids cpxName */ + { 262, -5 }, /* (147) tablelist ::= tablelist COMMA ids cpxName ids */ + { 263, -1 }, /* (148) tmvar ::= VARIABLE */ + { 250, -4 }, /* (149) interval_opt ::= INTERVAL LP tmvar RP */ + { 250, 0 }, /* (150) interval_opt ::= */ + { 251, 0 }, /* (151) fill_opt ::= */ + { 251, -6 }, /* (152) fill_opt ::= FILL LP ID COMMA tagitemlist RP */ + { 251, -4 }, /* (153) fill_opt ::= FILL LP ID RP */ + { 252, -4 }, /* (154) sliding_opt ::= SLIDING LP tmvar RP */ + { 252, 0 }, /* (155) sliding_opt ::= */ + { 254, 0 }, /* (156) orderby_opt ::= */ + { 254, -3 }, /* (157) orderby_opt ::= ORDER BY sortlist */ + { 264, -4 }, /* (158) sortlist ::= sortlist COMMA item sortorder */ + { 264, -2 }, /* (159) sortlist ::= item sortorder */ + { 266, -2 }, /* (160) item ::= ids cpxName */ + { 267, -1 }, /* (161) sortorder ::= ASC */ + { 267, -1 }, /* (162) sortorder ::= DESC */ + { 267, 0 }, /* (163) sortorder ::= */ + { 253, 0 }, /* (164) groupby_opt ::= */ + { 253, -3 }, /* (165) groupby_opt ::= GROUP BY grouplist */ + { 268, -3 }, /* (166) grouplist ::= grouplist COMMA item */ + { 268, -1 }, /* (167) grouplist ::= item */ + { 255, 0 }, /* (168) having_opt ::= */ + { 255, -2 }, /* (169) having_opt ::= HAVING expr */ + { 257, 0 }, /* (170) limit_opt ::= */ + { 257, -2 }, /* (171) limit_opt ::= LIMIT signed */ + { 257, -4 }, /* (172) limit_opt ::= LIMIT signed OFFSET signed */ + { 257, -4 }, /* (173) limit_opt ::= LIMIT signed COMMA signed */ + { 256, 0 }, /* (174) slimit_opt ::= */ + { 256, -2 }, /* (175) slimit_opt ::= SLIMIT signed */ + { 256, -4 }, /* (176) slimit_opt ::= SLIMIT signed SOFFSET signed */ + { 256, -4 }, /* (177) slimit_opt ::= SLIMIT signed COMMA signed */ + { 249, 0 }, /* (178) where_opt ::= */ + { 249, -2 }, /* (179) where_opt ::= WHERE expr */ + { 260, -3 }, /* (180) expr ::= LP expr RP */ + { 260, -1 }, /* (181) expr ::= ID */ + { 260, -3 }, /* (182) expr ::= ID DOT ID */ + { 260, -3 }, /* (183) expr ::= ID DOT STAR */ + { 260, -1 }, /* (184) expr ::= INTEGER */ + { 260, -2 }, /* (185) expr ::= MINUS INTEGER */ + { 260, -2 }, /* (186) expr ::= PLUS INTEGER */ + { 260, -1 }, /* (187) expr ::= FLOAT */ + { 260, -2 }, /* (188) expr ::= MINUS FLOAT */ + { 260, -2 }, /* (189) expr ::= PLUS FLOAT */ + { 260, -1 }, /* (190) expr ::= STRING */ + { 260, -1 }, /* (191) expr ::= NOW */ + { 260, -1 }, /* (192) expr ::= VARIABLE */ + { 260, -1 }, /* (193) expr ::= BOOL */ + { 260, -4 }, /* (194) expr ::= ID LP exprlist RP */ + { 260, -4 }, /* (195) expr ::= ID LP STAR RP */ + { 260, -3 }, /* (196) expr ::= expr AND expr */ + { 260, -3 }, /* (197) expr ::= expr OR expr */ + { 260, -3 }, /* (198) expr ::= expr LT expr */ + { 260, -3 }, /* (199) expr ::= expr GT expr */ + { 260, -3 }, /* (200) expr ::= expr LE expr */ + { 260, -3 }, /* (201) expr ::= expr GE expr */ + { 260, -3 }, /* (202) expr ::= expr NE expr */ + { 260, -3 }, /* (203) expr ::= expr EQ expr */ + { 260, -3 }, /* (204) expr ::= expr PLUS expr */ + { 260, -3 }, /* (205) expr ::= expr MINUS expr */ + { 260, -3 }, /* (206) expr ::= expr STAR expr */ + { 260, -3 }, /* (207) expr ::= expr SLASH expr */ + { 260, -3 }, /* (208) expr ::= expr REM expr */ + { 260, -3 }, /* (209) expr ::= expr LIKE expr */ + { 260, -5 }, /* (210) expr ::= expr IN LP exprlist RP */ + { 269, -3 }, /* (211) exprlist ::= exprlist COMMA expritem */ + { 269, -1 }, /* (212) exprlist ::= expritem */ + { 270, -1 }, /* (213) expritem ::= expr */ + { 270, 0 }, /* (214) expritem ::= */ + { 208, -3 }, /* (215) cmd ::= RESET QUERY CACHE */ + { 208, -7 }, /* (216) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ + { 208, -7 }, /* (217) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ + { 208, -7 }, /* (218) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ + { 208, -7 }, /* (219) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ + { 208, -8 }, /* (220) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ + { 208, -9 }, /* (221) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ + { 208, -3 }, /* (222) cmd ::= KILL CONNECTION INTEGER */ + { 208, -5 }, /* (223) cmd ::= KILL STREAM INTEGER COLON INTEGER */ + { 208, -5 }, /* (224) cmd ::= KILL QUERY INTEGER COLON INTEGER */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -2139,13 +2128,13 @@ static void yy_reduce( { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } break; case 38: /* cmd ::= ALTER DATABASE ids alter_db_optr */ -{ SStrToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy268, &t);} +{ SStrToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy158, &t);} break; case 39: /* cmd ::= ALTER ACCOUNT ids acct_optr */ -{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy149);} +{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy73);} break; case 40: /* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ -{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy149);} +{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy73);} break; case 41: /* ids ::= ID */ case 42: /* ids ::= STRING */ yytestcase(yyruleno==42); @@ -2166,10 +2155,10 @@ static void yy_reduce( { setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);} break; case 48: /* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ -{ setCreateAcctSQL(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy149);} +{ setCreateAcctSQL(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy73);} break; case 49: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */ -{ setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy268, &yymsp[-2].minor.yy0);} +{ setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy158, &yymsp[-2].minor.yy0);} break; case 50: /* cmd ::= CREATE USER ids PASS ids */ { setCreateUserSQL(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);} @@ -2198,562 +2187,556 @@ static void yy_reduce( break; case 69: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */ { - yylhsminor.yy149.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1; - yylhsminor.yy149.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1; - yylhsminor.yy149.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1; - yylhsminor.yy149.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1; - yylhsminor.yy149.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1; - yylhsminor.yy149.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1; - yylhsminor.yy149.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1; - yylhsminor.yy149.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1; - yylhsminor.yy149.stat = yymsp[0].minor.yy0; + yylhsminor.yy73.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1; + yylhsminor.yy73.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1; + yylhsminor.yy73.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1; + yylhsminor.yy73.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1; + yylhsminor.yy73.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1; + yylhsminor.yy73.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1; + yylhsminor.yy73.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1; + yylhsminor.yy73.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1; + yylhsminor.yy73.stat = yymsp[0].minor.yy0; } - yymsp[-8].minor.yy149 = yylhsminor.yy149; + yymsp[-8].minor.yy73 = yylhsminor.yy73; break; case 70: /* keep ::= KEEP tagitemlist */ -{ yymsp[-1].minor.yy498 = yymsp[0].minor.yy498; } +{ yymsp[-1].minor.yy494 = yymsp[0].minor.yy494; } break; - case 71: /* tables ::= MAXTABLES INTEGER */ - case 72: /* cache ::= CACHE INTEGER */ yytestcase(yyruleno==72); - case 73: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==73); - case 74: /* quorum ::= QUORUM INTEGER */ yytestcase(yyruleno==74); - case 75: /* days ::= DAYS INTEGER */ yytestcase(yyruleno==75); - case 76: /* minrows ::= MINROWS INTEGER */ yytestcase(yyruleno==76); - case 77: /* maxrows ::= MAXROWS INTEGER */ yytestcase(yyruleno==77); - case 78: /* blocks ::= BLOCKS INTEGER */ yytestcase(yyruleno==78); - case 79: /* ctime ::= CTIME INTEGER */ yytestcase(yyruleno==79); - case 80: /* wal ::= WAL INTEGER */ yytestcase(yyruleno==80); - case 81: /* fsync ::= FSYNC INTEGER */ yytestcase(yyruleno==81); - case 82: /* comp ::= COMP INTEGER */ yytestcase(yyruleno==82); - case 83: /* prec ::= PRECISION STRING */ yytestcase(yyruleno==83); + case 71: /* cache ::= CACHE INTEGER */ + case 72: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==72); + case 73: /* quorum ::= QUORUM INTEGER */ yytestcase(yyruleno==73); + case 74: /* days ::= DAYS INTEGER */ yytestcase(yyruleno==74); + case 75: /* minrows ::= MINROWS INTEGER */ yytestcase(yyruleno==75); + case 76: /* maxrows ::= MAXROWS INTEGER */ yytestcase(yyruleno==76); + case 77: /* blocks ::= BLOCKS INTEGER */ yytestcase(yyruleno==77); + case 78: /* ctime ::= CTIME INTEGER */ yytestcase(yyruleno==78); + case 79: /* wal ::= WAL INTEGER */ yytestcase(yyruleno==79); + case 80: /* fsync ::= FSYNC INTEGER */ yytestcase(yyruleno==80); + case 81: /* comp ::= COMP INTEGER */ yytestcase(yyruleno==81); + case 82: /* prec ::= PRECISION STRING */ yytestcase(yyruleno==82); { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } break; - case 84: /* db_optr ::= */ -{setDefaultCreateDbOption(&yymsp[1].minor.yy268);} + case 83: /* db_optr ::= */ +{setDefaultCreateDbOption(&yymsp[1].minor.yy158);} break; - case 85: /* db_optr ::= db_optr tables */ - case 102: /* alter_db_optr ::= alter_db_optr tables */ yytestcase(yyruleno==102); -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.maxTablesPerVnode = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 84: /* db_optr ::= db_optr cache */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 86: /* db_optr ::= db_optr cache */ -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 85: /* db_optr ::= db_optr replica */ + case 98: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==98); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 87: /* db_optr ::= db_optr replica */ - case 100: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==100); -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 86: /* db_optr ::= db_optr quorum */ + case 99: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==99); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 88: /* db_optr ::= db_optr quorum */ - case 101: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==101); -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 87: /* db_optr ::= db_optr days */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 89: /* db_optr ::= db_optr days */ -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 88: /* db_optr ::= db_optr minrows */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 90: /* db_optr ::= db_optr minrows */ -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 89: /* db_optr ::= db_optr maxrows */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 91: /* db_optr ::= db_optr maxrows */ -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 90: /* db_optr ::= db_optr blocks */ + case 101: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==101); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 92: /* db_optr ::= db_optr blocks */ - case 104: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==104); -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 91: /* db_optr ::= db_optr ctime */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 93: /* db_optr ::= db_optr ctime */ -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 92: /* db_optr ::= db_optr wal */ + case 103: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==103); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 94: /* db_optr ::= db_optr wal */ - case 106: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==106); -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 93: /* db_optr ::= db_optr fsync */ + case 104: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==104); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 95: /* db_optr ::= db_optr fsync */ - case 107: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==107); -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 94: /* db_optr ::= db_optr comp */ + case 102: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==102); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 96: /* db_optr ::= db_optr comp */ - case 105: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==105); -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 95: /* db_optr ::= db_optr prec */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.precision = yymsp[0].minor.yy0; } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 97: /* db_optr ::= db_optr prec */ -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.precision = yymsp[0].minor.yy0; } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 96: /* db_optr ::= db_optr keep */ + case 100: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==100); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.keep = yymsp[0].minor.yy494; } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 98: /* db_optr ::= db_optr keep */ - case 103: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==103); -{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.keep = yymsp[0].minor.yy498; } - yymsp[-1].minor.yy268 = yylhsminor.yy268; + case 97: /* alter_db_optr ::= */ +{ setDefaultCreateDbOption(&yymsp[1].minor.yy158);} break; - case 99: /* alter_db_optr ::= */ -{ setDefaultCreateDbOption(&yymsp[1].minor.yy268);} - break; - case 108: /* typename ::= ids */ + case 105: /* typename ::= ids */ { yymsp[0].minor.yy0.type = 0; - tSQLSetColumnType (&yylhsminor.yy223, &yymsp[0].minor.yy0); + tSQLSetColumnType (&yylhsminor.yy181, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy223 = yylhsminor.yy223; + yymsp[0].minor.yy181 = yylhsminor.yy181; break; - case 109: /* typename ::= ids LP signed RP */ + case 106: /* typename ::= ids LP signed RP */ { - if (yymsp[-1].minor.yy207 <= 0) { + if (yymsp[-1].minor.yy271 <= 0) { yymsp[-3].minor.yy0.type = 0; - tSQLSetColumnType(&yylhsminor.yy223, &yymsp[-3].minor.yy0); + tSQLSetColumnType(&yylhsminor.yy181, &yymsp[-3].minor.yy0); } else { - yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy207; // negative value of name length - tSQLSetColumnType(&yylhsminor.yy223, &yymsp[-3].minor.yy0); + yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy271; // negative value of name length + tSQLSetColumnType(&yylhsminor.yy181, &yymsp[-3].minor.yy0); } } - yymsp[-3].minor.yy223 = yylhsminor.yy223; + yymsp[-3].minor.yy181 = yylhsminor.yy181; break; - case 110: /* signed ::= INTEGER */ -{ yylhsminor.yy207 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[0].minor.yy207 = yylhsminor.yy207; + case 107: /* signed ::= INTEGER */ +{ yylhsminor.yy271 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[0].minor.yy271 = yylhsminor.yy271; break; - case 111: /* signed ::= PLUS INTEGER */ -{ yymsp[-1].minor.yy207 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + case 108: /* signed ::= PLUS INTEGER */ +{ yymsp[-1].minor.yy271 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } break; - case 112: /* signed ::= MINUS INTEGER */ -{ yymsp[-1].minor.yy207 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);} + case 109: /* signed ::= MINUS INTEGER */ +{ yymsp[-1].minor.yy271 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);} break; - case 113: /* cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ + case 110: /* cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ { yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; setCreatedTableName(pInfo, &yymsp[-2].minor.yy0, &yymsp[-3].minor.yy0); } break; - case 114: /* create_table_args ::= LP columnlist RP */ + case 111: /* create_table_args ::= LP columnlist RP */ { - yymsp[-2].minor.yy470 = tSetCreateSQLElems(yymsp[-1].minor.yy523, NULL, NULL, NULL, NULL, TSQL_CREATE_TABLE); - setSQLInfo(pInfo, yymsp[-2].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); + yymsp[-2].minor.yy374 = tSetCreateSQLElems(yymsp[-1].minor.yy449, NULL, NULL, NULL, NULL, TSQL_CREATE_TABLE); + setSQLInfo(pInfo, yymsp[-2].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE); } break; - case 115: /* create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ + case 112: /* create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ { - yymsp[-6].minor.yy470 = tSetCreateSQLElems(yymsp[-5].minor.yy523, yymsp[-1].minor.yy523, NULL, NULL, NULL, TSQL_CREATE_STABLE); - setSQLInfo(pInfo, yymsp[-6].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); + yymsp[-6].minor.yy374 = tSetCreateSQLElems(yymsp[-5].minor.yy449, yymsp[-1].minor.yy449, NULL, NULL, NULL, TSQL_CREATE_STABLE); + setSQLInfo(pInfo, yymsp[-6].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE); } break; - case 116: /* create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ + case 113: /* create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ { yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; - yymsp[-6].minor.yy470 = tSetCreateSQLElems(NULL, NULL, &yymsp[-5].minor.yy0, yymsp[-1].minor.yy498, NULL, TSQL_CREATE_TABLE_FROM_STABLE); - setSQLInfo(pInfo, yymsp[-6].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); + yymsp[-6].minor.yy374 = tSetCreateSQLElems(NULL, NULL, &yymsp[-5].minor.yy0, yymsp[-1].minor.yy494, NULL, TSQL_CREATE_TABLE_FROM_STABLE); + setSQLInfo(pInfo, yymsp[-6].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE); } break; - case 117: /* create_table_args ::= AS select */ + case 114: /* create_table_args ::= AS select */ { - yymsp[-1].minor.yy470 = tSetCreateSQLElems(NULL, NULL, NULL, NULL, yymsp[0].minor.yy414, TSQL_CREATE_STREAM); - setSQLInfo(pInfo, yymsp[-1].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); + yymsp[-1].minor.yy374 = tSetCreateSQLElems(NULL, NULL, NULL, NULL, yymsp[0].minor.yy150, TSQL_CREATE_STREAM); + setSQLInfo(pInfo, yymsp[-1].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE); } break; - case 118: /* columnlist ::= columnlist COMMA column */ -{yylhsminor.yy523 = tFieldListAppend(yymsp[-2].minor.yy523, &yymsp[0].minor.yy223); } - yymsp[-2].minor.yy523 = yylhsminor.yy523; + case 115: /* columnlist ::= columnlist COMMA column */ +{yylhsminor.yy449 = tFieldListAppend(yymsp[-2].minor.yy449, &yymsp[0].minor.yy181); } + yymsp[-2].minor.yy449 = yylhsminor.yy449; break; - case 119: /* columnlist ::= column */ -{yylhsminor.yy523 = tFieldListAppend(NULL, &yymsp[0].minor.yy223);} - yymsp[0].minor.yy523 = yylhsminor.yy523; + case 116: /* columnlist ::= column */ +{yylhsminor.yy449 = tFieldListAppend(NULL, &yymsp[0].minor.yy181);} + yymsp[0].minor.yy449 = yylhsminor.yy449; break; - case 120: /* column ::= ids typename */ + case 117: /* column ::= ids typename */ { - tSQLSetColumnInfo(&yylhsminor.yy223, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy223); + tSQLSetColumnInfo(&yylhsminor.yy181, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy181); } - yymsp[-1].minor.yy223 = yylhsminor.yy223; + yymsp[-1].minor.yy181 = yylhsminor.yy181; break; - case 121: /* tagitemlist ::= tagitemlist COMMA tagitem */ -{ yylhsminor.yy498 = tVariantListAppend(yymsp[-2].minor.yy498, &yymsp[0].minor.yy134, -1); } - yymsp[-2].minor.yy498 = yylhsminor.yy498; + case 118: /* tagitemlist ::= tagitemlist COMMA tagitem */ +{ yylhsminor.yy494 = tVariantListAppend(yymsp[-2].minor.yy494, &yymsp[0].minor.yy312, -1); } + yymsp[-2].minor.yy494 = yylhsminor.yy494; break; - case 122: /* tagitemlist ::= tagitem */ -{ yylhsminor.yy498 = tVariantListAppend(NULL, &yymsp[0].minor.yy134, -1); } - yymsp[0].minor.yy498 = yylhsminor.yy498; + case 119: /* tagitemlist ::= tagitem */ +{ yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[0].minor.yy312, -1); } + yymsp[0].minor.yy494 = yylhsminor.yy494; break; - case 123: /* tagitem ::= INTEGER */ - case 124: /* tagitem ::= FLOAT */ yytestcase(yyruleno==124); - case 125: /* tagitem ::= STRING */ yytestcase(yyruleno==125); - case 126: /* tagitem ::= BOOL */ yytestcase(yyruleno==126); -{toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy134, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy134 = yylhsminor.yy134; + case 120: /* tagitem ::= INTEGER */ + case 121: /* tagitem ::= FLOAT */ yytestcase(yyruleno==121); + case 122: /* tagitem ::= STRING */ yytestcase(yyruleno==122); + case 123: /* tagitem ::= BOOL */ yytestcase(yyruleno==123); +{toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy312, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy312 = yylhsminor.yy312; break; - case 127: /* tagitem ::= NULL */ -{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy134, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy134 = yylhsminor.yy134; + case 124: /* tagitem ::= NULL */ +{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy312, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy312 = yylhsminor.yy312; break; - case 128: /* tagitem ::= MINUS INTEGER */ - case 129: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==129); - case 130: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==130); - case 131: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==131); + case 125: /* tagitem ::= MINUS INTEGER */ + case 126: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==126); + case 127: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==127); + case 128: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==128); { yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type; toTSDBType(yymsp[-1].minor.yy0.type); - tVariantCreate(&yylhsminor.yy134, &yymsp[-1].minor.yy0); + tVariantCreate(&yylhsminor.yy312, &yymsp[-1].minor.yy0); } - yymsp[-1].minor.yy134 = yylhsminor.yy134; + yymsp[-1].minor.yy312 = yylhsminor.yy312; break; - case 132: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ + case 129: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ { - yylhsminor.yy414 = tSetQuerySQLElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy290, yymsp[-9].minor.yy498, yymsp[-8].minor.yy64, yymsp[-4].minor.yy498, yymsp[-3].minor.yy498, &yymsp[-7].minor.yy0, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy498, &yymsp[0].minor.yy216, &yymsp[-1].minor.yy216); + yylhsminor.yy150 = tSetQuerySQLElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy224, yymsp[-9].minor.yy494, yymsp[-8].minor.yy66, yymsp[-4].minor.yy494, yymsp[-3].minor.yy494, &yymsp[-7].minor.yy0, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy494, &yymsp[0].minor.yy188, &yymsp[-1].minor.yy188); } - yymsp[-11].minor.yy414 = yylhsminor.yy414; + yymsp[-11].minor.yy150 = yylhsminor.yy150; break; - case 133: /* union ::= select */ -{ yylhsminor.yy231 = setSubclause(NULL, yymsp[0].minor.yy414); } - yymsp[0].minor.yy231 = yylhsminor.yy231; + case 130: /* union ::= select */ +{ yylhsminor.yy25 = setSubclause(NULL, yymsp[0].minor.yy150); } + yymsp[0].minor.yy25 = yylhsminor.yy25; break; - case 134: /* union ::= LP union RP */ -{ yymsp[-2].minor.yy231 = yymsp[-1].minor.yy231; } + case 131: /* union ::= LP union RP */ +{ yymsp[-2].minor.yy25 = yymsp[-1].minor.yy25; } break; - case 135: /* union ::= union UNION ALL select */ -{ yylhsminor.yy231 = appendSelectClause(yymsp[-3].minor.yy231, yymsp[0].minor.yy414); } - yymsp[-3].minor.yy231 = yylhsminor.yy231; + case 132: /* union ::= union UNION ALL select */ +{ yylhsminor.yy25 = appendSelectClause(yymsp[-3].minor.yy25, yymsp[0].minor.yy150); } + yymsp[-3].minor.yy25 = yylhsminor.yy25; break; - case 136: /* union ::= union UNION ALL LP select RP */ -{ yylhsminor.yy231 = appendSelectClause(yymsp[-5].minor.yy231, yymsp[-1].minor.yy414); } - yymsp[-5].minor.yy231 = yylhsminor.yy231; + case 133: /* union ::= union UNION ALL LP select RP */ +{ yylhsminor.yy25 = appendSelectClause(yymsp[-5].minor.yy25, yymsp[-1].minor.yy150); } + yymsp[-5].minor.yy25 = yylhsminor.yy25; break; - case 137: /* cmd ::= union */ -{ setSQLInfo(pInfo, yymsp[0].minor.yy231, NULL, TSDB_SQL_SELECT); } + case 134: /* cmd ::= union */ +{ setSQLInfo(pInfo, yymsp[0].minor.yy25, NULL, TSDB_SQL_SELECT); } break; - case 138: /* select ::= SELECT selcollist */ + case 135: /* select ::= SELECT selcollist */ { - yylhsminor.yy414 = tSetQuerySQLElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy290, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + yylhsminor.yy150 = tSetQuerySQLElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy224, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); } - yymsp[-1].minor.yy414 = yylhsminor.yy414; + yymsp[-1].minor.yy150 = yylhsminor.yy150; break; - case 139: /* sclp ::= selcollist COMMA */ -{yylhsminor.yy290 = yymsp[-1].minor.yy290;} - yymsp[-1].minor.yy290 = yylhsminor.yy290; + case 136: /* sclp ::= selcollist COMMA */ +{yylhsminor.yy224 = yymsp[-1].minor.yy224;} + yymsp[-1].minor.yy224 = yylhsminor.yy224; break; - case 140: /* sclp ::= */ -{yymsp[1].minor.yy290 = 0;} + case 137: /* sclp ::= */ +{yymsp[1].minor.yy224 = 0;} break; - case 141: /* selcollist ::= sclp expr as */ + case 138: /* selcollist ::= sclp expr as */ { - yylhsminor.yy290 = tSQLExprListAppend(yymsp[-2].minor.yy290, yymsp[-1].minor.yy64, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0); + yylhsminor.yy224 = tSQLExprListAppend(yymsp[-2].minor.yy224, yymsp[-1].minor.yy66, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0); } - yymsp[-2].minor.yy290 = yylhsminor.yy290; + yymsp[-2].minor.yy224 = yylhsminor.yy224; break; - case 142: /* selcollist ::= sclp STAR */ + case 139: /* selcollist ::= sclp STAR */ { tSQLExpr *pNode = tSQLExprIdValueCreate(NULL, TK_ALL); - yylhsminor.yy290 = tSQLExprListAppend(yymsp[-1].minor.yy290, pNode, 0); + yylhsminor.yy224 = tSQLExprListAppend(yymsp[-1].minor.yy224, pNode, 0); } - yymsp[-1].minor.yy290 = yylhsminor.yy290; + yymsp[-1].minor.yy224 = yylhsminor.yy224; break; - case 143: /* as ::= AS ids */ + case 140: /* as ::= AS ids */ { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } break; - case 144: /* as ::= ids */ + case 141: /* as ::= ids */ { yylhsminor.yy0 = yymsp[0].minor.yy0; } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 145: /* as ::= */ + case 142: /* as ::= */ { yymsp[1].minor.yy0.n = 0; } break; - case 146: /* from ::= FROM tablelist */ -{yymsp[-1].minor.yy498 = yymsp[0].minor.yy498;} + case 143: /* from ::= FROM tablelist */ +{yymsp[-1].minor.yy494 = yymsp[0].minor.yy494;} break; - case 147: /* tablelist ::= ids cpxName */ + case 144: /* tablelist ::= ids cpxName */ { toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; - yylhsminor.yy498 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); - yylhsminor.yy498 = tVariantListAppendToken(yylhsminor.yy498, &yymsp[-1].minor.yy0, -1); // table alias name + yylhsminor.yy494 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); + yylhsminor.yy494 = tVariantListAppendToken(yylhsminor.yy494, &yymsp[-1].minor.yy0, -1); // table alias name } - yymsp[-1].minor.yy498 = yylhsminor.yy498; + yymsp[-1].minor.yy494 = yylhsminor.yy494; break; - case 148: /* tablelist ::= ids cpxName ids */ + case 145: /* tablelist ::= ids cpxName ids */ { toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[0].minor.yy0.type); yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; - yylhsminor.yy498 = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1); - yylhsminor.yy498 = tVariantListAppendToken(yylhsminor.yy498, &yymsp[0].minor.yy0, -1); + yylhsminor.yy494 = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1); + yylhsminor.yy494 = tVariantListAppendToken(yylhsminor.yy494, &yymsp[0].minor.yy0, -1); } - yymsp[-2].minor.yy498 = yylhsminor.yy498; + yymsp[-2].minor.yy494 = yylhsminor.yy494; break; - case 149: /* tablelist ::= tablelist COMMA ids cpxName */ + case 146: /* tablelist ::= tablelist COMMA ids cpxName */ { toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; - yylhsminor.yy498 = tVariantListAppendToken(yymsp[-3].minor.yy498, &yymsp[-1].minor.yy0, -1); - yylhsminor.yy498 = tVariantListAppendToken(yylhsminor.yy498, &yymsp[-1].minor.yy0, -1); + yylhsminor.yy494 = tVariantListAppendToken(yymsp[-3].minor.yy494, &yymsp[-1].minor.yy0, -1); + yylhsminor.yy494 = tVariantListAppendToken(yylhsminor.yy494, &yymsp[-1].minor.yy0, -1); } - yymsp[-3].minor.yy498 = yylhsminor.yy498; + yymsp[-3].minor.yy494 = yylhsminor.yy494; break; - case 150: /* tablelist ::= tablelist COMMA ids cpxName ids */ + case 147: /* tablelist ::= tablelist COMMA ids cpxName ids */ { toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[0].minor.yy0.type); yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; - yylhsminor.yy498 = tVariantListAppendToken(yymsp[-4].minor.yy498, &yymsp[-2].minor.yy0, -1); - yylhsminor.yy498 = tVariantListAppendToken(yylhsminor.yy498, &yymsp[0].minor.yy0, -1); + yylhsminor.yy494 = tVariantListAppendToken(yymsp[-4].minor.yy494, &yymsp[-2].minor.yy0, -1); + yylhsminor.yy494 = tVariantListAppendToken(yylhsminor.yy494, &yymsp[0].minor.yy0, -1); } - yymsp[-4].minor.yy498 = yylhsminor.yy498; + yymsp[-4].minor.yy494 = yylhsminor.yy494; break; - case 151: /* tmvar ::= VARIABLE */ + case 148: /* tmvar ::= VARIABLE */ {yylhsminor.yy0 = yymsp[0].minor.yy0;} yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 152: /* interval_opt ::= INTERVAL LP tmvar RP */ - case 157: /* sliding_opt ::= SLIDING LP tmvar RP */ yytestcase(yyruleno==157); + case 149: /* interval_opt ::= INTERVAL LP tmvar RP */ + case 154: /* sliding_opt ::= SLIDING LP tmvar RP */ yytestcase(yyruleno==154); {yymsp[-3].minor.yy0 = yymsp[-1].minor.yy0; } break; - case 153: /* interval_opt ::= */ - case 158: /* sliding_opt ::= */ yytestcase(yyruleno==158); + case 150: /* interval_opt ::= */ + case 155: /* sliding_opt ::= */ yytestcase(yyruleno==155); {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; } break; - case 154: /* fill_opt ::= */ -{yymsp[1].minor.yy498 = 0; } + case 151: /* fill_opt ::= */ +{yymsp[1].minor.yy494 = 0; } break; - case 155: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */ + case 152: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */ { tVariant A = {0}; toTSDBType(yymsp[-3].minor.yy0.type); tVariantCreate(&A, &yymsp[-3].minor.yy0); - tVariantListInsert(yymsp[-1].minor.yy498, &A, -1, 0); - yymsp[-5].minor.yy498 = yymsp[-1].minor.yy498; + tVariantListInsert(yymsp[-1].minor.yy494, &A, -1, 0); + yymsp[-5].minor.yy494 = yymsp[-1].minor.yy494; } break; - case 156: /* fill_opt ::= FILL LP ID RP */ + case 153: /* fill_opt ::= FILL LP ID RP */ { toTSDBType(yymsp[-1].minor.yy0.type); - yymsp[-3].minor.yy498 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); + yymsp[-3].minor.yy494 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); } break; - case 159: /* orderby_opt ::= */ - case 167: /* groupby_opt ::= */ yytestcase(yyruleno==167); -{yymsp[1].minor.yy498 = 0;} + case 156: /* orderby_opt ::= */ + case 164: /* groupby_opt ::= */ yytestcase(yyruleno==164); +{yymsp[1].minor.yy494 = 0;} break; - case 160: /* orderby_opt ::= ORDER BY sortlist */ - case 168: /* groupby_opt ::= GROUP BY grouplist */ yytestcase(yyruleno==168); -{yymsp[-2].minor.yy498 = yymsp[0].minor.yy498;} + case 157: /* orderby_opt ::= ORDER BY sortlist */ + case 165: /* groupby_opt ::= GROUP BY grouplist */ yytestcase(yyruleno==165); +{yymsp[-2].minor.yy494 = yymsp[0].minor.yy494;} break; - case 161: /* sortlist ::= sortlist COMMA item sortorder */ + case 158: /* sortlist ::= sortlist COMMA item sortorder */ { - yylhsminor.yy498 = tVariantListAppend(yymsp[-3].minor.yy498, &yymsp[-1].minor.yy134, yymsp[0].minor.yy46); + yylhsminor.yy494 = tVariantListAppend(yymsp[-3].minor.yy494, &yymsp[-1].minor.yy312, yymsp[0].minor.yy82); } - yymsp[-3].minor.yy498 = yylhsminor.yy498; + yymsp[-3].minor.yy494 = yylhsminor.yy494; break; - case 162: /* sortlist ::= item sortorder */ + case 159: /* sortlist ::= item sortorder */ { - yylhsminor.yy498 = tVariantListAppend(NULL, &yymsp[-1].minor.yy134, yymsp[0].minor.yy46); + yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[-1].minor.yy312, yymsp[0].minor.yy82); } - yymsp[-1].minor.yy498 = yylhsminor.yy498; + yymsp[-1].minor.yy494 = yylhsminor.yy494; break; - case 163: /* item ::= ids cpxName */ + case 160: /* item ::= ids cpxName */ { toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; - tVariantCreate(&yylhsminor.yy134, &yymsp[-1].minor.yy0); + tVariantCreate(&yylhsminor.yy312, &yymsp[-1].minor.yy0); } - yymsp[-1].minor.yy134 = yylhsminor.yy134; + yymsp[-1].minor.yy312 = yylhsminor.yy312; break; - case 164: /* sortorder ::= ASC */ -{yymsp[0].minor.yy46 = TSDB_ORDER_ASC; } + case 161: /* sortorder ::= ASC */ +{yymsp[0].minor.yy82 = TSDB_ORDER_ASC; } break; - case 165: /* sortorder ::= DESC */ -{yymsp[0].minor.yy46 = TSDB_ORDER_DESC;} + case 162: /* sortorder ::= DESC */ +{yymsp[0].minor.yy82 = TSDB_ORDER_DESC;} break; - case 166: /* sortorder ::= */ -{yymsp[1].minor.yy46 = TSDB_ORDER_ASC;} + case 163: /* sortorder ::= */ +{yymsp[1].minor.yy82 = TSDB_ORDER_ASC;} break; - case 169: /* grouplist ::= grouplist COMMA item */ + case 166: /* grouplist ::= grouplist COMMA item */ { - yylhsminor.yy498 = tVariantListAppend(yymsp[-2].minor.yy498, &yymsp[0].minor.yy134, -1); + yylhsminor.yy494 = tVariantListAppend(yymsp[-2].minor.yy494, &yymsp[0].minor.yy312, -1); } - yymsp[-2].minor.yy498 = yylhsminor.yy498; + yymsp[-2].minor.yy494 = yylhsminor.yy494; break; - case 170: /* grouplist ::= item */ + case 167: /* grouplist ::= item */ { - yylhsminor.yy498 = tVariantListAppend(NULL, &yymsp[0].minor.yy134, -1); + yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[0].minor.yy312, -1); } - yymsp[0].minor.yy498 = yylhsminor.yy498; + yymsp[0].minor.yy494 = yylhsminor.yy494; break; - case 171: /* having_opt ::= */ - case 181: /* where_opt ::= */ yytestcase(yyruleno==181); - case 217: /* expritem ::= */ yytestcase(yyruleno==217); -{yymsp[1].minor.yy64 = 0;} + case 168: /* having_opt ::= */ + case 178: /* where_opt ::= */ yytestcase(yyruleno==178); + case 214: /* expritem ::= */ yytestcase(yyruleno==214); +{yymsp[1].minor.yy66 = 0;} break; - case 172: /* having_opt ::= HAVING expr */ - case 182: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==182); -{yymsp[-1].minor.yy64 = yymsp[0].minor.yy64;} + case 169: /* having_opt ::= HAVING expr */ + case 179: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==179); +{yymsp[-1].minor.yy66 = yymsp[0].minor.yy66;} break; - case 173: /* limit_opt ::= */ - case 177: /* slimit_opt ::= */ yytestcase(yyruleno==177); -{yymsp[1].minor.yy216.limit = -1; yymsp[1].minor.yy216.offset = 0;} + case 170: /* limit_opt ::= */ + case 174: /* slimit_opt ::= */ yytestcase(yyruleno==174); +{yymsp[1].minor.yy188.limit = -1; yymsp[1].minor.yy188.offset = 0;} break; - case 174: /* limit_opt ::= LIMIT signed */ - case 178: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==178); -{yymsp[-1].minor.yy216.limit = yymsp[0].minor.yy207; yymsp[-1].minor.yy216.offset = 0;} + case 171: /* limit_opt ::= LIMIT signed */ + case 175: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==175); +{yymsp[-1].minor.yy188.limit = yymsp[0].minor.yy271; yymsp[-1].minor.yy188.offset = 0;} break; - case 175: /* limit_opt ::= LIMIT signed OFFSET signed */ - case 179: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ yytestcase(yyruleno==179); -{yymsp[-3].minor.yy216.limit = yymsp[-2].minor.yy207; yymsp[-3].minor.yy216.offset = yymsp[0].minor.yy207;} + case 172: /* limit_opt ::= LIMIT signed OFFSET signed */ + case 176: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ yytestcase(yyruleno==176); +{yymsp[-3].minor.yy188.limit = yymsp[-2].minor.yy271; yymsp[-3].minor.yy188.offset = yymsp[0].minor.yy271;} break; - case 176: /* limit_opt ::= LIMIT signed COMMA signed */ - case 180: /* slimit_opt ::= SLIMIT signed COMMA signed */ yytestcase(yyruleno==180); -{yymsp[-3].minor.yy216.limit = yymsp[0].minor.yy207; yymsp[-3].minor.yy216.offset = yymsp[-2].minor.yy207;} + case 173: /* limit_opt ::= LIMIT signed COMMA signed */ + case 177: /* slimit_opt ::= SLIMIT signed COMMA signed */ yytestcase(yyruleno==177); +{yymsp[-3].minor.yy188.limit = yymsp[0].minor.yy271; yymsp[-3].minor.yy188.offset = yymsp[-2].minor.yy271;} break; - case 183: /* expr ::= LP expr RP */ -{yymsp[-2].minor.yy64 = yymsp[-1].minor.yy64; } + case 180: /* expr ::= LP expr RP */ +{yymsp[-2].minor.yy66 = yymsp[-1].minor.yy66; } break; - case 184: /* expr ::= ID */ -{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);} - yymsp[0].minor.yy64 = yylhsminor.yy64; + case 181: /* expr ::= ID */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 185: /* expr ::= ID DOT ID */ -{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);} - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 182: /* expr ::= ID DOT ID */ +{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 186: /* expr ::= ID DOT STAR */ -{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);} - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 183: /* expr ::= ID DOT STAR */ +{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 187: /* expr ::= INTEGER */ -{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);} - yymsp[0].minor.yy64 = yylhsminor.yy64; + case 184: /* expr ::= INTEGER */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 188: /* expr ::= MINUS INTEGER */ - case 189: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==189); -{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);} - yymsp[-1].minor.yy64 = yylhsminor.yy64; + case 185: /* expr ::= MINUS INTEGER */ + case 186: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==186); +{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);} + yymsp[-1].minor.yy66 = yylhsminor.yy66; break; - case 190: /* expr ::= FLOAT */ -{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);} - yymsp[0].minor.yy64 = yylhsminor.yy64; + case 187: /* expr ::= FLOAT */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 191: /* expr ::= MINUS FLOAT */ - case 192: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==192); -{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);} - yymsp[-1].minor.yy64 = yylhsminor.yy64; + case 188: /* expr ::= MINUS FLOAT */ + case 189: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==189); +{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);} + yymsp[-1].minor.yy66 = yylhsminor.yy66; break; - case 193: /* expr ::= STRING */ -{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);} - yymsp[0].minor.yy64 = yylhsminor.yy64; + case 190: /* expr ::= STRING */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 194: /* expr ::= NOW */ -{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); } - yymsp[0].minor.yy64 = yylhsminor.yy64; + case 191: /* expr ::= NOW */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); } + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 195: /* expr ::= VARIABLE */ -{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);} - yymsp[0].minor.yy64 = yylhsminor.yy64; + case 192: /* expr ::= VARIABLE */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 196: /* expr ::= BOOL */ -{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);} - yymsp[0].minor.yy64 = yylhsminor.yy64; + case 193: /* expr ::= BOOL */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 197: /* expr ::= ID LP exprlist RP */ + case 194: /* expr ::= ID LP exprlist RP */ { - yylhsminor.yy64 = tSQLExprCreateFunction(yymsp[-1].minor.yy290, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); + yylhsminor.yy66 = tSQLExprCreateFunction(yymsp[-1].minor.yy224, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } - yymsp[-3].minor.yy64 = yylhsminor.yy64; + yymsp[-3].minor.yy66 = yylhsminor.yy66; break; - case 198: /* expr ::= ID LP STAR RP */ + case 195: /* expr ::= ID LP STAR RP */ { - yylhsminor.yy64 = tSQLExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); + yylhsminor.yy66 = tSQLExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } - yymsp[-3].minor.yy64 = yylhsminor.yy64; + yymsp[-3].minor.yy66 = yylhsminor.yy66; break; - case 199: /* expr ::= expr AND expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_AND);} - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 196: /* expr ::= expr AND expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_AND);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 200: /* expr ::= expr OR expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_OR); } - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 197: /* expr ::= expr OR expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_OR); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 201: /* expr ::= expr LT expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LT);} - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 198: /* expr ::= expr LT expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_LT);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 202: /* expr ::= expr GT expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_GT);} - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 199: /* expr ::= expr GT expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_GT);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 203: /* expr ::= expr LE expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LE);} - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 200: /* expr ::= expr LE expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_LE);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 204: /* expr ::= expr GE expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_GE);} - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 201: /* expr ::= expr GE expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_GE);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 205: /* expr ::= expr NE expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_NE);} - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 202: /* expr ::= expr NE expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_NE);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 206: /* expr ::= expr EQ expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_EQ);} - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 203: /* expr ::= expr EQ expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_EQ);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 207: /* expr ::= expr PLUS expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_PLUS); } - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 204: /* expr ::= expr PLUS expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_PLUS); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 208: /* expr ::= expr MINUS expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_MINUS); } - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 205: /* expr ::= expr MINUS expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_MINUS); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 209: /* expr ::= expr STAR expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_STAR); } - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 206: /* expr ::= expr STAR expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_STAR); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 210: /* expr ::= expr SLASH expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_DIVIDE);} - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 207: /* expr ::= expr SLASH expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_DIVIDE);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 211: /* expr ::= expr REM expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_REM); } - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 208: /* expr ::= expr REM expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_REM); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 212: /* expr ::= expr LIKE expr */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LIKE); } - yymsp[-2].minor.yy64 = yylhsminor.yy64; + case 209: /* expr ::= expr LIKE expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_LIKE); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 213: /* expr ::= expr IN LP exprlist RP */ -{yylhsminor.yy64 = tSQLExprCreate(yymsp[-4].minor.yy64, (tSQLExpr*)yymsp[-1].minor.yy290, TK_IN); } - yymsp[-4].minor.yy64 = yylhsminor.yy64; + case 210: /* expr ::= expr IN LP exprlist RP */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-4].minor.yy66, (tSQLExpr*)yymsp[-1].minor.yy224, TK_IN); } + yymsp[-4].minor.yy66 = yylhsminor.yy66; break; - case 214: /* exprlist ::= exprlist COMMA expritem */ -{yylhsminor.yy290 = tSQLExprListAppend(yymsp[-2].minor.yy290,yymsp[0].minor.yy64,0);} - yymsp[-2].minor.yy290 = yylhsminor.yy290; + case 211: /* exprlist ::= exprlist COMMA expritem */ +{yylhsminor.yy224 = tSQLExprListAppend(yymsp[-2].minor.yy224,yymsp[0].minor.yy66,0);} + yymsp[-2].minor.yy224 = yylhsminor.yy224; break; - case 215: /* exprlist ::= expritem */ -{yylhsminor.yy290 = tSQLExprListAppend(0,yymsp[0].minor.yy64,0);} - yymsp[0].minor.yy290 = yylhsminor.yy290; + case 212: /* exprlist ::= expritem */ +{yylhsminor.yy224 = tSQLExprListAppend(0,yymsp[0].minor.yy66,0);} + yymsp[0].minor.yy224 = yylhsminor.yy224; break; - case 216: /* expritem ::= expr */ -{yylhsminor.yy64 = yymsp[0].minor.yy64;} - yymsp[0].minor.yy64 = yylhsminor.yy64; + case 213: /* expritem ::= expr */ +{yylhsminor.yy66 = yymsp[0].minor.yy66;} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 218: /* cmd ::= RESET QUERY CACHE */ + case 215: /* cmd ::= RESET QUERY CACHE */ { setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);} break; - case 219: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ + case 216: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; - SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy523, NULL, TSDB_ALTER_TABLE_ADD_COLUMN); + SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy449, NULL, TSDB_ALTER_TABLE_ADD_COLUMN); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 220: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ + case 217: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; @@ -2764,14 +2747,14 @@ static void yy_reduce( setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 221: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ + case 218: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; - SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy523, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN); + SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy449, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 222: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ + case 219: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; @@ -2782,7 +2765,7 @@ static void yy_reduce( setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 223: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ + case 220: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ { yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; @@ -2796,25 +2779,25 @@ static void yy_reduce( setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 224: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ + case 221: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ { yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n; toTSDBType(yymsp[-2].minor.yy0.type); tVariantList* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1); - A = tVariantListAppend(A, &yymsp[0].minor.yy134, -1); + A = tVariantListAppend(A, &yymsp[0].minor.yy312, -1); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 225: /* cmd ::= KILL CONNECTION INTEGER */ + case 222: /* cmd ::= KILL CONNECTION INTEGER */ {setKillSQL(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);} break; - case 226: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */ + case 223: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */ {yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_STREAM, &yymsp[-2].minor.yy0);} break; - case 227: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */ + case 224: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */ {yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_QUERY, &yymsp[-2].minor.yy0);} break; default: From 401e72996147024be5b46c63d78596343bd1fb42 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 5 Sep 2020 14:53:59 +0800 Subject: [PATCH 40/58] [td-1333] --- src/inc/ttokendef.h | 241 ++++++++++++++++++++++---------------------- 1 file changed, 120 insertions(+), 121 deletions(-) diff --git a/src/inc/ttokendef.h b/src/inc/ttokendef.h index c1579fe9e7..c5831a9b8a 100644 --- a/src/inc/ttokendef.h +++ b/src/inc/ttokendef.h @@ -101,127 +101,126 @@ #define TK_CONNS 83 #define TK_STATE 84 #define TK_KEEP 85 -#define TK_MAXTABLES 86 -#define TK_CACHE 87 -#define TK_REPLICA 88 -#define TK_QUORUM 89 -#define TK_DAYS 90 -#define TK_MINROWS 91 -#define TK_MAXROWS 92 -#define TK_BLOCKS 93 -#define TK_CTIME 94 -#define TK_WAL 95 -#define TK_FSYNC 96 -#define TK_COMP 97 -#define TK_PRECISION 98 -#define TK_LP 99 -#define TK_RP 100 -#define TK_TAGS 101 -#define TK_USING 102 -#define TK_AS 103 -#define TK_COMMA 104 -#define TK_NULL 105 -#define TK_SELECT 106 -#define TK_UNION 107 -#define TK_ALL 108 -#define TK_FROM 109 -#define TK_VARIABLE 110 -#define TK_INTERVAL 111 -#define TK_FILL 112 -#define TK_SLIDING 113 -#define TK_ORDER 114 -#define TK_BY 115 -#define TK_ASC 116 -#define TK_DESC 117 -#define TK_GROUP 118 -#define TK_HAVING 119 -#define TK_LIMIT 120 -#define TK_OFFSET 121 -#define TK_SLIMIT 122 -#define TK_SOFFSET 123 -#define TK_WHERE 124 -#define TK_NOW 125 -#define TK_RESET 126 -#define TK_QUERY 127 -#define TK_ADD 128 -#define TK_COLUMN 129 -#define TK_TAG 130 -#define TK_CHANGE 131 -#define TK_SET 132 -#define TK_KILL 133 -#define TK_CONNECTION 134 -#define TK_STREAM 135 -#define TK_COLON 136 -#define TK_ABORT 137 -#define TK_AFTER 138 -#define TK_ATTACH 139 -#define TK_BEFORE 140 -#define TK_BEGIN 141 -#define TK_CASCADE 142 -#define TK_CLUSTER 143 -#define TK_CONFLICT 144 -#define TK_COPY 145 -#define TK_DEFERRED 146 -#define TK_DELIMITERS 147 -#define TK_DETACH 148 -#define TK_EACH 149 -#define TK_END 150 -#define TK_EXPLAIN 151 -#define TK_FAIL 152 -#define TK_FOR 153 -#define TK_IGNORE 154 -#define TK_IMMEDIATE 155 -#define TK_INITIALLY 156 -#define TK_INSTEAD 157 -#define TK_MATCH 158 -#define TK_KEY 159 -#define TK_OF 160 -#define TK_RAISE 161 -#define TK_REPLACE 162 -#define TK_RESTRICT 163 -#define TK_ROW 164 -#define TK_STATEMENT 165 -#define TK_TRIGGER 166 -#define TK_VIEW 167 -#define TK_COUNT 168 -#define TK_SUM 169 -#define TK_AVG 170 -#define TK_MIN 171 -#define TK_MAX 172 -#define TK_FIRST 173 -#define TK_LAST 174 -#define TK_TOP 175 -#define TK_BOTTOM 176 -#define TK_STDDEV 177 -#define TK_PERCENTILE 178 -#define TK_APERCENTILE 179 -#define TK_LEASTSQUARES 180 -#define TK_HISTOGRAM 181 -#define TK_DIFF 182 -#define TK_SPREAD 183 -#define TK_TWA 184 -#define TK_INTERP 185 -#define TK_LAST_ROW 186 -#define TK_RATE 187 -#define TK_IRATE 188 -#define TK_SUM_RATE 189 -#define TK_SUM_IRATE 190 -#define TK_AVG_RATE 191 -#define TK_AVG_IRATE 192 -#define TK_TBID 193 -#define TK_SEMI 194 -#define TK_NONE 195 -#define TK_PREV 196 -#define TK_LINEAR 197 -#define TK_IMPORT 198 -#define TK_METRIC 199 -#define TK_TBNAME 200 -#define TK_JOIN 201 -#define TK_METRICS 202 -#define TK_STABLE 203 -#define TK_INSERT 204 -#define TK_INTO 205 -#define TK_VALUES 206 +#define TK_CACHE 86 +#define TK_REPLICA 87 +#define TK_QUORUM 88 +#define TK_DAYS 89 +#define TK_MINROWS 90 +#define TK_MAXROWS 91 +#define TK_BLOCKS 92 +#define TK_CTIME 93 +#define TK_WAL 94 +#define TK_FSYNC 95 +#define TK_COMP 96 +#define TK_PRECISION 97 +#define TK_LP 98 +#define TK_RP 99 +#define TK_TAGS 100 +#define TK_USING 101 +#define TK_AS 102 +#define TK_COMMA 103 +#define TK_NULL 104 +#define TK_SELECT 105 +#define TK_UNION 106 +#define TK_ALL 107 +#define TK_FROM 108 +#define TK_VARIABLE 109 +#define TK_INTERVAL 110 +#define TK_FILL 111 +#define TK_SLIDING 112 +#define TK_ORDER 113 +#define TK_BY 114 +#define TK_ASC 115 +#define TK_DESC 116 +#define TK_GROUP 117 +#define TK_HAVING 118 +#define TK_LIMIT 119 +#define TK_OFFSET 120 +#define TK_SLIMIT 121 +#define TK_SOFFSET 122 +#define TK_WHERE 123 +#define TK_NOW 124 +#define TK_RESET 125 +#define TK_QUERY 126 +#define TK_ADD 127 +#define TK_COLUMN 128 +#define TK_TAG 129 +#define TK_CHANGE 130 +#define TK_SET 131 +#define TK_KILL 132 +#define TK_CONNECTION 133 +#define TK_STREAM 134 +#define TK_COLON 135 +#define TK_ABORT 136 +#define TK_AFTER 137 +#define TK_ATTACH 138 +#define TK_BEFORE 139 +#define TK_BEGIN 140 +#define TK_CASCADE 141 +#define TK_CLUSTER 142 +#define TK_CONFLICT 143 +#define TK_COPY 144 +#define TK_DEFERRED 145 +#define TK_DELIMITERS 146 +#define TK_DETACH 147 +#define TK_EACH 148 +#define TK_END 149 +#define TK_EXPLAIN 150 +#define TK_FAIL 151 +#define TK_FOR 152 +#define TK_IGNORE 153 +#define TK_IMMEDIATE 154 +#define TK_INITIALLY 155 +#define TK_INSTEAD 156 +#define TK_MATCH 157 +#define TK_KEY 158 +#define TK_OF 159 +#define TK_RAISE 160 +#define TK_REPLACE 161 +#define TK_RESTRICT 162 +#define TK_ROW 163 +#define TK_STATEMENT 164 +#define TK_TRIGGER 165 +#define TK_VIEW 166 +#define TK_COUNT 167 +#define TK_SUM 168 +#define TK_AVG 169 +#define TK_MIN 170 +#define TK_MAX 171 +#define TK_FIRST 172 +#define TK_LAST 173 +#define TK_TOP 174 +#define TK_BOTTOM 175 +#define TK_STDDEV 176 +#define TK_PERCENTILE 177 +#define TK_APERCENTILE 178 +#define TK_LEASTSQUARES 179 +#define TK_HISTOGRAM 180 +#define TK_DIFF 181 +#define TK_SPREAD 182 +#define TK_TWA 183 +#define TK_INTERP 184 +#define TK_LAST_ROW 185 +#define TK_RATE 186 +#define TK_IRATE 187 +#define TK_SUM_RATE 188 +#define TK_SUM_IRATE 189 +#define TK_AVG_RATE 190 +#define TK_AVG_IRATE 191 +#define TK_TBID 192 +#define TK_SEMI 193 +#define TK_NONE 194 +#define TK_PREV 195 +#define TK_LINEAR 196 +#define TK_IMPORT 197 +#define TK_METRIC 198 +#define TK_TBNAME 199 +#define TK_JOIN 200 +#define TK_METRICS 201 +#define TK_STABLE 202 +#define TK_INSERT 203 +#define TK_INTO 204 +#define TK_VALUES 205 #define TK_SPACE 300 From 25c0b8cbe9f25d63649a993b93fc94cf70110663 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Sat, 5 Sep 2020 09:50:15 +0000 Subject: [PATCH 41/58] [TD-1293 ]: monitor uses too many resources and may cause auth failure --- src/common/src/tglobal.c | 5 +- src/mnode/src/mnodeUser.c | 2 +- src/plugins/monitor/src/monitorMain.c | 346 ++++++++++++-------------- src/plugins/mqtt/src/mqttSystem.c | 21 +- tests/script/jenkins/basic.txt | 1 + tests/script/sh/deploy.sh | 2 +- tests/script/unique/mnode/mgmt20.sim | 71 ++++++ 7 files changed, 255 insertions(+), 193 deletions(-) create mode 100644 tests/script/unique/mnode/mgmt20.sim diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index 7f3cd46a55..c7763a257a 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -251,8 +251,11 @@ bool taosCfgDynamicOptions(char *msg) { for (int32_t i = 0; i < tsGlobalConfigNum; ++i) { SGlobalCfg *cfg = tsGlobalConfig + i; - if (!(cfg->cfgType & TSDB_CFG_CTYPE_B_LOG)) continue; + //if (!(cfg->cfgType & TSDB_CFG_CTYPE_B_LOG)) continue; if (cfg->valType != TAOS_CFG_VTYPE_INT32) continue; + + int32_t cfgLen = strlen(cfg->option); + if (cfgLen != olen) continue; if (strncasecmp(option, cfg->option, olen) != 0) continue; *((int32_t *)cfg->ptr) = vint; diff --git a/src/mnode/src/mnodeUser.c b/src/mnode/src/mnodeUser.c index f4cb1a9ef3..c03ff688d2 100644 --- a/src/mnode/src/mnodeUser.c +++ b/src/mnode/src/mnodeUser.c @@ -581,7 +581,7 @@ void mnodeDropAllUsers(SAcctObj *pAcct) { int32_t mnodeRetriveAuth(char *user, char *spi, char *encrypt, char *secret, char *ckey) { if (!sdbIsMaster()) { *secret = 0; - mDebug("user:%s, failed to auth user, reason:%s", user, tstrerror(TSDB_CODE_APP_NOT_READY)); + mDebug("user:%s, failed to auth user, mnode is not master", user); return TSDB_CODE_APP_NOT_READY; } diff --git a/src/plugins/monitor/src/monitorMain.c b/src/plugins/monitor/src/monitorMain.c index d76bb4bd82..7800ddec57 100644 --- a/src/plugins/monitor/src/monitorMain.c +++ b/src/plugins/monitor/src/monitorMain.c @@ -25,6 +25,7 @@ #include "tsclient.h" #include "dnode.h" #include "monitor.h" +#include "taoserror.h" #define monitorFatal(...) { if (monitorDebugFlag & DEBUG_FATAL) { taosPrintLog("MON FATAL ", 255, __VA_ARGS__); }} #define monitorError(...) { if (monitorDebugFlag & DEBUG_ERROR) { taosPrintLog("MON ERROR ", 255, __VA_ARGS__); }} @@ -33,129 +34,159 @@ #define monitorDebug(...) { if (monitorDebugFlag & DEBUG_DEBUG) { taosPrintLog("MON ", monitorDebugFlag, __VA_ARGS__); }} #define monitorTrace(...) { if (monitorDebugFlag & DEBUG_TRACE) { taosPrintLog("MON ", monitorDebugFlag, __VA_ARGS__); }} -#define SQL_LENGTH 1024 +#define SQL_LENGTH 1030 #define LOG_LEN_STR 100 #define IP_LEN_STR TSDB_EP_LEN #define CHECK_INTERVAL 1000 typedef enum { - MONITOR_CMD_CREATE_DB, - MONITOR_CMD_CREATE_TB_LOG, - MONITOR_CMD_CREATE_MT_DN, - MONITOR_CMD_CREATE_MT_ACCT, - MONITOR_CMD_CREATE_TB_DN, - MONITOR_CMD_CREATE_TB_ACCT_ROOT, - MONITOR_CMD_CREATE_TB_SLOWQUERY, - MONITOR_CMD_MAX + MON_CMD_CREATE_DB, + MON_CMD_CREATE_TB_LOG, + MON_CMD_CREATE_MT_DN, + MON_CMD_CREATE_MT_ACCT, + MON_CMD_CREATE_TB_DN, + MON_CMD_CREATE_TB_ACCT_ROOT, + MON_CMD_CREATE_TB_SLOWQUERY, + MON_CMD_MAX } EMonitorCommand; typedef enum { - MONITOR_STATE_UN_INIT, - MONITOR_STATE_INITIALIZING, - MONITOR_STATE_INITIALIZED, - MONITOR_STATE_STOPPED + MON_STATE_NOT_INIT, + MON_STATE_INITED } EMonitorState; typedef struct { - void * conn; - void * timer; - char ep[TSDB_EP_LEN]; - int8_t cmdIndex; - int8_t state; - char sql[SQL_LENGTH + 1]; - void * initTimer; - void * diskTimer; + pthread_t thread; + void * conn; + char ep[TSDB_EP_LEN]; + int8_t cmdIndex; + int8_t state; + int8_t start; // enable/disable by mnode + int8_t quiting; // taosd is quiting + char sql[SQL_LENGTH + 1]; } SMonitorConn; -static SMonitorConn tsMonitorConn; -static void monitorInitConn(void *para, void *unused); -static void monitorInitConnCb(void *param, TAOS_RES *result, int32_t code); -static void monitorInitDatabase(); -static void monitorInitDatabaseCb(void *param, TAOS_RES *result, int32_t code); -static void monitorStartTimer(); -static void monitorSaveSystemInfo(); +static SMonitorConn tsMonitor = {0}; +static void monitorSaveSystemInfo(); +static void *monitorThreadFunc(void *param); +static void monitorBuildMonitorSql(char *sql, int32_t cmd); extern int32_t (*monitorStartSystemFp)(); -extern void (*monitorStopSystemFp)(); -extern void (*monitorExecuteSQLFp)(char *sql); - -static void monitorCheckDiskUsage(void *para, void *unused) { - taosGetDisk(); - taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &tsMonitorConn.diskTimer); -} +extern void (*monitorStopSystemFp)(); +extern void (*monitorExecuteSQLFp)(char *sql); int32_t monitorInitSystem() { - taos_init(); - taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &tsMonitorConn.diskTimer); + if (tsMonitor.ep[0] == 0) { + strcpy(tsMonitor.ep, tsLocalEp); + } + + int len = strlen(tsMonitor.ep); + for (int i = 0; i < len; ++i) { + if (tsMonitor.ep[i] == ':' || tsMonitor.ep[i] == '-' || tsMonitor.ep[i] == '.') { + tsMonitor.ep[i] = '_'; + } + } + + pthread_attr_t thAttr; + pthread_attr_init(&thAttr); + pthread_attr_setdetachstate(&thAttr, PTHREAD_CREATE_JOINABLE); + + if (pthread_create(&tsMonitor.thread, &thAttr, monitorThreadFunc, NULL)) { + monitorError("failed to create thread to for monitor module, reason:%s", strerror(errno)); + return -1; + } + + pthread_attr_destroy(&thAttr); + monitorDebug("monitor thread is launched"); + monitorStartSystemFp = monitorStartSystem; monitorStopSystemFp = monitorStopSystem; return 0; } int32_t monitorStartSystem() { - monitorInfo("start monitor module"); - monitorInitSystem(); - taosTmrReset(monitorInitConn, 10, NULL, tscTmr, &tsMonitorConn.initTimer); + taos_init(); + tsMonitor.start = 1; + monitorExecuteSQLFp = monitorExecuteSQL; + monitorInfo("monitor module start"); return 0; } -static void monitorStartSystemRetry() { - if (tsMonitorConn.initTimer != NULL) { - taosTmrReset(monitorInitConn, 3000, NULL, tscTmr, &tsMonitorConn.initTimer); - } -} +static void *monitorThreadFunc(void *param) { + monitorDebug("starting to initialize monitor module ..."); -static void monitorInitConn(void *para, void *unused) { - if (dnodeGetDnodeId() <= 0) { - monitorStartSystemRetry(); - return; - } - - monitorInfo("starting to initialize monitor service .."); - tsMonitorConn.state = MONITOR_STATE_INITIALIZING; + while (1) { + if (tsMonitor.quiting) { + tsMonitor.state = MON_STATE_NOT_INIT; + monitorInfo("monitor thread will quit, for taosd is quiting"); + break; + } else { + taosGetDisk(); + } - if (tsMonitorConn.ep[0] == 0) - strcpy(tsMonitorConn.ep, tsLocalEp); + if (tsMonitor.start == 0) { + continue; + } - int len = strlen(tsMonitorConn.ep); - for (int i = 0; i < len; ++i) { - if (tsMonitorConn.ep[i] == ':' || tsMonitorConn.ep[i] == '-') { - tsMonitorConn.ep[i] = '_'; + static int32_t accessTimes = 0; + accessTimes++; + taosMsleep(1000); + + if (dnodeGetDnodeId() <= 0) { + monitorDebug("dnode not initialized, waiting for 3000 ms to start monitor module"); + continue; + } + + if (tsMonitor.conn == NULL) { + tsMonitor.state = MON_STATE_NOT_INIT; + tsMonitor.conn = taos_connect(NULL, "monitor", tsInternalPass, "", 0); + if (tsMonitor.conn == NULL) { + monitorError("failed to connect to database, reason:%s", tstrerror(terrno)); + continue; + } else { + monitorDebug("connect to database success"); + } + } + + if (tsMonitor.state == MON_STATE_NOT_INIT) { + for (; tsMonitor.cmdIndex < MON_CMD_MAX; ++tsMonitor.cmdIndex) { + monitorBuildMonitorSql(tsMonitor.sql, tsMonitor.cmdIndex); + void *res = taos_query(tsMonitor.conn, tsMonitor.sql); + int code = taos_errno(res); + taos_free_result(res); + + if (code != 0) { + monitorError("failed to exec sql:%s, reason:%s", tsMonitor.sql, tstrerror(code)); + break; + } else { + monitorDebug("successfully to exec sql:%s", tsMonitor.sql); + } + } + + if (tsMonitor.start) { + tsMonitor.state = MON_STATE_INITED; + } + } + + if (tsMonitor.state == MON_STATE_INITED) { + if (accessTimes % tsMonitorInterval == 0) { + monitorSaveSystemInfo(); + } } } - if (tsMonitorConn.conn == NULL) { - taos_connect_a(NULL, "monitor", tsInternalPass, "", 0, monitorInitConnCb, &tsMonitorConn, &(tsMonitorConn.conn)); - } else { - monitorInitDatabase(); - } + monitorInfo("monitor thread is stopped"); + return NULL; } -static void monitorInitConnCb(void *param, TAOS_RES *result, int32_t code) { - // free it firstly in any cases. - taos_free_result(result); - - if (code != TSDB_CODE_SUCCESS) { - monitorError("monitor:%p, connect to database failed, reason:%s", tsMonitorConn.conn, tstrerror(code)); - taos_close(tsMonitorConn.conn); - tsMonitorConn.conn = NULL; - tsMonitorConn.state = MONITOR_STATE_UN_INIT; - monitorStartSystemRetry(); - return; - } - - monitorDebug("monitor:%p, connect to database success, reason:%s", tsMonitorConn.conn, tstrerror(code)); - monitorInitDatabase(); -} - -static void dnodeBuildMonitorSql(char *sql, int32_t cmd) { +static void monitorBuildMonitorSql(char *sql, int32_t cmd) { memset(sql, 0, SQL_LENGTH); - if (cmd == MONITOR_CMD_CREATE_DB) { + if (cmd == MON_CMD_CREATE_DB) { snprintf(sql, SQL_LENGTH, "create database if not exists %s replica 1 days 10 keep 30 cache %d " "blocks %d maxtables 16 precision 'us'", tsMonitorDbName, TSDB_MIN_CACHE_BLOCK_SIZE, TSDB_MIN_TOTAL_BLOCKS); - } else if (cmd == MONITOR_CMD_CREATE_MT_DN) { + } else if (cmd == MON_CMD_CREATE_MT_DN) { snprintf(sql, SQL_LENGTH, "create table if not exists %s.dn(ts timestamp" ", cpu_taosd float, cpu_system float, cpu_cores int" @@ -166,10 +197,10 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) { ", req_http int, req_select int, req_insert int" ") tags (dnodeid int, fqdn binary(%d))", tsMonitorDbName, TSDB_FQDN_LEN); - } else if (cmd == MONITOR_CMD_CREATE_TB_DN) { + } else if (cmd == MON_CMD_CREATE_TB_DN) { snprintf(sql, SQL_LENGTH, "create table if not exists %s.dn%d using %s.dn tags(%d, '%s')", tsMonitorDbName, dnodeGetDnodeId(), tsMonitorDbName, dnodeGetDnodeId(), tsLocalEp); - } else if (cmd == MONITOR_CMD_CREATE_MT_ACCT) { + } else if (cmd == MON_CMD_CREATE_MT_ACCT) { snprintf(sql, SQL_LENGTH, "create table if not exists %s.acct(ts timestamp " ", currentPointsPerSecond bigint, maxPointsPerSecond bigint" @@ -185,15 +216,15 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) { ", accessState smallint" ") tags (acctId binary(%d))", tsMonitorDbName, TSDB_USER_LEN); - } else if (cmd == MONITOR_CMD_CREATE_TB_ACCT_ROOT) { + } else if (cmd == MON_CMD_CREATE_TB_ACCT_ROOT) { snprintf(sql, SQL_LENGTH, "create table if not exists %s.acct_%s using %s.acct tags('%s')", tsMonitorDbName, TSDB_DEFAULT_USER, tsMonitorDbName, TSDB_DEFAULT_USER); - } else if (cmd == MONITOR_CMD_CREATE_TB_SLOWQUERY) { + } else if (cmd == MON_CMD_CREATE_TB_SLOWQUERY) { snprintf(sql, SQL_LENGTH, "create table if not exists %s.slowquery(ts timestamp, username " "binary(%d), created_time timestamp, time bigint, sql binary(%d))", tsMonitorDbName, TSDB_TABLE_FNAME_LEN - 1, TSDB_SLOW_QUERY_SQL_LEN); - } else if (cmd == MONITOR_CMD_CREATE_TB_LOG) { + } else if (cmd == MON_CMD_CREATE_TB_LOG) { snprintf(sql, SQL_LENGTH, "create table if not exists %s.log(ts timestamp, level tinyint, " "content binary(%d), ipaddr binary(%d))", @@ -203,75 +234,22 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) { sql[SQL_LENGTH] = 0; } -static void monitorInitDatabase() { - if (tsMonitorConn.cmdIndex < MONITOR_CMD_MAX) { - dnodeBuildMonitorSql(tsMonitorConn.sql, tsMonitorConn.cmdIndex); - taos_query_a(tsMonitorConn.conn, tsMonitorConn.sql, monitorInitDatabaseCb, NULL); - } else { - tsMonitorConn.state = MONITOR_STATE_INITIALIZED; - monitorExecuteSQLFp = monitorExecuteSQL; - monitorInfo("monitor service init success"); - - monitorStartTimer(); - } -} - -static void monitorInitDatabaseCb(void *param, TAOS_RES *result, int32_t code) { - if (code == TSDB_CODE_MND_TABLE_ALREADY_EXIST || code == TSDB_CODE_MND_DB_ALREADY_EXIST || code >= 0) { - monitorDebug("monitor:%p, sql success, reason:%s, %s", tsMonitorConn.conn, tstrerror(code), tsMonitorConn.sql); - if (tsMonitorConn.cmdIndex == MONITOR_CMD_CREATE_TB_LOG) { - monitorInfo("dnode:%s is started", tsLocalEp); - } - tsMonitorConn.cmdIndex++; - monitorInitDatabase(); - } else { - monitorError("monitor:%p, sql failed, reason:%s, %s", tsMonitorConn.conn, tstrerror(code), tsMonitorConn.sql); - tsMonitorConn.state = MONITOR_STATE_UN_INIT; - monitorStartSystemRetry(); - } - - taos_free_result(result); -} - void monitorStopSystem() { - if (tsMonitorConn.state == MONITOR_STATE_STOPPED) return; - tsMonitorConn.state = MONITOR_STATE_STOPPED; + tsMonitor.start = 0; + tsMonitor.state = MON_STATE_NOT_INIT; monitorExecuteSQLFp = NULL; - - monitorInfo("monitor module is stopped"); - - if (tsMonitorConn.initTimer != NULL) { - taosTmrStopA(&(tsMonitorConn.initTimer)); - } - if (tsMonitorConn.timer != NULL) { - taosTmrStopA(&(tsMonitorConn.timer)); - } - if (tsMonitorConn.conn != NULL) { - taos_close(tsMonitorConn.conn); - tsMonitorConn.conn = NULL; - } + monitorInfo("monitor module stopped"); } void monitorCleanUpSystem() { + tsMonitor.quiting = 1; monitorStopSystem(); - monitorInfo("monitor module cleanup"); -} - -static void monitorStartTimer() { - taosTmrReset(monitorSaveSystemInfo, tsMonitorInterval * 1000, NULL, tscTmr, &tsMonitorConn.timer); -} - -static void dnodeMontiorLogCallback(void *param, TAOS_RES *result, int32_t code) { - int32_t c = taos_errno(result); - - if (c != TSDB_CODE_SUCCESS) { - monitorError("monitor:%p, save %s failed, reason:%s", tsMonitorConn.conn, (char *)param, tstrerror(c)); - } else { - int32_t rows = taos_affected_rows(result); - monitorDebug("monitor:%p, save %s succ, rows:%d", tsMonitorConn.conn, (char *)param, rows); + pthread_join(tsMonitor.thread, NULL); + if (tsMonitor.conn != NULL) { + taos_close(tsMonitor.conn); + tsMonitor.conn = NULL; } - - taos_free_result(result); + monitorInfo("monitor module is cleaned up"); } // unit is MB @@ -279,13 +257,13 @@ static int32_t monitorBuildMemorySql(char *sql) { float sysMemoryUsedMB = 0; bool suc = taosGetSysMemory(&sysMemoryUsedMB); if (!suc) { - monitorError("monitor:%p, get sys memory info failed.", tsMonitorConn.conn); + monitorDebug("failed to get sys memory info"); } float procMemoryUsedMB = 0; suc = taosGetProcMemory(&procMemoryUsedMB); if (!suc) { - monitorError("monitor:%p, get proc memory info failed.", tsMonitorConn.conn); + monitorDebug("failed to get proc memory info"); } return sprintf(sql, ", %f, %f, %d", procMemoryUsedMB, sysMemoryUsedMB, tsTotalMemoryMB); @@ -296,11 +274,11 @@ static int32_t monitorBuildCpuSql(char *sql) { float sysCpuUsage = 0, procCpuUsage = 0; bool suc = taosGetCpuUsage(&sysCpuUsage, &procCpuUsage); if (!suc) { - monitorError("monitor:%p, get cpu usage failed.", tsMonitorConn.conn); + monitorDebug("failed to get cpu usage"); } if (sysCpuUsage <= procCpuUsage) { - sysCpuUsage = procCpuUsage + (float)0.1; + sysCpuUsage = procCpuUsage + 0.1f; } return sprintf(sql, ", %f, %f, %d", procCpuUsage, sysCpuUsage, tsNumOfCores); @@ -316,14 +294,14 @@ static int32_t monitorBuildBandSql(char *sql) { float bandSpeedKb = 0; bool suc = taosGetBandSpeed(&bandSpeedKb); if (!suc) { - monitorError("monitor:%p, get bandwidth speed failed.", tsMonitorConn.conn); + monitorDebug("failed to get bandwidth speed"); } return sprintf(sql, ", %f", bandSpeedKb); } static int32_t monitorBuildReqSql(char *sql) { - SDnodeStatisInfo info = dnodeGetStatisInfo(); + SDnodeStatisInfo info = dnodeGetStatisInfo(); return sprintf(sql, ", %d, %d, %d)", info.httpReqNum, info.queryReqNum, info.submitReqNum); } @@ -331,20 +309,15 @@ static int32_t monitorBuildIoSql(char *sql) { float readKB = 0, writeKB = 0; bool suc = taosGetProcIO(&readKB, &writeKB); if (!suc) { - monitorError("monitor:%p, get io info failed.", tsMonitorConn.conn); + monitorDebug("failed to get io info"); } return sprintf(sql, ", %f, %f", readKB, writeKB); } static void monitorSaveSystemInfo() { - if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) { - monitorStartTimer(); - return; - } - int64_t ts = taosGetTimestampUs(); - char * sql = tsMonitorConn.sql; + char * sql = tsMonitor.sql; int32_t pos = snprintf(sql, SQL_LENGTH, "insert into %s.dn%d values(%" PRId64, tsMonitorDbName, dnodeGetDnodeId(), ts); pos += monitorBuildCpuSql(sql + pos); @@ -354,16 +327,31 @@ static void monitorSaveSystemInfo() { pos += monitorBuildIoSql(sql + pos); pos += monitorBuildReqSql(sql + pos); - monitorDebug("monitor:%p, save system info, sql:%s", tsMonitorConn.conn, sql); - taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorLogCallback, "sys"); + void *res = taos_query(tsMonitor.conn, tsMonitor.sql); + int code = taos_errno(res); + taos_free_result(res); - if (tsMonitorConn.timer != NULL && tsMonitorConn.state != MONITOR_STATE_STOPPED) { - monitorStartTimer(); + if (code != 0) { + monitorError("failed to save system info, reason:%s, sql:%s", tstrerror(code), tsMonitor.sql); + } else { + monitorDebug("successfully to save system info, sql:%s", tsMonitor.sql); } } +static void montiorExecSqlCb(void *param, TAOS_RES *result, int32_t code) { + int32_t c = taos_errno(result); + if (c != TSDB_CODE_SUCCESS) { + monitorError("save %s failed, reason:%s", (char *)param, tstrerror(c)); + } else { + int32_t rows = taos_affected_rows(result); + monitorDebug("save %s succ, rows:%d", (char *)param, rows); + } + + taos_free_result(result); +} + void monitorSaveAcctLog(SAcctMonitorObj *pMon) { - if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return; + if (tsMonitor.state != MON_STATE_INITED) return; char sql[1024] = {0}; sprintf(sql, @@ -392,19 +380,16 @@ void monitorSaveAcctLog(SAcctMonitorObj *pMon) { pMon->totalConns, pMon->maxConns, pMon->accessState); - monitorDebug("monitor:%p, save account info, sql %s", tsMonitorConn.conn, sql); - taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorLogCallback, "account"); + monitorDebug("save account info, sql:%s", sql); + taos_query_a(tsMonitor.conn, sql, montiorExecSqlCb, "account info"); } void monitorSaveLog(int32_t level, const char *const format, ...) { - if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return; + if (tsMonitor.state != MON_STATE_INITED) return; va_list argpointer; char sql[SQL_LENGTH] = {0}; int32_t max_length = SQL_LENGTH - 30; - - if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return; - int32_t len = snprintf(sql, (size_t)max_length, "insert into %s.log values(%" PRId64 ", %d,'", tsMonitorDbName, taosGetTimestampUs(), level); @@ -416,12 +401,13 @@ void monitorSaveLog(int32_t level, const char *const format, ...) { len += sprintf(sql + len, "', '%s')", tsLocalEp); sql[len++] = 0; - monitorDebug("monitor:%p, save log, sql: %s", tsMonitorConn.conn, sql); - taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorLogCallback, "log"); + monitorDebug("save log, sql: %s", sql); + taos_query_a(tsMonitor.conn, sql, montiorExecSqlCb, "log"); } void monitorExecuteSQL(char *sql) { - if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return; - monitorDebug("monitor:%p, execute sql: %s", tsMonitorConn.conn, sql); - taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorLogCallback, "sql"); + if (tsMonitor.state != MON_STATE_INITED) return; + + monitorDebug("execute sql:%s", sql); + taos_query_a(tsMonitor.conn, sql, montiorExecSqlCb, "sql"); } diff --git a/src/plugins/mqtt/src/mqttSystem.c b/src/plugins/mqtt/src/mqttSystem.c index 8079cedb27..eacc3b1f74 100644 --- a/src/plugins/mqtt/src/mqttSystem.c +++ b/src/plugins/mqtt/src/mqttSystem.c @@ -23,12 +23,13 @@ #include "posix_sockets.h" #include "taos.h" #include "tglobal.h" +#include "taoserror.h" -struct mqtt_client tsMqttClient = {0}; struct SMqttReconnectState tsMqttStatus = {0}; -static pthread_t tsMqttClientDaemonThread = {0}; -static void* tsMqttConnect = NULL; -static bool tsMqttIsRuning = false; +struct mqtt_client tsMqttClient = {0}; +static pthread_t tsMqttClientDaemonThread = {0}; +static void* tsMqttConnect = NULL; +static bool tsMqttIsRuning = false; int32_t mqttInitSystem() { return 0; } @@ -69,32 +70,32 @@ void mqttCleanUpSystem() { void mqttPublishCallback(void** unused, struct mqtt_response_publish* published) { const char* content = published->application_message; - mqttDebug("receive message size:%d", (int)published->application_message_size); + mqttDebug("receive mqtt message, size:%d", (int)published->application_message_size); if (tsMqttConnect == NULL) { tsMqttConnect = taos_connect(NULL, "_root", tsInternalPass, "", 0); if (tsMqttConnect == NULL) { - mqttError("failed to connect to tdengine"); + mqttError("failed to connect to tdengine, reason:%s", tstrerror(terrno)); return; } else { mqttInfo("successfully connected to the tdengine"); } } - mqttTrace("receive message content:%s", content); + mqttTrace("receive mqtt message, content:%s", content); char* sql = mqttConverJsonToSql((char*)content, (int)published->application_message_size); if (sql != NULL) { void* res = taos_query(tsMqttConnect, sql); int code = taos_errno(res); if (code != 0) { - mqttError("failed to exec sql:%s", sql); + mqttError("failed to exec sql, reason:%s sql:%s", tstrerror(code), sql); } else { - mqttDebug("successfully to exec sql:%s", sql); + mqttTrace("successfully to exec sql:%s", sql); } taos_free_result(res); } else { - mqttDebug("failed to parse mqtt message"); + mqttError("failed to parse mqtt message"); } } diff --git a/tests/script/jenkins/basic.txt b/tests/script/jenkins/basic.txt index 40598332d9..88a844333b 100644 --- a/tests/script/jenkins/basic.txt +++ b/tests/script/jenkins/basic.txt @@ -293,6 +293,7 @@ cd ../../../debug; make ./test.sh -f unique/stable/replica3_dnode6.sim ./test.sh -f unique/stable/replica3_vnode3.sim +./test.sh -f unique/mnode/mgmt20.sim ./test.sh -f unique/mnode/mgmt21.sim ./test.sh -f unique/mnode/mgmt22.sim ./test.sh -f unique/mnode/mgmt23.sim diff --git a/tests/script/sh/deploy.sh b/tests/script/sh/deploy.sh index 498f536726..0d444a5a6e 100755 --- a/tests/script/sh/deploy.sh +++ b/tests/script/sh/deploy.sh @@ -119,7 +119,7 @@ echo "tsdbDebugFlag 135" >> $TAOS_CFG echo "cDebugFlag 135" >> $TAOS_CFG echo "jnidebugFlag 135" >> $TAOS_CFG echo "odbcdebugFlag 135" >> $TAOS_CFG -echo "httpDebugFlag 143" >> $TAOS_CFG +echo "httpDebugFlag 135" >> $TAOS_CFG echo "monitorDebugFlag 135" >> $TAOS_CFG echo "mqttDebugFlag 135" >> $TAOS_CFG echo "qdebugFlag 135" >> $TAOS_CFG diff --git a/tests/script/unique/mnode/mgmt20.sim b/tests/script/unique/mnode/mgmt20.sim new file mode 100644 index 0000000000..d69e377955 --- /dev/null +++ b/tests/script/unique/mnode/mgmt20.sim @@ -0,0 +1,71 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/deploy.sh -n dnode2 -i 2 + +system sh/cfg.sh -n dnode1 -c numOfMnodes -v 2 +system sh/cfg.sh -n dnode2 -c numOfMnodes -v 2 + +system sh/cfg.sh -n dnode1 -c monitor -v 1 +system sh/cfg.sh -n dnode2 -c monitor -v 1 + +print ============== step1 +system sh/exec.sh -n dnode1 -s start +system sh/exec.sh -n dnode2 -s start +sleep 3000 +sql connect + +print ============== step2 +sql create dnode $hostname2 + +$x = 0 +show2: + $x = $x + 1 + sleep 2000 + if $x == 10 then + return -1 + endi + +sql show mnodes +print dnode1 ==> $data2_1 +print dnode2 ==> $data2_2 +if $data2_1 != master then + goto show2 +endi +if $data2_2 != slave then + goto show2 +endi + +system sh/exec.sh -n dnode1 -s stop -x SIGINT +system sh/exec.sh -n dnode2 -s stop -x SIGINT + +print ============== step3 +system sh/exec.sh -n dnode2 -s start +sleep 10000 + +system sh/exec.sh -n dnode1 -s start +sql connect + +print =============== step4 +sql select count(*) from log.dn1 +$d1_first = $rows +sql select count(*) from log.dn2 +$d2_first = $rows + +sleep 3000 +sql select count(*) from log.dn1 +$d1_second = $rows +sql select count(*) from log.dn2 +$d2_second = $rows + +print dnode1 $d1_first $d1_second +print dnode2 $d2_first $d2_first +if $d1_first >= $d1_second then + return -1 +endi + +if $d2_first >= $d2_first then + return -1 +endi + +system sh/exec.sh -n dnode1 -s stop -x SIGINT +system sh/exec.sh -n dnode2 -s stop -x SIGINT \ No newline at end of file From 5a5a27e8fc6e884f1b4538b6129e7aad4650b4ef Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Sat, 5 Sep 2020 09:56:49 +0000 Subject: [PATCH 42/58] minor changes --- tests/script/unique/mnode/mgmt20.sim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/script/unique/mnode/mgmt20.sim b/tests/script/unique/mnode/mgmt20.sim index d69e377955..e51d429925 100644 --- a/tests/script/unique/mnode/mgmt20.sim +++ b/tests/script/unique/mnode/mgmt20.sim @@ -46,24 +46,24 @@ system sh/exec.sh -n dnode1 -s start sql connect print =============== step4 -sql select count(*) from log.dn1 +sql select * from log.dn1 $d1_first = $rows -sql select count(*) from log.dn2 +sql select * from log.dn2 $d2_first = $rows sleep 3000 -sql select count(*) from log.dn1 +sql select * from log.dn1 $d1_second = $rows -sql select count(*) from log.dn2 +sql select * from log.dn2 $d2_second = $rows print dnode1 $d1_first $d1_second -print dnode2 $d2_first $d2_first +print dnode2 $d2_first $d2_second if $d1_first >= $d1_second then return -1 endi -if $d2_first >= $d2_first then +if $d2_first >= $d2_second then return -1 endi From 8cb141554e9c5736a3d0cf4ba12553121887ec54 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 5 Sep 2020 23:31:53 +0800 Subject: [PATCH 43/58] [td-225] update sim script --- tests/script/general/parser/auto_create_tb_drop_tb.sim | 3 ++- tests/script/general/stable/disk.sim | 2 +- tests/script/general/stable/vnode3.sim | 2 +- tests/script/general/table/vgroup.sim | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/script/general/parser/auto_create_tb_drop_tb.sim b/tests/script/general/parser/auto_create_tb_drop_tb.sim index f739f42a6e..68e9c5afb7 100644 --- a/tests/script/general/parser/auto_create_tb_drop_tb.sim +++ b/tests/script/general/parser/auto_create_tb_drop_tb.sim @@ -1,6 +1,7 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 1 +system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 1 system sh/cfg.sh -n dnode1 -c ctime -v 30 system sh/exec.sh -n dnode1 -s start sleep 3000 @@ -21,7 +22,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db maxrows 200 cache 2 maxTables 4 +sql create database $db maxrows 200 cache 2 print ====== create tables sql use $db diff --git a/tests/script/general/stable/disk.sim b/tests/script/general/stable/disk.sim index 8fc7931a73..f49d023928 100644 --- a/tests/script/general/stable/disk.sim +++ b/tests/script/general/stable/disk.sim @@ -23,7 +23,7 @@ $i = 0 $db = $dbPrefix . $i $mt = $mtPrefix . $i -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) diff --git a/tests/script/general/stable/vnode3.sim b/tests/script/general/stable/vnode3.sim index ffe046d94a..560c5e38fc 100644 --- a/tests/script/general/stable/vnode3.sim +++ b/tests/script/general/stable/vnode3.sim @@ -22,7 +22,7 @@ $i = 0 $db = $dbPrefix . $i $mt = $mtPrefix . $i -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) diff --git a/tests/script/general/table/vgroup.sim b/tests/script/general/table/vgroup.sim index 9a86c3ef31..75fda328f3 100644 --- a/tests/script/general/table/vgroup.sim +++ b/tests/script/general/table/vgroup.sim @@ -15,7 +15,7 @@ $db = $dbPrefix . $i $tb = $tbPrefix . $i print =================== step 1 -sql create database $db maxTables 4 +sql create database $db sql use $db sql show vgroups if $rows != 0 then From 97e328b239ff5a9200b66ac285b8e389311f2fb7 Mon Sep 17 00:00:00 2001 From: yangzhiyu Date: Sun, 6 Sep 2020 23:06:34 +0800 Subject: [PATCH 44/58] jdbcDemo use the taos-jdbcdriver-2.0.4 --- tests/examples/JDBC/JDBCDemo/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/examples/JDBC/JDBCDemo/pom.xml b/tests/examples/JDBC/JDBCDemo/pom.xml index 50313a0a0c..f0234f2bd7 100644 --- a/tests/examples/JDBC/JDBCDemo/pom.xml +++ b/tests/examples/JDBC/JDBCDemo/pom.xml @@ -63,7 +63,7 @@ com.taosdata.jdbc taos-jdbcdriver - 2.0.2 + 2.0.4 From 35db7dee2d83e8214731456341f1f235e54bb2bd Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Mon, 7 Sep 2020 10:11:32 +0800 Subject: [PATCH 45/58] [TD-1348]: Java connector markdown file update --- documentation20/webdocs/markdowndocs/connector-java-ch.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation20/webdocs/markdowndocs/connector-java-ch.md b/documentation20/webdocs/markdowndocs/connector-java-ch.md index da5ea52966..f6da7ff403 100644 --- a/documentation20/webdocs/markdowndocs/connector-java-ch.md +++ b/documentation20/webdocs/markdowndocs/connector-java-ch.md @@ -228,7 +228,8 @@ resultSet.close(); stmt.close(); conn.close(); ``` -> `注意务必要将 connection 进行关闭`,否则会出现连接泄露。 +> `注意务必要将 connection 进行关闭`,否则会出现连接泄露。 + ## 与连接池使用 **HikariCP** From a723239a388c62980a03ed6dfe99510254fdca6f Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Mon, 7 Sep 2020 11:03:13 +0800 Subject: [PATCH 46/58] [TECO-6] change fixed version string to placeholder. --- snap/snapcraft.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 0ac0764217..d55be5b8c0 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -1,6 +1,6 @@ name: tdengine -base: core18 # the base snap is the execution environment for this snap -version: '2.0.2.0' # just for humans, typically '1.2+git' or '1.3.2' +base: core18 +version: 'RELEASE_VERSION' icon: snap/gui/t-dengine.svg summary: an open-source big data platform designed and optimized for IoT. description: | @@ -72,7 +72,7 @@ parts: - usr/bin/taosd - usr/bin/taos - usr/bin/taosdemo - - usr/lib/libtaos.so.2.0.2.0 + - usr/lib/libtaos.so.RELEASE_VERSION - usr/lib/libtaos.so.1 - usr/lib/libtaos.so From 61a45a304113b707aad9695e11290240924d5330 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Mon, 7 Sep 2020 11:20:28 +0800 Subject: [PATCH 47/58] [TECO-6] : Add snap badge. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3fbd166f49..22984d8cfe 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![Coverage Status](https://coveralls.io/repos/github/taosdata/TDengine/badge.svg?branch=develop)](https://coveralls.io/github/taosdata/TDengine?branch=develop) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4201/badge)](https://bestpractices.coreinfrastructure.org/projects/4201) [![Docker Pulls](https://img.shields.io/docker/pulls/tdengine/tdengine)](https://hub.docker.com/repository/docker/tdengine/tdengine) +[![tdengine](https://snapcraft.io//tdengine/badge.svg)](https://snapcraft.io/tdengine) [![TDengine](TDenginelogo.png)](https://www.taosdata.com) From a1b1b8ab1185f8accd720c93ffaba9669737005a Mon Sep 17 00:00:00 2001 From: root Date: Mon, 7 Sep 2020 11:39:58 +0800 Subject: [PATCH 48/58] scripts --- src/plugins/monitor/src/monitorMain.c | 2 +- tests/script/general/db/delete_reusevnode.sim | 2 +- tests/script/general/db/delete_reusevnode2.sim | 2 +- tests/script/general/db/dropdnodes.sim | 2 +- tests/script/general/parser/first_last.sim | 2 +- tests/script/general/parser/groupby.sim | 2 +- tests/script/general/parser/join.sim | 2 +- tests/script/general/parser/join_multivnode.sim | 2 +- tests/script/general/parser/lastrow.sim | 2 +- tests/script/general/parser/mixed_blocks.sim | 2 +- .../general/parser/projection_limit_offset.sim | 2 +- tests/script/general/parser/select_with_tags.sim | 2 +- tests/script/general/parser/single_row_in_tb.sim | 2 +- tests/script/general/parser/slimit.sim | 2 +- tests/script/general/parser/timestamp.sim | 2 +- tests/script/general/parser/where.sim | 2 +- tests/script/general/stable/dnode3.sim | 2 +- .../unique/arbitrator/dn3_mn1_vnode_change.sim | 2 +- .../dn3_mn1_vnode_corruptFile_online.sim | 2 +- .../arbitrator/sync_replica3_createTable.sim | 4 ++-- ...plica3_dnodeChang_DropAddAlterTableDropDb.sim | 4 ++-- tests/script/unique/big/maxvnodes.sim | 2 +- tests/script/unique/big/restartSpeed.sim | 2 +- tests/script/unique/cluster/balance1.sim | 16 ++++++++-------- tests/script/unique/cluster/balance2.sim | 6 +++--- tests/script/unique/cluster/cluster_main.sim | 2 +- tests/script/unique/cluster/cluster_main0.sim | 2 +- tests/script/unique/cluster/cluster_main1.sim | 2 +- tests/script/unique/cluster/cluster_main2.sim | 2 +- tests/script/unique/dnode/alternativeRole.sim | 2 +- tests/script/unique/dnode/balance1.sim | 8 ++++---- tests/script/unique/dnode/balance2.sim | 6 +++--- tests/script/unique/dnode/balance3.sim | 6 +++--- tests/script/unique/dnode/balancex.sim | 6 +++--- tests/script/unique/dnode/offline2.sim | 2 +- tests/script/unique/dnode/remove1.sim | 6 +++--- tests/script/unique/dnode/remove2.sim | 6 +++--- tests/script/unique/dnode/vnode_clean.sim | 6 +++--- tests/script/unique/stable/balance_replica1.sim | 2 +- tests/script/unique/stable/dnode2.sim | 2 +- tests/script/unique/stable/dnode2_stop.sim | 2 +- tests/script/unique/stable/dnode3.sim | 2 +- tests/script/unique/stable/replica2_dnode4.sim | 2 +- tests/script/unique/stable/replica2_vnode3.sim | 2 +- tests/script/unique/stable/replica3_dnode6.sim | 2 +- tests/script/unique/stable/replica3_vnode3.sim | 2 +- tests/script/unique/stream/metrics_balance.sim | 2 +- tests/script/unique/stream/table_balance.sim | 2 +- tests/script/unique/stream/table_move.sim | 2 +- 49 files changed, 75 insertions(+), 75 deletions(-) diff --git a/src/plugins/monitor/src/monitorMain.c b/src/plugins/monitor/src/monitorMain.c index 7800ddec57..9c94bdc1fa 100644 --- a/src/plugins/monitor/src/monitorMain.c +++ b/src/plugins/monitor/src/monitorMain.c @@ -184,7 +184,7 @@ static void monitorBuildMonitorSql(char *sql, int32_t cmd) { if (cmd == MON_CMD_CREATE_DB) { snprintf(sql, SQL_LENGTH, "create database if not exists %s replica 1 days 10 keep 30 cache %d " - "blocks %d maxtables 16 precision 'us'", + "blocks %d precision 'us'", tsMonitorDbName, TSDB_MIN_CACHE_BLOCK_SIZE, TSDB_MIN_TOTAL_BLOCKS); } else if (cmd == MON_CMD_CREATE_MT_DN) { snprintf(sql, SQL_LENGTH, diff --git a/tests/script/general/db/delete_reusevnode.sim b/tests/script/general/db/delete_reusevnode.sim index 79783d6dda..5cfe7729ed 100644 --- a/tests/script/general/db/delete_reusevnode.sim +++ b/tests/script/general/db/delete_reusevnode.sim @@ -50,7 +50,7 @@ $tbPrefix = t $i = 0 while $i < 10 $db = db . $i - sql create database $db maxTables 4 + sql create database $db sql use $db sql create table st (ts timestamp, i int) tags(j int); diff --git a/tests/script/general/db/delete_reusevnode2.sim b/tests/script/general/db/delete_reusevnode2.sim index e54266e312..9fa1969425 100644 --- a/tests/script/general/db/delete_reusevnode2.sim +++ b/tests/script/general/db/delete_reusevnode2.sim @@ -8,7 +8,7 @@ sql connect print ======== step1 -sql create database db maxTables 4; +sql create database db; sql use db $tbPrefix = t diff --git a/tests/script/general/db/dropdnodes.sim b/tests/script/general/db/dropdnodes.sim index be160910c5..884a88490e 100644 --- a/tests/script/general/db/dropdnodes.sim +++ b/tests/script/general/db/dropdnodes.sim @@ -15,7 +15,7 @@ sql connect sql create dnode $hostname2 sleep 2000 -sql create database db maxTables 4 +sql create database db sql use db print ========== step1 diff --git a/tests/script/general/parser/first_last.sim b/tests/script/general/parser/first_last.sim index fa2d7675d2..4598a4735c 100644 --- a/tests/script/general/parser/first_last.sim +++ b/tests/script/general/parser/first_last.sim @@ -22,7 +22,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db maxrows 400 cache 1 maxTables 4 +sql create database $db maxrows 400 cache 1 sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/groupby.sim b/tests/script/general/parser/groupby.sim index 70edf3535b..1bd56c44f1 100644 --- a/tests/script/general/parser/groupby.sim +++ b/tests/script/general/parser/groupby.sim @@ -28,7 +28,7 @@ $tstart = 100000 sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxTables 4 keep 36500 +sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) diff --git a/tests/script/general/parser/join.sim b/tests/script/general/parser/join.sim index f17e28c1da..7b47c4ff3c 100644 --- a/tests/script/general/parser/join.sim +++ b/tests/script/general/parser/join.sim @@ -24,7 +24,7 @@ $tstart = 100000 sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxTables 4 keep 36500 +sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) diff --git a/tests/script/general/parser/join_multivnode.sim b/tests/script/general/parser/join_multivnode.sim index 4cf1d36672..21ed2e1ab1 100644 --- a/tests/script/general/parser/join_multivnode.sim +++ b/tests/script/general/parser/join_multivnode.sim @@ -22,7 +22,7 @@ $tstart = 100000 sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxTables 4 keep 36500 +sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) diff --git a/tests/script/general/parser/lastrow.sim b/tests/script/general/parser/lastrow.sim index 48f6e65a4f..3eb3ecb24a 100644 --- a/tests/script/general/parser/lastrow.sim +++ b/tests/script/general/parser/lastrow.sim @@ -21,7 +21,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/mixed_blocks.sim b/tests/script/general/parser/mixed_blocks.sim index 569decaa14..b229cd9c89 100644 --- a/tests/script/general/parser/mixed_blocks.sim +++ b/tests/script/general/parser/mixed_blocks.sim @@ -22,7 +22,7 @@ sql drop database if exists $db $paramRows = 200 $rowNum = $paramRows * 4 $rowNum = $rowNum / 5 -sql create database $db maxrows $paramRows maxTables 4 +sql create database $db maxrows $paramRows print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 bool, c6 binary(10), c7 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/projection_limit_offset.sim b/tests/script/general/parser/projection_limit_offset.sim index 2b89946ef8..79ab1800d4 100644 --- a/tests/script/general/parser/projection_limit_offset.sim +++ b/tests/script/general/parser/projection_limit_offset.sim @@ -22,7 +22,7 @@ $tstart = 100000 sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxTables 4 keep 36500 +sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) diff --git a/tests/script/general/parser/select_with_tags.sim b/tests/script/general/parser/select_with_tags.sim index 9f944a586b..b46a902997 100644 --- a/tests/script/general/parser/select_with_tags.sim +++ b/tests/script/general/parser/select_with_tags.sim @@ -23,7 +23,7 @@ $tstart = 100000 sql drop database if exists $db -x step1 step1: -sql create database if not exists $db maxTables 4 keep 36500 +sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) diff --git a/tests/script/general/parser/single_row_in_tb.sim b/tests/script/general/parser/single_row_in_tb.sim index 2313a98b41..8f5c6db553 100644 --- a/tests/script/general/parser/single_row_in_tb.sim +++ b/tests/script/general/parser/single_row_in_tb.sim @@ -15,7 +15,7 @@ $db = $dbPrefix $stb = $stbPrefix sql drop database if exists $db -sql create database $db maxrows 200 maxTables 4 +sql create database $db maxrows 200 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 bool, c6 binary(10), c7 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/slimit.sim b/tests/script/general/parser/slimit.sim index 2ce3d0c2ac..fedf3f8da8 100644 --- a/tests/script/general/parser/slimit.sim +++ b/tests/script/general/parser/slimit.sim @@ -21,7 +21,7 @@ $db = $dbPrefix . $i $stb = $stbPrefix . $i sql drop database if exists $db -sql create database $db maxrows 200 cache 16 maxTables 4 +sql create database $db maxrows 200 cache 16 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 binary(15), t2 int, t3 bigint, t4 nchar(10), t5 double, t6 bool) diff --git a/tests/script/general/parser/timestamp.sim b/tests/script/general/parser/timestamp.sim index 28bbc9df0e..a47372bf9d 100644 --- a/tests/script/general/parser/timestamp.sim +++ b/tests/script/general/parser/timestamp.sim @@ -20,7 +20,7 @@ $db = $dbPrefix . $i $stb = $stbPrefix . $i sql drop database if exists $db -sql create database $db maxrows 200 maxTables 4 +sql create database $db maxrows 200 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 timestamp, c2 int) tags(t1 binary(20)) diff --git a/tests/script/general/parser/where.sim b/tests/script/general/parser/where.sim index 710156a4ff..dd3b11c2dc 100644 --- a/tests/script/general/parser/where.sim +++ b/tests/script/general/parser/where.sim @@ -21,7 +21,7 @@ $mt = $mtPrefix . $i sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxTables 4 +sql create database if not exists $db sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int) diff --git a/tests/script/general/stable/dnode3.sim b/tests/script/general/stable/dnode3.sim index 76652229d2..2859f644bb 100644 --- a/tests/script/general/stable/dnode3.sim +++ b/tests/script/general/stable/dnode3.sim @@ -54,7 +54,7 @@ $i = 0 $db = $dbPrefix . $i $mt = $mtPrefix . $i -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) diff --git a/tests/script/unique/arbitrator/dn3_mn1_vnode_change.sim b/tests/script/unique/arbitrator/dn3_mn1_vnode_change.sim index b18edf0670..4f80c2389e 100644 --- a/tests/script/unique/arbitrator/dn3_mn1_vnode_change.sim +++ b/tests/script/unique/arbitrator/dn3_mn1_vnode_change.sim @@ -61,7 +61,7 @@ $totalTableNum = 10 $sleepTimer = 3000 $db = db -sql create database $db replica 2 maxTables $totalTableNum +sql create database $db replica 2 sql use $db # create table , insert data diff --git a/tests/script/unique/arbitrator/dn3_mn1_vnode_corruptFile_online.sim b/tests/script/unique/arbitrator/dn3_mn1_vnode_corruptFile_online.sim index 4f737b9c40..fb0650b78a 100644 --- a/tests/script/unique/arbitrator/dn3_mn1_vnode_corruptFile_online.sim +++ b/tests/script/unique/arbitrator/dn3_mn1_vnode_corruptFile_online.sim @@ -61,7 +61,7 @@ $totalTableNum = 4 $sleepTimer = 3000 $db = db -sql create database $db cache 1 replica 2 maxTables $totalTableNum +sql create database $db cache 1 replica 2 sql use $db # create table , insert data diff --git a/tests/script/unique/arbitrator/sync_replica3_createTable.sim b/tests/script/unique/arbitrator/sync_replica3_createTable.sim index 3bf274a3ea..d593577bee 100644 --- a/tests/script/unique/arbitrator/sync_replica3_createTable.sim +++ b/tests/script/unique/arbitrator/sync_replica3_createTable.sim @@ -61,8 +61,8 @@ $totalTableNum = 20 $sleepTimer = 3000 $db = db -print create database $db replica 3 maxTables $totalTableNum -sql create database $db replica 3 maxTables $totalTableNum +print create database $db replica 3 +sql create database $db replica 3 sql use $db # create table , insert data diff --git a/tests/script/unique/arbitrator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim b/tests/script/unique/arbitrator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim index c8fe96008b..1ef499534f 100644 --- a/tests/script/unique/arbitrator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim +++ b/tests/script/unique/arbitrator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim @@ -62,8 +62,8 @@ $sleepTimer = 3000 $maxTables = $totalTableNum * 2 $db = db -print create database $db replica 3 maxTables $maxTables -sql create database $db replica 3 maxTables $maxTables +print create database $db replica 3 +sql create database $db replica 3 sql use $db # create table , insert data diff --git a/tests/script/unique/big/maxvnodes.sim b/tests/script/unique/big/maxvnodes.sim index eb6e0b3b53..662d391e47 100644 --- a/tests/script/unique/big/maxvnodes.sim +++ b/tests/script/unique/big/maxvnodes.sim @@ -18,7 +18,7 @@ print ========== prepare data system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect -sql create database db blocks 3 cache 1 maxTables $maxTables +sql create database db blocks 3 cache 1 sql use db print ========== step1 diff --git a/tests/script/unique/big/restartSpeed.sim b/tests/script/unique/big/restartSpeed.sim index 9d490fcb8b..ea4edefda8 100644 --- a/tests/script/unique/big/restartSpeed.sim +++ b/tests/script/unique/big/restartSpeed.sim @@ -16,7 +16,7 @@ print ========== prepare data system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect -sql create database db blocks 3 cache 1 maxTables $maxTables +sql create database db blocks 3 cache 1 sql use db print ========== step1 diff --git a/tests/script/unique/cluster/balance1.sim b/tests/script/unique/cluster/balance1.sim index 44f44e3976..728ead25fe 100644 --- a/tests/script/unique/cluster/balance1.sim +++ b/tests/script/unique/cluster/balance1.sim @@ -40,7 +40,7 @@ print ========= start dnode1 system sh/exec.sh -n dnode1 -s start sql connect -sql create database c_b1_d1 maxTables 4 +sql create database c_b1_d1 sql use c_b1_d1 sql create table c_b1_t1 (t timestamp, i int) @@ -50,7 +50,7 @@ sql insert into c_b1_t1 values(1520000022013, 13) sql insert into c_b1_t1 values(1520000023012, 12) sql insert into c_b1_t1 values(1520000024011, 11) -sql create database c_b1_d2 maxTables 4 +sql create database c_b1_d2 sql use c_b1_d2 sql create table c_b1_t2 (t timestamp, i int) sql insert into c_b1_t2 values(1520000020025, 25) @@ -107,7 +107,7 @@ print dnode2 ==> $dnode2Role print ============================== step3 print ========= add db3 -sql create database c_b1_d3 maxTables 4 +sql create database c_b1_d3 sql use c_b1_d3 sql create table c_b1_t3 (t timestamp, i int) sql insert into c_b1_t3 values(1520000020035, 35) @@ -280,7 +280,7 @@ if $dnode4Role != slave then endi print ============================== step10 -sql create database c_b1_d4 maxTables 4 +sql create database c_b1_d4 sql use c_b1_d4 sql create table c_b1_t4 (t timestamp, i int) sql insert into c_b1_t4 values(1520000020045, 45) @@ -318,7 +318,7 @@ sql use c_b1_d2 sql insert into c_b1_t2 values(1520000025026, 26) print ============================== step12 -sql create database c_b1_d5 maxTables 4 +sql create database c_b1_d5 sql use c_b1_d5 sql_error create table c_b1_t5 (t timestamp, i int) -x error3 @@ -343,7 +343,7 @@ sql insert into c_b1_t5 values(1520000022053, 53) sql insert into c_b1_t5 values(1520000023052, 52) sql insert into c_b1_t5 values(1520000024051, 51) -sql create database c_b1_d6 maxTables 4 +sql create database c_b1_d6 sql use c_b1_d6 sql create table c_b1_t6 (t timestamp, i int) sql insert into c_b1_t6 values(1520000020065, 65) @@ -375,7 +375,7 @@ sql create dnode $hostname6 system sh/exec.sh -n dnode6 -s start sleep 15000 -sql create database c_b1_d7 maxTables 4 +sql create database c_b1_d7 sql use c_b1_d7 sql create table c_b1_t7 (t timestamp, i int) sql insert into c_b1_t7 values(1520000020075, 75) @@ -384,7 +384,7 @@ sql insert into c_b1_t7 values(1520000022073, 73) sql insert into c_b1_t7 values(1520000023072, 72) sql insert into c_b1_t7 values(1520000024071, 71) -sql create database c_b1_d8 maxTables 4 +sql create database c_b1_d8 sql use c_b1_d8 sql create table c_b1_t8 (t timestamp, i int) sql insert into c_b1_t8 values(1520000020085, 85) diff --git a/tests/script/unique/cluster/balance2.sim b/tests/script/unique/cluster/balance2.sim index 0c880d36ff..6d2c4bdad7 100644 --- a/tests/script/unique/cluster/balance2.sim +++ b/tests/script/unique/cluster/balance2.sim @@ -47,7 +47,7 @@ system sh/exec.sh -n dnode2 -s start system sh/exec.sh -n dnode3 -s start sleep 4001 -sql create database c_b2_d1 replica 2 maxTables 4 +sql create database c_b2_d1 replica 2 sql use c_b2_d1 sql create table c_b2_t1 (t timestamp, i int) sql insert into c_b2_t1 values(1520000020015, 15) @@ -56,7 +56,7 @@ sql insert into c_b2_t1 values(1520000022013, 13) sql insert into c_b2_t1 values(1520000023012, 12) sql insert into c_b2_t1 values(1520000024011, 11) -sql create database c_b2_d2 replica 2 maxTables 4 +sql create database c_b2_d2 replica 2 sql use c_b2_d2 sql create table c_b2_t2 (t timestamp, i int) sql insert into c_b2_t2 values(1520000020025, 25) @@ -65,7 +65,7 @@ sql insert into c_b2_t2 values(1520000022023, 23) sql insert into c_b2_t2 values(1520000023022, 22) sql insert into c_b2_t2 values(1520000024021, 21) -sql create database c_b2_d3 replica 2 maxTables 4 +sql create database c_b2_d3 replica 2 sql use c_b2_d3 sql create table c_b2_t3 (t timestamp, i int) sql insert into c_b2_t3 values(1520000020035, 35) diff --git a/tests/script/unique/cluster/cluster_main.sim b/tests/script/unique/cluster/cluster_main.sim index 7d4a35c7f2..f0a9b1a214 100644 --- a/tests/script/unique/cluster/cluster_main.sim +++ b/tests/script/unique/cluster/cluster_main.sim @@ -57,7 +57,7 @@ sleep 3000 print ============== step2: create db1 with replica 3 $db = db1 print create database $db replica 3 -#sql create database $db replica 3 maxTables $totalTableNum +#sql create database $db replica 3 sql create database $db replica 3 sql use $db diff --git a/tests/script/unique/cluster/cluster_main0.sim b/tests/script/unique/cluster/cluster_main0.sim index ef76f8823f..9f775c0cef 100644 --- a/tests/script/unique/cluster/cluster_main0.sim +++ b/tests/script/unique/cluster/cluster_main0.sim @@ -57,7 +57,7 @@ sleep 3000 print ============== step2: create db1 with replica 3 $db = db1 print create database $db replica 3 -#sql create database $db replica 3 maxTables $totalTableNum +#sql create database $db replica 3 sql create database $db replica 3 sql use $db diff --git a/tests/script/unique/cluster/cluster_main1.sim b/tests/script/unique/cluster/cluster_main1.sim index 4537b09091..7796f1ea00 100644 --- a/tests/script/unique/cluster/cluster_main1.sim +++ b/tests/script/unique/cluster/cluster_main1.sim @@ -58,7 +58,7 @@ print ============== step2: create db1 with replica 3 $replica = 3 $db = db1 print create database $db replica $replica -#sql create database $db replica 3 maxTables $totalTableNum +#sql create database $db replica 3 sql create database $db replica $replica sql use $db diff --git a/tests/script/unique/cluster/cluster_main2.sim b/tests/script/unique/cluster/cluster_main2.sim index 84ea3871ef..4866154681 100644 --- a/tests/script/unique/cluster/cluster_main2.sim +++ b/tests/script/unique/cluster/cluster_main2.sim @@ -58,7 +58,7 @@ print ============== step2: create db1 with replica 3 $replica = 3 $db = db1 print create database $db replica $replica -#sql create database $db replica 3 maxTables $totalTableNum +#sql create database $db replica 3 sql create database $db replica $replica sql use $db diff --git a/tests/script/unique/dnode/alternativeRole.sim b/tests/script/unique/dnode/alternativeRole.sim index fb9d344d20..ab37c1603a 100644 --- a/tests/script/unique/dnode/alternativeRole.sim +++ b/tests/script/unique/dnode/alternativeRole.sim @@ -56,7 +56,7 @@ if $data2_3 != slave then endi print ========== step2 -sql create database d1 maxTables 4 +sql create database d1 sql create table d1.t1 (ts timestamp, i int) sql create table d1.t2 (ts timestamp, i int) sql create table d1.t3 (ts timestamp, i int) diff --git a/tests/script/unique/dnode/balance1.sim b/tests/script/unique/dnode/balance1.sim index 5b1615dc28..b246197742 100644 --- a/tests/script/unique/dnode/balance1.sim +++ b/tests/script/unique/dnode/balance1.sim @@ -30,7 +30,7 @@ system sh/exec.sh -n dnode1 -s start sql connect sleep 3000 -sql create database d1 maxTables 4 +sql create database d1 sql create table d1.t1 (t timestamp, i int) sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+2s, 14) @@ -68,7 +68,7 @@ if $data2_2 != 1 then endi print ========== step3 -sql create database d2 maxTables 4 +sql create database d2 sql create table d2.t2 (t timestamp, i int) sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+2s, 24) @@ -139,7 +139,7 @@ if $data2_3 != 2 then endi print ========== step6 -sql create database d3 maxTables 4 +sql create database d3 sql create table d3.t3 (t timestamp, i int) sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+2s, 34) @@ -193,7 +193,7 @@ if $data2_4 != 1 then endi print ========== step8 -sql create database d4 maxTables 4 +sql create database d4 sql create table d4.t4 (t timestamp, i int) sql insert into d4.t4 values(now+1s, 45) sql insert into d4.t4 values(now+2s, 44) diff --git a/tests/script/unique/dnode/balance2.sim b/tests/script/unique/dnode/balance2.sim index e23562d8b4..1a80e890a0 100644 --- a/tests/script/unique/dnode/balance2.sim +++ b/tests/script/unique/dnode/balance2.sim @@ -28,7 +28,7 @@ system sh/exec.sh -n dnode2 -s start system sh/exec.sh -n dnode3 -s start sleep 3000 -sql create database d1 replica 2 maxTables 4 +sql create database d1 replica 2 sql create table d1.t1 (t timestamp, i int) sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+2s, 14) @@ -36,7 +36,7 @@ sql insert into d1.t1 values(now+3s, 13) sql insert into d1.t1 values(now+4s, 12) sql insert into d1.t1 values(now+5s, 11) -sql create database d2 replica 2 maxTables 4 +sql create database d2 replica 2 sql create table d2.t2 (t timestamp, i int) sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+2s, 24) @@ -117,7 +117,7 @@ if $data2_4 != 2 then endi print ========== step4 -sql create database d3 replica 2 maxTables 4 +sql create database d3 replica 2 sql create table d3.t3 (t timestamp, i int) sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+2s, 34) diff --git a/tests/script/unique/dnode/balance3.sim b/tests/script/unique/dnode/balance3.sim index b2adb24dfa..1f81fde968 100644 --- a/tests/script/unique/dnode/balance3.sim +++ b/tests/script/unique/dnode/balance3.sim @@ -33,7 +33,7 @@ system sh/exec.sh -n dnode3 -s start system sh/exec.sh -n dnode4 -s start sleep 3000 -sql create database d1 replica 3 maxTables 4 +sql create database d1 replica 3 sql create table d1.t1 (t timestamp, i int) sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+2s, 14) @@ -41,7 +41,7 @@ sql insert into d1.t1 values(now+3s, 13) sql insert into d1.t1 values(now+4s, 12) sql insert into d1.t1 values(now+5s, 11) -sql create database d2 replica 3 maxTables 4 +sql create database d2 replica 3 sql create table d2.t2 (t timestamp, i int) sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+2s, 24) @@ -136,7 +136,7 @@ if $data2_5 != 2 then endi print ========== step4 -sql create database d3 replica 3 maxTables 4 +sql create database d3 replica 3 sql create table d3.t3 (t timestamp, i int) sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+2s, 34) diff --git a/tests/script/unique/dnode/balancex.sim b/tests/script/unique/dnode/balancex.sim index 0d5da5bbf6..6f3b7dfb74 100644 --- a/tests/script/unique/dnode/balancex.sim +++ b/tests/script/unique/dnode/balancex.sim @@ -20,7 +20,7 @@ system sh/exec.sh -n dnode1 -s start sql connect sleep 3000 -sql create database d1 maxTables 4 +sql create database d1 sql create table d1.t1 (t timestamp, i int) sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+2s, 14) @@ -28,7 +28,7 @@ sql insert into d1.t1 values(now+3s, 13) sql insert into d1.t1 values(now+4s, 12) sql insert into d1.t1 values(now+5s, 11) -sql create database d2 maxTables 4 +sql create database d2 sql create table d2.t2 (t timestamp, i int) sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+2s, 24) @@ -65,7 +65,7 @@ if $data2_2 != 2 then endi print ========== step3 -sql create database d3 replica 2 maxTables 4 +sql create database d3 replica 2 sql create table d3.t3 (t timestamp, i int) sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+2s, 34) diff --git a/tests/script/unique/dnode/offline2.sim b/tests/script/unique/dnode/offline2.sim index 6db6ca4013..2d1467ad59 100644 --- a/tests/script/unique/dnode/offline2.sim +++ b/tests/script/unique/dnode/offline2.sim @@ -27,7 +27,7 @@ sql create dnode $hostname2 system sh/exec.sh -n dnode2 -s start sleep 3000 -sql create database d1 replica 2 maxTables 4 +sql create database d1 replica 2 sql create table d1.t1(ts timestamp, i int) sql insert into d1.t1 values(1588262400001, 1) diff --git a/tests/script/unique/dnode/remove1.sim b/tests/script/unique/dnode/remove1.sim index 246808c56c..7786b9f9d1 100644 --- a/tests/script/unique/dnode/remove1.sim +++ b/tests/script/unique/dnode/remove1.sim @@ -20,7 +20,7 @@ system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect -sql create database d1 maxTables 4 +sql create database d1 sql create table d1.t1 (t timestamp, i int) sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+2s, 14) @@ -28,7 +28,7 @@ sql insert into d1.t1 values(now+3s, 13) sql insert into d1.t1 values(now+4s, 12) sql insert into d1.t1 values(now+5s, 11) -sql create database d2 maxTables 4 +sql create database d2 sql create table d2.t2 (t timestamp, i int) sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+2s, 24) @@ -47,7 +47,7 @@ sql create dnode $hostname2 system sh/exec.sh -n dnode2 -s start sleep 9000 -sql create database d3 replica 2 maxTables 4 +sql create database d3 replica 2 sql create table d3.t3 (t timestamp, i int) sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+2s, 34) diff --git a/tests/script/unique/dnode/remove2.sim b/tests/script/unique/dnode/remove2.sim index cf9954c767..cd0331235a 100644 --- a/tests/script/unique/dnode/remove2.sim +++ b/tests/script/unique/dnode/remove2.sim @@ -20,7 +20,7 @@ system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect -sql create database d1 maxTables 4 +sql create database d1 sql create table d1.t1 (t timestamp, i int) sql insert into d1.t1 values(1588262400001, 15) sql insert into d1.t1 values(1588262400002, 14) @@ -28,7 +28,7 @@ sql insert into d1.t1 values(1588262400003, 13) sql insert into d1.t1 values(1588262400004, 12) sql insert into d1.t1 values(1588262400005, 11) -sql create database d2 maxTables 4 +sql create database d2 sql create table d2.t2 (t timestamp, i int) sql insert into d2.t2 values(1588262400001, 25) sql insert into d2.t2 values(1588262400002, 24) @@ -47,7 +47,7 @@ sql create dnode $hostname2 system sh/exec.sh -n dnode2 -s start sleep 9000 -sql create database d3 replica 2 maxTables 4 +sql create database d3 replica 2 sql create table d3.t3 (t timestamp, i int) sql insert into d3.t3 values(1588262400001, 35) sql insert into d3.t3 values(1588262400002, 34) diff --git a/tests/script/unique/dnode/vnode_clean.sim b/tests/script/unique/dnode/vnode_clean.sim index e1ee1da2aa..6df4bf78e8 100644 --- a/tests/script/unique/dnode/vnode_clean.sim +++ b/tests/script/unique/dnode/vnode_clean.sim @@ -19,7 +19,7 @@ print ========== step1 system sh/exec.sh -n dnode1 -s start sql connect -sql create database d1 maxTables 4 +sql create database d1 sql create table d1.t1 (t timestamp, i int) sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+2s, 14) @@ -55,7 +55,7 @@ if $data2_2 != 1 then endi print ========== step3 -sql create database d2 maxTables 4 +sql create database d2 sql create table d2.t2 (t timestamp, i int) sql insert into d2.t2 values(now+1s, 25) @@ -123,7 +123,7 @@ if $data2_3 != 2 then endi print ========== step6 -sql create database d3 maxTables 4 +sql create database d3 sql create table d3.t3 (t timestamp, i int) sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+2s, 34) diff --git a/tests/script/unique/stable/balance_replica1.sim b/tests/script/unique/stable/balance_replica1.sim index 362f8ccf7f..3ea158eb39 100644 --- a/tests/script/unique/stable/balance_replica1.sim +++ b/tests/script/unique/stable/balance_replica1.sim @@ -29,7 +29,7 @@ $db = $dbPrefix $mt = $mtPrefix $st = $stPrefix . $i -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int) diff --git a/tests/script/unique/stable/dnode2.sim b/tests/script/unique/stable/dnode2.sim index 441323ff3c..5c227f8cec 100644 --- a/tests/script/unique/stable/dnode2.sim +++ b/tests/script/unique/stable/dnode2.sim @@ -38,7 +38,7 @@ $i = 0 $db = $dbPrefix . $i $mt = $mtPrefix . $i -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) diff --git a/tests/script/unique/stable/dnode2_stop.sim b/tests/script/unique/stable/dnode2_stop.sim index d25c68cbba..19c6de33b3 100644 --- a/tests/script/unique/stable/dnode2_stop.sim +++ b/tests/script/unique/stable/dnode2_stop.sim @@ -43,7 +43,7 @@ $i = 0 $db = $dbPrefix . $i $mt = $mtPrefix . $i -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) diff --git a/tests/script/unique/stable/dnode3.sim b/tests/script/unique/stable/dnode3.sim index 712ec04b8c..5fe37faa71 100644 --- a/tests/script/unique/stable/dnode3.sim +++ b/tests/script/unique/stable/dnode3.sim @@ -47,7 +47,7 @@ $i = 0 $db = $dbPrefix . $i $mt = $mtPrefix . $i -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) diff --git a/tests/script/unique/stable/replica2_dnode4.sim b/tests/script/unique/stable/replica2_dnode4.sim index c7a9767fcc..4f8211d5d4 100644 --- a/tests/script/unique/stable/replica2_dnode4.sim +++ b/tests/script/unique/stable/replica2_dnode4.sim @@ -54,7 +54,7 @@ $i = 0 $db = $dbPrefix . $i $mt = $mtPrefix . $i -sql create database $db replica 2 maxTables 4 +sql create database $db replica 2 sql use $db sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) diff --git a/tests/script/unique/stable/replica2_vnode3.sim b/tests/script/unique/stable/replica2_vnode3.sim index 84af380106..47d45c3d3d 100644 --- a/tests/script/unique/stable/replica2_vnode3.sim +++ b/tests/script/unique/stable/replica2_vnode3.sim @@ -37,7 +37,7 @@ $i = 0 $db = $dbPrefix . $i $mt = $mtPrefix . $i -sql create database $db replica 2 maxTables 4 +sql create database $db replica 2 sql use $db sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) diff --git a/tests/script/unique/stable/replica3_dnode6.sim b/tests/script/unique/stable/replica3_dnode6.sim index 83ef334301..eeffb86cdb 100644 --- a/tests/script/unique/stable/replica3_dnode6.sim +++ b/tests/script/unique/stable/replica3_dnode6.sim @@ -78,7 +78,7 @@ $i = 0 $db = $dbPrefix . $i $mt = $mtPrefix . $i -sql create database $db replica 3 maxTables 4 +sql create database $db replica 3 sql use $db sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) diff --git a/tests/script/unique/stable/replica3_vnode3.sim b/tests/script/unique/stable/replica3_vnode3.sim index 3cd7b92477..bc700b7dda 100644 --- a/tests/script/unique/stable/replica3_vnode3.sim +++ b/tests/script/unique/stable/replica3_vnode3.sim @@ -54,7 +54,7 @@ $i = 0 $db = $dbPrefix . $i $mt = $mtPrefix . $i -sql create database $db replica 3 maxTables 4 +sql create database $db replica 3 sql use $db sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) diff --git a/tests/script/unique/stream/metrics_balance.sim b/tests/script/unique/stream/metrics_balance.sim index c043044499..36086fe4b8 100644 --- a/tests/script/unique/stream/metrics_balance.sim +++ b/tests/script/unique/stream/metrics_balance.sim @@ -32,7 +32,7 @@ sql connect print ============== step1 $db = $dbPrefix -sql create database $db maxTables 4 +sql create database $db sql use $db $i = 0 diff --git a/tests/script/unique/stream/table_balance.sim b/tests/script/unique/stream/table_balance.sim index 6c8958aa48..facb7df459 100644 --- a/tests/script/unique/stream/table_balance.sim +++ b/tests/script/unique/stream/table_balance.sim @@ -34,7 +34,7 @@ $db = $dbPrefix $mt = $mtPrefix $st = $stPrefix . $i -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int) diff --git a/tests/script/unique/stream/table_move.sim b/tests/script/unique/stream/table_move.sim index d3ea375e1f..d2437e4920 100644 --- a/tests/script/unique/stream/table_move.sim +++ b/tests/script/unique/stream/table_move.sim @@ -65,7 +65,7 @@ $db = $dbPrefix . $i $mt = $mtPrefix . $i $st = $stPrefix . $i -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int) From ac43972d387ca68730d7cd3c5714c9cd7afbc390 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 7 Sep 2020 14:56:39 +0800 Subject: [PATCH 49/58] [td-225] update sim script --- tests/script/general/parser/commit.sim | 3 +- tests/script/general/parser/first_last.sim | 3 +- tests/script/general/parser/groupby.sim | 3 +- tests/script/general/parser/join.sim | 4 +- .../script/general/parser/join_multivnode.sim | 4 +- tests/script/general/parser/lastrow.sim | 3 +- tests/script/general/parser/mixed_blocks.sim | 3 +- .../parser/projection_limit_offset.sim | 3 +- tests/script/general/parser/selectResNum.sim | 3 +- .../general/parser/select_with_tags.sim | 3 +- .../general/parser/single_row_in_tb.sim | 3 +- tests/script/general/parser/slimit.sim | 2 +- tests/script/general/parser/testSuite.sim | 192 +++++++++--------- tests/script/general/parser/timestamp.sim | 4 +- tests/script/general/parser/topbot.sim | 4 +- tests/script/general/parser/union.sim | 4 +- 16 files changed, 130 insertions(+), 111 deletions(-) diff --git a/tests/script/general/parser/commit.sim b/tests/script/general/parser/commit.sim index 31f457cfae..4d85806b69 100644 --- a/tests/script/general/parser/commit.sim +++ b/tests/script/general/parser/commit.sim @@ -2,6 +2,7 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxTablesperVnode -v 100 system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect @@ -23,7 +24,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db maxrows 255 maxtables 100 ctime 3600 +sql create database $db maxrows 255 ctime 3600 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/first_last.sim b/tests/script/general/parser/first_last.sim index fa2d7675d2..46431b0848 100644 --- a/tests/script/general/parser/first_last.sim +++ b/tests/script/general/parser/first_last.sim @@ -2,6 +2,7 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxTablespervnode -v 4 system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect @@ -22,7 +23,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db maxrows 400 cache 1 maxTables 4 +sql create database $db maxrows 400 cache 1 sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/groupby.sim b/tests/script/general/parser/groupby.sim index 70edf3535b..255e00ca41 100644 --- a/tests/script/general/parser/groupby.sim +++ b/tests/script/general/parser/groupby.sim @@ -2,6 +2,7 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4 system sh/exec.sh -n dnode1 -s start sleep 1000 sql connect @@ -28,7 +29,7 @@ $tstart = 100000 sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxTables 4 keep 36500 +sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) diff --git a/tests/script/general/parser/join.sim b/tests/script/general/parser/join.sim index f17e28c1da..ef3245ccaf 100644 --- a/tests/script/general/parser/join.sim +++ b/tests/script/general/parser/join.sim @@ -4,6 +4,8 @@ system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 system sh/cfg.sh -n dnode1 -c debugFlag -v 135 system sh/cfg.sh -n dnode1 -c rpcDebugFlag -v 135 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4 + system sh/exec.sh -n dnode1 -s start sleep 1000 sql connect @@ -24,7 +26,7 @@ $tstart = 100000 sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxTables 4 keep 36500 +sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) diff --git a/tests/script/general/parser/join_multivnode.sim b/tests/script/general/parser/join_multivnode.sim index 4cf1d36672..51f1ef11c7 100644 --- a/tests/script/general/parser/join_multivnode.sim +++ b/tests/script/general/parser/join_multivnode.sim @@ -2,6 +2,8 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4 + system sh/exec.sh -n dnode1 -s start sql connect sleep 1000 @@ -22,7 +24,7 @@ $tstart = 100000 sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxTables 4 keep 36500 +sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) diff --git a/tests/script/general/parser/lastrow.sim b/tests/script/general/parser/lastrow.sim index 48f6e65a4f..6321823fe2 100644 --- a/tests/script/general/parser/lastrow.sim +++ b/tests/script/general/parser/lastrow.sim @@ -2,6 +2,7 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4 system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect @@ -21,7 +22,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db maxTables 4 +sql create database $db sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/mixed_blocks.sim b/tests/script/general/parser/mixed_blocks.sim index 569decaa14..41082bb144 100644 --- a/tests/script/general/parser/mixed_blocks.sim +++ b/tests/script/general/parser/mixed_blocks.sim @@ -2,6 +2,7 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4 system sh/exec.sh -n dnode1 -s start sleep 3000 @@ -22,7 +23,7 @@ sql drop database if exists $db $paramRows = 200 $rowNum = $paramRows * 4 $rowNum = $rowNum / 5 -sql create database $db maxrows $paramRows maxTables 4 +sql create database $db maxrows $paramRows print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 bool, c6 binary(10), c7 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/projection_limit_offset.sim b/tests/script/general/parser/projection_limit_offset.sim index 2b89946ef8..fbff99d58f 100644 --- a/tests/script/general/parser/projection_limit_offset.sim +++ b/tests/script/general/parser/projection_limit_offset.sim @@ -2,6 +2,7 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4 system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect @@ -22,7 +23,7 @@ $tstart = 100000 sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxTables 4 keep 36500 +sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) diff --git a/tests/script/general/parser/selectResNum.sim b/tests/script/general/parser/selectResNum.sim index 319e034c0c..42cedc034b 100644 --- a/tests/script/general/parser/selectResNum.sim +++ b/tests/script/general/parser/selectResNum.sim @@ -2,6 +2,7 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 200 system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect @@ -23,7 +24,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db cache 16 maxtables 200 +sql create database $db cache 16 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/select_with_tags.sim b/tests/script/general/parser/select_with_tags.sim index 9f944a586b..68d145a5f2 100644 --- a/tests/script/general/parser/select_with_tags.sim +++ b/tests/script/general/parser/select_with_tags.sim @@ -2,6 +2,7 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4 system sh/exec.sh -n dnode1 -s start sleep 1000 sql connect @@ -23,7 +24,7 @@ $tstart = 100000 sql drop database if exists $db -x step1 step1: -sql create database if not exists $db maxTables 4 keep 36500 +sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) diff --git a/tests/script/general/parser/single_row_in_tb.sim b/tests/script/general/parser/single_row_in_tb.sim index 2313a98b41..4305ae1b5d 100644 --- a/tests/script/general/parser/single_row_in_tb.sim +++ b/tests/script/general/parser/single_row_in_tb.sim @@ -2,6 +2,7 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4 system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect @@ -15,7 +16,7 @@ $db = $dbPrefix $stb = $stbPrefix sql drop database if exists $db -sql create database $db maxrows 200 maxTables 4 +sql create database $db maxrows 200 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 bool, c6 binary(10), c7 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/slimit.sim b/tests/script/general/parser/slimit.sim index 2ce3d0c2ac..edbf0c8cc0 100644 --- a/tests/script/general/parser/slimit.sim +++ b/tests/script/general/parser/slimit.sim @@ -21,7 +21,7 @@ $db = $dbPrefix . $i $stb = $stbPrefix . $i sql drop database if exists $db -sql create database $db maxrows 200 cache 16 maxTables 4 +sql create database $db maxrows 200 cache 16 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 binary(15), t2 int, t3 bigint, t4 nchar(10), t5 double, t6 bool) diff --git a/tests/script/general/parser/testSuite.sim b/tests/script/general/parser/testSuite.sim index 6790564cc7..dad887a3a2 100644 --- a/tests/script/general/parser/testSuite.sim +++ b/tests/script/general/parser/testSuite.sim @@ -1,99 +1,99 @@ -sleep 2000 -run general/parser/alter.sim -sleep 2000 -run general/parser/alter1.sim -sleep 2000 -run general/parser/alter_stable.sim -sleep 2000 -run general/parser/auto_create_tb.sim -sleep 2000 -run general/parser/auto_create_tb_drop_tb.sim -sleep 2000 -run general/parser/col_arithmetic_operation.sim -sleep 2000 -run general/parser/columnValue.sim -sleep 2000 -run general/parser/commit.sim -sleep 2000 -run general/parser/create_db.sim -sleep 2000 -run general/parser/create_mt.sim -sleep 2000 -run general/parser/create_tb.sim -sleep 2000 -run general/parser/dbtbnameValidate.sim -sleep 2000 -run general/parser/fill.sim -sleep 2000 -run general/parser/fill_stb.sim -sleep 2000 -#run general/parser/fill_us.sim # -sleep 2000 -run general/parser/first_last.sim -sleep 2000 -run general/parser/import_commit1.sim -sleep 2000 -run general/parser/import_commit2.sim -sleep 2000 -run general/parser/import_commit3.sim -sleep 2000 -#run general/parser/import_file.sim -sleep 2000 -run general/parser/insert_tb.sim -sleep 2000 -run general/parser/tags_dynamically_specifiy.sim -sleep 2000 -run general/parser/interp.sim -sleep 2000 -run general/parser/lastrow.sim -sleep 2000 -run general/parser/limit.sim -sleep 2000 -run general/parser/limit1.sim -sleep 2000 -run general/parser/limit1_tblocks100.sim -sleep 2000 -run general/parser/limit2.sim -sleep 2000 -run general/parser/mixed_blocks.sim -sleep 2000 -run general/parser/nchar.sim -sleep 2000 -run general/parser/null_char.sim -sleep 2000 -run general/parser/selectResNum.sim -sleep 2000 -run general/parser/select_across_vnodes.sim -sleep 2000 -run general/parser/select_from_cache_disk.sim -sleep 2000 -run general/parser/set_tag_vals.sim -sleep 2000 -run general/parser/single_row_in_tb.sim -sleep 2000 -run general/parser/slimit.sim -sleep 2000 -run general/parser/slimit1.sim -sleep 2000 -run general/parser/slimit_alter_tags.sim -sleep 2000 -run general/parser/tbnameIn.sim -sleep 2000 -run general/parser/slimit_alter_tags.sim # persistent failed -sleep 2000 -run general/parser/join.sim -sleep 2000 -run general/parser/join_multivnode.sim -sleep 2000 -run general/parser/projection_limit_offset.sim -sleep 2000 -run general/parser/select_with_tags.sim -sleep 2000 -run general/parser/groupby.sim -sleep 2000 -run general/parser/tags_filter.sim -sleep 2000 -run general/parser/topbot.sim +#sleep 2000 +#run general/parser/alter.sim +#sleep 2000 +#run general/parser/alter1.sim +#sleep 2000 +#run general/parser/alter_stable.sim +#sleep 2000 +#run general/parser/auto_create_tb.sim +#sleep 2000 +#run general/parser/auto_create_tb_drop_tb.sim +#sleep 2000 +#run general/parser/col_arithmetic_operation.sim +#sleep 2000 +#run general/parser/columnValue.sim +#sleep 2000 +#run general/parser/commit.sim +#sleep 2000 +#run general/parser/create_db.sim +#sleep 2000 +#run general/parser/create_mt.sim +#sleep 2000 +#run general/parser/create_tb.sim +#sleep 2000 +#run general/parser/dbtbnameValidate.sim +#sleep 2000 +#run general/parser/fill.sim +#sleep 2000 +#run general/parser/fill_stb.sim +#sleep 2000 +##run general/parser/fill_us.sim # +#sleep 2000 +#run general/parser/first_last.sim +#sleep 2000 +#run general/parser/import_commit1.sim +#sleep 2000 +#run general/parser/import_commit2.sim +#sleep 2000 +#run general/parser/import_commit3.sim +#sleep 2000 +##run general/parser/import_file.sim +#sleep 2000 +#run general/parser/insert_tb.sim +#sleep 2000 +#run general/parser/tags_dynamically_specifiy.sim +#sleep 2000 +#run general/parser/interp.sim +#sleep 2000 +#run general/parser/lastrow.sim +#sleep 2000 +#run general/parser/limit.sim +#sleep 2000 +#run general/parser/limit1.sim +#sleep 2000 +#run general/parser/limit1_tblocks100.sim +#sleep 2000 +#run general/parser/limit2.sim +#sleep 2000 +#run general/parser/mixed_blocks.sim +#sleep 2000 +#run general/parser/nchar.sim +#sleep 2000 +#run general/parser/null_char.sim +#sleep 2000 +#run general/parser/selectResNum.sim +#sleep 2000 +#run general/parser/select_across_vnodes.sim +#sleep 2000 +#run general/parser/select_from_cache_disk.sim +#sleep 2000 +#run general/parser/set_tag_vals.sim +#sleep 2000 +#run general/parser/single_row_in_tb.sim +#sleep 2000 +#run general/parser/slimit.sim +#sleep 2000 +#run general/parser/slimit1.sim +#sleep 2000 +#run general/parser/slimit_alter_tags.sim +#sleep 2000 +#run general/parser/tbnameIn.sim +#sleep 2000 +#run general/parser/slimit_alter_tags.sim # persistent failed +#sleep 2000 +#run general/parser/join.sim +#sleep 2000 +#run general/parser/join_multivnode.sim +#sleep 2000 +#run general/parser/projection_limit_offset.sim +#sleep 2000 +#run general/parser/select_with_tags.sim +#sleep 2000 +#run general/parser/groupby.sim +#sleep 2000 +#run general/parser/tags_filter.sim +#sleep 2000 +#run general/parser/topbot.sim sleep 2000 run general/parser/union.sim sleep 2000 diff --git a/tests/script/general/parser/timestamp.sim b/tests/script/general/parser/timestamp.sim index 28bbc9df0e..67da0f0869 100644 --- a/tests/script/general/parser/timestamp.sim +++ b/tests/script/general/parser/timestamp.sim @@ -2,6 +2,8 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4 + system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect @@ -20,7 +22,7 @@ $db = $dbPrefix . $i $stb = $stbPrefix . $i sql drop database if exists $db -sql create database $db maxrows 200 maxTables 4 +sql create database $db maxrows 200 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 timestamp, c2 int) tags(t1 binary(20)) diff --git a/tests/script/general/parser/topbot.sim b/tests/script/general/parser/topbot.sim index 8e529b4eb4..2faee55460 100644 --- a/tests/script/general/parser/topbot.sim +++ b/tests/script/general/parser/topbot.sim @@ -2,6 +2,8 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 200 + system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect @@ -23,7 +25,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db cache 16 maxtables 200 +sql create database $db cache 16 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/union.sim b/tests/script/general/parser/union.sim index fbd1c211b9..9e178537a2 100644 --- a/tests/script/general/parser/union.sim +++ b/tests/script/general/parser/union.sim @@ -4,6 +4,8 @@ system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c walLevel -v 0 system sh/cfg.sh -n dnode1 -c debugFlag -v 135 system sh/cfg.sh -n dnode1 -c rpcDebugFlag -v 135 +system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4 + system sh/exec.sh -n dnode1 -s start sleep 1000 sql connect @@ -27,7 +29,7 @@ $mt1 = $mtPrefix . $j sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxtables 4 +sql create database if not exists $db sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int) From 75ddb1ff0c90e8db32536bbee4b0b3147b24fa5e Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 7 Sep 2020 14:57:04 +0800 Subject: [PATCH 50/58] [td-225] fix bugs --- src/tsdb/src/tsdbRead.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/tsdb/src/tsdbRead.c b/src/tsdb/src/tsdbRead.c index 506d185d1c..d829a85754 100644 --- a/src/tsdb/src/tsdbRead.c +++ b/src/tsdb/src/tsdbRead.c @@ -1186,7 +1186,7 @@ static void copyAllRemainRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STabl // the time window should always be ascending order: skey <= ekey cur->win = (STimeWindow) {.skey = tsArray[start], .ekey = tsArray[end]}; - cur->mixBlock = (start > 0 && end < pBlockInfo->rows - 1); + cur->mixBlock = (numOfRows != pBlockInfo->rows); cur->lastKey = tsArray[endPos] + step; cur->blockCompleted = true; @@ -1731,12 +1731,13 @@ static void changeQueryHandleForInterpQuery(TsdbQueryHandleT pHandle) { assert(pQueryHandle->window.skey == pQueryHandle->window.ekey); // starts from the buffer in case of descending timestamp order check data blocks - // todo consider the query time window, current last_row does not apply the query time window size_t numOfTables = taosArrayGetSize(pQueryHandle->pTableCheckInfo); int32_t i = 0; while(i < numOfTables) { STableCheckInfo* pCheckInfo = taosArrayGet(pQueryHandle->pTableCheckInfo, i); + + // the first qualified table for interpolation query if (pQueryHandle->window.skey <= pCheckInfo->pTableObj->lastKey && pCheckInfo->pTableObj->lastKey != TSKEY_INITIAL_VAL) { break; From 091271b02d739db3c7220e3cc231d1d589a5b647 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 7 Sep 2020 15:12:02 +0800 Subject: [PATCH 51/58] minor changes --- packaging/cfg/taos.cfg | 2 +- src/common/src/tglobal.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packaging/cfg/taos.cfg b/packaging/cfg/taos.cfg index 7be6e72962..c12726d292 100644 --- a/packaging/cfg/taos.cfg +++ b/packaging/cfg/taos.cfg @@ -129,7 +129,7 @@ # mqttPort 1883 # mqtt topic -# mqttTopic /weather/loop +# mqttTopic /test # the compressed rpc message, option: # -1 (no compression) diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index c7763a257a..9683a63503 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -1298,21 +1298,21 @@ bool taosCheckGlobalCfg() { taosGetFqdn(tsLocalFqdn); } - snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%d", tsLocalFqdn, tsServerPort); + snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); uInfo("localEp is: %s", tsLocalEp); if (tsFirst[0] == 0) { strcpy(tsFirst, tsLocalEp); } else { taosGetFqdnPortFromEp(tsFirst, fqdn, &port); - snprintf(tsFirst, sizeof(tsFirst), "%s:%d", fqdn, port); + snprintf(tsFirst, sizeof(tsFirst), "%s:%u", fqdn, port); } if (tsSecond[0] == 0) { strcpy(tsSecond, tsLocalEp); } else { taosGetFqdnPortFromEp(tsSecond, fqdn, &port); - snprintf(tsSecond, sizeof(tsSecond), "%s:%d", fqdn, port); + snprintf(tsSecond, sizeof(tsSecond), "%s:%u", fqdn, port); } taosGetSystemInfo(); From 7ec52b6bb57ae4ef393029e6755cf58e1175d57b Mon Sep 17 00:00:00 2001 From: root Date: Mon, 7 Sep 2020 15:25:01 +0800 Subject: [PATCH 52/58] update scripts --- tests/script/general/insert/insert_drop.sim | 2 +- tests/script/general/parser/commit.sim | 2 +- tests/script/general/parser/selectResNum.sim | 2 +- tests/script/general/parser/topbot.sim | 2 +- tests/script/general/parser/union.sim | 2 +- tests/script/general/table/limit.sim | 2 +- tests/script/unique/vnode/replica3_vgroup.sim | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/script/general/insert/insert_drop.sim b/tests/script/general/insert/insert_drop.sim index cf29656067..80c16ff8e4 100644 --- a/tests/script/general/insert/insert_drop.sim +++ b/tests/script/general/insert/insert_drop.sim @@ -19,7 +19,7 @@ $stb = stb sql drop database $db -x step1 step1: -sql create database $db maxtables 10 ctime 30 +sql create database $db ctime 30 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int) tags(t1 int) diff --git a/tests/script/general/parser/commit.sim b/tests/script/general/parser/commit.sim index 31f457cfae..547fdaad12 100644 --- a/tests/script/general/parser/commit.sim +++ b/tests/script/general/parser/commit.sim @@ -23,7 +23,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db maxrows 255 maxtables 100 ctime 3600 +sql create database $db maxrows 255 ctime 3600 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/selectResNum.sim b/tests/script/general/parser/selectResNum.sim index 319e034c0c..63cc486d65 100644 --- a/tests/script/general/parser/selectResNum.sim +++ b/tests/script/general/parser/selectResNum.sim @@ -23,7 +23,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db cache 16 maxtables 200 +sql create database $db cache 16 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/topbot.sim b/tests/script/general/parser/topbot.sim index 8e529b4eb4..ff4dcb6b3d 100644 --- a/tests/script/general/parser/topbot.sim +++ b/tests/script/general/parser/topbot.sim @@ -23,7 +23,7 @@ $stb = $stbPrefix . $i sql drop database $db -x step1 step1: -sql create database $db cache 16 maxtables 200 +sql create database $db cache 16 print ====== create tables sql use $db sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) diff --git a/tests/script/general/parser/union.sim b/tests/script/general/parser/union.sim index fbd1c211b9..a276624491 100644 --- a/tests/script/general/parser/union.sim +++ b/tests/script/general/parser/union.sim @@ -27,7 +27,7 @@ $mt1 = $mtPrefix . $j sql drop database if exits $db -x step1 step1: -sql create database if not exists $db maxtables 4 +sql create database if not exists $db sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int) diff --git a/tests/script/general/table/limit.sim b/tests/script/general/table/limit.sim index 6287807954..18597f2e1c 100644 --- a/tests/script/general/table/limit.sim +++ b/tests/script/general/table/limit.sim @@ -17,7 +17,7 @@ $db = $dbPrefix . $i $tb = $tbPrefix . $i print =================== step 0 -sql create database $db maxtables 129 +sql create database $db sql use $db sql show vgroups if $rows != 0 then diff --git a/tests/script/unique/vnode/replica3_vgroup.sim b/tests/script/unique/vnode/replica3_vgroup.sim index 09ca261a06..11295ba0a4 100644 --- a/tests/script/unique/vnode/replica3_vgroup.sim +++ b/tests/script/unique/vnode/replica3_vgroup.sim @@ -26,7 +26,7 @@ sleep 3000 print =================== step 1 -sql create database $db replica 3 maxtables 100 +sql create database $db replica 3 sql use $db sql create table st (ts timestamp, speed int) tags (t1 int) sleep 3001 From 0f7b3ce04052b394d50411fb2ffe7425d4882f15 Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Mon, 7 Sep 2020 15:50:55 +0800 Subject: [PATCH 53/58] [TD-1290] add test case for group by --- tests/pytest/query/queryGroupbySort.py | 50 ++++++++++++++++++++++++++ tests/pytest/util/sql.py | 4 +-- 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 tests/pytest/query/queryGroupbySort.py diff --git a/tests/pytest/query/queryGroupbySort.py b/tests/pytest/query/queryGroupbySort.py new file mode 100644 index 0000000000..28ef897f42 --- /dev/null +++ b/tests/pytest/query/queryGroupbySort.py @@ -0,0 +1,50 @@ +################################################################### +# Copyright (c) 2016 by TAOS Technologies, Inc. +# All rights reserved. +# +# This file is proprietary and confidential to TAOS Technologies. +# No part of this file may be reproduced, stored, transmitted, +# disclosed or used in any form or by any means other than as +# expressly provided by the written permission from Jianhui Tao +# +################################################################### + +# -*- coding: utf-8 -*- + +import sys +import taos +from util.log import tdLog +from util.cases import tdCases +from util.sql import tdSql + + +class TDTestCase: + def init(self, conn, logSql): + tdLog.debug("start to execute %s" % __file__) + tdSql.init(conn.cursor(), logSql) + + self.ts = 1537146000000 + + def run(self): + tdSql.prepare() + + tdSql.execute( + "create table stb(ts timestamp,i int) tags (p_id nchar(20));") + tdSql.execute( + "insert into tb using stb tags('11231') values (%d, %d) (%d, %d) (%d, %d) (%d, %d)" + % (self.ts, 12, self.ts + 1, 15, self.ts + 2, 15, self.ts + 3, 12)) + + tdSql.query(''' select last(ts) p_time,i from stb where p_id='11231' and ts>=%d and ts <=%d + group by i order by time desc limit 100 ''' % (self.ts, self.ts + 4)) + tdSql.checkRows(2) + tdSql.checkData(0, 0, "2018-09-17 09:00:00.003000") + tdSql.checkData(1, 0, "2018-09-17 09:00:00.002000") + + + def stop(self): + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) diff --git a/tests/pytest/util/sql.py b/tests/pytest/util/sql.py index 1e1d02959f..627d712474 100644 --- a/tests/pytest/util/sql.py +++ b/tests/pytest/util/sql.py @@ -122,8 +122,8 @@ class TDSql: return self.cursor.istype(col, dataType) def checkData(self, row, col, data): - self.checkRowCol(row, col) - if self.queryResult[row][col] != data: + self.checkRowCol(row, col) + if str(self.queryResult[row][col]) != str(data): if isinstance(data, float) and abs(self.queryResult[row][col] - data) <= 0.000001: tdLog.info("sql:%s, row:%d col:%d data:%f == expect:%f" % (self.sql, row, col, self.queryResult[row][col], data)) From 59e9f7d57b530ba687c6f5f811cb34d17e92735c Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 7 Sep 2020 10:47:36 +0000 Subject: [PATCH 54/58] TD-1293 update log --- src/dnode/src/dnodeShell.c | 6 +++--- src/rpc/src/rpcMain.c | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/dnode/src/dnodeShell.c b/src/dnode/src/dnodeShell.c index 5daf616706..4a1d337824 100644 --- a/src/dnode/src/dnodeShell.c +++ b/src/dnode/src/dnodeShell.c @@ -154,15 +154,15 @@ static int dnodeRetrieveUserAuthInfo(char *user, char *spi, char *encrypt, char rpcMsg.contLen = sizeof(SDMAuthMsg); rpcMsg.msgType = TSDB_MSG_TYPE_DM_AUTH; - dDebug("user:%s, send auth msg to mnode", user); + dDebug("user:%s, send auth msg to mnodes", user); SRpcMsg rpcRsp = {0}; dnodeSendMsgToDnodeRecv(&rpcMsg, &rpcRsp); if (rpcRsp.code != 0) { - dError("user:%s, auth msg received from mnode, error:%s", user, tstrerror(rpcRsp.code)); + dError("user:%s, auth msg received from mnodes, error:%s", user, tstrerror(rpcRsp.code)); } else { SDMAuthRsp *pRsp = rpcRsp.pCont; - dDebug("user:%s, auth msg received from mnode", user); + dDebug("user:%s, auth msg received from mnodes", user); memcpy(secret, pRsp->secret, TSDB_KEY_LEN); memcpy(ckey, pRsp->ckey, TSDB_KEY_LEN); *spi = pRsp->spi; diff --git a/src/rpc/src/rpcMain.c b/src/rpc/src/rpcMain.c index 3aecd127ef..f59bf62ec5 100644 --- a/src/rpc/src/rpcMain.c +++ b/src/rpc/src/rpcMain.c @@ -709,21 +709,21 @@ static SRpcConn *rpcAllocateServerConn(SRpcInfo *pRpc, SRecvInfo *pRecv) { } if (terrno != 0) { - taosFreeId(pRpc->idPool, sid); // sid shall be released + taosFreeId(pRpc->idPool, sid); // sid shall be released pConn = NULL; } } - } + } if (pConn) { if (pRecv->connType == RPC_CONN_UDPS && pRpc->numOfThreads > 1) { // UDP server, assign to new connection - pRpc->index = (pRpc->index+1) % pRpc->numOfThreads; + pRpc->index = (pRpc->index + 1) % pRpc->numOfThreads; pConn->localPort = (pRpc->localPort + pRpc->index); } - + taosHashPut(pRpc->hash, hashstr, size, (char *)&pConn, POINTER_BYTES); - tDebug("%s %p server connection is allocated, uid:0x%x", pRpc->label, pConn, pConn->linkUid); + tDebug("%s %p server connection is allocated, uid:0x%x sid:%d key:%s", pRpc->label, pConn, pConn->linkUid, sid, hashstr); } return pConn; From e5b1cb13882102603d00f9b6a4adc73bb5dcb94f Mon Sep 17 00:00:00 2001 From: Yiqing Liu Date: Mon, 7 Sep 2020 19:25:52 +0800 Subject: [PATCH 55/58] Update faq-ch.md --- documentation20/webdocs/markdowndocs/faq-ch.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation20/webdocs/markdowndocs/faq-ch.md b/documentation20/webdocs/markdowndocs/faq-ch.md index 27c1054dc8..c1f2257610 100644 --- a/documentation20/webdocs/markdowndocs/faq-ch.md +++ b/documentation20/webdocs/markdowndocs/faq-ch.md @@ -19,7 +19,7 @@ ## 4. 如何让TDengine crash时生成core文件? 请看为此问题撰写的技术博客 -## 5. 遇到错误"Unable to establish connection", 我怎么办? +## 5. 遇到错误"Unable to establish connection"或者"TDengine Error: Unable to resolve FQDN", 我怎么办? 客户端遇到链接故障,请按照下面的步骤进行检查: From 93f007712af5d7d8eda2bccb3752e26212c53274 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 7 Sep 2020 11:50:36 +0000 Subject: [PATCH 56/58] TD-1336 --- src/mnode/src/mnodeDb.c | 2 + tests/script/general/db/alter_option.sim | 250 +++++++++++++++++++++-- 2 files changed, 233 insertions(+), 19 deletions(-) diff --git a/src/mnode/src/mnodeDb.c b/src/mnode/src/mnodeDb.c index 8187cfd265..54c049d242 100644 --- a/src/mnode/src/mnodeDb.c +++ b/src/mnode/src/mnodeDb.c @@ -242,6 +242,7 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) { return TSDB_CODE_MND_INVALID_DB_OPTION; } +#if 0 if (pCfg->daysToKeep2 < TSDB_MIN_KEEP || pCfg->daysToKeep2 > pCfg->daysToKeep) { mError("invalid db option daysToKeep2:%d valid range: [%d, %d]", pCfg->daysToKeep, TSDB_MIN_KEEP, pCfg->daysToKeep); return TSDB_CODE_MND_INVALID_DB_OPTION; @@ -251,6 +252,7 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) { mError("invalid db option daysToKeep1:%d valid range: [%d, %d]", pCfg->daysToKeep1, TSDB_MIN_KEEP, pCfg->daysToKeep2); return TSDB_CODE_MND_INVALID_DB_OPTION; } +#endif if (pCfg->maxRowsPerFileBlock < TSDB_MIN_MAX_ROW_FBLOCK || pCfg->maxRowsPerFileBlock > TSDB_MAX_MAX_ROW_FBLOCK) { mError("invalid db option maxRowsPerFileBlock:%d valid range: [%d, %d]", pCfg->maxRowsPerFileBlock, diff --git a/tests/script/general/db/alter_option.sim b/tests/script/general/db/alter_option.sim index 12a49c59b5..49c75966ca 100644 --- a/tests/script/general/db/alter_option.sim +++ b/tests/script/general/db/alter_option.sim @@ -7,11 +7,10 @@ system sh/exec.sh -n dnode1 -s start sleep 3000 sql connect -print ============================ dnode1 start +print ============= create database sql create database db cache 2 blocks 4 days 10 keep 20 minRows 300 maxRows 400 ctime 120 precision 'ms' comp 2 wal 1 replica 1 sql show databases -print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09 if $data00 != db then return -1 endi @@ -37,27 +36,240 @@ if $data09 != 4 then return -1 endi -print =============== step2 -system sh/exec.sh -n dnode1 -s stop -x SIGINT -return -sql_error alter database db cache 256 -sql_error alter database db blocks 1 -sql_error alter database db days 10 -sql_error alter database db keep 10 -sql_error alter database db minRows 350 -sql_error alter database db minRows 550 -sql_error alter database db ctime 5000 -sql_error alter database db precision "us" -sql_error alter database db comp 3 -sql_error alter database db wal 1 +print ============== step name +sql_error alter database db name d1 +sql_error alter database db name d2 + +print ============== step ntables +sql_error alter database db ntables -1 +sql_error alter database db ntables 0 +sql_error alter database db ntables 1 +sql_error alter database db ntables 10 + +print ============== step vgroups +sql_error alter database db vgroups -1 +sql_error alter database db vgroups 0 +sql_error alter database db vgroups 1 +sql_error alter database db vgroups 10 + +print ============== step replica sql_error alter database db replica 2 +sql_error alter database db replica 3 +sql_error alter database db replica 0 +sql alter database db replica 1 +sql show databases +print replica $data4_db +if $data4_db != 1 then + return -1 +endi + +print ============== step quorum +sql show databases +print quorum $data5_db +if $data5_db != 1 then + return -1 +endi + +sql alter database db quorum 1 +sql show databases +print quorum $data5_db +if $data5_db != 1 then + return -1 +endi + +sql alter database db quorum 2 +sql show databases +print quorum $data5_db +if $data5_db != 2 then + return -1 +endi + +sql alter database db quorum 3 +sql show databases +print quorum $data5_db +if $data5_db != 3 then + return -1 +endi + +sql alter database db quorum 3 +sql alter database db quorum 2 +sql alter database db quorum 1 +sql_error alter database db quorum 0 +sql_error alter database db quorum 4 +sql_error alter database db quorum 5 +sql_error alter database db quorum -1 + +print ============== step days +sql_error alter database db days 0 +sql_error alter database db days 1 +sql_error alter database db days 2 +sql_error alter database db days 10 +sql_error alter database db days 50 +sql_error alter database db days 100 + +print ============== step keep +sql show databases +print keep $data7_db +if $data7_db != 20,20,20 then + return -1 +endi + +sql alter database db keep 10 +sql show databases +print keep $data7_db +if $data7_db != 20,20,10 then + return -1 +endi + +sql alter database db keep 20 +sql show databases +print keep $data7_db +if $data7_db != 20,20,20 then + return -1 +endi -print ============== step3 -sql alter database db comp 1 -sql alter database db blocks 40 sql alter database db keep 30 +sql show databases +print keep $data7_db +if $data7_db != 20,20,30 then + return -1 +endi + +sql alter database db keep 40 +sql alter database db keep 30 +sql alter database db keep 20 +sql alter database db keep 10 +sql_error alter database db keep 9 +sql_error alter database db keep 1 +sql alter database db keep 0 +sql alter database db keep -1 +sql_error alter database db keep 365001 + +print ============== step cache +sql_error alter database db cache 60 +sql_error alter database db cache 50 +sql_error alter database db cache 20 +sql_error alter database db cache 3 +sql_error alter database db cache 129 +sql_error alter database db cache 300 +sql_error alter database db cache 0 +sql_error alter database db cache -1 + +print ============== step blocks +sql show databases +print blocks $data9_db +if $data9_db != 4 then + return -1 +endi + +sql alter database db blocks 10 +sql show databases +print blocks $data9_db +if $data9_db != 10 then + return -1 +endi + +sql alter database db blocks 20 +sql show databases +print blocks $data9_db +if $data9_db != 20 then + return -1 +endi + +sql alter database db blocks 30 +sql show databases +print blocks $data9_db +if $data9_db != 30 then + return -1 +endi + +sql alter database db blocks 40 +sql alter database db blocks 30 +sql alter database db blocks 20 +sql alter database db blocks 10 +sql_error alter database db blocks 2 +sql_error alter database db blocks 1 +sql alter database db blocks 0 +sql_error alter database db blocks -1 +sql_error alter database db blocks 10001 + +print ============== step minrows +sql_error alter database db minrows 1 +sql_error alter database db minrows 100 +sql_error alter database db minrows 1000 + +print ============== step maxrows +sql_error alter database db maxrows 1 +sql_error alter database db maxrows 100 +sql_error alter database db maxrows 1000 + +print ============== step wallevel +sql show databases +print wallevel $data12_db +if $data12_db != 1 then + return -1 +endi + +sql alter database db wal 1 +sql show databases +print wal $data12_db +if $data12_db != 1 then + return -1 +endi + +sql_error alter database db wal 2 +sql_error alter database db wal 0 +sql_error alter database db wal 3 +sql_error alter database db wal 4 +sql_error alter database db wal -1 +sql_error alter database db wal 1000 + +print ============== step fsync +sql_error alter database db fsync 2 +sql_error alter database db fsync 3 +sql_error alter database db fsync 4 +sql_error alter database db fsync -1 +sql_error alter database db fsync 1000 + +print ============== step comp +sql show databases +print comp $data14_db +if $data14_db != 2 then + return -1 +endi + +sql alter database db comp 1 +sql show databases +print comp $data14_db +if $data14_db != 1 then + return -1 +endi + +sql alter database db comp 2 +sql show databases +print comp $data14_db +if $data14_db != 2 then + return -1 +endi + +sql alter database db comp 0 +sql show databases +print comp $data14_db +if $data14_db != 0 then + return -1 +endi + +sql_error alter database db comp 3 +sql_error alter database db comp 4 +sql_error alter database db comp 5 +sql_error alter database db comp -1 +print ============== step precision +sql_error alter database db prec 'us' -#system sh/exec.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file +print ============== step status +sql_error alter database db status 'delete' + +system sh/exec.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file From b78011e858125a753dd0c9340c9c2466e90a486f Mon Sep 17 00:00:00 2001 From: Bomin Zhang Date: Tue, 8 Sep 2020 09:49:27 +0800 Subject: [PATCH 57/58] fix td-1299 (github #3309) --- src/common/inc/tdataformat.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/common/inc/tdataformat.h b/src/common/inc/tdataformat.h index 6c6e5e35d8..cc4afeb3f8 100644 --- a/src/common/inc/tdataformat.h +++ b/src/common/inc/tdataformat.h @@ -325,8 +325,6 @@ void tdResetKVRowBuilder(SKVRowBuilder *pBuilder); SKVRow tdGetKVRowFromBuilder(SKVRowBuilder *pBuilder); static FORCE_INLINE int tdAddColToKVRow(SKVRowBuilder *pBuilder, int16_t colId, int8_t type, void *value) { - ASSERT(pBuilder->nCols == 0 || colId > pBuilder->pColIdx[pBuilder->nCols - 1].colId); - if (pBuilder->nCols >= pBuilder->tCols) { pBuilder->tCols *= 2; pBuilder->pColIdx = (SColIdx *)realloc((void *)(pBuilder->pColIdx), sizeof(SColIdx) * pBuilder->tCols); From ab039d7d0615a2d455ee60b8eb1a6479723b033b Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 8 Sep 2020 10:19:36 +0800 Subject: [PATCH 58/58] fix TD-1362 --- src/tsdb/src/tsdbFile.c | 47 ++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/src/tsdb/src/tsdbFile.c b/src/tsdb/src/tsdbFile.c index 51c3a625e8..4110c566d2 100644 --- a/src/tsdb/src/tsdbFile.c +++ b/src/tsdb/src/tsdbFile.c @@ -26,11 +26,13 @@ const char *tsdbFileSuffix[] = {".head", ".data", ".last", ".stat", ".h", ".d", ".l", ".s"}; -static int tsdbInitFile(SFile *pFile, STsdbRepo *pRepo, int fid, int type); -static void tsdbDestroyFile(SFile *pFile); -static int compFGroup(const void *arg1, const void *arg2); -static int keyFGroupCompFunc(const void *key, const void *fgroup); -static void tsdbInitFileGroup(SFileGroup *pFGroup, STsdbRepo *pRepo); +static int tsdbInitFile(SFile *pFile, STsdbRepo *pRepo, int fid, int type); +static void tsdbDestroyFile(SFile *pFile); +static int compFGroup(const void *arg1, const void *arg2); +static int keyFGroupCompFunc(const void *key, const void *fgroup); +static void tsdbInitFileGroup(SFileGroup *pFGroup, STsdbRepo *pRepo); +static TSKEY tsdbGetCurrMinKey(int8_t precision, int32_t keep); +static int tsdbGetCurrMinFid(int8_t precision, int32_t keep, int32_t days); // ---------------- INTERNAL FUNCTIONS ---------------- STsdbFileH *tsdbNewFileH(STsdbCfg *pCfg) { @@ -79,9 +81,11 @@ int tsdbOpenFileH(STsdbRepo *pRepo) { int vid = 0; regex_t regex1, regex2; int code = 0; + char fname[TSDB_FILENAME_LEN] = "\0"; SFileGroup fileGroup = {0}; STsdbFileH *pFileH = pRepo->tsdbFileH; + STsdbCfg * pCfg = &(pRepo->config); tDataDir = tsdbGetDataDirName(pRepo->rootDir); if (tDataDir == NULL) { @@ -108,6 +112,8 @@ int tsdbOpenFileH(STsdbRepo *pRepo) { goto _err; } + int mfid = tsdbGetCurrMinFid(pCfg->precision, pCfg->keep, pCfg->daysPerFile); + struct dirent *dp = NULL; while ((dp = readdir(dir)) != NULL) { if (strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0) continue; @@ -120,6 +126,14 @@ int tsdbOpenFileH(STsdbRepo *pRepo) { continue; } + if (fid < mfid) { + for (int type = 0; type < TSDB_FILE_TYPE_MAX; type++) { + tsdbGetDataFileName(pRepo->rootDir, pCfg->tsdbId, fid, type, fname); + (void)remove(fname); + } + continue; + } + if (tsdbSearchFGroup(pFileH, fid, TD_EQ) != NULL) continue; memset((void *)(&fileGroup), 0, sizeof(SFileGroup)); fileGroup.fileId = fid; @@ -179,8 +193,18 @@ void tsdbCloseFileH(STsdbRepo *pRepo) { SFileGroup *tsdbCreateFGroupIfNeed(STsdbRepo *pRepo, char *dataDir, int fid) { STsdbFileH *pFileH = pRepo->tsdbFileH; + STsdbCfg * pCfg = &(pRepo->config); - if (pFileH->nFGroups >= pFileH->maxFGroups) return NULL; + if (pFileH->nFGroups >= pFileH->maxFGroups) { + int mfid = tsdbGetCurrMinFid(pCfg->precision, pCfg->keep, pCfg->daysPerFile); + if (pFileH->pFGroup[0].fileId < mfid) { + pthread_rwlock_wrlock(&pFileH->fhlock); + tsdbRemoveFileGroup(pRepo, &(pFileH->pFGroup[0])); + pthread_rwlock_unlock(&pFileH->fhlock); + } + } + + ASSERT(pFileH->nFGroups < pFileH->maxFGroups); SFileGroup fGroup; SFileGroup *pFGroup = &fGroup; @@ -342,8 +366,7 @@ void tsdbFitRetention(STsdbRepo *pRepo) { STsdbFileH *pFileH = pRepo->tsdbFileH; SFileGroup *pGroup = pFileH->pFGroup; - int mfid = (int)(TSDB_KEY_FILEID(taosGetTimestamp(pCfg->precision), pCfg->daysPerFile, pCfg->precision) - - TSDB_MAX_FILE(pCfg->keep, pCfg->daysPerFile)); + int mfid = tsdbGetCurrMinFid(pCfg->precision, pCfg->keep, pCfg->daysPerFile); pthread_rwlock_wrlock(&(pFileH->fhlock)); @@ -547,3 +570,11 @@ static void tsdbInitFileGroup(SFileGroup *pFGroup, STsdbRepo *pRepo) { } } } + +static TSKEY tsdbGetCurrMinKey(int8_t precision, int32_t keep) { + return (TSKEY)(taosGetTimestamp(precision) - keep * tsMsPerDay[precision]); +} + +static int tsdbGetCurrMinFid(int8_t precision, int32_t keep, int32_t days) { + return TSDB_KEY_FILEID(tsdbGetCurrMinKey(precision, keep), days, precision); +} \ No newline at end of file