Merge remote-tracking branch 'origin/3.0' into enh/TD-32190
This commit is contained in:
commit
a8965fa98c
|
@ -138,3 +138,24 @@ tags
|
||||||
*CMakeCache*
|
*CMakeCache*
|
||||||
*CMakeFiles*
|
*CMakeFiles*
|
||||||
.history/
|
.history/
|
||||||
|
*.txt
|
||||||
|
*.tcl
|
||||||
|
*.pc
|
||||||
|
contrib/geos
|
||||||
|
contrib/libuv
|
||||||
|
contrib/pcre2
|
||||||
|
contrib/zlib
|
||||||
|
deps_tmp_CMakeLists.txt.in
|
||||||
|
*.a
|
||||||
|
*.ctest
|
||||||
|
pcre2-config
|
||||||
|
pcre2_test.sh
|
||||||
|
pcre2_grep_test.sh
|
||||||
|
pcre2_chartables.c
|
||||||
|
geos-config
|
||||||
|
config.h
|
||||||
|
pcre2.h
|
||||||
|
zconf.h
|
||||||
|
version.h
|
||||||
|
geos_c.h
|
||||||
|
|
||||||
|
|
|
@ -160,12 +160,21 @@ ELSE ()
|
||||||
CHECK_C_COMPILER_FLAG("-msse4.2" COMPILER_SUPPORT_SSE42)
|
CHECK_C_COMPILER_FLAG("-msse4.2" COMPILER_SUPPORT_SSE42)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
CHECK_C_COMPILER_FLAG("-mfma" COMPILER_SUPPORT_FMA)
|
IF (TD_ARM_64 OR TD_ARM_32)
|
||||||
CHECK_C_COMPILER_FLAG("-mavx" COMPILER_SUPPORT_AVX)
|
SET(COMPILER_SUPPORT_FMA false)
|
||||||
CHECK_C_COMPILER_FLAG("-mavx2" COMPILER_SUPPORT_AVX2)
|
SET(COMPILER_SUPPORT_AVX false)
|
||||||
CHECK_C_COMPILER_FLAG("-mavx512f" COMPILER_SUPPORT_AVX512F)
|
SET(COMPILER_SUPPORT_AVX2 false)
|
||||||
CHECK_C_COMPILER_FLAG("-mavx512vbmi" COMPILER_SUPPORT_AVX512BMI)
|
SET(COMPILER_SUPPORT_AVX512F false)
|
||||||
CHECK_C_COMPILER_FLAG("-mavx512vl" COMPILER_SUPPORT_AVX512VL)
|
SET(COMPILER_SUPPORT_AVX512BMI false)
|
||||||
|
SET(COMPILER_SUPPORT_AVX512VL false)
|
||||||
|
ELSE()
|
||||||
|
CHECK_C_COMPILER_FLAG("-mfma" COMPILER_SUPPORT_FMA)
|
||||||
|
CHECK_C_COMPILER_FLAG("-mavx" COMPILER_SUPPORT_AVX)
|
||||||
|
CHECK_C_COMPILER_FLAG("-mavx2" COMPILER_SUPPORT_AVX2)
|
||||||
|
CHECK_C_COMPILER_FLAG("-mavx512f" COMPILER_SUPPORT_AVX512F)
|
||||||
|
CHECK_C_COMPILER_FLAG("-mavx512vbmi" COMPILER_SUPPORT_AVX512BMI)
|
||||||
|
CHECK_C_COMPILER_FLAG("-mavx512vl" COMPILER_SUPPORT_AVX512VL)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
IF (COMPILER_SUPPORT_SSE42)
|
IF (COMPILER_SUPPORT_SSE42)
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
|
||||||
|
@ -177,15 +186,17 @@ ELSE ()
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfma")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfma")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
IF (COMPILER_SUPPORT_AVX)
|
MESSAGE(STATUS "FMA instructions is ACTIVATED")
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx")
|
ENDIF()
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx")
|
IF (COMPILER_SUPPORT_AVX)
|
||||||
ENDIF()
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx")
|
||||||
IF (COMPILER_SUPPORT_AVX2)
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx")
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2")
|
MESSAGE(STATUS "AVX instructions is ACTIVATED")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
|
ENDIF()
|
||||||
ENDIF()
|
IF (COMPILER_SUPPORT_AVX2)
|
||||||
MESSAGE(STATUS "SIMD instructions (FMA/AVX/AVX2) is ACTIVATED")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2")
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
|
||||||
|
MESSAGE(STATUS "AVX2 instructions is ACTIVATED")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF ("${SIMD_AVX512_SUPPORT}" MATCHES "true")
|
IF ("${SIMD_AVX512_SUPPORT}" MATCHES "true")
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
IF (DEFINED VERNUMBER)
|
IF (DEFINED VERNUMBER)
|
||||||
SET(TD_VER_NUMBER ${VERNUMBER})
|
SET(TD_VER_NUMBER ${VERNUMBER})
|
||||||
ELSE ()
|
ELSE ()
|
||||||
SET(TD_VER_NUMBER "3.3.3.0.alpha")
|
SET(TD_VER_NUMBER "3.3.4.0.alpha")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (DEFINED VERCOMPATIBLE)
|
IF (DEFINED VERCOMPATIBLE)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# stub
|
# stub
|
||||||
ExternalProject_Add(stub
|
ExternalProject_Add(stub
|
||||||
GIT_REPOSITORY https://github.com/coolxv/cpp-stub.git
|
GIT_REPOSITORY https://github.com/coolxv/cpp-stub.git
|
||||||
GIT_TAG 5e903b8e
|
GIT_TAG 3137465194014d66a8402941e80d2bccc6346f51
|
||||||
GIT_SUBMODULES "src"
|
GIT_SUBMODULES "src"
|
||||||
SOURCE_DIR "${TD_CONTRIB_DIR}/cpp-stub"
|
SOURCE_DIR "${TD_CONTRIB_DIR}/cpp-stub"
|
||||||
BINARY_DIR "${TD_CONTRIB_DIR}/cpp-stub/src"
|
BINARY_DIR "${TD_CONTRIB_DIR}/cpp-stub/src"
|
||||||
|
|
|
@ -19,7 +19,7 @@ After TDengine server or client installation, `taos.h` is located at
|
||||||
The dynamic libraries for the TDengine client driver are located in.
|
The dynamic libraries for the TDengine client driver are located in.
|
||||||
|
|
||||||
- Linux: `/usr/local/taos/driver/libtaos.so`
|
- Linux: `/usr/local/taos/driver/libtaos.so`
|
||||||
- Windows: `C:\TDengine\taos.dll`
|
- Windows: `C:\TDengine\driver\taos.dll`
|
||||||
- macOS: `/usr/local/lib/libtaos.dylib`
|
- macOS: `/usr/local/lib/libtaos.dylib`
|
||||||
|
|
||||||
## Supported platforms
|
## Supported platforms
|
||||||
|
|
|
@ -20,6 +20,10 @@ For TDengine 2.x installation packages by version, please visit [here](https://t
|
||||||
|
|
||||||
import Release from "/components/ReleaseV3";
|
import Release from "/components/ReleaseV3";
|
||||||
|
|
||||||
|
## 3.3.3.0
|
||||||
|
|
||||||
|
<Release type="tdengine" version="3.3.3.0" />
|
||||||
|
|
||||||
## 3.3.2.0
|
## 3.3.2.0
|
||||||
|
|
||||||
<Release type="tdengine" version="3.3.2.0" />
|
<Release type="tdengine" version="3.3.2.0" />
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
PROJECT(TDengine)
|
||||||
|
|
||||||
|
IF (TD_LINUX)
|
||||||
|
INCLUDE_DIRECTORIES(. ${TD_SOURCE_DIR}/src/inc ${TD_SOURCE_DIR}/src/client/inc ${TD_SOURCE_DIR}/inc)
|
||||||
|
AUX_SOURCE_DIRECTORY(. SRC)
|
||||||
|
|
||||||
|
add_executable(docs_connect_example "")
|
||||||
|
add_executable(docs_create_db_demo "")
|
||||||
|
add_executable(docs_insert_data_demo "")
|
||||||
|
add_executable(docs_query_data_demo "")
|
||||||
|
add_executable(docs_with_reqid_demo "")
|
||||||
|
add_executable(docs_sml_insert_demo "")
|
||||||
|
add_executable(docs_stmt_insert_demo "")
|
||||||
|
add_executable(docs_tmq_demo "")
|
||||||
|
|
||||||
|
target_sources(docs_connect_example
|
||||||
|
PRIVATE
|
||||||
|
"connect_example.c"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(docs_create_db_demo
|
||||||
|
PRIVATE
|
||||||
|
"create_db_demo.c"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(docs_insert_data_demo
|
||||||
|
PRIVATE
|
||||||
|
"insert_data_demo.c"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(docs_query_data_demo
|
||||||
|
PRIVATE
|
||||||
|
"query_data_demo.c"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(docs_with_reqid_demo
|
||||||
|
PRIVATE
|
||||||
|
"with_reqid_demo.c"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(docs_sml_insert_demo
|
||||||
|
PRIVATE
|
||||||
|
"sml_insert_demo.c"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(docs_stmt_insert_demo
|
||||||
|
PRIVATE
|
||||||
|
"stmt_insert_demo.c"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(docs_tmq_demo
|
||||||
|
PRIVATE
|
||||||
|
"tmq_demo.c"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(docs_connect_example
|
||||||
|
taos
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(docs_create_db_demo
|
||||||
|
taos
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(docs_insert_data_demo
|
||||||
|
taos
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(docs_query_data_demo
|
||||||
|
taos
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(docs_with_reqid_demo
|
||||||
|
taos
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(docs_sml_insert_demo
|
||||||
|
taos
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(docs_stmt_insert_demo
|
||||||
|
taos
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(docs_tmq_demo
|
||||||
|
taos
|
||||||
|
pthread
|
||||||
|
)
|
||||||
|
|
||||||
|
SET_TARGET_PROPERTIES(docs_connect_example PROPERTIES OUTPUT_NAME docs_connect_example)
|
||||||
|
SET_TARGET_PROPERTIES(docs_create_db_demo PROPERTIES OUTPUT_NAME docs_create_db_demo)
|
||||||
|
SET_TARGET_PROPERTIES(docs_insert_data_demo PROPERTIES OUTPUT_NAME docs_insert_data_demo)
|
||||||
|
SET_TARGET_PROPERTIES(docs_query_data_demo PROPERTIES OUTPUT_NAME docs_query_data_demo)
|
||||||
|
SET_TARGET_PROPERTIES(docs_with_reqid_demo PROPERTIES OUTPUT_NAME docs_with_reqid_demo)
|
||||||
|
SET_TARGET_PROPERTIES(docs_sml_insert_demo PROPERTIES OUTPUT_NAME docs_sml_insert_demo)
|
||||||
|
SET_TARGET_PROPERTIES(docs_stmt_insert_demo PROPERTIES OUTPUT_NAME docs_stmt_insert_demo)
|
||||||
|
SET_TARGET_PROPERTIES(docs_tmq_demo PROPERTIES OUTPUT_NAME docs_tmq_demo)
|
||||||
|
ENDIF ()
|
||||||
|
IF (TD_DARWIN)
|
||||||
|
INCLUDE_DIRECTORIES(. ${TD_SOURCE_DIR}/src/inc ${TD_SOURCE_DIR}/src/client/inc ${TD_SOURCE_DIR}/inc)
|
||||||
|
AUX_SOURCE_DIRECTORY(. SRC)
|
||||||
|
ENDIF ()
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Makefile for building TDengine examples on TD Linux platform
|
||||||
|
|
||||||
|
INCLUDE_DIRS =
|
||||||
|
|
||||||
|
TARGETS = connect_example \
|
||||||
|
create_db_demo \
|
||||||
|
insert_data_demo \
|
||||||
|
query_data_demo \
|
||||||
|
with_reqid_demo \
|
||||||
|
sml_insert_demo \
|
||||||
|
stmt_insert_demo \
|
||||||
|
tmq_demo
|
||||||
|
|
||||||
|
SOURCES = connect_example.c \
|
||||||
|
create_db_demo.c \
|
||||||
|
insert_data_demo.c \
|
||||||
|
query_data_demo.c \
|
||||||
|
with_reqid_demo.c \
|
||||||
|
sml_insert_demo.c \
|
||||||
|
stmt_insert_demo.c \
|
||||||
|
tmq_demo.c
|
||||||
|
|
||||||
|
LIBS = -ltaos -lpthread
|
||||||
|
|
||||||
|
|
||||||
|
CFLAGS = -g
|
||||||
|
|
||||||
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
$(TARGETS):
|
||||||
|
$(CC) $(CFLAGS) -o $@ $(wildcard $(@F).c) $(LIBS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(TARGETS)
|
|
@ -15,7 +15,7 @@ TDengine Cloud 大幅减轻了用户在部署、运维等方面的人力负担
|
||||||
|
|
||||||
要在 TDengine Cloud 注册新用户,请遵循以下简易步骤完成注册流程:
|
要在 TDengine Cloud 注册新用户,请遵循以下简易步骤完成注册流程:
|
||||||
|
|
||||||
1. 打开浏览器,访问 TDengine Cloud 的首页:https://cloud.taosdata.com,在右边的“注册”部分,填入自己的姓名以及企业邮箱地址,点击“获取验证码”按钮。
|
1. 打开浏览器,访问 [TDengine Cloud](https://cloud.taosdata.com),在右边的“注册”部分,填入自己的姓名以及企业邮箱地址,点击“获取验证码”按钮。
|
||||||
|
|
||||||
2. 检查企业邮箱,找到主题为“你的 TDengine Cloud 注册账户验证码”的邮件。从邮件内容中复制 6 位验证码,并将其粘贴到注册页面上的“验证码”输入框中。接着,点击“注册 TDengine Cloud”按钮,进入客户信息补全页面。
|
2. 检查企业邮箱,找到主题为“你的 TDengine Cloud 注册账户验证码”的邮件。从邮件内容中复制 6 位验证码,并将其粘贴到注册页面上的“验证码”输入框中。接着,点击“注册 TDengine Cloud”按钮,进入客户信息补全页面。
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ MongoDB 是一个介于关系型数据库与非关系型数据库之间的产品
|
||||||
|
|
||||||
### 1. 新增数据源
|
### 1. 新增数据源
|
||||||
|
|
||||||
在数据写入页面中点击左上角的 **+新增数据源** 按钮进入新增数据源页面,如下图所示:
|
在数据写入页面中点击右上角的 **+新增数据源** 按钮进入新增数据源页面,如下图所示:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
|
@ -206,11 +206,11 @@ http {
|
||||||
|
|
||||||
### 部署 taosX
|
### 部署 taosX
|
||||||
|
|
||||||
如果想使用 TDengine 的数据接入能力,需要部署 taosX 服务,关于它的详细说明和部署请参考[taosX 参考手册](../../reference/components/taosx)。
|
如果想使用 TDengine 的数据接入能力,需要部署 taosX 服务,关于它的详细说明和部署请参考企业版参考手册。
|
||||||
|
|
||||||
### 部署 taosX-Agent
|
### 部署 taosX-Agent
|
||||||
|
|
||||||
有些数据源如 Pi, OPC 等,因为网络条件和数据源访问的限制,taosX 无法直接访问数据源,这种情况下需要部署一个代理服务 taosX-Agent,关于它的详细说明和部署请参考[taosX-Agent 参考手册](../../reference/components/taosx-agent)。
|
有些数据源如 Pi, OPC 等,因为网络条件和数据源访问的限制,taosX 无法直接访问数据源,这种情况下需要部署一个代理服务 taosX-Agent,关于它的详细说明和部署请参考企业版参考手册。
|
||||||
|
|
||||||
### 部署 taos-Explorer
|
### 部署 taos-Explorer
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ dataDir /mnt/data6 2 0
|
||||||
|
|
||||||
|参数名称 | 参数含义 |
|
|参数名称 | 参数含义 |
|
||||||
|:-------------|:-----------------------------------------------|
|
|:-------------|:-----------------------------------------------|
|
||||||
|s3EndPoint | 用户所在地域的 COS 服务域名,支持 http 和 https,bucket 的区域需要与 endpoint 的保持一致,否则无法访问。例如:http://cos.ap-beijing.myqcloud.com |
|
|s3EndPoint | 用户所在地域的 COS 服务域名,支持 http 和 https,bucket 的区域需要与 endpoint 的保持一致,否则无法访问。 |
|
||||||
|s3AccessKey |冒号分隔的用户 SecretId:SecretKey。例如:AKIDsQmwsfKxTo2A6nGVXZN0UlofKn6JRRSJ:lIdoy99ygEacU7iHfogaN2Xq0yumSm1E |
|
|s3AccessKey |冒号分隔的用户 SecretId:SecretKey。例如:AKIDsQmwsfKxTo2A6nGVXZN0UlofKn6JRRSJ:lIdoy99ygEacU7iHfogaN2Xq0yumSm1E |
|
||||||
|s3BucketName | 存储桶名称,减号后面是用户注册 COS 服务的 AppId。其中 AppId 是 COS 特有,AWS 和阿里云都没有,配置时需要作为 bucket name 的一部分,使用减号分隔。参数值均为字符串类型,但不需要引号。例如:test0711-1309024725 |
|
|s3BucketName | 存储桶名称,减号后面是用户注册 COS 服务的 AppId。其中 AppId 是 COS 特有,AWS 和阿里云都没有,配置时需要作为 bucket name 的一部分,使用减号分隔。参数值均为字符串类型,但不需要引号。例如:test0711-1309024725 |
|
||||||
|s3UploadDelaySec | data 文件持续多长时间不再变动后上传至 s3,单位:秒。最小值:1;最大值:2592000 (30天),默认值 60 秒 |
|
|s3UploadDelaySec | data 文件持续多长时间不再变动后上传至 s3,单位:秒。最小值:1;最大值:2592000 (30天),默认值 60 秒 |
|
||||||
|
|
|
@ -83,7 +83,7 @@ taosx replica start
|
||||||
```shell
|
```shell
|
||||||
taosx replica start -f td1:6030 -t td2:6030
|
taosx replica start -f td1:6030 -t td2:6030
|
||||||
```
|
```
|
||||||
该示例命令会自动创建除 information_schema、performance_schema、log、audit 库之外的同步任务。可以使用 http://td2:6041 指定该 endpoint 使用 websocket 接口(默认是原生接口)。也可以指定数据库同步:taosx replica start -f td1:6030 -t td2:6030 db1 仅创建指定的数据库同步任务。
|
该示例命令会自动创建除 information_schema、performance_schema、log、audit 库之外的同步任务。可以使用 `http://td2:6041` 指定该 endpoint 使用 websocket 接口(默认是原生接口)。也可以指定数据库同步:taosx replica start -f td1:6030 -t td2:6030 db1 仅创建指定的数据库同步任务。
|
||||||
|
|
||||||
2. 方法二
|
2. 方法二
|
||||||
|
|
||||||
|
|
|
@ -347,14 +347,18 @@ curl -X DELETE http://localhost:8083/connectors/TDengineSourceConnector
|
||||||
以下配置项对 TDengine Sink Connector 和 TDengine Source Connector 均适用。
|
以下配置项对 TDengine Sink Connector 和 TDengine Source Connector 均适用。
|
||||||
|
|
||||||
1. `name`: connector 名称。
|
1. `name`: connector 名称。
|
||||||
2. `connector.class`: connector 的完整类名, 如: com.taosdata.kafka.connect.sink.TDengineSinkConnector。
|
1. `connector.class`: connector 的完整类名, 如: com.taosdata.kafka.connect.sink.TDengineSinkConnector。
|
||||||
3. `tasks.max`: 最大任务数, 默认 1。
|
1. `tasks.max`: 最大任务数, 默认 1。
|
||||||
4. `topics`: 需要同步的 topic 列表, 多个用逗号分隔, 如 `topic1,topic2`。
|
1. `topics`: 需要同步的 topic 列表, 多个用逗号分隔, 如 `topic1,topic2`。
|
||||||
5. `connection.url`: TDengine JDBC 连接字符串, 如 `jdbc:TAOS://127.0.0.1:6030`。
|
1. `connection.url`: TDengine JDBC 连接字符串, 如 `jdbc:TAOS://127.0.0.1:6030`。
|
||||||
6. `connection.user`: TDengine 用户名, 默认 root。
|
1. `connection.user`: TDengine 用户名, 默认 root。
|
||||||
7. `connection.password` :TDengine 用户密码, 默认 taosdata。
|
1. `connection.password` :TDengine 用户密码, 默认 taosdata。
|
||||||
8. `connection.attempts` :最大尝试连接次数。默认 3。
|
1. `connection.attempts` :最大尝试连接次数。默认 3。
|
||||||
9. `connection.backoff.ms` : 创建连接失败重试时间隔时间,单位为 ms。 默认 5000。
|
1. `connection.backoff.ms` : 创建连接失败重试时间隔时间,单位为 ms。 默认 5000。
|
||||||
|
1. `data.precision`: 使用 InfluxDB 行协议格式时,时间戳的精度。可选值为:
|
||||||
|
1. ms : 表示毫秒
|
||||||
|
1. us : 表示微秒
|
||||||
|
1. ns : 表示纳秒
|
||||||
|
|
||||||
### TDengine Sink Connector 特有的配置
|
### TDengine Sink Connector 特有的配置
|
||||||
|
|
||||||
|
@ -367,30 +371,22 @@ curl -X DELETE http://localhost:8083/connectors/TDengineSourceConnector
|
||||||
1. line :代表 InfluxDB 行协议格式
|
1. line :代表 InfluxDB 行协议格式
|
||||||
2. json : 代表 OpenTSDB JSON 格式
|
2. json : 代表 OpenTSDB JSON 格式
|
||||||
3. telnet :代表 OpenTSDB Telnet 行协议格式
|
3. telnet :代表 OpenTSDB Telnet 行协议格式
|
||||||
7. `data.precision`: 使用 InfluxDB 行协议格式时,时间戳的精度。可选值为:
|
|
||||||
1. ms : 表示毫秒
|
|
||||||
2. us : 表示微秒
|
|
||||||
3. ns : 表示纳秒。
|
|
||||||
|
|
||||||
### TDengine Source Connector 特有的配置
|
### TDengine Source Connector 特有的配置
|
||||||
|
|
||||||
1. `connection.database`: 源数据库名称,无缺省值。
|
1. `connection.database`: 源数据库名称,无缺省值。
|
||||||
2. `topic.prefix`: 数据导入 kafka 时使用的 topic 名称的前缀。默认为空字符串 ""。
|
1. `topic.prefix`: 数据导入 kafka 时使用的 topic 名称的前缀。默认为空字符串 ""。
|
||||||
3. `timestamp.initial`: 数据同步起始时间。格式为'yyyy-MM-dd HH:mm:ss',若未指定则从指定 DB 中最早的一条记录开始。
|
1. `timestamp.initial`: 数据同步起始时间。格式为'yyyy-MM-dd HH:mm:ss',若未指定则从指定 DB 中最早的一条记录开始。
|
||||||
4. `poll.interval.ms`: 检查是否有新建或删除的表的时间间隔,单位为 ms。默认为 1000。
|
1. `poll.interval.ms`: 检查是否有新建或删除的表的时间间隔,单位为 ms。默认为 1000。
|
||||||
5. `fetch.max.rows` : 检索数据库时最大检索条数。 默认为 100。
|
1. `fetch.max.rows` : 检索数据库时最大检索条数。 默认为 100。
|
||||||
6. `query.interval.ms`: 从 TDengine 一次读取数据的时间跨度,需要根据表中的数据特征合理配置,避免一次查询的数据量过大或过小;在具体的环境中建议通过测试设置一个较优值,默认值为 0,即获取到当前最新时间的所有数据。
|
1. `query.interval.ms`: 从 TDengine 一次读取数据的时间跨度,需要根据表中的数据特征合理配置,避免一次查询的数据量过大或过小;在具体的环境中建议通过测试设置一个较优值,默认值为 0,即获取到当前最新时间的所有数据。
|
||||||
7. `out.format` : 结果集输出格式。`line` 表示输出格式为 InfluxDB Line 协议格式,`json` 表示输出格式是 json。默认为 line。
|
1. `out.format` : 结果集输出格式。`line` 表示输出格式为 InfluxDB Line 协议格式,`json` 表示输出格式是 json。默认为 line。
|
||||||
8. `data.precision`: 使用 InfluxDB 行协议格式时,时间戳的精度。可选值为:
|
1. `topic.per.stable`: 如果设置为 true,表示一个超级表对应一个 Kafka topic,topic的命名规则 `<topic.prefix><topic.delimiter><connection.database><topic.delimiter><stable.name>`;如果设置为 false,则指定的 DB 中的所有数据进入一个 Kafka topic,topic 的命名规则为 `<topic.prefix><topic.delimiter><connection.database>`
|
||||||
1. ms : 表示毫秒,
|
1. `topic.ignore.db`: topic 命名规则是否包含 database 名称,true 表示规则为 `<topic.prefix><topic.delimiter><stable.name>`,false 表示规则为 `<topic.prefix><topic.delimiter><connection.database><topic.delimiter><stable.name>`,默认 false。此配置项在 `topic.per.stable` 设置为 false 时不生效。
|
||||||
2. us : 表示微秒
|
1. `topic.delimiter`: topic 名称分割符,默认为 `-`。
|
||||||
3. ns : 表示纳秒。
|
1. `read.method`: 从 TDengine 读取数据方式,query 或是 subscription。默认为 subscription。
|
||||||
9. `topic.per.stable`: 如果设置为 true,表示一个超级表对应一个 Kafka topic,topic的命名规则 `<topic.prefix><topic.delimiter><connection.database><topic.delimiter><stable.name>`;如果设置为 false,则指定的 DB 中的所有数据进入一个 Kafka topic,topic 的命名规则为 `<topic.prefix><topic.delimiter><connection.database>`
|
1. `subscription.group.id`: 指定 TDengine 数据订阅的组 id,当 `read.method` 为 subscription 时,此项为必填项。
|
||||||
10. `topic.ignore.db`: topic 命名规则是否包含 database 名称,true 表示规则为 `<topic.prefix><topic.delimiter><stable.name>`,false 表示规则为 `<topic.prefix><topic.delimiter><connection.database><topic.delimiter><stable.name>`,默认 false。此配置项在 `topic.per.stable` 设置为 false 时不生效。
|
1. `subscription.from`: 指定 TDengine 数据订阅起始位置,latest 或是 earliest。默认为 latest。
|
||||||
11. `topic.delimiter`: topic 名称分割符,默认为 `-`。
|
|
||||||
12. `read.method`: 从 TDengine 读取数据方式,query 或是 subscription。默认为 subscription。
|
|
||||||
13. `subscription.group.id`: 指定 TDengine 数据订阅的组 id,当 `read.method` 为 subscription 时,此项为必填项。
|
|
||||||
14. `subscription.from`: 指定 TDengine 数据订阅起始位置,latest 或是 earliest。默认为 latest。
|
|
||||||
|
|
||||||
## 其他说明
|
## 其他说明
|
||||||
|
|
||||||
|
|
|
@ -239,7 +239,7 @@ d4,2017-07-14T10:40:00.006+08:00,-2.740636,10,-0.893545,7,California.LosAngles
|
||||||
|
|
||||||
- `plugins_home`:外部数据源连接器所在目录。
|
- `plugins_home`:外部数据源连接器所在目录。
|
||||||
- `data_dir`:数据文件存放目录。
|
- `data_dir`:数据文件存放目录。
|
||||||
- `instanceId`:当前 explorer 服务的实例 ID,如果同一台机器上启动了多个 explorer 实例,必须保证各个实例的实例 ID 互不相同。
|
- `instanceId`:当前 taosX 服务的实例 ID,如果同一台机器上启动了多个 taosX 实例,必须保证各个实例的实例 ID 互不相同。
|
||||||
- `logs_home`:日志文件存放目录,`taosX` 日志文件的前缀为 `taosx.log`,外部数据源有自己的日志文件名前缀。已弃用,请使用 `log.path` 代替。
|
- `logs_home`:日志文件存放目录,`taosX` 日志文件的前缀为 `taosx.log`,外部数据源有自己的日志文件名前缀。已弃用,请使用 `log.path` 代替。
|
||||||
- `log_level`:日志等级,可选级别包括 `error`、`warn`、`info`、`debug`、`trace`,默认值为 `info`。已弃用,请使用 `log.level` 代替。
|
- `log_level`:日志等级,可选级别包括 `error`、`warn`、`info`、`debug`、`trace`,默认值为 `info`。已弃用,请使用 `log.level` 代替。
|
||||||
- `log_keep_days`:日志的最大存储天数,`taosX` 日志将按天划分为不同的文件。已弃用,请使用 `log.keepDays` 代替。
|
- `log_keep_days`:日志的最大存储天数,`taosX` 日志将按天划分为不同的文件。已弃用,请使用 `log.keepDays` 代替。
|
||||||
|
|
|
@ -11,6 +11,7 @@ sidebar_label: taosX-Agent
|
||||||
|
|
||||||
- `endpoint`: 必填,`taosX` 的 GRPC 服务地址。
|
- `endpoint`: 必填,`taosX` 的 GRPC 服务地址。
|
||||||
- `token`: 必填,在 `Explorer` 上创建 `Agent` 时,产生的 Token。
|
- `token`: 必填,在 `Explorer` 上创建 `Agent` 时,产生的 Token。
|
||||||
|
- `instanceId`:当前 taosx-agent 服务的实例 ID,如果同一台机器上启动了多个 taosx-agent 实例,必须保证各个实例的实例 ID 互不相同。
|
||||||
- `compression`: 非必填,可配置为 `ture` 或 `false`, 默认为 `false`。配置为`true`, 则开启 `Agent` 和 `taosX` 通信数据压缩。
|
- `compression`: 非必填,可配置为 `ture` 或 `false`, 默认为 `false`。配置为`true`, 则开启 `Agent` 和 `taosX` 通信数据压缩。
|
||||||
- `log_level`: 非必填,日志级别,默认为 `info`, 同 `taosX` 一样,支持 `error`,`warn`,`info`,`debug`,`trace` 五级。已弃用,请使用 `log.level` 代替。
|
- `log_level`: 非必填,日志级别,默认为 `info`, 同 `taosX` 一样,支持 `error`,`warn`,`info`,`debug`,`trace` 五级。已弃用,请使用 `log.level` 代替。
|
||||||
- `log_keep_days`:非必填,日志保存天数,默认为 `30` 天。已弃用,请使用 `log.keepDays` 代替。
|
- `log_keep_days`:非必填,日志保存天数,默认为 `30` 天。已弃用,请使用 `log.keepDays` 代替。
|
||||||
|
@ -37,7 +38,7 @@ sidebar_label: taosX-Agent
|
||||||
# server instance id
|
# server instance id
|
||||||
#
|
#
|
||||||
# The instanceId of each instance is unique on the host
|
# The instanceId of each instance is unique on the host
|
||||||
# instanceId = 64
|
# instanceId = 48
|
||||||
|
|
||||||
# enable communication data compression between Agent and taosX
|
# enable communication data compression between Agent and taosX
|
||||||
#
|
#
|
||||||
|
|
|
@ -132,7 +132,7 @@ cors = true
|
||||||
- `cluster`:TDengine 集群的 taosAdapter 地址。
|
- `cluster`:TDengine 集群的 taosAdapter 地址。
|
||||||
- `cluster_native`:TDengine 集群的原生连接地址,默认关闭。
|
- `cluster_native`:TDengine 集群的原生连接地址,默认关闭。
|
||||||
- `x_api`:taosX 的 gRPC 地址。
|
- `x_api`:taosX 的 gRPC 地址。
|
||||||
- `grpc`:taosX 代理向 taosX 建立连接的 gRPC 地址.
|
- `grpc`:taosX 代理向 taosX 建立连接的 gRPC 地址。
|
||||||
- `cors`:CORS 配置开关,默认为 `false`。当为 `true` 时,允许跨域访问。
|
- `cors`:CORS 配置开关,默认为 `false`。当为 `true` 时,允许跨域访问。
|
||||||
- `ssl.certificate`:SSL 证书(如果同时设置了 certificate 与 certificate_key 两个参数,则启用 HTTPS 服务,否则不启用)。
|
- `ssl.certificate`:SSL 证书(如果同时设置了 certificate 与 certificate_key 两个参数,则启用 HTTPS 服务,否则不启用)。
|
||||||
- `ssl.certificate_key`:SSL 证书密钥。
|
- `ssl.certificate_key`:SSL 证书密钥。
|
||||||
|
|
|
@ -79,6 +79,18 @@ CREATE TABLE [IF NOT EXISTS] tb_name1 USING stb_name TAGS (tag_value1, ...) [IF
|
||||||
|
|
||||||
批量建表方式要求数据表必须以超级表为模板。 在不超出 SQL 语句长度限制的前提下,单条语句中的建表数量建议控制在 1000 ~ 3000 之间,将会获得比较理想的建表速度。
|
批量建表方式要求数据表必须以超级表为模板。 在不超出 SQL 语句长度限制的前提下,单条语句中的建表数量建议控制在 1000 ~ 3000 之间,将会获得比较理想的建表速度。
|
||||||
|
|
||||||
|
### 使用 CSV 批量创建子表
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE [IF NOT EXISTS] USING [db_name.]stb_name (field1_name [, field2_name] ....) FILE csv_file_path;
|
||||||
|
```
|
||||||
|
|
||||||
|
**参数说明**
|
||||||
|
|
||||||
|
1. FILE 语法表示数据来自于 CSV 文件(英文逗号分隔、英文单引号括住每个值),CSV 文件无需表头。CSV 文件中应仅包含 table name 与 tag 值。如需插入数据,请参考数据写入章节。
|
||||||
|
2. 为指定的 stb_name 创建子表,该超级表必须已经存在。
|
||||||
|
3. field_name 列表顺序与 CSV 文件各列内容顺序一致。列表中不允许出现重复项,且必须包含 `tbname`,可包含零个或多个超级表中已定义的标签列。未包含在列表中的标签值将被设置为 NULL。
|
||||||
|
|
||||||
## 修改普通表
|
## 修改普通表
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
|
|
|
@ -1458,7 +1458,7 @@ WEEKDAY(expr)
|
||||||
**适用于**: 表和超级表。
|
**适用于**: 表和超级表。
|
||||||
|
|
||||||
**使用说明**:
|
**使用说明**:
|
||||||
- 返回值 0 代表周日,1 代表周一 ... 6 代表周六。
|
- 返回值 0 代表周一,1 代表周二 ... 6 代表周日。
|
||||||
- 若 `expr` 为 NULL,返回 NULL。
|
- 若 `expr` 为 NULL,返回 NULL。
|
||||||
- 输入时间戳的精度由所查询表的精度确定, 若未指定表, 则精度为毫秒.
|
- 输入时间戳的精度由所查询表的精度确定, 若未指定表, 则精度为毫秒.
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ PARTITION 子句中,为 tbname 定义了一个别名 tname, 在PARTITION 子
|
||||||
|
|
||||||
## 流式计算读取历史数据
|
## 流式计算读取历史数据
|
||||||
|
|
||||||
正常情况下,流式计算不会处理创建前已经写入源表中的数据,若要处理已经写入的数据,可以在创建流时设置 fill_history 1 选项,这样创建的流式计算会自动处理创建前、创建中、创建后写入的数据。例如:
|
正常情况下,流式计算不会处理创建前已经写入源表中的数据,若要处理已经写入的数据,可以在创建流时设置 fill_history 1 选项,这样创建的流式计算会自动处理创建前、创建中、创建后写入的数据。流计算处理历史数据的最大窗口数是2000万,超过限制会报错。例如:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 interval(10s)
|
create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 interval(10s)
|
||||||
|
|
|
@ -30,6 +30,16 @@ SHOW CLUSTER ALIVE;
|
||||||
|
|
||||||
查询当前集群的状态是否可用,返回值: 0:不可用 1:完全可用 2:部分可用(集群中部分节点下线,但其它节点仍可以正常使用)
|
查询当前集群的状态是否可用,返回值: 0:不可用 1:完全可用 2:部分可用(集群中部分节点下线,但其它节点仍可以正常使用)
|
||||||
|
|
||||||
|
## SHOW CLUSTER MACHINES
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SHOW CLUSTER MACHINES; // 从 TDengine 3.2.3.0 版本开始支持
|
||||||
|
```
|
||||||
|
|
||||||
|
显示集群的机器码等信息。
|
||||||
|
|
||||||
|
注:企业版独有
|
||||||
|
|
||||||
## SHOW CONNECTIONS
|
## SHOW CONNECTIONS
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
|
@ -99,6 +109,7 @@ SHOW FUNCTIONS;
|
||||||
```sql
|
```sql
|
||||||
SHOW LICENCES;
|
SHOW LICENCES;
|
||||||
SHOW GRANTS;
|
SHOW GRANTS;
|
||||||
|
SHOW GRANTS FULL; // 从 TDengine 3.2.3.0 版本开始支持
|
||||||
```
|
```
|
||||||
|
|
||||||
显示企业版许可授权的信息。
|
显示企业版许可授权的信息。
|
||||||
|
|
|
@ -27,7 +27,7 @@ TDengine 服务端或客户端安装后,`taosws.h` 位于:
|
||||||
TDengine 客户端驱动的动态库位于:
|
TDengine 客户端驱动的动态库位于:
|
||||||
|
|
||||||
- Linux: `/usr/local/taos/driver/libtaosws.so`
|
- Linux: `/usr/local/taos/driver/libtaosws.so`
|
||||||
- Windows: `C:\TDengine\taosws.dll`
|
- Windows: `C:\TDengine\driver\taosws.dll`
|
||||||
- macOS: `/usr/local/lib/libtaosws.dylib`
|
- macOS: `/usr/local/lib/libtaosws.dylib`
|
||||||
|
|
||||||
### 支持的平台
|
### 支持的平台
|
||||||
|
@ -626,7 +626,7 @@ TDengine 服务端或客户端安装后,`taos.h` 位于:
|
||||||
TDengine 客户端驱动的动态库位于:
|
TDengine 客户端驱动的动态库位于:
|
||||||
|
|
||||||
- Linux: `/usr/local/taos/driver/libtaos.so`
|
- Linux: `/usr/local/taos/driver/libtaos.so`
|
||||||
- Windows: `C:\TDengine\taos.dll`
|
- Windows: `C:\TDengine\driver\taos.dll`
|
||||||
- macOS: `/usr/local/lib/libtaos.dylib`
|
- macOS: `/usr/local/lib/libtaos.dylib`
|
||||||
|
|
||||||
### 支持的平台
|
### 支持的平台
|
||||||
|
|
|
@ -24,6 +24,10 @@ TDengine 3.x 各版本安装包下载链接如下:
|
||||||
|
|
||||||
import Release from "/components/ReleaseV3";
|
import Release from "/components/ReleaseV3";
|
||||||
|
|
||||||
|
## 3.3.3.0
|
||||||
|
|
||||||
|
<Release type="tdengine" version="3.3.3.0" />
|
||||||
|
|
||||||
## 3.3.2.0
|
## 3.3.2.0
|
||||||
|
|
||||||
<Release type="tdengine" version="3.3.2.0" />
|
<Release type="tdengine" version="3.3.2.0" />
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
---
|
||||||
|
title: 3.3.3.0 版本说明
|
||||||
|
sidebar_label: 3.3.3.0
|
||||||
|
description: 3.3.3.0 版本说明
|
||||||
|
---
|
||||||
|
### 新特性/优化
|
||||||
|
1. 增加函数支持:pi、truncate/tunc、exp、ln、mod、rand、sign、degress、radians、char、ascii、position、trim、replace、repeat、substring、substr、substring_index、week、weekday、weekofyear、dayofweek、stddev_pop、var_pop
|
||||||
|
2. 多级存储支持微软对象存储 Azure Blob [企业版]
|
||||||
|
3. 支持 MongoDB 数据源 [企业版]
|
||||||
|
4. TDengine支持macOS企业版客户端 [企业版]
|
||||||
|
5. taosX日志默认不写入syslog [企业版]
|
||||||
|
6. 服务端记录所有慢查询信息到log库
|
||||||
|
7. show cluster machines 查询结果中添加服务端版本号
|
||||||
|
8. 删除保留关键字LEVEL/ENCODE/COMPRESS, 可以作为列名/表名/数据库名等使用
|
||||||
|
9. 禁止动态修改临时目录
|
||||||
|
10. round 函数:支持四舍五入的精度
|
||||||
|
11. timediff 函数:返回时间戳 expr1 - expr2 的结果,支持负数结果,并近似到时间单位 time_unit 指定的精度
|
||||||
|
12. max/min 函数:支持字符串作为输入参数,当输入参数为字符串类型时,返回最大字符串值
|
||||||
|
13. 提升了 taosX 数据同步的性能 [企业版]
|
||||||
|
14. 统一慢查询和普通日志的保存策略
|
||||||
|
15. 优化订阅功能中offset文件过大且加载过慢的问题
|
||||||
|
16. 升级 JDBC driver 至 3.2.5
|
||||||
|
17. Kafka connector 提交改为同步方式
|
||||||
|
18. 新增参数:表查询不存在时是否报异常
|
||||||
|
19. 扩大 tsma 的 interval 的最大窗口到 1 年
|
||||||
|
20. 支持从 CSV 文件批量建表
|
||||||
|
### 修复问题
|
||||||
|
1. 服务器重启后 mqtt 写入任务未自动重新启动 [企业版]
|
||||||
|
2. 修复windows上agent和PI connector连接错误导致任务终止的问题 [企业版]
|
||||||
|
3. 重启taosadapter后,mqtt 任务异常,无法同步数据 [企业版]
|
||||||
|
4. Explorer 上 mqtt 写入任务状态不正确 [企业版]
|
||||||
|
5. 重启 taosx 后,运行中的任务没有被重新调度 [企业版]
|
||||||
|
6. 对于 taosx 的 MongoDB DataIn 任务,优化了日志的输出信息 [企业版]
|
||||||
|
7. 修复在 local.toml 文件为空时备份失败的问题 [企业版]
|
||||||
|
8. taosx replica 任务在网络断开恢复后数据同步异常的问题 [企业版]
|
||||||
|
9. 修复3.1版本同步到3.3版本meta数据不同步问题 [企业版]
|
||||||
|
10. taosadapter 异常重启后, mqtt任务无法自动恢复的问题[企业版]
|
||||||
|
11. Kafka DataIn 任务状态正常,但任务停止消费数据 [企业版]
|
||||||
|
12. 修复 last + interval 查询导致 crash 的问题
|
||||||
|
13. 在数据写入时热更stt_trigger导致taosd崩溃
|
||||||
|
14. 修改root密码后taoskeeper反复重启
|
||||||
|
15. 云服务中服务重启后流计算无法继续
|
||||||
|
16. tsdb加载缓存导致taosd死锁
|
||||||
|
17. 查询时fill值指定为0报错
|
||||||
|
18. last_row 查询结果与预期不符
|
||||||
|
19. 用户指定 information_schema 库登录时导致 taosd 崩溃
|
||||||
|
20. group by 语句支持位置参数和别名语法
|
||||||
|
21. 元数据克隆函数对象错误导致 crash
|
||||||
|
22. 缓存更新时数据填充的游标错误导致的 taosd 异常退出
|
||||||
|
23. STDDEV 函数计算结果随机不正确的问题
|
||||||
|
24. 多级存储以及加密场景下无法添加离线节点
|
||||||
|
25. taos CLI 无法输入大于20字节长度的密码
|
||||||
|
26. 拼接 sql 写入报错: int data overflow
|
||||||
|
27. 大量查询并发场景下元数据的一致性
|
||||||
|
28. 尝试解决手动点击停止按钮,任务无法停止的问题
|
||||||
|
29. 解决了列或者标签中包含逗号或引号时导出 CSV 文件错误的问题
|
||||||
|
30. 多线程并发的对同一张子表进行 describe 导致 crash
|
||||||
|
31. 数据浏览器的查询结果未按照配置的时区展示的问题
|
||||||
|
32. 创建 websocket 连接时 taosadapter 内存泄漏的问题
|
||||||
|
33. 社区版无法在 redhat 操作系统正常启动
|
||||||
|
34. 无效断言在两个 stt 分别位于数据块时间轴分布空洞场景引发的 crash
|
||||||
|
35. S3 长时间拉取数据会失败的问题
|
||||||
|
36. 使用结果集函数判断时间线的有序性
|
||||||
|
37. 解决超级表投影查询慢的问题
|
||||||
|
38. 修复: 多节点环境,事务返回码与事务状态不一致导致事务堆积
|
||||||
|
39. 修复:在stt_trigger = 1时,delete数据之后重新出现的错误
|
||||||
|
40. 节点恢复阶段taosd内存占用过高导致OOM
|
||||||
|
41. limit过小时的判断错误
|
||||||
|
42. AVEVA historian 数据源连通性及获取示例数据功能
|
||||||
|
43. taosd 服务无法正常停止的问题
|
||||||
|
44. last 函数查询全空列导致 crash
|
||||||
|
45. 查询 cid 不在当前版本的 schema 时触发 assert 导致 coredump
|
||||||
|
46. 写入消息体过大时 OOM 的问题,增加 syncLogBufferMemoryAllowed 参数控制
|
||||||
|
47. timezone 设置为 UTC 且数据包含“1970”时,查询报错
|
||||||
|
48. 取消mnode节点的消息同步的等待超时
|
||||||
|
49. 集群节点异常恢复后,集群授权状态失效
|
||||||
|
50. 查询空指针问题
|
||||||
|
51. 在restore vnode时,将vgroup暂时设置成单副本
|
||||||
|
52. 可以使用SQL保留字作为列名创建超级表,也可以使用SQL保留字作为标签名
|
||||||
|
53. 高并发查询期间内存持续增长的问题
|
||||||
|
54. 流计算在checkpoint处理过程中,由于断言失败导致的crash
|
||||||
|
55. 修复了 3.3.2.8.0820 版本中可以查询到 information_schema 中不存在的表perf_queries问题
|
||||||
|
56. 节点恢复阶段taosd内存占用过高导致OOM
|
||||||
|
57. 修复在schema变更情况下,通过taosx导入数据时,taosd出现crash的问题
|
||||||
|
58. 可能的内存泄漏
|
||||||
|
59. 客户端内存泄漏
|
||||||
|
60. 开源用户修改stt_trigger值升级后无法修改其他数据库选项
|
||||||
|
61. NOT IN (NULL) 查询结果不正确
|
||||||
|
62. taos shell和taosBenchmark不能成功连接云服务实例
|
|
@ -3,5 +3,5 @@ title: 版本说明
|
||||||
sidebar_label: 版本说明
|
sidebar_label: 版本说明
|
||||||
description: 各版本版本说明
|
description: 各版本版本说明
|
||||||
---
|
---
|
||||||
|
[3.3.3.0](./3.3.3.0)
|
||||||
[3.3.2.0](./3.3.2.0)
|
[3.3.2.0](./3.3.2.0)
|
||||||
|
|
|
@ -251,6 +251,7 @@ DLL_EXPORT int64_t taos_affected_rows64(TAOS_RES *res);
|
||||||
DLL_EXPORT TAOS_FIELD *taos_fetch_fields(TAOS_RES *res);
|
DLL_EXPORT TAOS_FIELD *taos_fetch_fields(TAOS_RES *res);
|
||||||
DLL_EXPORT int taos_select_db(TAOS *taos, const char *db);
|
DLL_EXPORT int taos_select_db(TAOS *taos, const char *db);
|
||||||
DLL_EXPORT int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields);
|
DLL_EXPORT int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields);
|
||||||
|
DLL_EXPORT int taos_print_row_with_size(char *str, uint32_t size, TAOS_ROW row, TAOS_FIELD *fields, int num_fields);
|
||||||
DLL_EXPORT void taos_stop_query(TAOS_RES *res);
|
DLL_EXPORT void taos_stop_query(TAOS_RES *res);
|
||||||
DLL_EXPORT bool taos_is_null(TAOS_RES *res, int32_t row, int32_t col);
|
DLL_EXPORT bool taos_is_null(TAOS_RES *res, int32_t row, int32_t col);
|
||||||
DLL_EXPORT int taos_is_null_by_column(TAOS_RES *res, int columnIndex, bool result[], int *rows);
|
DLL_EXPORT int taos_is_null_by_column(TAOS_RES *res, int columnIndex, bool result[], int *rows);
|
||||||
|
@ -389,7 +390,7 @@ DLL_EXPORT int32_t tmq_get_vgroup_id(TAOS_RES *res);
|
||||||
DLL_EXPORT int64_t tmq_get_vgroup_offset(TAOS_RES *res);
|
DLL_EXPORT int64_t tmq_get_vgroup_offset(TAOS_RES *res);
|
||||||
DLL_EXPORT const char *tmq_err2str(int32_t code);
|
DLL_EXPORT const char *tmq_err2str(int32_t code);
|
||||||
|
|
||||||
/* ------------------------------ TAOSX -----------------------------------*/
|
/* ------------------------------ TAOSX INTERFACE -----------------------------------*/
|
||||||
typedef struct tmq_raw_data {
|
typedef struct tmq_raw_data {
|
||||||
void *raw;
|
void *raw;
|
||||||
uint32_t raw_len;
|
uint32_t raw_len;
|
||||||
|
|
|
@ -89,32 +89,6 @@ typedef struct {
|
||||||
int32_t exprIdx;
|
int32_t exprIdx;
|
||||||
} STupleKey;
|
} STupleKey;
|
||||||
|
|
||||||
typedef struct STuplePos {
|
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
int32_t pageId;
|
|
||||||
int32_t offset;
|
|
||||||
};
|
|
||||||
SWinKey streamTupleKey;
|
|
||||||
};
|
|
||||||
} STuplePos;
|
|
||||||
|
|
||||||
typedef struct SFirstLastRes {
|
|
||||||
bool hasResult;
|
|
||||||
// used for last_row function only, isNullRes in SResultRowEntry can not be passed to downstream.So,
|
|
||||||
// this attribute is required
|
|
||||||
bool isNull;
|
|
||||||
int32_t bytes;
|
|
||||||
int64_t ts;
|
|
||||||
char* pkData;
|
|
||||||
int32_t pkBytes;
|
|
||||||
int8_t pkType;
|
|
||||||
STuplePos pos;
|
|
||||||
STuplePos nullTuplePos;
|
|
||||||
bool nullTupleSaved;
|
|
||||||
char buf[];
|
|
||||||
} SFirstLastRes;
|
|
||||||
|
|
||||||
static inline int STupleKeyCmpr(const void* pKey1, int kLen1, const void* pKey2, int kLen2) {
|
static inline int STupleKeyCmpr(const void* pKey1, int kLen1, const void* pKey2, int kLen2) {
|
||||||
STupleKey* pTuple1 = (STupleKey*)pKey1;
|
STupleKey* pTuple1 = (STupleKey*)pKey1;
|
||||||
STupleKey* pTuple2 = (STupleKey*)pKey2;
|
STupleKey* pTuple2 = (STupleKey*)pKey2;
|
||||||
|
|
|
@ -277,7 +277,7 @@ int32_t buildSubmitReqFromDataBlock(SSubmitReq2** pReq, const SSDataBlock* pData
|
||||||
|
|
||||||
bool alreadyAddGroupId(char* ctbName, int64_t groupId);
|
bool alreadyAddGroupId(char* ctbName, int64_t groupId);
|
||||||
bool isAutoTableName(char* ctbName);
|
bool isAutoTableName(char* ctbName);
|
||||||
void buildCtbNameAddGroupId(const char* stbName, char* ctbName, uint64_t groupId);
|
int32_t buildCtbNameAddGroupId(const char* stbName, char* ctbName, uint64_t groupId, size_t cap);
|
||||||
int32_t buildCtbNameByGroupId(const char* stbName, uint64_t groupId, char** pName);
|
int32_t buildCtbNameByGroupId(const char* stbName, uint64_t groupId, char** pName);
|
||||||
int32_t buildCtbNameByGroupIdImpl(const char* stbName, uint64_t groupId, char* pBuf);
|
int32_t buildCtbNameByGroupIdImpl(const char* stbName, uint64_t groupId, char* pBuf);
|
||||||
|
|
||||||
|
|
|
@ -214,7 +214,7 @@ extern int64_t tsMinDiskFreeSize;
|
||||||
// udf
|
// udf
|
||||||
extern bool tsStartUdfd;
|
extern bool tsStartUdfd;
|
||||||
extern char tsUdfdResFuncs[];
|
extern char tsUdfdResFuncs[];
|
||||||
extern char tsUdfdLdLibPath[];
|
extern char tsUdfdLdLibPath[512];
|
||||||
|
|
||||||
// schemaless
|
// schemaless
|
||||||
extern char tsSmlChildTableName[];
|
extern char tsSmlChildTableName[];
|
||||||
|
|
|
@ -1684,6 +1684,7 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t openVnodes;
|
int32_t openVnodes;
|
||||||
|
int32_t dropVnodes;
|
||||||
int32_t totalVnodes;
|
int32_t totalVnodes;
|
||||||
int32_t masterNum;
|
int32_t masterNum;
|
||||||
int64_t numOfSelectReqs;
|
int64_t numOfSelectReqs;
|
||||||
|
@ -2822,8 +2823,8 @@ enum {
|
||||||
TOPIC_SUB_TYPE__COLUMN,
|
TOPIC_SUB_TYPE__COLUMN,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFAULT_MAX_POLL_INTERVAL 300000
|
#define DEFAULT_MAX_POLL_INTERVAL 300000
|
||||||
#define DEFAULT_SESSION_TIMEOUT 12000
|
#define DEFAULT_SESSION_TIMEOUT 12000
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char name[TSDB_TOPIC_FNAME_LEN]; // accout.topic
|
char name[TSDB_TOPIC_FNAME_LEN]; // accout.topic
|
||||||
|
@ -4048,37 +4049,39 @@ void tDeleteMqMetaRsp(SMqMetaRsp* pRsp);
|
||||||
#define MQ_DATA_RSP_VERSION 100
|
#define MQ_DATA_RSP_VERSION 100
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SMqRspHead head;
|
struct {
|
||||||
STqOffsetVal reqOffset;
|
SMqRspHead head;
|
||||||
STqOffsetVal rspOffset;
|
STqOffsetVal rspOffset;
|
||||||
int32_t blockNum;
|
STqOffsetVal reqOffset;
|
||||||
int8_t withTbName;
|
int32_t blockNum;
|
||||||
int8_t withSchema;
|
int8_t withTbName;
|
||||||
SArray* blockDataLen;
|
int8_t withSchema;
|
||||||
SArray* blockData;
|
SArray* blockDataLen;
|
||||||
SArray* blockTbName;
|
SArray* blockData;
|
||||||
SArray* blockSchema;
|
SArray* blockTbName;
|
||||||
} SMqDataRspCommon;
|
SArray* blockSchema;
|
||||||
|
};
|
||||||
|
|
||||||
|
union{
|
||||||
|
struct{
|
||||||
|
int64_t sleepTime;
|
||||||
|
};
|
||||||
|
struct{
|
||||||
|
int32_t createTableNum;
|
||||||
|
SArray* createTableLen;
|
||||||
|
SArray* createTableReq;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
SMqDataRspCommon common;
|
|
||||||
int64_t sleepTime;
|
|
||||||
} SMqDataRsp;
|
} SMqDataRsp;
|
||||||
|
|
||||||
int32_t tEncodeMqDataRsp(SEncoder* pEncoder, const void* pRsp);
|
int32_t tEncodeMqDataRsp(SEncoder *pEncoder, const SMqDataRsp *pObj);
|
||||||
int32_t tDecodeMqDataRsp(SDecoder* pDecoder, void* pRsp);
|
int32_t tDecodeMqDataRsp(SDecoder* pDecoder, SMqDataRsp* pRsp);
|
||||||
void tDeleteMqDataRsp(void* pRsp);
|
void tDeleteMqDataRsp(SMqDataRsp* pRsp);
|
||||||
|
|
||||||
typedef struct {
|
int32_t tEncodeSTaosxRsp(SEncoder* pEncoder, const SMqDataRsp* pRsp);
|
||||||
SMqDataRspCommon common;
|
int32_t tDecodeSTaosxRsp(SDecoder* pDecoder, SMqDataRsp* pRsp);
|
||||||
int32_t createTableNum;
|
void tDeleteSTaosxRsp(SMqDataRsp* pRsp);
|
||||||
SArray* createTableLen;
|
|
||||||
SArray* createTableReq;
|
|
||||||
} STaosxRsp;
|
|
||||||
|
|
||||||
int32_t tEncodeSTaosxRsp(SEncoder* pEncoder, const void* pRsp);
|
|
||||||
int32_t tDecodeSTaosxRsp(SDecoder* pDecoder, void* pRsp);
|
|
||||||
void tDeleteSTaosxRsp(void* pRsp);
|
|
||||||
|
|
||||||
typedef struct SMqBatchMetaRsp {
|
typedef struct SMqBatchMetaRsp {
|
||||||
SMqRspHead head; // not serialize
|
SMqRspHead head; // not serialize
|
||||||
|
@ -4163,6 +4166,7 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SArray* topicPrivileges; // SArray<STopicPrivilege>
|
SArray* topicPrivileges; // SArray<STopicPrivilege>
|
||||||
|
int32_t debugFlag;
|
||||||
} SMqHbRsp;
|
} SMqHbRsp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -64,7 +64,7 @@ static FORCE_INLINE int64_t taosGetTimestampToday(int32_t precision) {
|
||||||
: 1000000000;
|
: 1000000000;
|
||||||
time_t t = taosTime(NULL);
|
time_t t = taosTime(NULL);
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
(void) taosLocalTime(&t, &tm, NULL);
|
(void) taosLocalTime(&t, &tm, NULL, 0);
|
||||||
tm.tm_hour = 0;
|
tm.tm_hour = 0;
|
||||||
tm.tm_min = 0;
|
tm.tm_min = 0;
|
||||||
tm.tm_sec = 0;
|
tm.tm_sec = 0;
|
||||||
|
|
|
@ -23,6 +23,7 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// variant, each number/string/field_id has a corresponding struct during parsing sql
|
// variant, each number/string/field_id has a corresponding struct during parsing sql
|
||||||
|
// **NOTE**: if you want to change this struct, please consider the backward compatibility of function top and bottom.
|
||||||
typedef struct SVariant {
|
typedef struct SVariant {
|
||||||
uint32_t nType;
|
uint32_t nType;
|
||||||
int32_t nLen; // only used for string, for number, it is useless
|
int32_t nLen; // only used for string, for number, it is useless
|
||||||
|
|
|
@ -29,6 +29,6 @@ int32_t qExecExplainBegin(SQueryPlan *pDag, SExplainCtx **pCtx, int64_t startTs)
|
||||||
int32_t qExecExplainEnd(SExplainCtx *pCtx, SRetrieveTableRsp **pRsp);
|
int32_t qExecExplainEnd(SExplainCtx *pCtx, SRetrieveTableRsp **pRsp);
|
||||||
int32_t qExplainUpdateExecInfo(SExplainCtx *pCtx, SExplainRsp *pRspMsg, int32_t groupId, SRetrieveTableRsp **pRsp);
|
int32_t qExplainUpdateExecInfo(SExplainCtx *pCtx, SExplainRsp *pRspMsg, int32_t groupId, SRetrieveTableRsp **pRsp);
|
||||||
void qExplainFreeCtx(SExplainCtx *pCtx);
|
void qExplainFreeCtx(SExplainCtx *pCtx);
|
||||||
int32_t formatDurationOrKeep(char* buffer, int32_t timeInMinutes);
|
int32_t formatDurationOrKeep(char* buffer, int64_t bufSize, int32_t timeInMinutes);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -23,6 +23,7 @@ extern "C" {
|
||||||
#include "tcommon.h"
|
#include "tcommon.h"
|
||||||
#include "tsimplehash.h"
|
#include "tsimplehash.h"
|
||||||
#include "tvariant.h"
|
#include "tvariant.h"
|
||||||
|
#include "functionResInfo.h"
|
||||||
|
|
||||||
struct SqlFunctionCtx;
|
struct SqlFunctionCtx;
|
||||||
struct SResultRowEntryInfo;
|
struct SResultRowEntryInfo;
|
||||||
|
@ -85,14 +86,7 @@ enum {
|
||||||
PRE_SCAN = 0x2u, // pre-scan belongs to the main scan and occurs before main scan
|
PRE_SCAN = 0x2u, // pre-scan belongs to the main scan and occurs before main scan
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct SPoint1 {
|
struct SPoint1;
|
||||||
int64_t key;
|
|
||||||
union {
|
|
||||||
double val;
|
|
||||||
char *ptr;
|
|
||||||
};
|
|
||||||
} SPoint1;
|
|
||||||
|
|
||||||
struct SqlFunctionCtx;
|
struct SqlFunctionCtx;
|
||||||
struct SResultRowEntryInfo;
|
struct SResultRowEntryInfo;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TDENGINE_FUNCTIONRESINFO_H
|
||||||
|
#define TDENGINE_FUNCTIONRESINFO_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "os.h"
|
||||||
|
#include "tcommon.h"
|
||||||
|
|
||||||
|
typedef struct STuplePos {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
int32_t pageId;
|
||||||
|
int32_t offset;
|
||||||
|
};
|
||||||
|
SWinKey streamTupleKey;
|
||||||
|
};
|
||||||
|
} STuplePos;
|
||||||
|
|
||||||
|
typedef struct SCentroid {
|
||||||
|
double mean;
|
||||||
|
int64_t weight;
|
||||||
|
} SCentroid;
|
||||||
|
|
||||||
|
typedef struct SPt {
|
||||||
|
double value;
|
||||||
|
int64_t weight;
|
||||||
|
} SPt;
|
||||||
|
|
||||||
|
typedef struct TDigest {
|
||||||
|
double compression;
|
||||||
|
int32_t threshold;
|
||||||
|
int64_t size;
|
||||||
|
|
||||||
|
int64_t total_weight;
|
||||||
|
double min;
|
||||||
|
double max;
|
||||||
|
|
||||||
|
int32_t num_buffered_pts;
|
||||||
|
SPt *buffered_pts;
|
||||||
|
|
||||||
|
int32_t num_centroids;
|
||||||
|
SCentroid *centroids;
|
||||||
|
} TDigest;
|
||||||
|
|
||||||
|
typedef struct SFirstLastRes {
|
||||||
|
bool hasResult;
|
||||||
|
// used for last_row function only, isNullRes in SResultRowEntry can not be passed to downstream.So,
|
||||||
|
// this attribute is required
|
||||||
|
bool isNull;
|
||||||
|
int32_t bytes;
|
||||||
|
int64_t ts;
|
||||||
|
char* pkData;
|
||||||
|
int32_t pkBytes;
|
||||||
|
int8_t pkType;
|
||||||
|
STuplePos pos;
|
||||||
|
STuplePos nullTuplePos;
|
||||||
|
bool nullTupleSaved;
|
||||||
|
char buf[];
|
||||||
|
} SFirstLastRes;
|
||||||
|
|
||||||
|
typedef struct SPoint1 {
|
||||||
|
int64_t key;
|
||||||
|
union {
|
||||||
|
double val;
|
||||||
|
char *ptr;
|
||||||
|
};
|
||||||
|
} SPoint1;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // TDENGINE_FUNCTIONRESINFO_H
|
|
@ -274,7 +274,7 @@ typedef enum EWindowType {
|
||||||
WINDOW_TYPE_SESSION,
|
WINDOW_TYPE_SESSION,
|
||||||
WINDOW_TYPE_STATE,
|
WINDOW_TYPE_STATE,
|
||||||
WINDOW_TYPE_EVENT,
|
WINDOW_TYPE_EVENT,
|
||||||
WINDOW_TYPE_COUNT
|
WINDOW_TYPE_COUNT,
|
||||||
} EWindowType;
|
} EWindowType;
|
||||||
|
|
||||||
typedef enum EWindowAlgorithm {
|
typedef enum EWindowAlgorithm {
|
||||||
|
|
|
@ -190,7 +190,6 @@ typedef struct SFunctionNode {
|
||||||
bool hasOriginalFunc;
|
bool hasOriginalFunc;
|
||||||
int32_t originalFuncId;
|
int32_t originalFuncId;
|
||||||
ETrimType trimType;
|
ETrimType trimType;
|
||||||
bool hasSMA;
|
|
||||||
bool dual; // whether select stmt without from stmt, true for without.
|
bool dual; // whether select stmt without from stmt, true for without.
|
||||||
} SFunctionNode;
|
} SFunctionNode;
|
||||||
|
|
||||||
|
|
|
@ -336,7 +336,7 @@ char* jobTaskStatusStr(int32_t status);
|
||||||
SSchema createSchema(int8_t type, int32_t bytes, col_id_t colId, const char* name);
|
SSchema createSchema(int8_t type, int32_t bytes, col_id_t colId, const char* name);
|
||||||
|
|
||||||
void destroyQueryExecRes(SExecResult* pRes);
|
void destroyQueryExecRes(SExecResult* pRes);
|
||||||
int32_t dataConverToStr(char* str, int type, void* buf, int32_t bufSize, int32_t* len);
|
int32_t dataConverToStr(char* str, int64_t capacity, int type, void* buf, int32_t bufSize, int32_t* len);
|
||||||
void parseTagDatatoJson(void* p, char** jsonStr);
|
void parseTagDatatoJson(void* p, char** jsonStr);
|
||||||
int32_t cloneTableMeta(STableMeta* pSrc, STableMeta** pDst);
|
int32_t cloneTableMeta(STableMeta* pSrc, STableMeta** pDst);
|
||||||
void getColumnTypeFromMeta(STableMeta* pMeta, char* pName, ETableColumnType* pType);
|
void getColumnTypeFromMeta(STableMeta* pMeta, char* pName, ETableColumnType* pType);
|
||||||
|
@ -407,29 +407,29 @@ void* getTaskPoolWorkerCb();
|
||||||
#define IS_AUDIT_CTB_NAME(_ctbname) \
|
#define IS_AUDIT_CTB_NAME(_ctbname) \
|
||||||
((*(_ctbname) == 't') && (0 == strncmp(_ctbname, TSDB_AUDIT_CTB_OPERATION, TSDB_AUDIT_CTB_OPERATION_LEN)))
|
((*(_ctbname) == 't') && (0 == strncmp(_ctbname, TSDB_AUDIT_CTB_OPERATION, TSDB_AUDIT_CTB_OPERATION_LEN)))
|
||||||
|
|
||||||
#define qFatal(...) \
|
#define qFatal(...) \
|
||||||
do { \
|
do { \
|
||||||
if (qDebugFlag & DEBUG_FATAL) { \
|
if (qDebugFlag & DEBUG_FATAL) { \
|
||||||
taosPrintLog("QRY FATAL ", DEBUG_FATAL, qDebugFlag, __VA_ARGS__); \
|
taosPrintLog("QRY FATAL ", DEBUG_FATAL, tsLogEmbedded ? 255 : qDebugFlag, __VA_ARGS__); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define qError(...) \
|
#define qError(...) \
|
||||||
do { \
|
do { \
|
||||||
if (qDebugFlag & DEBUG_ERROR) { \
|
if (qDebugFlag & DEBUG_ERROR) { \
|
||||||
taosPrintLog("QRY ERROR ", DEBUG_ERROR, qDebugFlag, __VA_ARGS__); \
|
taosPrintLog("QRY ERROR ", DEBUG_ERROR, tsLogEmbedded ? 255 : qDebugFlag, __VA_ARGS__); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define qWarn(...) \
|
#define qWarn(...) \
|
||||||
do { \
|
do { \
|
||||||
if (qDebugFlag & DEBUG_WARN) { \
|
if (qDebugFlag & DEBUG_WARN) { \
|
||||||
taosPrintLog("QRY WARN ", DEBUG_WARN, qDebugFlag, __VA_ARGS__); \
|
taosPrintLog("QRY WARN ", DEBUG_WARN, tsLogEmbedded ? 255 : qDebugFlag, __VA_ARGS__); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define qInfo(...) \
|
#define qInfo(...) \
|
||||||
do { \
|
do { \
|
||||||
if (qDebugFlag & DEBUG_INFO) { \
|
if (qDebugFlag & DEBUG_INFO) { \
|
||||||
taosPrintLog("QRY ", DEBUG_INFO, qDebugFlag, __VA_ARGS__); \
|
taosPrintLog("QRY ", DEBUG_INFO, tsLogEmbedded ? 255 : qDebugFlag, __VA_ARGS__); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define qDebug(...) \
|
#define qDebug(...) \
|
||||||
do { \
|
do { \
|
||||||
|
|
|
@ -47,7 +47,7 @@ extern "C" {
|
||||||
#define SYNC_HEARTBEAT_SLOW_MS 1500
|
#define SYNC_HEARTBEAT_SLOW_MS 1500
|
||||||
#define SYNC_HEARTBEAT_REPLY_SLOW_MS 1500
|
#define SYNC_HEARTBEAT_REPLY_SLOW_MS 1500
|
||||||
#define SYNC_SNAP_RESEND_MS 1000 * 60
|
#define SYNC_SNAP_RESEND_MS 1000 * 60
|
||||||
#define SYNC_SNAP_TIMEOUT_MS 1000 * 300
|
#define SYNC_SNAP_TIMEOUT_MS 1000 * 180
|
||||||
|
|
||||||
#define SYNC_VND_COMMIT_MIN_MS 3000
|
#define SYNC_VND_COMMIT_MIN_MS 3000
|
||||||
|
|
||||||
|
|
|
@ -247,9 +247,12 @@ void syslog(int unused, const char *format, ...);
|
||||||
#define TD_DIRSEP_CHAR '/'
|
#define TD_DIRSEP_CHAR '/'
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define TD_FQDN_LEN 128
|
||||||
#define TD_LOCALE_LEN 64
|
#define TD_LOCALE_LEN 64
|
||||||
#define TD_CHARSET_LEN 64
|
#define TD_CHARSET_LEN 64
|
||||||
#define TD_TIMEZONE_LEN 96
|
#define TD_TIMEZONE_LEN 96
|
||||||
|
#define TD_TIME_STR_LEN 128
|
||||||
|
#define TD_IP_LEN 64
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,7 +85,6 @@ typedef int32_t SOCKET;
|
||||||
#else
|
#else
|
||||||
#define TAOS_EPOLL_WAIT_TIME 500
|
#define TAOS_EPOLL_WAIT_TIME 500
|
||||||
typedef int32_t SOCKET;
|
typedef int32_t SOCKET;
|
||||||
typedef SOCKET EpollFd;
|
|
||||||
#define EpollClose(pollFd) taosCloseSocket(pollFd)
|
#define EpollClose(pollFd) taosCloseSocket(pollFd)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -51,18 +51,25 @@ typedef enum { M2C = 0, C2M } ConvType;
|
||||||
#define strtod STR_TO_LD_FUNC_TAOS_FORBID
|
#define strtod STR_TO_LD_FUNC_TAOS_FORBID
|
||||||
#define strtold STR_TO_D_FUNC_TAOS_FORBID
|
#define strtold STR_TO_D_FUNC_TAOS_FORBID
|
||||||
#define strtof STR_TO_F_FUNC_TAOS_FORBID
|
#define strtof STR_TO_F_FUNC_TAOS_FORBID
|
||||||
|
|
||||||
|
#ifdef strndup
|
||||||
|
#undef strndup
|
||||||
|
#endif
|
||||||
#define strndup STR_TO_F_FUNC_TAOS_FORBID
|
#define strndup STR_TO_F_FUNC_TAOS_FORBID
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define tstrncpy(dst, src, size) \
|
#define tstrncpy(dst, src, size) \
|
||||||
do { \
|
do { \
|
||||||
(void)strncpy((dst), (src), (size)); \
|
(void)strncpy((dst), (src), (size)); \
|
||||||
(dst)[(size)-1] = 0; \
|
(dst)[(size) - 1] = 0; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
int64_t tsnprintf(char *dst, int64_t size, const char *format, ...);
|
||||||
#define TAOS_STRCPY(_dst, _src) ((void)strcpy(_dst, _src))
|
#define TAOS_STRCPY(_dst, _src) ((void)strcpy(_dst, _src))
|
||||||
#define TAOS_STRNCPY(_dst, _src, _size) ((void)strncpy(_dst, _src, _size))
|
#define TAOS_STRNCPY(_dst, _src, _size) ((void)strncpy(_dst, _src, _size))
|
||||||
#define TAOS_STRCAT(_dst, _src) ((void)strcat(_dst, _src))
|
#define TAOS_STRCAT(_dst, _src) ((void)strcat(_dst, _src))
|
||||||
|
#define TAOS_STRNCAT(_dst, _src, len) ((void)strncat(_dst, _src, len))
|
||||||
|
|
||||||
char *tstrdup(const char *src);
|
char *tstrdup(const char *src);
|
||||||
int32_t taosUcs4len(TdUcs4 *ucs4);
|
int32_t taosUcs4len(TdUcs4 *ucs4);
|
||||||
|
@ -81,7 +88,7 @@ bool taosMbsToUcs4(const char *mbs, size_t mbs_len, TdUcs4 *ucs4, int32_t ucs
|
||||||
int32_t tasoUcs4Compare(TdUcs4 *f1_ucs4, TdUcs4 *f2_ucs4, int32_t bytes);
|
int32_t tasoUcs4Compare(TdUcs4 *f1_ucs4, TdUcs4 *f2_ucs4, int32_t bytes);
|
||||||
int32_t tasoUcs4Copy(TdUcs4 *target_ucs4, TdUcs4 *source_ucs4, int32_t len_ucs4);
|
int32_t tasoUcs4Copy(TdUcs4 *target_ucs4, TdUcs4 *source_ucs4, int32_t len_ucs4);
|
||||||
bool taosValidateEncodec(const char *encodec);
|
bool taosValidateEncodec(const char *encodec);
|
||||||
int32_t taosHexEncode(const unsigned char *src, char *dst, int32_t len);
|
int32_t taosHexEncode(const unsigned char *src, char *dst, int32_t len, int32_t bufSize);
|
||||||
int32_t taosHexDecode(const char *src, char *dst, int32_t len);
|
int32_t taosHexDecode(const char *src, char *dst, int32_t len);
|
||||||
|
|
||||||
int32_t taosWcharWidth(TdWchar wchar);
|
int32_t taosWcharWidth(TdWchar wchar);
|
||||||
|
|
|
@ -52,7 +52,8 @@ int32_t taosGetCardInfoDelta(int64_t *receive_bytes, int64_t *transmit_bytes);
|
||||||
void taosSetDefaultCardInfoDelta(int64_t *receive_bytes, int64_t *transmit_bytes);
|
void taosSetDefaultCardInfoDelta(int64_t *receive_bytes, int64_t *transmit_bytes);
|
||||||
|
|
||||||
void taosKillSystem();
|
void taosKillSystem();
|
||||||
int32_t taosGetSystemUUID(char *uid, int32_t uidlen);
|
int32_t taosGetSystemUUIDLimit36(char *uid, int32_t uidlen);
|
||||||
|
int32_t taosGetSystemUUIDLen(char *uid, int32_t uidlen);
|
||||||
char *taosGetCmdlineByPID(int32_t pid);
|
char *taosGetCmdlineByPID(int32_t pid);
|
||||||
void taosSetCoreDump(bool enable);
|
void taosSetCoreDump(bool enable);
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ static FORCE_INLINE int64_t taosGetMonoTimestampMs() {
|
||||||
}
|
}
|
||||||
|
|
||||||
char *taosStrpTime(const char *buf, const char *fmt, struct tm *tm);
|
char *taosStrpTime(const char *buf, const char *fmt, struct tm *tm);
|
||||||
struct tm *taosLocalTime(const time_t *timep, struct tm *result, char *buf);
|
struct tm *taosLocalTime(const time_t *timep, struct tm *result, char *buf, int32_t bufSize);
|
||||||
struct tm *taosLocalTimeNolock(struct tm *result, const time_t *timep, int dst);
|
struct tm *taosLocalTimeNolock(struct tm *result, const time_t *timep, int dst);
|
||||||
time_t taosTime(time_t *t);
|
time_t taosTime(time_t *t);
|
||||||
time_t taosMktime(struct tm *timep);
|
time_t taosMktime(struct tm *timep);
|
||||||
|
|
|
@ -474,8 +474,7 @@ int32_t taosGetErrSize();
|
||||||
#define TSDB_CODE_DNODE_INVALID_TTL_CHG_ON_WR TAOS_DEF_ERROR_CODE(0, 0x0427)
|
#define TSDB_CODE_DNODE_INVALID_TTL_CHG_ON_WR TAOS_DEF_ERROR_CODE(0, 0x0427)
|
||||||
#define TSDB_CODE_DNODE_INVALID_EN_WHITELIST TAOS_DEF_ERROR_CODE(0, 0x0428)
|
#define TSDB_CODE_DNODE_INVALID_EN_WHITELIST TAOS_DEF_ERROR_CODE(0, 0x0428)
|
||||||
#define TSDB_CODE_DNODE_INVALID_MONITOR_PARAS TAOS_DEF_ERROR_CODE(0, 0x0429)
|
#define TSDB_CODE_DNODE_INVALID_MONITOR_PARAS TAOS_DEF_ERROR_CODE(0, 0x0429)
|
||||||
#define TSDB_CODE_MNODE_STOPPED TAOS_DEF_ERROR_CODE(0, 0x042A)
|
#define TSDB_CODE_MNODE_STOPPED TAOS_DEF_ERROR_CODE(0, 0x042A)
|
||||||
|
|
||||||
|
|
||||||
// mnode-sma
|
// mnode-sma
|
||||||
#define TSDB_CODE_MND_SMA_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0480)
|
#define TSDB_CODE_MND_SMA_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0480)
|
||||||
|
|
|
@ -152,11 +152,15 @@ int32_t tsDecompressBigint(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int
|
||||||
// for internal usage
|
// for internal usage
|
||||||
int32_t getWordLength(char type);
|
int32_t getWordLength(char type);
|
||||||
|
|
||||||
|
#ifdef __AVX2__
|
||||||
int32_t tsDecompressIntImpl_Hw(const char *const input, const int32_t nelements, char *const output, const char type);
|
int32_t tsDecompressIntImpl_Hw(const char *const input, const int32_t nelements, char *const output, const char type);
|
||||||
void tsDecompressFloatImplAvx512(const char *const input, const int32_t nelements, char *const output);
|
int32_t tsDecompressFloatImpAvx2(const char *input, int32_t nelements, char *output);
|
||||||
void tsDecompressFloatImplAvx2(const char *const input, const int32_t nelements, char *const output);
|
int32_t tsDecompressDoubleImpAvx2(const char *input, int32_t nelements, char *output);
|
||||||
|
#endif
|
||||||
|
#ifdef __AVX512VL__
|
||||||
|
void tsDecompressTimestampAvx2(const char *input, int32_t nelements, char *output, bool bigEndian);
|
||||||
void tsDecompressTimestampAvx512(const char *const input, const int32_t nelements, char *const output, bool bigEndian);
|
void tsDecompressTimestampAvx512(const char *const input, const int32_t nelements, char *const output, bool bigEndian);
|
||||||
void tsDecompressTimestampAvx2(const char *const input, const int32_t nelements, char *const output, bool bigEndian);
|
#endif
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* REGULAR COMPRESSION 2
|
* REGULAR COMPRESSION 2
|
||||||
|
@ -213,8 +217,8 @@ typedef int32_t (*__data_compress_init)(char *lossyColumns, float fPrecision, do
|
||||||
uint32_t intervals, int32_t ifAdtFse, const char *compressor);
|
uint32_t intervals, int32_t ifAdtFse, const char *compressor);
|
||||||
typedef int32_t (*__data_compress_l1_fn_t)(const char *const input, const int32_t nelements, char *const output,
|
typedef int32_t (*__data_compress_l1_fn_t)(const char *const input, const int32_t nelements, char *const output,
|
||||||
const char type);
|
const char type);
|
||||||
typedef int32_t (*__data_decompress_l1_fn_t)(const char *const input, const int32_t nelements, char *const output,
|
typedef int32_t (*__data_decompress_l1_fn_t)(const char *const input, int32_t ninput, const int32_t nelements,
|
||||||
const char type);
|
char *const output, const char type);
|
||||||
|
|
||||||
typedef int32_t (*__data_compress_l2_fn_t)(const char *const input, const int32_t nelements, char *const output,
|
typedef int32_t (*__data_compress_l2_fn_t)(const char *const input, const int32_t nelements, char *const output,
|
||||||
int32_t outputSize, const char type, int8_t level);
|
int32_t outputSize, const char type, int8_t level);
|
||||||
|
|
|
@ -325,7 +325,7 @@ typedef enum ELogicConditionType {
|
||||||
|
|
||||||
#define TSDB_CLUSTER_ID_LEN 40
|
#define TSDB_CLUSTER_ID_LEN 40
|
||||||
#define TSDB_MACHINE_ID_LEN 24
|
#define TSDB_MACHINE_ID_LEN 24
|
||||||
#define TSDB_FQDN_LEN 128
|
#define TSDB_FQDN_LEN TD_FQDN_LEN
|
||||||
#define TSDB_EP_LEN (TSDB_FQDN_LEN + 6)
|
#define TSDB_EP_LEN (TSDB_FQDN_LEN + 6)
|
||||||
#define TSDB_IPv4ADDR_LEN 16
|
#define TSDB_IPv4ADDR_LEN 16
|
||||||
#define TSDB_FILENAME_LEN 128
|
#define TSDB_FILENAME_LEN 128
|
||||||
|
@ -644,6 +644,7 @@ enum { RAND_ERR_MEMORY = 1, RAND_ERR_FILE = 2, RAND_ERR_NETWORK = 4 };
|
||||||
#define MONITOR_TAG_NAME_LEN 100
|
#define MONITOR_TAG_NAME_LEN 100
|
||||||
#define MONITOR_TAG_VALUE_LEN 300
|
#define MONITOR_TAG_VALUE_LEN 300
|
||||||
#define MONITOR_METRIC_NAME_LEN 100
|
#define MONITOR_METRIC_NAME_LEN 100
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#define TDIGEST_H
|
#define TDIGEST_H
|
||||||
|
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
#include "libs/function/functionResInfo.h"
|
||||||
|
|
||||||
#ifndef M_PI
|
#ifndef M_PI
|
||||||
#define M_PI 3.14159265358979323846264338327950288 /* pi */
|
#define M_PI 3.14159265358979323846264338327950288 /* pi */
|
||||||
|
@ -37,32 +38,6 @@
|
||||||
#define TDIGEST_SIZE(compression) \
|
#define TDIGEST_SIZE(compression) \
|
||||||
(sizeof(TDigest) + sizeof(SCentroid) * GET_CENTROID(compression) + sizeof(SPt) * GET_THRESHOLD(compression))
|
(sizeof(TDigest) + sizeof(SCentroid) * GET_CENTROID(compression) + sizeof(SPt) * GET_THRESHOLD(compression))
|
||||||
|
|
||||||
typedef struct SCentroid {
|
|
||||||
double mean;
|
|
||||||
int64_t weight;
|
|
||||||
} SCentroid;
|
|
||||||
|
|
||||||
typedef struct SPt {
|
|
||||||
double value;
|
|
||||||
int64_t weight;
|
|
||||||
} SPt;
|
|
||||||
|
|
||||||
typedef struct TDigest {
|
|
||||||
double compression;
|
|
||||||
int32_t threshold;
|
|
||||||
int64_t size;
|
|
||||||
|
|
||||||
int64_t total_weight;
|
|
||||||
double min;
|
|
||||||
double max;
|
|
||||||
|
|
||||||
int32_t num_buffered_pts;
|
|
||||||
SPt *buffered_pts;
|
|
||||||
|
|
||||||
int32_t num_centroids;
|
|
||||||
SCentroid *centroids;
|
|
||||||
} TDigest;
|
|
||||||
|
|
||||||
TDigest *tdigestNewFrom(void *pBuf, int32_t compression);
|
TDigest *tdigestNewFrom(void *pBuf, int32_t compression);
|
||||||
int32_t tdigestAdd(TDigest *t, double x, int64_t w);
|
int32_t tdigestAdd(TDigest *t, double x, int64_t w);
|
||||||
int32_t tdigestMerge(TDigest *t1, TDigest *t2);
|
int32_t tdigestMerge(TDigest *t1, TDigest *t2);
|
||||||
|
|
|
@ -69,6 +69,8 @@ extern int32_t tdbDebugFlag;
|
||||||
extern int32_t sndDebugFlag;
|
extern int32_t sndDebugFlag;
|
||||||
extern int32_t simDebugFlag;
|
extern int32_t simDebugFlag;
|
||||||
|
|
||||||
|
extern int32_t tqClientDebug;
|
||||||
|
|
||||||
int32_t taosInitLog(const char *logName, int32_t maxFiles, bool tsc);
|
int32_t taosInitLog(const char *logName, int32_t maxFiles, bool tsc);
|
||||||
void taosCloseLog();
|
void taosCloseLog();
|
||||||
void taosResetLog();
|
void taosResetLog();
|
||||||
|
|
|
@ -48,3 +48,6 @@ int64_t tGenIdPI64(void);
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int64_t tGenQid64(int8_t dnodeId);
|
int64_t tGenQid64(int8_t dnodeId);
|
||||||
|
|
||||||
|
int32_t taosGetSystemUUIDU32(uint32_t *uuid);
|
||||||
|
int32_t taosGetSystemUUIDU64(uint64_t *uuid);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
FROM ubuntu:latest
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,12 @@ fi
|
||||||
DISABLE_ADAPTER=${TAOS_DISABLE_ADAPTER:-0}
|
DISABLE_ADAPTER=${TAOS_DISABLE_ADAPTER:-0}
|
||||||
unset TAOS_DISABLE_ADAPTER
|
unset TAOS_DISABLE_ADAPTER
|
||||||
|
|
||||||
|
DISABLE_KEEPER=${TAOS_DISABLE_KEEPER:-0}
|
||||||
|
unset TAOS_DISABLE_KEEPER
|
||||||
|
|
||||||
|
DISABLE_EXPLORER=${TAOS_DISABLE_EXPLORER:-0}
|
||||||
|
unset TAOS_DISABLE_EXPLORER
|
||||||
|
|
||||||
# to get mnodeEpSet from data dir
|
# to get mnodeEpSet from data dir
|
||||||
DATA_DIR=$(taosd -C|grep -E 'dataDir.*(\S+)' -o |head -n1|sed 's/dataDir *//')
|
DATA_DIR=$(taosd -C|grep -E 'dataDir.*(\S+)' -o |head -n1|sed 's/dataDir *//')
|
||||||
DATA_DIR=${DATA_DIR:-/var/lib/taos}
|
DATA_DIR=${DATA_DIR:-/var/lib/taos}
|
||||||
|
@ -33,26 +39,18 @@ ulimit -c unlimited
|
||||||
sysctl -w kernel.core_pattern=/corefile/core-$FQDN-%e-%p >/dev/null >&1
|
sysctl -w kernel.core_pattern=/corefile/core-$FQDN-%e-%p >/dev/null >&1
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ "$DISABLE_ADAPTER" = "0" ]; then
|
|
||||||
which taosadapter >/dev/null && taosadapter &
|
|
||||||
# wait for 6041 port ready
|
|
||||||
for _ in $(seq 1 20); do
|
|
||||||
nc -z localhost 6041 && break
|
|
||||||
sleep 0.5
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# if dnode has been created or has mnode ep set or the host is first ep or not for cluster, just start.
|
# if dnode has been created or has mnode ep set or the host is first ep or not for cluster, just start.
|
||||||
if [ -f "$DATA_DIR/dnode/dnode.json" ] ||
|
if [ -f "$DATA_DIR/dnode/dnode.json" ] ||
|
||||||
[ -f "$DATA_DIR/dnode/mnodeEpSet.json" ] ||
|
[ -f "$DATA_DIR/dnode/mnodeEpSet.json" ] ||
|
||||||
[ "$TAOS_FQDN" = "$FIRST_EP_HOST" ]; then
|
[ "$TAOS_FQDN" = "$FIRST_EP_HOST" ]; then
|
||||||
$@
|
$@ &
|
||||||
# others will first wait the first ep ready.
|
# others will first wait the first ep ready.
|
||||||
else
|
else
|
||||||
if [ "$TAOS_FIRST_EP" = "" ]; then
|
if [ "$TAOS_FIRST_EP" = "" ]; then
|
||||||
echo "run TDengine with single node."
|
echo "run TDengine with single node."
|
||||||
$@
|
$@ &
|
||||||
exit $?
|
|
||||||
fi
|
fi
|
||||||
while true; do
|
while true; do
|
||||||
es=$(taos -h $FIRST_EP_HOST -P $FIRST_EP_PORT --check | grep "^[0-9]*:")
|
es=$(taos -h $FIRST_EP_HOST -P $FIRST_EP_PORT --check | grep "^[0-9]*:")
|
||||||
|
@ -64,5 +62,36 @@ else
|
||||||
fi
|
fi
|
||||||
sleep 1s
|
sleep 1s
|
||||||
done
|
done
|
||||||
$@
|
if ps aux | grep -v grep | grep taosd > dev/null; then
|
||||||
|
echo "TDengine is running"
|
||||||
|
else
|
||||||
|
$@ &
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$DISABLE_ADAPTER" = "0" ]; then
|
||||||
|
which taosadapter >/dev/null && taosadapter &
|
||||||
|
# wait for 6041 port ready
|
||||||
|
for _ in $(seq 1 20); do
|
||||||
|
nc -z localhost 6041 && break
|
||||||
|
sleep 0.5
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$DISABLE_KEEPER" = "0" ]; then
|
||||||
|
sleep 3
|
||||||
|
which taoskeeper >/dev/null && taoskeeper &
|
||||||
|
# wait for 6043 port ready
|
||||||
|
for _ in $(seq 1 20); do
|
||||||
|
nc -z localhost 6043 && break
|
||||||
|
sleep 0.5
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
which taos-explorer >/dev/null && taos-explorer
|
||||||
|
# wait for 6060 port ready
|
||||||
|
for _ in $(seq 1 20); do
|
||||||
|
nc -z localhost 6060 && break
|
||||||
|
sleep 0.5
|
||||||
|
done
|
||||||
|
|
|
@ -663,7 +663,19 @@
|
||||||
<key>SUMMARY</key>
|
<key>SUMMARY</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>LOCALIZATIONS</key>
|
<key>LOCALIZATIONS</key>
|
||||||
<array/>
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>LANGUAGE</key>
|
||||||
|
<string>English</string>
|
||||||
|
<key>VALUE</key>
|
||||||
|
<dict>
|
||||||
|
<key>PATH</key>
|
||||||
|
<string>/opt/taos/TDengine/packaging/tools/mac_install_summary.txt</string>
|
||||||
|
<key>PATH_TYPE</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<key>TITLE</key>
|
<key>TITLE</key>
|
||||||
<dict>
|
<dict>
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>Label</key>
|
||||||
|
<string>com.tdengine.taos-explorer</string>
|
||||||
|
<key>ProgramArguments</key>
|
||||||
|
<array>
|
||||||
|
<string>/usr/local/bin/taos-explorer</string>
|
||||||
|
</array>
|
||||||
|
<key>ProcessType</key>
|
||||||
|
<string>Interactive</string>
|
||||||
|
<key>Disabled</key>
|
||||||
|
<false/>
|
||||||
|
<key>RunAtLoad</key>
|
||||||
|
<false/>
|
||||||
|
<key>LaunchOnlyOnce</key>
|
||||||
|
<false/>
|
||||||
|
<key>SessionCreate</key>
|
||||||
|
<true/>
|
||||||
|
<key>ExitTimeOut</key>
|
||||||
|
<integer>600</integer>
|
||||||
|
<key>KeepAlive</key>
|
||||||
|
<dict>
|
||||||
|
<key>SuccessfulExit</key>
|
||||||
|
<false/>
|
||||||
|
<key>AfterInitialDemand</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>Program</key>
|
||||||
|
<string>/usr/local/bin/taos-explorer</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,13 @@
|
||||||
|
TDengine is installed successfully. Please open an Mac terminal and execute the commands below:
|
||||||
|
|
||||||
|
To configure TDengine, sudo vi /etc/taos/taos.cfg
|
||||||
|
To configure taosadapter, sudo vi /etc/taos/taoadapter.toml
|
||||||
|
To configure taos-explorer, sudo vi /etc/taos/explorer.toml
|
||||||
|
To start service, sudo launchctl start com.tdengine.taosd
|
||||||
|
To start Taos Adapter, sudo launchctl start com.tdengine.taosadapter
|
||||||
|
To start Taos Explorer, sudo launchctl start com.tdengine.taos-explorer
|
||||||
|
|
||||||
|
To start all the components, sudo start-all.sh
|
||||||
|
To access TDengine Commnd Line Interface, taos -h YourServerName
|
||||||
|
To access TDengine Graphic User Interface, http://YourServerName:6060
|
||||||
|
To read the user manual, http://YourServerName:6060/docs-en
|
|
@ -616,8 +616,8 @@ function update_TDengine() {
|
||||||
[ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Adapter ${NC}: taosadapter &${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: taosadapter &${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
echo -e "${GREEN_DARK}To start service ${NC}: sudo launchctl start com.tdengine.taosd${NC}"
|
||||||
echo -e "${GREEN_DARK}To start Adapter ${NC}: launchctl start com.tdengine.taosadapter${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: sudo launchctl start com.tdengine.taosadapter${NC}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -668,8 +668,8 @@ function install_TDengine() {
|
||||||
[ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Adapter ${NC}: taosadapter &${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: taosadapter &${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
echo -e "${GREEN_DARK}To start service ${NC}: sudo launchctl start com.tdengine.taosd${NC}"
|
||||||
echo -e "${GREEN_DARK}To start Adapter ${NC}: launchctl start com.tdengine.taosadapter${NC}"
|
echo -e "${GREEN_DARK}To start Adapter ${NC}: sudo launchctl start com.tdengine.taosadapter${NC}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -206,10 +206,17 @@ function clean_log() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function clean_service_on_launchctl() {
|
function clean_service_on_launchctl() {
|
||||||
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
${csudo}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosd.plist || :
|
||||||
${csudo}rm /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
${csudo}launchctl unload -w /Library/LaunchDaemons/com.taosdata.${PREFIX}adapter.plist || :
|
||||||
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.${clientName2}adapter.plist > /dev/null 2>&1 || :
|
${csudo}launchctl unload -w /Library/LaunchDaemons/com.taosdata.${PREFIX}keeper.plist || :
|
||||||
${csudo}rm /Library/LaunchDaemons/com.taosdata.${clientName2}adapter.plist > /dev/null 2>&1 || :
|
${csudo}launchctl unload -w /Library/LaunchDaemons/com.taosdata.${PREFIX}-explorer.plist || :
|
||||||
|
|
||||||
|
${csudo}launchctl remove com.tdengine.taosd || :
|
||||||
|
${csudo}launchctl remove com.tdengine.${PREFIX}adapter || :
|
||||||
|
${csudo}launchctl remove com.tdengine.${PREFIX}keeper || :
|
||||||
|
${csudo}launchctl remove com.tdengine.${PREFIX}-explorer || :
|
||||||
|
|
||||||
|
${csudo}rm /Library/LaunchDaemons/com.taosdata.* > /dev/null 2>&1 || :
|
||||||
}
|
}
|
||||||
|
|
||||||
function remove_data_and_config() {
|
function remove_data_and_config() {
|
||||||
|
@ -250,6 +257,12 @@ if [ -e ${install_main_dir}/uninstall_${PREFIX}x.sh ]; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$osType" = "Darwin" ]; then
|
||||||
|
clean_service_on_launchctl
|
||||||
|
${csudo}rm -rf /Applications/TDengine.app
|
||||||
|
fi
|
||||||
|
|
||||||
remove_bin
|
remove_bin
|
||||||
clean_header
|
clean_header
|
||||||
# Remove lib file
|
# Remove lib file
|
||||||
|
@ -282,10 +295,7 @@ elif echo $osinfo | grep -qwi "centos"; then
|
||||||
# echo "this is centos system"
|
# echo "this is centos system"
|
||||||
${csudo}rpm -e --noscripts tdengine >/dev/null 2>&1 || :
|
${csudo}rpm -e --noscripts tdengine >/dev/null 2>&1 || :
|
||||||
fi
|
fi
|
||||||
if [ "$osType" = "Darwin" ]; then
|
|
||||||
clean_service_on_launchctl
|
|
||||||
${csudo}rm -rf /Applications/TDengine.app
|
|
||||||
fi
|
|
||||||
|
|
||||||
command -v systemctl >/dev/null 2>&1 && ${csudo}systemctl daemon-reload >/dev/null 2>&1 || true
|
command -v systemctl >/dev/null 2>&1 && ${csudo}systemctl daemon-reload >/dev/null 2>&1 || true
|
||||||
echo
|
echo
|
||||||
|
|
|
@ -71,8 +71,8 @@ Source: {#MyAppSourceDir}\taosdump.exe; DestDir: "{app}"; DestName: "{#CusPrompt
|
||||||
Filename: {sys}\sc.exe; Parameters: "create taosd start= DEMAND binPath= ""C:\\TDengine\\taosd.exe --win_service""" ; Flags: runhidden
|
Filename: {sys}\sc.exe; Parameters: "create taosd start= DEMAND binPath= ""C:\\TDengine\\taosd.exe --win_service""" ; Flags: runhidden
|
||||||
Filename: {sys}\sc.exe; Parameters: "create taosadapter start= DEMAND binPath= ""C:\\TDengine\\taosadapter.exe""" ; Flags: runhidden
|
Filename: {sys}\sc.exe; Parameters: "create taosadapter start= DEMAND binPath= ""C:\\TDengine\\taosadapter.exe""" ; Flags: runhidden
|
||||||
|
|
||||||
Filename: "C:\Windows\System32\odbcconf.exe"; Parameters: "/S /F win_odbcinst.ini"; WorkingDir: "{app}\taos_odbc\x64"; Flags: runhidden; StatusMsg: "Configuring ODBC x64"
|
Filename: "C:\Windows\System32\odbcconf.exe"; Parameters: "/S /F win_odbc_install.ini"; WorkingDir: "{app}\taos_odbc\x64"; Flags: runhidden; StatusMsg: "Configuring ODBC x64"
|
||||||
Filename: "C:\Windows\SysWOW64\odbcconf.exe"; Parameters: "/S /F win_odbcinst.ini"; WorkingDir: "{app}\taos_odbc\x86"; Flags: runhidden; StatusMsg: "Configuring ODBC x86"
|
Filename: "C:\Windows\SysWOW64\odbcconf.exe"; Parameters: "/S /F win_odbc_install.ini"; WorkingDir: "{app}\taos_odbc\x86"; Flags: runhidden; StatusMsg: "Configuring ODBC x86"
|
||||||
|
|
||||||
[UninstallRun]
|
[UninstallRun]
|
||||||
RunOnceId: "stoptaosd"; Filename: {sys}\sc.exe; Parameters: "stop taosd" ; Flags: runhidden
|
RunOnceId: "stoptaosd"; Filename: {sys}\sc.exe; Parameters: "stop taosd" ; Flags: runhidden
|
||||||
|
|
|
@ -226,31 +226,17 @@ typedef struct {
|
||||||
SSchemaWrapper schema;
|
SSchemaWrapper schema;
|
||||||
int32_t resIter;
|
int32_t resIter;
|
||||||
SReqResultInfo resInfo;
|
SReqResultInfo resInfo;
|
||||||
} SMqRspObjCommon;
|
union{
|
||||||
|
struct{
|
||||||
typedef struct {
|
SMqRspHead head;
|
||||||
SMqRspObjCommon common;
|
STqOffsetVal rspOffset;
|
||||||
SMqDataRsp rsp;
|
};
|
||||||
|
SMqDataRsp dataRsp;
|
||||||
|
SMqMetaRsp metaRsp;
|
||||||
|
SMqBatchMetaRsp batchMetaRsp;
|
||||||
|
};
|
||||||
} SMqRspObj;
|
} SMqRspObj;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int8_t resType;
|
|
||||||
char topic[TSDB_TOPIC_FNAME_LEN];
|
|
||||||
char db[TSDB_DB_FNAME_LEN];
|
|
||||||
int32_t vgId;
|
|
||||||
SMqMetaRsp metaRsp;
|
|
||||||
} SMqMetaRspObj;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
SMqRspObjCommon common;
|
|
||||||
STaosxRsp rsp;
|
|
||||||
} SMqTaosxRspObj;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
SMqRspObjCommon common;
|
|
||||||
SMqBatchMetaRsp rsp;
|
|
||||||
} SMqBatchMetaRspObj;
|
|
||||||
|
|
||||||
typedef struct SReqRelInfo {
|
typedef struct SReqRelInfo {
|
||||||
uint64_t userRefId;
|
uint64_t userRefId;
|
||||||
uint64_t prevRefId;
|
uint64_t prevRefId;
|
||||||
|
@ -332,7 +318,7 @@ int32_t getVersion1BlockMetaSize(const char* p, int32_t numOfCols);
|
||||||
|
|
||||||
static FORCE_INLINE SReqResultInfo* tmqGetCurResInfo(TAOS_RES* res) {
|
static FORCE_INLINE SReqResultInfo* tmqGetCurResInfo(TAOS_RES* res) {
|
||||||
SMqRspObj* msg = (SMqRspObj*)res;
|
SMqRspObj* msg = (SMqRspObj*)res;
|
||||||
return (SReqResultInfo*)&msg->common.resInfo;
|
return (SReqResultInfo*)&msg->resInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tmqGetNextResInfo(TAOS_RES* res, bool convertUcs4, SReqResultInfo** pResInfo);
|
int32_t tmqGetNextResInfo(TAOS_RES* res, bool convertUcs4, SReqResultInfo** pResInfo);
|
||||||
|
|
|
@ -114,10 +114,10 @@ static void concatStrings(SArray *list, char *buf, int size) {
|
||||||
db = dot + 1;
|
db = dot + 1;
|
||||||
}
|
}
|
||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
(void)strcat(buf, ",");
|
(void)strncat(buf, ",", size - 1 - len);
|
||||||
len += 1;
|
len += 1;
|
||||||
}
|
}
|
||||||
int ret = snprintf(buf + len, size - len, "%s", db);
|
int ret = tsnprintf(buf + len, size - len, "%s", db);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
tscError("snprintf failed, buf:%s, ret:%d", buf, ret);
|
tscError("snprintf failed, buf:%s, ret:%d", buf, ret);
|
||||||
break;
|
break;
|
||||||
|
@ -1094,18 +1094,14 @@ int taos_options_imp(TSDB_OPTION option, const char *str) {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
uint64_t generateRequestId() {
|
uint64_t generateRequestId() {
|
||||||
static uint64_t hashId = 0;
|
static uint32_t hashId = 0;
|
||||||
static uint32_t requestSerialId = 0;
|
static int32_t requestSerialId = 0;
|
||||||
|
|
||||||
if (hashId == 0) {
|
if (hashId == 0) {
|
||||||
char uid[64] = {0};
|
int32_t code = taosGetSystemUUIDU32(&hashId);
|
||||||
int32_t code = taosGetSystemUUID(uid, tListLen(uid));
|
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
tscError("Failed to get the system uid to generated request id, reason:%s. use ip address instead",
|
tscError("Failed to get the system uid to generated request id, reason:%s. use ip address instead",
|
||||||
tstrerror(TAOS_SYSTEM_ERROR(errno)));
|
tstrerror(code));
|
||||||
|
|
||||||
} else {
|
|
||||||
hashId = MurmurHash3_32(uid, strlen(uid));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1117,7 +1113,7 @@ uint64_t generateRequestId() {
|
||||||
uint32_t val = atomic_add_fetch_32(&requestSerialId, 1);
|
uint32_t val = atomic_add_fetch_32(&requestSerialId, 1);
|
||||||
if (val >= 0xFFFF) atomic_store_32(&requestSerialId, 0);
|
if (val >= 0xFFFF) atomic_store_32(&requestSerialId, 0);
|
||||||
|
|
||||||
id = ((hashId & 0x0FFF) << 52) | ((pid & 0x0FFF) << 40) | ((ts & 0xFFFFFF) << 16) | (val & 0xFFFF);
|
id = (((uint64_t)(hashId & 0x0FFF)) << 52) | ((pid & 0x0FFF) << 40) | ((ts & 0xFFFFFF) << 16) | (val & 0xFFFF);
|
||||||
if (id) {
|
if (id) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1132,27 +1128,27 @@ static setConfRet taos_set_config_imp(const char *config){
|
||||||
static bool setConfFlag = false;
|
static bool setConfFlag = false;
|
||||||
if (setConfFlag) {
|
if (setConfFlag) {
|
||||||
ret.retCode = SET_CONF_RET_ERR_ONLY_ONCE;
|
ret.retCode = SET_CONF_RET_ERR_ONLY_ONCE;
|
||||||
strcpy(ret.retMsg, "configuration can only set once");
|
tstrncpy(ret.retMsg, "configuration can only set once", RET_MSG_LENGTH);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
taosInitGlobalCfg();
|
taosInitGlobalCfg();
|
||||||
cJSON *root = cJSON_Parse(config);
|
cJSON *root = cJSON_Parse(config);
|
||||||
if (root == NULL){
|
if (root == NULL){
|
||||||
ret.retCode = SET_CONF_RET_ERR_JSON_PARSE;
|
ret.retCode = SET_CONF_RET_ERR_JSON_PARSE;
|
||||||
strcpy(ret.retMsg, "parse json error");
|
tstrncpy(ret.retMsg, "parse json error", RET_MSG_LENGTH);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int size = cJSON_GetArraySize(root);
|
int size = cJSON_GetArraySize(root);
|
||||||
if(!cJSON_IsObject(root) || size == 0) {
|
if(!cJSON_IsObject(root) || size == 0) {
|
||||||
ret.retCode = SET_CONF_RET_ERR_JSON_INVALID;
|
ret.retCode = SET_CONF_RET_ERR_JSON_INVALID;
|
||||||
strcpy(ret.retMsg, "json content is invalid, must be not empty object");
|
tstrncpy(ret.retMsg, "json content is invalid, must be not empty object", RET_MSG_LENGTH);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(size >= 1000) {
|
if(size >= 1000) {
|
||||||
ret.retCode = SET_CONF_RET_ERR_TOO_LONG;
|
ret.retCode = SET_CONF_RET_ERR_TOO_LONG;
|
||||||
strcpy(ret.retMsg, "json object size is too long");
|
tstrncpy(ret.retMsg, "json object size is too long", RET_MSG_LENGTH);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1160,7 +1156,7 @@ static setConfRet taos_set_config_imp(const char *config){
|
||||||
cJSON *item = cJSON_GetArrayItem(root, i);
|
cJSON *item = cJSON_GetArrayItem(root, i);
|
||||||
if(!item) {
|
if(!item) {
|
||||||
ret.retCode = SET_CONF_RET_ERR_INNER;
|
ret.retCode = SET_CONF_RET_ERR_INNER;
|
||||||
strcpy(ret.retMsg, "inner error");
|
tstrncpy(ret.retMsg, "inner error", RET_MSG_LENGTH);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if(!taosReadConfigOption(item->string, item->valuestring, NULL, NULL, TAOS_CFG_CSTATUS_OPTION, TSDB_CFG_CTYPE_B_CLIENT)){
|
if(!taosReadConfigOption(item->string, item->valuestring, NULL, NULL, TAOS_CFG_CSTATUS_OPTION, TSDB_CFG_CTYPE_B_CLIENT)){
|
||||||
|
|
|
@ -55,7 +55,7 @@ static int32_t hbProcessUserAuthInfoRsp(void *value, int32_t valueLen, struct SC
|
||||||
for (int32_t i = 0; i < numOfBatchs; ++i) {
|
for (int32_t i = 0; i < numOfBatchs; ++i) {
|
||||||
SGetUserAuthRsp *rsp = taosArrayGet(batchRsp.pArray, i);
|
SGetUserAuthRsp *rsp = taosArrayGet(batchRsp.pArray, i);
|
||||||
if (NULL == rsp) {
|
if (NULL == rsp) {
|
||||||
code = TSDB_CODE_OUT_OF_RANGE;
|
code = terrno;
|
||||||
goto _return;
|
goto _return;
|
||||||
}
|
}
|
||||||
tscDebug("hb to update user auth, user:%s, version:%d", rsp->user, rsp->version);
|
tscDebug("hb to update user auth, user:%s, version:%d", rsp->user, rsp->version);
|
||||||
|
@ -217,7 +217,7 @@ static int32_t hbProcessDBInfoRsp(void *value, int32_t valueLen, struct SCatalog
|
||||||
for (int32_t i = 0; i < numOfBatchs; ++i) {
|
for (int32_t i = 0; i < numOfBatchs; ++i) {
|
||||||
SDbHbRsp *rsp = taosArrayGet(batchRsp.pArray, i);
|
SDbHbRsp *rsp = taosArrayGet(batchRsp.pArray, i);
|
||||||
if (NULL == rsp) {
|
if (NULL == rsp) {
|
||||||
code = TSDB_CODE_OUT_OF_RANGE;
|
code = terrno;
|
||||||
goto _return;
|
goto _return;
|
||||||
}
|
}
|
||||||
if (rsp->useDbRsp) {
|
if (rsp->useDbRsp) {
|
||||||
|
@ -291,7 +291,7 @@ static int32_t hbProcessStbInfoRsp(void *value, int32_t valueLen, struct SCatalo
|
||||||
for (int32_t i = 0; i < numOfMeta; ++i) {
|
for (int32_t i = 0; i < numOfMeta; ++i) {
|
||||||
STableMetaRsp *rsp = taosArrayGet(hbRsp.pMetaRsp, i);
|
STableMetaRsp *rsp = taosArrayGet(hbRsp.pMetaRsp, i);
|
||||||
if (NULL == rsp) {
|
if (NULL == rsp) {
|
||||||
code = TSDB_CODE_OUT_OF_RANGE;
|
code = terrno;
|
||||||
goto _return;
|
goto _return;
|
||||||
}
|
}
|
||||||
if (rsp->numOfColumns < 0) {
|
if (rsp->numOfColumns < 0) {
|
||||||
|
@ -313,7 +313,7 @@ static int32_t hbProcessStbInfoRsp(void *value, int32_t valueLen, struct SCatalo
|
||||||
for (int32_t i = 0; i < numOfIndex; ++i) {
|
for (int32_t i = 0; i < numOfIndex; ++i) {
|
||||||
STableIndexRsp *rsp = taosArrayGet(hbRsp.pIndexRsp, i);
|
STableIndexRsp *rsp = taosArrayGet(hbRsp.pIndexRsp, i);
|
||||||
if (NULL == rsp) {
|
if (NULL == rsp) {
|
||||||
code = TSDB_CODE_OUT_OF_RANGE;
|
code = terrno;
|
||||||
goto _return;
|
goto _return;
|
||||||
}
|
}
|
||||||
TSC_ERR_JRET(catalogUpdateTableIndex(pCatalog, rsp));
|
TSC_ERR_JRET(catalogUpdateTableIndex(pCatalog, rsp));
|
||||||
|
@ -354,7 +354,7 @@ static int32_t hbProcessViewInfoRsp(void *value, int32_t valueLen, struct SCatal
|
||||||
for (int32_t i = 0; i < numOfMeta; ++i) {
|
for (int32_t i = 0; i < numOfMeta; ++i) {
|
||||||
SViewMetaRsp *rsp = taosArrayGetP(hbRsp.pViewRsp, i);
|
SViewMetaRsp *rsp = taosArrayGetP(hbRsp.pViewRsp, i);
|
||||||
if (NULL == rsp) {
|
if (NULL == rsp) {
|
||||||
code = TSDB_CODE_OUT_OF_RANGE;
|
code = terrno;
|
||||||
goto _return;
|
goto _return;
|
||||||
}
|
}
|
||||||
if (rsp->numOfCols < 0) {
|
if (rsp->numOfCols < 0) {
|
||||||
|
@ -772,7 +772,7 @@ static int32_t hbGetUserAuthInfo(SClientHbKey *connKey, SHbParam *param, SClient
|
||||||
SUserAuthVersion *qUserAuth =
|
SUserAuthVersion *qUserAuth =
|
||||||
(SUserAuthVersion *)taosMemoryRealloc(pKv->value, (userNum + 1) * sizeof(SUserAuthVersion));
|
(SUserAuthVersion *)taosMemoryRealloc(pKv->value, (userNum + 1) * sizeof(SUserAuthVersion));
|
||||||
if (qUserAuth) {
|
if (qUserAuth) {
|
||||||
(void)strncpy((qUserAuth + userNum)->user, pTscObj->user, TSDB_USER_LEN);
|
tstrncpy((qUserAuth + userNum)->user, pTscObj->user, TSDB_USER_LEN);
|
||||||
(qUserAuth + userNum)->version = htonl(-1); // force get userAuthInfo
|
(qUserAuth + userNum)->version = htonl(-1); // force get userAuthInfo
|
||||||
pKv->value = qUserAuth;
|
pKv->value = qUserAuth;
|
||||||
pKv->valueLen += sizeof(SUserAuthVersion);
|
pKv->valueLen += sizeof(SUserAuthVersion);
|
||||||
|
|
|
@ -949,7 +949,7 @@ int32_t handleQueryExecRes(SRequestObj* pRequest, void* res, SCatalog* pCatalog,
|
||||||
for (int32_t i = 0; i < tbNum; ++i) {
|
for (int32_t i = 0; i < tbNum; ++i) {
|
||||||
STbVerInfo* tbInfo = taosArrayGet(pTbArray, i);
|
STbVerInfo* tbInfo = taosArrayGet(pTbArray, i);
|
||||||
if (NULL == tbInfo) {
|
if (NULL == tbInfo) {
|
||||||
code = TSDB_CODE_OUT_OF_RANGE;
|
code = terrno;
|
||||||
goto _return;
|
goto _return;
|
||||||
}
|
}
|
||||||
STbSVersion tbSver = {.tbFName = tbInfo->tbFName, .sver = tbInfo->sversion, .tver = tbInfo->tversion};
|
STbSVersion tbSver = {.tbFName = tbInfo->tbFName, .sver = tbInfo->sversion, .tver = tbInfo->tversion};
|
||||||
|
@ -1921,19 +1921,19 @@ TAOS* taos_connect_auth(const char* ip, const char* user, const char* auth, cons
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
TAOS* taos_connect_l(const char* ip, int ipLen, const char* user, int userLen, const char* pass, int passLen,
|
//TAOS* taos_connect_l(const char* ip, int ipLen, const char* user, int userLen, const char* pass, int passLen,
|
||||||
const char* db, int dbLen, uint16_t port) {
|
// const char* db, int dbLen, uint16_t port) {
|
||||||
char ipStr[TSDB_EP_LEN] = {0};
|
// char ipStr[TSDB_EP_LEN] = {0};
|
||||||
char dbStr[TSDB_DB_NAME_LEN] = {0};
|
// char dbStr[TSDB_DB_NAME_LEN] = {0};
|
||||||
char userStr[TSDB_USER_LEN] = {0};
|
// char userStr[TSDB_USER_LEN] = {0};
|
||||||
char passStr[TSDB_PASSWORD_LEN] = {0};
|
// char passStr[TSDB_PASSWORD_LEN] = {0};
|
||||||
|
//
|
||||||
(void)strncpy(ipStr, ip, TMIN(TSDB_EP_LEN - 1, ipLen));
|
// tstrncpy(ipStr, ip, TMIN(TSDB_EP_LEN - 1, ipLen));
|
||||||
(void)strncpy(userStr, user, TMIN(TSDB_USER_LEN - 1, userLen));
|
// tstrncpy(userStr, user, TMIN(TSDB_USER_LEN - 1, userLen));
|
||||||
(void)strncpy(passStr, pass, TMIN(TSDB_PASSWORD_LEN - 1, passLen));
|
// tstrncpy(passStr, pass, TMIN(TSDB_PASSWORD_LEN - 1, passLen));
|
||||||
(void)strncpy(dbStr, db, TMIN(TSDB_DB_NAME_LEN - 1, dbLen));
|
// tstrncpy(dbStr, db, TMIN(TSDB_DB_NAME_LEN - 1, dbLen));
|
||||||
return taos_connect(ipStr, userStr, passStr, dbStr, port);
|
// return taos_connect(ipStr, userStr, passStr, dbStr, port);
|
||||||
}
|
//}
|
||||||
|
|
||||||
void doSetOneRowPtr(SReqResultInfo* pResultInfo) {
|
void doSetOneRowPtr(SReqResultInfo* pResultInfo) {
|
||||||
for (int32_t i = 0; i < pResultInfo->numOfCols; ++i) {
|
for (int32_t i = 0; i < pResultInfo->numOfCols; ++i) {
|
||||||
|
@ -2275,7 +2275,7 @@ static int32_t doConvertJson(SReqResultInfo* pResultInfo, int32_t numOfCols, int
|
||||||
char* jsonInnerData = data + CHAR_BYTES;
|
char* jsonInnerData = data + CHAR_BYTES;
|
||||||
char dst[TSDB_MAX_JSON_TAG_LEN] = {0};
|
char dst[TSDB_MAX_JSON_TAG_LEN] = {0};
|
||||||
if (jsonInnerType == TSDB_DATA_TYPE_NULL) {
|
if (jsonInnerType == TSDB_DATA_TYPE_NULL) {
|
||||||
(void)sprintf(varDataVal(dst), "%s", TSDB_DATA_NULL_STR_L);
|
(void)snprintf(varDataVal(dst), TSDB_MAX_JSON_TAG_LEN - VARSTR_HEADER_SIZE, "%s", TSDB_DATA_NULL_STR_L);
|
||||||
varDataSetLen(dst, strlen(varDataVal(dst)));
|
varDataSetLen(dst, strlen(varDataVal(dst)));
|
||||||
} else if (tTagIsJson(data)) {
|
} else if (tTagIsJson(data)) {
|
||||||
char* jsonString = NULL;
|
char* jsonString = NULL;
|
||||||
|
@ -2298,10 +2298,10 @@ static int32_t doConvertJson(SReqResultInfo* pResultInfo, int32_t numOfCols, int
|
||||||
*(char*)POINTER_SHIFT(varDataVal(dst), length + CHAR_BYTES) = '\"';
|
*(char*)POINTER_SHIFT(varDataVal(dst), length + CHAR_BYTES) = '\"';
|
||||||
} else if (jsonInnerType == TSDB_DATA_TYPE_DOUBLE) {
|
} else if (jsonInnerType == TSDB_DATA_TYPE_DOUBLE) {
|
||||||
double jsonVd = *(double*)(jsonInnerData);
|
double jsonVd = *(double*)(jsonInnerData);
|
||||||
(void)sprintf(varDataVal(dst), "%.9lf", jsonVd);
|
(void)snprintf(varDataVal(dst), TSDB_MAX_JSON_TAG_LEN - VARSTR_HEADER_SIZE, "%.9lf", jsonVd);
|
||||||
varDataSetLen(dst, strlen(varDataVal(dst)));
|
varDataSetLen(dst, strlen(varDataVal(dst)));
|
||||||
} else if (jsonInnerType == TSDB_DATA_TYPE_BOOL) {
|
} else if (jsonInnerType == TSDB_DATA_TYPE_BOOL) {
|
||||||
(void)sprintf(varDataVal(dst), "%s", (*((char*)jsonInnerData) == 1) ? "true" : "false");
|
(void)snprintf(varDataVal(dst), TSDB_MAX_JSON_TAG_LEN - VARSTR_HEADER_SIZE, "%s", (*((char*)jsonInnerData) == 1) ? "true" : "false");
|
||||||
varDataSetLen(dst, strlen(varDataVal(dst)));
|
varDataSetLen(dst, strlen(varDataVal(dst)));
|
||||||
} else {
|
} else {
|
||||||
tscError("doConvertJson error: invalid type:%d", jsonInnerType);
|
tscError("doConvertJson error: invalid type:%d", jsonInnerType);
|
||||||
|
@ -2658,8 +2658,8 @@ int32_t appendTbToReq(SHashObj* pHash, int32_t pos1, int32_t len1, int32_t pos2,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char dbFName[TSDB_DB_FNAME_LEN];
|
char dbFName[TSDB_DB_FNAME_LEN] = {0};
|
||||||
(void)sprintf(dbFName, "%d.%.*s", acctId, dbLen, dbName);
|
(void)snprintf(dbFName, TSDB_DB_FNAME_LEN, "%d.%.*s", acctId, dbLen, dbName);
|
||||||
|
|
||||||
STablesReq* pDb = taosHashGet(pHash, dbFName, strlen(dbFName));
|
STablesReq* pDb = taosHashGet(pHash, dbFName, strlen(dbFName));
|
||||||
if (pDb) {
|
if (pDb) {
|
||||||
|
@ -2672,7 +2672,7 @@ int32_t appendTbToReq(SHashObj* pHash, int32_t pos1, int32_t len1, int32_t pos2,
|
||||||
if (NULL == db.pTables) {
|
if (NULL == db.pTables) {
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
(void)strcpy(db.dbFName, dbFName);
|
tstrncpy(db.dbFName, dbFName, TSDB_DB_FNAME_LEN);
|
||||||
if (NULL == taosArrayPush(db.pTables, &name)) {
|
if (NULL == taosArrayPush(db.pTables, &name)) {
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1083,14 +1083,14 @@ JNIEXPORT jstring JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_stmtErrorMsgIm
|
||||||
TAOS *tscon = (TAOS *)con;
|
TAOS *tscon = (TAOS *)con;
|
||||||
if (tscon == NULL) {
|
if (tscon == NULL) {
|
||||||
jniError("jobj:%p, connection already closed", jobj);
|
jniError("jobj:%p, connection already closed", jobj);
|
||||||
(void)sprintf(errMsg, "jobj:%p, connection already closed", jobj);
|
(void)snprintf(errMsg, sizeof(errMsg), "jobj:%p, connection already closed", jobj);
|
||||||
return (*env)->NewStringUTF(env, errMsg);
|
return (*env)->NewStringUTF(env, errMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
TAOS_STMT *pStmt = (TAOS_STMT *)stmt;
|
TAOS_STMT *pStmt = (TAOS_STMT *)stmt;
|
||||||
if (pStmt == NULL) {
|
if (pStmt == NULL) {
|
||||||
jniError("jobj:%p, conn:%p, invalid stmt", jobj, tscon);
|
jniError("jobj:%p, conn:%p, invalid stmt", jobj, tscon);
|
||||||
(void)sprintf(errMsg, "jobj:%p, conn:%p, invalid stmt", jobj, tscon);
|
(void)snprintf(errMsg, sizeof(errMsg), "jobj:%p, conn:%p, invalid stmt", jobj, tscon);
|
||||||
return (*env)->NewStringUTF(env, errMsg);
|
return (*env)->NewStringUTF(env, errMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -373,25 +373,22 @@ void taos_free_result(TAOS_RES *res) {
|
||||||
SRequestObj *pRequest = (SRequestObj *)res;
|
SRequestObj *pRequest = (SRequestObj *)res;
|
||||||
tscDebug("0x%" PRIx64 " taos_free_result start to free query", pRequest->requestId);
|
tscDebug("0x%" PRIx64 " taos_free_result start to free query", pRequest->requestId);
|
||||||
destroyRequest(pRequest);
|
destroyRequest(pRequest);
|
||||||
} else if (TD_RES_TMQ_METADATA(res)) {
|
return;
|
||||||
SMqTaosxRspObj *pRsp = (SMqTaosxRspObj *)res;
|
|
||||||
tDeleteSTaosxRsp(&pRsp->rsp);
|
|
||||||
doFreeReqResultInfo(&pRsp->common.resInfo);
|
|
||||||
taosMemoryFree(pRsp);
|
|
||||||
} else if (TD_RES_TMQ(res)) {
|
|
||||||
SMqRspObj *pRsp = (SMqRspObj *)res;
|
|
||||||
tDeleteMqDataRsp(&pRsp->rsp);
|
|
||||||
doFreeReqResultInfo(&pRsp->common.resInfo);
|
|
||||||
taosMemoryFree(pRsp);
|
|
||||||
} else if (TD_RES_TMQ_META(res)) {
|
|
||||||
SMqMetaRspObj *pRspObj = (SMqMetaRspObj *)res;
|
|
||||||
tDeleteMqMetaRsp(&pRspObj->metaRsp);
|
|
||||||
taosMemoryFree(pRspObj);
|
|
||||||
} else if (TD_RES_TMQ_BATCH_META(res)) {
|
|
||||||
SMqBatchMetaRspObj *pBtRspObj = (SMqBatchMetaRspObj *)res;
|
|
||||||
tDeleteMqBatchMetaRsp(&pBtRspObj->rsp);
|
|
||||||
taosMemoryFree(pBtRspObj);
|
|
||||||
}
|
}
|
||||||
|
SMqRspObj *pRsp = (SMqRspObj *)res;
|
||||||
|
if (TD_RES_TMQ(res)) {
|
||||||
|
tDeleteMqDataRsp(&pRsp->dataRsp);
|
||||||
|
doFreeReqResultInfo(&pRsp->resInfo);
|
||||||
|
} else if (TD_RES_TMQ_METADATA(res)) {
|
||||||
|
tDeleteSTaosxRsp(&pRsp->dataRsp);
|
||||||
|
doFreeReqResultInfo(&pRsp->resInfo);
|
||||||
|
} else if (TD_RES_TMQ_META(res)) {
|
||||||
|
tDeleteMqMetaRsp(&pRsp->metaRsp);
|
||||||
|
} else if (TD_RES_TMQ_BATCH_META(res)) {
|
||||||
|
tDeleteMqBatchMetaRsp(&pRsp->batchMetaRsp);
|
||||||
|
}
|
||||||
|
taosMemoryFree(pRsp);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void taos_kill_query(TAOS *taos) {
|
void taos_kill_query(TAOS *taos) {
|
||||||
|
@ -454,7 +451,7 @@ TAOS_ROW taos_fetch_row(TAOS_RES *res) {
|
||||||
} else if (TD_RES_TMQ(res) || TD_RES_TMQ_METADATA(res)) {
|
} else if (TD_RES_TMQ(res) || TD_RES_TMQ_METADATA(res)) {
|
||||||
SMqRspObj *msg = ((SMqRspObj *)res);
|
SMqRspObj *msg = ((SMqRspObj *)res);
|
||||||
SReqResultInfo *pResultInfo = NULL;
|
SReqResultInfo *pResultInfo = NULL;
|
||||||
if (msg->common.resIter == -1) {
|
if (msg->resIter == -1) {
|
||||||
if (tmqGetNextResInfo(res, true, &pResultInfo) != 0) {
|
if (tmqGetNextResInfo(res, true, &pResultInfo) != 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -485,71 +482,75 @@ TAOS_ROW taos_fetch_row(TAOS_RES *res) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields) {
|
int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields) {
|
||||||
|
return taos_print_row_with_size(str, INT32_MAX, row, fields, num_fields);
|
||||||
|
}
|
||||||
|
int taos_print_row_with_size(char *str, uint32_t size, TAOS_ROW row, TAOS_FIELD *fields, int num_fields){
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
for (int i = 0; i < num_fields; ++i) {
|
for (int i = 0; i < num_fields; ++i) {
|
||||||
if (i > 0) {
|
if (i > 0 && len < size - 1) {
|
||||||
str[len++] = ' ';
|
str[len++] = ' ';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (row[i] == NULL) {
|
if (row[i] == NULL) {
|
||||||
len += sprintf(str + len, "%s", TSDB_DATA_NULL_STR);
|
len += snprintf(str + len, size - len, "%s", TSDB_DATA_NULL_STR);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (fields[i].type) {
|
switch (fields[i].type) {
|
||||||
case TSDB_DATA_TYPE_TINYINT:
|
case TSDB_DATA_TYPE_TINYINT:
|
||||||
len += sprintf(str + len, "%d", *((int8_t *)row[i]));
|
len += snprintf(str + len, size - len, "%d", *((int8_t *)row[i]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_UTINYINT:
|
case TSDB_DATA_TYPE_UTINYINT:
|
||||||
len += sprintf(str + len, "%u", *((uint8_t *)row[i]));
|
len += snprintf(str + len, size - len, "%u", *((uint8_t *)row[i]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_SMALLINT:
|
case TSDB_DATA_TYPE_SMALLINT:
|
||||||
len += sprintf(str + len, "%d", *((int16_t *)row[i]));
|
len += snprintf(str + len, size - len, "%d", *((int16_t *)row[i]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_USMALLINT:
|
case TSDB_DATA_TYPE_USMALLINT:
|
||||||
len += sprintf(str + len, "%u", *((uint16_t *)row[i]));
|
len += snprintf(str + len, size - len, "%u", *((uint16_t *)row[i]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_INT:
|
case TSDB_DATA_TYPE_INT:
|
||||||
len += sprintf(str + len, "%d", *((int32_t *)row[i]));
|
len += snprintf(str + len, size - len, "%d", *((int32_t *)row[i]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_UINT:
|
case TSDB_DATA_TYPE_UINT:
|
||||||
len += sprintf(str + len, "%u", *((uint32_t *)row[i]));
|
len += snprintf(str + len, size - len, "%u", *((uint32_t *)row[i]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_BIGINT:
|
case TSDB_DATA_TYPE_BIGINT:
|
||||||
len += sprintf(str + len, "%" PRId64, *((int64_t *)row[i]));
|
len += snprintf(str + len, size - len, "%" PRId64, *((int64_t *)row[i]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_UBIGINT:
|
case TSDB_DATA_TYPE_UBIGINT:
|
||||||
len += sprintf(str + len, "%" PRIu64, *((uint64_t *)row[i]));
|
len += snprintf(str + len, size - len, "%" PRIu64, *((uint64_t *)row[i]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_FLOAT: {
|
case TSDB_DATA_TYPE_FLOAT: {
|
||||||
float fv = 0;
|
float fv = 0;
|
||||||
fv = GET_FLOAT_VAL(row[i]);
|
fv = GET_FLOAT_VAL(row[i]);
|
||||||
len += sprintf(str + len, "%f", fv);
|
len += snprintf(str + len, size - len, "%f", fv);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_DOUBLE: {
|
case TSDB_DATA_TYPE_DOUBLE: {
|
||||||
double dv = 0;
|
double dv = 0;
|
||||||
dv = GET_DOUBLE_VAL(row[i]);
|
dv = GET_DOUBLE_VAL(row[i]);
|
||||||
len += sprintf(str + len, "%lf", dv);
|
len += snprintf(str + len, size - len, "%lf", dv);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_VARBINARY: {
|
case TSDB_DATA_TYPE_VARBINARY: {
|
||||||
void *data = NULL;
|
void *data = NULL;
|
||||||
uint32_t size = 0;
|
uint32_t tmp = 0;
|
||||||
int32_t charLen = varDataLen((char *)row[i] - VARSTR_HEADER_SIZE);
|
int32_t charLen = varDataLen((char *)row[i] - VARSTR_HEADER_SIZE);
|
||||||
if (taosAscii2Hex(row[i], charLen, &data, &size) < 0) {
|
if (taosAscii2Hex(row[i], charLen, &data, &tmp) < 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
(void)memcpy(str + len, data, size);
|
uint32_t copyLen = TMIN(size - len - 1, tmp);
|
||||||
len += size;
|
(void)memcpy(str + len, data, copyLen);
|
||||||
|
len += copyLen;
|
||||||
taosMemoryFree(data);
|
taosMemoryFree(data);
|
||||||
} break;
|
} break;
|
||||||
case TSDB_DATA_TYPE_BINARY:
|
case TSDB_DATA_TYPE_BINARY:
|
||||||
|
@ -569,21 +570,28 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)memcpy(str + len, row[i], charLen);
|
uint32_t copyLen = TMIN(size - len - 1, charLen);
|
||||||
len += charLen;
|
(void)memcpy(str + len, row[i], copyLen);
|
||||||
|
len += copyLen;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
case TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
len += sprintf(str + len, "%" PRId64, *((int64_t *)row[i]));
|
len += snprintf(str + len, size - len, "%" PRId64, *((int64_t *)row[i]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSDB_DATA_TYPE_BOOL:
|
case TSDB_DATA_TYPE_BOOL:
|
||||||
len += sprintf(str + len, "%d", *((int8_t *)row[i]));
|
len += snprintf(str + len, size - len, "%d", *((int8_t *)row[i]));
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (len >= size - 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (len < size){
|
||||||
|
str[len] = 0;
|
||||||
}
|
}
|
||||||
str[len] = 0;
|
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
@ -948,7 +956,7 @@ int taos_get_current_db(TAOS *taos, char *database, int len, int *required) {
|
||||||
if (required) *required = strlen(pTscObj->db) + 1;
|
if (required) *required = strlen(pTscObj->db) + 1;
|
||||||
TSC_ERR_JRET(TSDB_CODE_INVALID_PARA);
|
TSC_ERR_JRET(TSDB_CODE_INVALID_PARA);
|
||||||
} else {
|
} else {
|
||||||
(void)strcpy(database, pTscObj->db);
|
tstrncpy(database, pTscObj->db, len);
|
||||||
code = 0;
|
code = 0;
|
||||||
}
|
}
|
||||||
_return:
|
_return:
|
||||||
|
|
|
@ -21,7 +21,7 @@ char tmpSlowLogPath[PATH_MAX] = {0};
|
||||||
TdThread monitorThread;
|
TdThread monitorThread;
|
||||||
|
|
||||||
static int32_t getSlowLogTmpDir(char* tmpPath, int32_t size) {
|
static int32_t getSlowLogTmpDir(char* tmpPath, int32_t size) {
|
||||||
int ret = snprintf(tmpPath, size, "%s/tdengine_slow_log/", tsTempDir);
|
int ret = tsnprintf(tmpPath, size, "%s/tdengine_slow_log/", tsTempDir);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
tscError("failed to get tmp path ret:%d", ret);
|
tscError("failed to get tmp path ret:%d", ret);
|
||||||
return TSDB_CODE_TSC_INTERNAL_ERROR;
|
return TSDB_CODE_TSC_INTERNAL_ERROR;
|
||||||
|
@ -183,7 +183,7 @@ FAILED:
|
||||||
|
|
||||||
static void generateClusterReport(taos_collector_registry_t* registry, void* pTransporter, SEpSet* epSet) {
|
static void generateClusterReport(taos_collector_registry_t* registry, void* pTransporter, SEpSet* epSet) {
|
||||||
char ts[50] = {0};
|
char ts[50] = {0};
|
||||||
(void)sprintf(ts, "%" PRId64, taosGetTimestamp(TSDB_TIME_PRECISION_MILLI));
|
(void)snprintf(ts, sizeof(ts), "%" PRId64, taosGetTimestamp(TSDB_TIME_PRECISION_MILLI));
|
||||||
char* pCont = (char*)taos_collector_registry_bridge_new(registry, ts, "%" PRId64, NULL);
|
char* pCont = (char*)taos_collector_registry_bridge_new(registry, ts, "%" PRId64, NULL);
|
||||||
if (NULL == pCont) {
|
if (NULL == pCont) {
|
||||||
tscError("generateClusterReport failed, get null content.");
|
tscError("generateClusterReport failed, get null content.");
|
||||||
|
@ -401,7 +401,7 @@ static void monitorWriteSlowLog2File(MonitorSlowLogData* slowLogData, char* tmpP
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pClient->lastCheckTime = taosGetMonoTimestampMs();
|
pClient->lastCheckTime = taosGetMonoTimestampMs();
|
||||||
(void)strcpy(pClient->path, path);
|
tstrncpy(pClient->path, path, PATH_MAX);
|
||||||
pClient->offset = 0;
|
pClient->offset = 0;
|
||||||
pClient->pFile = pFile;
|
pClient->pFile = pFile;
|
||||||
if (taosHashPut(monitorSlowLogHash, &slowLogData->clusterId, LONG_BYTES, &pClient, POINTER_BYTES) != 0) {
|
if (taosHashPut(monitorSlowLogHash, &slowLogData->clusterId, LONG_BYTES, &pClient, POINTER_BYTES) != 0) {
|
||||||
|
@ -458,7 +458,7 @@ static char* readFile(TdFilePtr pFile, int64_t* offset, int64_t size) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
char* buf = pCont;
|
char* buf = pCont;
|
||||||
(void)strcat(buf++, "[");
|
(void)strncat(buf++, "[", totalSize - 1);
|
||||||
int64_t readSize = taosReadFile(pFile, buf, totalSize - 4); // 4 reserved for []
|
int64_t readSize = taosReadFile(pFile, buf, totalSize - 4); // 4 reserved for []
|
||||||
if (readSize <= 0) {
|
if (readSize <= 0) {
|
||||||
if (readSize < 0) {
|
if (readSize < 0) {
|
||||||
|
|
|
@ -23,12 +23,12 @@
|
||||||
#include "tglobal.h"
|
#include "tglobal.h"
|
||||||
#include "tmsgtype.h"
|
#include "tmsgtype.h"
|
||||||
|
|
||||||
#define RAW_NULL_CHECK(c) \
|
#define RAW_NULL_CHECK(c) \
|
||||||
do { \
|
do { \
|
||||||
if (c == NULL) { \
|
if (c == NULL) { \
|
||||||
code = terrno; \
|
code = terrno; \
|
||||||
goto end; \
|
goto end; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define RAW_FALSE_CHECK(c) \
|
#define RAW_FALSE_CHECK(c) \
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define LOG_ID_TAG "connId:0x%" PRIx64 ",qid:0x%" PRIx64
|
#define LOG_ID_TAG "connId:0x%" PRIx64 ",QID:0x%" PRIx64
|
||||||
#define LOG_ID_VALUE *(int64_t*)taos, pRequest->requestId
|
#define LOG_ID_VALUE *(int64_t*)taos, pRequest->requestId
|
||||||
|
|
||||||
#define TMQ_META_VERSION "1.0"
|
#define TMQ_META_VERSION "1.0"
|
||||||
|
@ -458,15 +458,17 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) {
|
||||||
cJSON* tvalue = NULL;
|
cJSON* tvalue = NULL;
|
||||||
if (IS_VAR_DATA_TYPE(pTagVal->type)) {
|
if (IS_VAR_DATA_TYPE(pTagVal->type)) {
|
||||||
char* buf = NULL;
|
char* buf = NULL;
|
||||||
|
int64_t bufSize = 0;
|
||||||
if (pTagVal->type == TSDB_DATA_TYPE_VARBINARY) {
|
if (pTagVal->type == TSDB_DATA_TYPE_VARBINARY) {
|
||||||
buf = taosMemoryCalloc(pTagVal->nData * 2 + 2 + 3, 1);
|
bufSize = pTagVal->nData * 2 + 2 + 3;
|
||||||
} else {
|
} else {
|
||||||
buf = taosMemoryCalloc(pTagVal->nData + 3, 1);
|
bufSize = pTagVal->nData + 3;
|
||||||
}
|
}
|
||||||
|
buf = taosMemoryCalloc(bufSize, 1);
|
||||||
|
|
||||||
RAW_NULL_CHECK(buf);
|
RAW_NULL_CHECK(buf);
|
||||||
if (!buf) goto end;
|
if (!buf) goto end;
|
||||||
if (dataConverToStr(buf, pTagVal->type, pTagVal->pData, pTagVal->nData, NULL) != TSDB_CODE_SUCCESS) {
|
if (dataConverToStr(buf, bufSize, pTagVal->type, pTagVal->pData, pTagVal->nData, NULL) != TSDB_CODE_SUCCESS) {
|
||||||
taosMemoryFree(buf);
|
taosMemoryFree(buf);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -548,7 +550,7 @@ end:
|
||||||
tDecoderClear(&decoder);
|
tDecoderClear(&decoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void processAutoCreateTable(STaosxRsp* rsp, char** string) {
|
static void processAutoCreateTable(SMqDataRsp* rsp, char** string) {
|
||||||
SDecoder* decoder = NULL;
|
SDecoder* decoder = NULL;
|
||||||
SVCreateTbReq* pCreateReq = NULL;
|
SVCreateTbReq* pCreateReq = NULL;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
@ -736,13 +738,15 @@ static void processAlterTable(SMqMetaRsp* metaRsp, cJSON** pJson) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
int64_t bufSize = 0;
|
||||||
if (vAlterTbReq.tagType == TSDB_DATA_TYPE_VARBINARY) {
|
if (vAlterTbReq.tagType == TSDB_DATA_TYPE_VARBINARY) {
|
||||||
buf = taosMemoryCalloc(vAlterTbReq.nTagVal * 2 + 2 + 3, 1);
|
bufSize = vAlterTbReq.nTagVal * 2 + 2 + 3;
|
||||||
} else {
|
} else {
|
||||||
buf = taosMemoryCalloc(vAlterTbReq.nTagVal + 3, 1);
|
bufSize = vAlterTbReq.nTagVal + 3;
|
||||||
}
|
}
|
||||||
|
buf = taosMemoryCalloc(bufSize, 1);
|
||||||
RAW_NULL_CHECK(buf);
|
RAW_NULL_CHECK(buf);
|
||||||
if (dataConverToStr(buf, vAlterTbReq.tagType, vAlterTbReq.pTagVal, vAlterTbReq.nTagVal, NULL) !=
|
if (dataConverToStr(buf, bufSize, vAlterTbReq.tagType, vAlterTbReq.pTagVal, vAlterTbReq.nTagVal, NULL) !=
|
||||||
TSDB_CODE_SUCCESS) {
|
TSDB_CODE_SUCCESS) {
|
||||||
taosMemoryFree(buf);
|
taosMemoryFree(buf);
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -922,7 +926,7 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
for (int32_t i = 0; i < req.schemaRow.nCols; i++) {
|
for (int32_t i = 0; i < req.schemaRow.nCols; i++) {
|
||||||
SSchema* pSchema = req.schemaRow.pSchema + i;
|
SSchema* pSchema = req.schemaRow.pSchema + i;
|
||||||
SFieldWithOptions field = {.type = pSchema->type, .flags = pSchema->flags, .bytes = pSchema->bytes};
|
SFieldWithOptions field = {.type = pSchema->type, .flags = pSchema->flags, .bytes = pSchema->bytes};
|
||||||
(void)strcpy(field.name, pSchema->name);
|
tstrncpy(field.name, pSchema->name, TSDB_COL_NAME_LEN);
|
||||||
|
|
||||||
if (createDefaultCompress) {
|
if (createDefaultCompress) {
|
||||||
field.compress = createDefaultColCmprByType(pSchema->type);
|
field.compress = createDefaultColCmprByType(pSchema->type);
|
||||||
|
@ -937,7 +941,7 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
for (int32_t i = 0; i < req.schemaTag.nCols; i++) {
|
for (int32_t i = 0; i < req.schemaTag.nCols; i++) {
|
||||||
SSchema* pSchema = req.schemaTag.pSchema + i;
|
SSchema* pSchema = req.schemaTag.pSchema + i;
|
||||||
SField field = {.type = pSchema->type, .flags = pSchema->flags, .bytes = pSchema->bytes};
|
SField field = {.type = pSchema->type, .flags = pSchema->flags, .bytes = pSchema->bytes};
|
||||||
(void)strcpy(field.name, pSchema->name);
|
tstrncpy(field.name, pSchema->name, TSDB_COL_NAME_LEN);
|
||||||
RAW_NULL_CHECK(taosArrayPush(pReq.pTags, &field));
|
RAW_NULL_CHECK(taosArrayPush(pReq.pTags, &field));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1188,7 +1192,7 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
pCreateReq->ctb.suid = pTableMeta->uid;
|
pCreateReq->ctb.suid = pTableMeta->uid;
|
||||||
|
|
||||||
SArray* pTagVals = NULL;
|
SArray* pTagVals = NULL;
|
||||||
code = tTagToValArray((STag *)pCreateReq->ctb.pTag, &pTagVals);
|
code = tTagToValArray((STag*)pCreateReq->ctb.pTag, &pTagVals);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
taosMemoryFreeClear(pTableMeta);
|
taosMemoryFreeClear(pTableMeta);
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -1206,18 +1210,19 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
if (strcmp(tag->name, tName) == 0 && tag->type != TSDB_DATA_TYPE_JSON) {
|
if (strcmp(tag->name, tName) == 0 && tag->type != TSDB_DATA_TYPE_JSON) {
|
||||||
STagVal* pTagVal = (STagVal*)taosArrayGet(pTagVals, i);
|
STagVal* pTagVal = (STagVal*)taosArrayGet(pTagVals, i);
|
||||||
if (pTagVal) {
|
if (pTagVal) {
|
||||||
if (pTagVal->cid != tag->colId){
|
if (pTagVal->cid != tag->colId) {
|
||||||
pTagVal->cid = tag->colId;
|
pTagVal->cid = tag->colId;
|
||||||
rebuildTag = true;
|
rebuildTag = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
uError("create tb invalid data %s, size:%d index:%d cid:%d", pCreateReq->name, (int)taosArrayGetSize(pTagVals), i, tag->colId);
|
uError("create tb invalid data %s, size:%d index:%d cid:%d", pCreateReq->name,
|
||||||
|
(int)taosArrayGetSize(pTagVals), i, tag->colId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
taosMemoryFreeClear(pTableMeta);
|
taosMemoryFreeClear(pTableMeta);
|
||||||
if (rebuildTag){
|
if (rebuildTag) {
|
||||||
STag* ppTag = NULL;
|
STag* ppTag = NULL;
|
||||||
code = tTagNew(pTagVals, 1, false, &ppTag);
|
code = tTagNew(pTagVals, 1, false, &ppTag);
|
||||||
taosArrayDestroy(pTagVals);
|
taosArrayDestroy(pTagVals);
|
||||||
|
@ -1239,7 +1244,7 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
if (pTableBatch == NULL) {
|
if (pTableBatch == NULL) {
|
||||||
SVgroupCreateTableBatch tBatch = {0};
|
SVgroupCreateTableBatch tBatch = {0};
|
||||||
tBatch.info = pInfo;
|
tBatch.info = pInfo;
|
||||||
(void)strcpy(tBatch.dbName, pRequest->pDb);
|
tstrncpy(tBatch.dbName, pRequest->pDb, TSDB_DB_NAME_LEN);
|
||||||
|
|
||||||
tBatch.req.pArray = taosArrayInit(4, sizeof(struct SVCreateTbReq));
|
tBatch.req.pArray = taosArrayInit(4, sizeof(struct SVCreateTbReq));
|
||||||
RAW_NULL_CHECK(tBatch.req.pArray);
|
RAW_NULL_CHECK(tBatch.req.pArray);
|
||||||
|
@ -1720,8 +1725,8 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) {
|
||||||
|
|
||||||
uDebug(LOG_ID_TAG " write raw data, data:%p, dataLen:%d", LOG_ID_VALUE, data, dataLen);
|
uDebug(LOG_ID_TAG " write raw data, data:%p, dataLen:%d", LOG_ID_VALUE, data, dataLen);
|
||||||
pRequest->syncQuery = true;
|
pRequest->syncQuery = true;
|
||||||
rspObj.common.resIter = -1;
|
rspObj.resIter = -1;
|
||||||
rspObj.common.resType = RES_TYPE__TMQ;
|
rspObj.resType = RES_TYPE__TMQ;
|
||||||
|
|
||||||
int8_t dataVersion = *(int8_t*)data;
|
int8_t dataVersion = *(int8_t*)data;
|
||||||
if (dataVersion >= MQ_DATA_RSP_VERSION) {
|
if (dataVersion >= MQ_DATA_RSP_VERSION) {
|
||||||
|
@ -1729,7 +1734,7 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) {
|
||||||
dataLen -= sizeof(int8_t) + sizeof(int32_t);
|
dataLen -= sizeof(int8_t) + sizeof(int32_t);
|
||||||
}
|
}
|
||||||
tDecoderInit(&decoder, data, dataLen);
|
tDecoderInit(&decoder, data, dataLen);
|
||||||
code = tDecodeMqDataRsp(&decoder, &rspObj.rsp);
|
code = tDecodeMqDataRsp(&decoder, &rspObj.dataRsp);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
SET_ERROR_MSG("decode mq data rsp failed");
|
SET_ERROR_MSG("decode mq data rsp failed");
|
||||||
code = TSDB_CODE_INVALID_MSG;
|
code = TSDB_CODE_INVALID_MSG;
|
||||||
|
@ -1753,19 +1758,19 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) {
|
||||||
RAW_RETURN_CHECK(smlInitHandle(&pQuery));
|
RAW_RETURN_CHECK(smlInitHandle(&pQuery));
|
||||||
pVgHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK);
|
pVgHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK);
|
||||||
RAW_NULL_CHECK(pVgHash);
|
RAW_NULL_CHECK(pVgHash);
|
||||||
while (++rspObj.common.resIter < rspObj.rsp.common.blockNum) {
|
while (++rspObj.resIter < rspObj.dataRsp.blockNum) {
|
||||||
void* pRetrieve = taosArrayGetP(rspObj.rsp.common.blockData, rspObj.common.resIter);
|
void* pRetrieve = taosArrayGetP(rspObj.dataRsp.blockData, rspObj.resIter);
|
||||||
RAW_NULL_CHECK(pRetrieve);
|
RAW_NULL_CHECK(pRetrieve);
|
||||||
if (!rspObj.rsp.common.withSchema) {
|
if (!rspObj.dataRsp.withSchema) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* tbName = (const char*)taosArrayGetP(rspObj.rsp.common.blockTbName, rspObj.common.resIter);
|
const char* tbName = (const char*)taosArrayGetP(rspObj.dataRsp.blockTbName, rspObj.resIter);
|
||||||
RAW_NULL_CHECK(tbName);
|
RAW_NULL_CHECK(tbName);
|
||||||
|
|
||||||
SName pName = {TSDB_TABLE_NAME_T, pRequest->pTscObj->acctId, {0}, {0}};
|
SName pName = {TSDB_TABLE_NAME_T, pRequest->pTscObj->acctId, {0}, {0}};
|
||||||
(void)strcpy(pName.dbname, pRequest->pDb);
|
tstrncpy(pName.dbname, pRequest->pDb, TSDB_DB_NAME_LEN);
|
||||||
(void)strcpy(pName.tname, tbName);
|
tstrncpy(pName.tname, tbName, TSDB_TABLE_NAME_LEN);
|
||||||
|
|
||||||
RAW_RETURN_CHECK(catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta));
|
RAW_RETURN_CHECK(catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta));
|
||||||
|
|
||||||
|
@ -1777,7 +1782,7 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) {
|
||||||
RAW_RETURN_CHECK(taosHashPut(pVgHash, (const char*)&vg.vgId, sizeof(vg.vgId), (char*)&vg, sizeof(vg)));
|
RAW_RETURN_CHECK(taosHashPut(pVgHash, (const char*)&vg.vgId, sizeof(vg.vgId), (char*)&vg, sizeof(vg)));
|
||||||
}
|
}
|
||||||
|
|
||||||
SSchemaWrapper* pSW = (SSchemaWrapper*)taosArrayGetP(rspObj.rsp.common.blockSchema, rspObj.common.resIter);
|
SSchemaWrapper* pSW = (SSchemaWrapper*)taosArrayGetP(rspObj.dataRsp.blockSchema, rspObj.resIter);
|
||||||
RAW_NULL_CHECK(pSW);
|
RAW_NULL_CHECK(pSW);
|
||||||
TAOS_FIELD* fields = taosMemoryCalloc(pSW->nCols, sizeof(TAOS_FIELD));
|
TAOS_FIELD* fields = taosMemoryCalloc(pSW->nCols, sizeof(TAOS_FIELD));
|
||||||
RAW_NULL_CHECK(fields);
|
RAW_NULL_CHECK(fields);
|
||||||
|
@ -1804,7 +1809,7 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) {
|
||||||
|
|
||||||
end:
|
end:
|
||||||
uDebug(LOG_ID_TAG " write raw data return, msg:%s", LOG_ID_VALUE, tstrerror(code));
|
uDebug(LOG_ID_TAG " write raw data return, msg:%s", LOG_ID_VALUE, tstrerror(code));
|
||||||
tDeleteMqDataRsp(&rspObj.rsp);
|
tDeleteMqDataRsp(&rspObj.dataRsp);
|
||||||
tDecoderClear(&decoder);
|
tDecoderClear(&decoder);
|
||||||
qDestroyQuery(pQuery);
|
qDestroyQuery(pQuery);
|
||||||
destroyRequest(pRequest);
|
destroyRequest(pRequest);
|
||||||
|
@ -1813,9 +1818,9 @@ end:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t buildCreateTbMap(STaosxRsp* rsp, SHashObj* pHashObj) {
|
static int32_t buildCreateTbMap(SMqDataRsp* rsp, SHashObj* pHashObj) {
|
||||||
// find schema data info
|
// find schema data info
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SVCreateTbReq pCreateReq = {0};
|
SVCreateTbReq pCreateReq = {0};
|
||||||
SDecoder decoderTmp = {0};
|
SDecoder decoderTmp = {0};
|
||||||
|
|
||||||
|
@ -1826,15 +1831,16 @@ static int32_t buildCreateTbMap(STaosxRsp* rsp, SHashObj* pHashObj) {
|
||||||
RAW_NULL_CHECK(lenTmp);
|
RAW_NULL_CHECK(lenTmp);
|
||||||
|
|
||||||
tDecoderInit(&decoderTmp, *dataTmp, *lenTmp);
|
tDecoderInit(&decoderTmp, *dataTmp, *lenTmp);
|
||||||
RAW_RETURN_CHECK (tDecodeSVCreateTbReq(&decoderTmp, &pCreateReq));
|
RAW_RETURN_CHECK(tDecodeSVCreateTbReq(&decoderTmp, &pCreateReq));
|
||||||
|
|
||||||
if (pCreateReq.type != TSDB_CHILD_TABLE) {
|
if (pCreateReq.type != TSDB_CHILD_TABLE) {
|
||||||
code = TSDB_CODE_INVALID_MSG;
|
code = TSDB_CODE_INVALID_MSG;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (taosHashGet(pHashObj, pCreateReq.name, strlen(pCreateReq.name)) == NULL){
|
if (taosHashGet(pHashObj, pCreateReq.name, strlen(pCreateReq.name)) == NULL) {
|
||||||
RAW_RETURN_CHECK(taosHashPut(pHashObj, pCreateReq.name, strlen(pCreateReq.name), &pCreateReq, sizeof(SVCreateTbReq)));
|
RAW_RETURN_CHECK(
|
||||||
} else{
|
taosHashPut(pHashObj, pCreateReq.name, strlen(pCreateReq.name), &pCreateReq, sizeof(SVCreateTbReq)));
|
||||||
|
} else {
|
||||||
tDestroySVCreateTbReq(&pCreateReq, TSDB_MSG_FLG_DECODE);
|
tDestroySVCreateTbReq(&pCreateReq, TSDB_MSG_FLG_DECODE);
|
||||||
pCreateReq = (SVCreateTbReq){0};
|
pCreateReq = (SVCreateTbReq){0};
|
||||||
}
|
}
|
||||||
|
@ -1857,7 +1863,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
SHashObj* pVgHash = NULL;
|
SHashObj* pVgHash = NULL;
|
||||||
SQuery* pQuery = NULL;
|
SQuery* pQuery = NULL;
|
||||||
SMqTaosxRspObj rspObj = {0};
|
SMqRspObj rspObj = {0};
|
||||||
SDecoder decoder = {0};
|
SDecoder decoder = {0};
|
||||||
STableMeta* pTableMeta = NULL;
|
STableMeta* pTableMeta = NULL;
|
||||||
SHashObj* pCreateTbHash = NULL;
|
SHashObj* pCreateTbHash = NULL;
|
||||||
|
@ -1867,8 +1873,8 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
|
||||||
|
|
||||||
uDebug(LOG_ID_TAG " write raw metadata, data:%p, dataLen:%d", LOG_ID_VALUE, data, dataLen);
|
uDebug(LOG_ID_TAG " write raw metadata, data:%p, dataLen:%d", LOG_ID_VALUE, data, dataLen);
|
||||||
pRequest->syncQuery = true;
|
pRequest->syncQuery = true;
|
||||||
rspObj.common.resIter = -1;
|
rspObj.resIter = -1;
|
||||||
rspObj.common.resType = RES_TYPE__TMQ_METADATA;
|
rspObj.resType = RES_TYPE__TMQ_METADATA;
|
||||||
|
|
||||||
int8_t dataVersion = *(int8_t*)data;
|
int8_t dataVersion = *(int8_t*)data;
|
||||||
if (dataVersion >= MQ_DATA_RSP_VERSION) {
|
if (dataVersion >= MQ_DATA_RSP_VERSION) {
|
||||||
|
@ -1877,7 +1883,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
|
||||||
}
|
}
|
||||||
|
|
||||||
tDecoderInit(&decoder, data, dataLen);
|
tDecoderInit(&decoder, data, dataLen);
|
||||||
code = tDecodeSTaosxRsp(&decoder, &rspObj.rsp);
|
code = tDecodeSTaosxRsp(&decoder, &rspObj.dataRsp);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
SET_ERROR_MSG("decode mq taosx data rsp failed");
|
SET_ERROR_MSG("decode mq taosx data rsp failed");
|
||||||
code = TSDB_CODE_INVALID_MSG;
|
code = TSDB_CODE_INVALID_MSG;
|
||||||
|
@ -1903,34 +1909,34 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
|
||||||
RAW_NULL_CHECK(pVgHash);
|
RAW_NULL_CHECK(pVgHash);
|
||||||
pCreateTbHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
pCreateTbHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
||||||
RAW_NULL_CHECK(pCreateTbHash);
|
RAW_NULL_CHECK(pCreateTbHash);
|
||||||
RAW_RETURN_CHECK(buildCreateTbMap(&rspObj.rsp, pCreateTbHash));
|
RAW_RETURN_CHECK(buildCreateTbMap(&rspObj.dataRsp, pCreateTbHash));
|
||||||
|
|
||||||
uDebug(LOG_ID_TAG " write raw metadata block num:%d", LOG_ID_VALUE, rspObj.rsp.common.blockNum);
|
uDebug(LOG_ID_TAG " write raw metadata block num:%d", LOG_ID_VALUE, rspObj.dataRsp.blockNum);
|
||||||
while (++rspObj.common.resIter < rspObj.rsp.common.blockNum) {
|
while (++rspObj.resIter < rspObj.dataRsp.blockNum) {
|
||||||
void* pRetrieve = taosArrayGetP(rspObj.rsp.common.blockData, rspObj.common.resIter);
|
void* pRetrieve = taosArrayGetP(rspObj.dataRsp.blockData, rspObj.resIter);
|
||||||
RAW_NULL_CHECK(pRetrieve);
|
RAW_NULL_CHECK(pRetrieve);
|
||||||
if (!rspObj.rsp.common.withSchema) {
|
if (!rspObj.dataRsp.withSchema) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* tbName = (const char*)taosArrayGetP(rspObj.rsp.common.blockTbName, rspObj.common.resIter);
|
const char* tbName = (const char*)taosArrayGetP(rspObj.dataRsp.blockTbName, rspObj.resIter);
|
||||||
if (!tbName) {
|
if (!tbName) {
|
||||||
SET_ERROR_MSG("block tbname is null");
|
SET_ERROR_MSG("block tbname is null");
|
||||||
code = TSDB_CODE_TMQ_INVALID_MSG;
|
code = terrno;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
uDebug(LOG_ID_TAG " write raw metadata block tbname:%s", LOG_ID_VALUE, tbName);
|
uDebug(LOG_ID_TAG " write raw metadata block tbname:%s", LOG_ID_VALUE, tbName);
|
||||||
SName pName = {TSDB_TABLE_NAME_T, pRequest->pTscObj->acctId, {0}, {0}};
|
SName pName = {TSDB_TABLE_NAME_T, pRequest->pTscObj->acctId, {0}, {0}};
|
||||||
(void)strcpy(pName.dbname, pRequest->pDb);
|
tstrncpy(pName.dbname, pRequest->pDb, TSDB_DB_NAME_LEN);
|
||||||
(void)strcpy(pName.tname, tbName);
|
tstrncpy(pName.tname, tbName, TSDB_TABLE_NAME_LEN);
|
||||||
|
|
||||||
// find schema data info
|
// find schema data info
|
||||||
SVCreateTbReq* pCreateReqDst = (SVCreateTbReq*)taosHashGet(pCreateTbHash, tbName, strlen(tbName));
|
SVCreateTbReq* pCreateReqDst = (SVCreateTbReq*)taosHashGet(pCreateTbHash, tbName, strlen(tbName));
|
||||||
SVgroupInfo vg = {0};
|
SVgroupInfo vg = {0};
|
||||||
RAW_RETURN_CHECK(catalogGetTableHashVgroup(pCatalog, &conn, &pName, &vg));
|
RAW_RETURN_CHECK(catalogGetTableHashVgroup(pCatalog, &conn, &pName, &vg));
|
||||||
if (pCreateReqDst) { // change stable name to get meta
|
if (pCreateReqDst) { // change stable name to get meta
|
||||||
(void)strcpy(pName.tname, pCreateReqDst->ctb.stbName);
|
tstrncpy(pName.tname, pCreateReqDst->ctb.stbName, TSDB_TABLE_NAME_LEN);
|
||||||
}
|
}
|
||||||
RAW_RETURN_CHECK(catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta));
|
RAW_RETURN_CHECK(catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta));
|
||||||
|
|
||||||
|
@ -1944,7 +1950,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
|
||||||
RAW_RETURN_CHECK(taosHashPut(pVgHash, (const char*)&vg.vgId, sizeof(vg.vgId), (char*)&vg, sizeof(vg)));
|
RAW_RETURN_CHECK(taosHashPut(pVgHash, (const char*)&vg.vgId, sizeof(vg.vgId), (char*)&vg, sizeof(vg)));
|
||||||
}
|
}
|
||||||
|
|
||||||
SSchemaWrapper* pSW = (SSchemaWrapper*)taosArrayGetP(rspObj.rsp.common.blockSchema, rspObj.common.resIter);
|
SSchemaWrapper* pSW = (SSchemaWrapper*)taosArrayGetP(rspObj.dataRsp.blockSchema, rspObj.resIter);
|
||||||
RAW_NULL_CHECK(pSW);
|
RAW_NULL_CHECK(pSW);
|
||||||
TAOS_FIELD* fields = taosMemoryCalloc(pSW->nCols, sizeof(TAOS_FIELD));
|
TAOS_FIELD* fields = taosMemoryCalloc(pSW->nCols, sizeof(TAOS_FIELD));
|
||||||
if (fields == NULL) {
|
if (fields == NULL) {
|
||||||
|
@ -1957,10 +1963,10 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
|
||||||
fields[i].bytes = pSW->pSchema[i].bytes;
|
fields[i].bytes = pSW->pSchema[i].bytes;
|
||||||
tstrncpy(fields[i].name, pSW->pSchema[i].name, tListLen(pSW->pSchema[i].name));
|
tstrncpy(fields[i].name, pSW->pSchema[i].name, tListLen(pSW->pSchema[i].name));
|
||||||
}
|
}
|
||||||
void* rawData = getRawDataFromRes(pRetrieve);
|
void* rawData = getRawDataFromRes(pRetrieve);
|
||||||
char err[ERR_MSG_LEN] = {0};
|
char err[ERR_MSG_LEN] = {0};
|
||||||
SVCreateTbReq* pCreateReqTmp = NULL;
|
SVCreateTbReq* pCreateReqTmp = NULL;
|
||||||
if (pCreateReqDst){
|
if (pCreateReqDst) {
|
||||||
RAW_RETURN_CHECK(cloneSVreateTbReq(pCreateReqDst, &pCreateReqTmp));
|
RAW_RETURN_CHECK(cloneSVreateTbReq(pCreateReqDst, &pCreateReqTmp));
|
||||||
}
|
}
|
||||||
code = rawBlockBindData(pQuery, pTableMeta, rawData, &pCreateReqTmp, fields, pSW->nCols, true, err, ERR_MSG_LEN);
|
code = rawBlockBindData(pQuery, pTableMeta, rawData, &pCreateReqTmp, fields, pSW->nCols, true, err, ERR_MSG_LEN);
|
||||||
|
@ -1989,7 +1995,7 @@ end:
|
||||||
pIter = taosHashIterate(pCreateTbHash, pIter);
|
pIter = taosHashIterate(pCreateTbHash, pIter);
|
||||||
}
|
}
|
||||||
taosHashCleanup(pCreateTbHash);
|
taosHashCleanup(pCreateTbHash);
|
||||||
tDeleteSTaosxRsp(&rspObj.rsp);
|
tDeleteSTaosxRsp(&rspObj.dataRsp);
|
||||||
tDecoderClear(&decoder);
|
tDecoderClear(&decoder);
|
||||||
qDestroyQuery(pQuery);
|
qDestroyQuery(pQuery);
|
||||||
destroyRequest(pRequest);
|
destroyRequest(pRequest);
|
||||||
|
@ -2070,31 +2076,28 @@ char* tmq_get_json_meta(TAOS_RES* res) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* string = NULL;
|
||||||
|
SMqRspObj* rspObj = (SMqRspObj*)res;
|
||||||
if (TD_RES_TMQ_METADATA(res)) {
|
if (TD_RES_TMQ_METADATA(res)) {
|
||||||
SMqTaosxRspObj* pMetaDataRspObj = (SMqTaosxRspObj*)res;
|
processAutoCreateTable(&rspObj->dataRsp, &string);
|
||||||
char* string = NULL;
|
|
||||||
processAutoCreateTable(&pMetaDataRspObj->rsp, &string);
|
|
||||||
return string;
|
|
||||||
} else if (TD_RES_TMQ_BATCH_META(res)) {
|
} else if (TD_RES_TMQ_BATCH_META(res)) {
|
||||||
SMqBatchMetaRspObj* pBatchMetaRspObj = (SMqBatchMetaRspObj*)res;
|
processBatchMetaToJson(&rspObj->batchMetaRsp, &string);
|
||||||
char* string = NULL;
|
} else if (TD_RES_TMQ_META(res)) {
|
||||||
processBatchMetaToJson(&pBatchMetaRspObj->rsp, &string);
|
cJSON* pJson = NULL;
|
||||||
return string;
|
processSimpleMeta(&rspObj->metaRsp, &pJson);
|
||||||
|
string = cJSON_PrintUnformatted(pJson);
|
||||||
|
cJSON_Delete(pJson);
|
||||||
|
} else{
|
||||||
|
uError("tmq_get_json_meta res:%d, invalid type", *(int8_t*)res);
|
||||||
}
|
}
|
||||||
|
|
||||||
SMqMetaRspObj* pMetaRspObj = (SMqMetaRspObj*)res;
|
|
||||||
cJSON* pJson = NULL;
|
|
||||||
processSimpleMeta(&pMetaRspObj->metaRsp, &pJson);
|
|
||||||
char* string = cJSON_PrintUnformatted(pJson);
|
|
||||||
cJSON_Delete(pJson);
|
|
||||||
uDebug("tmq_get_json_meta string:%s", string);
|
uDebug("tmq_get_json_meta string:%s", string);
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tmq_free_json_meta(char* jsonMeta) { taosMemoryFreeClear(jsonMeta); }
|
void tmq_free_json_meta(char* jsonMeta) { taosMemoryFreeClear(jsonMeta); }
|
||||||
|
|
||||||
static int32_t getOffSetLen(const void* rsp) {
|
static int32_t getOffSetLen(const SMqDataRsp* pRsp) {
|
||||||
const SMqDataRspCommon* pRsp = rsp;
|
|
||||||
SEncoder coder = {0};
|
SEncoder coder = {0};
|
||||||
tEncoderInit(&coder, NULL, 0);
|
tEncoderInit(&coder, NULL, 0);
|
||||||
if (tEncodeSTqOffsetVal(&coder, &pRsp->reqOffset) < 0) return -1;
|
if (tEncodeSTqOffsetVal(&coder, &pRsp->reqOffset) < 0) return -1;
|
||||||
|
@ -2104,9 +2107,8 @@ static int32_t getOffSetLen(const void* rsp) {
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef int32_t __encode_func__(SEncoder* pEncoder, const void* pRsp);
|
typedef int32_t __encode_func__(SEncoder* pEncoder, const SMqDataRsp* pRsp);
|
||||||
|
static int32_t encodeMqDataRsp(__encode_func__* encodeFunc, SMqDataRsp* rspObj, tmq_raw_data* raw) {
|
||||||
static int32_t encodeMqDataRsp(__encode_func__* encodeFunc, void* rspObj, tmq_raw_data* raw) {
|
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SEncoder encoder = {0};
|
SEncoder encoder = {0};
|
||||||
|
@ -2155,15 +2157,14 @@ int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) {
|
||||||
if (!raw || !res) {
|
if (!raw || !res) {
|
||||||
return TSDB_CODE_INVALID_PARA;
|
return TSDB_CODE_INVALID_PARA;
|
||||||
}
|
}
|
||||||
|
SMqRspObj* rspObj = ((SMqRspObj*)res);
|
||||||
if (TD_RES_TMQ_META(res)) {
|
if (TD_RES_TMQ_META(res)) {
|
||||||
SMqMetaRspObj* pMetaRspObj = (SMqMetaRspObj*)res;
|
raw->raw = rspObj->metaRsp.metaRsp;
|
||||||
raw->raw = pMetaRspObj->metaRsp.metaRsp;
|
raw->raw_len = rspObj->metaRsp.metaRspLen;
|
||||||
raw->raw_len = pMetaRspObj->metaRsp.metaRspLen;
|
raw->raw_type = rspObj->metaRsp.resMsgType;
|
||||||
raw->raw_type = pMetaRspObj->metaRsp.resMsgType;
|
|
||||||
uDebug("tmq get raw type meta:%p", raw);
|
uDebug("tmq get raw type meta:%p", raw);
|
||||||
} else if (TD_RES_TMQ(res)) {
|
} else if (TD_RES_TMQ(res)) {
|
||||||
SMqRspObj* rspObj = ((SMqRspObj*)res);
|
int32_t code = encodeMqDataRsp(tEncodeMqDataRsp, &rspObj->dataRsp, raw);
|
||||||
int32_t code = encodeMqDataRsp(tEncodeMqDataRsp, &rspObj->rsp, raw);
|
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
uError("tmq get raw type error:%d", terrno);
|
uError("tmq get raw type error:%d", terrno);
|
||||||
return code;
|
return code;
|
||||||
|
@ -2171,9 +2172,7 @@ int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) {
|
||||||
raw->raw_type = RES_TYPE__TMQ;
|
raw->raw_type = RES_TYPE__TMQ;
|
||||||
uDebug("tmq get raw type data:%p", raw);
|
uDebug("tmq get raw type data:%p", raw);
|
||||||
} else if (TD_RES_TMQ_METADATA(res)) {
|
} else if (TD_RES_TMQ_METADATA(res)) {
|
||||||
SMqTaosxRspObj* rspObj = ((SMqTaosxRspObj*)res);
|
int32_t code = encodeMqDataRsp(tEncodeSTaosxRsp, &rspObj->dataRsp, raw);
|
||||||
|
|
||||||
int32_t code = encodeMqDataRsp(tEncodeSTaosxRsp, &rspObj->rsp, raw);
|
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
uError("tmq get raw type error:%d", terrno);
|
uError("tmq get raw type error:%d", terrno);
|
||||||
return code;
|
return code;
|
||||||
|
@ -2181,10 +2180,9 @@ int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) {
|
||||||
raw->raw_type = RES_TYPE__TMQ_METADATA;
|
raw->raw_type = RES_TYPE__TMQ_METADATA;
|
||||||
uDebug("tmq get raw type metadata:%p", raw);
|
uDebug("tmq get raw type metadata:%p", raw);
|
||||||
} else if (TD_RES_TMQ_BATCH_META(res)) {
|
} else if (TD_RES_TMQ_BATCH_META(res)) {
|
||||||
SMqBatchMetaRspObj* pBtMetaRspObj = (SMqBatchMetaRspObj*)res;
|
raw->raw = rspObj->batchMetaRsp.pMetaBuff;
|
||||||
raw->raw = pBtMetaRspObj->rsp.pMetaBuff;
|
raw->raw_len = rspObj->batchMetaRsp.metaBuffLen;
|
||||||
raw->raw_len = pBtMetaRspObj->rsp.metaBuffLen;
|
raw->raw_type = rspObj->resType;
|
||||||
raw->raw_type = RES_TYPE__TMQ_BATCH_META;
|
|
||||||
uDebug("tmq get raw batch meta:%p", raw);
|
uDebug("tmq get raw batch meta:%p", raw);
|
||||||
} else {
|
} else {
|
||||||
uError("tmq get raw error type:%d", *(int8_t*)res);
|
uError("tmq get raw error type:%d", *(int8_t*)res);
|
||||||
|
|
|
@ -137,7 +137,7 @@ void smlBuildInvalidDataMsg(SSmlMsgBuf *pBuf, const char *msg1, const char *msg2
|
||||||
}
|
}
|
||||||
(void)memset(pBuf->buf, 0, pBuf->len);
|
(void)memset(pBuf->buf, 0, pBuf->len);
|
||||||
if (msg1) {
|
if (msg1) {
|
||||||
(void)strncat(pBuf->buf, msg1, pBuf->len);
|
(void)strncat(pBuf->buf, msg1, pBuf->len - 1);
|
||||||
}
|
}
|
||||||
int32_t left = pBuf->len - strlen(pBuf->buf);
|
int32_t left = pBuf->len - strlen(pBuf->buf);
|
||||||
if (left > 2 && msg2) {
|
if (left > 2 && msg2) {
|
||||||
|
@ -393,7 +393,7 @@ int32_t smlProcessChildTable(SSmlHandle *info, SSmlLineInfo *elements) {
|
||||||
tinfo->tags = taosArrayDup(info->preLineTagKV, NULL);
|
tinfo->tags = taosArrayDup(info->preLineTagKV, NULL);
|
||||||
if (tinfo->tags == NULL) {
|
if (tinfo->tags == NULL) {
|
||||||
smlDestroyTableInfo(&tinfo);
|
smlDestroyTableInfo(&tinfo);
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return terrno;
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < taosArrayGetSize(info->preLineTagKV); i++) {
|
for (size_t i = 0; i < taosArrayGetSize(info->preLineTagKV); i++) {
|
||||||
SSmlKv *kv = (SSmlKv *)taosArrayGet(info->preLineTagKV, i);
|
SSmlKv *kv = (SSmlKv *)taosArrayGet(info->preLineTagKV, i);
|
||||||
|
@ -515,9 +515,9 @@ static int32_t smlParseTableName(SArray *tags, char *childTableName, char *tbnam
|
||||||
if (tag == NULL) {
|
if (tag == NULL) {
|
||||||
return TSDB_CODE_SML_INVALID_DATA;
|
return TSDB_CODE_SML_INVALID_DATA;
|
||||||
}
|
}
|
||||||
(void)strncat(childTableName, tag->value, tag->length);
|
(void)strncat(childTableName, tag->value, TMIN(tag->length, TSDB_TABLE_NAME_LEN - 1 - strlen(childTableName)));
|
||||||
if (i != taosArrayGetSize(tags) - 1) {
|
if (i != taosArrayGetSize(tags) - 1) {
|
||||||
(void)strcat(childTableName, tsSmlAutoChildTableNameDelimiter);
|
(void)strncat(childTableName, tsSmlAutoChildTableNameDelimiter, TSDB_TABLE_NAME_LEN - 1 - strlen(childTableName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tsSmlDot2Underline) {
|
if (tsSmlDot2Underline) {
|
||||||
|
@ -538,8 +538,7 @@ static int32_t smlParseTableName(SArray *tags, char *childTableName, char *tbnam
|
||||||
// handle child table name
|
// handle child table name
|
||||||
if (childTableNameLen == tag->keyLen && strncmp(tag->key, tbnameKey, tag->keyLen) == 0) {
|
if (childTableNameLen == tag->keyLen && strncmp(tag->key, tbnameKey, tag->keyLen) == 0) {
|
||||||
(void)memset(childTableName, 0, TSDB_TABLE_NAME_LEN);
|
(void)memset(childTableName, 0, TSDB_TABLE_NAME_LEN);
|
||||||
(void)strncpy(childTableName, tag->value,
|
tstrncpy(childTableName, tag->value, TMIN(TSDB_TABLE_NAME_LEN, tag->length + 1));
|
||||||
(tag->length < TSDB_TABLE_NAME_LEN ? tag->length : TSDB_TABLE_NAME_LEN));
|
|
||||||
if (tsSmlDot2Underline) {
|
if (tsSmlDot2Underline) {
|
||||||
smlStrReplace(childTableName, strlen(childTableName));
|
smlStrReplace(childTableName, strlen(childTableName));
|
||||||
}
|
}
|
||||||
|
@ -561,7 +560,7 @@ int32_t smlSetCTableName(SSmlTableInfo *oneTable, char *tbnameKey) {
|
||||||
if (strlen(oneTable->childTableName) == 0) {
|
if (strlen(oneTable->childTableName) == 0) {
|
||||||
SArray *dst = taosArrayDup(oneTable->tags, NULL);
|
SArray *dst = taosArrayDup(oneTable->tags, NULL);
|
||||||
if (dst == NULL) {
|
if (dst == NULL) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return terrno;
|
||||||
}
|
}
|
||||||
if (oneTable->sTableNameLen >= TSDB_TABLE_NAME_LEN) {
|
if (oneTable->sTableNameLen >= TSDB_TABLE_NAME_LEN) {
|
||||||
uError("SML:smlSetCTableName super table name is too long");
|
uError("SML:smlSetCTableName super table name is too long");
|
||||||
|
@ -957,7 +956,7 @@ static int32_t smlCheckMeta(SSchema *schema, int32_t length, SArray *cols, bool
|
||||||
for (; i < taosArrayGetSize(cols); i++) {
|
for (; i < taosArrayGetSize(cols); i++) {
|
||||||
SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, i);
|
SSmlKv *kv = (SSmlKv *)taosArrayGet(cols, i);
|
||||||
if (kv == NULL) {
|
if (kv == NULL) {
|
||||||
code = TSDB_CODE_SML_INVALID_DATA;
|
code = terrno;
|
||||||
goto END;
|
goto END;
|
||||||
}
|
}
|
||||||
if (taosHashGet(hashTmp, kv->key, kv->keyLen) == NULL) {
|
if (taosHashGet(hashTmp, kv->key, kv->keyLen) == NULL) {
|
||||||
|
@ -1053,7 +1052,7 @@ static int32_t smlSendMetaMsg(SSmlHandle *info, SName *pName, SArray *pColumns,
|
||||||
for (int32_t i = 0; i < pReq.numOfColumns; ++i) {
|
for (int32_t i = 0; i < pReq.numOfColumns; ++i) {
|
||||||
SField *pField = taosArrayGet(pColumns, i);
|
SField *pField = taosArrayGet(pColumns, i);
|
||||||
if (pField == NULL) {
|
if (pField == NULL) {
|
||||||
code = TSDB_CODE_SML_INVALID_DATA;
|
code = terrno;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
SFieldWithOptions fieldWithOption = {0};
|
SFieldWithOptions fieldWithOption = {0};
|
||||||
|
|
|
@ -236,7 +236,7 @@ int32_t stmtUpdateBindInfo(TAOS_STMT* stmt, STableMeta* pTableMeta, void* tags,
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)memcpy(&pStmt->bInfo.sname, tbName, sizeof(*tbName));
|
(void)memcpy(&pStmt->bInfo.sname, tbName, sizeof(*tbName));
|
||||||
(void)strncpy(pStmt->bInfo.tbFName, tbFName, sizeof(pStmt->bInfo.tbFName) - 1);
|
tstrncpy(pStmt->bInfo.tbFName, tbFName, TSDB_TABLE_FNAME_LEN);
|
||||||
pStmt->bInfo.tbFName[sizeof(pStmt->bInfo.tbFName) - 1] = 0;
|
pStmt->bInfo.tbFName[sizeof(pStmt->bInfo.tbFName) - 1] = 0;
|
||||||
|
|
||||||
pStmt->bInfo.tbUid = autoCreateTbl ? 0 : pTableMeta->uid;
|
pStmt->bInfo.tbUid = autoCreateTbl ? 0 : pTableMeta->uid;
|
||||||
|
@ -983,7 +983,7 @@ int stmtSetDbName(TAOS_STMT* stmt, const char* dbName) {
|
||||||
taosMemoryFreeClear(pStmt->exec.pRequest->pDb);
|
taosMemoryFreeClear(pStmt->exec.pRequest->pDb);
|
||||||
pStmt->exec.pRequest->pDb = taosStrdup(dbName);
|
pStmt->exec.pRequest->pDb = taosStrdup(dbName);
|
||||||
if (pStmt->exec.pRequest->pDb == NULL) {
|
if (pStmt->exec.pRequest->pDb == NULL) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return terrno;
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1018,13 +1018,13 @@ int stmtSetTbName(TAOS_STMT* stmt, const char* tbName) {
|
||||||
STMT_ERR_RET(stmtGetFromCache(pStmt));
|
STMT_ERR_RET(stmtGetFromCache(pStmt));
|
||||||
|
|
||||||
if (pStmt->bInfo.needParse) {
|
if (pStmt->bInfo.needParse) {
|
||||||
(void)strncpy(pStmt->bInfo.tbName, tbName, sizeof(pStmt->bInfo.tbName) - 1);
|
tstrncpy(pStmt->bInfo.tbName, tbName, sizeof(pStmt->bInfo.tbName));
|
||||||
pStmt->bInfo.tbName[sizeof(pStmt->bInfo.tbName) - 1] = 0;
|
pStmt->bInfo.tbName[sizeof(pStmt->bInfo.tbName) - 1] = 0;
|
||||||
|
|
||||||
STMT_ERR_RET(stmtParseSql(pStmt));
|
STMT_ERR_RET(stmtParseSql(pStmt));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(void)strncpy(pStmt->bInfo.tbName, tbName, sizeof(pStmt->bInfo.tbName) - 1);
|
tstrncpy(pStmt->bInfo.tbName, tbName, sizeof(pStmt->bInfo.tbName));
|
||||||
pStmt->bInfo.tbName[sizeof(pStmt->bInfo.tbName) - 1] = 0;
|
pStmt->bInfo.tbName[sizeof(pStmt->bInfo.tbName) - 1] = 0;
|
||||||
pStmt->exec.pRequest->requestId++;
|
pStmt->exec.pRequest->requestId++;
|
||||||
pStmt->bInfo.needParse = false;
|
pStmt->bInfo.needParse = false;
|
||||||
|
@ -1172,7 +1172,7 @@ int32_t stmtAppendTablePostHandle(STscStmt* pStmt, SStmtQNode* param) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 == pStmt->sql.siInfo.firstName[0]) {
|
if (0 == pStmt->sql.siInfo.firstName[0]) {
|
||||||
(void)strcpy(pStmt->sql.siInfo.firstName, pStmt->bInfo.tbName);
|
tstrncpy(pStmt->sql.siInfo.firstName, pStmt->bInfo.tbName, TSDB_TABLE_NAME_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
param->tblData.getFromHash = pStmt->sql.siInfo.tbFromHash;
|
param->tblData.getFromHash = pStmt->sql.siInfo.tbFromHash;
|
||||||
|
@ -1313,7 +1313,7 @@ int stmtBindBatch(TAOS_STMT* stmt, TAOS_MULTI_BIND* bind, int32_t colIdx) {
|
||||||
// param->tblData.aCol = taosArrayInit(20, POINTER_BYTES);
|
// param->tblData.aCol = taosArrayInit(20, POINTER_BYTES);
|
||||||
|
|
||||||
param->restoreTbCols = false;
|
param->restoreTbCols = false;
|
||||||
(void)strcpy(param->tblData.tbName, pStmt->bInfo.tbName);
|
tstrncpy(param->tblData.tbName, pStmt->bInfo.tbName, TSDB_TABLE_NAME_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t startUs3 = taosGetTimestampUs();
|
int64_t startUs3 = taosGetTimestampUs();
|
||||||
|
|
|
@ -187,7 +187,7 @@ static int32_t stmtUpdateBindInfo(TAOS_STMT2* stmt, STableMeta* pTableMeta, void
|
||||||
}
|
}
|
||||||
|
|
||||||
(void)memcpy(&pStmt->bInfo.sname, tbName, sizeof(*tbName));
|
(void)memcpy(&pStmt->bInfo.sname, tbName, sizeof(*tbName));
|
||||||
(void)strncpy(pStmt->bInfo.tbFName, tbFName, sizeof(pStmt->bInfo.tbFName) - 1);
|
tstrncpy(pStmt->bInfo.tbFName, tbFName, sizeof(pStmt->bInfo.tbFName));
|
||||||
pStmt->bInfo.tbFName[sizeof(pStmt->bInfo.tbFName) - 1] = 0;
|
pStmt->bInfo.tbFName[sizeof(pStmt->bInfo.tbFName) - 1] = 0;
|
||||||
|
|
||||||
pStmt->bInfo.tbUid = autoCreateTbl ? 0 : pTableMeta->uid;
|
pStmt->bInfo.tbUid = autoCreateTbl ? 0 : pTableMeta->uid;
|
||||||
|
@ -850,7 +850,7 @@ static int stmtSetDbName2(TAOS_STMT2* stmt, const char* dbName) {
|
||||||
taosMemoryFreeClear(pStmt->exec.pRequest->pDb);
|
taosMemoryFreeClear(pStmt->exec.pRequest->pDb);
|
||||||
pStmt->exec.pRequest->pDb = taosStrdup(dbName);
|
pStmt->exec.pRequest->pDb = taosStrdup(dbName);
|
||||||
if (pStmt->exec.pRequest->pDb == NULL) {
|
if (pStmt->exec.pRequest->pDb == NULL) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return terrno;
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -961,13 +961,13 @@ int stmtSetTbName2(TAOS_STMT2* stmt, const char* tbName) {
|
||||||
STMT_ERR_RET(stmtGetFromCache(pStmt));
|
STMT_ERR_RET(stmtGetFromCache(pStmt));
|
||||||
|
|
||||||
if (pStmt->bInfo.needParse) {
|
if (pStmt->bInfo.needParse) {
|
||||||
(void)strncpy(pStmt->bInfo.tbName, tbName, sizeof(pStmt->bInfo.tbName) - 1);
|
tstrncpy(pStmt->bInfo.tbName, tbName, sizeof(pStmt->bInfo.tbName));
|
||||||
pStmt->bInfo.tbName[sizeof(pStmt->bInfo.tbName) - 1] = 0;
|
pStmt->bInfo.tbName[sizeof(pStmt->bInfo.tbName) - 1] = 0;
|
||||||
|
|
||||||
STMT_ERR_RET(stmtParseSql(pStmt));
|
STMT_ERR_RET(stmtParseSql(pStmt));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(void)strncpy(pStmt->bInfo.tbName, tbName, sizeof(pStmt->bInfo.tbName) - 1);
|
tstrncpy(pStmt->bInfo.tbName, tbName, sizeof(pStmt->bInfo.tbName));
|
||||||
pStmt->bInfo.tbName[sizeof(pStmt->bInfo.tbName) - 1] = 0;
|
pStmt->bInfo.tbName[sizeof(pStmt->bInfo.tbName) - 1] = 0;
|
||||||
pStmt->exec.pRequest->requestId++;
|
pStmt->exec.pRequest->requestId++;
|
||||||
pStmt->bInfo.needParse = false;
|
pStmt->bInfo.needParse = false;
|
||||||
|
@ -1113,7 +1113,7 @@ static int32_t stmtAppendTablePostHandle(STscStmt2* pStmt, SStmtQNode* param) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 == pStmt->sql.siInfo.firstName[0]) {
|
if (0 == pStmt->sql.siInfo.firstName[0]) {
|
||||||
(void)strcpy(pStmt->sql.siInfo.firstName, pStmt->bInfo.tbName);
|
tstrncpy(pStmt->sql.siInfo.firstName, pStmt->bInfo.tbName, TSDB_TABLE_NAME_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
param->tblData.getFromHash = pStmt->sql.siInfo.tbFromHash;
|
param->tblData.getFromHash = pStmt->sql.siInfo.tbFromHash;
|
||||||
|
@ -1200,22 +1200,6 @@ static int stmtAddBatch2(TAOS_STMT2* stmt) {
|
||||||
|
|
||||||
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_ADD_BATCH));
|
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_ADD_BATCH));
|
||||||
|
|
||||||
if (pStmt->sql.stbInterlaceMode) {
|
|
||||||
int64_t startUs2 = taosGetTimestampUs();
|
|
||||||
pStmt->stat.addBatchUs += startUs2 - startUs;
|
|
||||||
|
|
||||||
pStmt->sql.siInfo.tableColsReady = false;
|
|
||||||
|
|
||||||
SStmtQNode* param = NULL;
|
|
||||||
STMT_ERR_RET(stmtAllocQNodeFromBuf(&pStmt->sql.siInfo.tbBuf, (void**)¶m));
|
|
||||||
param->restoreTbCols = true;
|
|
||||||
param->next = NULL;
|
|
||||||
|
|
||||||
stmtEnqueue(pStmt, param);
|
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
STMT_ERR_RET(stmtCacheBlock(pStmt));
|
STMT_ERR_RET(stmtCacheBlock(pStmt));
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -1367,7 +1351,7 @@ int stmtBindBatch2(TAOS_STMT2* stmt, TAOS_STMT2_BIND* bind, int32_t colIdx) {
|
||||||
// param->tblData.aCol = taosArrayInit(20, POINTER_BYTES);
|
// param->tblData.aCol = taosArrayInit(20, POINTER_BYTES);
|
||||||
|
|
||||||
param->restoreTbCols = false;
|
param->restoreTbCols = false;
|
||||||
(void)strcpy(param->tblData.tbName, pStmt->bInfo.tbName);
|
tstrncpy(param->tblData.tbName, pStmt->bInfo.tbName, TSDB_TABLE_NAME_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t startUs3 = taosGetTimestampUs();
|
int64_t startUs3 = taosGetTimestampUs();
|
||||||
|
@ -1627,6 +1611,22 @@ int stmtExec2(TAOS_STMT2* stmt, int* affected_rows) {
|
||||||
|
|
||||||
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_EXECUTE));
|
STMT_ERR_RET(stmtSwitchStatus(pStmt, STMT_EXECUTE));
|
||||||
|
|
||||||
|
if (pStmt->sql.stbInterlaceMode) {
|
||||||
|
int64_t startUs2 = taosGetTimestampUs();
|
||||||
|
pStmt->stat.addBatchUs += startUs2 - startUs;
|
||||||
|
|
||||||
|
pStmt->sql.siInfo.tableColsReady = false;
|
||||||
|
|
||||||
|
SStmtQNode* param = NULL;
|
||||||
|
STMT_ERR_RET(stmtAllocQNodeFromBuf(&pStmt->sql.siInfo.tbBuf, (void**)¶m));
|
||||||
|
param->restoreTbCols = true;
|
||||||
|
param->next = NULL;
|
||||||
|
|
||||||
|
stmtEnqueue(pStmt, param);
|
||||||
|
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
if (STMT_TYPE_QUERY != pStmt->sql.type) {
|
if (STMT_TYPE_QUERY != pStmt->sql.type) {
|
||||||
if (pStmt->sql.stbInterlaceMode) {
|
if (pStmt->sql.stbInterlaceMode) {
|
||||||
int64_t startTs = taosGetTimestampUs();
|
int64_t startTs = taosGetTimestampUs();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -260,19 +260,19 @@ static void responseCompleteCallback(S3Status status, const S3ErrorDetails *erro
|
||||||
const int elen = sizeof(cbd->err_msg);
|
const int elen = sizeof(cbd->err_msg);
|
||||||
if (error) {
|
if (error) {
|
||||||
if (error->message && elen - len > 0) {
|
if (error->message && elen - len > 0) {
|
||||||
len += snprintf(&(cbd->err_msg[len]), elen - len, " Message: %s\n", error->message);
|
len += tsnprintf(&(cbd->err_msg[len]), elen - len, " Message: %s\n", error->message);
|
||||||
}
|
}
|
||||||
if (error->resource && elen - len > 0) {
|
if (error->resource && elen - len > 0) {
|
||||||
len += snprintf(&(cbd->err_msg[len]), elen - len, " Resource: %s\n", error->resource);
|
len += tsnprintf(&(cbd->err_msg[len]), elen - len, " Resource: %s\n", error->resource);
|
||||||
}
|
}
|
||||||
if (error->furtherDetails && elen - len > 0) {
|
if (error->furtherDetails && elen - len > 0) {
|
||||||
len += snprintf(&(cbd->err_msg[len]), elen - len, " Further Details: %s\n", error->furtherDetails);
|
len += tsnprintf(&(cbd->err_msg[len]), elen - len, " Further Details: %s\n", error->furtherDetails);
|
||||||
}
|
}
|
||||||
if (error->extraDetailsCount && elen - len > 0) {
|
if (error->extraDetailsCount && elen - len > 0) {
|
||||||
len += snprintf(&(cbd->err_msg[len]), elen - len, "%s", " Extra Details:\n");
|
len += tsnprintf(&(cbd->err_msg[len]), elen - len, "%s", " Extra Details:\n");
|
||||||
for (int i = 0; i < error->extraDetailsCount; i++) {
|
for (int i = 0; i < error->extraDetailsCount; i++) {
|
||||||
if (elen - len > 0) {
|
if (elen - len > 0) {
|
||||||
len += snprintf(&(cbd->err_msg[len]), elen - len, " %s: %s\n", error->extraDetails[i].name,
|
len += tsnprintf(&(cbd->err_msg[len]), elen - len, " %s: %s\n", error->extraDetails[i].name,
|
||||||
error->extraDetails[i].value);
|
error->extraDetails[i].value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -753,7 +753,7 @@ upload:
|
||||||
if (!manager.etags[i]) {
|
if (!manager.etags[i]) {
|
||||||
TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(EIO), &lino, _exit);
|
TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(EIO), &lino, _exit);
|
||||||
}
|
}
|
||||||
n = snprintf(buf, sizeof(buf),
|
n = tsnprintf(buf, sizeof(buf),
|
||||||
"<Part><PartNumber>%d</PartNumber>"
|
"<Part><PartNumber>%d</PartNumber>"
|
||||||
"<ETag>%s</ETag></Part>",
|
"<ETag>%s</ETag></Part>",
|
||||||
i + 1, manager.etags[i]);
|
i + 1, manager.etags[i]);
|
||||||
|
@ -919,7 +919,7 @@ upload:
|
||||||
char buf[256];
|
char buf[256];
|
||||||
int n;
|
int n;
|
||||||
for (int i = 0; i < cp.part_num; ++i) {
|
for (int i = 0; i < cp.part_num; ++i) {
|
||||||
n = snprintf(buf, sizeof(buf),
|
n = tsnprintf(buf, sizeof(buf),
|
||||||
"<Part><PartNumber>%d</PartNumber>"
|
"<Part><PartNumber>%d</PartNumber>"
|
||||||
"<ETag>%s</ETag></Part>",
|
"<ETag>%s</ETag></Part>",
|
||||||
// i + 1, manager.etags[i]);
|
// i + 1, manager.etags[i]);
|
||||||
|
|
|
@ -94,7 +94,7 @@ static int32_t generateConfigFile(char* confDir) {
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
uDebug("[rsync] conf:%s", confContent);
|
uDebug("[rsync] conf:%s", confContent);
|
||||||
if (taosWriteFile(pFile, confContent, strlen(confContent)) != TSDB_CODE_SUCCESS) {
|
if (taosWriteFile(pFile, confContent, strlen(confContent)) <= 0) {
|
||||||
uError("[rsync] write conf file error," ERRNO_ERR_FORMAT, ERRNO_ERR_DATA);
|
uError("[rsync] write conf file error," ERRNO_ERR_FORMAT, ERRNO_ERR_DATA);
|
||||||
(void)taosCloseFile(&pFile);
|
(void)taosCloseFile(&pFile);
|
||||||
code = terrno;
|
code = terrno;
|
||||||
|
|
|
@ -398,6 +398,7 @@ static const SSysDbTableSchema userCompactsDetailSchema[] = {
|
||||||
{.name = "finished", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = false},
|
{.name = "finished", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = false},
|
||||||
{.name = "start_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = false},
|
{.name = "start_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP, .sysInfo = false},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const SSysDbTableSchema tsmaSchema[] = {
|
static const SSysDbTableSchema tsmaSchema[] = {
|
||||||
{.name = "tsma_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
{.name = "tsma_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
{.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
{.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
|
||||||
|
|
|
@ -2446,9 +2446,11 @@ _error:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char* formatTimestamp(char* buf, int64_t val, int precision) {
|
static int32_t formatTimestamp(char* buf, size_t cap, int64_t val, int precision) {
|
||||||
time_t tt;
|
time_t tt;
|
||||||
int32_t ms = 0;
|
int32_t ms = 0;
|
||||||
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
|
int32_t lino = 0;
|
||||||
if (precision == TSDB_TIME_PRECISION_NANO) {
|
if (precision == TSDB_TIME_PRECISION_NANO) {
|
||||||
tt = (time_t)(val / 1000000000);
|
tt = (time_t)(val / 1000000000);
|
||||||
ms = val % 1000000000;
|
ms = val % 1000000000;
|
||||||
|
@ -2460,14 +2462,6 @@ static char* formatTimestamp(char* buf, int64_t val, int precision) {
|
||||||
ms = val % 1000;
|
ms = val % 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* comment out as it make testcases like select_with_tags.sim fail.
|
|
||||||
but in windows, this may cause the call to localtime crash if tt < 0,
|
|
||||||
need to find a better solution.
|
|
||||||
if (tt < 0) {
|
|
||||||
tt = 0;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (tt <= 0 && ms < 0) {
|
if (tt <= 0 && ms < 0) {
|
||||||
tt--;
|
tt--;
|
||||||
if (precision == TSDB_TIME_PRECISION_NANO) {
|
if (precision == TSDB_TIME_PRECISION_NANO) {
|
||||||
|
@ -2479,28 +2473,44 @@ static char* formatTimestamp(char* buf, int64_t val, int precision) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
struct tm ptm = {0};
|
struct tm ptm = {0};
|
||||||
if (taosLocalTime(&tt, &ptm, buf) == NULL) {
|
if (taosLocalTime(&tt, &ptm, buf, cap) == NULL) {
|
||||||
return buf;
|
code = TSDB_CODE_INTERNAL_ERROR;
|
||||||
|
TSDB_CHECK_CODE(code, lino, _end);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t pos = strftime(buf, 35, "%Y-%m-%d %H:%M:%S", &ptm);
|
size_t pos = strftime(buf, cap, "%Y-%m-%d %H:%M:%S", &ptm);
|
||||||
|
if (pos == 0) {
|
||||||
|
code = TSDB_CODE_OUT_OF_BUFFER;
|
||||||
|
TSDB_CHECK_CODE(code, lino, _end);
|
||||||
|
}
|
||||||
|
int32_t nwritten = 0;
|
||||||
if (precision == TSDB_TIME_PRECISION_NANO) {
|
if (precision == TSDB_TIME_PRECISION_NANO) {
|
||||||
sprintf(buf + pos, ".%09d", ms);
|
nwritten = snprintf(buf + pos, cap - pos, ".%09d", ms);
|
||||||
} else if (precision == TSDB_TIME_PRECISION_MICRO) {
|
} else if (precision == TSDB_TIME_PRECISION_MICRO) {
|
||||||
sprintf(buf + pos, ".%06d", ms);
|
nwritten = snprintf(buf + pos, cap - pos, ".%06d", ms);
|
||||||
} else {
|
} else {
|
||||||
sprintf(buf + pos, ".%03d", ms);
|
nwritten = snprintf(buf + pos, cap - pos, ".%03d", ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
return buf;
|
if (nwritten >= cap - pos) {
|
||||||
|
code = TSDB_CODE_OUT_OF_BUFFER;
|
||||||
|
TSDB_CHECK_CODE(code, lino, _end);
|
||||||
|
}
|
||||||
|
|
||||||
|
_end:
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
uError("%s failed at line %d since %s", __func__, lino, tstrerror(code));
|
||||||
|
}
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
// for debug
|
// for debug
|
||||||
int32_t dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf, const char* taskIdStr) {
|
int32_t dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf, const char* taskIdStr) {
|
||||||
|
int32_t lino = 0;
|
||||||
int32_t size = 2048 * 1024;
|
int32_t size = 2048 * 1024;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
char* dumpBuf = NULL;
|
char* dumpBuf = NULL;
|
||||||
char pBuf[128] = {0};
|
char pBuf[TD_TIME_STR_LEN] = {0};
|
||||||
int32_t rows = pDataBlock->info.rows;
|
int32_t rows = pDataBlock->info.rows;
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
|
|
||||||
|
@ -2510,7 +2520,7 @@ int32_t dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t colNum = taosArrayGetSize(pDataBlock->pDataBlock);
|
int32_t colNum = taosArrayGetSize(pDataBlock->pDataBlock);
|
||||||
len += snprintf(dumpBuf + len, size - len,
|
len += tsnprintf(dumpBuf + len, size - len,
|
||||||
"%s===stream===%s|block type %d|child id %d|group id:%" PRIu64 "|uid:%" PRId64 "|rows:%" PRId64
|
"%s===stream===%s|block type %d|child id %d|group id:%" PRIu64 "|uid:%" PRId64 "|rows:%" PRId64
|
||||||
"|version:%" PRIu64 "|cal start:%" PRIu64 "|cal end:%" PRIu64 "|tbl:%s\n",
|
"|version:%" PRIu64 "|cal start:%" PRIu64 "|cal end:%" PRIu64 "|tbl:%s\n",
|
||||||
taskIdStr, flag, (int32_t)pDataBlock->info.type, pDataBlock->info.childId,
|
taskIdStr, flag, (int32_t)pDataBlock->info.type, pDataBlock->info.childId,
|
||||||
|
@ -2521,7 +2531,7 @@ int32_t dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int32_t j = 0; j < rows; j++) {
|
for (int32_t j = 0; j < rows; j++) {
|
||||||
len += snprintf(dumpBuf + len, size - len, "%s|", flag);
|
len += tsnprintf(dumpBuf + len, size - len, "%s|", flag);
|
||||||
if (len >= size - 1) {
|
if (len >= size - 1) {
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
@ -2530,11 +2540,12 @@ int32_t dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf
|
||||||
SColumnInfoData* pColInfoData = taosArrayGet(pDataBlock->pDataBlock, k);
|
SColumnInfoData* pColInfoData = taosArrayGet(pDataBlock->pDataBlock, k);
|
||||||
if (pColInfoData == NULL) {
|
if (pColInfoData == NULL) {
|
||||||
code = terrno;
|
code = terrno;
|
||||||
|
lino = __LINE__;
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (colDataIsNull(pColInfoData, rows, j, NULL) || !pColInfoData->pData) {
|
if (colDataIsNull(pColInfoData, rows, j, NULL) || !pColInfoData->pData) {
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15s |", "NULL");
|
len += tsnprintf(dumpBuf + len, size - len, " %15s |", "NULL");
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -2543,52 +2554,55 @@ int32_t dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf
|
||||||
switch (pColInfoData->info.type) {
|
switch (pColInfoData->info.type) {
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
case TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
memset(pBuf, 0, sizeof(pBuf));
|
memset(pBuf, 0, sizeof(pBuf));
|
||||||
(void)formatTimestamp(pBuf, *(uint64_t*)var, pColInfoData->info.precision);
|
code = formatTimestamp(pBuf, sizeof(pBuf), *(uint64_t*)var, pColInfoData->info.precision);
|
||||||
len += snprintf(dumpBuf + len, size - len, " %25s |", pBuf);
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
TAOS_UNUSED(tsnprintf(pBuf, sizeof(pBuf), "NaN"));
|
||||||
|
}
|
||||||
|
len += tsnprintf(dumpBuf + len, size - len, " %25s |", pBuf);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_TINYINT:
|
case TSDB_DATA_TYPE_TINYINT:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15d |", *(int8_t*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15d |", *(int8_t*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_UTINYINT:
|
case TSDB_DATA_TYPE_UTINYINT:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15d |", *(uint8_t*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15d |", *(uint8_t*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_SMALLINT:
|
case TSDB_DATA_TYPE_SMALLINT:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15d |", *(int16_t*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15d |", *(int16_t*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_USMALLINT:
|
case TSDB_DATA_TYPE_USMALLINT:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15d |", *(uint16_t*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15d |", *(uint16_t*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_INT:
|
case TSDB_DATA_TYPE_INT:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15d |", *(int32_t*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15d |", *(int32_t*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_UINT:
|
case TSDB_DATA_TYPE_UINT:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15u |", *(uint32_t*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15u |", *(uint32_t*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BIGINT:
|
case TSDB_DATA_TYPE_BIGINT:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15" PRId64 " |", *(int64_t*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15" PRId64 " |", *(int64_t*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_UBIGINT:
|
case TSDB_DATA_TYPE_UBIGINT:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15" PRIu64 " |", *(uint64_t*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15" PRIu64 " |", *(uint64_t*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_FLOAT:
|
case TSDB_DATA_TYPE_FLOAT:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15f |", *(float*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15f |", *(float*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_DOUBLE:
|
case TSDB_DATA_TYPE_DOUBLE:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15f |", *(double*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15f |", *(double*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BOOL:
|
case TSDB_DATA_TYPE_BOOL:
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15d |", *(bool*)var);
|
len += tsnprintf(dumpBuf + len, size - len, " %15d |", *(bool*)var);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_VARCHAR:
|
case TSDB_DATA_TYPE_VARCHAR:
|
||||||
|
@ -2599,7 +2613,7 @@ int32_t dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf
|
||||||
int32_t dataSize = TMIN(sizeof(pBuf), varDataLen(pData));
|
int32_t dataSize = TMIN(sizeof(pBuf), varDataLen(pData));
|
||||||
dataSize = TMIN(dataSize, 50);
|
dataSize = TMIN(dataSize, 50);
|
||||||
memcpy(pBuf, varDataVal(pData), dataSize);
|
memcpy(pBuf, varDataVal(pData), dataSize);
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15s |", pBuf);
|
len += tsnprintf(dumpBuf + len, size - len, " %15s |", pBuf);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
} break;
|
} break;
|
||||||
case TSDB_DATA_TYPE_NCHAR: {
|
case TSDB_DATA_TYPE_NCHAR: {
|
||||||
|
@ -2609,24 +2623,25 @@ int32_t dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf
|
||||||
code = taosUcs4ToMbs((TdUcs4*)varDataVal(pData), dataSize, pBuf);
|
code = taosUcs4ToMbs((TdUcs4*)varDataVal(pData), dataSize, pBuf);
|
||||||
if (code < 0) {
|
if (code < 0) {
|
||||||
uError("func %s failed to convert to ucs charset since %s", __func__, tstrerror(code));
|
uError("func %s failed to convert to ucs charset since %s", __func__, tstrerror(code));
|
||||||
|
lino = __LINE__;
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15s |", pBuf);
|
len += tsnprintf(dumpBuf + len, size - len, " %15s |", pBuf);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
len += snprintf(dumpBuf + len, size - len, "%d\n", j);
|
len += tsnprintf(dumpBuf + len, size - len, "%d\n", j);
|
||||||
if (len >= size - 1) goto _exit;
|
if (len >= size - 1) goto _exit;
|
||||||
}
|
}
|
||||||
len += snprintf(dumpBuf + len, size - len, "%s |end\n", flag);
|
len += tsnprintf(dumpBuf + len, size - len, "%s |end\n", flag);
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
if (code == TSDB_CODE_SUCCESS) {
|
if (code == TSDB_CODE_SUCCESS) {
|
||||||
*pDataBuf = dumpBuf;
|
*pDataBuf = dumpBuf;
|
||||||
dumpBuf = NULL;
|
dumpBuf = NULL;
|
||||||
} else {
|
} else {
|
||||||
uError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code));
|
uError("%s failed at line %d since %s", __func__, lino, tstrerror(code));
|
||||||
if (dumpBuf) {
|
if (dumpBuf) {
|
||||||
taosMemoryFree(dumpBuf);
|
taosMemoryFree(dumpBuf);
|
||||||
}
|
}
|
||||||
|
@ -2857,27 +2872,98 @@ _end:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
void buildCtbNameAddGroupId(const char* stbName, char* ctbName, uint64_t groupId) {
|
// Construct the child table name in the form of <ctbName>_<stbName>_<groupId> and store it in `ctbName`.
|
||||||
char tmp[TSDB_TABLE_NAME_LEN] = {0};
|
// If the name length exceeds TSDB_TABLE_NAME_LEN, first convert <stbName>_<groupId> to an MD5 value and then
|
||||||
if (stbName == NULL){
|
// concatenate. If the length is still too long, convert <ctbName> to an MD5 value as well.
|
||||||
snprintf(tmp, TSDB_TABLE_NAME_LEN, "_%"PRIu64, groupId);
|
int32_t buildCtbNameAddGroupId(const char* stbName, char* ctbName, uint64_t groupId, size_t cap) {
|
||||||
}else{
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
|
int32_t lino = 0;
|
||||||
|
char tmp[TSDB_TABLE_NAME_LEN] = {0};
|
||||||
|
char* suffix = tmp;
|
||||||
|
size_t suffixCap = sizeof(tmp);
|
||||||
|
size_t suffixLen = 0;
|
||||||
|
size_t prefixLen = 0;
|
||||||
|
T_MD5_CTX context;
|
||||||
|
|
||||||
|
if (ctbName == NULL || cap < TSDB_TABLE_NAME_LEN) {
|
||||||
|
code = TSDB_CODE_INTERNAL_ERROR;
|
||||||
|
TSDB_CHECK_CODE(code, lino, _end);
|
||||||
|
}
|
||||||
|
|
||||||
|
prefixLen = strlen(ctbName);
|
||||||
|
|
||||||
|
if (stbName == NULL) {
|
||||||
|
suffixLen = snprintf(suffix, suffixCap, "%" PRIu64, groupId);
|
||||||
|
if (suffixLen >= suffixCap) {
|
||||||
|
code = TSDB_CODE_INTERNAL_ERROR;
|
||||||
|
TSDB_CHECK_CODE(code, lino, _end);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
int32_t i = strlen(stbName) - 1;
|
int32_t i = strlen(stbName) - 1;
|
||||||
for(; i >= 0; i--){
|
for (; i >= 0; i--) {
|
||||||
if (stbName[i] == '.'){
|
if (stbName[i] == '.') {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
snprintf(tmp, TSDB_TABLE_NAME_LEN, "_%s_%"PRIu64, stbName + i + 1, groupId);
|
suffixLen = snprintf(suffix, suffixCap, "%s_%" PRIu64, stbName + i + 1, groupId);
|
||||||
}
|
if (suffixLen >= suffixCap) {
|
||||||
|
suffixCap = suffixLen + 1;
|
||||||
ctbName[TSDB_TABLE_NAME_LEN - strlen(tmp) - 1] = 0; // put stbname + groupId to the end
|
suffix = taosMemoryMalloc(suffixCap);
|
||||||
(void)strcat(ctbName, tmp);
|
TSDB_CHECK_NULL(suffix, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY);
|
||||||
for(int i = 0; i < strlen(ctbName); i++){
|
suffixLen = snprintf(suffix, suffixCap, "%s_%" PRIu64, stbName + i + 1, groupId);
|
||||||
if(ctbName[i] == '.'){
|
if (suffixLen >= suffixCap) {
|
||||||
ctbName[i] = '_';
|
code = TSDB_CODE_INTERNAL_ERROR;
|
||||||
|
TSDB_CHECK_CODE(code, lino, _end);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (prefixLen + suffixLen + 1 >= TSDB_TABLE_NAME_LEN) {
|
||||||
|
// If the name length exceeeds the limit, convert the suffix to MD5 value.
|
||||||
|
tMD5Init(&context);
|
||||||
|
tMD5Update(&context, (uint8_t*)suffix, suffixLen);
|
||||||
|
tMD5Final(&context);
|
||||||
|
suffixLen = snprintf(suffix, suffixCap, "%016" PRIx64 "%016" PRIx64, *(uint64_t*)context.digest,
|
||||||
|
*(uint64_t*)(context.digest + 8));
|
||||||
|
if (suffixLen >= suffixCap) {
|
||||||
|
code = TSDB_CODE_INTERNAL_ERROR;
|
||||||
|
TSDB_CHECK_CODE(code, lino, _end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prefixLen + suffixLen + 1 >= TSDB_TABLE_NAME_LEN) {
|
||||||
|
// If the name is still too long, convert the ctbName to MD5 value.
|
||||||
|
tMD5Init(&context);
|
||||||
|
tMD5Update(&context, (uint8_t*)ctbName, prefixLen);
|
||||||
|
tMD5Final(&context);
|
||||||
|
prefixLen = snprintf(ctbName, cap, "t_%016" PRIx64 "%016" PRIx64, *(uint64_t*)context.digest,
|
||||||
|
*(uint64_t*)(context.digest + 8));
|
||||||
|
if (prefixLen >= cap) {
|
||||||
|
code = TSDB_CODE_INTERNAL_ERROR;
|
||||||
|
TSDB_CHECK_CODE(code, lino, _end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prefixLen + suffixLen + 1 >= TSDB_TABLE_NAME_LEN) {
|
||||||
|
code = TSDB_CODE_INTERNAL_ERROR;
|
||||||
|
TSDB_CHECK_CODE(code, lino, _end);
|
||||||
|
}
|
||||||
|
|
||||||
|
ctbName[prefixLen] = '_';
|
||||||
|
tstrncpy(&ctbName[prefixLen + 1], suffix, cap - prefixLen - 1);
|
||||||
|
|
||||||
|
for (char* p = ctbName; *p; ++p) {
|
||||||
|
if (*p == '.') *p = '_';
|
||||||
|
}
|
||||||
|
|
||||||
|
_end:
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
uError("%s failed at line %d since %s", __func__, lino, tstrerror(code));
|
||||||
|
}
|
||||||
|
if (suffix != tmp) {
|
||||||
|
taosMemoryFree(suffix);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
// auto stream subtable name starts with 't_', followed by the first segment of MD5 digest for group vals.
|
// auto stream subtable name starts with 't_', followed by the first segment of MD5 digest for group vals.
|
||||||
|
|
|
@ -362,7 +362,7 @@ static int32_t taosSplitS3Cfg(SConfig *pCfg, const char *name, char gVarible[TSD
|
||||||
|
|
||||||
char *strDup = NULL;
|
char *strDup = NULL;
|
||||||
if ((strDup = taosStrdup(pItem->str))== NULL){
|
if ((strDup = taosStrdup(pItem->str))== NULL){
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = terrno;
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -542,6 +542,7 @@ static int32_t taosAddServerLogCfg(SConfig *pCfg) {
|
||||||
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
||||||
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
||||||
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
||||||
|
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqClientDebug", tqClientDebug, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
||||||
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
||||||
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
||||||
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER));
|
||||||
|
@ -644,11 +645,6 @@ static int32_t taosAddSystemCfg(SConfig *pCfg) {
|
||||||
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableCoreFile", tsEnableCoreFile, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
|
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableCoreFile", tsEnableCoreFile, CFG_SCOPE_BOTH, CFG_DYN_BOTH));
|
||||||
TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
||||||
|
|
||||||
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ssd42", tsSSE42Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
|
||||||
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "avx", tsAVXSupported, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
|
||||||
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "avx2", tsAVX2Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
|
||||||
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "fma", tsFMASupported, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
|
||||||
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "avx512", tsAVX512Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
|
||||||
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "simdEnable", tsSIMDEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "simdEnable", tsSIMDEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
||||||
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "AVX512Enable", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "AVX512Enable", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
||||||
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH, CFG_DYN_NONE));
|
||||||
|
@ -1396,6 +1392,9 @@ static int32_t taosSetServerCfg(SConfig *pCfg) {
|
||||||
TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simdEnable");
|
TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "simdEnable");
|
||||||
tsSIMDEnable = (bool)pItem->bval;
|
tsSIMDEnable = (bool)pItem->bval;
|
||||||
|
|
||||||
|
TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "AVX512Enable");
|
||||||
|
tsAVX512Enable = (bool)pItem->bval;
|
||||||
|
|
||||||
TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tagFilterCache");
|
TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "tagFilterCache");
|
||||||
tsTagFilterCache = (bool)pItem->bval;
|
tsTagFilterCache = (bool)pItem->bval;
|
||||||
|
|
||||||
|
@ -1724,6 +1723,7 @@ int32_t taosReadDataFolder(const char *cfgDir, const char **envCmd, const char *
|
||||||
TAOS_CHECK_RETURN(cfgInit(&pCfg));
|
TAOS_CHECK_RETURN(cfgInit(&pCfg));
|
||||||
|
|
||||||
TAOS_CHECK_GOTO(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_NONE), NULL, _exit);
|
TAOS_CHECK_GOTO(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_NONE), NULL, _exit);
|
||||||
|
TAOS_CHECK_GOTO(cfgAddInt32(pCfg, "debugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER), NULL, _exit);
|
||||||
TAOS_CHECK_GOTO(cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) ,NULL, _exit);
|
TAOS_CHECK_GOTO(cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) ,NULL, _exit);
|
||||||
|
|
||||||
if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
|
if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) {
|
||||||
|
@ -1957,7 +1957,7 @@ static int32_t taosCfgDynamicOptionsForServer(SConfig *pCfg, const char *name) {
|
||||||
{"smaDebugFlag", &smaDebugFlag}, {"idxDebugFlag", &idxDebugFlag}, {"tdbDebugFlag", &tdbDebugFlag},
|
{"smaDebugFlag", &smaDebugFlag}, {"idxDebugFlag", &idxDebugFlag}, {"tdbDebugFlag", &tdbDebugFlag},
|
||||||
{"tmrDebugFlag", &tmrDebugFlag}, {"uDebugFlag", &uDebugFlag}, {"smaDebugFlag", &smaDebugFlag},
|
{"tmrDebugFlag", &tmrDebugFlag}, {"uDebugFlag", &uDebugFlag}, {"smaDebugFlag", &smaDebugFlag},
|
||||||
{"rpcDebugFlag", &rpcDebugFlag}, {"qDebugFlag", &qDebugFlag}, {"metaDebugFlag", &metaDebugFlag},
|
{"rpcDebugFlag", &rpcDebugFlag}, {"qDebugFlag", &qDebugFlag}, {"metaDebugFlag", &metaDebugFlag},
|
||||||
{"stDebugFlag", &stDebugFlag}, {"sndDebugFlag", &sndDebugFlag},
|
{"stDebugFlag", &stDebugFlag}, {"sndDebugFlag", &sndDebugFlag}, {"tqClientDebug", &tqClientDebug},
|
||||||
};
|
};
|
||||||
|
|
||||||
static OptionNameAndVar options[] = {{"audit", &tsEnableAudit},
|
static OptionNameAndVar options[] = {{"audit", &tsEnableAudit},
|
||||||
|
|
|
@ -284,7 +284,7 @@ int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol) {
|
||||||
|
|
||||||
SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, col++);
|
SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, col++);
|
||||||
if (pColInfo == NULL) {
|
if (pColInfo == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_RANGE;
|
code = terrno;
|
||||||
TAOS_CHECK_GOTO(code, NULL, _exit);
|
TAOS_CHECK_GOTO(code, NULL, _exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,7 +297,7 @@ int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol) {
|
||||||
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, col++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, col++);
|
||||||
if (pColInfo == NULL) {
|
if (pColInfo == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_RANGE;
|
code = terrno;
|
||||||
TAOS_CHECK_GOTO(code, NULL, _exit);
|
TAOS_CHECK_GOTO(code, NULL, _exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -309,7 +309,7 @@ int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol) {
|
||||||
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, col++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, col++);
|
||||||
if (pColInfo == NULL) {
|
if (pColInfo == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_RANGE;
|
code = terrno;
|
||||||
TAOS_CHECK_GOTO(code, NULL, _exit);
|
TAOS_CHECK_GOTO(code, NULL, _exit);
|
||||||
}
|
}
|
||||||
TAOS_CHECK_GOTO(colDataSetVal(pColInfo, numOfRows, scope, false), NULL, _exit);
|
TAOS_CHECK_GOTO(colDataSetVal(pColInfo, numOfRows, scope, false), NULL, _exit);
|
||||||
|
|
|
@ -1703,6 +1703,7 @@ int32_t tDeserializeSStatusRsp(void *buf, int32_t bufLen, SStatusRsp *pRsp) {
|
||||||
if (!tDecodeIsEnd(&decoder)) {
|
if (!tDecodeIsEnd(&decoder)) {
|
||||||
TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRsp->ipWhiteVer));
|
TAOS_CHECK_EXIT(tDecodeI64(&decoder, &pRsp->ipWhiteVer));
|
||||||
}
|
}
|
||||||
|
|
||||||
tEndDecode(&decoder);
|
tEndDecode(&decoder);
|
||||||
_exit:
|
_exit:
|
||||||
tDecoderClear(&decoder);
|
tDecoderClear(&decoder);
|
||||||
|
@ -8163,6 +8164,7 @@ int32_t tSerializeSMqHbRsp(void *buf, int32_t bufLen, SMqHbRsp *pRsp) {
|
||||||
TAOS_CHECK_EXIT(tEncodeI8(&encoder, privilege->noPrivilege));
|
TAOS_CHECK_EXIT(tEncodeI8(&encoder, privilege->noPrivilege));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tEncodeI32(&encoder, pRsp->debugFlag) < 0) return -1;
|
||||||
tEndEncode(&encoder);
|
tEndEncode(&encoder);
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
@ -8196,6 +8198,10 @@ int32_t tDeserializeSMqHbRsp(void *buf, int32_t bufLen, SMqHbRsp *pRsp) {
|
||||||
TAOS_CHECK_EXIT(tDecodeI8(&decoder, &data->noPrivilege));
|
TAOS_CHECK_EXIT(tDecodeI8(&decoder, &data->noPrivilege));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!tDecodeIsEnd(&decoder)) {
|
||||||
|
if (tDecodeI32(&decoder, &pRsp->debugFlag) < 0) return -1;
|
||||||
|
}
|
||||||
tEndDecode(&decoder);
|
tEndDecode(&decoder);
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
|
@ -10681,7 +10687,7 @@ int32_t tDecodeMqMetaRsp(SDecoder *pDecoder, SMqMetaRsp *pRsp) {
|
||||||
|
|
||||||
void tDeleteMqMetaRsp(SMqMetaRsp *pRsp) { taosMemoryFree(pRsp->metaRsp); }
|
void tDeleteMqMetaRsp(SMqMetaRsp *pRsp) { taosMemoryFree(pRsp->metaRsp); }
|
||||||
|
|
||||||
int32_t tEncodeMqDataRspCommon(SEncoder *pEncoder, const SMqDataRspCommon *pRsp) {
|
int32_t tEncodeMqDataRspCommon(SEncoder *pEncoder, const SMqDataRsp *pRsp) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino;
|
int32_t lino;
|
||||||
|
|
||||||
|
@ -10711,19 +10717,20 @@ _exit:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tEncodeMqDataRsp(SEncoder *pEncoder, const void *pRsp) {
|
int32_t tEncodeMqDataRsp(SEncoder *pEncoder, const SMqDataRsp *pRsp) {
|
||||||
TAOS_CHECK_RETURN(tEncodeMqDataRspCommon(pEncoder, pRsp));
|
TAOS_CHECK_RETURN(tEncodeMqDataRspCommon(pEncoder, pRsp));
|
||||||
TAOS_CHECK_RETURN(tEncodeI64(pEncoder, ((SMqDataRsp *)pRsp)->sleepTime));
|
TAOS_CHECK_RETURN(tEncodeI64(pEncoder, pRsp->sleepTime));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tDecodeMqDataRspCommon(SDecoder *pDecoder, SMqDataRspCommon *pRsp) {
|
int32_t tDecodeMqDataRspCommon(SDecoder *pDecoder, SMqDataRsp *pRsp) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino;
|
int32_t lino;
|
||||||
|
|
||||||
TAOS_CHECK_EXIT(tDecodeSTqOffsetVal(pDecoder, &pRsp->reqOffset));
|
TAOS_CHECK_EXIT(tDecodeSTqOffsetVal(pDecoder, &pRsp->reqOffset));
|
||||||
TAOS_CHECK_EXIT(tDecodeSTqOffsetVal(pDecoder, &pRsp->rspOffset));
|
TAOS_CHECK_EXIT(tDecodeSTqOffsetVal(pDecoder, &pRsp->rspOffset));
|
||||||
TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->blockNum));
|
TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->blockNum));
|
||||||
|
|
||||||
if (pRsp->blockNum != 0) {
|
if (pRsp->blockNum != 0) {
|
||||||
if ((pRsp->blockData = taosArrayInit(pRsp->blockNum, sizeof(void *))) == NULL) {
|
if ((pRsp->blockData = taosArrayInit(pRsp->blockNum, sizeof(void *))) == NULL) {
|
||||||
TAOS_CHECK_EXIT(terrno);
|
TAOS_CHECK_EXIT(terrno);
|
||||||
|
@ -10787,17 +10794,16 @@ _exit:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tDecodeMqDataRsp(SDecoder *pDecoder, void *pRsp) {
|
int32_t tDecodeMqDataRsp(SDecoder *pDecoder, SMqDataRsp *pRsp) {
|
||||||
TAOS_CHECK_RETURN(tDecodeMqDataRspCommon(pDecoder, pRsp));
|
TAOS_CHECK_RETURN(tDecodeMqDataRspCommon(pDecoder, pRsp));
|
||||||
if (!tDecodeIsEnd(pDecoder)) {
|
if (!tDecodeIsEnd(pDecoder)) {
|
||||||
TAOS_CHECK_RETURN(tDecodeI64(pDecoder, &((SMqDataRsp *)pRsp)->sleepTime));
|
TAOS_CHECK_RETURN(tDecodeI64(pDecoder, &pRsp->sleepTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tDeleteMqDataRspCommon(void *rsp) {
|
static void tDeleteMqDataRspCommon(SMqDataRsp *pRsp) {
|
||||||
SMqDataRspCommon *pRsp = rsp;
|
|
||||||
taosArrayDestroy(pRsp->blockDataLen);
|
taosArrayDestroy(pRsp->blockDataLen);
|
||||||
pRsp->blockDataLen = NULL;
|
pRsp->blockDataLen = NULL;
|
||||||
taosArrayDestroyP(pRsp->blockData, (FDelete)taosMemoryFree);
|
taosArrayDestroyP(pRsp->blockData, (FDelete)taosMemoryFree);
|
||||||
|
@ -10810,15 +10816,13 @@ static void tDeleteMqDataRspCommon(void *rsp) {
|
||||||
tOffsetDestroy(&pRsp->rspOffset);
|
tOffsetDestroy(&pRsp->rspOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tDeleteMqDataRsp(void *rsp) { tDeleteMqDataRspCommon(rsp); }
|
void tDeleteMqDataRsp(SMqDataRsp *rsp) { tDeleteMqDataRspCommon(rsp); }
|
||||||
|
|
||||||
int32_t tEncodeSTaosxRsp(SEncoder *pEncoder, const void *rsp) {
|
int32_t tEncodeSTaosxRsp(SEncoder *pEncoder, const SMqDataRsp *pRsp) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino;
|
int32_t lino;
|
||||||
|
|
||||||
TAOS_CHECK_EXIT(tEncodeMqDataRspCommon(pEncoder, rsp));
|
TAOS_CHECK_EXIT(tEncodeMqDataRspCommon(pEncoder, pRsp));
|
||||||
|
|
||||||
const STaosxRsp *pRsp = (const STaosxRsp *)rsp;
|
|
||||||
TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->createTableNum));
|
TAOS_CHECK_EXIT(tEncodeI32(pEncoder, pRsp->createTableNum));
|
||||||
if (pRsp->createTableNum) {
|
if (pRsp->createTableNum) {
|
||||||
for (int32_t i = 0; i < pRsp->createTableNum; i++) {
|
for (int32_t i = 0; i < pRsp->createTableNum; i++) {
|
||||||
|
@ -10831,13 +10835,11 @@ _exit:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tDecodeSTaosxRsp(SDecoder *pDecoder, void *rsp) {
|
int32_t tDecodeSTaosxRsp(SDecoder *pDecoder, SMqDataRsp *pRsp) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
int32_t lino;
|
int32_t lino;
|
||||||
|
|
||||||
TAOS_CHECK_EXIT(tDecodeMqDataRspCommon(pDecoder, rsp));
|
TAOS_CHECK_EXIT(tDecodeMqDataRspCommon(pDecoder, pRsp));
|
||||||
|
|
||||||
STaosxRsp *pRsp = (STaosxRsp *)rsp;
|
|
||||||
TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->createTableNum));
|
TAOS_CHECK_EXIT(tDecodeI32(pDecoder, &pRsp->createTableNum));
|
||||||
if (pRsp->createTableNum) {
|
if (pRsp->createTableNum) {
|
||||||
if ((pRsp->createTableLen = taosArrayInit(pRsp->createTableNum, sizeof(int32_t))) == NULL) {
|
if ((pRsp->createTableLen = taosArrayInit(pRsp->createTableNum, sizeof(int32_t))) == NULL) {
|
||||||
|
@ -10864,10 +10866,9 @@ _exit:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tDeleteSTaosxRsp(void *rsp) {
|
void tDeleteSTaosxRsp(SMqDataRsp *pRsp) {
|
||||||
tDeleteMqDataRspCommon(rsp);
|
tDeleteMqDataRspCommon(pRsp);
|
||||||
|
|
||||||
STaosxRsp *pRsp = (STaosxRsp *)rsp;
|
|
||||||
taosArrayDestroy(pRsp->createTableLen);
|
taosArrayDestroy(pRsp->createTableLen);
|
||||||
pRsp->createTableLen = NULL;
|
pRsp->createTableLen = NULL;
|
||||||
taosArrayDestroyP(pRsp->createTableReq, (FDelete)taosMemoryFree);
|
taosArrayDestroyP(pRsp->createTableReq, (FDelete)taosMemoryFree);
|
||||||
|
|
|
@ -33,7 +33,7 @@ int64_t taosGetIntervalStartTimestamp(int64_t startTime, int64_t slidingTime, in
|
||||||
}
|
}
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
time_t t = (time_t)start;
|
time_t t = (time_t)start;
|
||||||
taosLocalTime(&t, &tm);
|
taosLocalTime(&t, &tm, NULL, 0);
|
||||||
tm.tm_sec = 0;
|
tm.tm_sec = 0;
|
||||||
tm.tm_min = 0;
|
tm.tm_min = 0;
|
||||||
tm.tm_hour = 0;
|
tm.tm_hour = 0;
|
||||||
|
@ -103,7 +103,7 @@ int32_t tNameExtractFullName(const SName* name, char* dst) {
|
||||||
return TSDB_CODE_INVALID_PARA;
|
return TSDB_CODE_INVALID_PARA;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t len = snprintf(dst, TSDB_DB_FNAME_LEN, "%d.%s", name->acctId, name->dbname);
|
int32_t len = tsnprintf(dst, TSDB_DB_FNAME_LEN, "%d.%s", name->acctId, name->dbname);
|
||||||
|
|
||||||
size_t tnameLen = strlen(name->tname);
|
size_t tnameLen = strlen(name->tname);
|
||||||
if (tnameLen > 0) {
|
if (tnameLen > 0) {
|
||||||
|
|
|
@ -693,7 +693,7 @@ int64_t taosTimeAdd(int64_t t, int64_t duration, char unit, int32_t precision) {
|
||||||
|
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
time_t tt = (time_t)(t / TSDB_TICK_PER_SECOND(precision));
|
time_t tt = (time_t)(t / TSDB_TICK_PER_SECOND(precision));
|
||||||
struct tm* ptm = taosLocalTime(&tt, &tm, NULL);
|
struct tm* ptm = taosLocalTime(&tt, &tm, NULL, 0);
|
||||||
int32_t mon = tm.tm_year * 12 + tm.tm_mon + (int32_t)numOfMonth;
|
int32_t mon = tm.tm_year * 12 + tm.tm_mon + (int32_t)numOfMonth;
|
||||||
tm.tm_year = mon / 12;
|
tm.tm_year = mon / 12;
|
||||||
tm.tm_mon = mon % 12;
|
tm.tm_mon = mon % 12;
|
||||||
|
@ -754,11 +754,11 @@ int32_t taosTimeCountIntervalForFill(int64_t skey, int64_t ekey, int64_t interva
|
||||||
|
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
time_t t = (time_t)skey;
|
time_t t = (time_t)skey;
|
||||||
struct tm* ptm = taosLocalTime(&t, &tm, NULL);
|
struct tm* ptm = taosLocalTime(&t, &tm, NULL, 0);
|
||||||
int32_t smon = tm.tm_year * 12 + tm.tm_mon;
|
int32_t smon = tm.tm_year * 12 + tm.tm_mon;
|
||||||
|
|
||||||
t = (time_t)ekey;
|
t = (time_t)ekey;
|
||||||
ptm = taosLocalTime(&t, &tm, NULL);
|
ptm = taosLocalTime(&t, &tm, NULL, 0);
|
||||||
int32_t emon = tm.tm_year * 12 + tm.tm_mon;
|
int32_t emon = tm.tm_year * 12 + tm.tm_mon;
|
||||||
|
|
||||||
if (unit == 'y') {
|
if (unit == 'y') {
|
||||||
|
@ -782,7 +782,7 @@ int64_t taosTimeTruncate(int64_t ts, const SInterval* pInterval) {
|
||||||
start /= (int64_t)(TSDB_TICK_PER_SECOND(precision));
|
start /= (int64_t)(TSDB_TICK_PER_SECOND(precision));
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
time_t tt = (time_t)start;
|
time_t tt = (time_t)start;
|
||||||
struct tm* ptm = taosLocalTime(&tt, &tm, NULL);
|
struct tm* ptm = taosLocalTime(&tt, &tm, NULL, 0);
|
||||||
tm.tm_sec = 0;
|
tm.tm_sec = 0;
|
||||||
tm.tm_min = 0;
|
tm.tm_min = 0;
|
||||||
tm.tm_hour = 0;
|
tm.tm_hour = 0;
|
||||||
|
@ -911,13 +911,13 @@ int64_t taosTimeGetIntervalEnd(int64_t intervalStart, const SInterval* pInterval
|
||||||
// 2020-07-03 17:48:42
|
// 2020-07-03 17:48:42
|
||||||
// and the parameter can also be a variable.
|
// and the parameter can also be a variable.
|
||||||
const char* fmtts(int64_t ts) {
|
const char* fmtts(int64_t ts) {
|
||||||
static char buf[96] = {0};
|
static char buf[TD_TIME_STR_LEN] = {0};
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
|
|
||||||
if (ts > -62135625943 && ts < 32503651200) {
|
if (ts > -62135625943 && ts < 32503651200) {
|
||||||
time_t t = (time_t)ts;
|
time_t t = (time_t)ts;
|
||||||
if (taosLocalTime(&t, &tm, buf) == NULL) {
|
if (taosLocalTime(&t, &tm, buf, sizeof(buf)) == NULL) {
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
pos += strftime(buf + pos, sizeof(buf), "s=%Y-%m-%d %H:%M:%S", &tm);
|
pos += strftime(buf + pos, sizeof(buf), "s=%Y-%m-%d %H:%M:%S", &tm);
|
||||||
|
@ -925,7 +925,7 @@ const char* fmtts(int64_t ts) {
|
||||||
|
|
||||||
if (ts > -62135625943000 && ts < 32503651200000) {
|
if (ts > -62135625943000 && ts < 32503651200000) {
|
||||||
time_t t = (time_t)(ts / 1000);
|
time_t t = (time_t)(ts / 1000);
|
||||||
if (taosLocalTime(&t, &tm, buf) == NULL) {
|
if (taosLocalTime(&t, &tm, buf, sizeof(buf)) == NULL) {
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
if (pos > 0) {
|
if (pos > 0) {
|
||||||
|
@ -939,7 +939,7 @@ const char* fmtts(int64_t ts) {
|
||||||
|
|
||||||
{
|
{
|
||||||
time_t t = (time_t)(ts / 1000000);
|
time_t t = (time_t)(ts / 1000000);
|
||||||
if (taosLocalTime(&t, &tm, buf) == NULL) {
|
if (taosLocalTime(&t, &tm, buf, sizeof(buf)) == NULL) {
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
if (pos > 0) {
|
if (pos > 0) {
|
||||||
|
@ -993,11 +993,11 @@ int32_t taosFormatUtcTime(char* buf, int32_t bufLen, int64_t t, int32_t precisio
|
||||||
TAOS_RETURN(TSDB_CODE_INVALID_PARA);
|
TAOS_RETURN(TSDB_CODE_INVALID_PARA);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == taosLocalTime(", &ptm, buf)) {
|
if (NULL == taosLocalTime(", &ptm, buf, bufLen)) {
|
||||||
TAOS_RETURN(TAOS_SYSTEM_ERROR(errno));
|
TAOS_RETURN(TAOS_SYSTEM_ERROR(errno));
|
||||||
}
|
}
|
||||||
int32_t length = (int32_t)strftime(ts, 40, "%Y-%m-%dT%H:%M:%S", &ptm);
|
int32_t length = (int32_t)strftime(ts, 40, "%Y-%m-%dT%H:%M:%S", &ptm);
|
||||||
length += snprintf(ts + length, fractionLen, format, mod);
|
length += tsnprintf(ts + length, fractionLen, format, mod);
|
||||||
length += (int32_t)strftime(ts + length, 40 - length, "%z", &ptm);
|
length += (int32_t)strftime(ts + length, 40 - length, "%z", &ptm);
|
||||||
|
|
||||||
tstrncpy(buf, ts, bufLen);
|
tstrncpy(buf, ts, bufLen);
|
||||||
|
@ -1007,7 +1007,7 @@ int32_t taosFormatUtcTime(char* buf, int32_t bufLen, int64_t t, int32_t precisio
|
||||||
int32_t taosTs2Tm(int64_t ts, int32_t precision, struct STm* tm) {
|
int32_t taosTs2Tm(int64_t ts, int32_t precision, struct STm* tm) {
|
||||||
tm->fsec = ts % TICK_PER_SECOND[precision] * (TICK_PER_SECOND[TSDB_TIME_PRECISION_NANO] / TICK_PER_SECOND[precision]);
|
tm->fsec = ts % TICK_PER_SECOND[precision] * (TICK_PER_SECOND[TSDB_TIME_PRECISION_NANO] / TICK_PER_SECOND[precision]);
|
||||||
time_t t = ts / TICK_PER_SECOND[precision];
|
time_t t = ts / TICK_PER_SECOND[precision];
|
||||||
if (NULL == taosLocalTime(&t, &tm->tm, NULL)) {
|
if (NULL == taosLocalTime(&t, &tm->tm, NULL, 0)) {
|
||||||
TAOS_RETURN(TAOS_SYSTEM_ERROR(errno));
|
TAOS_RETURN(TAOS_SYSTEM_ERROR(errno));
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
|
|
@ -480,7 +480,7 @@ TEST(testCase, StreamAllNormTest) {
|
||||||
char ctbName[TSDB_TABLE_NAME_LEN] = {0};
|
char ctbName[TSDB_TABLE_NAME_LEN] = {0};
|
||||||
uint64_t groupId = 12345;
|
uint64_t groupId = 12345;
|
||||||
|
|
||||||
buildCtbNameAddGroupId(NULL, ctbName, groupId);
|
buildCtbNameAddGroupId(NULL, ctbName, groupId, sizeof(ctbName));
|
||||||
|
|
||||||
ASSERT_STREQ("_12345", ctbName);
|
ASSERT_STREQ("_12345", ctbName);
|
||||||
}
|
}
|
||||||
|
@ -490,7 +490,7 @@ TEST(testCase, StreamWithStbName) {
|
||||||
char ctbName[TSDB_TABLE_NAME_LEN] = {0};
|
char ctbName[TSDB_TABLE_NAME_LEN] = {0};
|
||||||
uint64_t groupId = 12345;
|
uint64_t groupId = 12345;
|
||||||
|
|
||||||
buildCtbNameAddGroupId(stbName, ctbName, groupId);
|
buildCtbNameAddGroupId(stbName, ctbName, groupId, sizeof(ctbName));
|
||||||
|
|
||||||
ASSERT_STREQ("_stb_12345", ctbName);
|
ASSERT_STREQ("_stb_12345", ctbName);
|
||||||
}
|
}
|
||||||
|
@ -500,7 +500,7 @@ TEST(testCase, StreamWithoutDotInStbName) {
|
||||||
char ctbName[TSDB_TABLE_NAME_LEN] = {0};
|
char ctbName[TSDB_TABLE_NAME_LEN] = {0};
|
||||||
uint64_t groupId = 12345;
|
uint64_t groupId = 12345;
|
||||||
|
|
||||||
buildCtbNameAddGroupId(stbName, ctbName, groupId);
|
buildCtbNameAddGroupId(stbName, ctbName, groupId, sizeof(ctbName));
|
||||||
|
|
||||||
ASSERT_STREQ("_table_12345", ctbName);
|
ASSERT_STREQ("_table_12345", ctbName);
|
||||||
}
|
}
|
||||||
|
@ -510,11 +510,59 @@ TEST(testCase, StreamWithoutDotInStbName2) {
|
||||||
char ctbName[TSDB_TABLE_NAME_LEN] = {0};
|
char ctbName[TSDB_TABLE_NAME_LEN] = {0};
|
||||||
uint64_t groupId = 12345;
|
uint64_t groupId = 12345;
|
||||||
|
|
||||||
buildCtbNameAddGroupId(stbName, ctbName, groupId);
|
buildCtbNameAddGroupId(stbName, ctbName, groupId, sizeof(ctbName));
|
||||||
|
|
||||||
ASSERT_STREQ("__12345", ctbName);
|
ASSERT_STREQ("__12345", ctbName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(testCase, StreamWithLongStbName) {
|
||||||
|
char ctbName[TSDB_TABLE_NAME_LEN];
|
||||||
|
char expectName[TSDB_TABLE_NAME_LEN];
|
||||||
|
char *stbName = "a_simle_stb_name";
|
||||||
|
uint64_t groupId = UINT64_MAX;
|
||||||
|
|
||||||
|
// test basic function
|
||||||
|
strcpy(ctbName, "a_simple_ctb_name");
|
||||||
|
EXPECT_EQ(buildCtbNameAddGroupId(stbName, ctbName, groupId, sizeof(ctbName)), TSDB_CODE_SUCCESS);
|
||||||
|
EXPECT_STREQ(ctbName, "a_simple_ctb_name_a_simle_stb_name_18446744073709551615");
|
||||||
|
|
||||||
|
// test null stbName
|
||||||
|
strcpy(ctbName, "a_simple_ctb_name");
|
||||||
|
stbName = NULL;
|
||||||
|
EXPECT_EQ(buildCtbNameAddGroupId(stbName, ctbName, groupId, sizeof(ctbName)), TSDB_CODE_SUCCESS);
|
||||||
|
EXPECT_STREQ(ctbName, "a_simple_ctb_name_18446744073709551615");
|
||||||
|
|
||||||
|
// test buffer capcity check
|
||||||
|
EXPECT_EQ(buildCtbNameAddGroupId(stbName, NULL, groupId, sizeof(ctbName)), TSDB_CODE_INTERNAL_ERROR);
|
||||||
|
EXPECT_EQ(buildCtbNameAddGroupId(stbName, ctbName, groupId, sizeof(ctbName) - 1), TSDB_CODE_INTERNAL_ERROR);
|
||||||
|
|
||||||
|
// test md5 conversion of stbName with groupid
|
||||||
|
for (int32_t i = 0; i < 159; ++i) ctbName[i] = 'A';
|
||||||
|
ctbName[159] = '\0';
|
||||||
|
stbName = taosStrdup(ctbName);
|
||||||
|
snprintf(expectName, TSDB_TABLE_NAME_LEN, "%s_d85f0d87946d76eeedd7b7b78b7492a2", ctbName);
|
||||||
|
EXPECT_EQ(buildCtbNameAddGroupId(stbName, ctbName, groupId, sizeof(ctbName)), TSDB_CODE_SUCCESS);
|
||||||
|
EXPECT_STREQ(ctbName, expectName);
|
||||||
|
|
||||||
|
// test md5 conversion of all parts
|
||||||
|
for (int32_t i = 0; i < 190; ++i) ctbName[i] = 'A';
|
||||||
|
ctbName[190] = '\0';
|
||||||
|
tstrncpy(expectName, "t_d38a8b2df999bef0082ffc80a59a9cd7_d85f0d87946d76eeedd7b7b78b7492a2", TSDB_TABLE_NAME_LEN);
|
||||||
|
EXPECT_EQ(buildCtbNameAddGroupId(stbName, ctbName, groupId, sizeof(ctbName)), TSDB_CODE_SUCCESS);
|
||||||
|
EXPECT_STREQ(ctbName, expectName);
|
||||||
|
|
||||||
|
// test larger stbName
|
||||||
|
taosMemoryFree(stbName);
|
||||||
|
for (int32_t i = 0; i < 190; ++i) ctbName[i] = 'A';
|
||||||
|
ctbName[190] = '\0';
|
||||||
|
stbName = taosStrdup(ctbName);
|
||||||
|
tstrncpy(expectName, "t_d38a8b2df999bef0082ffc80a59a9cd7_9c99cc7c52073b63fb750af402d9b84b", TSDB_TABLE_NAME_LEN);
|
||||||
|
EXPECT_EQ(buildCtbNameAddGroupId(stbName, ctbName, groupId, sizeof(ctbName)), TSDB_CODE_SUCCESS);
|
||||||
|
EXPECT_STREQ(ctbName, expectName);
|
||||||
|
|
||||||
|
taosMemoryFree(stbName);
|
||||||
|
}
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
TEST(testCase, NoneTest) {
|
TEST(testCase, NoneTest) {
|
||||||
const static int nCols = 14;
|
const static int nCols = 14;
|
||||||
|
|
|
@ -280,9 +280,9 @@ static void dmPrintArgs(int32_t argc, char const *argv[]) {
|
||||||
taosGetCwd(path, sizeof(path));
|
taosGetCwd(path, sizeof(path));
|
||||||
|
|
||||||
char args[1024] = {0};
|
char args[1024] = {0};
|
||||||
int32_t arglen = snprintf(args, sizeof(args), "%s", argv[0]);
|
int32_t arglen = tsnprintf(args, sizeof(args), "%s", argv[0]);
|
||||||
for (int32_t i = 1; i < argc; ++i) {
|
for (int32_t i = 1; i < argc; ++i) {
|
||||||
arglen = arglen + snprintf(args + arglen, sizeof(args) - arglen, " %s", argv[i]);
|
arglen = arglen + tsnprintf(args + arglen, sizeof(args) - arglen, " %s", argv[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
dInfo("startup path:%s args:%s", path, args);
|
dInfo("startup path:%s args:%s", path, args);
|
||||||
|
|
|
@ -39,6 +39,7 @@ static void dmUpdateDnodeCfg(SDnodeMgmt *pMgmt, SDnodeCfg *pCfg) {
|
||||||
(void)taosThreadRwlockUnlock(&pMgmt->pData->lock);
|
(void)taosThreadRwlockUnlock(&pMgmt->pData->lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dmMayShouldUpdateIpWhiteList(SDnodeMgmt *pMgmt, int64_t ver) {
|
static void dmMayShouldUpdateIpWhiteList(SDnodeMgmt *pMgmt, int64_t ver) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
dDebug("ip-white-list on dnode ver: %" PRId64 ", status ver: %" PRId64 "", pMgmt->pData->ipWhiteVer, ver);
|
dDebug("ip-white-list on dnode ver: %" PRId64 ", status ver: %" PRId64 "", pMgmt->pData->ipWhiteVer, ver);
|
||||||
|
@ -84,6 +85,7 @@ static void dmMayShouldUpdateIpWhiteList(SDnodeMgmt *pMgmt, int64_t ver) {
|
||||||
dError("failed to send retrieve ip white list request since:%s", tstrerror(code));
|
dError("failed to send retrieve ip white list request since:%s", tstrerror(code));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dmProcessStatusRsp(SDnodeMgmt *pMgmt, SRpcMsg *pRsp) {
|
static void dmProcessStatusRsp(SDnodeMgmt *pMgmt, SRpcMsg *pRsp) {
|
||||||
const STraceId *trace = &pRsp->info.traceId;
|
const STraceId *trace = &pRsp->info.traceId;
|
||||||
dGTrace("status rsp received from mnode, statusSeq:%d code:0x%x", pMgmt->statusSeq, pRsp->code);
|
dGTrace("status rsp received from mnode, statusSeq:%d code:0x%x", pMgmt->statusSeq, pRsp->code);
|
||||||
|
|
|
@ -77,7 +77,7 @@ static int32_t dmOpenMgmt(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((code = udfStartUdfd(pMgmt->pData->dnodeId)) != 0) {
|
if ((code = udfStartUdfd(pMgmt->pData->dnodeId)) != 0) {
|
||||||
dError("failed to start udfd");
|
dError("failed to start udfd since %s", tstrerror(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
pOutput->pMgmt = pMgmt;
|
pOutput->pMgmt = pMgmt;
|
||||||
|
|
|
@ -77,6 +77,7 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t vnodeNum;
|
int32_t vnodeNum;
|
||||||
int32_t opened;
|
int32_t opened;
|
||||||
|
int32_t dropped;
|
||||||
int32_t failed;
|
int32_t failed;
|
||||||
bool updateVnodesList;
|
bool updateVnodesList;
|
||||||
int32_t threadIndex;
|
int32_t threadIndex;
|
||||||
|
|
|
@ -311,6 +311,8 @@ static void *vmOpenVnodeInThread(void *param) {
|
||||||
snprintf(path, TSDB_FILENAME_LEN, "vnode%svnode%d", TD_DIRSEP, pCfg->vgId);
|
snprintf(path, TSDB_FILENAME_LEN, "vnode%svnode%d", TD_DIRSEP, pCfg->vgId);
|
||||||
vnodeDestroy(pCfg->vgId, path, pMgmt->pTfs, 0);
|
vnodeDestroy(pCfg->vgId, path, pMgmt->pTfs, 0);
|
||||||
pThread->updateVnodesList = true;
|
pThread->updateVnodesList = true;
|
||||||
|
pThread->dropped++;
|
||||||
|
(void)atomic_add_fetch_32(&pMgmt->state.dropVnodes, 1);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -352,8 +354,8 @@ static void *vmOpenVnodeInThread(void *param) {
|
||||||
(void)atomic_add_fetch_32(&pMgmt->state.openVnodes, 1);
|
(void)atomic_add_fetch_32(&pMgmt->state.openVnodes, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
dInfo("thread:%d, numOfVnodes:%d, opened:%d failed:%d", pThread->threadIndex, pThread->vnodeNum, pThread->opened,
|
dInfo("thread:%d, numOfVnodes:%d, opened:%d dropped:%d failed:%d", pThread->threadIndex, pThread->vnodeNum,
|
||||||
pThread->failed);
|
pThread->opened, pThread->dropped, pThread->failed);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,7 +429,7 @@ static int32_t vmOpenVnodes(SVnodeMgmt *pMgmt) {
|
||||||
taosMemoryFree(threads);
|
taosMemoryFree(threads);
|
||||||
taosMemoryFree(pCfgs);
|
taosMemoryFree(pCfgs);
|
||||||
|
|
||||||
if (pMgmt->state.openVnodes != pMgmt->state.totalVnodes) {
|
if ((pMgmt->state.openVnodes + pMgmt->state.dropVnodes) != pMgmt->state.totalVnodes) {
|
||||||
dError("there are total vnodes:%d, opened:%d", pMgmt->state.totalVnodes, pMgmt->state.openVnodes);
|
dError("there are total vnodes:%d, opened:%d", pMgmt->state.totalVnodes, pMgmt->state.openVnodes);
|
||||||
terrno = TSDB_CODE_VND_INIT_FAILED;
|
terrno = TSDB_CODE_VND_INIT_FAILED;
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -774,6 +776,7 @@ static int32_t vmStartVnodes(SVnodeMgmt *pMgmt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
pMgmt->state.openVnodes = 0;
|
pMgmt->state.openVnodes = 0;
|
||||||
|
pMgmt->state.dropVnodes = 0;
|
||||||
dInfo("restore %d vnodes with %d threads", numOfVnodes, threadNum);
|
dInfo("restore %d vnodes with %d threads", numOfVnodes, threadNum);
|
||||||
|
|
||||||
for (int32_t t = 0; t < threadNum; ++t) {
|
for (int32_t t = 0; t < threadNum; ++t) {
|
||||||
|
|
|
@ -65,7 +65,7 @@ int32_t dmInitDnode(SDnode *pDnode) {
|
||||||
snprintf(path, sizeof(path), "%s%s%s", tsDataDir, TD_DIRSEP, pWrapper->name);
|
snprintf(path, sizeof(path), "%s%s%s", tsDataDir, TD_DIRSEP, pWrapper->name);
|
||||||
pWrapper->path = taosStrdup(path);
|
pWrapper->path = taosStrdup(path);
|
||||||
if (pWrapper->path == NULL) {
|
if (pWrapper->path == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = terrno;
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,7 @@ static bool dmIsForbiddenIp(int8_t forbidden, char *user, uint32_t clientIp) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
|
static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
|
||||||
SDnodeTrans *pTrans = &pDnode->trans;
|
SDnodeTrans *pTrans = &pDnode->trans;
|
||||||
int32_t code = -1;
|
int32_t code = -1;
|
||||||
|
@ -150,10 +151,9 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
|
||||||
dmSetMnodeEpSet(&pDnode->data, pEpSet);
|
dmSetMnodeEpSet(&pDnode->data, pEpSet);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TDMT_MND_RETRIEVE_IP_WHITE_RSP: {
|
case TDMT_MND_RETRIEVE_IP_WHITE_RSP:
|
||||||
dmUpdateRpcIpWhite(&pDnode->data, pTrans->serverRpc, pRpc);
|
dmUpdateRpcIpWhite(&pDnode->data, pTrans->serverRpc, pRpc);
|
||||||
return;
|
return;
|
||||||
} break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -461,12 +461,12 @@ void dmGetMnodeEpSet(SDnodeData *pData, SEpSet *pEpSet) {
|
||||||
|
|
||||||
void dmEpSetToStr(char *buf, int32_t len, SEpSet *epSet) {
|
void dmEpSetToStr(char *buf, int32_t len, SEpSet *epSet) {
|
||||||
int32_t n = 0;
|
int32_t n = 0;
|
||||||
n += snprintf(buf + n, len - n, "%s", "{");
|
n += tsnprintf(buf + n, len - n, "%s", "{");
|
||||||
for (int i = 0; i < epSet->numOfEps; i++) {
|
for (int i = 0; i < epSet->numOfEps; i++) {
|
||||||
n += snprintf(buf + n, len - n, "%s:%d%s", epSet->eps[i].fqdn, epSet->eps[i].port,
|
n += tsnprintf(buf + n, len - n, "%s:%d%s", epSet->eps[i].fqdn, epSet->eps[i].port,
|
||||||
(i + 1 < epSet->numOfEps ? ", " : ""));
|
(i + 1 < epSet->numOfEps ? ", " : ""));
|
||||||
}
|
}
|
||||||
n += snprintf(buf + n, len - n, "%s", "}");
|
n += tsnprintf(buf + n, len - n, "%s", "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
static FORCE_INLINE void dmSwapEps(SEp *epLhs, SEp *epRhs) {
|
static FORCE_INLINE void dmSwapEps(SEp *epLhs, SEp *epRhs) {
|
||||||
|
|
|
@ -14,6 +14,7 @@ IF (TD_ENTERPRISE)
|
||||||
ELSEIF(${BUILD_WITH_COS})
|
ELSEIF(${BUILD_WITH_COS})
|
||||||
add_definitions(-DUSE_COS)
|
add_definitions(-DUSE_COS)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
add_library(mnode STATIC ${MNODE_SRC})
|
add_library(mnode STATIC ${MNODE_SRC})
|
||||||
|
|
|
@ -445,7 +445,7 @@ static int32_t mndProcessArbHbTimer(SRpcMsg *pReq) {
|
||||||
|
|
||||||
SDnodeObj *pDnode = mndAcquireDnode(pMnode, dnodeId);
|
SDnodeObj *pDnode = mndAcquireDnode(pMnode, dnodeId);
|
||||||
if (pDnode == NULL) {
|
if (pDnode == NULL) {
|
||||||
mError("dnodeId:%d, timer failed to send arb-hb request, failed find dnode", dnodeId);
|
mError("dnodeId:%d, timer failed to acquire dnode", dnodeId);
|
||||||
taosArrayDestroy(hbMembers);
|
taosArrayDestroy(hbMembers);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -453,7 +453,10 @@ static int32_t mndProcessArbHbTimer(SRpcMsg *pReq) {
|
||||||
int64_t mndTerm = mndGetTerm(pMnode);
|
int64_t mndTerm = mndGetTerm(pMnode);
|
||||||
|
|
||||||
if (mndIsDnodeOnline(pDnode, nowMs)) {
|
if (mndIsDnodeOnline(pDnode, nowMs)) {
|
||||||
TAOS_CHECK_RETURN(mndSendArbHeartBeatReq(pDnode, arbToken, mndTerm, hbMembers));
|
int32_t sendCode = mndSendArbHeartBeatReq(pDnode, arbToken, mndTerm, hbMembers);
|
||||||
|
if (TSDB_CODE_SUCCESS != sendCode) {
|
||||||
|
mError("dnodeId:%d, timer failed to send arb-hb request", dnodeId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mndReleaseDnode(pMnode, pDnode);
|
mndReleaseDnode(pMnode, pDnode);
|
||||||
|
|
|
@ -241,7 +241,7 @@ static int32_t mndCreateDefaultCluster(SMnode *pMnode) {
|
||||||
clusterObj.createdTime = taosGetTimestampMs();
|
clusterObj.createdTime = taosGetTimestampMs();
|
||||||
clusterObj.updateTime = clusterObj.createdTime;
|
clusterObj.updateTime = clusterObj.createdTime;
|
||||||
|
|
||||||
int32_t code = taosGetSystemUUID(clusterObj.name, TSDB_CLUSTER_ID_LEN);
|
int32_t code = taosGetSystemUUIDLen(clusterObj.name, TSDB_CLUSTER_ID_LEN);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
(void)strcpy(clusterObj.name, "tdengine3.0");
|
(void)strcpy(clusterObj.name, "tdengine3.0");
|
||||||
mError("failed to get name from system, set to default val %s", clusterObj.name);
|
mError("failed to get name from system, set to default val %s", clusterObj.name);
|
||||||
|
|
|
@ -640,10 +640,10 @@ void mndCompactSendProgressReq(SMnode *pMnode, SCompactObj *pCompact) {
|
||||||
rpcMsg.pCont = pHead;
|
rpcMsg.pCont = pHead;
|
||||||
|
|
||||||
char detail[1024] = {0};
|
char detail[1024] = {0};
|
||||||
int32_t len = snprintf(detail, sizeof(detail), "msgType:%s numOfEps:%d inUse:%d",
|
int32_t len = tsnprintf(detail, sizeof(detail), "msgType:%s numOfEps:%d inUse:%d",
|
||||||
TMSG_INFO(TDMT_VND_QUERY_COMPACT_PROGRESS), epSet.numOfEps, epSet.inUse);
|
TMSG_INFO(TDMT_VND_QUERY_COMPACT_PROGRESS), epSet.numOfEps, epSet.inUse);
|
||||||
for (int32_t i = 0; i < epSet.numOfEps; ++i) {
|
for (int32_t i = 0; i < epSet.numOfEps; ++i) {
|
||||||
len += snprintf(detail + len, sizeof(detail) - len, " ep:%d-%s:%u", i, epSet.eps[i].fqdn, epSet.eps[i].port);
|
len += tsnprintf(detail + len, sizeof(detail) - len, " ep:%d-%s:%u", i, epSet.eps[i].fqdn, epSet.eps[i].port);
|
||||||
}
|
}
|
||||||
|
|
||||||
mDebug("compact:%d, send update progress msg to %s", pDetail->compactId, detail);
|
mDebug("compact:%d, send update progress msg to %s", pDetail->compactId, detail);
|
||||||
|
|
|
@ -167,7 +167,7 @@ static int32_t checkPrivilege(SMnode *pMnode, SMqConsumerObj *pConsumer, SMqHbRs
|
||||||
}
|
}
|
||||||
STopicPrivilege *data = taosArrayReserve(rsp->topicPrivileges, 1);
|
STopicPrivilege *data = taosArrayReserve(rsp->topicPrivileges, 1);
|
||||||
MND_TMQ_NULL_CHECK(data);
|
MND_TMQ_NULL_CHECK(data);
|
||||||
(void)strcpy(data->topic, topic);
|
tstrncpy(data->topic, topic, TSDB_TOPIC_FNAME_LEN);
|
||||||
if (mndCheckTopicPrivilege(pMnode, user, MND_OPER_SUBSCRIBE, pTopic) != 0 ||
|
if (mndCheckTopicPrivilege(pMnode, user, MND_OPER_SUBSCRIBE, pTopic) != 0 ||
|
||||||
grantCheckExpire(TSDB_GRANT_SUBSCRIPTION) < 0) {
|
grantCheckExpire(TSDB_GRANT_SUBSCRIPTION) < 0) {
|
||||||
data->noPrivilege = 1;
|
data->noPrivilege = 1;
|
||||||
|
@ -244,6 +244,7 @@ static int32_t mndProcessMqHbReq(SRpcMsg *pMsg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
storeOffsetRows(pMnode, &req, pConsumer);
|
storeOffsetRows(pMnode, &req, pConsumer);
|
||||||
|
rsp.debugFlag = tqClientDebug;
|
||||||
code = buildMqHbRsp(pMsg, &rsp);
|
code = buildMqHbRsp(pMsg, &rsp);
|
||||||
|
|
||||||
END:
|
END:
|
||||||
|
@ -277,7 +278,7 @@ static int32_t addEpSetInfo(SMnode *pMnode, SMqConsumerObj *pConsumer, int32_t e
|
||||||
taosRLockLatch(&pSub->lock);
|
taosRLockLatch(&pSub->lock);
|
||||||
|
|
||||||
SMqSubTopicEp topicEp = {0};
|
SMqSubTopicEp topicEp = {0};
|
||||||
(void)strcpy(topicEp.topic, topic);
|
tstrncpy(topicEp.topic, topic, TSDB_TOPIC_FNAME_LEN);
|
||||||
|
|
||||||
// 2.1 fetch topic schema
|
// 2.1 fetch topic schema
|
||||||
SMqTopicObj *pTopic = NULL;
|
SMqTopicObj *pTopic = NULL;
|
||||||
|
@ -587,8 +588,8 @@ int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
|
||||||
|
|
||||||
SCMSubscribeReq subscribe = {0};
|
SCMSubscribeReq subscribe = {0};
|
||||||
MND_TMQ_RETURN_CHECK(tDeserializeSCMSubscribeReq(msgStr, &subscribe, pMsg->contLen));
|
MND_TMQ_RETURN_CHECK(tDeserializeSCMSubscribeReq(msgStr, &subscribe, pMsg->contLen));
|
||||||
bool ubSubscribe = (taosArrayGetSize(subscribe.topicNames) == 0);
|
bool unSubscribe = (taosArrayGetSize(subscribe.topicNames) == 0);
|
||||||
if(ubSubscribe){
|
if(unSubscribe){
|
||||||
SMqConsumerObj *pConsumerTmp = NULL;
|
SMqConsumerObj *pConsumerTmp = NULL;
|
||||||
MND_TMQ_RETURN_CHECK(mndAcquireConsumer(pMnode, subscribe.consumerId, &pConsumerTmp));
|
MND_TMQ_RETURN_CHECK(mndAcquireConsumer(pMnode, subscribe.consumerId, &pConsumerTmp));
|
||||||
if (taosArrayGetSize(pConsumerTmp->assignedTopics) == 0){
|
if (taosArrayGetSize(pConsumerTmp->assignedTopics) == 0){
|
||||||
|
@ -599,7 +600,7 @@ int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
|
||||||
}
|
}
|
||||||
MND_TMQ_RETURN_CHECK(checkAndSortTopic(pMnode, subscribe.topicNames));
|
MND_TMQ_RETURN_CHECK(checkAndSortTopic(pMnode, subscribe.topicNames));
|
||||||
pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY,
|
pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY,
|
||||||
(ubSubscribe ? TRN_CONFLICT_NOTHING :TRN_CONFLICT_DB_INSIDE),
|
(unSubscribe ? TRN_CONFLICT_NOTHING :TRN_CONFLICT_DB_INSIDE),
|
||||||
pMsg, "subscribe");
|
pMsg, "subscribe");
|
||||||
MND_TMQ_NULL_CHECK(pTrans);
|
MND_TMQ_NULL_CHECK(pTrans);
|
||||||
|
|
||||||
|
@ -909,7 +910,7 @@ static int32_t mndRetrieveConsumer(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *
|
||||||
|
|
||||||
// consumer id
|
// consumer id
|
||||||
char consumerIdHex[TSDB_CONSUMER_ID_LEN + VARSTR_HEADER_SIZE] = {0};
|
char consumerIdHex[TSDB_CONSUMER_ID_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
(void)sprintf(varDataVal(consumerIdHex), "0x%" PRIx64, pConsumer->consumerId);
|
(void)snprintf(varDataVal(consumerIdHex), TSDB_CONSUMER_ID_LEN, "0x%" PRIx64, pConsumer->consumerId);
|
||||||
varDataSetLen(consumerIdHex, strlen(varDataVal(consumerIdHex)));
|
varDataSetLen(consumerIdHex, strlen(varDataVal(consumerIdHex)));
|
||||||
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
|
@ -992,7 +993,7 @@ static int32_t mndRetrieveConsumer(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *
|
||||||
|
|
||||||
parasStr = taosMemoryCalloc(1, pShow->pMeta->pSchemas[cols].bytes);
|
parasStr = taosMemoryCalloc(1, pShow->pMeta->pSchemas[cols].bytes);
|
||||||
MND_TMQ_NULL_CHECK(parasStr);
|
MND_TMQ_NULL_CHECK(parasStr);
|
||||||
(void)sprintf(varDataVal(parasStr), "tbname:%d,commit:%d,interval:%dms,reset:%s", pConsumer->withTbName,
|
(void)snprintf(varDataVal(parasStr), pShow->pMeta->pSchemas[cols].bytes - VARSTR_HEADER_SIZE, "tbname:%d,commit:%d,interval:%dms,reset:%s", pConsumer->withTbName,
|
||||||
pConsumer->autoCommit, pConsumer->autoCommitInterval, buf);
|
pConsumer->autoCommit, pConsumer->autoCommitInterval, buf);
|
||||||
varDataSetLen(parasStr, strlen(varDataVal(parasStr)));
|
varDataSetLen(parasStr, strlen(varDataVal(parasStr)));
|
||||||
|
|
||||||
|
|
|
@ -2366,7 +2366,7 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb,
|
||||||
TAOS_CHECK_GOTO(colDataSetVal(pColInfo, rows, (const char *)strictVstr, false), &lino, _OVER);
|
TAOS_CHECK_GOTO(colDataSetVal(pColInfo, rows, (const char *)strictVstr, false), &lino, _OVER);
|
||||||
|
|
||||||
char durationVstr[128] = {0};
|
char durationVstr[128] = {0};
|
||||||
int32_t len = formatDurationOrKeep(&durationVstr[VARSTR_HEADER_SIZE], pDb->cfg.daysPerFile);
|
int32_t len = formatDurationOrKeep(&durationVstr[VARSTR_HEADER_SIZE], sizeof(durationVstr) - VARSTR_HEADER_SIZE, pDb->cfg.daysPerFile);
|
||||||
|
|
||||||
varDataSetLen(durationVstr, len);
|
varDataSetLen(durationVstr, len);
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
|
@ -2377,9 +2377,9 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb,
|
||||||
char keep1Str[128] = {0};
|
char keep1Str[128] = {0};
|
||||||
char keep2Str[128] = {0};
|
char keep2Str[128] = {0};
|
||||||
|
|
||||||
int32_t lenKeep0 = formatDurationOrKeep(keep0Str, pDb->cfg.daysToKeep0);
|
int32_t lenKeep0 = formatDurationOrKeep(keep0Str, sizeof(keep0Str), pDb->cfg.daysToKeep0);
|
||||||
int32_t lenKeep1 = formatDurationOrKeep(keep1Str, pDb->cfg.daysToKeep1);
|
int32_t lenKeep1 = formatDurationOrKeep(keep1Str, sizeof(keep1Str), pDb->cfg.daysToKeep1);
|
||||||
int32_t lenKeep2 = formatDurationOrKeep(keep2Str, pDb->cfg.daysToKeep2);
|
int32_t lenKeep2 = formatDurationOrKeep(keep2Str, sizeof(keep2Str), pDb->cfg.daysToKeep2);
|
||||||
|
|
||||||
if (pDb->cfg.daysToKeep0 > pDb->cfg.daysToKeep1 || pDb->cfg.daysToKeep0 > pDb->cfg.daysToKeep2) {
|
if (pDb->cfg.daysToKeep0 > pDb->cfg.daysToKeep1 || pDb->cfg.daysToKeep0 > pDb->cfg.daysToKeep2) {
|
||||||
len = sprintf(&keepVstr[VARSTR_HEADER_SIZE], "%s,%s,%s", keep1Str, keep2Str, keep0Str);
|
len = sprintf(&keepVstr[VARSTR_HEADER_SIZE], "%s,%s,%s", keep1Str, keep2Str, keep0Str);
|
||||||
|
|
|
@ -693,7 +693,7 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) {
|
||||||
int64_t clusterid = mndGetClusterId(pMnode);
|
int64_t clusterid = mndGetClusterId(pMnode);
|
||||||
if (statusReq.clusterId != 0 && statusReq.clusterId != clusterid) {
|
if (statusReq.clusterId != 0 && statusReq.clusterId != clusterid) {
|
||||||
code = TSDB_CODE_MND_DNODE_DIFF_CLUSTER;
|
code = TSDB_CODE_MND_DNODE_DIFF_CLUSTER;
|
||||||
mWarn("dnode:%d, %s, its clusterid:%" PRId64 " differ from current cluster:%" PRId64 ", code:0x%x",
|
mWarn("dnode:%d, %s, its clusterid:%" PRId64 " differ from current clusterid:%" PRId64 ", code:0x%x",
|
||||||
statusReq.dnodeId, statusReq.dnodeEp, statusReq.clusterId, clusterid, code);
|
statusReq.dnodeId, statusReq.dnodeEp, statusReq.clusterId, clusterid, code);
|
||||||
goto _OVER;
|
goto _OVER;
|
||||||
}
|
}
|
||||||
|
@ -740,7 +740,6 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) {
|
||||||
bool enableWhiteListChanged = statusReq.clusterCfg.enableWhiteList != (tsEnableWhiteList ? 1 : 0);
|
bool enableWhiteListChanged = statusReq.clusterCfg.enableWhiteList != (tsEnableWhiteList ? 1 : 0);
|
||||||
bool needCheck = !online || dnodeChanged || reboot || supportVnodesChanged ||
|
bool needCheck = !online || dnodeChanged || reboot || supportVnodesChanged ||
|
||||||
pMnode->ipWhiteVer != statusReq.ipWhiteVer || encryptKeyChanged || enableWhiteListChanged;
|
pMnode->ipWhiteVer != statusReq.ipWhiteVer || encryptKeyChanged || enableWhiteListChanged;
|
||||||
|
|
||||||
const STraceId *trace = &pReq->info.traceId;
|
const STraceId *trace = &pReq->info.traceId;
|
||||||
mGTrace("dnode:%d, status received, accessTimes:%d check:%d online:%d reboot:%d changed:%d statusSeq:%d", pDnode->id,
|
mGTrace("dnode:%d, status received, accessTimes:%d check:%d online:%d reboot:%d changed:%d statusSeq:%d", pDnode->id,
|
||||||
pDnode->accessTimes, needCheck, online, reboot, dnodeChanged, statusReq.statusSeq);
|
pDnode->accessTimes, needCheck, online, reboot, dnodeChanged, statusReq.statusSeq);
|
||||||
|
|
|
@ -157,7 +157,7 @@ static void *mndBuildDropIdxReq(SMnode *pMnode, SVgObj *pVgroup, SStbObj *pStbOb
|
||||||
pHead->contLen = htonl(len);
|
pHead->contLen = htonl(len);
|
||||||
pHead->vgId = htonl(pVgroup->vgId);
|
pHead->vgId = htonl(pVgroup->vgId);
|
||||||
|
|
||||||
void *pBuf = POINTER_SHIFT(pHead, sizeof(SMsgHead));
|
void *pBuf = POINTER_SHIFT(pHead, sizeof(SMsgHead));
|
||||||
int32_t ret = 0;
|
int32_t ret = 0;
|
||||||
if ((ret = tSerializeSDropIdxReq(pBuf, len - sizeof(SMsgHead), &req)) < 0) {
|
if ((ret = tSerializeSDropIdxReq(pBuf, len - sizeof(SMsgHead), &req)) < 0) {
|
||||||
terrno = ret;
|
terrno = ret;
|
||||||
|
@ -662,6 +662,8 @@ static int32_t mndSetUpdateIdxStbCommitLogs(SMnode *pMnode, STrans *pTrans, SStb
|
||||||
|
|
||||||
pNew->pTags = NULL;
|
pNew->pTags = NULL;
|
||||||
pNew->pColumns = NULL;
|
pNew->pColumns = NULL;
|
||||||
|
pNew->pCmpr = NULL;
|
||||||
|
pNew->pTags = NULL;
|
||||||
pNew->updateTime = taosGetTimestampMs();
|
pNew->updateTime = taosGetTimestampMs();
|
||||||
pNew->lock = 0;
|
pNew->lock = 0;
|
||||||
|
|
||||||
|
|
|
@ -495,7 +495,7 @@ static int32_t mndCreateDir(SMnode *pMnode, const char *path) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
pMnode->path = taosStrdup(path);
|
pMnode->path = taosStrdup(path);
|
||||||
if (pMnode->path == NULL) {
|
if (pMnode->path == NULL) {
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = terrno;
|
||||||
TAOS_RETURN(code);
|
TAOS_RETURN(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -574,6 +574,8 @@ static int32_t mndOpenSdb(SMnode *pMnode) {
|
||||||
code = sdbReadFile(pMnode->pSdb);
|
code = sdbReadFile(pMnode->pSdb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mInfo("vgId:1, mnode sdb is opened, with applied index:%" PRId64, pMnode->pSdb->commitIndex);
|
||||||
|
|
||||||
atomic_store_64(&pMnode->applied, pMnode->pSdb->commitIndex);
|
atomic_store_64(&pMnode->applied, pMnode->pSdb->commitIndex);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,7 +140,7 @@ static SConnObj *mndCreateConn(SMnode *pMnode, const char *user, int8_t connType
|
||||||
SProfileMgmt *pMgmt = &pMnode->profileMgmt;
|
SProfileMgmt *pMgmt = &pMnode->profileMgmt;
|
||||||
|
|
||||||
char connStr[255] = {0};
|
char connStr[255] = {0};
|
||||||
int32_t len = snprintf(connStr, sizeof(connStr), "%s%d%d%d%s", user, ip, port, pid, app);
|
int32_t len = tsnprintf(connStr, sizeof(connStr), "%s%d%d%d%s", user, ip, port, pid, app);
|
||||||
uint32_t connId = mndGenerateUid(connStr, len);
|
uint32_t connId = mndGenerateUid(connStr, len);
|
||||||
if (startTime == 0) startTime = taosGetTimestampMs();
|
if (startTime == 0) startTime = taosGetTimestampMs();
|
||||||
|
|
||||||
|
|
|
@ -1231,7 +1231,7 @@ static int32_t mndGetSma(SMnode *pMnode, SUserIndexReq *indexReq, SUserIndexRsp
|
||||||
SNode *node = NULL;
|
SNode *node = NULL;
|
||||||
FOREACH(node, pList) {
|
FOREACH(node, pList) {
|
||||||
SFunctionNode *pFunc = (SFunctionNode *)node;
|
SFunctionNode *pFunc = (SFunctionNode *)node;
|
||||||
extOffset += snprintf(rsp->indexExts + extOffset, sizeof(rsp->indexExts) - extOffset - 1, "%s%s",
|
extOffset += tsnprintf(rsp->indexExts + extOffset, sizeof(rsp->indexExts) - extOffset - 1, "%s%s",
|
||||||
(extOffset ? "," : ""), pFunc->functionName);
|
(extOffset ? "," : ""), pFunc->functionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2221,10 +2221,10 @@ static int32_t mndRetrieveTSMA(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlo
|
||||||
int32_t len = 0;
|
int32_t len = 0;
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
if (!IS_CALENDAR_TIME_DURATION(pSma->intervalUnit)) {
|
if (!IS_CALENDAR_TIME_DURATION(pSma->intervalUnit)) {
|
||||||
len = snprintf(interval + VARSTR_HEADER_SIZE, 64, "%" PRId64 "%c", pSma->interval,
|
len = tsnprintf(interval + VARSTR_HEADER_SIZE, 64, "%" PRId64 "%c", pSma->interval,
|
||||||
getPrecisionUnit(pSrcDb->cfg.precision));
|
getPrecisionUnit(pSrcDb->cfg.precision));
|
||||||
} else {
|
} else {
|
||||||
len = snprintf(interval + VARSTR_HEADER_SIZE, 64, "%" PRId64 "%c", pSma->interval, pSma->intervalUnit);
|
len = tsnprintf(interval + VARSTR_HEADER_SIZE, 64, "%" PRId64 "%c", pSma->interval, pSma->intervalUnit);
|
||||||
}
|
}
|
||||||
varDataSetLen(interval, len);
|
varDataSetLen(interval, len);
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
|
@ -2235,7 +2235,7 @@ static int32_t mndRetrieveTSMA(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlo
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
// create sql
|
// create sql
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
len = snprintf(buf + VARSTR_HEADER_SIZE, TSDB_MAX_SAVED_SQL_LEN, "%s", pSma->sql);
|
len = tsnprintf(buf + VARSTR_HEADER_SIZE, TSDB_MAX_SAVED_SQL_LEN, "%s", pSma->sql);
|
||||||
varDataSetLen(buf, TMIN(len, TSDB_MAX_SAVED_SQL_LEN));
|
varDataSetLen(buf, TMIN(len, TSDB_MAX_SAVED_SQL_LEN));
|
||||||
code = colDataSetVal(pColInfo, numOfRows, buf, false);
|
code = colDataSetVal(pColInfo, numOfRows, buf, false);
|
||||||
}
|
}
|
||||||
|
@ -2350,7 +2350,7 @@ int32_t dumpTSMAInfoFromSmaObj(const SSmaObj* pSma, const SStbObj* pDestStb, STa
|
||||||
nodesDestroyNode(pNode);
|
nodesDestroyNode(pNode);
|
||||||
}
|
}
|
||||||
pInfo->ast = taosStrdup(pSma->ast);
|
pInfo->ast = taosStrdup(pSma->ast);
|
||||||
if (!pInfo->ast) code = TSDB_CODE_OUT_OF_MEMORY;
|
if (!pInfo->ast) code = terrno;
|
||||||
|
|
||||||
if (code == TSDB_CODE_SUCCESS && pDestStb->numOfTags > 0) {
|
if (code == TSDB_CODE_SUCCESS && pDestStb->numOfTags > 0) {
|
||||||
pInfo->pTags = taosArrayInit(pDestStb->numOfTags, sizeof(SSchema));
|
pInfo->pTags = taosArrayInit(pDestStb->numOfTags, sizeof(SSchema));
|
||||||
|
|
|
@ -234,6 +234,7 @@ static int32_t doSetUpdateTaskAction(SMnode *pMnode, STrans *pTrans, SStreamTask
|
||||||
code = extractNodeEpset(pMnode, &epset, &hasEpset, pTask->id.taskId, pTask->info.nodeId);
|
code = extractNodeEpset(pMnode, &epset, &hasEpset, pTask->id.taskId, pTask->info.nodeId);
|
||||||
if (code != TSDB_CODE_SUCCESS || !hasEpset) {
|
if (code != TSDB_CODE_SUCCESS || !hasEpset) {
|
||||||
mError("failed to extract epset during create update epset, code:%s", tstrerror(code));
|
mError("failed to extract epset during create update epset, code:%s", tstrerror(code));
|
||||||
|
taosMemoryFree(pBuf);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue