From 5295b4b25bcdf9c90ca43fb661fe77564b0c670c Mon Sep 17 00:00:00 2001 From: Hui Li Date: Sat, 1 Aug 2020 14:14:08 +0800 Subject: [PATCH 01/38] [modify install.sh] --- packaging/tools/install.sh | 54 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/packaging/tools/install.sh b/packaging/tools/install.sh index ce5c052e97..d70c88ca54 100644 --- a/packaging/tools/install.sh +++ b/packaging/tools/install.sh @@ -19,6 +19,8 @@ data_link_dir="/usr/local/taos/data" log_link_dir="/usr/local/taos/log" cfg_install_dir="/etc/taos" +local_fqdn="" +server_port=6030 bin_link_dir="/usr/bin" lib_link_dir="/usr/lib" @@ -211,6 +213,48 @@ function install_header() { ${csudo} ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h } +function getLocalFqdn() { + fqdnLine=$(grep fqdn $1 > tmpFqdn.txt) + while read line + do + echo $line + firstChar=${line:0:1} + if [[ "$firstChar" != "#" ]]; then + fqdn=$(echo ${line#*fqdn}) + fqdn=$(echo ${fqdn%%#*}) +# echo "get fqdn from cfg: $fqdn" + break + fi + done tmpServerPort.txt) + while read line + do + echo $line + firstChar=${line:0:1} + if [[ "$firstChar" != "#" ]]; then + port=$(echo ${line#*serverPort}) + port=$(echo ${port%%#*}) +# echo "get serverPort from cfg: $port" + break + fi + done Date: Mon, 3 Aug 2020 18:15:12 +0800 Subject: [PATCH 02/38] 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 7a2476db6e..4bfc3f0d8b 100644 --- a/documentation20/webdocs/markdowndocs/administrator-ch.md +++ b/documentation20/webdocs/markdowndocs/administrator-ch.md @@ -94,7 +94,7 @@ TDengine系统后台服务由taosd提供,可以在配置文件taos.cfg里修 - maxSQLLength:单条SQL语句允许最长限制。默认值:65380字节。 - maxBinaryDisplayWidth:Shell中binary 和 nchar字段的显示宽度上限,超过此限制的部分将被隐藏。默认值:30。可在 shell 中通过命令 set max_binary_display_width nn动态修改此选项。 -**注意:**对于端口,TDengine会使用从serverPort起12个连续的TCP和UDP端口号,请务必在防火墙打开。因此如果是缺省配置,需要打开从6030都6041共11个端口,而且必须TCP和UDP都打开。 +**注意:**对于端口,TDengine会使用从serverPort起12个连续的TCP和UDP端口号,请务必在防火墙打开。因此如果是缺省配置,需要打开从6030都6041共12个端口,而且必须TCP和UDP都打开。 不同应用场景的数据往往具有不同的数据特征,比如保留天数、副本数、采集频次、记录大小、采集点的数量、压缩等都可完全不同。为获得在存储上的最高效率,TDengine提供如下存储相关的系统配置参数: From 362fb3d36afbf1bdddb5aebefa0256cdf62989cf Mon Sep 17 00:00:00 2001 From: slguan Date: Mon, 3 Aug 2020 18:26:37 +0800 Subject: [PATCH 03/38] TD-1037 os module compile --- deps/CMakeLists.txt | 5 ++++- deps/iconv/CMakeLists.txt | 2 ++ deps/iconv/iconv.h | 2 +- deps/lz4/CMakeLists.txt | 2 ++ deps/pthread/pthread_mutex_consistent.c | 2 +- src/os/inc/osDarwin.h | 4 ++-- src/os/inc/osLinux32.h | 4 ++-- src/os/inc/osWindows.h | 4 ++-- src/os/src/darwin/darwinSysInfo.c | 2 +- src/os/src/detail/CMakeLists.txt | 6 ++++++ src/os/src/detail/osFile.c | 6 +++--- src/os/src/detail/osRand.c | 4 ++-- src/os/src/detail/osTime.c | 5 +++-- src/os/src/windows/w64File.c | 1 + src/os/src/windows/w64Socket.c | 3 ++- src/os/src/windows/w64String.c | 2 +- src/os/src/windows/w64Sysinfo.c | 2 +- 17 files changed, 36 insertions(+), 20 deletions(-) diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 3794a0a228..b9b99a4910 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -7,4 +7,7 @@ ADD_SUBDIRECTORY(regex) ADD_SUBDIRECTORY(iconv) ADD_SUBDIRECTORY(lz4) ADD_SUBDIRECTORY(cJson) -ADD_SUBDIRECTORY(MQTT-C) + +IF (NOT TD_WINDOWS) + ADD_SUBDIRECTORY(MQTT-C) +ENDIF () \ No newline at end of file diff --git a/deps/iconv/CMakeLists.txt b/deps/iconv/CMakeLists.txt index 944cb400e0..628abb13ef 100644 --- a/deps/iconv/CMakeLists.txt +++ b/deps/iconv/CMakeLists.txt @@ -5,5 +5,7 @@ IF (TD_WINDOWS_64) LIST(APPEND SRC iconv.c) LIST(APPEND SRC localcharset.c) INCLUDE_DIRECTORIES(.) + SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /WX-") + SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /WX-") ADD_LIBRARY(iconv ${SRC}) ENDIF () \ No newline at end of file diff --git a/deps/iconv/iconv.h b/deps/iconv/iconv.h index 83358ce987..a461cef544 100644 --- a/deps/iconv/iconv.h +++ b/deps/iconv/iconv.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1999-2003, 2005-2006, 2008-2009 Free Software Foundation, Inc. +/* Copyright (C) 1999-2003, 2005-2006, 2008-2009 Free Software Foundation, Inc. This file is part of the GNU LIBICONV Library. The GNU LIBICONV Library is free software; you can redistribute it diff --git a/deps/lz4/CMakeLists.txt b/deps/lz4/CMakeLists.txt index a142d8d468..d371974121 100644 --- a/deps/lz4/CMakeLists.txt +++ b/deps/lz4/CMakeLists.txt @@ -1,4 +1,6 @@ aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SOURCE_LIST) add_library(lz4 ${SOURCE_LIST}) +SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /WX-") +SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /WX-") target_include_directories(lz4 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc) \ No newline at end of file diff --git a/deps/pthread/pthread_mutex_consistent.c b/deps/pthread/pthread_mutex_consistent.c index 3e05635007..2d68213ce1 100644 --- a/deps/pthread/pthread_mutex_consistent.c +++ b/deps/pthread/pthread_mutex_consistent.c @@ -1,4 +1,4 @@ -/* +/* * pthread_mutex_consistent.c * * Description: diff --git a/src/os/inc/osDarwin.h b/src/os/inc/osDarwin.h index 8628a0f3ac..c1a950fbe6 100644 --- a/src/os/inc/osDarwin.h +++ b/src/os/inc/osDarwin.h @@ -13,8 +13,8 @@ * along with this program. If not, see . */ -#ifndef TDENGINE_PLATFORM_LINUX_H -#define TDENGINE_PLATFORM_LINUX_H +#ifndef TDENGINE_OS_DARWIN_H +#define TDENGINE_OS_DARWIN_H #ifdef __cplusplus extern "C" { diff --git a/src/os/inc/osLinux32.h b/src/os/inc/osLinux32.h index b62b086d0f..93e917e797 100644 --- a/src/os/inc/osLinux32.h +++ b/src/os/inc/osLinux32.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_LINUX32_H +#define TDENGINE_OS_LINUX32_H #ifdef __cplusplus extern "C" { diff --git a/src/os/inc/osWindows.h b/src/os/inc/osWindows.h index a8c2243253..8c5c8e9d1a 100644 --- a/src/os/inc/osWindows.h +++ b/src/os/inc/osWindows.h @@ -13,8 +13,8 @@ * along with this program. If not, see . */ -#ifndef TDENGINE_PLATFORM_WINDOWS_H -#define TDENGINE_PLATFORM_WINDOWS_H +#ifndef TDENGINE_OS_WINDOWS_H +#define TDENGINE_OS_WINDOWS_H #include #include diff --git a/src/os/src/darwin/darwinSysInfo.c b/src/os/src/darwin/darwinSysInfo.c index 108cc6239f..f8aa02dcff 100644 --- a/src/os/src/darwin/darwinSysInfo.c +++ b/src/os/src/darwin/darwinSysInfo.c @@ -41,7 +41,7 @@ static void taosGetSystemLocale() { if (cfg_locale && cfg_locale->cfgStatus < TAOS_CFG_CSTATUS_DEFAULT) { char *locale = setlocale(LC_CTYPE, "chs"); if (locale != NULL) { - strncpy(tsLocale, locale, TSDB_LOCALE_LEN - 1); + tstrncpy(tsLocale, locale, TSDB_LOCALE_LEN); cfg_locale->cfgStatus = TAOS_CFG_CSTATUS_DEFAULT; uInfo("locale not configured, set to default:%s", tsLocale); } diff --git a/src/os/src/detail/CMakeLists.txt b/src/os/src/detail/CMakeLists.txt index 5902a9356b..3ea7f97985 100644 --- a/src/os/src/detail/CMakeLists.txt +++ b/src/os/src/detail/CMakeLists.txt @@ -1,6 +1,12 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) +IF (TD_WINDOWS) + INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/pthread) + INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/iconv) + INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/regex) +ENDIF () + INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/inc) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/os/inc) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/util/inc) diff --git a/src/os/src/detail/osFile.c b/src/os/src/detail/osFile.c index 516b7bb19e..8f055dd812 100644 --- a/src/os/src/detail/osFile.c +++ b/src/os/src/detail/osFile.c @@ -70,7 +70,7 @@ ssize_t taosTReadImp(int fd, void *buf, size_t count) { char * tbuf = (char *)buf; while (leftbytes > 0) { - readbytes = read(fd, (void *)tbuf, leftbytes); + readbytes = read(fd, (void *)tbuf, (uint32_t)leftbytes); if (readbytes < 0) { if (errno == EINTR) { continue; @@ -94,7 +94,7 @@ ssize_t taosTWriteImp(int fd, void *buf, size_t n) { char * tbuf = (char *)buf; while (nleft > 0) { - nwritten = write(fd, (void *)tbuf, nleft); + nwritten = write(fd, (void *)tbuf, (uint32_t)nleft); if (nwritten < 0) { if (errno == EINTR) { continue; @@ -105,7 +105,7 @@ ssize_t taosTWriteImp(int fd, void *buf, size_t n) { tbuf += nwritten; } - return n; + return (ssize_t)n; } #ifndef TAOS_OS_FUNC_FILE_SENDIFLE diff --git a/src/os/src/detail/osRand.c b/src/os/src/detail/osRand.c index edb8642bd6..b322a88684 100644 --- a/src/os/src/detail/osRand.c +++ b/src/os/src/detail/osRand.c @@ -26,11 +26,11 @@ uint32_t taosSafeRand(void) { fd = open("/dev/urandom", 0); if (fd < 0) { - seed = time(0); + seed = (int)time(0); } else { int len = read(fd, &seed, sizeof(seed)); if (len < 0) { - seed = time(0); + seed = (int)time(0); } close(fd); } diff --git a/src/os/src/detail/osTime.c b/src/os/src/detail/osTime.c index 6d41692d80..ced1643d2b 100644 --- a/src/os/src/detail/osTime.c +++ b/src/os/src/detail/osTime.c @@ -165,7 +165,7 @@ int32_t parseTimezone(char* str, int64_t* tzOffset) { char* sep = strchr(&str[i], ':'); if (sep != NULL) { - int32_t len = sep - &str[i]; + int32_t len = (int32_t)(sep - &str[i]); hour = strnatoi(&str[i], len); i += len + 1; @@ -212,7 +212,8 @@ int32_t parseTimeWithTz(char* timestr, int64_t* time, int32_t timePrec) { /* mktime will be affected by TZ, set by using taos_options */ #ifdef WINDOWS - int64_t seconds = gmtime(&tm); + int64_t seconds = user_mktime64(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); + //int64_t seconds = gmtime(&tm); #else int64_t seconds = timegm(&tm); #endif diff --git a/src/os/src/windows/w64File.c b/src/os/src/windows/w64File.c index f2c59c3639..d75549b377 100644 --- a/src/os/src/windows/w64File.c +++ b/src/os/src/windows/w64File.c @@ -15,6 +15,7 @@ #define _DEFAULT_SOURCE #include "os.h" +#include "tulog.h" void taosGetTmpfilePath(const char *fileNamePrefix, char *dstPath) { const char* tdengineTmpFileNamePrefix = "tdengine-"; diff --git a/src/os/src/windows/w64Socket.c b/src/os/src/windows/w64Socket.c index cdf46825e8..dbe501b645 100644 --- a/src/os/src/windows/w64Socket.c +++ b/src/os/src/windows/w64Socket.c @@ -13,6 +13,7 @@ * along with this program. If not, see . */ +#include "os.h" #include #include #include @@ -33,7 +34,7 @@ void taosWinSocketInit() { } } -int taosSetNonblocking(SOCKET sock, int on) { +int taosSetNonblocking(int sock, int on) { u_long mode; if (on) { mode = 1; diff --git a/src/os/src/windows/w64String.c b/src/os/src/windows/w64String.c index 8057c89a55..f35b2ca716 100644 --- a/src/os/src/windows/w64String.c +++ b/src/os/src/windows/w64String.c @@ -67,7 +67,7 @@ char *getpass(const char *prefix) { } char *strndup(const char *s, size_t n) { - int len = strlen(s); + size_t len = strlen(s); if (len >= n) { len = n; } diff --git a/src/os/src/windows/w64Sysinfo.c b/src/os/src/windows/w64Sysinfo.c index 0a680ac0b7..27869e1eec 100644 --- a/src/os/src/windows/w64Sysinfo.c +++ b/src/os/src/windows/w64Sysinfo.c @@ -43,7 +43,7 @@ static void taosGetSystemLocale() { if (cfg_locale && cfg_locale->cfgStatus < TAOS_CFG_CSTATUS_DEFAULT) { char *locale = setlocale(LC_CTYPE, "chs"); if (locale != NULL) { - tstrncpy(tsLocale, locale, sizeof(tsLocale)); + tstrncpy(tsLocale, locale, TSDB_LOCALE_LEN);; cfg_locale->cfgStatus = TAOS_CFG_CSTATUS_DEFAULT; uInfo("locale not configured, set to default:%s", tsLocale); } From d14cbf1f640e4456f11b8eef779fe464b4fc2a4f Mon Sep 17 00:00:00 2001 From: Bomin Zhang Date: Mon, 3 Aug 2020 18:37:33 +0800 Subject: [PATCH 04/38] update doc to include 'telemetryReporting' --- documentation20/webdocs/markdowndocs/administrator-ch.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation20/webdocs/markdowndocs/administrator-ch.md b/documentation20/webdocs/markdowndocs/administrator-ch.md index 7a2476db6e..66797a94b0 100644 --- a/documentation20/webdocs/markdowndocs/administrator-ch.md +++ b/documentation20/webdocs/markdowndocs/administrator-ch.md @@ -92,7 +92,7 @@ TDengine系统后台服务由taosd提供,可以在配置文件taos.cfg里修 - debugFlag:运行日志开关。131(输出错误和警告日志),135( 输出错误、警告和调试日志),143( 输出错误、警告、调试和跟踪日志)。默认值:131或135(不同模块有不同的默认值)。 - numOfLogLines:单个日志文件允许的最大行数。默认值:10,000,000行。 - maxSQLLength:单条SQL语句允许最长限制。默认值:65380字节。 -- maxBinaryDisplayWidth:Shell中binary 和 nchar字段的显示宽度上限,超过此限制的部分将被隐藏。默认值:30。可在 shell 中通过命令 set max_binary_display_width nn动态修改此选项。 +- telemetryReporting: 是否允许 TDengine 采集和上报基本使用信息,0表示不允许,1表示允许。 默认值:1。 **注意:**对于端口,TDengine会使用从serverPort起12个连续的TCP和UDP端口号,请务必在防火墙打开。因此如果是缺省配置,需要打开从6030都6041共11个端口,而且必须TCP和UDP都打开。 @@ -142,6 +142,7 @@ TDengine系统的前台交互客户端应用程序为taos,它与taosd共享同 - secondEp: taos启动时,如果first连接不上,尝试连接集群中第二个taosd实例的end point, 缺省值为空。 - charset:字符集编码。系统中动态获取,如果自动获取失败,需要用户在配置文件设置或通过API设置。 - locale:系统区位信息及编码格式。系统中动态获取,如果自动获取失败,需要用户在配置文件设置或通过API设置。 +- maxBinaryDisplayWidth:Shell中binary 和 nchar字段的显示宽度上限,超过此限制的部分将被隐藏。默认值:30。可在 shell 中通过命令 set max_binary_display_width *nn* 动态修改此选项。 日志的配置参数,与server的配置参数完全一样。 From 40e267119bf53d3b7641798e84b716fb3f864045 Mon Sep 17 00:00:00 2001 From: Yiqing Liu Date: Mon, 3 Aug 2020 18:50:52 +0800 Subject: [PATCH 05/38] Update Getting Started-ch.md --- .../webdocs/markdowndocs/Getting Started-ch.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/documentation20/webdocs/markdowndocs/Getting Started-ch.md b/documentation20/webdocs/markdowndocs/Getting Started-ch.md index 7704a6a4e7..210f0921ba 100644 --- a/documentation20/webdocs/markdowndocs/Getting Started-ch.md +++ b/documentation20/webdocs/markdowndocs/Getting Started-ch.md @@ -53,9 +53,12 @@ systemctl start taosd systemctl status taosd ``` -如果TDengine服务正常工作,那么您可以通过TDengine的命令行程序`taos`来访问并体验TDengine。 - -**注:_systemctl_ 命令需要 _root_ 权限来运行,如果您非 _root_ 用户,请在命令前添加 _sudo_** +如果TDengine服务正常工作,那么您可以通过TDengine的命令行程序`taos`来访问并体验TDengine。 + +**注意:** + +- systemctl命令需要 _root_ 权限来运行,如果您非 _root_ 用户,请在命令前添加 sudo +- 为更好的获得产品反馈,改善产品,TDengine会采集基本的使用信息,但您可以修改系统配置文件taos.cfg里的配置参数telemetryReporting, 将其设为0,就可将其关闭。 ## TDengine命令行程序 From d5c57b68ab8d730bbbe4b9bb55eaf2627bf36c96 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 3 Aug 2020 19:12:27 +0800 Subject: [PATCH 06/38] some warnings --- src/util/src/hash.c | 14 +++++++------- src/util/src/talgo.c | 6 +++--- src/util/src/tarray.c | 6 +++--- src/util/src/tbuffer.c | 1 - src/util/src/tcache.c | 6 +++--- 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/util/src/hash.c b/src/util/src/hash.c index 88f02aff7e..37c9146a49 100644 --- a/src/util/src/hash.c +++ b/src/util/src/hash.c @@ -81,7 +81,7 @@ static FORCE_INLINE void __lock_destroy(void *lock) { static FORCE_INLINE int32_t taosHashCapacity(int32_t length) { int32_t len = MIN(length, HASH_MAX_CAPACITY); - uint32_t i = 4; + int32_t i = 4; while (i < len) i = (i << 1u); return i; } @@ -176,7 +176,7 @@ SHashObj *taosHashInit(size_t capacity, _hash_fn_t fn, bool threadsafe) { } // the max slots is not defined by user - pHashObj->capacity = taosHashCapacity(capacity); + pHashObj->capacity = taosHashCapacity((int32_t)capacity); assert((pHashObj->capacity & (pHashObj->capacity - 1)) == 0); pHashObj->hashFp = fn; @@ -219,7 +219,7 @@ int32_t taosHashPut(SHashObj *pHashObj, const void *key, size_t keyLen, void *da __wr_lock(pHashObj->lock); uint32_t hashVal = 0; - SHashNode *pNode = doGetNodeFromHashTable(pHashObj, key, keyLen, &hashVal); + SHashNode *pNode = doGetNodeFromHashTable(pHashObj, key, (uint32_t)keyLen, &hashVal); if (pNode == NULL) { // no data in hash table with the specified key, add it into hash table taosHashTableResize(pHashObj); @@ -261,7 +261,7 @@ void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen) { __rd_lock(pHashObj->lock); uint32_t hashVal = 0; - SHashNode *pNode = doGetNodeFromHashTable(pHashObj, key, keyLen, &hashVal); + SHashNode *pNode = doGetNodeFromHashTable(pHashObj, key, (int32_t)keyLen, &hashVal); __unlock(pHashObj->lock); @@ -278,7 +278,7 @@ void taosHashRemove(SHashObj *pHashObj, const void *key, size_t keyLen) { __wr_lock(pHashObj->lock); uint32_t val = 0; - SHashNode *pNode = doGetNodeFromHashTable(pHashObj, key, keyLen, &val); + SHashNode *pNode = doGetNodeFromHashTable(pHashObj, key, (uint32_t)keyLen, &val); if (pNode == NULL) { __unlock(pHashObj->lock); return; @@ -460,7 +460,7 @@ void taosHashTableResize(SHashObj *pHashObj) { SHashNode *pNode = NULL; SHashNode *pNext = NULL; - int32_t newSize = pHashObj->capacity << 1u; + int32_t newSize = (int32_t)(pHashObj->capacity) << 1u; if (newSize > HASH_MAX_CAPACITY) { // uDebug("current capacity:%d, maximum capacity:%d, no resize applied due to limitation is reached", // pHashObj->capacity, HASH_MAX_CAPACITY); @@ -539,7 +539,7 @@ SHashNode *doCreateHashNode(const void *key, size_t keyLen, const void *pData, s pNewNode->key = pNewNode->data + dsize; memcpy(pNewNode->key, key, keyLen); - pNewNode->keyLen = keyLen; + pNewNode->keyLen = (uint32_t)keyLen; pNewNode->hashVal = hashVal; return pNewNode; diff --git a/src/util/src/talgo.c b/src/util/src/talgo.c index 6879461953..4b96e62e91 100644 --- a/src/util/src/talgo.c +++ b/src/util/src/talgo.c @@ -24,7 +24,7 @@ } while (0); static void median(void *src, size_t size, size_t s, size_t e, const void *param, __ext_compar_fn_t comparFn, void* buf) { - int32_t mid = ((e - s) >> 1u) + s; + int32_t mid = ((int32_t)(e - s) >> 1u) + (int32_t)s; if (comparFn(elePtrAt(src, size, mid), elePtrAt(src, size, s), param) == 1) { doswap(elePtrAt(src, size, mid), elePtrAt(src, size, s), size, buf); @@ -152,14 +152,14 @@ static void tqsortImpl(void *src, int32_t start, int32_t end, size_t size, const void taosqsort(void *src, size_t numOfElem, size_t size, const void* param, __ext_compar_fn_t comparFn) { char *buf = calloc(1, size); // prepare the swap buffer - tqsortImpl(src, 0, numOfElem - 1, size, param, comparFn, buf); + tqsortImpl(src, 0, (int32_t)numOfElem - 1, (int32_t)size, param, comparFn, buf); taosTFree(buf); } void * taosbsearch(const void *key, const void *base, size_t nmemb, size_t size, __compar_fn_t compar, int flags) { // TODO: need to check the correctness of this function int l = 0; - int r = nmemb; + int r = (int)nmemb; int idx = 0; int comparison; diff --git a/src/util/src/tarray.c b/src/util/src/tarray.c index 19225e998a..65147b38de 100755 --- a/src/util/src/tarray.c +++ b/src/util/src/tarray.c @@ -120,8 +120,8 @@ void* taosArrayInsert(SArray* pArray, size_t index, void* pData) { void* dst = TARRAY_GET_ELEM(pArray, index); - int32_t remain = pArray->size - index; - memmove(dst + pArray->elemSize, dst, pArray->elemSize * remain); + int32_t remain = (int32_t)(pArray->size - index); + memmove((char*)dst + pArray->elemSize, (char*)dst, pArray->elemSize * remain); memcpy(dst, pData, pArray->elemSize); pArray->size += 1; @@ -138,7 +138,7 @@ void taosArrayRemove(SArray* pArray, size_t index) { } size_t remain = pArray->size - index - 1; - memmove(pArray->pData + index * pArray->elemSize, pArray->pData + (index + 1) * pArray->elemSize, remain * pArray->elemSize); + memmove((char*)pArray->pData + index * pArray->elemSize, (char*)pArray->pData + (index + 1) * pArray->elemSize, remain * pArray->elemSize); pArray->size -= 1; } diff --git a/src/util/src/tbuffer.c b/src/util/src/tbuffer.c index 4af435798c..240f744ea3 100644 --- a/src/util/src/tbuffer.c +++ b/src/util/src/tbuffer.c @@ -17,7 +17,6 @@ #include #include #include -#include #include "tbuffer.h" #include "exception.h" #include diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index 4a30a66871..7eca3b2637 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -292,7 +292,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v uError("cache:%s, key:%p, failed to added into cache, out of memory", pCacheObj->name, key); } } else { // old data exists, update the node - pNode = taosUpdateCacheImpl(pCacheObj, pOld, key, keyLen, pData, dataSize, duration * 1000L); + pNode = taosUpdateCacheImpl(pCacheObj, pOld, key, (int32_t)keyLen, pData, (uint32_t)dataSize, duration * 1000L); uDebug("cache:%s, key:%p, %p exist in cache, updated old:%p", pCacheObj->name, key, pNode->data, pOld); } @@ -509,7 +509,7 @@ SCacheDataNode *taosCreateCacheNode(const char *key, size_t keyLen, const char * memcpy(pNewNode->data, pData, size); pNewNode->key = (char *)pNewNode + sizeof(SCacheDataNode) + size; - pNewNode->keySize = keyLen; + pNewNode->keySize = (uint16_t)keyLen; memcpy(pNewNode->key, key, keyLen); @@ -645,7 +645,7 @@ static void doCacheRefresh(SCacheObj* pCacheObj, int64_t time, __cache_free_fn_t while (taosHashIterNext(pIter)) { SCacheDataNode *pNode = *(SCacheDataNode **)taosHashIterGet(pIter); - if (pNode->expireTime < time && T_REF_VAL_GET(pNode) <= 0) { + if (pNode->expireTime < (uint64_t)time && T_REF_VAL_GET(pNode) <= 0) { taosCacheReleaseNode(pCacheObj, pNode); continue; } From 168a76e53dec17693a4ed9d44361a16f36bda2c8 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Tue, 4 Aug 2020 01:57:49 +0000 Subject: [PATCH 07/38] [TD-1039] --- src/client/src/tscServer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c index 3fd0aa79a6..a040b3ef55 100644 --- a/src/client/src/tscServer.c +++ b/src/client/src/tscServer.c @@ -1999,7 +1999,8 @@ int tscProcessUseDbRsp(SSqlObj *pSql) { return 0; } -int tscProcessDropDbRsp(SSqlObj *UNUSED_PARAM(pSql)) { +int tscProcessDropDbRsp(SSqlObj *pSql) { + pSql->pTscObj->db[0] = 0; taosCacheEmpty(tscCacheHandle); return 0; } From 3c4e3322bbf830ee65a323860e6dd168f64c4299 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Tue, 4 Aug 2020 10:34:22 +0800 Subject: [PATCH 08/38] support telemetryReport in all tests. --- tests/pytest/util/dnodes-default.py | 1 + tests/pytest/util/dnodes-no-random-fail.py | 1 + tests/pytest/util/dnodes-random-fail.py | 1 + 3 files changed, 3 insertions(+) diff --git a/tests/pytest/util/dnodes-default.py b/tests/pytest/util/dnodes-default.py index ec3865f4f2..085e083149 100644 --- a/tests/pytest/util/dnodes-default.py +++ b/tests/pytest/util/dnodes-default.py @@ -39,6 +39,7 @@ class TDSimClient: "udebugFlag": "135", "jnidebugFlag": "135", "qdebugFlag": "135", + "telemetryReporting": "0", } def init(self, path): self.__init__() diff --git a/tests/pytest/util/dnodes-no-random-fail.py b/tests/pytest/util/dnodes-no-random-fail.py index 485c1b4b3f..2627575e61 100644 --- a/tests/pytest/util/dnodes-no-random-fail.py +++ b/tests/pytest/util/dnodes-no-random-fail.py @@ -36,6 +36,7 @@ class TDSimClient: "udebugFlag": "135", "jnidebugFlag": "135", "qdebugFlag": "135", + "telemetryReporting": "0", } def init(self, path): diff --git a/tests/pytest/util/dnodes-random-fail.py b/tests/pytest/util/dnodes-random-fail.py index 7c4edde47f..4f4cdcc0d0 100644 --- a/tests/pytest/util/dnodes-random-fail.py +++ b/tests/pytest/util/dnodes-random-fail.py @@ -36,6 +36,7 @@ class TDSimClient: "udebugFlag": "135", "jnidebugFlag": "135", "qdebugFlag": "135", + "telemetryReporting": "0", } def init(self, path): From 3ff60c3ec1d6c2d0f4f23f4dcdcd0bdc0476c7f1 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 4 Aug 2020 11:19:16 +0800 Subject: [PATCH 09/38] TD-1037 --- src/inc/taosmsg.h | 4 ++-- src/os/inc/osFile.h | 12 ++++++++++++ src/os/inc/osMemory.h | 6 +++--- src/os/inc/osWindows.h | 3 +++ src/util/inc/tconfig.h | 2 +- src/util/src/tcompression.c | 2 +- src/util/src/tconfig.c | 8 ++++---- src/util/src/terror.c | 2 +- src/util/src/thashutil.c | 2 +- src/util/src/tlog.c | 2 +- src/util/src/tsched.c | 4 ++-- src/util/src/tskiplist.c | 8 ++++---- src/util/src/ttimer.c | 4 ++-- src/util/src/tutil.c | 4 ++-- 14 files changed, 39 insertions(+), 24 deletions(-) diff --git a/src/inc/taosmsg.h b/src/inc/taosmsg.h index 57e0b46f06..6d43568ecd 100644 --- a/src/inc/taosmsg.h +++ b/src/inc/taosmsg.h @@ -206,7 +206,7 @@ typedef struct SSubmitMsg { SMsgHead header; int32_t length; int32_t numOfBlocks; - SSubmitBlk blocks[]; + char blocks[]; } SSubmitMsg; typedef struct { @@ -680,7 +680,7 @@ typedef struct STableMetaMsg { typedef struct SMultiTableMeta { int32_t numOfTables; int32_t contLen; - STableMetaMsg metas[]; + char metas[]; } SMultiTableMeta; typedef struct { diff --git a/src/os/inc/osFile.h b/src/os/inc/osFile.h index 6e48e80ca4..3bd32734e6 100644 --- a/src/os/inc/osFile.h +++ b/src/os/inc/osFile.h @@ -56,6 +56,18 @@ int32_t taosFileRename(char *fullPath, char *suffix, char delimiter, char **dstP // TAOS_OS_FUNC_FILE_GETTMPFILEPATH void taosGetTmpfilePath(const char *fileNamePrefix, char *dstPath); +#ifdef TAOS_OS_FUNC_FILE_ISDIR + #define S_ISDIR(m) (((m) & 0170000) == (0040000)) +#endif + +#ifdef TAOS_OS_FUNC_FILE_ISREG + #define S_ISREG(m) !(S_ISDIR(m)) +#endif + +#ifdef TAOS_OS_FUNC_FILE_ISLNK + #define S_ISLNK(m) 0 +#endif + #ifdef __cplusplus } #endif diff --git a/src/os/inc/osMemory.h b/src/os/inc/osMemory.h index aaac8c68e3..37d9dc9828 100644 --- a/src/os/inc/osMemory.h +++ b/src/os/inc/osMemory.h @@ -74,9 +74,9 @@ void taosTMemset(void *ptr, int c); #define taosCalloc(num, size) taos_calloc(num, size, __FILE__, __LINE__) #define taosRealloc(ptr, size) taos_realloc(ptr, size, __FILE__, __LINE__) #define taosFree(ptr) taos_free(ptr, __FILE__, __LINE__) - #define taosStrdup(str) taos_strdup(str, __FILE__, __LINE__) - #define taosStrndup(str, size) taos_strndup(str, size, __FILE__, __LINE__) - #define taosGetline(lineptr, n, stream) taos_getline(lineptr, n, stream, __FILE__, __LINE__) + //#define taosStrdup(str) taos_strdup(str, __FILE__, __LINE__) + //#define taosStrndup(str, size) taos_strndup(str, size, __FILE__, __LINE__) + //#define taosGetline(lineptr, n, stream) taos_getline(lineptr, n, stream, __FILE__, __LINE__) #endif #endif diff --git a/src/os/inc/osWindows.h b/src/os/inc/osWindows.h index 8c5c8e9d1a..fcb89c072d 100644 --- a/src/os/inc/osWindows.h +++ b/src/os/inc/osWindows.h @@ -60,6 +60,9 @@ extern "C" { #define TAOS_OS_FUNC_DIR #define TAOS_OS_FUNC_FILE +#define TAOS_OS_FUNC_FILE_ISREG +#define TAOS_OS_FUNC_FILE_ISDIR +#define TAOS_OS_FUNC_FILE_ISLNK #define TAOS_OS_FUNC_FILE_SENDIFLE #define taosFSendFile(outfile, infile, offset, count) taosFSendFileImp(outfile, infile, offset, size) #define taosTSendFile(dfd, sfd, offset, size) taosTSendFileImp(dfd, sfd, offset, size) diff --git a/src/util/inc/tconfig.h b/src/util/inc/tconfig.h index 79b19ff79d..0520cf29a8 100644 --- a/src/util/inc/tconfig.h +++ b/src/util/inc/tconfig.h @@ -68,7 +68,7 @@ typedef struct { int8_t cfgStatus; int8_t unitType; int8_t valType; - uint32_t ptrLength; + int32_t ptrLength; } SGlobalCfg; extern SGlobalCfg tsGlobalConfig[]; diff --git a/src/util/src/tcompression.c b/src/util/src/tcompression.c index b085e26e07..33828d93f0 100644 --- a/src/util/src/tcompression.c +++ b/src/util/src/tcompression.c @@ -129,7 +129,7 @@ int tsCompressINTImp(const char *const input, const int nelements, char *const o if (zigzag_value >= SIMPLE8B_MAX_INT64) goto _copy_and_exit; - char tmp_bit; + int64_t tmp_bit; if (zigzag_value == 0) { // Take care here, __builtin_clzl give wrong anser for value 0; tmp_bit = 0; diff --git a/src/util/src/tconfig.c b/src/util/src/tconfig.c index 9fc9386b42..ccf4ea7317 100644 --- a/src/util/src/tconfig.c +++ b/src/util/src/tconfig.c @@ -98,7 +98,7 @@ static void taosReadInt16Config(SGlobalCfg *cfg, char *input_value) { } static void taosReadDirectoryConfig(SGlobalCfg *cfg, char *input_value) { - int length = strlen(input_value); + int length = (int)strlen(input_value); char *option = (char *)cfg->ptr; if (length <= 0 || length > cfg->ptrLength) { uError("config option:%s, input value:%s, length out of range[0, %d], use default value:%s", @@ -150,7 +150,7 @@ static void taosReadIpStrConfig(SGlobalCfg *cfg, char *input_value) { } static void taosReadStringConfig(SGlobalCfg *cfg, char *input_value) { - int length = strlen(input_value); + int length = (int) strlen(input_value); char *option = (char *)cfg->ptr; if (length <= 0 || length > cfg->ptrLength) { uError("config option:%s, input value:%s, length out of range[0, %d], use default value:%s", @@ -283,7 +283,7 @@ void taosReadGlobalLogCfg() { option = value = NULL; olen = vlen = 0; - getline(&line, &len, fp); + taosGetline(&line, &len, fp); line[len - 1] = 0; paGetToken(line, &option, &olen); @@ -329,7 +329,7 @@ bool taosReadGlobalCfg() { option = value = NULL; olen = vlen = 0; - getline(&line, &len, fp); + taosGetline(&line, &len, fp); line[len - 1] = 0; paGetToken(line, &option, &olen); diff --git a/src/util/src/terror.c b/src/util/src/terror.c index aa6925464e..1eb6893cbc 100644 --- a/src/util/src/terror.c +++ b/src/util/src/terror.c @@ -49,7 +49,7 @@ static int tsCompareTaosError(const void* a, const void* b) { } static pthread_once_t tsErrorInit = PTHREAD_ONCE_INIT; -static void tsSortError() { +static void tsSortError(void) { qsort(errors, sizeof(errors)/sizeof(errors[0]), sizeof(errors[0]), tsCompareTaosError); } diff --git a/src/util/src/thashutil.c b/src/util/src/thashutil.c index 33f0d6d430..681d73db3d 100644 --- a/src/util/src/thashutil.c +++ b/src/util/src/thashutil.c @@ -78,7 +78,7 @@ uint32_t taosIntHash_64(const char *key, uint32_t UNUSED_PARAM(len)) { uint64_t hash = val >> 16U; hash += (val & 0xFFFFU); - return hash; + return (uint32_t)hash; } _hash_fn_t taosGetDefaultHashFunction(int32_t type) { diff --git a/src/util/src/tlog.c b/src/util/src/tlog.c index 913989bf52..cf6ccdcbce 100644 --- a/src/util/src/tlog.c +++ b/src/util/src/tlog.c @@ -65,7 +65,7 @@ typedef struct { int32_t tsAsyncLog = 1; float tsTotalLogDirGB = 0; float tsAvailLogDirGB = 0; -float tsMinimalLogDirGB = 0.1; +float tsMinimalLogDirGB = 0.1f; char tsLogDir[TSDB_FILENAME_LEN] = "/var/log/taos"; static SLogObj tsLogObj = { .fileNum = 1 }; diff --git a/src/util/src/tsched.c b/src/util/src/tsched.c index 39155bc0fd..cf7f5c10d4 100644 --- a/src/util/src/tsched.c +++ b/src/util/src/tsched.c @@ -192,12 +192,12 @@ void taosCleanUpScheduler(void *param) { pSched->stop = true; for (int i = 0; i < pSched->numOfThreads; ++i) { - if (pSched->qthread[i]) { + if (taosCheckPthreadValid(pSched->qthread[i])) { tsem_post(&pSched->fullSem); } } for (int i = 0; i < pSched->numOfThreads; ++i) { - if (pSched->qthread[i]) { + if (taosCheckPthreadValid(pSched->qthread[i])) { pthread_join(pSched->qthread[i], NULL); } } diff --git a/src/util/src/tskiplist.c b/src/util/src/tskiplist.c index 14029fbd81..303c2440bf 100644 --- a/src/util/src/tskiplist.c +++ b/src/util/src/tskiplist.c @@ -19,7 +19,7 @@ #include "tutil.h" #include "tcompare.h" -__attribute__ ((unused)) static FORCE_INLINE void recordNodeEachLevel(SSkipList *pSkipList, int32_t level) { // record link count in each level +UNUSED_FUNC static FORCE_INLINE void recordNodeEachLevel(SSkipList *pSkipList, int32_t level) { // record link count in each level #if SKIP_LIST_RECORD_PERFORMANCE for (int32_t i = 0; i < level; ++i) { pSkipList->state.nLevelNodeCnt[i]++; @@ -27,7 +27,7 @@ __attribute__ ((unused)) static FORCE_INLINE void recordNodeEachLevel(SSkipList #endif } -__attribute__ ((unused)) static FORCE_INLINE void removeNodeEachLevel(SSkipList *pSkipList, int32_t level) { +UNUSED_FUNC static FORCE_INLINE void removeNodeEachLevel(SSkipList *pSkipList, int32_t level) { #if SKIP_LIST_RECORD_PERFORMANCE for (int32_t i = 0; i < level; ++i) { pSkipList->state.nLevelNodeCnt[i]--; @@ -132,7 +132,7 @@ static bool initForwardBackwardPtr(SSkipList* pSkipList) { pSkipList->pTail = (SSkipListNode*) ((char*) pSkipList->pHead + SL_NODE_HEADER_SIZE(maxLevel)); pSkipList->pTail->level = pSkipList->maxLevel; - for(int32_t i = 0; i < maxLevel; ++i) { + for (uint32_t i = 0; i < maxLevel; ++i) { SL_GET_FORWARD_POINTER(pSkipList->pHead, i) = pSkipList->pTail; SL_GET_BACKWARD_POINTER(pSkipList->pTail, i) = pSkipList->pHead; } @@ -177,7 +177,7 @@ SSkipList *tSkipListCreate(uint8_t maxLevel, uint8_t keyType, uint8_t keyLen, ui } } - srand(time(NULL)); + srand((uint32_t)time(NULL)); #if SKIP_LIST_RECORD_PERFORMANCE pSkipList->state.nTotalMemSize += sizeof(SSkipList); diff --git a/src/util/src/ttimer.c b/src/util/src/ttimer.c index b2982d353f..0222a6d80a 100644 --- a/src/util/src/ttimer.c +++ b/src/util/src/ttimer.c @@ -445,7 +445,7 @@ bool taosTmrStopA(tmr_h* timerId) { bool taosTmrReset(TAOS_TMR_CALLBACK fp, int mseconds, void* param, void* handle, tmr_h* pTmrId) { tmr_ctrl_t* ctrl = (tmr_ctrl_t*)handle; if (ctrl == NULL || ctrl->label[0] == 0) { - return NULL; + return false; } uintptr_t id = (uintptr_t)*pTmrId; @@ -491,7 +491,7 @@ static void taosTmrModuleInit(void) { return; } - for (int i = 0; i < tsMaxTmrCtrl - 1; ++i) { + for (uint32_t i = 0; i < tsMaxTmrCtrl - 1; ++i) { tmr_ctrl_t* ctrl = tmrCtrls + i; ctrl->next = ctrl + 1; } diff --git a/src/util/src/tutil.c b/src/util/src/tutil.c index f4b6ae629d..6c4af437b2 100644 --- a/src/util/src/tutil.c +++ b/src/util/src/tutil.c @@ -273,7 +273,7 @@ char *strbetween(char *string, char *begin, char *end) { char *_begin = strstr(string, begin); if (_begin != NULL) { char *_end = strstr(_begin + strlen(begin), end); - int size = _end - _begin; + int size = (int)(_end - _begin); if (_end != NULL && size > 0) { result = (char *)calloc(1, size); memcpy(result, _begin + strlen(begin), size - +strlen(begin)); @@ -332,7 +332,7 @@ bool taosGetVersionNumber(char *versionStr, int *versionNubmer) { } int versionNumberPos[5] = {0}; - int len = strlen(versionStr); + int len = (int)strlen(versionStr); int dot = 0; for (int pos = 0; pos < len && dot < 4; ++pos) { if (versionStr[pos] == '.') { From 45ea0c5d8e24ef0e62e984249cffa38b9b36fbdc Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 4 Aug 2020 11:24:17 +0800 Subject: [PATCH 10/38] TD-1037 minor changes --- deps/MQTT-C/CMakeLists.txt | 8 ++++---- deps/cJson/CMakeLists.txt | 6 +++--- deps/lz4/CMakeLists.txt | 13 ++++++++----- src/tsdb/tests/CMakeLists.txt | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/deps/MQTT-C/CMakeLists.txt b/deps/MQTT-C/CMakeLists.txt index cb288a4193..ea5d4238d5 100644 --- a/deps/MQTT-C/CMakeLists.txt +++ b/deps/MQTT-C/CMakeLists.txt @@ -10,11 +10,11 @@ option(MQTT_C_TESTS "Build MQTT-C tests?" OFF) list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) # MQTT-C library -add_library(mqttc STATIC +ADD_LIBRARY(mqttc STATIC src/mqtt_pal.c src/mqtt.c ) -target_include_directories(mqttc PUBLIC include) +TARGET_INCLUDE_DIRECTORIES(mqttc PUBLIC include) target_link_libraries(mqttc PUBLIC $<$:ws2_32> ) @@ -30,7 +30,7 @@ endif() # Configure with mbed TLS support if(MQTT_C_MbedTLS_SUPPORT) find_package(MbedTLS REQUIRED) - target_include_directories(mqttc PUBLIC ${MBEDTLS_INCLUDE_DIRS}) + TARGET_INCLUDE_DIRECTORIES(mqttc PUBLIC ${MBEDTLS_INCLUDE_DIRS}) target_link_libraries(mqttc INTERFACE ${MBEDTLS_LIBRARY}) target_compile_definitions(mqttc PUBLIC MQTT_USE_MBEDTLS) endif() @@ -70,7 +70,7 @@ if(MQTT_C_TESTS) add_executable(tests tests.c) target_link_libraries(tests ${CMOCKA_LIBRARY} mqttc) - target_include_directories(tests PRIVATE ${CMOCKA_INCLUDE_DIR}) + TARGET_INCLUDE_DIRECTORIES(tests PRIVATE ${CMOCKA_INCLUDE_DIR}) endif() # Install includes and library diff --git a/deps/cJson/CMakeLists.txt b/deps/cJson/CMakeLists.txt index 43b31589b3..2fe1975065 100644 --- a/deps/cJson/CMakeLists.txt +++ b/deps/cJson/CMakeLists.txt @@ -1,4 +1,4 @@ -aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SOURCE_LIST) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src SOURCE_LIST) -add_library(cJson ${SOURCE_LIST}) -target_include_directories(cJson PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc) \ No newline at end of file +ADD_LIBRARY(cJson ${SOURCE_LIST}) +TARGET_INCLUDE_DIRECTORIES(cJson PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc) \ No newline at end of file diff --git a/deps/lz4/CMakeLists.txt b/deps/lz4/CMakeLists.txt index d371974121..c3762ffe73 100644 --- a/deps/lz4/CMakeLists.txt +++ b/deps/lz4/CMakeLists.txt @@ -1,6 +1,9 @@ -aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SOURCE_LIST) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src SOURCE_LIST) -add_library(lz4 ${SOURCE_LIST}) -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /WX-") -SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /WX-") -target_include_directories(lz4 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc) \ No newline at end of file +IF (TD_WINDOWS) + SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /WX-") + SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /WX-") +ENDIF() + +ADD_LIBRARY(lz4 ${SOURCE_LIST}) +TARGET_INCLUDE_DIRECTORIES(lz4 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc) \ No newline at end of file diff --git a/src/tsdb/tests/CMakeLists.txt b/src/tsdb/tests/CMakeLists.txt index b330109340..a3477aef95 100644 --- a/src/tsdb/tests/CMakeLists.txt +++ b/src/tsdb/tests/CMakeLists.txt @@ -1,4 +1,4 @@ -aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST) add_executable(tsdbTests ${SOURCE_LIST}) target_link_libraries(tsdbTests gtest gtest_main pthread common tsdb tutil trpc) From 2d4cd0fd449c0fb4e50a01e963ae229a05b95af7 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 4 Aug 2020 12:00:08 +0800 Subject: [PATCH 11/38] fix part of compile error on windows --- src/util/inc/tcoding.h | 10 +++++----- src/util/src/tkvstore.c | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/util/inc/tcoding.h b/src/util/inc/tcoding.h index 907c69bf01..9300094e35 100644 --- a/src/util/inc/tcoding.h +++ b/src/util/inc/tcoding.h @@ -196,14 +196,14 @@ static FORCE_INLINE void *taosDecodeFixedI64(void *buf, int64_t *value) { static FORCE_INLINE int taosEncodeVariantU16(void **buf, uint16_t value) { int i = 0; while (value >= ENCODE_LIMIT) { - if (buf != NULL) ((uint8_t *)(*buf))[i] = (value | ENCODE_LIMIT); + if (buf != NULL) ((uint8_t *)(*buf))[i] = (uint8_t)(value | ENCODE_LIMIT); value >>= 7; i++; ASSERT(i < 3); } if (buf != NULL) { - ((uint8_t *)(*buf))[i] = value; + ((uint8_t *)(*buf))[i] = (uint8_t)value; *buf = POINTER_SHIFT(*buf, i + 1); } @@ -292,14 +292,14 @@ static FORCE_INLINE void *taosDecodeVariantI32(void *buf, int32_t *value) { static FORCE_INLINE int taosEncodeVariantU64(void **buf, uint64_t value) { int i = 0; while (value >= ENCODE_LIMIT) { - if (buf != NULL) ((uint8_t *)(*buf))[i] = (value | ENCODE_LIMIT); + if (buf != NULL) ((uint8_t *)(*buf))[i] = (uint8_t)(value | ENCODE_LIMIT); value >>= 7; i++; ASSERT(i < 10); } if (buf != NULL) { - ((uint8_t *)(*buf))[i] = value; + ((uint8_t *)(*buf))[i] = (uint8_t)value; *buf = POINTER_SHIFT(*buf, i + 1); } @@ -346,7 +346,7 @@ static FORCE_INLINE int taosEncodeString(void **buf, char *value) { memcpy(*buf, value, size); *buf = POINTER_SHIFT(*buf, size); } - tlen += size; + tlen += (int)size; return tlen; } diff --git a/src/util/src/tkvstore.c b/src/util/src/tkvstore.c index edcf9d45f2..3090b7e30b 100644 --- a/src/util/src/tkvstore.c +++ b/src/util/src/tkvstore.c @@ -286,7 +286,7 @@ int tdDropKVStoreRecord(SKVStore *pStore, uint64_t uid) { return -1; } - pStore->info.magic = taosCalcChecksum(pStore->info.magic, (uint8_t *)buf, POINTER_DISTANCE(pBuf, buf)); + pStore->info.magic = taosCalcChecksum(pStore->info.magic, (uint8_t *)buf, (uint32_t)POINTER_DISTANCE(pBuf, buf)); pStore->info.size += POINTER_DISTANCE(pBuf, buf); pStore->info.nDels++; pStore->info.nRecords--; @@ -485,7 +485,7 @@ static void *tdDecodeKVRecord(void *buf, SKVRecord *pRecord) { static int tdRestoreKVStore(SKVStore *pStore) { char tbuf[128] = "\0"; void * buf = NULL; - int maxBufSize = 0; + int64_t maxBufSize = 0; SKVRecord rInfo = {0}; SHashMutableIterator *pIter = NULL; @@ -564,7 +564,7 @@ static int tdRestoreKVStore(SKVStore *pStore) { } if (pStore->iFunc) { - if ((*pStore->iFunc)(pStore->appH, buf, pRecord->size) < 0) { + if ((*pStore->iFunc)(pStore->appH, buf, (int)pRecord->size) < 0) { uError("failed to restore record uid %" PRIu64 " in kv store %s at offset %" PRId64 " size %" PRId64 " since %s", pRecord->uid, pStore->fname, pRecord->offset, pRecord->size, tstrerror(terrno)); From 6c777907c0f33f38f9b6140b8bb77d114dd75074 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 4 Aug 2020 13:10:58 +0800 Subject: [PATCH 12/38] more --- src/util/src/tcompression.c | 7 ++----- src/util/src/tkvstore.c | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/util/src/tcompression.c b/src/util/src/tcompression.c index 33828d93f0..f26a6d75d7 100644 --- a/src/util/src/tcompression.c +++ b/src/util/src/tcompression.c @@ -52,14 +52,11 @@ #include "tscompression.h" #include "taosdef.h" -const int TEST_NUMBER = 1; +static const int TEST_NUMBER = 1; #define is_bigendian() ((*(char *)&TEST_NUMBER) == 0) #define SIMPLE8B_MAX_INT64 ((uint64_t)2305843009213693951L) -bool safeInt64Add(int64_t a, int64_t b) { - if ((a > 0 && b > INT64_MAX - a) || (a < 0 && b < INT64_MIN - a)) return false; - return true; -} +#define safeInt64Add(a, b) (((a >= 0) && (b <= INT64_MAX - a)) || ((a < 0) && (b >= INT64_MIN - a))) /* * Compress Integer (Simple8B). diff --git a/src/util/src/tkvstore.c b/src/util/src/tkvstore.c index 3090b7e30b..1000b96a31 100644 --- a/src/util/src/tkvstore.c +++ b/src/util/src/tkvstore.c @@ -535,7 +535,7 @@ static int tdRestoreKVStore(SKVStore *pStore) { buf = malloc(maxBufSize); if (buf == NULL) { - uError("failed to allocate %d bytes in KV store %s", maxBufSize, pStore->fname); + uError("failed to allocate %" PRId64 " bytes in KV store %s", maxBufSize, pStore->fname); terrno = TAOS_SYSTEM_ERROR(errno); goto _err; } From d5ac976e95af532dc880419085e11caa11cacb18 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 4 Aug 2020 13:37:53 +0800 Subject: [PATCH 13/38] compression --- src/util/src/tcompression.c | 48 +++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/util/src/tcompression.c b/src/util/src/tcompression.c index f26a6d75d7..c20ba59ac9 100644 --- a/src/util/src/tcompression.c +++ b/src/util/src/tcompression.c @@ -57,6 +57,8 @@ static const int TEST_NUMBER = 1; #define SIMPLE8B_MAX_INT64 ((uint64_t)2305843009213693951L) #define safeInt64Add(a, b) (((a >= 0) && (b <= INT64_MAX - a)) || ((a < 0) && (b >= INT64_MIN - a))) +#define ZIGZAG_ENCODE(T, v) ((u##T)((v) >> (sizeof(T) * 8 - 1))) ^ (((u##T)(v)) << 1) // zigzag encode +#define ZIGZAG_DECODE(T, v) ((v) >> 1) ^ -((T)((v)&1)) // zigzag decode /* * Compress Integer (Simple8B). @@ -87,7 +89,7 @@ int tsCompressINTImp(const char *const input, const int nelements, char *const o break; default: perror("Wrong integer types.\n"); - exit(1); + return -1; } int byte_limit = nelements * word_length + 1; @@ -122,7 +124,7 @@ int tsCompressINTImp(const char *const input, const int nelements, char *const o int64_t diff = curr_value - prev_value_tmp; // Zigzag encode the value. - uint64_t zigzag_value = (diff >> (LONG_BYTES * BITS_PER_BYTE - 1)) ^ (diff << 1); + uint64_t zigzag_value = ZIGZAG_ENCODE(int64_t, diff); if (zigzag_value >= SIMPLE8B_MAX_INT64) goto _copy_and_exit; @@ -168,7 +170,7 @@ int tsCompressINTImp(const char *const input, const int nelements, char *const o break; } int64_t diff = curr_value - prev_value; - uint64_t zigzag_value = (diff >> (LONG_BYTES * BITS_PER_BYTE - 1)) ^ (diff << 1); + uint64_t zigzag_value = ZIGZAG_ENCODE(int64_t, diff); buffer |= ((zigzag_value & INT64MASK(bit)) << (bit * k + 4)); i++; prev_value = curr_value; @@ -208,7 +210,7 @@ int tsDecompressINTImp(const char *const input, const int nelements, char *const break; default: perror("Wrong integer types.\n"); - exit(1); + return -1; } // If not compressed. @@ -245,30 +247,30 @@ int tsDecompressINTImp(const char *const input, const int nelements, char *const } else { zigzag_value = ((w >> (4 + bit * i)) & INT64MASK(bit)); } - int64_t diff = (zigzag_value >> 1) ^ -(zigzag_value & 1); + int64_t diff = ZIGZAG_DECODE(int64_t, zigzag_value); int64_t curr_value = diff + prev_value; prev_value = curr_value; switch (type) { case TSDB_DATA_TYPE_BIGINT: - *((int64_t *)output + _pos) = curr_value; + *((int64_t *)output + _pos) = (int64_t)curr_value; _pos++; break; case TSDB_DATA_TYPE_INT: - *((int32_t *)output + _pos) = curr_value; + *((int32_t *)output + _pos) = (int32_t)curr_value; _pos++; break; case TSDB_DATA_TYPE_SMALLINT: - *((int16_t *)output + _pos) = curr_value; + *((int16_t *)output + _pos) = (int16_t)curr_value; _pos++; break; case TSDB_DATA_TYPE_TINYINT: - *((int8_t *)output + _pos) = curr_value; + *((int8_t *)output + _pos) = (int8_t)curr_value; _pos++; break; default: perror("Wrong integer types.\n"); - exit(1); + return -1; } count++; if (count == nelements) break; @@ -306,7 +308,7 @@ int tsCompressBoolImp(const char *const input, const int nelements, char *const output[pos] |= t; } else { perror("Wrong bool value.\n"); - exit(1); + return -1; } } @@ -362,7 +364,7 @@ int tsCompressBoolRLEImp(const char *const input, const int nelements, char *con output[_pos++] = (counter << 1) | INT8MASK(0); } else { perror("Wrong bool value!\n"); - exit(1); + return -1; } } @@ -414,7 +416,7 @@ int tsDecompressStringImp(const char *const input, int compressedSize, char *con char msg[128] = {0}; sprintf(msg, "decomp_size:%d, Error decompress in LZ4 algorithm!\n", decompressed_size); perror(msg); - exit(EXIT_FAILURE); + return -1; } return decompressed_size; @@ -424,7 +426,7 @@ int tsDecompressStringImp(const char *const input, int compressedSize, char *con return compressedSize - 1; } else { perror("Wrong compressed string indicator!\n"); - exit(EXIT_FAILURE); + return -1; } } @@ -451,21 +453,21 @@ int tsCompressTimestampImp(const char *const input, const int nelements, char *c if (!safeInt64Add(curr_delta, -prev_delta)) goto _exit_over; int64_t delta_of_delta = curr_delta - prev_delta; // zigzag encode the value. - uint64_t zigzag_value = (delta_of_delta >> (LONG_BYTES * BITS_PER_BYTE - 1)) ^ (delta_of_delta << 1); + uint64_t zigzag_value = ZIGZAG_ENCODE(int64_t, delta_of_delta); if (i % 2 == 0) { flags = 0; dd1 = zigzag_value; if (dd1 == 0) { flag1 = 0; } else { - flag1 = LONG_BYTES - BUILDIN_CLZL(dd1) / BITS_PER_BYTE; + flag1 = (uint8_t)(LONG_BYTES - BUILDIN_CLZL(dd1) / BITS_PER_BYTE); } } else { dd2 = zigzag_value; if (dd2 == 0) { flag2 = 0; } else { - flag2 = LONG_BYTES - BUILDIN_CLZL(dd2) / BITS_PER_BYTE; + flag2 = (uint8_t)(LONG_BYTES - BUILDIN_CLZL(dd2) / BITS_PER_BYTE); } flags = flag1 | (flag2 << 4); // Encode the flag. @@ -552,7 +554,7 @@ int tsDecompressTimestampImp(const char *const input, const int nelements, char } else { memcpy(&dd1, input + ipos, nbytes); } - delta_of_delta = (dd1 >> 1) ^ -(dd1 & 1); + delta_of_delta = ZIGZAG_DECODE(int64_t, dd1); } ipos += nbytes; if (opos == 0) { @@ -578,7 +580,7 @@ int tsDecompressTimestampImp(const char *const input, const int nelements, char memcpy(&dd2, input + ipos, nbytes); } // zigzag_decoding - delta_of_delta = (dd2 >> 1) ^ -(dd2 & 1); + delta_of_delta = ZIGZAG_DECODE(int64_t, dd2); } ipos += nbytes; prev_delta = delta_of_delta + prev_delta; @@ -640,12 +642,12 @@ int tsCompressDoubleImp(const char *const input, const int nelements, char *cons uint8_t flag; if (trailing_zeros > leading_zeros) { - nbytes = LONG_BYTES - trailing_zeros / BITS_PER_BYTE; + nbytes = (uint8_t)(LONG_BYTES - trailing_zeros / BITS_PER_BYTE); if (nbytes > 0) nbytes--; flag = ((uint8_t)1 << 3) | nbytes; } else { - nbytes = LONG_BYTES - leading_zeros / BITS_PER_BYTE; + nbytes = (uint8_t)(LONG_BYTES - leading_zeros / BITS_PER_BYTE); if (nbytes > 0) nbytes--; flag = nbytes; } @@ -787,12 +789,12 @@ int tsCompressFloatImp(const char *const input, const int nelements, char *const uint8_t flag; if (trailing_zeros > leading_zeros) { - nbytes = FLOAT_BYTES - trailing_zeros / BITS_PER_BYTE; + nbytes = (uint8_t)(FLOAT_BYTES - trailing_zeros / BITS_PER_BYTE); if (nbytes > 0) nbytes--; flag = ((uint8_t)1 << 3) | nbytes; } else { - nbytes = FLOAT_BYTES - leading_zeros / BITS_PER_BYTE; + nbytes = (uint8_t)(FLOAT_BYTES - leading_zeros / BITS_PER_BYTE); if (nbytes > 0) nbytes--; flag = nbytes; } From 3c6ecff50669baa0f474e4961ebfe5ea6d33813e Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 4 Aug 2020 13:45:58 +0800 Subject: [PATCH 14/38] TD-1037 minor changes --- src/util/src/tcrc32c.c | 6 +++--- src/util/src/tkvstore.c | 4 ++-- src/util/src/tmempool.c | 6 +----- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/util/src/tcrc32c.c b/src/util/src/tcrc32c.c index 3ef10b1b0d..502116f9c2 100644 --- a/src/util/src/tcrc32c.c +++ b/src/util/src/tcrc32c.c @@ -1353,12 +1353,12 @@ uint32_t crc32c_hw(uint32_t crc, crc_stream buf, size_t len) { #endif // #ifndef _TD_ARM_ void taosResolveCRC() { -#ifndef _TD_ARM_ +#if defined _TD_ARM_ || defined WINDOWS + crc32c = crc32c_sf; +#else int sse42; SSE42(sse42); crc32c = sse42 ? crc32c_hw : crc32c_sf; -#else - crc32c = crc32c_sf; #endif /* return sse42 ? crc32c_hw(crci, bytes, len) : crc32c_sf(crci, bytes, len); */ diff --git a/src/util/src/tkvstore.c b/src/util/src/tkvstore.c index 1000b96a31..bd0d71f963 100644 --- a/src/util/src/tkvstore.c +++ b/src/util/src/tkvstore.c @@ -522,7 +522,7 @@ static int tdRestoreKVStore(SKVStore *pStore) { maxBufSize = MAX(maxBufSize, rInfo.size); - if (lseek(pStore->fd, rInfo.size, SEEK_CUR) < 0) { + if (lseek(pStore->fd, (off_t)rInfo.size, SEEK_CUR) < 0) { uError("failed to lseek file %s since %s", pStore->fname, strerror(errno)); terrno = TAOS_SYSTEM_ERROR(errno); goto _err; @@ -550,7 +550,7 @@ static int tdRestoreKVStore(SKVStore *pStore) { while (taosHashIterNext(pIter)) { SKVRecord *pRecord = taosHashIterGet(pIter); - if (lseek(pStore->fd, pRecord->offset + sizeof(SKVRecord), SEEK_SET) < 0) { + if (lseek(pStore->fd, (off_t)(pRecord->offset + sizeof(SKVRecord)), SEEK_SET) < 0) { uError("failed to lseek file %s since %s, offset %" PRId64, pStore->fname, strerror(errno), pRecord->offset); terrno = TAOS_SYSTEM_ERROR(errno); goto _err; diff --git a/src/util/src/tmempool.c b/src/util/src/tmempool.c index 4a899ebb48..a3d1035500 100644 --- a/src/util/src/tmempool.c +++ b/src/util/src/tmempool.c @@ -13,11 +13,7 @@ * along with this program. If not, see . */ -#include -#include -#include -#include - +#include "os.h" #include "tulog.h" #include "tmempool.h" #include "tutil.h" From 952fb36ca4c3a33667f06b903ebfb37d64059917 Mon Sep 17 00:00:00 2001 From: Xiaowei Su <46439638+Shawshank-Smile@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:58:50 +0800 Subject: [PATCH 15/38] Update connector-ch.md modify some Restful error --- documentation20/webdocs/markdowndocs/connector-ch.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation20/webdocs/markdowndocs/connector-ch.md b/documentation20/webdocs/markdowndocs/connector-ch.md index 95b4af5c7c..511bf5a9a7 100644 --- a/documentation20/webdocs/markdowndocs/connector-ch.md +++ b/documentation20/webdocs/markdowndocs/connector-ch.md @@ -846,7 +846,7 @@ curl http://192.168.0.1:6041/rest/login/root/taosdata - 在demo库里查询表d1001的所有记录: ``` -curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'select * from demo.d1001' 192.168.0.1:6041/rest/sql` +curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'select * from demo.d1001' 192.168.0.1:6041/rest/sql ``` 返回值: @@ -865,7 +865,7 @@ curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'select * from demo.d1001 - 创建库demo: ``` -curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'create database demo' 192.168.0.1:6041/rest/sql` +curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'create database demo' 192.168.0.1:6041/rest/sql ``` 返回值: From 73e0e84bbff0e1f9a659e16d8935a7dde06189f1 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 4 Aug 2020 14:48:38 +0800 Subject: [PATCH 16/38] TD-1037 compilation of common module --- src/common/CMakeLists.txt | 6 ++++++ src/common/src/tdataformat.c | 8 ++++---- src/common/src/tglobal.c | 26 +++++++++++++------------- src/common/src/tname.c | 8 ++++---- src/common/src/ttypes.c | 4 ++-- src/common/src/tvariant.c | 20 ++++++++++---------- src/os/inc/osFile.h | 4 ++++ src/os/inc/osWindows.h | 5 ++++- src/os/src/windows/w64File.c | 5 +++++ src/os/src/windows/w64String.c | 4 ++-- src/util/inc/tstoken.h | 2 +- src/util/src/tkvstore.c | 2 +- 12 files changed, 56 insertions(+), 38 deletions(-) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index e856481a9a..05114cc324 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -1,6 +1,12 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) +IF (TD_WINDOWS) + INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/pthread) + INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/iconv) + INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/regex) +ENDIF () + INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/inc) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/os/inc) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/util/inc) diff --git a/src/common/src/tdataformat.c b/src/common/src/tdataformat.c index a185a9de7b..0be0216174 100644 --- a/src/common/src/tdataformat.c +++ b/src/common/src/tdataformat.c @@ -565,7 +565,7 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) { nrow = malloc(kvRowLen(row) + sizeof(SColIdx) + diff); if (nrow == NULL) return -1; - kvRowSetLen(nrow, kvRowLen(row) + sizeof(SColIdx) + diff); + kvRowSetLen(nrow, kvRowLen(row) + (int16_t)sizeof(SColIdx) + diff); kvRowSetNCols(nrow, kvRowNCols(row) + 1); if (ptr == NULL) { @@ -573,10 +573,10 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) { memcpy(kvRowValues(nrow), kvRowValues(row), POINTER_DISTANCE(kvRowEnd(row), kvRowValues(row))); int colIdx = kvRowNCols(nrow) - 1; kvRowColIdxAt(nrow, colIdx)->colId = colId; - kvRowColIdxAt(nrow, colIdx)->offset = POINTER_DISTANCE(kvRowEnd(row), kvRowValues(row)); + kvRowColIdxAt(nrow, colIdx)->offset = (int16_t)(POINTER_DISTANCE(kvRowEnd(row), kvRowValues(row))); memcpy(kvRowColVal(nrow, kvRowColIdxAt(nrow, colIdx)), value, diff); } else { - int16_t tlen = POINTER_DISTANCE(ptr, kvRowColIdx(row)); + int16_t tlen = (int16_t)(POINTER_DISTANCE(ptr, kvRowColIdx(row))); if (tlen > 0) { memcpy(kvRowColIdx(nrow), kvRowColIdx(row), tlen); memcpy(kvRowValues(nrow), kvRowValues(row), ((SColIdx *)ptr)->offset); @@ -617,7 +617,7 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) { kvRowSetNCols(nrow, kvRowNCols(row)); // Copy part ahead - nlen = POINTER_DISTANCE(ptr, kvRowColIdx(row)); + nlen = (int16_t)(POINTER_DISTANCE(ptr, kvRowColIdx(row))); ASSERT(nlen % sizeof(SColIdx) == 0); if (nlen > 0) { ASSERT(((SColIdx *)ptr)->offset > 0); diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index c3dc078428..94eb0586e2 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -92,7 +92,7 @@ int32_t tsStreamCompStartDelay = 10000; int32_t tsStreamCompRetryDelay = 10; // The delayed computing ration. 10% of the whole computing time window by default. -float tsStreamComputDelayRatio = 0.1; +float tsStreamComputDelayRatio = 0.1f; int32_t tsProjectExecInterval = 10000; // every 10sec, the projection will be executed once int64_t tsMaxRetentWindow = 24 * 3600L; // maximum time window tolerance @@ -173,8 +173,8 @@ float tsTotalTmpDirGB = 0; float tsTotalDataDirGB = 0; float tsAvailTmpDirectorySpace = 0; float tsAvailDataDirGB = 0; -float tsReservedTmpDirectorySpace = 0.1; -float tsMinimalDataDirGB = 0.5; +float tsReservedTmpDirectorySpace = 0.1f; +float tsMinimalDataDirGB = 0.5f; int32_t tsTotalMemoryMB = 0; int32_t tsVersion = 0; @@ -294,7 +294,7 @@ bool taosCfgDynamicOptions(char *msg) { return false; } -static void doInitGlobalConfig() { +static void doInitGlobalConfig(void) { SGlobalCfg cfg = {0}; // ip address @@ -405,8 +405,8 @@ static void doInitGlobalConfig() { cfg.ptr = &tsRatioOfQueryThreads; cfg.valType = TAOS_CFG_VTYPE_FLOAT; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG; - cfg.minValue = 0.1; - cfg.maxValue = 0.9; + cfg.minValue = 0.1f; + cfg.maxValue = 0.9f; cfg.ptrLength = 0; cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); @@ -607,8 +607,8 @@ static void doInitGlobalConfig() { cfg.ptr = &tsStreamComputDelayRatio; cfg.valType = TAOS_CFG_VTYPE_FLOAT; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 0.1; - cfg.maxValue = 0.9; + cfg.minValue = 0.1f; + cfg.maxValue = 0.9f; cfg.ptrLength = 0; cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); @@ -870,7 +870,7 @@ static void doInitGlobalConfig() { cfg.ptr = &tsMinimalLogDirGB; cfg.valType = TAOS_CFG_VTYPE_FLOAT; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 0.001; + cfg.minValue = 0.001f; cfg.maxValue = 10000000; cfg.ptrLength = 0; cfg.unitType = TAOS_CFG_UTYPE_GB; @@ -880,7 +880,7 @@ static void doInitGlobalConfig() { cfg.ptr = &tsReservedTmpDirectorySpace; cfg.valType = TAOS_CFG_VTYPE_FLOAT; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 0.001; + cfg.minValue = 0.001f; cfg.maxValue = 10000000; cfg.ptrLength = 0; cfg.unitType = TAOS_CFG_UTYPE_GB; @@ -890,7 +890,7 @@ static void doInitGlobalConfig() { cfg.ptr = &tsMinimalDataDirGB; cfg.valType = TAOS_CFG_VTYPE_FLOAT; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 0.001; + cfg.minValue = 0.001f; cfg.maxValue = 10000000; cfg.ptrLength = 0; cfg.unitType = TAOS_CFG_UTYPE_GB; @@ -1256,7 +1256,7 @@ static void doInitGlobalConfig() { cfg.valType = TAOS_CFG_VTYPE_INT32; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT; cfg.minValue = 1; - cfg.maxValue = 0x7fffffff; + cfg.maxValue = 65536; cfg.ptrLength = 0; cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); @@ -1338,7 +1338,7 @@ int taosGetFqdnPortFromEp(const char *ep, char *fqdn, uint16_t *port) { */ bool taosCheckBalanceCfgOptions(const char *option, int32_t *vnodeId, int32_t *dnodeId) { - int len = strlen(option); + int len = (int)strlen(option); if (strncasecmp(option, "vnode:", 6) != 0) { return false; } diff --git a/src/common/src/tname.c b/src/common/src/tname.c index 15ec68fc66..d80ddb0ee2 100644 --- a/src/common/src/tname.c +++ b/src/common/src/tname.c @@ -6,7 +6,7 @@ #include "ttokendef.h" // todo refactor -__attribute__((unused)) static FORCE_INLINE const char* skipSegments(const char* input, char delim, int32_t num) { +UNUSED_FUNC static FORCE_INLINE const char* skipSegments(const char* input, char delim, int32_t num) { for (int32_t i = 0; i < num; ++i) { while (*input != 0 && *input++ != delim) { }; @@ -14,7 +14,7 @@ __attribute__((unused)) static FORCE_INLINE const char* skipSegments(const char* return input; } -__attribute__((unused)) static FORCE_INLINE size_t copy(char* dst, const char* src, char delimiter) { +UNUSED_FUNC static FORCE_INLINE size_t copy(char* dst, const char* src, char delimiter) { size_t len = 0; while (*src != delimiter && *src != 0) { *dst++ = *src++; @@ -120,11 +120,11 @@ void extractTableNameFromToken(SSQLToken* pToken, SSQLToken* pTable) { char* r = strnchr(pToken->z, sep, pToken->n, false); if (r != NULL) { // record the table name token - pTable->n = r - pToken->z; + pTable->n = (uint32_t)(r - pToken->z); pTable->z = pToken->z; r += 1; - pToken->n -= (r - pToken->z); + pToken->n -= (uint32_t)(r - pToken->z); pToken->z = r; } } diff --git a/src/common/src/ttypes.c b/src/common/src/ttypes.c index 44b1d9fc38..3910d80ecf 100644 --- a/src/common/src/ttypes.c +++ b/src/common/src/ttypes.c @@ -204,8 +204,8 @@ static void getStatics_i64(const TSKEY *primaryKey, const void *pData, int32_t n static void getStatics_f(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max, int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int16_t *numOfNull) { float *data = (float *)pData; - float fmin = DBL_MAX; - float fmax = -DBL_MAX; + float fmin = FLT_MAX; + float fmax = -FLT_MAX; double dsum = 0; *minIndex = 0; *maxIndex = 0; diff --git a/src/common/src/tvariant.c b/src/common/src/tvariant.c index 2906b3f0ac..5460d21252 100644 --- a/src/common/src/tvariant.c +++ b/src/common/src/tvariant.c @@ -101,19 +101,19 @@ void tVariantCreateFromBinary(tVariant *pVar, const char *pz, size_t len, uint32 break; } case TSDB_DATA_TYPE_NCHAR: { // here we get the nchar length from raw binary bits length - int32_t lenInwchar = len / TSDB_NCHAR_SIZE; + size_t lenInwchar = len / TSDB_NCHAR_SIZE; pVar->wpz = calloc(1, (lenInwchar + 1) * TSDB_NCHAR_SIZE); wcsncpy(pVar->wpz, (wchar_t *)pz, lenInwchar); pVar->wpz[lenInwchar] = 0; - pVar->nLen = len; + pVar->nLen = (int32_t)len; break; } case TSDB_DATA_TYPE_BINARY: { // todo refactor, extract a method pVar->pz = calloc(len, sizeof(char)); memcpy(pVar->pz, pz, len); - pVar->nLen = len; + pVar->nLen = (int32_t)len; break; } @@ -185,7 +185,7 @@ int32_t tVariantToString(tVariant *pVar, char *dst) { case TSDB_DATA_TYPE_NCHAR: { dst[0] = '\''; taosUcs4ToMbs(pVar->wpz, (twcslen(pVar->wpz) + 1) * TSDB_NCHAR_SIZE, dst + 1); - int32_t len = strlen(dst); + int32_t len = (int32_t)strlen(dst); dst[len] = '\''; dst[len + 1] = 0; return len + 1; @@ -361,11 +361,11 @@ static int32_t toBinary(tVariant *pVariant, char **pDest, int32_t *pDestSize) { pBuf = realloc(pBuf, newSize + 1); } - taosUcs4ToMbs(pVariant->wpz, newSize, pBuf); + taosUcs4ToMbs(pVariant->wpz, (int32_t)newSize, pBuf); free(pVariant->wpz); pBuf[newSize] = 0; } else { - taosUcs4ToMbs(pVariant->wpz, newSize, *pDest); + taosUcs4ToMbs(pVariant->wpz, (int32_t)newSize, *pDest); } } else { @@ -384,7 +384,7 @@ static int32_t toBinary(tVariant *pVariant, char **pDest, int32_t *pDestSize) { *pDest = pBuf; } - *pDestSize = strlen(*pDest); + *pDestSize = (int32_t)strlen(*pDest); return 0; } @@ -428,7 +428,7 @@ static int32_t toNchar(tVariant *pVariant, char **pDest, int32_t *pDestSize) { taosMbsToUcs4(pDst, nLen, *pDest, (nLen + 1) * TSDB_NCHAR_SIZE, &output); if (pDestSize != NULL) { - *pDestSize = output; + *pDestSize = (int32_t)output; } } @@ -682,7 +682,7 @@ int32_t tVariantDump(tVariant *pVariant, char *payload, int16_t type, bool inclu float fv = (float)pVariant->i64Key; SET_FLOAT_VAL_ALIGN(payload, &fv); #else - *((float *)payload) = pVariant->i64Key; + *((float *)payload) = (float)pVariant->i64Key; #endif } else if (pVariant->nType == TSDB_DATA_TYPE_DOUBLE || pVariant->nType == TSDB_DATA_TYPE_FLOAT) { #ifdef _TD_ARM_32_ @@ -735,7 +735,7 @@ int32_t tVariantDump(tVariant *pVariant, char *payload, int16_t type, bool inclu double dv = (double)(pVariant->i64Key); SET_DOUBLE_VAL_ALIGN(payload, &dv); #else - *((double *)payload) = pVariant->i64Key; + *((double *)payload) = (double)pVariant->i64Key; #endif } else if (pVariant->nType == TSDB_DATA_TYPE_DOUBLE || pVariant->nType == TSDB_DATA_TYPE_FLOAT) { #ifdef _TD_ARM_32_ diff --git a/src/os/inc/osFile.h b/src/os/inc/osFile.h index 3bd32734e6..e99c64c2e0 100644 --- a/src/os/inc/osFile.h +++ b/src/os/inc/osFile.h @@ -68,6 +68,10 @@ void taosGetTmpfilePath(const char *fileNamePrefix, char *dstPath); #define S_ISLNK(m) 0 #endif +#ifndef TAOS_OS_FUNC_FILE_FTRUNCATE + #define taosFtruncate ftruncate +#endif + #ifdef __cplusplus } #endif diff --git a/src/os/inc/osWindows.h b/src/os/inc/osWindows.h index fcb89c072d..63d5128783 100644 --- a/src/os/inc/osWindows.h +++ b/src/os/inc/osWindows.h @@ -67,6 +67,8 @@ extern "C" { #define taosFSendFile(outfile, infile, offset, count) taosFSendFileImp(outfile, infile, offset, size) #define taosTSendFile(dfd, sfd, offset, size) taosTSendFileImp(dfd, sfd, offset, size) #define TAOS_OS_FUNC_FILE_GETTMPFILEPATH +#define TAOS_OS_FUNC_FILE_FTRUNCATE + extern int taosFtruncate(int fd, int64_t length); #define TAOS_OS_FUNC_MATH #define SWAP(a, b, c) \ @@ -90,6 +92,7 @@ extern "C" { #define taosCloseSocket(fd) closesocket(fd) #define TAOS_OS_FUNC_STRING_WCHAR + int twcslen(const wchar_t *wcs); #define TAOS_OS_FUNC_STRING_GETLINE #define TAOS_OS_FUNC_STRING_STR2INT64 #ifdef _TD_GO_DLL_ @@ -100,7 +103,7 @@ extern "C" { #endif #define TAOS_OS_FUNC_STRING_STRDUP #define taosStrdupImp(str) _strdup(str) - #define taosStrndupImp(str, size) _strndup(str, size) + #define taosStrndupImp(str, size) _strndup(str, size) #define TAOS_OS_FUNC_SYSINFO diff --git a/src/os/src/windows/w64File.c b/src/os/src/windows/w64File.c index d75549b377..5549c078a5 100644 --- a/src/os/src/windows/w64File.c +++ b/src/os/src/windows/w64File.c @@ -78,4 +78,9 @@ int taosFSendFileImp(FILE* out_file, FILE* in_file, int64_t* offset, int32_t cou ssize_t taosTSendFileImp(int dfd, int sfd, off_t *offset, size_t size) { uError("taosTSendFileImp no implemented yet"); return 0; +} + +int taosFtruncate(int fd, int64_t length) { + uError("taosFtruncate no implemented yet"); + return 0; } \ No newline at end of file diff --git a/src/os/src/windows/w64String.c b/src/os/src/windows/w64String.c index f35b2ca716..e3ac7d8832 100644 --- a/src/os/src/windows/w64String.c +++ b/src/os/src/windows/w64String.c @@ -78,13 +78,13 @@ char *strndup(const char *s, size_t n) { return r; } -size_t twcslen(const wchar_t *wcs) { +int twcslen(const wchar_t *wcs) { int *wstr = (int *)wcs; if (NULL == wstr) { return 0; } - size_t n = 0; + int n = 0; while (1) { if (0 == *wstr++) { break; diff --git a/src/util/inc/tstoken.h b/src/util/inc/tstoken.h index 7b0e498d76..258e62cf8a 100644 --- a/src/util/inc/tstoken.h +++ b/src/util/inc/tstoken.h @@ -82,7 +82,7 @@ static FORCE_INLINE int32_t isValidNumber(const SSQLToken* pToken) { const char* z = pToken->z; int32_t type = TK_ILLEGAL; - int32_t i = 0; + uint32_t i = 0; for(; i < pToken->n; ++i) { switch (z[i]) { case '+': diff --git a/src/util/src/tkvstore.c b/src/util/src/tkvstore.c index bd0d71f963..a664ce0e3b 100644 --- a/src/util/src/tkvstore.c +++ b/src/util/src/tkvstore.c @@ -114,7 +114,7 @@ SKVStore *tdOpenKVStore(char *fname, iterFunc iFunc, afterFunc aFunc, void *appH if (tdLoadKVStoreHeader(pStore->sfd, pStore->fsnap, &info) < 0) { if (terrno != TSDB_CODE_COM_FILE_CORRUPTED) goto _err; } else { - if (ftruncate(pStore->fd, info.size) < 0) { + if (taosFtruncate(pStore->fd, info.size) < 0) { uError("failed to truncate %s to %" PRId64 " size since %s", pStore->fname, info.size, strerror(errno)); terrno = TAOS_SYSTEM_ERROR(errno); goto _err; From a9899065bac065e883d63d44ee664d88d8d0b7ef Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 4 Aug 2020 16:05:41 +0800 Subject: [PATCH 17/38] TD-1038 compile for windows client --- src/os/inc/osSemphone.h | 1 + src/os/inc/osWindows.h | 3 +++ src/os/src/detail/osSemphone.c | 1 + src/rpc/src/rpcCache.c | 4 ++-- src/rpc/src/rpcMain.c | 8 ++++---- src/rpc/src/rpcTcp.c | 4 ++-- src/rpc/src/rpcUdp.c | 4 +++- 7 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/os/inc/osSemphone.h b/src/os/inc/osSemphone.h index 300f1e8ef1..c4fc98988a 100644 --- a/src/os/inc/osSemphone.h +++ b/src/os/inc/osSemphone.h @@ -31,6 +31,7 @@ extern "C" { // TAOS_OS_FUNC_SEMPHONE_PTHREAD bool taosCheckPthreadValid(pthread_t thread); int64_t taosGetPthreadId(); +void taosResetPthread(pthread_t *thread); #ifdef __cplusplus } diff --git a/src/os/inc/osWindows.h b/src/os/inc/osWindows.h index 63d5128783..1118b3c64b 100644 --- a/src/os/inc/osWindows.h +++ b/src/os/inc/osWindows.h @@ -160,6 +160,9 @@ char * strndup(const char *s, size_t n); #define TCP_KEEPCNT 0x1234 #define TCP_KEEPIDLE 0x1234 #define TCP_KEEPINTVL 0x1234 +#define SHUT_RDWR SD_BOTH +#define SHUT_RD SD_RECEIVE +#define SHUT_WR SD_SEND #define LOCK_EX 1 #define LOCK_NB 2 diff --git a/src/os/src/detail/osSemphone.c b/src/os/src/detail/osSemphone.c index 82b916b4d7..1f1ef268c6 100644 --- a/src/os/src/detail/osSemphone.c +++ b/src/os/src/detail/osSemphone.c @@ -20,5 +20,6 @@ bool taosCheckPthreadValid(pthread_t thread) { return thread != 0; } int64_t taosGetPthreadId() { return (int64_t)pthread_self(); } +void taosResetPthread(pthread_t *thread) { *thread = 0; } #endif \ No newline at end of file diff --git a/src/rpc/src/rpcCache.c b/src/rpc/src/rpcCache.c index 3f76b202c9..751f03e52a 100644 --- a/src/rpc/src/rpcCache.c +++ b/src/rpc/src/rpcCache.c @@ -82,7 +82,7 @@ void *rpcOpenConnCache(int maxSessions, void (*cleanFp)(void *), void *tmrCtrl, pCache->cleanFp = cleanFp; pCache->tmrCtrl = tmrCtrl; pCache->lockedBy = calloc(sizeof(int64_t), maxSessions); - taosTmrReset(rpcCleanConnCache, pCache->keepTimer * 2, pCache, pCache->tmrCtrl, &pCache->pTimer); + taosTmrReset(rpcCleanConnCache, (int32_t)(pCache->keepTimer * 2), pCache, pCache->tmrCtrl, &pCache->pTimer); pthread_mutex_init(&pCache->mutex, NULL); @@ -226,7 +226,7 @@ static void rpcCleanConnCache(void *handle, void *tmrId) { } // tTrace("timer, total connections in cache:%d", pCache->total); - taosTmrReset(rpcCleanConnCache, pCache->keepTimer * 2, pCache, pCache->tmrCtrl, &pCache->pTimer); + taosTmrReset(rpcCleanConnCache, (int32_t)(pCache->keepTimer * 2), pCache, pCache->tmrCtrl, &pCache->pTimer); } static void rpcRemoveExpiredNodes(SConnCache *pCache, SConnHash *pNode, int hash, uint64_t time) { diff --git a/src/rpc/src/rpcMain.c b/src/rpc/src/rpcMain.c index 01c753ec5b..29afe8d2ab 100644 --- a/src/rpc/src/rpcMain.c +++ b/src/rpc/src/rpcMain.c @@ -33,7 +33,7 @@ #include "rpcHead.h" #define RPC_MSG_OVERHEAD (sizeof(SRpcReqContext) + sizeof(SRpcHead) + sizeof(SRpcDigest)) -#define rpcHeadFromCont(cont) ((SRpcHead *) (cont - sizeof(SRpcHead))) +#define rpcHeadFromCont(cont) ((SRpcHead *) ((char*)cont - sizeof(SRpcHead))) #define rpcContFromHead(msg) (msg + sizeof(SRpcHead)) #define rpcMsgLenFromCont(contLen) (contLen + sizeof(SRpcHead)) #define rpcContLenFromMsg(msgLen) (msgLen - sizeof(SRpcHead)) @@ -359,7 +359,7 @@ void rpcSendRequest(void *shandle, const SRpcEpSet *pEpSet, SRpcMsg *pMsg) { SRpcReqContext *pContext; int contLen = rpcCompressRpcMsg(pMsg->pCont, pMsg->contLen); - pContext = (SRpcReqContext *) (pMsg->pCont-sizeof(SRpcHead)-sizeof(SRpcReqContext)); + pContext = (SRpcReqContext *) ((char*)pMsg->pCont-sizeof(SRpcHead)-sizeof(SRpcReqContext)); pContext->ahandle = pMsg->ahandle; pContext->signature = pContext; pContext->pRpc = (SRpcInfo *)shandle; @@ -492,7 +492,7 @@ int rpcGetConnInfo(void *thandle, SRpcConnInfo *pInfo) { void rpcSendRecv(void *shandle, SRpcEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRsp) { SRpcReqContext *pContext; - pContext = (SRpcReqContext *) (pMsg->pCont-sizeof(SRpcHead)-sizeof(SRpcReqContext)); + pContext = (SRpcReqContext *) ((char*)pMsg->pCont-sizeof(SRpcHead)-sizeof(SRpcReqContext)); memset(pRsp, 0, sizeof(SRpcMsg)); @@ -654,7 +654,7 @@ static SRpcConn *rpcAllocateClientConn(SRpcInfo *pRpc) { pConn->pRpc = pRpc; pConn->sid = sid; - pConn->tranId = (uint16_t)(random() & 0xFFFF); + pConn->tranId = (uint16_t)(taosRand() & 0xFFFF); pConn->ownId = htonl(pConn->sid); pConn->linkUid = (uint32_t)((int64_t)pConn + (int64_t)getpid() + (int64_t)pConn->tranId); pConn->spi = pRpc->spi; diff --git a/src/rpc/src/rpcTcp.c b/src/rpc/src/rpcTcp.c index 7fa05af9b0..c69456b8e2 100644 --- a/src/rpc/src/rpcTcp.c +++ b/src/rpc/src/rpcTcp.c @@ -81,7 +81,7 @@ void *taosInitTcpServer(uint32_t ip, uint16_t port, char *label, int numOfThread } pServerObj->fd = -1; - pServerObj->thread = 0; + taosResetPthread(&pServerObj->thread); pServerObj->ip = ip; pServerObj->port = port; tstrncpy(pServerObj->label, label, sizeof(pServerObj->label)); @@ -104,7 +104,7 @@ void *taosInitTcpServer(uint32_t ip, uint16_t port, char *label, int numOfThread pThreadObj = pServerObj->pThreadObj; for (int i = 0; i < numOfThreads; ++i) { pThreadObj->pollFd = -1; - pThreadObj->thread = 0; + taosResetPthread(&pThreadObj->thread); pThreadObj->processData = fp; tstrncpy(pThreadObj->label, label, sizeof(pThreadObj->label)); pThreadObj->shandle = shandle; diff --git a/src/rpc/src/rpcUdp.c b/src/rpc/src/rpcUdp.c index f75375e2fe..7e59210cae 100644 --- a/src/rpc/src/rpcUdp.c +++ b/src/rpc/src/rpcUdp.c @@ -144,7 +144,9 @@ void taosStopUdpConnection(void *handle) { for (int i = 0; i < pSet->threads; ++i) { pConn = pSet->udpConn + i; - if (pConn->thread) pthread_join(pConn->thread, NULL); + if (taosCheckPthreadValid(pConn->thread)) { + pthread_join(pConn->thread, NULL); + } taosTFree(pConn->buffer); // tTrace("%s UDP thread is closed, index:%d", pConn->label, i); } From 534e3bb3968f3ad2f04dcef0ac473df3e844a69c Mon Sep 17 00:00:00 2001 From: Hui Li Date: Tue, 4 Aug 2020 18:23:41 +0800 Subject: [PATCH 18/38] [fix coverity] --- src/kit/taosdump/taosdump.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/kit/taosdump/taosdump.c b/src/kit/taosdump/taosdump.c index 993352dc21..8a05c893e8 100644 --- a/src/kit/taosdump/taosdump.c +++ b/src/kit/taosdump/taosdump.c @@ -275,7 +275,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { fprintf(stderr, "Invalid path %s\n", arg); return -1; } - strcpy(configDir, full_path.we_wordv[0]); + tstrncpy(configDir, full_path.we_wordv[0], TSDB_FILENAME_LEN); wordfree(&full_path); break; case 'e': @@ -597,7 +597,7 @@ int32_t taosSaveTableOfMetricToTempFile(TAOS *taosCon, char* metric, struct argu numOfThread++; } - memset(tableRecord.name, 0, sizeof(STableRecord)); + memset(&tableRecord, 0, sizeof(STableRecord)); tstrncpy(tableRecord.name, (char *)row[0], fields[0].bytes); tstrncpy(tableRecord.metric, metric, TSDB_TABLE_NAME_LEN); @@ -851,6 +851,7 @@ int taosGetTableDes(char *table, STableDef *tableDes, TAOS* taosCon, bool isSupe if (code != 0) { fprintf(stderr, "failed to run command %s\n", tempCommand); free(tempCommand); + free(tbuf); taos_free_result(tmpResult); return -1; } @@ -876,6 +877,7 @@ int taosGetTableDes(char *table, STableDef *tableDes, TAOS* taosCon, bool isSupe if (isSuperTable) { free(tempCommand); + free(tbuf); return count; } @@ -891,6 +893,7 @@ int taosGetTableDes(char *table, STableDef *tableDes, TAOS* taosCon, bool isSupe if (code != 0) { fprintf(stderr, "failed to run command %s\n", tempCommand); free(tempCommand); + free(tbuf); taos_free_result(tmpResult); return -1; } @@ -901,6 +904,7 @@ int taosGetTableDes(char *table, STableDef *tableDes, TAOS* taosCon, bool isSupe if (NULL == row) { fprintf(stderr, " fetch failed to run command %s\n", tempCommand); free(tempCommand); + free(tbuf); taos_free_result(tmpResult); return -1; } @@ -961,6 +965,7 @@ int taosGetTableDes(char *table, STableDef *tableDes, TAOS* taosCon, bool isSupe } free(tempCommand); + free(tbuf); return count; } @@ -1835,7 +1840,7 @@ static void taosParseDirectory(const char *directoryName, const char *prefix, ch } int fileNum = 0; - while (fscanf(fp, "%s", fileArray[fileNum++])) { + while (fscanf(fp, "%128s", fileArray[fileNum++])) { if (strcmp(fileArray[fileNum-1], tsDbSqlFile) == 0) { fileNum--; } @@ -1864,7 +1869,7 @@ static void taosCheckTablesSQLFile(const char *directoryName) exit(0); } - while (fscanf(fp, "%s", tsDbSqlFile)) { + while (fscanf(fp, "%128s", tsDbSqlFile)) { break; } @@ -1922,20 +1927,6 @@ static FILE* taosOpenDumpInFile(char *fptr) { char *fname = full_path.we_wordv[0]; - if (access(fname, F_OK) != 0) { - fprintf(stderr, "ERROR: file %s is not exist\n", fptr); - - wordfree(&full_path); - return NULL; - } - - if (access(fname, R_OK) != 0) { - fprintf(stderr, "ERROR: file %s is not readable\n", fptr); - - wordfree(&full_path); - return NULL; - } - FILE *f = fopen(fname, "r"); if (f == NULL) { fprintf(stderr, "ERROR: failed to open file %s\n", fname); From 07c2de638702fe7c4d5aaa683e9cbfbd1e2cdc89 Mon Sep 17 00:00:00 2001 From: Hui Li Date: Tue, 4 Aug 2020 18:29:32 +0800 Subject: [PATCH 19/38] [un] --- packaging/tools/install.sh | 54 ++------------------------------------ 1 file changed, 2 insertions(+), 52 deletions(-) diff --git a/packaging/tools/install.sh b/packaging/tools/install.sh index d70c88ca54..ce5c052e97 100644 --- a/packaging/tools/install.sh +++ b/packaging/tools/install.sh @@ -19,8 +19,6 @@ data_link_dir="/usr/local/taos/data" log_link_dir="/usr/local/taos/log" cfg_install_dir="/etc/taos" -local_fqdn="" -server_port=6030 bin_link_dir="/usr/bin" lib_link_dir="/usr/lib" @@ -213,48 +211,6 @@ function install_header() { ${csudo} ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h } -function getLocalFqdn() { - fqdnLine=$(grep fqdn $1 > tmpFqdn.txt) - while read line - do - echo $line - firstChar=${line:0:1} - if [[ "$firstChar" != "#" ]]; then - fqdn=$(echo ${line#*fqdn}) - fqdn=$(echo ${fqdn%%#*}) -# echo "get fqdn from cfg: $fqdn" - break - fi - done tmpServerPort.txt) - while read line - do - echo $line - firstChar=${line:0:1} - if [[ "$firstChar" != "#" ]]; then - port=$(echo ${line#*serverPort}) - port=$(echo ${port%%#*}) -# echo "get serverPort from cfg: $port" - break - fi - done Date: Tue, 4 Aug 2020 18:30:47 +0800 Subject: [PATCH 20/38] fix some coverity issues also enhance telemetry report interval --- src/client/src/tscStream.c | 15 ++++++++------- src/client/src/tscSub.c | 1 + src/dnode/src/dnodeTelemetry.c | 34 ++++++++++++++++++++-------------- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/client/src/tscStream.c b/src/client/src/tscStream.c index 20b5e86090..6235e0aeba 100644 --- a/src/client/src/tscStream.c +++ b/src/client/src/tscStream.c @@ -220,15 +220,16 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(&pSql->cmd, 0, 0); if (numOfRows > 0) { // when reaching here the first execution of stream computing is successful. - pStream->numOfRes += numOfRows; for(int32_t i = 0; i < numOfRows; ++i) { TAOS_ROW row = taos_fetch_row(res); - tscDebug("%p stream:%p fetch result", pSql, pStream); - tscStreamFillTimeGap(pStream, *(TSKEY*)row[0]); - pStream->stime = *(TSKEY *)row[0]; - - // user callback function - (*pStream->fp)(pStream->param, res, row); + if (row != NULL) { + tscDebug("%p stream:%p fetch result", pSql, pStream); + tscStreamFillTimeGap(pStream, *(TSKEY*)row[0]); + pStream->stime = *(TSKEY *)row[0]; + // user callback function + (*pStream->fp)(pStream->param, res, row); + pStream->numOfRes++; + } } if (!pStream->isProject) { diff --git a/src/client/src/tscSub.c b/src/client/src/tscSub.c index 9569987de0..81d73236a4 100644 --- a/src/client/src/tscSub.c +++ b/src/client/src/tscSub.c @@ -203,6 +203,7 @@ static void tscProcessSubscriptionTimer(void *handle, void *tmrId) { static SArray* getTableList( SSqlObj* pSql ) { const char* p = strstr( pSql->sqlstr, " from " ); + assert(p != NULL); // we are sure this is a 'select' statement char* sql = alloca(strlen(p) + 32); sprintf(sql, "select tbid(tbname)%s", p); diff --git a/src/dnode/src/dnodeTelemetry.c b/src/dnode/src/dnodeTelemetry.c index 60277a275a..22287f71fd 100644 --- a/src/dnode/src/dnodeTelemetry.c +++ b/src/dnode/src/dnodeTelemetry.c @@ -33,7 +33,7 @@ static pthread_t tsTelemetryThread; #define TELEMETRY_SERVER "telemetry.taosdata.com" #define TELEMETRY_PORT 80 -#define REPORT_INTERVAL 86400 +#define REPORT_INTERVAL 86400 static void beginObject(SBufferWriter* bw) { tbufWriteChar(bw, '{'); @@ -220,28 +220,34 @@ static void sendTelemetryReport() { taosWriteSocket(fd, tbufGetData(&bw, false), contLen); tbufCloseWriter(&bw); - taosReadSocket(fd, buf, 10); // read something to avoid nginx error 499 + // read something to avoid nginx error 499 + if (taosReadSocket(fd, buf, 10) < 0) { + dTrace("failed to receive response, reason:%s", strerror(errno)); + } taosCloseSocket(fd); } static void* telemetryThread(void* param) { - int timeToWait = 0; + struct timespec end = {0}; + clock_gettime(CLOCK_REALTIME, &end); + end.tv_sec += 300; // wait 5 minutes to send first report + while (1) { - if (timeToWait <= 0) { - if (sdbIsMaster()) { - sendTelemetryReport(); + while (1) { + if (sem_timedwait(&tsExitSem, &end) == 0) { + return NULL; + } + struct timespec now = {0}; + clock_gettime(CLOCK_REALTIME, &now); + if (now.tv_sec > end.tv_sec || (now.tv_sec == end.tv_sec && now.tv_nsec >= end.tv_nsec)) { + break; } - timeToWait = REPORT_INTERVAL; } - int startAt = taosGetTimestampSec(); - struct timespec timeout = {.tv_sec = 0, .tv_nsec = 0}; - clock_gettime(CLOCK_REALTIME, &timeout); - timeout.tv_sec += timeToWait; - if (sem_timedwait(&tsExitSem, &timeout) == 0) { - break; + if (sdbIsMaster()) { + sendTelemetryReport(); } - timeToWait -= (taosGetTimestampSec() - startAt); + end.tv_sec += REPORT_INTERVAL; } return NULL; From 8c4669208c110dc1cfb937b2acd424843a67cae2 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 4 Aug 2020 19:10:51 +0800 Subject: [PATCH 21/38] TD-1037 --- deps/CMakeLists.txt | 1 + deps/iconv/CMakeLists.txt | 2 +- deps/pthread/CMakeLists.txt | 2 +- deps/regex/CMakeLists.txt | 2 +- deps/zlib-1.2.11/CMakeLists.txt | 2 +- deps/zlib-1.2.11/inc/zconf.h | 687 ++++++++++++++++---------------- deps/zlib-1.2.11/src/zconf.h | 7 +- src/client/CMakeLists.txt | 2 +- src/kit/shell/CMakeLists.txt | 2 +- src/util/inc/tchecksum.h | 5 + 10 files changed, 364 insertions(+), 348 deletions(-) diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index b9b99a4910..f5911ca0c9 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -7,6 +7,7 @@ ADD_SUBDIRECTORY(regex) ADD_SUBDIRECTORY(iconv) ADD_SUBDIRECTORY(lz4) ADD_SUBDIRECTORY(cJson) +#ADD_SUBDIRECTORY(MsvcLibX) IF (NOT TD_WINDOWS) ADD_SUBDIRECTORY(MQTT-C) diff --git a/deps/iconv/CMakeLists.txt b/deps/iconv/CMakeLists.txt index 628abb13ef..286070fa90 100644 --- a/deps/iconv/CMakeLists.txt +++ b/deps/iconv/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) -IF (TD_WINDOWS_64) +IF (TD_WINDOWS) LIST(APPEND SRC iconv.c) LIST(APPEND SRC localcharset.c) INCLUDE_DIRECTORIES(.) diff --git a/deps/pthread/CMakeLists.txt b/deps/pthread/CMakeLists.txt index a218d05bab..04e5be7472 100644 --- a/deps/pthread/CMakeLists.txt +++ b/deps/pthread/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) -IF (TD_WINDOWS_64) +IF (TD_WINDOWS) INCLUDE_DIRECTORIES(.) LIST(APPEND SRC pthread.c) ADD_LIBRARY(pthread ${SRC}) diff --git a/deps/regex/CMakeLists.txt b/deps/regex/CMakeLists.txt index 8f8396caa4..054b093d07 100644 --- a/deps/regex/CMakeLists.txt +++ b/deps/regex/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) -IF (TD_WINDOWS_64) +IF (TD_WINDOWS) INCLUDE_DIRECTORIES(inc .) LIST(APPEND SRC regex.c) ADD_LIBRARY(regex ${SRC}) diff --git a/deps/zlib-1.2.11/CMakeLists.txt b/deps/zlib-1.2.11/CMakeLists.txt index c69e54a1b0..686e6fcff5 100644 --- a/deps/zlib-1.2.11/CMakeLists.txt +++ b/deps/zlib-1.2.11/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) -IF (TD_LINUX_64) +IF (TD_LINUX_64 OR TD_WINDOWS_64) INCLUDE_DIRECTORIES(inc) AUX_SOURCE_DIRECTORY(src SRC) ADD_LIBRARY(z ${SRC}) diff --git a/deps/zlib-1.2.11/inc/zconf.h b/deps/zlib-1.2.11/inc/zconf.h index 97b1e279ef..9b83d3a898 100644 --- a/deps/zlib-1.2.11/inc/zconf.h +++ b/deps/zlib-1.2.11/inc/zconf.h @@ -14,177 +14,177 @@ * Even better than compiling with -DZ_PREFIX would be to use configure to set * this permanently in zconf.h using "./configure --zprefix". */ -#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ -# define Z_PREFIX_SET +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +#define Z_PREFIX_SET /* all linked symbols and init macros */ -# define _dist_code z__dist_code -# define _length_code z__length_code -# define _tr_align z__tr_align -# define _tr_flush_bits z__tr_flush_bits -# define _tr_flush_block z__tr_flush_block -# define _tr_init z__tr_init -# define _tr_stored_block z__tr_stored_block -# define _tr_tally z__tr_tally -# define adler32 z_adler32 -# define adler32_combine z_adler32_combine -# define adler32_combine64 z_adler32_combine64 -# define adler32_z z_adler32_z -# ifndef Z_SOLO -# define compress z_compress -# define compress2 z_compress2 -# define compressBound z_compressBound -# endif -# define crc32 z_crc32 -# define crc32_combine z_crc32_combine -# define crc32_combine64 z_crc32_combine64 -# define crc32_z z_crc32_z -# define deflate z_deflate -# define deflateBound z_deflateBound -# define deflateCopy z_deflateCopy -# define deflateEnd z_deflateEnd -# define deflateGetDictionary z_deflateGetDictionary -# define deflateInit z_deflateInit -# define deflateInit2 z_deflateInit2 -# define deflateInit2_ z_deflateInit2_ -# define deflateInit_ z_deflateInit_ -# define deflateParams z_deflateParams -# define deflatePending z_deflatePending -# define deflatePrime z_deflatePrime -# define deflateReset z_deflateReset -# define deflateResetKeep z_deflateResetKeep -# define deflateSetDictionary z_deflateSetDictionary -# define deflateSetHeader z_deflateSetHeader -# define deflateTune z_deflateTune -# define deflate_copyright z_deflate_copyright -# define get_crc_table z_get_crc_table -# ifndef Z_SOLO -# define gz_error z_gz_error -# define gz_intmax z_gz_intmax -# define gz_strwinerror z_gz_strwinerror -# define gzbuffer z_gzbuffer -# define gzclearerr z_gzclearerr -# define gzclose z_gzclose -# define gzclose_r z_gzclose_r -# define gzclose_w z_gzclose_w -# define gzdirect z_gzdirect -# define gzdopen z_gzdopen -# define gzeof z_gzeof -# define gzerror z_gzerror -# define gzflush z_gzflush -# define gzfread z_gzfread -# define gzfwrite z_gzfwrite -# define gzgetc z_gzgetc -# define gzgetc_ z_gzgetc_ -# define gzgets z_gzgets -# define gzoffset z_gzoffset -# define gzoffset64 z_gzoffset64 -# define gzopen z_gzopen -# define gzopen64 z_gzopen64 -# ifdef _WIN32 -# define gzopen_w z_gzopen_w -# endif -# define gzprintf z_gzprintf -# define gzputc z_gzputc -# define gzputs z_gzputs -# define gzread z_gzread -# define gzrewind z_gzrewind -# define gzseek z_gzseek -# define gzseek64 z_gzseek64 -# define gzsetparams z_gzsetparams -# define gztell z_gztell -# define gztell64 z_gztell64 -# define gzungetc z_gzungetc -# define gzvprintf z_gzvprintf -# define gzwrite z_gzwrite -# endif -# define inflate z_inflate -# define inflateBack z_inflateBack -# define inflateBackEnd z_inflateBackEnd -# define inflateBackInit z_inflateBackInit -# define inflateBackInit_ z_inflateBackInit_ -# define inflateCodesUsed z_inflateCodesUsed -# define inflateCopy z_inflateCopy -# define inflateEnd z_inflateEnd -# define inflateGetDictionary z_inflateGetDictionary -# define inflateGetHeader z_inflateGetHeader -# define inflateInit z_inflateInit -# define inflateInit2 z_inflateInit2 -# define inflateInit2_ z_inflateInit2_ -# define inflateInit_ z_inflateInit_ -# define inflateMark z_inflateMark -# define inflatePrime z_inflatePrime -# define inflateReset z_inflateReset -# define inflateReset2 z_inflateReset2 -# define inflateResetKeep z_inflateResetKeep -# define inflateSetDictionary z_inflateSetDictionary -# define inflateSync z_inflateSync -# define inflateSyncPoint z_inflateSyncPoint -# define inflateUndermine z_inflateUndermine -# define inflateValidate z_inflateValidate -# define inflate_copyright z_inflate_copyright -# define inflate_fast z_inflate_fast -# define inflate_table z_inflate_table -# ifndef Z_SOLO -# define uncompress z_uncompress -# define uncompress2 z_uncompress2 -# endif -# define zError z_zError -# ifndef Z_SOLO -# define zcalloc z_zcalloc -# define zcfree z_zcfree -# endif -# define zlibCompileFlags z_zlibCompileFlags -# define zlibVersion z_zlibVersion +#define _dist_code z__dist_code +#define _length_code z__length_code +#define _tr_align z__tr_align +#define _tr_flush_bits z__tr_flush_bits +#define _tr_flush_block z__tr_flush_block +#define _tr_init z__tr_init +#define _tr_stored_block z__tr_stored_block +#define _tr_tally z__tr_tally +#define adler32 z_adler32 +#define adler32_combine z_adler32_combine +#define adler32_combine64 z_adler32_combine64 +#define adler32_z z_adler32_z +#ifndef Z_SOLO +#define compress z_compress +#define compress2 z_compress2 +#define compressBound z_compressBound +#endif +#define crc32 z_crc32 +#define crc32_combine z_crc32_combine +#define crc32_combine64 z_crc32_combine64 +#define crc32_z z_crc32_z +#define deflate z_deflate +#define deflateBound z_deflateBound +#define deflateCopy z_deflateCopy +#define deflateEnd z_deflateEnd +#define deflateGetDictionary z_deflateGetDictionary +#define deflateInit z_deflateInit +#define deflateInit2 z_deflateInit2 +#define deflateInit2_ z_deflateInit2_ +#define deflateInit_ z_deflateInit_ +#define deflateParams z_deflateParams +#define deflatePending z_deflatePending +#define deflatePrime z_deflatePrime +#define deflateReset z_deflateReset +#define deflateResetKeep z_deflateResetKeep +#define deflateSetDictionary z_deflateSetDictionary +#define deflateSetHeader z_deflateSetHeader +#define deflateTune z_deflateTune +#define deflate_copyright z_deflate_copyright +#define get_crc_table z_get_crc_table +#ifndef Z_SOLO +#define gz_error z_gz_error +#define gz_intmax z_gz_intmax +#define gz_strwinerror z_gz_strwinerror +#define gzbuffer z_gzbuffer +#define gzclearerr z_gzclearerr +#define gzclose z_gzclose +#define gzclose_r z_gzclose_r +#define gzclose_w z_gzclose_w +#define gzdirect z_gzdirect +#define gzdopen z_gzdopen +#define gzeof z_gzeof +#define gzerror z_gzerror +#define gzflush z_gzflush +#define gzfread z_gzfread +#define gzfwrite z_gzfwrite +#define gzgetc z_gzgetc +#define gzgetc_ z_gzgetc_ +#define gzgets z_gzgets +#define gzoffset z_gzoffset +#define gzoffset64 z_gzoffset64 +#define gzopen z_gzopen +#define gzopen64 z_gzopen64 +#ifdef _WIN32 +#define gzopen_w z_gzopen_w +#endif +#define gzprintf z_gzprintf +#define gzputc z_gzputc +#define gzputs z_gzputs +#define gzread z_gzread +#define gzrewind z_gzrewind +#define gzseek z_gzseek +#define gzseek64 z_gzseek64 +#define gzsetparams z_gzsetparams +#define gztell z_gztell +#define gztell64 z_gztell64 +#define gzungetc z_gzungetc +#define gzvprintf z_gzvprintf +#define gzwrite z_gzwrite +#endif +#define inflate z_inflate +#define inflateBack z_inflateBack +#define inflateBackEnd z_inflateBackEnd +#define inflateBackInit z_inflateBackInit +#define inflateBackInit_ z_inflateBackInit_ +#define inflateCodesUsed z_inflateCodesUsed +#define inflateCopy z_inflateCopy +#define inflateEnd z_inflateEnd +#define inflateGetDictionary z_inflateGetDictionary +#define inflateGetHeader z_inflateGetHeader +#define inflateInit z_inflateInit +#define inflateInit2 z_inflateInit2 +#define inflateInit2_ z_inflateInit2_ +#define inflateInit_ z_inflateInit_ +#define inflateMark z_inflateMark +#define inflatePrime z_inflatePrime +#define inflateReset z_inflateReset +#define inflateReset2 z_inflateReset2 +#define inflateResetKeep z_inflateResetKeep +#define inflateSetDictionary z_inflateSetDictionary +#define inflateSync z_inflateSync +#define inflateSyncPoint z_inflateSyncPoint +#define inflateUndermine z_inflateUndermine +#define inflateValidate z_inflateValidate +#define inflate_copyright z_inflate_copyright +#define inflate_fast z_inflate_fast +#define inflate_table z_inflate_table +#ifndef Z_SOLO +#define uncompress z_uncompress +#define uncompress2 z_uncompress2 +#endif +#define zError z_zError +#ifndef Z_SOLO +#define zcalloc z_zcalloc +#define zcfree z_zcfree +#endif +#define zlibCompileFlags z_zlibCompileFlags +#define zlibVersion z_zlibVersion /* all zlib typedefs in zlib.h and zconf.h */ -# define Byte z_Byte -# define Bytef z_Bytef -# define alloc_func z_alloc_func -# define charf z_charf -# define free_func z_free_func -# ifndef Z_SOLO -# define gzFile z_gzFile -# endif -# define gz_header z_gz_header -# define gz_headerp z_gz_headerp -# define in_func z_in_func -# define intf z_intf -# define out_func z_out_func -# define uInt z_uInt -# define uIntf z_uIntf -# define uLong z_uLong -# define uLongf z_uLongf -# define voidp z_voidp -# define voidpc z_voidpc -# define voidpf z_voidpf +#define Byte z_Byte +#define Bytef z_Bytef +#define alloc_func z_alloc_func +#define charf z_charf +#define free_func z_free_func +#ifndef Z_SOLO +#define gzFile z_gzFile +#endif +#define gz_header z_gz_header +#define gz_headerp z_gz_headerp +#define in_func z_in_func +#define intf z_intf +#define out_func z_out_func +#define uInt z_uInt +#define uIntf z_uIntf +#define uLong z_uLong +#define uLongf z_uLongf +#define voidp z_voidp +#define voidpc z_voidpc +#define voidpf z_voidpf /* all zlib structs in zlib.h and zconf.h */ -# define gz_header_s z_gz_header_s -# define internal_state z_internal_state +#define gz_header_s z_gz_header_s +#define internal_state z_internal_state #endif #if defined(__MSDOS__) && !defined(MSDOS) -# define MSDOS +#define MSDOS #endif #if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) -# define OS2 +#define OS2 #endif #if defined(_WINDOWS) && !defined(WINDOWS) -# define WINDOWS +#define WINDOWS #endif #if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) -# ifndef WIN32 -# define WIN32 -# endif +#ifndef WIN32 +#define WIN32 +#endif #endif #if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) -# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) -# ifndef SYS16BIT -# define SYS16BIT -# endif -# endif +#if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +#ifndef SYS16BIT +#define SYS16BIT +#endif +#endif #endif /* @@ -192,73 +192,73 @@ * than 64k bytes at a time (needed on systems with 16-bit int). */ #ifdef SYS16BIT -# define MAXSEG_64K +#define MAXSEG_64K #endif #ifdef MSDOS -# define UNALIGNED_OK +#define UNALIGNED_OK #endif #ifdef __STDC_VERSION__ -# ifndef STDC -# define STDC -# endif -# if __STDC_VERSION__ >= 199901L -# ifndef STDC99 -# define STDC99 -# endif -# endif +#ifndef STDC +#define STDC +#endif +#if __STDC_VERSION__ >= 199901L +#ifndef STDC99 +#define STDC99 +#endif +#endif #endif #if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) -# define STDC +#define STDC #endif #if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) -# define STDC +#define STDC #endif #if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) -# define STDC +#define STDC #endif #if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) -# define STDC +#define STDC #endif -#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ -# define STDC +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +#define STDC #endif #ifndef STDC -# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ -# define const /* note: need a more gentle solution here */ -# endif +#ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +#define const /* note: need a more gentle solution here */ +#endif #endif #if defined(ZLIB_CONST) && !defined(z_const) -# define z_const const +#define z_const const #else -# define z_const +#define z_const #endif #ifdef Z_SOLO - typedef uint64_t z_size_t; +typedef uint64_t z_size_t; #else -# define z_longlong int64_t -# if defined(NO_SIZE_T) - typedef unsigned NO_SIZE_T z_size_t; -# elif defined(STDC) -# include - typedef size_t z_size_t; -# else - typedef uint64_t z_size_t; -# endif -# undef z_longlong +#define z_longlong int64_t +#if defined(NO_SIZE_T) +typedef unsigned NO_SIZE_T z_size_t; +#elif defined(STDC) +#include +typedef size_t z_size_t; +#else +typedef uint64_t z_size_t; +#endif +#undef z_longlong #endif /* Maximum value for memLevel in deflateInit2 */ #ifndef MAX_MEM_LEVEL -# ifdef MAXSEG_64K -# define MAX_MEM_LEVEL 8 -# else -# define MAX_MEM_LEVEL 9 -# endif +#ifdef MAXSEG_64K +#define MAX_MEM_LEVEL 8 +#else +#define MAX_MEM_LEVEL 9 +#endif #endif /* Maximum value for windowBits in deflateInit2 and inflateInit2. @@ -267,7 +267,7 @@ * gzip.) */ #ifndef MAX_WBITS -# define MAX_WBITS 15 /* 32K LZ77 window */ +#define MAX_WBITS 15 /* 32K LZ77 window */ #endif /* The memory requirements for deflate are (in bytes): @@ -283,22 +283,22 @@ for small objects. */ - /* Type declarations */ +/* Type declarations */ #ifndef OF /* function prototypes */ -# ifdef STDC -# define OF(args) args -# else -# define OF(args) () -# endif +#ifdef STDC +#define OF(args) args +#else +#define OF(args) () +#endif #endif #ifndef Z_ARG /* function prototypes for stdarg */ -# if defined(STDC) || defined(Z_HAVE_STDARG_H) -# define Z_ARG(args) args -# else -# define Z_ARG(args) () -# endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +#define Z_ARG(args) args +#else +#define Z_ARG(args) () +#endif #endif /* The following definitions for FAR are needed only for MSDOS mixed @@ -308,153 +308,153 @@ * just define FAR to be empty. */ #ifdef SYS16BIT -# if defined(M_I86SM) || defined(M_I86MM) - /* MSC small or medium model */ -# define SMALL_MEDIUM -# ifdef _MSC_VER -# define FAR _far -# else -# define FAR far -# endif -# endif -# if (defined(__SMALL__) || defined(__MEDIUM__)) - /* Turbo C small or medium model */ -# define SMALL_MEDIUM -# ifdef __BORLANDC__ -# define FAR _far -# else -# define FAR far -# endif -# endif +#if defined(M_I86SM) || defined(M_I86MM) +/* MSC small or medium model */ +#define SMALL_MEDIUM +#ifdef _MSC_VER +#define FAR _far +#else +#define FAR far +#endif +#endif +#if (defined(__SMALL__) || defined(__MEDIUM__)) +/* Turbo C small or medium model */ +#define SMALL_MEDIUM +#ifdef __BORLANDC__ +#define FAR _far +#else +#define FAR far +#endif +#endif #endif #if defined(WINDOWS) || defined(WIN32) - /* If building or using zlib as a DLL, define ZLIB_DLL. - * This is not mandatory, but it offers a little performance increase. - */ -# ifdef ZLIB_DLL -# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) -# ifdef ZLIB_INTERNAL -# define ZEXTERN extern __declspec(dllexport) -# else -# define ZEXTERN extern __declspec(dllimport) -# endif -# endif -# endif /* ZLIB_DLL */ - /* If building or using zlib with the WINAPI/WINAPIV calling convention, - * define ZLIB_WINAPI. - * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. - */ -# ifdef ZLIB_WINAPI -# ifdef FAR -# undef FAR -# endif -# include - /* No need for _export, use ZLIB.DEF instead. */ - /* For complete Windows compatibility, use WINAPI, not __stdcall. */ -# define ZEXPORT WINAPI -# ifdef WIN32 -# define ZEXPORTVA WINAPIV -# else -# define ZEXPORTVA FAR CDECL -# endif -# endif +/* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +#ifdef ZLIB_DLL +#if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +#ifdef ZLIB_INTERNAL +#define ZEXTERN extern __declspec(dllexport) +#else +#define ZEXTERN extern __declspec(dllimport) +#endif +#endif +#endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +#ifdef ZLIB_WINAPI +#ifdef FAR +#undef FAR +#endif +#include +/* No need for _export, use ZLIB.DEF instead. */ +/* For complete Windows compatibility, use WINAPI, not __stdcall. */ +#define ZEXPORT WINAPI +#ifdef WIN32 +#define ZEXPORTVA WINAPIV +#else +#define ZEXPORTVA FAR CDECL +#endif +#endif #endif -#if defined (__BEOS__) -# ifdef ZLIB_DLL -# ifdef ZLIB_INTERNAL -# define ZEXPORT __declspec(dllexport) -# define ZEXPORTVA __declspec(dllexport) -# else -# define ZEXPORT __declspec(dllimport) -# define ZEXPORTVA __declspec(dllimport) -# endif -# endif +#if defined(__BEOS__) +#ifdef ZLIB_DLL +#ifdef ZLIB_INTERNAL +#define ZEXPORT __declspec(dllexport) +#define ZEXPORTVA __declspec(dllexport) +#else +#define ZEXPORT __declspec(dllimport) +#define ZEXPORTVA __declspec(dllimport) +#endif +#endif #endif #ifndef ZEXTERN -# define ZEXTERN extern +#define ZEXTERN extern #endif #ifndef ZEXPORT -# define ZEXPORT +#define ZEXPORT #endif #ifndef ZEXPORTVA -# define ZEXPORTVA +#define ZEXPORTVA #endif #ifndef FAR -# define FAR +#define FAR #endif #if !defined(__MACTYPES__) -typedef unsigned char Byte; /* 8 bits */ +typedef unsigned char Byte; /* 8 bits */ #endif -typedef unsigned int uInt; /* 16 bits or more */ -typedef uint64_t uLong; /* 32 bits or more */ +typedef unsigned int uInt; /* 16 bits or more */ +typedef uint64_t uLong; /* 32 bits or more */ #ifdef SMALL_MEDIUM - /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ -# define Bytef Byte FAR +/* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +#define Bytef Byte FAR #else - typedef Byte FAR Bytef; +typedef Byte FAR Bytef; #endif -typedef char FAR charf; -typedef int FAR intf; -typedef uInt FAR uIntf; +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; typedef uLong FAR uLongf; #ifdef STDC - typedef void const *voidpc; - typedef void FAR *voidpf; - typedef void *voidp; +typedef void const *voidpc; +typedef void FAR *voidpf; +typedef void * voidp; #else - typedef Byte const *voidpc; - typedef Byte FAR *voidpf; - typedef Byte *voidp; +typedef Byte const *voidpc; +typedef Byte FAR *voidpf; +typedef Byte * voidp; #endif #if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) -# include -# if (UINT_MAX == 0xffffffffUL) -# define Z_U4 unsigned -# elif (ULONG_MAX == 0xffffffffUL) -# define Z_U4 uint64_t -# elif (USHRT_MAX == 0xffffffffUL) -# define Z_U4 unsigned short -# endif +#include +#if (UINT_MAX == 0xffffffffUL) +#define Z_U4 unsigned +#elif (ULONG_MAX == 0xffffffffUL) +#define Z_U4 uint64_t +#elif (USHRT_MAX == 0xffffffffUL) +#define Z_U4 unsigned short +#endif #endif #ifdef Z_U4 - typedef Z_U4 z_crc_t; +typedef Z_U4 z_crc_t; #else - typedef uint64_t z_crc_t; +typedef uint64_t z_crc_t; #endif -#if 1 /* was set to #if 1 by ./configure */ -# define Z_HAVE_UNISTD_H +#if 1 /* was set to #if 1 by ./configure */ +#define Z_HAVE_UNISTD_H #endif -#if 1 /* was set to #if 1 by ./configure */ -# define Z_HAVE_STDARG_H +#if 1 /* was set to #if 1 by ./configure */ +#define Z_HAVE_STDARG_H #endif #ifdef STDC -# ifndef Z_SOLO -# include /* for off_t */ -# endif +#ifndef Z_SOLO +#include /* for off_t */ +#endif #endif #if defined(STDC) || defined(Z_HAVE_STDARG_H) -# ifndef Z_SOLO -# include /* for va_list */ -# endif +#ifndef Z_SOLO +#include /* for va_list */ +#endif #endif #ifdef _WIN32 -# ifndef Z_SOLO -# include /* for wchar_t */ -# endif +#ifndef Z_SOLO +#include /* for wchar_t */ +#endif #endif /* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and @@ -464,71 +464,76 @@ typedef uLong FAR uLongf; * equivalently requesting no 64-bit operations */ #if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 -# undef _LARGEFILE64_SOURCE +#undef _LARGEFILE64_SOURCE #endif #if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) -# define Z_HAVE_UNISTD_H +#define Z_HAVE_UNISTD_H #endif #ifndef Z_SOLO -# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) -# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ -# ifdef VMS -# include /* for off_t */ -# endif -# ifndef z_off_t -# define z_off_t off_t -# endif -# endif +#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +#if (_WIN64) +#include +#include +#else +#include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +#endif +#ifdef VMS +#include /* for off_t */ +#endif +#ifndef z_off_t +#define z_off_t off_t +#endif +#endif #endif -#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 -# define Z_LFS64 +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE - 0 +#define Z_LFS64 #endif #if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) -# define Z_LARGE64 +#define Z_LARGE64 #endif -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) -# define Z_WANT64 +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS - 0 == 64 && defined(Z_LFS64) +#define Z_WANT64 #endif #if !defined(SEEK_SET) && !defined(Z_SOLO) -# define SEEK_SET 0 /* Seek from beginning of file. */ -# define SEEK_CUR 1 /* Seek from current position. */ -# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#define SEEK_SET 0 /* Seek from beginning of file. */ +#define SEEK_CUR 1 /* Seek from current position. */ +#define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif #ifndef z_off_t -# define z_off_t int64_t +#define z_off_t int64_t #endif #if !defined(_WIN32) && defined(Z_LARGE64) -# define z_off64_t off64_t +#define z_off64_t off64_t #else -# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) -# define z_off64_t __int64 -# else -# define z_off64_t z_off_t -# endif +#if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +#define z_off64_t __int64 +#else +#define z_off64_t z_off_t +#endif #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) - #pragma map(deflateInit_,"DEIN") - #pragma map(deflateInit2_,"DEIN2") - #pragma map(deflateEnd,"DEEND") - #pragma map(deflateBound,"DEBND") - #pragma map(inflateInit_,"ININ") - #pragma map(inflateInit2_,"ININ2") - #pragma map(inflateEnd,"INEND") - #pragma map(inflateSync,"INSY") - #pragma map(inflateSetDictionary,"INSEDI") - #pragma map(compressBound,"CMBND") - #pragma map(inflate_table,"INTABL") - #pragma map(inflate_fast,"INFA") - #pragma map(inflate_copyright,"INCOPY") +#pragma map(deflateInit_, "DEIN") +#pragma map(deflateInit2_, "DEIN2") +#pragma map(deflateEnd, "DEEND") +#pragma map(deflateBound, "DEBND") +#pragma map(inflateInit_, "ININ") +#pragma map(inflateInit2_, "ININ2") +#pragma map(inflateEnd, "INEND") +#pragma map(inflateSync, "INSY") +#pragma map(inflateSetDictionary, "INSEDI") +#pragma map(compressBound, "CMBND") +#pragma map(inflate_table, "INTABL") +#pragma map(inflate_fast, "INFA") +#pragma map(inflate_copyright, "INCOPY") #endif #endif /* ZCONF_H */ diff --git a/deps/zlib-1.2.11/src/zconf.h b/deps/zlib-1.2.11/src/zconf.h index d71de993e1..361c098281 100644 --- a/deps/zlib-1.2.11/src/zconf.h +++ b/deps/zlib-1.2.11/src/zconf.h @@ -472,7 +472,12 @@ typedef uLong FAR uLongf; #endif #ifndef Z_SOLO # if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) -# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +#if (_WIN64) +#include +#include +#else +#include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +#endif # ifdef VMS # include /* for off_t */ # endif diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index eaebd2f19d..987c309add 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -37,7 +37,7 @@ IF ((TD_LINUX_64) OR (TD_LINUX_32 AND TD_ARM)) ADD_SUBDIRECTORY(tests) -ELSEIF (TD_WINDOWS_64) +ELSEIF (TD_WINDOWS) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/jni/windows) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/jni/windows/win32) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/pthread) diff --git a/src/kit/shell/CMakeLists.txt b/src/kit/shell/CMakeLists.txt index 3695f694f3..445d4f6951 100644 --- a/src/kit/shell/CMakeLists.txt +++ b/src/kit/shell/CMakeLists.txt @@ -22,7 +22,7 @@ IF ((TD_LINUX_64) OR (TD_LINUX_32 AND TD_ARM)) # ENDIF () SET_TARGET_PROPERTIES(shell PROPERTIES OUTPUT_NAME taos) -ELSEIF (TD_WINDOWS_64) +ELSEIF (TD_WINDOWS) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/pthread) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/regex) LIST(APPEND SRC ./src/shellEngine.c) diff --git a/src/util/inc/tchecksum.h b/src/util/inc/tchecksum.h index 54043d68e1..495aaf33e8 100644 --- a/src/util/inc/tchecksum.h +++ b/src/util/inc/tchecksum.h @@ -53,7 +53,12 @@ static FORCE_INLINE int taosCheckChecksum(const uint8_t *stream, uint32_t ssize, static FORCE_INLINE int taosCheckChecksumWhole(const uint8_t *stream, uint32_t ssize) { if (ssize < sizeof(TSCKSUM)) return 0; + +#if (_WIN64) + return 1; +#else return *((TSCKSUM *)(stream + ssize - sizeof(TSCKSUM))) == (*crc32c)(0, stream, (size_t)(ssize - sizeof(TSCKSUM))); +#endif } #ifdef __cplusplus From 745ca1758a96efbee03ca25e349c6435fb57851e Mon Sep 17 00:00:00 2001 From: Hui Li Date: Tue, 4 Aug 2020 19:14:18 +0800 Subject: [PATCH 22/38] [print inconsistent cluster parameters] --- src/mnode/src/mnodeDnode.c | 56 ++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/src/mnode/src/mnodeDnode.c b/src/mnode/src/mnodeDnode.c index b68095ea3d..261f63d5cf 100644 --- a/src/mnode/src/mnodeDnode.c +++ b/src/mnode/src/mnodeDnode.c @@ -331,18 +331,50 @@ static void mnodeProcessCfgDnodeMsgRsp(SRpcMsg *rpcMsg) { } static bool mnodeCheckClusterCfgPara(const SClusterCfg *clusterCfg) { - if (clusterCfg->numOfMnodes != htonl(tsNumOfMnodes)) return false; - if (clusterCfg->enableBalance != htonl(tsEnableBalance)) return false; - if (clusterCfg->mnodeEqualVnodeNum != htonl(tsMnodeEqualVnodeNum)) return false; - if (clusterCfg->offlineThreshold != htonl(tsOfflineThreshold)) return false; - if (clusterCfg->statusInterval != htonl(tsStatusInterval)) return false; - if (clusterCfg->maxtablesPerVnode != htonl(tsMaxTablePerVnode)) return false; - if (clusterCfg->maxVgroupsPerDb != htonl(tsMaxVgroupsPerDb)) return false; - - if (0 != strncasecmp(clusterCfg->arbitrator, tsArbitrator, strlen(tsArbitrator))) return false; - if (0 != strncasecmp(clusterCfg->timezone, tsTimezone, strlen(tsTimezone))) return false; - if (0 != strncasecmp(clusterCfg->locale, tsLocale, strlen(tsLocale))) return false; - if (0 != strncasecmp(clusterCfg->charset, tsCharset, strlen(tsCharset))) return false; + if (clusterCfg->numOfMnodes != htonl(tsNumOfMnodes)) { + mError("\"numOfMnodes\"[%d - %d] cfg parameters inconsistent", clusterCfg->numOfMnodes, htonl(tsNumOfMnodes)); + return false; + } + if (clusterCfg->enableBalance != htonl(tsEnableBalance)) { + mError("\"balance\"[%d - %d] cfg parameters inconsistent", clusterCfg->enableBalance, htonl(tsEnableBalance)); + return false; + } + if (clusterCfg->mnodeEqualVnodeNum != htonl(tsMnodeEqualVnodeNum)) { + mError("\"mnodeEqualVnodeNum\"[%d - %d] cfg parameters inconsistent", clusterCfg->mnodeEqualVnodeNum, htonl(tsMnodeEqualVnodeNum)); + return false; + } + if (clusterCfg->offlineThreshold != htonl(tsOfflineThreshold)) { + mError("\"offlineThreshold\"[%d - %d] cfg parameters inconsistent", clusterCfg->offlineThreshold, htonl(tsOfflineThreshold)); + return false; + } + if (clusterCfg->statusInterval != htonl(tsStatusInterval)) { + mError("\"statusInterval\"[%d - %d] cfg parameters inconsistent", clusterCfg->statusInterval, htonl(tsStatusInterval)); + return false; + } + if (clusterCfg->maxtablesPerVnode != htonl(tsMaxTablePerVnode)) { + mError("\"maxTablesPerVnode\"[%d - %d] cfg parameters inconsistent", clusterCfg->maxtablesPerVnode, htonl(tsMaxTablePerVnode)); + return false; + } + if (clusterCfg->maxVgroupsPerDb != htonl(tsMaxVgroupsPerDb)) { + mError("\"maxVgroupsPerDb\"[%d - %d] cfg parameters inconsistent", clusterCfg->maxVgroupsPerDb, htonl(tsMaxVgroupsPerDb)); + return false; + } + if (0 != strncasecmp(clusterCfg->arbitrator, tsArbitrator, strlen(tsArbitrator))) { + mError("\"arbitrator\"[%s - %s] cfg parameters inconsistent", clusterCfg->arbitrator, tsArbitrator); + return false; + } + if (0 != strncasecmp(clusterCfg->timezone, tsTimezone, strlen(tsTimezone))) { + mError("\"timezone\"[%s - %s] cfg parameters inconsistent", clusterCfg->timezone, tsTimezone); + return false; + } + if (0 != strncasecmp(clusterCfg->locale, tsLocale, strlen(tsLocale))) { + mError("\"locale\"[%s - %s] cfg parameters inconsistent", clusterCfg->locale, tsLocale); + return false; + } + if (0 != strncasecmp(clusterCfg->charset, tsCharset, strlen(tsCharset))) { + mError("\"charset\"[%s - %s] cfg parameters inconsistent.", clusterCfg->charset, tsCharset); + return false; + } return true; } From 921ee0e4a034ddad3d6ff02f27ea0af1c5f49ca9 Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Wed, 5 Aug 2020 11:04:42 +0800 Subject: [PATCH 23/38] add jdbc pom.xml for deploy --- .gitignore | 11 ++ src/connector/jdbc/deploy-pom.xml | 218 ++++++++++++++++++++++++++++++ 2 files changed, 229 insertions(+) create mode 100755 src/connector/jdbc/deploy-pom.xml diff --git a/.gitignore b/.gitignore index 77c52b2ee2..c5d90eea50 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,14 @@ CMakeError.log /test/cfg /src/.vs *.o +src/connector/jdbc/.settings/ +tests/comparisonTest/cassandra/cassandratest/.classpath +tests/comparisonTest/cassandra/cassandratest/.project +tests/comparisonTest/cassandra/cassandratest/.settings/ +tests/comparisonTest/opentsdb/opentsdbtest/.classpath +tests/comparisonTest/opentsdb/opentsdbtest/.factorypath +tests/comparisonTest/opentsdb/opentsdbtest/.project +tests/comparisonTest/opentsdb/opentsdbtest/.settings/ +tests/examples/JDBC/JDBCDemo/.classpath +tests/examples/JDBC/JDBCDemo/.project +tests/examples/JDBC/JDBCDemo/.settings/ diff --git a/src/connector/jdbc/deploy-pom.xml b/src/connector/jdbc/deploy-pom.xml new file mode 100755 index 0000000000..b73bb010e0 --- /dev/null +++ b/src/connector/jdbc/deploy-pom.xml @@ -0,0 +1,218 @@ + + + 4.0.0 + + com.taosdata.jdbc + taos-jdbcdriver + 2.0.0-SNAPSHOT + jar + + + JDBCDriver + https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc + TDengine JDBC Driver + + + + + GNU AFFERO GENERAL PUBLIC LICENSE Version 3 + https://github.com/taosdata/TDengine/blob/master/LICENSE + repo + + + + + scm:git:git://github.com/taosdata/TDengine.git + scm:git:git@github.com:taosdata/TDengine.git + https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc + HEAD + + + + + taosdata + support@taosdata.com + https://www.taosdata.com/ + https://www.taosdata.com/ + + + + + + + commons-logging + commons-logging + 1.2 + + + * + * + + + + + org.apache.commons + commons-lang3 + 3.5 + + + junit + junit + 4.13 + test + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.0.0 + + + src/main/assembly/assembly-jar.xml + + + + + make-assembly + package + + single + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.1 + + UTF-8 + 11 + 11 + true + true + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + UTF-8 + UTF-8 + UTF-8 + + + + attach-javadocs + + jar + + + none + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + + default-deploy + deploy + + deploy + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + true + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + ossrh-td + https://oss.sonatype.org/ + true + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.3 + + true + false + forked-path + -Dgpg.passphrase=${gpg.passphrase} + + + + org.apache.maven.scm + maven-scm-provider-gitexe + 1.11.2 + + + + + + + + + + ossrh-td + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh-td + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + From a280e538c4e04cb15d14b23b0b40900d53364d9d Mon Sep 17 00:00:00 2001 From: Bomin Zhang Date: Wed, 5 Aug 2020 13:22:22 +0800 Subject: [PATCH 24/38] fix td-1061 --- src/mnode/src/mnodeTable.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mnode/src/mnodeTable.c b/src/mnode/src/mnodeTable.c index 5837aed259..ac7d44b1a6 100644 --- a/src/mnode/src/mnodeTable.c +++ b/src/mnode/src/mnodeTable.c @@ -1345,7 +1345,7 @@ int32_t mnodeRetrieveShowSuperTables(SShowObj *pShow, char *data, int32_t rows, pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; - int16_t len = strnlen(stableName, TSDB_DB_NAME_LEN - 1); + int16_t len = strnlen(stableName, TSDB_TABLE_NAME_LEN - 1); *(int16_t*) pWrite = len; pWrite += sizeof(int16_t); // todo refactor From ec63aa2f2dcc01db156042912f5ba7d80ba78485 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Wed, 5 Aug 2020 09:10:53 +0000 Subject: [PATCH 25/38] [TD-1045] fixbug java connector --- .../com/taosdata/jdbc/TSDBJNIConnector.java | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java index e9acffe0e3..13fa2eda81 100755 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java @@ -97,7 +97,7 @@ public class TSDBJNIConnector { this.taos = this.connectImp(host, port, dbName, user, password); if (this.taos == TSDBConstants.JNI_NULL_POINTER) { - throw new SQLException(TSDBConstants.WrapErrMsg(this.getErrMsg(null)), "", this.getErrCode(null)); + throw new SQLException(TSDBConstants.WrapErrMsg(this.getErrMsg(0L)), "", this.getErrCode(0l)); } return true; @@ -115,7 +115,7 @@ public class TSDBJNIConnector { freeResultSet(taosResultSetPointer); } - long pSql = 0l; + Long pSql = 0l; try { pSql = this.executeQueryImp(sql.getBytes(TaosGlobalConfig.getCharset()), this.taos); } catch (Exception e) { @@ -124,16 +124,11 @@ public class TSDBJNIConnector { throw new SQLException(TSDBConstants.WrapErrMsg("Unsupported encoding")); } int code = this.getErrCode(pSql); - - if (code < 0) { + if (code != 0) { affectedRows = -1; - if (code == TSDBConstants.JNI_TDENGINE_ERROR) { - this.freeResultSet(pSql); - throw new SQLException(TSDBConstants.WrapErrMsg(this.getErrMsg(pSql)), "", this.getErrCode(pSql)); - } else { - this.freeResultSet(pSql); - throw new SQLException(TSDBConstants.FixErrMsg(code), "", this.getErrCode(pSql)); - } + String err_msg = this.getErrMsg(pSql); + this.freeResultSet(pSql); + throw new SQLException(TSDBConstants.WrapErrMsg(err_msg), "", code); } // Try retrieving result set for the executed SQL using the current connection pointer. If the executed @@ -151,20 +146,20 @@ public class TSDBJNIConnector { /** * Get recent error code by connection */ - public int getErrCode(Long pSql) { - return Math.abs(this.getErrCodeImp(this.taos, pSql)); + public int getErrCode(long pSql) { + return this.getErrCodeImp(this.taos, pSql); } - private native int getErrCodeImp(long connection, Long pSql); + private native int getErrCodeImp(long connection, long pSql); /** * Get recent error message by connection */ - public String getErrMsg(Long pSql) { - return this.getErrMsgImp(this.taos, pSql); + public String getErrMsg(long pSql) { + return this.getErrMsgImp(pSql); } - private native String getErrMsgImp(long connection, Long pSql); + private native String getErrMsgImp(long pSql); /** * Get resultset pointer @@ -248,7 +243,7 @@ public class TSDBJNIConnector { public void closeConnection() throws SQLException { int code = this.closeConnectionImp(this.taos); if (code < 0) { - throw new SQLException(TSDBConstants.FixErrMsg(code), "", this.getErrCode(null)); + throw new SQLException(TSDBConstants.FixErrMsg(code), "", this.getErrCode(0l)); } else if (code == 0) { this.taos = TSDBConstants.JNI_NULL_POINTER; } else { From eefad77093dba990fc79a276d5dab8645a8ceeea Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Wed, 5 Aug 2020 17:55:11 +0800 Subject: [PATCH 26/38] udpate jdbc links --- .../webdocs/markdowndocs/connector-ch.md | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/documentation20/webdocs/markdowndocs/connector-ch.md b/documentation20/webdocs/markdowndocs/connector-ch.md index 511bf5a9a7..2cd12c3779 100644 --- a/documentation20/webdocs/markdowndocs/connector-ch.md +++ b/documentation20/webdocs/markdowndocs/connector-ch.md @@ -338,16 +338,11 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Java 对 maven 项目中使用如下 pom.xml 配置即可: ```xml - - - com.taosdata.jdbc - taos-jdbcdriver - 2.0.0 - jar - system - {localdir}/connector/taos-jdbcdriver-2.0.0-dist.jar - - + + com.taosdata.jdbc + taos-jdbcdriver + 2.0.1 + ``` ### 源码编译打包 @@ -1099,3 +1094,18 @@ promise2.then(function(result) { [这里](https://github.com/taosdata/TDengine/tree/master/tests/examples/nodejs/node-example-raw.js)同样是一个使用NodeJS 连接器建表,插入天气数据并查询插入的数据的代码示例,但和上面不同的是,该示例只使用`cursor`. +[1]: https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver +[2]: https://mvnrepository.com/artifact/com.taosdata.jdbc/taos-jdbcdriver +[3]: https://github.com/taosdata/TDengine +[4]: https://www.taosdata.com/blog/2019/12/03/jdbcdriver%e6%89%be%e4%b8%8d%e5%88%b0%e5%8a%a8%e6%80%81%e9%93%be%e6%8e%a5%e5%ba%93/ +[5]: https://github.com/brettwooldridge/HikariCP +[6]: https://github.com/alibaba/druid +[7]: https://github.com/taosdata/TDengine/issues +[8]: https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver +[9]: https://mvnrepository.com/artifact/com.taosdata.jdbc/taos-jdbcdriver +[10]: https://maven.aliyun.com/mvn/search +[11]: https://github.com/taosdata/TDengine/tree/develop/tests/examples/JDBC/SpringJdbcTemplate +[12]: https://github.com/taosdata/TDengine/tree/develop/tests/examples/JDBC/springbootdemo +[13]: https://www.taosdata.com/cn/documentation20/administrator/#%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE +[14]: https://www.taosdata.com/cn/documentation20/connector/#Windows +[15]: https://www.taosdata.com/cn/getting-started/#%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B \ No newline at end of file From c2ec729727aa8c31897366ee60184494a42b0da7 Mon Sep 17 00:00:00 2001 From: Bomin Zhang Date: Wed, 5 Aug 2020 18:02:29 +0800 Subject: [PATCH 27/38] resolve compiler warning in windows --- src/client/inc/tsclient.h | 2 +- src/client/src/tscPrepare.c | 2 +- src/inc/taos.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/client/inc/tsclient.h b/src/client/inc/tsclient.h index 7a44870938..b38e6377a9 100644 --- a/src/client/inc/tsclient.h +++ b/src/client/inc/tsclient.h @@ -157,7 +157,7 @@ typedef struct SParamInfo { int32_t idx; char type; uint8_t timePrec; - short bytes; + int16_t bytes; uint32_t offset; } SParamInfo; diff --git a/src/client/src/tscPrepare.c b/src/client/src/tscPrepare.c index 3ddfc1c341..0df1c7ddc5 100644 --- a/src/client/src/tscPrepare.c +++ b/src/client/src/tscPrepare.c @@ -298,7 +298,7 @@ static int doBindParam(char* data, SParamInfo* param, TAOS_BIND* bind) { break; case TSDB_DATA_TYPE_BINARY: - if ((*bind->length) > param->bytes) { + if ((*bind->length) > (uintptr_t)param->bytes) { return TSDB_CODE_TSC_INVALID_VALUE; } size = (short)*bind->length; diff --git a/src/inc/taos.h b/src/inc/taos.h index 1d609bc7db..f3cc9bb4d7 100644 --- a/src/inc/taos.h +++ b/src/inc/taos.h @@ -72,8 +72,8 @@ DLL_EXPORT void taos_close(TAOS *taos); typedef struct TAOS_BIND { int buffer_type; void * buffer; - unsigned long buffer_length; // unused - unsigned long *length; + uintptr_t buffer_length; // unused + uintptr_t *length; int * is_null; int is_unsigned; // unused int * error; // unused From 70a07503a428714b316bd1a6ffef757c1c6457fb Mon Sep 17 00:00:00 2001 From: Hui Li Date: Wed, 5 Aug 2020 19:29:49 +0800 Subject: [PATCH 28/38] [fix bug] --- src/common/src/tglobal.c | 2 +- src/kit/taosnetwork/client.c | 92 +++++++++++++++++++----------------- src/kit/taosnetwork/server.c | 75 +++++++++++++---------------- src/mnode/src/mnodePeer.c | 5 ++ src/mnode/src/mnodeVgroup.c | 4 +- 5 files changed, 90 insertions(+), 88 deletions(-) diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index 0cd3196ad0..c20061d11b 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -140,7 +140,7 @@ char tsMqttBrokerAddress[128] = {0}; char tsMqttBrokerClientId[128] = {0}; // monitor -int32_t tsEnableMonitorModule = 0; +int32_t tsEnableMonitorModule = 1; char tsMonitorDbName[TSDB_DB_NAME_LEN] = "log"; char tsInternalPass[] = "secretkey"; int32_t tsMonitorInterval = 30; // seconds diff --git a/src/kit/taosnetwork/client.c b/src/kit/taosnetwork/client.c index 706359ec20..c51c1ab4ba 100644 --- a/src/kit/taosnetwork/client.c +++ b/src/kit/taosnetwork/client.c @@ -32,8 +32,8 @@ typedef struct { int port; - char *host[15]; -} info; + char *host; +} info_s; typedef struct Arguments { char * host; @@ -65,10 +65,9 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { static struct argp argp = {options, parse_opt, 0, 0}; -void *checkPort(void *sarg) { - info *pinfo = (info *)sarg; - int port = pinfo->port; - char *host = *pinfo->host; +int checkTcpPort(info_s *info) { + int port = info->port; + char *host = info->host; int clientSocket; struct sockaddr_in serverAddr; @@ -77,38 +76,37 @@ void *checkPort(void *sarg) { int iDataNum; if ((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); - return NULL; + return -1; } serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); serverAddr.sin_addr.s_addr = inet_addr(host); - printf("=================================\n"); + //printf("=================================\n"); if (connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) { perror("connect"); - return NULL; + return -1; } - printf("Connect to: %s:%d...success\n", host, port); + //printf("Connect to: %s:%d...success\n", host, port); sprintf(sendbuf, "send port_%d", port); send(clientSocket, sendbuf, strlen(sendbuf), 0); - printf("Send msg_%d: %s\n", port, sendbuf); + //printf("Send msg_%d: %s\n", port, sendbuf); recvbuf[0] = '\0'; iDataNum = recv(clientSocket, recvbuf, BUFFER_SIZE, 0); recvbuf[iDataNum] = '\0'; - printf("Read ack msg_%d: %s\n", port, recvbuf); + //printf("Read ack msg_%d: %s\n", port, recvbuf); - printf("=================================\n"); + //printf("=================================\n"); close(clientSocket); - return NULL; + return 0; } -void *checkUPort(void *sarg) { - info *pinfo = (info *)sarg; - int port = pinfo->port; - char *host = *pinfo->host; +void *checkUdpPort(info_s *info) { + int port = info->port; + char *host = info->host; int clientSocket; struct sockaddr_in serverAddr; @@ -117,56 +115,62 @@ void *checkUPort(void *sarg) { int iDataNum; if ((clientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { perror("socket"); - return NULL; + return -1; } serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); - serverAddr.sin_addr.s_addr = inet_addr(host); - printf("=================================\n"); - sprintf(sendbuf, "send msg port_%d by udp", port); socklen_t sin_size = sizeof(*(struct sockaddr *)&serverAddr); - sendto(clientSocket, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&serverAddr, (int)sin_size); + int code = sendto(clientSocket, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&serverAddr, (int)sin_size); + if (code < 0) { + perror("sendto"); + return -1; + } - printf("Send msg_%d by udp: %s\n", port, sendbuf); + //printf("Send msg_%d by udp: %s\n", port, sendbuf); recvbuf[0] = '\0'; iDataNum = recvfrom(clientSocket, recvbuf, BUFFER_SIZE, 0, (struct sockaddr *)&serverAddr, &sin_size); recvbuf[iDataNum] = '\0'; - printf("Read ack msg_%d from udp: %s\n", port, recvbuf); + //printf("Read ack msg_%d from udp: %s\n", port, recvbuf); - printf("=================================\n"); close(clientSocket); - return NULL; + return 0; } int main(int argc, char *argv[]) { - SArguments arguments = {"127.0.0.1", 6041, 6050}; - + SArguments arguments = {"127.0.0.1", 6030, 6060}; + info_s info; + int ret; + argp_parse(&argp, argc, argv, 0, 0, &arguments); - printf("host: %s\tport: %d\tmax_port: %d\n", arguments.host, arguments.port, arguments.max_port); + printf("host: %s\tport: %d\tmax_port: %d\n\n", arguments.host, arguments.port, arguments.max_port); int port = arguments.port; - char *host = arguments.host; - info *tinfo = malloc(sizeof(info)); - info *uinfo = malloc(sizeof(info)); + + info.host = arguments.host; for (; port < arguments.max_port; port++) { - printf("For test: %s:%d\n", host, port); + printf("test: %s:%d\n", info.host, port); - *tinfo->host = host; - tinfo->port = port; - checkPort(tinfo); - - *uinfo->host = host; - uinfo->port = port; - checkUPort(uinfo); + info.port = port; + ret = checkTcpPort(&info); + if (ret != 0) { + printf("tcp port:%d test fail.", port); + } else { + printf("tcp port:%d test ok.", port); + } + + checkUdpPort(&info); + if (ret != 0) { + printf("udp port:%d test fail.", port); + } else { + printf("udp port:%d test ok.", port); + } } - free(tinfo); - free(uinfo); -} \ No newline at end of file +} diff --git a/src/kit/taosnetwork/server.c b/src/kit/taosnetwork/server.c index c967828f0b..f77d23f0a7 100644 --- a/src/kit/taosnetwork/server.c +++ b/src/kit/taosnetwork/server.c @@ -27,13 +27,13 @@ #include #include #include +#include #define BUFFER_SIZE 200 typedef struct { int port; - int type; // 0: tcp, 1: udo, default: 0 -} info; +} info_s; typedef struct Arguments { char * host; @@ -43,7 +43,7 @@ typedef struct Arguments { static struct argp_option options[] = { {0, 'h', "host", 0, "The host to connect to TDEngine. Default is localhost.", 0}, - {0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6020.", 1}, + {0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6041.", 1}, {0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6050.", 2}}; static error_t parse_opt(int key, char *arg, struct argp_state *state) { @@ -65,10 +65,9 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { static struct argp argp = {options, parse_opt, 0, 0}; -static void *bindPort(void *sarg) { - info *pinfo = (info *)sarg; +static void *bindTcpPort(void *sarg) { + info_s *pinfo = (info_s *)sarg; int port = pinfo->port; - int type = pinfo->type; int serverSocket; struct sockaddr_in server_addr; @@ -98,14 +97,14 @@ static void *bindPort(void *sarg) { return NULL; } - printf("Bind port: %d success\n", port); + //printf("Bind port: %d success\n", port); while (1) { client = accept(serverSocket, (struct sockaddr *)&clientAddr, (socklen_t *)&addr_len); if (client < 0) { perror("accept"); continue; } - printf("=================================\n"); + //printf("=================================\n"); printf("Client ip is %s, Server port is %d\n", inet_ntoa(clientAddr.sin_addr), port); while (1) { @@ -118,33 +117,30 @@ static void *bindPort(void *sarg) { } if (iDataNum > 0) { buffer[iDataNum] = '\0'; - printf("read msg:%s\n", buffer); + //printf("read msg:%s\n", buffer); if (strcmp(buffer, "quit") == 0) break; buffer[0] = '\0'; sprintf(buffer, "ack port_%d", port); - printf("send ack msg:%s\n", buffer); + //printf("send ack msg:%s\n", buffer); send(client, buffer, strlen(buffer), 0); break; } } - printf("=================================\n"); + //printf("=================================\n"); } close(serverSocket); return NULL; } -static void *bindUPort(void *sarg) { - info *pinfo = (info *)sarg; +static void *bindUdpPort(void *sarg) { + info_s *pinfo = (info_s *)sarg; int port = pinfo->port; - int type = pinfo->type; int serverSocket; struct sockaddr_in server_addr; struct sockaddr_in clientAddr; - int addr_len = sizeof(clientAddr); - int client; char buffer[BUFFER_SIZE]; int iDataNum; @@ -164,7 +160,7 @@ static void *bindUPort(void *sarg) { } socklen_t sin_size; - printf("Bind port: %d success\n", port); + //printf("Bind port: %d success\n", port); while (1) { buffer[0] = '\0'; @@ -178,21 +174,19 @@ static void *bindUPort(void *sarg) { continue; } if (iDataNum > 0) { - printf("=================================\n"); + //printf("=================================\n"); printf("Client ip is %s, Server port is %d\n", inet_ntoa(clientAddr.sin_addr), port); buffer[iDataNum] = '\0'; - printf("Read msg from udp:%s\n", buffer); + //printf("Read msg from udp:%s\n", buffer); if (strcmp(buffer, "quit") == 0) break; buffer[0] = '\0'; sprintf(buffer, "ack port_%d by udp", port); - printf("Send ack msg by udp:%s\n", buffer); + //printf("Send ack msg by udp:%s\n", buffer); sendto(serverSocket, buffer, strlen(buffer), 0, (struct sockaddr *)&clientAddr, (int)sin_size); - - send(client, buffer, strlen(buffer), 0); - printf("=================================\n"); + //printf("=================================\n"); } } @@ -202,39 +196,38 @@ static void *bindUPort(void *sarg) { int main(int argc, char *argv[]) { - SArguments arguments = {"127.0.0.1", 6020, 6050}; + SArguments arguments = {"127.0.0.1", 6030, 6060}; argp_parse(&argp, argc, argv, 0, 0, &arguments); int port = arguments.port; - int num = arguments.max_port - arguments.port; + int num = arguments.max_port - arguments.port + 1; if (num < 0) { num = 1; } pthread_t *pids = malloc(2 * num * sizeof(pthread_t)); - info * infos = malloc(num * sizeof(info)); - info * uinfos = malloc(num * sizeof(info)); + info_s * tinfos = malloc(num * sizeof(info_s)); + info_s * uinfos = malloc(num * sizeof(info_s)); for (size_t i = 0; i < num; i++) { - info *pinfo = infos++; - pinfo->port = port; + info_s *tcpInfo = tinfos + i; + tcpInfo->port = port + i; - if (pthread_create(pids + i, NULL, bindPort, pinfo) != 0) //创建线程 - { //创建线程失败 - printf("创建线程失败: %d.\n", port); - exit(0); + if (pthread_create(pids + i, NULL, bindTcpPort, tcpInfo) != 0) + { + printf("create thread fail, port:%d.\n", port); + exit(-1); } - info *uinfo = uinfos++; - uinfo->port = port; - uinfo->type = 1; - port++; - if (pthread_create(pids + num + i, NULL, bindUPort, uinfo) != 0) //创建线程 - { //创建线程失败 - printf("创建线程失败: %d.\n", port); - exit(0); + info_s *udpInfo = uinfos + i; + udpInfo->port = port + i; + if (pthread_create(pids + num + i, NULL, bindUdpPort, udpInfo) != 0) + { + printf("create thread fail, port:%d.\n", port); + exit(-1); } } + for (int i = 0; i < num; i++) { pthread_join(pids[i], NULL); pthread_join(pids[(num + i)], NULL); diff --git a/src/mnode/src/mnodePeer.c b/src/mnode/src/mnodePeer.c index 71b8b1ea84..7b4b4e4343 100644 --- a/src/mnode/src/mnodePeer.c +++ b/src/mnode/src/mnodePeer.c @@ -75,6 +75,11 @@ int32_t mnodeProcessPeerReq(SMnodeMsg *pMsg) { } void mnodeProcessPeerRsp(SRpcMsg *pMsg) { + if (!sdbIsMaster()) { + mError("%p, msg:%s is not processed for it is not master", pMsg->ahandle, taosMsg[pMsg->msgType]); + return; + } + if (tsMnodeProcessPeerRspFp[pMsg->msgType]) { (*tsMnodeProcessPeerRspFp[pMsg->msgType])(pMsg); } else { diff --git a/src/mnode/src/mnodeVgroup.c b/src/mnode/src/mnodeVgroup.c index bfeff1f4cb..4fc71affe9 100644 --- a/src/mnode/src/mnodeVgroup.c +++ b/src/mnode/src/mnodeVgroup.c @@ -164,9 +164,9 @@ static int32_t mnodeVgroupActionUpdate(SSdbOper *pOper) { // reset vgid status on vgroup changed - mDebug("vgId:%d, reset sync status to unsynced", pVgroup->vgId); + mDebug("vgId:%d, reset sync status to offline", pVgroup->vgId); for (int32_t v = 0; v < pVgroup->numOfVnodes; ++v) { - pVgroup->vnodeGid[v].role = TAOS_SYNC_ROLE_UNSYNCED; + pVgroup->vnodeGid[v].role = TAOS_SYNC_ROLE_OFFLINE; } mnodeDecVgroupRef(pVgroup); From 416859c0a0d119d56ec31240ce7d4298d217ba40 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Wed, 5 Aug 2020 19:30:45 +0800 Subject: [PATCH 29/38] update coverage test script. --- tests/perftest-scripts/coverage_test.sh | 26 ++++++++++++------- .../tdinternal_coverage_test.sh | 17 ++++++++---- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/tests/perftest-scripts/coverage_test.sh b/tests/perftest-scripts/coverage_test.sh index 152e20756b..6644cc62a3 100755 --- a/tests/perftest-scripts/coverage_test.sh +++ b/tests/perftest-scripts/coverage_test.sh @@ -32,7 +32,14 @@ function buildTDengine { echo "repo need to pull" git reset --hard git pull + fi + [ -d $TDENGINE_DIR/debug ] || mkdir $TDENGINE_DIR/debug + cd $TDENGINE_DIR/debug + [ -f $TDENGINE_DIR/debug/build/bin/taosd ] || need_rebuild=true + + if $need_rebuild ; then + echo "rebuild.." LOCAL_COMMIT=`git rev-parse --short @` rm -rf * @@ -46,10 +53,9 @@ function buildTDengine { function runGeneralCaseOneByOne { while read -r line; do if [[ $line =~ ^./test.sh* ]]; then - general_case=`echo $line | grep -w general` + case=`echo $line | grep -w "general\|unique\/mnode\/mgmt33.sim\|unique\/stable\/dnode3.sim\|unique\/cluster\/balance3.sim\|unique\/arbitrator\/offline_replica2_alterTable_online.sim"|awk '{print $NF}'` - if [ -n "$general_case" ]; then - case=`echo $line |grep general| awk '{print $NF}'` + if [ -n "$case" ]; then ./test.sh -f $case > /dev/null 2>&1 && \ echo -e "${GREEN}$case success${NC}" | tee -a $TDENGINE_COVERAGE_REPORT || \ echo -e "${RED}$case failed${NC}" | tee -a $TDENGINE_COVERAGE_REPORT @@ -90,14 +96,14 @@ function runTest { sleep 10 cd $TDENGINE_DIR/src/connector/jdbc - mvn clean package - mvn test | tee -a $TDENGINE_COVERAGE_REPORT + mvn clean package > /dev/null 2>&1 + mvn test > /dev/null 2>&1 | tee -a $TDENGINE_COVERAGE_REPORT # Test C Demo stopTaosd $TDENGINE_DIR/debug/build/bin/taosd -c $TDENGINE_DIR/debug/test/cfg > /dev/null & sleep 10 - yes | $TDENGINE_DIR/debug/build/bin/demo 127.0.0.1 | tee -a $TDENGINE_COVERAGE_REPORT + yes | $TDENGINE_DIR/debug/build/bin/demo 127.0.0.1 > /dev/null 2>&1 | tee -a $TDENGINE_COVERAGE_REPORT # Test waltest dataDir=`grep dataDir $TDENGINE_DIR/debug/test/cfg/taos.cfg|awk '{print $2}'` @@ -105,14 +111,14 @@ function runTest { echo "dataDir: $dataDir" | tee -a $TDENGINE_COVERAGE_REPORT echo "walDir: $walDir" | tee -a $TDENGINE_COVERAGE_REPORT if [ -n "$walDir" ]; then - yes | $TDENGINE_DIR/debug/build/bin/waltest -p $walDir | tee -a $TDENGINE_COVERAGE_REPORT + yes | $TDENGINE_DIR/debug/build/bin/waltest -p $walDir > dev/null 2>&1 | tee -a $TDENGINE_COVERAGE_REPORT fi # run Unit Test echo "Run Unit Test: utilTest, queryTest and cliTest" - $TDENGINE_DIR/debug/build/bin/utilTest > /dev/null && echo "utilTest pass!" || echo "utilTest failed!" - $TDENGINE_DIR/debug/build/bin/queryTest > /dev/null && echo "queryTest pass!" || echo "queryTest failed!" - $TDENGINE_DIR/debug/build/bin/cliTest > /dev/null && echo "cliTest pass!" || echo "cliTest failed!" + $TDENGINE_DIR/debug/build/bin/utilTest > /dev/null 2>&1 && echo "utilTest pass!" || echo "utilTest failed!" + $TDENGINE_DIR/debug/build/bin/queryTest > /dev/null 2>&1 && echo "queryTest pass!" || echo "queryTest failed!" + $TDENGINE_DIR/debug/build/bin/cliTest > /dev/null 2>&1 && echo "cliTest pass!" || echo "cliTest failed!" stopTaosd } diff --git a/tests/perftest-scripts/tdinternal_coverage_test.sh b/tests/perftest-scripts/tdinternal_coverage_test.sh index 91d204baf9..654c06cd0b 100755 --- a/tests/perftest-scripts/tdinternal_coverage_test.sh +++ b/tests/perftest-scripts/tdinternal_coverage_test.sh @@ -100,23 +100,30 @@ function runTest { sleep 10 cd $TDINTERNAL_DIR/community/src/connector/jdbc - mvn clean package - mvn test | tee -a $TDINTERNAL_COVERAGE_REPORT + mvn clean package > /dev/null + mvn test > /dev/null | tee -a $TDINTERNAL_COVERAGE_REPORT # Test C Demo stopTaosd $TDINTERNAL_DIR/debug/build/bin/taosd -c $TDINTERNAL_DIR/debug/test/cfg > /dev/null & sleep 10 - yes | $TDINTERNAL_DIR/debug/build/bin/demo 127.0.0.1 | tee -a $TDINTERNAL_COVERAGE_REPORT + yes | $TDINTERNAL_DIR/debug/build/bin/demo 127.0.0.1 > /dev/null | tee -a $TDINTERNAL_COVERAGE_REPORT # Test waltest dataDir=`grep dataDir $TDINTERNAL_DIR/debug/test/cfg/taos.cfg|awk '{print $2}'` walDir=`find $dataDir -name "wal"|head -n1` - echo "dataDir: $dataDir\nwalDir: $walDir" | tee -a $TDINTERNAL_COVERAGE_REPORT + echo "dataDir: $dataDir" | tee -a $TDINTERNAL_COVERAGE_REPORT + echo "walDir: $walDir" | tee -a $TDINTERNAL_COVERAGE_REPORT if [ -n "$walDir" ]; then - yes | $TDINTERNAL_DIR/debug/build/bin/waltest -p $walDir | tee -a $TDINTERNAL_COVERAGE_REPORT + yes | $TDINTERNAL_DIR/debug/build/bin/waltest -p $walDir > /dev/null | tee -a $TDINTERNAL_COVERAGE_REPORT fi + # run Unit Test + echo "Run Unit Test: utilTest, queryTest and cliTest" + $TDINTERNAL_DIR/debug/build/bin/utilTest > /dev/null 2>&1 && echo "utilTest pass!" || echo "utilTest failed!" + $TDINTERNAL_DIR/debug/build/bin/queryTest > /dev/null 2>&1 && echo "queryTest pass!" || echo "queryTest failed!" + $TDINTERNAL_DIR/debug/build/bin/cliTest > /dev/null 2>&1 && echo "cliTest pass!" || echo "cliTest failed!" + stopTaosd } From b0186d1c336dd4861f2bcfecb3363d006a434028 Mon Sep 17 00:00:00 2001 From: Bomin Zhang Date: Thu, 6 Aug 2020 09:35:41 +0800 Subject: [PATCH 30/38] td-1033: add more infomation to report --- src/dnode/src/dnodeTelemetry.c | 46 ++++++++++++++++++++-------------- src/mnode/inc/mnodeAcct.h | 1 + src/mnode/inc/mnodeDb.h | 1 + src/mnode/inc/mnodeTable.h | 2 ++ src/mnode/inc/mnodeVgroup.h | 1 + src/mnode/src/mnodeAcct.c | 32 +++++++++++++++++++++++ src/mnode/src/mnodeDb.c | 4 +++ src/mnode/src/mnodeTable.c | 8 ++++++ src/mnode/src/mnodeVgroup.c | 4 +++ 9 files changed, 80 insertions(+), 19 deletions(-) diff --git a/src/dnode/src/dnodeTelemetry.c b/src/dnode/src/dnodeTelemetry.c index 22287f71fd..892fd1d903 100644 --- a/src/dnode/src/dnodeTelemetry.c +++ b/src/dnode/src/dnodeTelemetry.c @@ -22,8 +22,16 @@ #include "tsocket.h" #include "tbuffer.h" #include "mnode.h" +#include "mnodeDef.h" +#include "mnodeDb.h" +#include "mnodeDnode.h" #include "mnodeCluster.h" +#include "mnodeDnode.h" +#include "mnodeVgroup.h" +#include "mnodeMnode.h" +#include "mnodeTable.h" #include "mnodeSdb.h" +#include "mnodeAcct.h" #include "dnode.h" #include "dnodeInt.h" #include "dnodeTelemetry.h" @@ -170,18 +178,23 @@ static void addVersionInfo(SBufferWriter* bw) { addStringField(bw, "version", version); addStringField(bw, "buildInfo", buildinfo); addStringField(bw, "gitInfo", gitinfo); - //addStringField(&bw, "installAt", "2020-08-01T00:00:00Z"); } static void addRuntimeInfo(SBufferWriter* bw) { - // addIntField(&bw, "numOfDnode", 1); - // addIntField(&bw, "numOfVnode", 1); - // addIntField(&bw, "numOfStable", 1); - // addIntField(&bw, "numOfTable", 1); - // addIntField(&bw, "numOfRows", 1); - // addStringField(&bw, "startAt", "2020-08-01T00:00:00Z"); - // addStringField(&bw, "memoryUsage", "10240 kB"); - // addStringField(&bw, "diskUsage", "10240 MB"); + addIntField(bw, "numOfDnode", mnodeGetDnodesNum()); + addIntField(bw, "numOfMnode", mnodeGetMnodesNum()); + addIntField(bw, "numOfVgroup", mnodeGetVgroupNum()); + addIntField(bw, "numOfDatabase", mnodeGetDbNum()); + addIntField(bw, "numOfSuperTable", mnodeGetSuperTableNum()); + addIntField(bw, "numOfChildTable", mnodeGetChildTableNum()); + + SAcctInfo info; + mnodeGetStatOfAllAcct(&info); + addIntField(bw, "numOfColumn", info.numOfTimeSeries); + addIntField(bw, "numOfPoint", info.totalPoints); + addIntField(bw, "totalStorage", info.totalStorage); + addIntField(bw, "compStorage", info.compStorage); + // addStringField(bw, "installTime", "2020-08-01T00:00:00Z"); } static void sendTelemetryReport() { @@ -230,18 +243,13 @@ static void sendTelemetryReport() { static void* telemetryThread(void* param) { struct timespec end = {0}; clock_gettime(CLOCK_REALTIME, &end); - end.tv_sec += 300; // wait 5 minutes to send first report + end.tv_sec += 300; // wait 5 minutes before send first report while (1) { - while (1) { - if (sem_timedwait(&tsExitSem, &end) == 0) { - return NULL; - } - struct timespec now = {0}; - clock_gettime(CLOCK_REALTIME, &now); - if (now.tv_sec > end.tv_sec || (now.tv_sec == end.tv_sec && now.tv_nsec >= end.tv_nsec)) { - break; - } + if (sem_timedwait(&tsExitSem, &end) == 0) { + break; + } else if (errno != ETIMEDOUT) { + continue; } if (sdbIsMaster()) { diff --git a/src/mnode/inc/mnodeAcct.h b/src/mnode/inc/mnodeAcct.h index 44c3fc3cb8..744a62f948 100644 --- a/src/mnode/inc/mnodeAcct.h +++ b/src/mnode/inc/mnodeAcct.h @@ -24,6 +24,7 @@ extern "C" { int32_t mnodeInitAccts(); void mnodeCleanupAccts(); +void mnodeGetStatOfAllAcct(SAcctInfo* pAcctInfo); void * mnodeGetAcct(char *acctName); void * mnodeGetNextAcct(void *pIter, SAcctObj **pAcct); void mnodeIncAcctRef(SAcctObj *pAcct); diff --git a/src/mnode/inc/mnodeDb.h b/src/mnode/inc/mnodeDb.h index ca6c2a86a2..7cbd08ed92 100644 --- a/src/mnode/inc/mnodeDb.h +++ b/src/mnode/inc/mnodeDb.h @@ -30,6 +30,7 @@ enum _TSDB_DB_STATUS { // api int32_t mnodeInitDbs(); void mnodeCleanupDbs(); +int64_t mnodeGetDbNum(); SDbObj *mnodeGetDb(char *db); SDbObj *mnodeGetDbByTableId(char *db); void * mnodeGetNextDb(void *pIter, SDbObj **pDb); diff --git a/src/mnode/inc/mnodeTable.h b/src/mnode/inc/mnodeTable.h index 78ef0e37e8..ed0dbe4ecf 100644 --- a/src/mnode/inc/mnodeTable.h +++ b/src/mnode/inc/mnodeTable.h @@ -24,6 +24,8 @@ extern "C" { int32_t mnodeInitTables(); void mnodeCleanupTables(); +int64_t mnodeGetSuperTableNum(); +int64_t mnodeGetChildTableNum(); void * mnodeGetTable(char *tableId); void mnodeIncTableRef(void *pTable); void mnodeDecTableRef(void *pTable); diff --git a/src/mnode/inc/mnodeVgroup.h b/src/mnode/inc/mnodeVgroup.h index 9c5b201e93..7aa662b81c 100644 --- a/src/mnode/inc/mnodeVgroup.h +++ b/src/mnode/inc/mnodeVgroup.h @@ -24,6 +24,7 @@ struct SMnodeMsg; int32_t mnodeInitVgroups(); void mnodeCleanupVgroups(); +int64_t mnodeGetVgroupNum(); SVgObj *mnodeGetVgroup(int32_t vgId); void mnodeIncVgroupRef(SVgObj *pVgroup); void mnodeDecVgroupRef(SVgObj *pVgroup); diff --git a/src/mnode/src/mnodeAcct.c b/src/mnode/src/mnodeAcct.c index 5244bc3e85..b0a12979cd 100644 --- a/src/mnode/src/mnodeAcct.c +++ b/src/mnode/src/mnodeAcct.c @@ -23,6 +23,7 @@ #include "mnodeDb.h" #include "mnodeSdb.h" #include "mnodeUser.h" +#include "mnodeVgroup.h" #include "tglobal.h" @@ -130,6 +131,37 @@ void mnodeCleanupAccts() { tsAcctSdb = NULL; } +void mnodeGetStatOfAllAcct(SAcctInfo* pAcctInfo) { + memset(pAcctInfo, 0, sizeof(*pAcctInfo)); + + void *pIter = NULL; + SAcctObj *pAcct = NULL; + while (1) { + pIter = mnodeGetNextAcct(pIter, &pAcct); + if (pAcct == NULL) { + break; + } + pAcctInfo->numOfDbs += pAcct->acctInfo.numOfDbs; + pAcctInfo->numOfTimeSeries += pAcct->acctInfo.numOfTimeSeries; + mnodeDecAcctRef(pAcct); + } + sdbFreeIter(pIter); + + SVgObj *pVgroup = NULL; + pIter = NULL; + while (1) { + pIter = mnodeGetNextVgroup(pIter, &pVgroup); + if (pVgroup == NULL) { + break; + } + pAcctInfo->totalStorage += pVgroup->totalStorage; + pAcctInfo->compStorage += pVgroup->compStorage; + pAcctInfo->totalPoints += pVgroup->pointsWritten; + mnodeDecVgroupRef(pVgroup); + } + sdbFreeIter(pIter); +} + void *mnodeGetAcct(char *name) { return sdbGetRow(tsAcctSdb, name); } diff --git a/src/mnode/src/mnodeDb.c b/src/mnode/src/mnodeDb.c index 48acc6787c..7f9be7eb54 100644 --- a/src/mnode/src/mnodeDb.c +++ b/src/mnode/src/mnodeDb.c @@ -61,6 +61,10 @@ static int32_t mnodeDbActionDestroy(SSdbOper *pOper) { return TSDB_CODE_SUCCESS; } +int64_t mnodeGetDbNum() { + return sdbGetNumOfRows(tsDbSdb); +} + static int32_t mnodeDbActionInsert(SSdbOper *pOper) { SDbObj *pDb = pOper->pObj; SAcctObj *pAcct = mnodeGetAcct(pDb->acct); diff --git a/src/mnode/src/mnodeTable.c b/src/mnode/src/mnodeTable.c index ac7d44b1a6..7b928fe885 100644 --- a/src/mnode/src/mnodeTable.c +++ b/src/mnode/src/mnodeTable.c @@ -375,6 +375,14 @@ static void mnodeCleanupChildTables() { tsChildTableSdb = NULL; } +int64_t mnodeGetSuperTableNum() { + return sdbGetNumOfRows(tsSuperTableSdb); +} + +int64_t mnodeGetChildTableNum() { + return sdbGetNumOfRows(tsChildTableSdb); +} + static void mnodeAddTableIntoStable(SSuperTableObj *pStable, SChildTableObj *pCtable) { atomic_add_fetch_32(&pStable->numOfTables, 1); diff --git a/src/mnode/src/mnodeVgroup.c b/src/mnode/src/mnodeVgroup.c index bfeff1f4cb..e1c81db0ac 100644 --- a/src/mnode/src/mnodeVgroup.c +++ b/src/mnode/src/mnodeVgroup.c @@ -605,6 +605,10 @@ void mnodeCleanupVgroups() { tsVgroupSdb = NULL; } +int64_t mnodeGetVgroupNum() { + return sdbGetNumOfRows(tsVgroupSdb); +} + static int32_t mnodeGetVgroupMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) { SDbObj *pDb = mnodeGetDb(pShow->db); if (pDb == NULL) { From f2e9e5bf61b210d1c0bbb4989c16e9e97a46a016 Mon Sep 17 00:00:00 2001 From: Hui Li Date: Thu, 6 Aug 2020 10:47:34 +0800 Subject: [PATCH 31/38] [TD-1076] --- src/kit/CMakeLists.txt | 4 +- src/kit/taosnetwork/CMakeLists.txt | 10 +++ src/kit/taosnetwork/client.c | 86 +++++++++++++++++--------- src/kit/taosnetwork/server.c | 98 ++++++++++++++++-------------- 4 files changed, 124 insertions(+), 74 deletions(-) create mode 100644 src/kit/taosnetwork/CMakeLists.txt diff --git a/src/kit/CMakeLists.txt b/src/kit/CMakeLists.txt index df3ce10001..7095d79755 100644 --- a/src/kit/CMakeLists.txt +++ b/src/kit/CMakeLists.txt @@ -4,4 +4,6 @@ PROJECT(TDengine) ADD_SUBDIRECTORY(shell) ADD_SUBDIRECTORY(taosdemo) ADD_SUBDIRECTORY(taosdump) -ADD_SUBDIRECTORY(taosmigrate) \ No newline at end of file +ADD_SUBDIRECTORY(taosmigrate) +#ADD_SUBDIRECTORY(taosClusterTest) +ADD_SUBDIRECTORY(taosnetwork) diff --git a/src/kit/taosnetwork/CMakeLists.txt b/src/kit/taosnetwork/CMakeLists.txt new file mode 100644 index 0000000000..a7412b196d --- /dev/null +++ b/src/kit/taosnetwork/CMakeLists.txt @@ -0,0 +1,10 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +PROJECT(TDengine) + +IF ((TD_LINUX_64) OR (TD_LINUX_32 AND TD_ARM)) + AUX_SOURCE_DIRECTORY(. SRC) + ADD_EXECUTABLE(taosClient client.c) + ADD_EXECUTABLE(taosServer server.c) + TARGET_LINK_LIBRARIES( taosServer -lpthread -lm -lrt ) + TARGET_LINK_LIBRARIES( taosClient -lpthread -lm -lrt ) +ENDIF () diff --git a/src/kit/taosnetwork/client.c b/src/kit/taosnetwork/client.c index c51c1ab4ba..a4fc26f22f 100644 --- a/src/kit/taosnetwork/client.c +++ b/src/kit/taosnetwork/client.c @@ -28,23 +28,27 @@ #include #include -#define BUFFER_SIZE 200 +#define MAX_PKG_LEN (16*1000) +#define BUFFER_SIZE (MAX_PKG_LEN + 1024) typedef struct { int port; char *host; + uint16_t pktLen; } info_s; typedef struct Arguments { char * host; uint16_t port; uint16_t max_port; + uint16_t pktLen; } SArguments; static struct argp_option options[] = { {0, 'h', "host", 0, "The host to connect to TDEngine. Default is localhost.", 0}, - {0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6041.", 1}, - {0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6050.", 2}}; + {0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6030.", 1}, + {0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6060.", 2}, + {0, 'l', "test pkg len", 0, "The len of pkg for test. Default is 1000 Bytes, max not greater than 16k Bytes.\nNotes: This parameter must be consistent between the client and the server.", 3}}; static error_t parse_opt(int key, char *arg, struct argp_state *state) { @@ -59,6 +63,12 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { case 'm': arguments->max_port = atoi(arg); break; + case 'l': + arguments->pktLen = atoi(arg); + break; + default: + printf("unknow parameter!\n"); + break; } return 0; } @@ -75,7 +85,7 @@ int checkTcpPort(info_s *info) { char recvbuf[BUFFER_SIZE]; int iDataNum; if ((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) { - perror("socket"); + printf("socket() fail: %s\n", strerror(errno)); return -1; } serverAddr.sin_family = AF_INET; @@ -85,26 +95,30 @@ int checkTcpPort(info_s *info) { //printf("=================================\n"); if (connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) { - perror("connect"); + printf("connect() fail: %s\n", strerror(errno)); return -1; } //printf("Connect to: %s:%d...success\n", host, port); + memset(sendbuf, 0, BUFFER_SIZE); + memset(recvbuf, 0, BUFFER_SIZE); - sprintf(sendbuf, "send port_%d", port); - send(clientSocket, sendbuf, strlen(sendbuf), 0); - //printf("Send msg_%d: %s\n", port, sendbuf); + sprintf(sendbuf, "client send tcp pkg to %s:%d, content: 1122334455", host, port); + sprintf(sendbuf + info->pktLen - 16, "1122334455667788"); + + send(clientSocket, sendbuf, info->pktLen, 0); - recvbuf[0] = '\0'; iDataNum = recv(clientSocket, recvbuf, BUFFER_SIZE, 0); - recvbuf[iDataNum] = '\0'; - //printf("Read ack msg_%d: %s\n", port, recvbuf); + if (iDataNum < info->pktLen) { + printf("Read ack pkg len: %d, less than req pkg len: %d from tcp port: %d\n", iDataNum, info->pktLen, port); + return -1; + } + //printf("Read ack pkg len:%d from tcp port: %d, buffer: %s %s\n", info->pktLen, port, recvbuf, recvbuf+iDataNum-8); - //printf("=================================\n"); close(clientSocket); return 0; } -void *checkUdpPort(info_s *info) { +int checkUdpPort(info_s *info) { int port = info->port; char *host = info->host; int clientSocket; @@ -117,60 +131,74 @@ void *checkUdpPort(info_s *info) { perror("socket"); return -1; } + serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); serverAddr.sin_addr.s_addr = inet_addr(host); + + memset(sendbuf, 0, BUFFER_SIZE); + memset(recvbuf, 0, BUFFER_SIZE); - sprintf(sendbuf, "send msg port_%d by udp", port); + sprintf(sendbuf, "client send udp pkg to %s:%d, content: 1122334455", host, port); + sprintf(sendbuf + info->pktLen - 16, "1122334455667788"); socklen_t sin_size = sizeof(*(struct sockaddr *)&serverAddr); - int code = sendto(clientSocket, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&serverAddr, (int)sin_size); + int code = sendto(clientSocket, sendbuf, info->pktLen, 0, (struct sockaddr *)&serverAddr, (int)sin_size); if (code < 0) { perror("sendto"); return -1; } - //printf("Send msg_%d by udp: %s\n", port, sendbuf); - - recvbuf[0] = '\0'; iDataNum = recvfrom(clientSocket, recvbuf, BUFFER_SIZE, 0, (struct sockaddr *)&serverAddr, &sin_size); - recvbuf[iDataNum] = '\0'; - //printf("Read ack msg_%d from udp: %s\n", port, recvbuf); + if (iDataNum < info->pktLen) { + printf("Read ack pkg len: %d, less than req pkg len: %d from udp port: %d\n", iDataNum, info->pktLen, port); + return -1; + } + + //printf("Read ack pkg len:%d from udp port: %d, buffer: %s %s\n", info->pktLen, port, recvbuf, recvbuf+iDataNum-8); close(clientSocket); return 0; } int main(int argc, char *argv[]) { - SArguments arguments = {"127.0.0.1", 6030, 6060}; + SArguments arguments = {"127.0.0.1", 6030, 6060, 1000}; info_s info; int ret; argp_parse(&argp, argc, argv, 0, 0, &arguments); + if (arguments.pktLen > MAX_PKG_LEN) { + printf("test pkg len overflow: %d, max len not greater than %d bytes\n", arguments.pktLen, MAX_PKG_LEN); + exit(0); + } - printf("host: %s\tport: %d\tmax_port: %d\n\n", arguments.host, arguments.port, arguments.max_port); + printf("host: %s\tport: %d\tmax_port: %d\tpkgLen: %d\n", arguments.host, arguments.port, arguments.max_port, arguments.pktLen); int port = arguments.port; info.host = arguments.host; + info.pktLen = arguments.pktLen; - for (; port < arguments.max_port; port++) { - printf("test: %s:%d\n", info.host, port); + for (; port <= arguments.max_port; port++) { + //printf("test: %s:%d\n", info.host, port); + printf("\n"); info.port = port; ret = checkTcpPort(&info); if (ret != 0) { - printf("tcp port:%d test fail.", port); + printf("tcp port:%d test fail.\t\t", port); } else { - printf("tcp port:%d test ok.", port); + printf("tcp port:%d test ok.\t\t", port); } - checkUdpPort(&info); + ret = checkUdpPort(&info); if (ret != 0) { - printf("udp port:%d test fail.", port); + printf("udp port:%d test fail.\t\t", port); } else { - printf("udp port:%d test ok.", port); + printf("udp port:%d test ok.\t\t", port); } } + printf("\n"); + return 0; } diff --git a/src/kit/taosnetwork/server.c b/src/kit/taosnetwork/server.c index f77d23f0a7..18565edb3f 100644 --- a/src/kit/taosnetwork/server.c +++ b/src/kit/taosnetwork/server.c @@ -29,22 +29,26 @@ #include #include -#define BUFFER_SIZE 200 +#define MAX_PKG_LEN (16*1000) +#define BUFFER_SIZE (MAX_PKG_LEN + 1024) typedef struct { int port; + uint16_t pktLen; } info_s; typedef struct Arguments { char * host; uint16_t port; uint16_t max_port; + uint16_t pktLen; } SArguments; static struct argp_option options[] = { {0, 'h', "host", 0, "The host to connect to TDEngine. Default is localhost.", 0}, {0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6041.", 1}, - {0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6050.", 2}}; + {0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6050.", 2}, + {0, 'l', "test pkg len", 0, "The len of pkg for test. Default is 1000 Bytes, max not greater than 16k Bytes.\nNotes: This parameter must be consistent between the client and the server.", 3}}; static error_t parse_opt(int key, char *arg, struct argp_state *state) { @@ -59,6 +63,11 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { case 'm': arguments->max_port = atoi(arg); break; + case 'l': + arguments->pktLen = atoi(arg); + break; + default: + break; } return 0; } @@ -75,10 +84,10 @@ static void *bindTcpPort(void *sarg) { int addr_len = sizeof(clientAddr); int client; char buffer[BUFFER_SIZE]; - int iDataNum; + int iDataNum = 0; if ((serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { - perror("socket"); + printf("socket() fail: %s", strerror(errno)); return NULL; } @@ -88,12 +97,12 @@ static void *bindTcpPort(void *sarg) { server_addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { - perror("connect"); + printf("port:%d bind() fail: %s", port, strerror(errno)); return NULL; } if (listen(serverSocket, 5) < 0) { - perror("listen"); + printf("listen() fail: %s", strerror(errno)); return NULL; } @@ -101,34 +110,39 @@ static void *bindTcpPort(void *sarg) { while (1) { client = accept(serverSocket, (struct sockaddr *)&clientAddr, (socklen_t *)&addr_len); if (client < 0) { - perror("accept"); + printf("accept() fail: %s", strerror(errno)); continue; } - //printf("=================================\n"); - printf("Client ip is %s, Server port is %d\n", inet_ntoa(clientAddr.sin_addr), port); - while (1) { - buffer[0] = '\0'; - iDataNum = recv(client, buffer, BUFFER_SIZE, 0); + memset(buffer, 0, BUFFER_SIZE); + int nleft, nread; + char *ptr = buffer; + nleft = pinfo->pktLen; + while (nleft > 0) { + nread = recv(client, buffer, BUFFER_SIZE, 0); - if (iDataNum < 0) { - perror("recv null"); - continue; - } - if (iDataNum > 0) { - buffer[iDataNum] = '\0'; - //printf("read msg:%s\n", buffer); - if (strcmp(buffer, "quit") == 0) break; - buffer[0] = '\0'; - - sprintf(buffer, "ack port_%d", port); - //printf("send ack msg:%s\n", buffer); - - send(client, buffer, strlen(buffer), 0); + if (nread == 0) { break; - } + } else if (nread < 0) { + if (errno == EINTR) { + continue; + } else { + printf("recv Client: %s pkg from TCP port: %d fail:%s.\n", inet_ntoa(clientAddr.sin_addr), port, strerror(errno)); + close(serverSocket); + return NULL; + } + } else { + nleft -= nread; + ptr += nread; + iDataNum += nread; + } + } + + printf("recv Client: %s pkg from TCP port: %d, pkg len: %d\n", inet_ntoa(clientAddr.sin_addr), port, iDataNum); + if (iDataNum > 0) { + send(client, buffer, iDataNum, 0); + break; } - //printf("=================================\n"); } close(serverSocket); return NULL; @@ -143,7 +157,7 @@ static void *bindUdpPort(void *sarg) { struct sockaddr_in clientAddr; char buffer[BUFFER_SIZE]; int iDataNum; - + if ((serverSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { perror("socket"); return NULL; @@ -160,10 +174,9 @@ static void *bindUdpPort(void *sarg) { } socklen_t sin_size; - //printf("Bind port: %d success\n", port); while (1) { - buffer[0] = '\0'; + memset(buffer, 0, BUFFER_SIZE); sin_size = sizeof(*(struct sockaddr *)&server_addr); @@ -174,19 +187,10 @@ static void *bindUdpPort(void *sarg) { continue; } if (iDataNum > 0) { - //printf("=================================\n"); + printf("recv Client: %s pkg from UDP port: %d, pkg len: %d\n", inet_ntoa(clientAddr.sin_addr), port, iDataNum); + //printf("Read msg from udp:%s ... %s\n", buffer, buffer+iDataNum-16); - printf("Client ip is %s, Server port is %d\n", inet_ntoa(clientAddr.sin_addr), port); - buffer[iDataNum] = '\0'; - //printf("Read msg from udp:%s\n", buffer); - if (strcmp(buffer, "quit") == 0) break; - buffer[0] = '\0'; - - sprintf(buffer, "ack port_%d by udp", port); - //printf("Send ack msg by udp:%s\n", buffer); - - sendto(serverSocket, buffer, strlen(buffer), 0, (struct sockaddr *)&clientAddr, (int)sin_size); - //printf("=================================\n"); + sendto(serverSocket, buffer, iDataNum, 0, (struct sockaddr *)&clientAddr, (int)sin_size); } } @@ -196,8 +200,13 @@ static void *bindUdpPort(void *sarg) { int main(int argc, char *argv[]) { - SArguments arguments = {"127.0.0.1", 6030, 6060}; + SArguments arguments = {"127.0.0.1", 6030, 6060, 1000}; argp_parse(&argp, argc, argv, 0, 0, &arguments); + if (arguments.pktLen > MAX_PKG_LEN) { + printf("test pkg len overflow: %d, max len not greater than %d bytes\n", arguments.pktLen, MAX_PKG_LEN); + exit(0); + } + int port = arguments.port; int num = arguments.max_port - arguments.port + 1; @@ -212,6 +221,7 @@ int main(int argc, char *argv[]) { for (size_t i = 0; i < num; i++) { info_s *tcpInfo = tinfos + i; tcpInfo->port = port + i; + tcpInfo->pktLen = arguments.pktLen; if (pthread_create(pids + i, NULL, bindTcpPort, tcpInfo) != 0) { From c755056d75a69c48a3148260b99cf468570500e6 Mon Sep 17 00:00:00 2001 From: Hui Li Date: Thu, 6 Aug 2020 10:58:01 +0800 Subject: [PATCH 32/38] [TD-1076] --- src/kit/taosnetwork/client.c | 29 ++++++++++++++++++++++++++--- src/kit/taosnetwork/server.c | 4 ++-- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/kit/taosnetwork/client.c b/src/kit/taosnetwork/client.c index a4fc26f22f..26e292a1be 100644 --- a/src/kit/taosnetwork/client.c +++ b/src/kit/taosnetwork/client.c @@ -28,7 +28,7 @@ #include #include -#define MAX_PKG_LEN (16*1000) +#define MAX_PKG_LEN (64*1000) #define BUFFER_SIZE (MAX_PKG_LEN + 1024) typedef struct { @@ -107,9 +107,32 @@ int checkTcpPort(info_s *info) { send(clientSocket, sendbuf, info->pktLen, 0); - iDataNum = recv(clientSocket, recvbuf, BUFFER_SIZE, 0); + memset(recvbuf, 0, BUFFER_SIZE); + int nleft, nread; + char *ptr = recvbuf; + nleft = info->pktLen; + while (nleft > 0) { + nread = recv(clientSocket, ptr, BUFFER_SIZE, 0);; + + if (nread == 0) { + break; + } else if (nread < 0) { + if (errno == EINTR) { + continue; + } else { + printf("recv ack pkg from TCP port: %d fail:%s.\n", port, strerror(errno)); + close(clientSocket); + return -1; + } + } else { + nleft -= nread; + ptr += nread; + iDataNum += nread; + } + } + if (iDataNum < info->pktLen) { - printf("Read ack pkg len: %d, less than req pkg len: %d from tcp port: %d\n", iDataNum, info->pktLen, port); + printf("recv ack pkg len: %d, less than req pkg len: %d from tcp port: %d\n", iDataNum, info->pktLen, port); return -1; } //printf("Read ack pkg len:%d from tcp port: %d, buffer: %s %s\n", info->pktLen, port, recvbuf, recvbuf+iDataNum-8); diff --git a/src/kit/taosnetwork/server.c b/src/kit/taosnetwork/server.c index 18565edb3f..b18fbde46e 100644 --- a/src/kit/taosnetwork/server.c +++ b/src/kit/taosnetwork/server.c @@ -29,7 +29,7 @@ #include #include -#define MAX_PKG_LEN (16*1000) +#define MAX_PKG_LEN (64*1000) #define BUFFER_SIZE (MAX_PKG_LEN + 1024) typedef struct { @@ -119,7 +119,7 @@ static void *bindTcpPort(void *sarg) { char *ptr = buffer; nleft = pinfo->pktLen; while (nleft > 0) { - nread = recv(client, buffer, BUFFER_SIZE, 0); + nread = recv(client, ptr, BUFFER_SIZE, 0); if (nread == 0) { break; From 012c2730137289591d73ab03a2ce19e365086673 Mon Sep 17 00:00:00 2001 From: Hui Li Date: Thu, 6 Aug 2020 10:59:44 +0800 Subject: [PATCH 33/38] [TD-1076] --- src/kit/taosnetwork/client.c | 2 +- src/kit/taosnetwork/server.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/kit/taosnetwork/client.c b/src/kit/taosnetwork/client.c index 26e292a1be..9f51f55d93 100644 --- a/src/kit/taosnetwork/client.c +++ b/src/kit/taosnetwork/client.c @@ -48,7 +48,7 @@ static struct argp_option options[] = { {0, 'h', "host", 0, "The host to connect to TDEngine. Default is localhost.", 0}, {0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6030.", 1}, {0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6060.", 2}, - {0, 'l', "test pkg len", 0, "The len of pkg for test. Default is 1000 Bytes, max not greater than 16k Bytes.\nNotes: This parameter must be consistent between the client and the server.", 3}}; + {0, 'l', "test pkg len", 0, "The len of pkg for test. Default is 1000 Bytes, max not greater than 64k Bytes.\nNotes: This parameter must be consistent between the client and the server.", 3}}; static error_t parse_opt(int key, char *arg, struct argp_state *state) { diff --git a/src/kit/taosnetwork/server.c b/src/kit/taosnetwork/server.c index b18fbde46e..403faec91b 100644 --- a/src/kit/taosnetwork/server.c +++ b/src/kit/taosnetwork/server.c @@ -47,8 +47,8 @@ typedef struct Arguments { static struct argp_option options[] = { {0, 'h', "host", 0, "The host to connect to TDEngine. Default is localhost.", 0}, {0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6041.", 1}, - {0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6050.", 2}, - {0, 'l', "test pkg len", 0, "The len of pkg for test. Default is 1000 Bytes, max not greater than 16k Bytes.\nNotes: This parameter must be consistent between the client and the server.", 3}}; + {0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6060.", 2}, + {0, 'l', "test pkg len", 0, "The len of pkg for test. Default is 1000 Bytes, max not greater than 64k Bytes.\nNotes: This parameter must be consistent between the client and the server.", 3}}; static error_t parse_opt(int key, char *arg, struct argp_state *state) { From 25998a7d92a521322dc9b384ba749d0ad6b8cd00 Mon Sep 17 00:00:00 2001 From: Hui Li Date: Thu, 6 Aug 2020 11:11:44 +0800 Subject: [PATCH 34/38] [TD-1076] --- src/kit/taosnetwork/client.c | 4 ++-- src/kit/taosnetwork/server.c | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/kit/taosnetwork/client.c b/src/kit/taosnetwork/client.c index 9f51f55d93..4b72c5c859 100644 --- a/src/kit/taosnetwork/client.c +++ b/src/kit/taosnetwork/client.c @@ -66,9 +66,9 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { case 'l': arguments->pktLen = atoi(arg); break; + default: - printf("unknow parameter!\n"); - break; + return ARGP_ERR_UNKNOWN; } return 0; } diff --git a/src/kit/taosnetwork/server.c b/src/kit/taosnetwork/server.c index 403faec91b..1c3bc6fa09 100644 --- a/src/kit/taosnetwork/server.c +++ b/src/kit/taosnetwork/server.c @@ -66,8 +66,9 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { case 'l': arguments->pktLen = atoi(arg); break; + default: - break; + return ARGP_ERR_UNKNOWN; } return 0; } From 9ecfffd9b215101936418545d28446ce45c2ef91 Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Thu, 6 Aug 2020 11:23:40 +0800 Subject: [PATCH 35/38] TD-1082: fix jdbc failed tests --- .../test/java/com/taosdata/jdbc/AsyncSubscribeTest.java | 3 ++- .../src/test/java/com/taosdata/jdbc/ResultSetTest.java | 9 ++++----- .../src/test/java/com/taosdata/jdbc/SubscribeTest.java | 3 ++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/AsyncSubscribeTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/AsyncSubscribeTest.java index 7f2314d295..c14624e683 100644 --- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/AsyncSubscribeTest.java +++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/AsyncSubscribeTest.java @@ -42,7 +42,8 @@ public class AsyncSubscribeTest extends BaseTest { long ts = System.currentTimeMillis(); for (int i = 0; i < 2; i++) { ts += i; - statement.executeUpdate("insert into \" + dbName + \".\" + tName + \" values (" + ts + ", " + (100 + i) + ", " + i + ")"); + String sql = "insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")"; + statement.executeUpdate(sql); } } diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java index 5d86840ec3..a0b9c051c6 100644 --- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java +++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java @@ -71,7 +71,7 @@ public class ResultSetTest extends BaseTest { } try { - statement.executeQuery("select * from " + dbName + "." + tName); + statement.executeQuery("select * from " + dbName + "." + tName + " where ts = " + ts); resSet = statement.getResultSet(); System.out.println(((TSDBResultSet) resSet).getRowData()); while (resSet.next()) { @@ -806,9 +806,9 @@ public class ResultSetTest extends BaseTest { @Test public void testBatch() throws SQLException { - String[] sqls = new String[]{"insert into test.t0 values (1496732686001,2147483600,1496732687000,3.1415925,3.1415926\n" + - "535897,\"涛思数据,强~!\",12,12,\"TDengine is powerful\")", "insert into test.t0 values (1496732686002,2147483600,1496732687000,3.1415925,3.1415926\n" + - "535897,\"涛思数据,强~!\",12,12,\"TDengine is powerful\")"}; + String[] sqls = new String[]{"insert into test.t0 values (1496732686001,2147483600,1496732687000,3.1415925,3.1415926535897," + + "'涛思数据,强~',12,0,'TDengine is powerful')", "insert into test.t0 values (1496732686002,2147483600,1496732687000,3.1415925,3.1415926535897," + + "'涛思数据,强~',12,1,'TDengine is powerful')"}; for (String sql : sqls) { statement.addBatch(sql); } @@ -816,7 +816,6 @@ public class ResultSetTest extends BaseTest { assertEquals(res.length, 2); statement.clearBatch(); } - @AfterClass public static void close() throws Exception { statement.executeUpdate("drop database " + dbName); diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java index 58e93fbc7f..d7f56ac468 100644 --- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java +++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java @@ -41,7 +41,8 @@ public class SubscribeTest extends BaseTest { long ts = System.currentTimeMillis(); for (int i = 0; i < 2; i++) { ts += i; - statement.executeUpdate("insert into \" + dbName + \".\" + tName + \" values (" + ts + ", " + (100 + i) + ", " + i + ")"); + String sql = "insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")"; + statement.executeUpdate(sql); } } From 0aecda2347b79ea434cdf366d6c246c37fac1e7b Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Thu, 6 Aug 2020 12:50:45 +0800 Subject: [PATCH 36/38] revert code --- src/client/src/tscServer.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c index a040b3ef55..3fd0aa79a6 100644 --- a/src/client/src/tscServer.c +++ b/src/client/src/tscServer.c @@ -1999,8 +1999,7 @@ int tscProcessUseDbRsp(SSqlObj *pSql) { return 0; } -int tscProcessDropDbRsp(SSqlObj *pSql) { - pSql->pTscObj->db[0] = 0; +int tscProcessDropDbRsp(SSqlObj *UNUSED_PARAM(pSql)) { taosCacheEmpty(tscCacheHandle); return 0; } From 6cd6e5c3826fa2e810affdf4ed44ed9ac519cf9a Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Thu, 6 Aug 2020 17:59:33 +0800 Subject: [PATCH 37/38] update taos sql md file --- .../webdocs/markdowndocs/TAOS SQL-ch.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md b/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md index 952fd8f340..3cf811ab66 100644 --- a/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md +++ b/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md @@ -281,6 +281,30 @@ SELECT select_expr [, select_expr ...] [LIMIT limit_val [, OFFSET offset_val]] [>> export_file] ``` +说明:针对 insert 类型的 SQL 语句,我们采用的流式解析策略,在发现后面的错误之前,前面正确的部分SQL仍会执行。下面的sql中,insert语句是无效的,但是d1001仍会被创建。 +```mysql +taos> create table meters(ts timestamp, current float, voltage int, phase float) tags(location binary(30), groupId int); +Query OK, 0 row(s) affected (0.008245s) + +taos> show stables; + name | created_time | columns | tags | tables | +============================================================================================ + meters | 2020-08-06 17:50:27.831 | 4 | 2 | 0 | +Query OK, 1 row(s) in set (0.001029s) + +taos> show tables; +Query OK, 0 row(s) in set (0.000946s) + +taos> insert into d1001 using meters tags('Beijing.Chaoyang', 2); + +DB error: invalid SQL: keyword VALUES or FILE required + +taos> show tables; + table_name | created_time | columns | stable_name | +====================================================================================================== + d1001 | 2020-08-06 17:52:02.097 | 4 | meters | +Query OK, 1 row(s) in set (0.001091s) +``` #### SELECT子句 一个选择子句可以是联合查询(UNION)和另一个查询的子查询(SUBQUERY)。 @@ -314,6 +338,7 @@ taos> SELECT * FROM meters; Query OK, 9 row(s) in set (0.002022s) ``` + 通配符支持表名前缀,以下两个SQL语句均为返回全部的列: ```mysql SELECT * FROM d1001; From fd45fbdeedea267b839ede08524a690930df0802 Mon Sep 17 00:00:00 2001 From: Bomin Zhang Date: Thu, 6 Aug 2020 20:38:07 +0800 Subject: [PATCH 38/38] update default configuration --- packaging/cfg/taos.cfg | 92 +++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 47 deletions(-) diff --git a/packaging/cfg/taos.cfg b/packaging/cfg/taos.cfg index 3a03972e68..5d33da5acc 100644 --- a/packaging/cfg/taos.cfg +++ b/packaging/cfg/taos.cfg @@ -5,20 +5,20 @@ # # ######################################################## -# first full-qualified domain name (FQDN) for TDengine system +# first fully qualified domain name (FQDN) for TDengine system # firstEp hostname1:6030 -# second full-qualified domain name (FQDN) for TDengine system, for cluster edition only +# second fully qualified domain name (FQDN) for TDengine system, for cluster only # secondEp cluster_hostname2:6030 -# the full-qualified domain name (FQDN) of dnode +# local fully qualified domain name (FQDN) # fqdn hostname -# port for MNode connect to Client, default udp/tcp [6030-6040] +# first port number for the connection (10 continuous UDP/TCP port number are used) # serverPort 6030 -# http service port, default tcp [6020] -# httpPort 6020 +# http service port, default tcp [6041] +# httpPort 6041 # log file's directory # logDir /var/log/taos @@ -26,76 +26,73 @@ # data file's directory # dataDir /var/lib/taos -# the arbitrator's full-qualified domain name (FQDN) for TDengine system, for cluster edition only +# the arbitrator's fully qualified domain name (FQDN) for TDengine system, for cluster only # arbitrator arbitrator_hostname:6030 # number of threads per CPU core # numOfThreadsPerCore 1.0 -# the ratio of threads responsible for querying in the total thread -# ratioOfQueryThreads 0.5 - # number of management nodes in the system # numOfMnodes 3 -# if backup vnode directory when remove dnode +# enable/disable backuping vnode directory when removing dnode # vnodeBak 1 -# Whether to start load balancing +# enable/disable load balancing # balance 1 -# optional roles for dnode. 0 - any, 1 - mnode, 2 - dnode +# role for dnode. 0 - any, 1 - mnode, 2 - dnode # role 0 -# max timer control block +# max timer control blocks # maxTmrCtrl 512 -# interval of system monitor +# time interval of system monitor, seconds # monitorInterval 30 -# number of seconds allowed for a dnode to be offline, for cluster version only +# number of seconds allowed for a dnode to be offline, for cluster only # offlineThreshold 8640000 # RPC re-try timer, millisecond # rpcTimer 300 -# RPC maximum time for ack, seconds +# RPC maximum time for ack, seconds. # rpcMaxTime 600 -# interval of DNode report status to MNode, unit is Second, for cluster version only +# time interval of dnode status reporting to mnode, seconds, for cluster only # statusInterval 1 -# interval of Shell send HB to MNode, unit is Second +# time interval of heart beat from shell to dnode, seconds # shellActivityTimer 3 -# duration of to keep tableMeta kept in Cache, seconds +# time of keeping table meta data in cache, seconds # tableMetaKeepTimer 7200 -# Minimum sliding window time +# minimum sliding window time, milli-second # minSlidingTime 10 -# Time window minimum +# minimum time window, milli-second # minIntervalTime 10 -# the max allowed delayed time for launching continuous query. 20ms by default +# maximum delay before launching a stream compution, milli-second # maxStreamCompDelay 20000 -# The minimum time to wait before the first stream execution +# maximum delay before launching a stream computation for the first time, milli-second # maxFirstStreamCompDelay 10000 -# Retry wait time benchmark +# retry delay when a stream computation fails, milli-second # retryStreamCompDelay 10 -# the delayed time for launching each continuous query. 10% of the whole computing time window by default. +# the delayed time for launching a stream computation, from 0.1(default, 10% of whole computing time window) to 0.9 # streamCompDelayRatio 0.1 -# max number of vgroups per db +# max number of vgroups per db, 0 means configured automatically # maxVgroupsPerDb 0 # max number of tables per vnode # maxTablesPerVnode 1000000 -# Step size of increasing table number in vnode +# step size of increasing table number in a vnode # tableIncStepPerVnode 1000 # cache block size (Mbyte) @@ -110,22 +107,22 @@ # number of days to keep DB file # keep 3650 -# min row of records in file block +# minimum rows of records in file block # minRows 100 -# max row of records in file block +# maximum rows of records in file block # maxRows 4096 # enable/disable compression # comp 2 -# set write ahead log (WAL) level +# write ahead log (WAL) level, 0: no wal; 1: write wal, but no fysnc; 2: write wal, and call fsync # walLevel 1 -# When walLevel is set to 2, the cycle of fsync is executed +# if walLevel is set to 2, the cycle of fsync being executed, if set to 0, fsync is called right away # fsync 3000 -# number of replications, for cluster version only +# number of replications, for cluster only # replica 1 # mqtt uri @@ -143,7 +140,7 @@ # max length of an SQL # maxSQLLength 65480 -# Support the maximum number of records allowed for super table time sorting +# the maximum number of records allowed for super table time sorting # maxNumOfOrderedRes 100000 # system time zone @@ -155,31 +152,31 @@ # default system charset # charset UTF-8 -# max number of connections from client for dnode +# max number of connections allowed in dnode # maxShellConns 5000 -# max numerber of connections to one database +# max numerber of connections allowed in client # maxConnections 5000 -# Stop writing logs when the disk size of the log folder is less than this value +# stop writing logs when the disk size of the log folder is less than this value # minimalLogDirGB 0.1 -# Stop writing temporary files when the disk size of the log folder is less than this value +# stop writing temporary files when the disk size of the log folder is less than this value # minimalTmpDirGB 0.1 -# Stop writing data when the disk size of the log folder is less than this value +# stop writing data when the disk size of the log folder is less than this value # minimalDataDirGB 0.1 -# start http service +# enbale/disable http service # http 1 -# start muqq service +# enable/disable muqq service # mqtt 0 -# start system monitor module +# enable/disable system monitor # monitor 1 -# Record the SQL through restful interface +# enable/disable recording the SQL statements via restful interface # httpEnableRecordSql 0 # number of threads used to process http requests @@ -255,11 +252,12 @@ # debug flag for http server # tsdbDebugFlag 131 -# Record the SQL in taos client +# enable/disable recording the SQL in taos client # tscEnableRecordSql 0 -# if generate core file when service crash +# generate core file when service crash # enableCoreFile 1 -# The maximum display width of binary and nchar fields in the shell. The parts exceeding this limit will be hidden -# maxBinaryDisplayWidth 30 \ No newline at end of file +# maximum display width of binary and nchar fields in the shell. The parts exceeding this limit will be hidden +# maxBinaryDisplayWidth 30 +