From dfce3dedab4a3e794b11da5f2cff9540fecc1e84 Mon Sep 17 00:00:00 2001 From: yingzhao Date: Thu, 19 Sep 2024 14:45:54 +0800 Subject: [PATCH 01/27] docs(datain): enhance json parser, support json array --- docs/zh/06-advanced/05-data-in/07-mqtt.md | 19 +++++++++++++++++-- docs/zh/06-advanced/05-data-in/08-kafka.md | 18 +++++++++++++++++- docs/zh/06-advanced/05-data-in/index.md | 15 +++++++++++++-- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/docs/zh/06-advanced/05-data-in/07-mqtt.md b/docs/zh/06-advanced/05-data-in/07-mqtt.md index eb6753b7b0..af99cd3621 100644 --- a/docs/zh/06-advanced/05-data-in/07-mqtt.md +++ b/docs/zh/06-advanced/05-data-in/07-mqtt.md @@ -72,15 +72,30 @@ TDengine 可以通过 MQTT 连接器从 MQTT 代理订阅数据并将其写入 T taosX 可以使用 JSON 提取器解析数据,并允许用户在数据库中指定数据模型,包括,指定表名称和超级表名,设置普通列和标签列等。 - #### 6.1 解析 + 有三种获取示例数据的方法: 点击 **从服务器检索** 按钮,从 MQTT 获取示例数据。 点击 **文件上传** 按钮,上传 CSV 文件,获取示例数据。 -在 **消息体** 中填写 MQTT 消息体中的示例数据,例如:`{"id": 1, "message": "hello-word"}{"id": 2, "message": "hello-word"}`。之后会使用这条示例数据来配置提取和过滤条件。 +在 **消息体** 中填写 MQTT 消息体中的示例数据。 + +json 数据支持 JSONObject 或者 JSONArray,使用 json 解析器可以解析一下数据: + +``` json +{"id": 1, "message": "hello-word"} +{"id": 2, "message": "hello-word"} +``` + +或者 + +``` json +[{"id": 1, "message": "hello-word"},{"id": 2, "message": "hello-word"}] +``` + +解析结果如下所示: ![mqtt-06.png](./mqtt-06.png) diff --git a/docs/zh/06-advanced/05-data-in/08-kafka.md b/docs/zh/06-advanced/05-data-in/08-kafka.md index 92bfc031ec..e05c205f6e 100644 --- a/docs/zh/06-advanced/05-data-in/08-kafka.md +++ b/docs/zh/06-advanced/05-data-in/08-kafka.md @@ -80,13 +80,29 @@ TDengine 可以高效地从 Kafka 读取数据并将其写入 TDengine,以实 在 **Payload 解析** 区域填写 Payload 解析相关的配置参数。 #### 7.1 解析 + 有三种获取示例数据的方法: 点击 **从服务器检索** 按钮,从 Kafka 获取示例数据。 点击 **文件上传** 按钮,上传 CSV 文件,获取示例数据。 -在 **消息体** 中填写 Kafka 消息体中的示例数据,例如:`{"id": 1, "message": "hello-word"}{"id": 2, "message": "hello-word"}`。之后会使用这条示例数据来配置提取和过滤条件。 +在 **消息体** 中填写 Kafka 消息体中的示例数据。 + +json 数据支持 JSONObject 或者 JSONArray,使用 json 解析器可以解析一下数据: + +``` json +{"id": 1, "message": "hello-word"} +{"id": 2, "message": "hello-word"} +``` + +或者 + +``` json +[{"id": 1, "message": "hello-word"},{"id": 2, "message": "hello-word"}] +``` + +解析结果如下所示: ![kafka-07.png](./kafka-07.png) diff --git a/docs/zh/06-advanced/05-data-in/index.md b/docs/zh/06-advanced/05-data-in/index.md index 1a142fd47a..7e5c467010 100644 --- a/docs/zh/06-advanced/05-data-in/index.md +++ b/docs/zh/06-advanced/05-data-in/index.md @@ -38,7 +38,6 @@ TDengine Enterprise 配备了一个强大的可视化数据管理工具—taosEx 下面详细讲解数据转换规则 - ### 解析 仅非结构化的数据源需要这个步骤,目前 MQTT 和 Kafka 数据源会使用这个步骤提供的规则来解析非结构化数据,以初步获取结构化数据,即可以以字段描述的行列数据。在 explorer 中您需要提供示例数据和解析规则,来预览解析出以表格呈现的结构化数据。 @@ -53,13 +52,15 @@ TDengine Enterprise 配备了一个强大的可视化数据管理工具—taosEx 2. 点击右侧按钮 “从服务器检索” 则从配置的服务器获取示例数据,并追加到示例数据 textarea 中; 3. 上传文件,将文件内容追加到示例数据 textarea 中。 +每一条示例数据以回车符结尾。 + #### 解析 解析就是通过解析规则,将非结构化字符串解析为结构化数据。消息体的解析规则目前支持 JSON、Regex 和 UDT。 ##### JSON 解析 -如下 JSON 示例数据,可自动解析出字段:`groupid`、`voltage`、`current`、`ts`、`inuse`、`location`。 +JSON 解析支持 JSONObject 或者 JSONArray。 如下 JSON 示例数据,可自动解析出字段:`groupid`、`voltage`、`current`、`ts`、`inuse`、`location`。 ``` json {"groupid": 170001, "voltage": "221V", "current": 12.3, "ts": "2023-12-18T22:12:00", "inuse": true, "location": "beijing.chaoyang.datun"} @@ -67,6 +68,16 @@ TDengine Enterprise 配备了一个强大的可视化数据管理工具—taosEx {"groupid": 170001, "voltage": "216V", "current": 12.5, "ts": "2023-12-18T22:12:04", "inuse": false, "location": "beijing.chaoyang.datun"} ``` +或者 + +``` json +[{"groupid": 170001, "voltage": "221V", "current": 12.3, "ts": "2023-12-18T22:12:00", "inuse": true, "location": "beijing.chaoyang.datun"}, +{"groupid": 170001, "voltage": "220V", "current": 12.2, "ts": "2023-12-18T22:12:02", "inuse": true, "location": "beijing.chaoyang.datun"}, +{"groupid": 170001, "voltage": "216V", "current": 12.5, "ts": "2023-12-18T22:12:04", "inuse": false, "location": "beijing.chaoyang.datun"}] +``` + +后续示例仅以JSONObject 为例说明。 + 如下嵌套结构的 JSON 数据,可自动解析出字段`groupid`、`data_voltage`、`data_current`、`ts`、`inuse`、`location_0_province`、`location_0_city`、`location_0_datun`,也可以选择要解析的字段,并设置解析的别名。 ``` json From d03124360e06853563922473013b97fb7fb19a31 Mon Sep 17 00:00:00 2001 From: t_max <1172915550@qq.com> Date: Thu, 19 Sep 2024 15:05:01 +0800 Subject: [PATCH 02/27] docs: add varbinary and geometry types --- docs/zh/14-reference/05-connector/20-go.mdx | 5 +++++ docs/zh/14-reference/05-connector/40-csharp.mdx | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/zh/14-reference/05-connector/20-go.mdx b/docs/zh/14-reference/05-connector/20-go.mdx index 8d65fba321..61048f7b85 100644 --- a/docs/zh/14-reference/05-connector/20-go.mdx +++ b/docs/zh/14-reference/05-connector/20-go.mdx @@ -63,10 +63,15 @@ TDengine 其他功能模块的报错,请参考 [错误码](../../../reference/ | BINARY | string | | NCHAR | string | | JSON | []byte | +| GEOMETRY | []byte | +| VARBINARY | []byte | **注意**:JSON 类型仅在 tag 中支持。 +GEOMETRY类型是 little endian 字节序的二进制数据,符合 WKB 规范。详细信息请参考 [数据类型](../../taos-sql/data-type/#数据类型) +WKB规范请参考[Well-Known Binary (WKB)](https://libgeos.org/specifications/wkb/) ## 示例程序汇总 + 示例程序源码请参考:[示例程序](https://github.com/taosdata/driver-go/tree/main/examples) ## 常见问题 diff --git a/docs/zh/14-reference/05-connector/40-csharp.mdx b/docs/zh/14-reference/05-connector/40-csharp.mdx index 3cfb14b21e..93f592fdd0 100644 --- a/docs/zh/14-reference/05-connector/40-csharp.mdx +++ b/docs/zh/14-reference/05-connector/40-csharp.mdx @@ -67,9 +67,13 @@ TDengine 其他功能模块的报错,请参考 [错误码](../../../reference/ | VARBINARY | byte[] | | GEOMETRY | byte[] | -:::note -JSON 类型仅在 tag 中支持。 -::: +**注意**:JSON 类型仅在 tag 中支持。 +GEOMETRY类型是 little endian 字节序的二进制数据,符合 WKB 规范。详细信息请参考 [数据类型](../../taos-sql/data-type/#数据类型) +WKB规范请参考[Well-Known Binary (WKB)](https://libgeos.org/specifications/wkb/) + +## 示例程序汇总 + +示例程序源码请参考:[示例程序](https://github.com/taosdata/taos-connector-dotnet/tree/3.0/examples) ## API 参考 From 925a1d287b8b026649133906d36d4341a862b508 Mon Sep 17 00:00:00 2001 From: tjuzyp Date: Thu, 19 Sep 2024 19:08:28 +0800 Subject: [PATCH 03/27] docs: datain mongodb --- docs/zh/06-advanced/05-data-in/17-mongodb.md | 131 ++++++++++++++++++ .../pic/Common-zh00-EnterDataSourcePage.png | Bin 0 -> 93573 bytes .../06-advanced/05-data-in/pic/mongodb-01.png | Bin 0 -> 13737 bytes .../06-advanced/05-data-in/pic/mongodb-02.png | Bin 0 -> 7529 bytes .../06-advanced/05-data-in/pic/mongodb-03.png | Bin 0 -> 13954 bytes .../06-advanced/05-data-in/pic/mongodb-04.png | Bin 0 -> 21821 bytes .../06-advanced/05-data-in/pic/mongodb-05.png | Bin 0 -> 38185 bytes .../06-advanced/05-data-in/pic/mongodb-06.png | Bin 0 -> 109686 bytes .../06-advanced/05-data-in/pic/mongodb-07.png | Bin 0 -> 12979 bytes 9 files changed, 131 insertions(+) create mode 100644 docs/zh/06-advanced/05-data-in/17-mongodb.md create mode 100644 docs/zh/06-advanced/05-data-in/pic/Common-zh00-EnterDataSourcePage.png create mode 100644 docs/zh/06-advanced/05-data-in/pic/mongodb-01.png create mode 100644 docs/zh/06-advanced/05-data-in/pic/mongodb-02.png create mode 100644 docs/zh/06-advanced/05-data-in/pic/mongodb-03.png create mode 100644 docs/zh/06-advanced/05-data-in/pic/mongodb-04.png create mode 100644 docs/zh/06-advanced/05-data-in/pic/mongodb-05.png create mode 100644 docs/zh/06-advanced/05-data-in/pic/mongodb-06.png create mode 100644 docs/zh/06-advanced/05-data-in/pic/mongodb-07.png diff --git a/docs/zh/06-advanced/05-data-in/17-mongodb.md b/docs/zh/06-advanced/05-data-in/17-mongodb.md new file mode 100644 index 0000000000..f62004bb6f --- /dev/null +++ b/docs/zh/06-advanced/05-data-in/17-mongodb.md @@ -0,0 +1,131 @@ +--- +title: "MongoDB" +sidebar_label: "MongoDB" +--- + +本节讲述如何通过 Explorer 界面创建数据迁移任务,从 MongoDB 迁移数据到当前 TDengine 集群。 + +## 功能概述 + +MongoDB 是一个介于关系型数据库与非关系型数据库之间的产品,被广泛应用于内容管理系统、移动应用与物联网等众多领域。从 TDengine 企业版 3.3.3.0 开始,TDengine 可以高效地从 MongoDB 读取数据并将其写入 TDengine,以实现历史数据迁移或实时数据同步,解决业务面临的技术痛点。 + +## 创建任务 + +### 1. 新增数据源 + +在数据写入页面中点击左上角的 **+新增数据源** 按钮进入新增数据源页面,如下图所示: + +![Common-zh00-EnterDataSourcePage.png](./pic/Common-zh00-EnterDataSourcePage.png "进入新增数据源页面") + +### 2. 配置基本信息 + +在 **名称** 字段中输入任务名称,例如 *`test_mongodb_01`* 。 + +选择 **类型** 下拉框中的 *`MongoDB`* ,如下图所示(选择完成后页面中的字段会发生变化)。 + +**代理** 是非必填项,如有需要,可以在下拉框中选择指定的代理,也可以先点击右侧的 **+创建新的代理** 按钮创建一个新的代理。 + +**目标数据库** 是必填项,可以在下拉框中选择指定的数据库,也可以先点击右侧的 **+创建数据库** 按钮创建一个新的数据库。 + +![mongodb-01.png](./pic/mongodb-01.png "选择数据源类型为 MongoDB") + +### 3. 配置连接信息 + +在 **连接配置** 区域填写 *`源 MongoDB 数据库的连接信息`*,如下图所示: + +![mongodb-02.png](./pic/mongodb-02.png "填写源 MongoDB 数据库的连接信息") + +### 4. 配置认证信息 + +**用户** 输入源 MongoDB 数据库的用户,该用户必须在 MongoDB 系统中拥有读取权限。 + +**密码** 输入源 MongoDB 数据库中上方用户的登陆密码。 + +**认证数据库** MongoDB 中存储用户信息的数据库,默认为 admin。 + +![mongodb-03.png](./pic/mongodb-03.png "配置认证信息") + +### 5. 配置连接选项 + +**应用名称** 设置应用程序名称,用于标识连接的应用程序。 + +**SSL 证书** 设置是否使用加密连接,默认关闭,如果开启,需要上传以下两个文件: + +  1. **CA 文件** 上传 SSL 加密的证书授权文件。 + +  2. **证书文件** 上传 SSL 加密的证书文件。 + +![ mongodb-04.png](./pic/mongodb-04.png "配置连接选项") + +然后点击 **检查连通性** 按钮,用户可以点击此按钮检查上方填写的信息是否可以正常获取源 MongoDB 数据库的数据。 + +### 6. 配置数据查询 + +**数据库** MongoDB 中源数据库,可以使用占位符进行动态配置,例如 database_${Y},可用占位符列表见下方表格。 + +**集合** MongoDB 中集合,可以使用占位符进行动态配置,例如 collection_${md},可用占位符列表见下方表格。 + +|占位符|描述|示例数据| +|-|-|-| +|Y|完整的公历年表示,零填充的 4 位整数|2024| +|y|公历年除以 100,零填充的 2 位整数|24| +|M|整数月份(1 - 12)|1| +|m|整数月份(01 - 12)|01| +|B|月份英文全拼|January| +|b|月份英文的缩写(3 个字母)|Jan| +|D|日期的数字表示(1 - 31)|1| +|d|日期的数字表示(01 - 31)|01| +|J|一年中的第几天(1 - 366)|1| +|j|一年中的第几天(001 - 366)|001| +|F|相当于 ${Y}-${m}-${d}|2024-01-01| + +**子表字段** 用于拆分子表的字段,通常与 transform 中的 tag 相对应,多个字段使用英文逗号分隔,例如 col_name1,col_name2。 + +**查询模板** 用于查询数据的查询语句,JSON格式,语句中必须包含时间范围条件,且开始时间和结束时间必须成对出现。模板中定义的时间范围由源数据库中的某个代表时间的列和下面定义的占位符组成。 +> 使用不同的占位符表示不同的时间格式要求,具体有以下占位符格式: +> 1. `${start_datetime}`、`${end_datetime}`:对应后端 datetime 类型字段的筛选,如:`{"ddate":{"$gte":${start_datetime},"$lt":${end_datetime}}}` 将被转换为 `{"ddate":{"$gte":{"$date":"2024-06-01T00:00:00+00:00"},"$lt":{"$date":"2024-07-01T00:00:00+00:00"}}}` +> 2. `${start_timestamp}`、`${end_timestamp}`: 对应后端 timestamp 类型字段的筛选,如:`{"ttime":{"$gte":${start_timestamp},"$lt":${end_timestamp}}}` 将被转换为 `{"ttime":{"$gte":{"$timestamp":{"t":123,"i":456}},"$lt":{"$timestamp":{"t":123,"i":456}}}}` + +**查询排序** 执行查询时的排序条件,JSON格式,它必须符合 MongoDB 排序条件的格式规范,使用示例如下: +> 1. `{"createtime":1}`:MongoDB 查询结果按 createtime 正序返回。 +> 2. `{"createdate":1, "createtime":1}`:MongoDB 查询结果按 createdate 正序、createtime 正序返回。 + +**起始时间** 迁移数据的起始时间,此项为必填字段。 + +**结束时间** 迁移数据的结束时间,可留空。如果设置,则迁移任务执行到结束时间后,任务完成自动停止;如果留空,则持续同步实时数据,任务不会自动停止。 + +**查询间隔** 分段查询数据的时间间隔,默认1天。为了避免查询数据量过大,一次数据同步子任务会使用查询间隔分时间段查询数据。 + +**延迟时长** 实时同步数据场景中,为了避免延迟写入的数据丢失,每次同步任务会读取延迟时长之前的数据。 + +![ mongodb-05.png](./pic/mongodb-05.png "配置数据查询") + +### 7. 配置数据映射 + +在 **Payload 转换** 区域填写数据映射相关的配置参数。 + +点击 **从服务器检索** 按钮,从 MongoDB 服务器获取示例数据。 + +在 **解析** 中选择 JSON/Regex/UDT 三种规则解析原始消息体,配置完成后点击右侧的 **预览** 按钮可以查看解析的结果。 + +在 **从列中提取或拆分** 中填写从消息体中提取或拆分的字段,例如:将 vValue 字段拆分成 `vValue_0` 和 `vValue_1` 这 2 个字段,选择 split 提取器,seperator 填写分割符 `,`, number 填写 2,配置完成后点击右侧的 **预览** 按钮可以查看转换的结果。 + +在 **过滤** 中,填写过滤条件,例如:填写`Value > 0`,则只有 Value 大于 0 的数据才会被写入 TDengine,配置完成后点击右侧的 **预览** 按钮可以查看过滤的结果。 + +在 **映射** 中,选择要映射到 TDengine 的超级表,以及映射到超级表的列,配置完成后点击右侧的 **预览** 按钮可以查看映射的结果。 + +![mongodb-06.png](pic/mongodb-06.png) + +### 8. 配置高级选项 + +**高级选项** 区域是默认折叠的,点击右侧 `>` 可以展开,如下图所示: + +**最大读取并发数** 数据源连接数或读取线程数限制,当默认参数不满足需要或需要调整资源使用量时修改此参数。 + +**批次大小** 单次发送的最大消息数或行数。默认是 10000。 + +![mongodb-07.png](pic/mongodb-07.png) + +### 9. 创建完成 + +点击 **提交** 按钮,完成创建 MongoDB 到 TDengine 的数据同步任务,回到**数据源列表**页面可查看任务执行情况。 diff --git a/docs/zh/06-advanced/05-data-in/pic/Common-zh00-EnterDataSourcePage.png b/docs/zh/06-advanced/05-data-in/pic/Common-zh00-EnterDataSourcePage.png new file mode 100644 index 0000000000000000000000000000000000000000..04fa06ce7322d3fc04539ba265a9d601e646cd59 GIT binary patch literal 93573 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 ofKCIa6m28_7w3i2>Hq)$ literal 0 HcmV?d00001 diff --git a/docs/zh/06-advanced/05-data-in/pic/mongodb-04.png b/docs/zh/06-advanced/05-data-in/pic/mongodb-04.png new file mode 100644 index 0000000000000000000000000000000000000000..55b4a718d9f517cc4214187519db7fc435df7c7a GIT binary patch literal 21821 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

G1?-Kzs@=(8 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 Sxd(iSmmy~#wcn4 literal 0 HcmV?d00001 From da2bcb505b3e522986b6143b6847ac01da80d7a5 Mon Sep 17 00:00:00 2001 From: tjuzyp Date: Thu, 19 Sep 2024 19:24:02 +0800 Subject: [PATCH 04/27] docs: add instructions for sequential reading --- docs/zh/06-advanced/05-data-in/17-mongodb.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/zh/06-advanced/05-data-in/17-mongodb.md b/docs/zh/06-advanced/05-data-in/17-mongodb.md index f62004bb6f..860184df90 100644 --- a/docs/zh/06-advanced/05-data-in/17-mongodb.md +++ b/docs/zh/06-advanced/05-data-in/17-mongodb.md @@ -80,6 +80,10 @@ MongoDB 是一个介于关系型数据库与非关系型数据库之间的产品 |F|相当于 ${Y}-${m}-${d}|2024-01-01| **子表字段** 用于拆分子表的字段,通常与 transform 中的 tag 相对应,多个字段使用英文逗号分隔,例如 col_name1,col_name2。 +> 此项配置主要为了解决数据迁移乱序问题,需要结合**查询模板**共同使用,否则不能达到预期效果,使用示例如下: +> 1. 配置两个子表字段``col_name1,col_name2` +> 2. 在**查询模板**中添加子表字段占位符,例如 `{"ddate":{"$gte":${start_datetime},"$lt":${end_datetime}}, ${col_name1}, ${col_name2}}` 中的 `${col_name1}, ${col_name2}` 部分 +> 3. 在 **transform** 中配置 `col_name1` 与 `col_name2` 两个 tag 映射 **查询模板** 用于查询数据的查询语句,JSON格式,语句中必须包含时间范围条件,且开始时间和结束时间必须成对出现。模板中定义的时间范围由源数据库中的某个代表时间的列和下面定义的占位符组成。 > 使用不同的占位符表示不同的时间格式要求,具体有以下占位符格式: From ecf35945f615d37e7f0afa90cb0eccd703277138 Mon Sep 17 00:00:00 2001 From: tjuzyp Date: Thu, 19 Sep 2024 19:46:11 +0800 Subject: [PATCH 05/27] docs: add instructions for sequential reading --- docs/zh/06-advanced/05-data-in/09-influxdb.md | 2 +- docs/zh/06-advanced/05-data-in/10-opentsdb.md | 2 +- docs/zh/06-advanced/05-data-in/13-mysql.md | 10 +++++++++- docs/zh/06-advanced/05-data-in/14-postgres.md | 10 +++++++++- docs/zh/06-advanced/05-data-in/15-oracle.md | 10 +++++++++- docs/zh/06-advanced/05-data-in/16-mssql.md | 10 +++++++++- .../pic/InfluxDB-01zh-EnterDataSourcePage.png | Bin 32308 -> 0 bytes .../pic/OpenTSDB-01zh-EnterDataSourcePage.png | Bin 32308 -> 0 bytes .../pic/Oracle-01zh-EnterDataSourcePage.png | Bin 32308 -> 0 bytes .../PostgreSQL-01zh-EnterDataSourcePage.png | Bin 32308 -> 0 bytes .../06-advanced/05-data-in/pic/mssql-05.png | Bin 22216 -> 31087 bytes .../06-advanced/05-data-in/pic/mysql-05.png | Bin 22398 -> 31214 bytes .../06-advanced/05-data-in/pic/oracle-04.png | Bin 22398 -> 30832 bytes .../05-data-in/pic/postgres-05.png | Bin 22398 -> 31413 bytes 14 files changed, 38 insertions(+), 6 deletions(-) delete mode 100644 docs/zh/06-advanced/05-data-in/pic/InfluxDB-01zh-EnterDataSourcePage.png delete mode 100644 docs/zh/06-advanced/05-data-in/pic/OpenTSDB-01zh-EnterDataSourcePage.png delete mode 100644 docs/zh/06-advanced/05-data-in/pic/Oracle-01zh-EnterDataSourcePage.png delete mode 100644 docs/zh/06-advanced/05-data-in/pic/PostgreSQL-01zh-EnterDataSourcePage.png diff --git a/docs/zh/06-advanced/05-data-in/09-influxdb.md b/docs/zh/06-advanced/05-data-in/09-influxdb.md index 3be24c8d5f..d0b781667d 100644 --- a/docs/zh/06-advanced/05-data-in/09-influxdb.md +++ b/docs/zh/06-advanced/05-data-in/09-influxdb.md @@ -17,7 +17,7 @@ InfluxDB 是一种流行的开源时间序列数据库,它针对处理大量 在数据写入页面中点击左上角的 **+新增数据源** 按钮进入新增数据源页面,如下图所示: -![InfluxDB-01zh-EnterDataSourcePage.png](./pic/InfluxDB-01zh-EnterDataSourcePage.png "进入新增数据源页面") +![Common-zh00-EnterDataSourcePage.png](./pic/Common-zh00-EnterDataSourcePage.png "进入新增数据源页面") ### 2. 配置基本信息 diff --git a/docs/zh/06-advanced/05-data-in/10-opentsdb.md b/docs/zh/06-advanced/05-data-in/10-opentsdb.md index e7f804f86f..3737f2a415 100644 --- a/docs/zh/06-advanced/05-data-in/10-opentsdb.md +++ b/docs/zh/06-advanced/05-data-in/10-opentsdb.md @@ -17,7 +17,7 @@ OpenTSDB 是一个架构在 HBase 系统之上的实时监控信息收集和展 在数据写入页面中点击左上角的 **+新增数据源** 按钮进入新增数据源页面,如下图所示: -![OpenTSDB-01zh-EnterDataSourcePage.png](./pic/OpenTSDB-01zh-EnterDataSourcePage.png "进入新增数据源页面") +![Common-zh00-EnterDataSourcePage.png](./pic/Common-zh00-EnterDataSourcePage.png "进入新增数据源页面") ### 2. 配置基本信息 diff --git a/docs/zh/06-advanced/05-data-in/13-mysql.md b/docs/zh/06-advanced/05-data-in/13-mysql.md index 14b015d67a..4cc84fbfa2 100644 --- a/docs/zh/06-advanced/05-data-in/13-mysql.md +++ b/docs/zh/06-advanced/05-data-in/13-mysql.md @@ -15,7 +15,7 @@ MySQL 是最流行的关系型数据库之一。很多系统都曾经或正在 在数据写入页面中点击左上角的 **+新增数据源** 按钮进入新增数据源页面,如下图所示: -![InfluxDB-01zh-EnterDataSourcePage.png](./pic/InfluxDB-01zh-EnterDataSourcePage.png "进入新增数据源页面") +![Common-zh00-EnterDataSourcePage.png](./pic/Common-zh00-EnterDataSourcePage.png "进入新增数据源页面") ### 2. 配置基本信息 @@ -56,11 +56,19 @@ MySQL 是最流行的关系型数据库之一。很多系统都曾经或正在 ### 6. 配置 SQL 查询 +**子表字段** 用于拆分子表的字段,它是一条 select distinct 的 SQL 语句,查询指定字段组合的非重复项,通常与 transform 中的 tag 相对应: +> 此项配置主要为了解决数据迁移乱序问题,需要结合**SQL 模板**共同使用,否则不能达到预期效果,使用示例如下: +> 1. 子表字段填写语句 `select distinct col_name1, col_name2 from table`,它表示使用源表中的字段 col_name1 与 col_name2 拆分目标超级表的子表 +> 2. 在**SQL 模板**中添加子表字段占位符,例如 `select * from table where ts >= ${start} and ts < ${end} and ${col_name1} and ${col_name2}` 中的 `${col_name1} and ${col_name2}` 部分 +> 3. 在 **transform** 中配置 `col_name1` 与 `col_name2` 两个 tag 映射 + **SQL 模板** 用于查询的 SQL 语句模板,SQL 语句中必须包含时间范围条件,且开始时间和结束时间必须成对出现。SQL 语句模板中定义的时间范围由源数据库中的某个代表时间的列和下面定义的占位符组成。 > SQL使用不同的占位符表示不同的时间格式要求,具体有以下占位符格式: > 1. `${start}`、`${end}`:表示 RFC3339 格式时间戳,如: 2024-03-14T08:00:00+0800 > 2. `${start_no_tz}`、`${end_no_tz}`: 表示不带时区的 RFC3339 字符串:2024-03-14T08:00:00 > 3. `${start_date}`、`${end_date}`:表示仅日期,如:2024-03-14 +> +> 为了解决迁移数据乱序的问题,应在查询语句中添加排序条件,例如 `order by ts asc`。 **起始时间** 迁移数据的起始时间,此项为必填字段。 diff --git a/docs/zh/06-advanced/05-data-in/14-postgres.md b/docs/zh/06-advanced/05-data-in/14-postgres.md index cf86ab6ee3..af8297bfff 100644 --- a/docs/zh/06-advanced/05-data-in/14-postgres.md +++ b/docs/zh/06-advanced/05-data-in/14-postgres.md @@ -17,7 +17,7 @@ TDengine 可以高效地从 PostgreSQL 读取数据并将其写入 TDengine, 在数据写入页面中点击左上角的 **+新增数据源** 按钮进入新增数据源页面,如下图所示: -![PostgreSQL-01zh-EnterDataSourcePage.png](./pic/PostgreSQL-01zh-EnterDataSourcePage.png "进入新增数据源页面") +![Common-zh00-EnterDataSourcePage.png](./pic/Common-zh00-EnterDataSourcePage.png "进入新增数据源页面") ### 2. 配置基本信息 @@ -57,11 +57,19 @@ TDengine 可以高效地从 PostgreSQL 读取数据并将其写入 TDengine, ### 6. 配置 SQL 查询 +**子表字段** 用于拆分子表的字段,它是一条 select distinct 的 SQL 语句,查询指定字段组合的非重复项,通常与 transform 中的 tag 相对应: +> 此项配置主要为了解决数据迁移乱序问题,需要结合**SQL 模板**共同使用,否则不能达到预期效果,使用示例如下: +> 1. 子表字段填写语句 `select distinct col_name1, col_name2 from table`,它表示使用源表中的字段 col_name1 与 col_name2 拆分目标超级表的子表 +> 2. 在**SQL 模板**中添加子表字段占位符,例如 `select * from table where ts >= ${start} and ts < ${end} and ${col_name1} and ${col_name2}` 中的 `${col_name1} and ${col_name2}` 部分 +> 3. 在 **transform** 中配置 `col_name1` 与 `col_name2` 两个 tag 映射 + **SQL 模板** 用于查询的 SQL 语句模板,SQL 语句中必须包含时间范围条件,且开始时间和结束时间必须成对出现。SQL 语句模板中定义的时间范围由源数据库中的某个代表时间的列和下面定义的占位符组成。 > SQL使用不同的占位符表示不同的时间格式要求,具体有以下占位符格式: > 1. `${start}`、`${end}`:表示 RFC3339 格式时间戳,如: 2024-03-14T08:00:00+0800 > 2. `${start_no_tz}`、`${end_no_tz}`: 表示不带时区的 RFC3339 字符串:2024-03-14T08:00:00 > 3. `${start_date}`、`${end_date}`:表示仅日期,如:2024-03-14 +> +> 为了解决迁移数据乱序的问题,应在查询语句中添加排序条件,例如 `order by ts asc`。 **起始时间** 迁移数据的起始时间,此项为必填字段。 diff --git a/docs/zh/06-advanced/05-data-in/15-oracle.md b/docs/zh/06-advanced/05-data-in/15-oracle.md index c99f6aae47..39bbab32d3 100644 --- a/docs/zh/06-advanced/05-data-in/15-oracle.md +++ b/docs/zh/06-advanced/05-data-in/15-oracle.md @@ -17,7 +17,7 @@ TDengine 可以高效地从 Oracle 读取数据并将其写入 TDengine,以实 在数据写入页面中点击左上角的 **+新增数据源** 按钮进入新增数据源页面,如下图所示: -![Oracle-01zh-EnterDataSourcePage.png](./pic/Oracle-01zh-EnterDataSourcePage.png "进入新增数据源页面") +![Common-zh00-EnterDataSourcePage.png](./pic/Common-zh00-EnterDataSourcePage.png "进入新增数据源页面") ### 2. 配置基本信息 @@ -49,11 +49,19 @@ TDengine 可以高效地从 Oracle 读取数据并将其写入 TDengine,以实 ### 5. 配置 SQL 查询 +**子表字段** 用于拆分子表的字段,它是一条 select distinct 的 SQL 语句,查询指定字段组合的非重复项,通常与 transform 中的 tag 相对应: +> 此项配置主要为了解决数据迁移乱序问题,需要结合**SQL 模板**共同使用,否则不能达到预期效果,使用示例如下: +> 1. 子表字段填写语句 `select distinct col_name1, col_name2 from table`,它表示使用源表中的字段 col_name1 与 col_name2 拆分目标超级表的子表 +> 2. 在**SQL 模板**中添加子表字段占位符,例如 `select * from table where ts >= ${start} and ts < ${end} and ${col_name1} and ${col_name2}` 中的 `${col_name1} and ${col_name2}` 部分 +> 3. 在 **transform** 中配置 `col_name1` 与 `col_name2` 两个 tag 映射 + **SQL 模板** 用于查询的 SQL 语句模板,SQL 语句中必须包含时间范围条件,且开始时间和结束时间必须成对出现。SQL 语句模板中定义的时间范围由源数据库中的某个代表时间的列和下面定义的占位符组成。 > SQL使用不同的占位符表示不同的时间格式要求,具体有以下占位符格式: > 1. `${start}`、`${end}`:表示 RFC3339 格式时间戳,如: 2024-03-14T08:00:00+0800 > 2. `${start_no_tz}`、`${end_no_tz}`: 表示不带时区的 RFC3339 字符串:2024-03-14T08:00:00 > 3. `${start_date}`、`${end_date}`:表示仅日期,但 Oracle 中没有纯日期类型,所以它会带零时零分零秒,如:2024-03-14 00:00:00,所以使用 `date <= ${end_date}` 时需要注意,它不能包含 2024-03-14 当天数据 +> +> 为了解决迁移数据乱序的问题,应在查询语句中添加排序条件,例如 `order by ts asc`。 **起始时间** 迁移数据的起始时间,此项为必填字段。 diff --git a/docs/zh/06-advanced/05-data-in/16-mssql.md b/docs/zh/06-advanced/05-data-in/16-mssql.md index ba5451434d..81e9e98013 100644 --- a/docs/zh/06-advanced/05-data-in/16-mssql.md +++ b/docs/zh/06-advanced/05-data-in/16-mssql.md @@ -15,7 +15,7 @@ Microsoft SQL Server 是最流行的关系型数据库之一。很多系统都 在数据写入页面中点击左上角的 **+新增数据源** 按钮进入新增数据源页面,如下图所示: -![InfluxDB-01zh-EnterDataSourcePage.png](./pic/InfluxDB-01zh-EnterDataSourcePage.png "进入新增数据源页面") +![Common-zh00-EnterDataSourcePage.png](./pic/Common-zh00-EnterDataSourcePage.png "进入新增数据源页面") ### 2. 配置基本信息 @@ -61,6 +61,12 @@ Microsoft SQL Server 是最流行的关系型数据库之一。很多系统都 ### 6. 配置 SQL 查询 +**子表字段** 用于拆分子表的字段,它是一条 select distinct 的 SQL 语句,查询指定字段组合的非重复项,通常与 transform 中的 tag 相对应: +> 此项配置主要为了解决数据迁移乱序问题,需要结合**SQL 模板**共同使用,否则不能达到预期效果,使用示例如下: +> 1. 子表字段填写语句 `select distinct col_name1, col_name2 from table`,它表示使用源表中的字段 col_name1 与 col_name2 拆分目标超级表的子表 +> 2. 在**SQL 模板**中添加子表字段占位符,例如 `select * from table where ts >= ${start} and ts < ${end} and ${col_name1} and ${col_name2}` 中的 `${col_name1} and ${col_name2}` 部分 +> 3. 在 **transform** 中配置 `col_name1` 与 `col_name2` 两个 tag 映射 + **SQL 模板** 用于查询的 SQL 语句模板,SQL 语句中必须包含时间范围条件,且开始时间和结束时间必须成对出现。SQL 语句模板中定义的时间范围由源数据库中的某个代表时间的列和下面定义的占位符组成。 > SQL使用不同的占位符表示不同的时间格式要求,具体有以下占位符格式: > 1. `${start}`、`${end}`:表示 RFC3339 格式时间戳,如: 2024-03-14T08:00:00+0800 @@ -68,6 +74,8 @@ Microsoft SQL Server 是最流行的关系型数据库之一。很多系统都 > 3. `${start_date}`、`${end_date}`:表示仅日期,如:2024-03-14 > > 注意:只有 `datetime2` 与 `datetimeoffset` 支持使用 start/end 查询,`datetime` 与 `smalldatetime` 只能使用 start_no_tz/end_no_tz 查询,而 `timestamp` 不能用作查询条件。 +> +> 为了解决迁移数据乱序的问题,应在查询语句中添加排序条件,例如 `order by ts asc`。 **起始时间** 迁移数据的起始时间,此项为必填字段。 diff --git a/docs/zh/06-advanced/05-data-in/pic/InfluxDB-01zh-EnterDataSourcePage.png b/docs/zh/06-advanced/05-data-in/pic/InfluxDB-01zh-EnterDataSourcePage.png deleted file mode 100644 index ca8107066f81d25252033636186f40ded9edec43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32308 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 z 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 K+c>3rkNyY2fxn>u diff --git a/docs/zh/06-advanced/05-data-in/pic/OpenTSDB-01zh-EnterDataSourcePage.png b/docs/zh/06-advanced/05-data-in/pic/OpenTSDB-01zh-EnterDataSourcePage.png deleted file mode 100644 index ca8107066f81d25252033636186f40ded9edec43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32308 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 z zFgs~4x0bQ7528%EUQt@XAg0NmHkyBt&kCWwx?y7MJwiS5F|{}q_EEK*jZEJ+9-LKk zFP;%^7;@(f9puH7*EQ`M>Q)F*BQt`6#J)Tj?yJ}iu}FBBME-UKCw*g?V#?rXMv4@@ zUHd96DmyXux|p%hA0ndy!?n(<`RFCcLQe_xEOk*Uqd2$mOa`gOY*j}tVX`>KELA2QP1NS`IE}cuLv^FT$NBVPAkHH8Zh+YrQ(82g8A1G zHK&Xd@jNQT%hDx9nZMp_iI#h;aGv$i5V}=`; z+`01zAC70nMam1Eo$a&+8pD@jo@FSEpI96tR(`h;uv<8j0}*OveBv@hs`J;WK=ZJP z2%Y5%(9oJu{S?u)zQq1{DUl=SjSbBxSp1nT2@qDuN5zSegEdP9ZgDIwf%#zZlD508 z>^uFs0Q}XHn)XRQTU={yrUvo4@hw#NqwW;zT98^3s5j^$N*KjG^fB!9yG`Qlf%R|f z=B(Pyq4S=5eRpzmSvgWS5vDS)I zZ~?dRcGZY)Ne)7?oiXp;`+}0u26WNw1^t3eraJm4i{l5=u5VwH4fh*BVrlnOcsxGG zYBgG;&BdO`~DNrY6kmJ!_wD%Bt6a z&bdG>YIDXI-Q1StDdhgjI>;9iaCzp6Z12Y{IF`JTJQ^#^s6R%%%`))Pp_fuXK{9?k z!nVW92zWMFz0uiUX0IjexNCuO9;hs#v;St|$|q0tFY>B*`E|k99tYZ7MYJGUk^G*_MEZD;|^F!<(Sj~a;sM`ILXprD7K3QSmQ#^mV);t(XM7%-0 z`l3O*Je>Q-m;MWa7-2X2qh^bKuRi!V3g?ZTD|2~8H#>+!bQV7!x55%nFujEtHon-F zbI;E`@g~{WuPwEhrnwa^?OkO|j-PV!l8F-TiaR7`;aHj;@Ix#F8_$RsQ?A{l_V1-7 zhBH|tS*)wNwPsQIJ?_1ejAMQWSBSaz5NGMWT`*Luq{Vs-Jz{$V&%lby8T0E@C|?rD-CIfU%glz zO0e3I7P})9q4}s)pc&Qpgii{Yh&J_n0HtmfysP8t8|j3h&CS*XiwOpl3)n8onSn|*qECa$5}=UKcXy-rxL5Ju3eIwO4uRKSWBh`CS2+^4$-oqn8iep>y(r$)UmUN*45f|+j9&VgC*!9Zwl#FQ>0e3 z=N=Um8-enUfFF)81s~{sV$`d9laIrbS%)7ie9O=M#IXQ9(cbX}XHqe*S$6QZ;s@QfP)(Ax)h; zhcE28+SO@hU_kMThl2XWHaoBpwQbk9ZN$zk9f>kf9x!?DGjDpDQt0O!B7Bw4AEmA7 zBY_idLK|k6Ts8o@o#DtF-9J+yKvnsf)oHkbT-mWdFYnecDkr0v9GlxxJ%fL+41S%X+~ma&dHkS#Hbj_0W5N{3+UX?8Us`!6+S}xA}@_ z;4*A7xNlPT{tdz4!Yv_Dv$Ey{WLuYZ>*gVL9TRW-{z_=${0&Ht&F(mZiU)V9Gc((p zW4P2Y8Ha->GL<6&I!krVSW^e6&Ut!M-0*|RZHxU;j0PqNfbqc0EkhyWYf1wzT9EZ0 zB$I4XR|NGe02T~B`GTI!AWn5-sn8{P?Ws#i<~#9KCvSV$1RJ-y`?}%C zCCw!+%MbQOW>rImjIweXwVgbY>{mqFTn-}gZp8NCY>vC9onUT;*`jg_WFDoBcRA15 zTlKCMvrT#}fSVecZ-;N@Tbd;5ndi1tqDcY8u5#tDqkpzC=c02bO}q~5Gn$9I{2ne% zRMZRskQ;1??GLC&dYU#?1_tY2ZC{h(*95@w`dEy^&W^E=Qh`=XfK}1LirdlgxG?pB z&X|wvHeOnuKx|JcOy|S;o z@v?SJpV3VTX%TqkdwwBukD@Z5%PU_(XcAT`&D0qF(PmFz! z#v!6=WwKiANRxx8?HLzrVeI+zgyjN9*w}|lt|&itxtR8QY(7>f<1s65E>4N zCk&#z^2Y^t!MyD`!)+U)lo}x4vYNUu`Y6xIy>QWUQJku&cChn}z{gC1C`&0DX1!^Y z5SLY!EPFGRtyo6ExP!xKVtiA)GqYme4UX=I!^Qk|jO)uoZbe`0>I>@y+{e>J=wT;e zzGa(!N>9$F;x@t|ANz-34h4&EuuaGAvlX8eD>Q83`(=Y+hTn8i4(EN>Q-;1io9?(1J2f8K#4krxM zATce5g$@x?BNg9NYXg_6hei@JB%m~wX`%i5ULC8;Z$rWds!dc7NzJIOIJ<$sU_aB2 ztp-Umt+q|4lE={^$>?aTmxjuw-&;MD=sV-N$%aRj9=v;?280P*(u`XYiX(wjFAG!* zIQn}VD^r|mydPT_u%=*?7og-0sp>YSuLTzLj&>SM+W<~&+g3@d#*S6HHU;xsHz{2-7-F( zxQ>62UQRBr{o{W2*@{TL4;6mgx5dthjt}UAoXH_9QFt!EG4*BD*MhS>bE>e9(ovSl z3&+vZhffYvIy&|>X^8N@?Q{RyPT`e+<&>u=3UX;a!(53i+rIc-*42n6AmE*C?RM4F zet$KhynbJ;yu=Q?(m+dfVyAkJx9-sNw?TAJHo#OX3*qM+=nd%4`vF)9Az8aQW~@oVG54*sA{ z5uqAW>uQ*#aeiu<3U`Fwm*EHpWQjfLQ2+6)!+y^?p(}@i48Hd(?Jz{fAB@{Z>_Hkf z>MzwFu+keQCtyp`r`=qWd#~`kpQCwjH&vYAD{n+$_(Y#e)I`|_QEiDTJh$TsdZj`q z^U$=TxmdRq>Fb3^v|K|%%R4S)TO9$)cwJY7Gr{9ckFFPK-qH^C$R)>P^~mOymiGIB zE6V+ygNL_amY)5b=vp7bx#UN~UkMxK={;GT9sRZGz{CXKeAaRQbG>X;5*2=Sy9K$r z(|YCkxu(r_=*p0nw)2gnPQ=5ACk55cm2)1ayyK!Ja~$H**&U&6rd8fhq{R{ALXXyk zxy)*JNyS#X%tr(xOq8&+U6pP9<(Sog`+?nvm5m7gOEo5(@srhHp3Ax~T$6VFGrZK~ zorK-hLBOaJ~0On-&Z^^Xgd3be`SHd0oxAX{!^A(yM21m*fYAc0I!(I_WX% z^dwK)wo7&FUks?R9UjRv$6lAFEQ@g7n%<3Y6ljbP&=tg<|t>C*}&k@&3JHB2$n`uS zg!f9GyKcX(Of$;my{nv5DFl7mh}V_S7SV~!P`flbMw0wN?>2lWJeQzWN=H%{s{ke8 zB0R{;)^}J%x9p#M<{^ZC1Az>+4by(g2aVvPpk-H;4;M7Ly$Owz6tWgEDc!jqK(oT` zIisyVgD9K&LQJ%7{cb8;%2m@MJEDAIrsR?y6wlx=|1Y{y&p)y&5IFuH z(tL(Te+qs(v#O?E4F706ifH$-pr9por4+C^c~*DyyYfH#SiAK8Ed~D{den(^>Sc2U zT=&7q*3nQa;Td-Q!D>|^X};#j9%}s|j{Vn}E}*Z=p8<85pg>k)Zug*Xs?%YKW?HSbBF!VPb|XeEr&qA}=znY`XxGoH#@?wiWfjg>9c zPx#yu9lDEmOyKrOu9$N@A#e(c(yzPBZP#~2b>Hn_t{_V5qreP5u277q_LmW3UYKwG zzCycsnFeBW%QNcN@k2n!&ON>2nRH*(%m_1uTob*zAkuc74Bk4`f00dup>JEI!m6?T za6U|>+)tyPWPLDxKTM4+_oft2PJ@fG%QHYer|P;vJNcu}8@7CVnX#+&jL<;slRWL> z+xhRiOn+BzN&$ifz>noXEu*FVj`vl_>(J+SBXfefy`AT9BK@VzY#^I|KxZ49qPaFH z>H}$MK8B+}3A|Lw(sfvfUq9t&UEWTygyDHcpbR|x`szpp^1_Q}fWb^-7axy#lUVJ_ zkppg?OdsPFx5?1OUotfnRoYvi*I}3kW=5cra6PBseA-ris9vCHS;i%Qy@w?*Fd&}P z*!Mg!Yl7x2Kov7{(oQv(dG_lY+QDEnTcoQVu5ro^eII zdEl&Zn7W2es>ewK>G6+u>HAy6xs|zpd0~Ni8#x0k4HJN&`fWx7>(fBETEzMGII%$F zdH|?XEL1ZQMS;v@21y}uS_u3l{n(kupBZJrCXxAs#Pk!G{a@ZR;`?;_|*k`7Hnd&cX)EI-YPBE5b8e--&_DR*l375%1_aSUt8xHV*v^lJe+5> zMePJhw_+cQvR@yymI-?uc@1|^1zN)$hfw9Sd7B8tt zYyhJ0{@y2XurW{E*J-piHbmdk8v%i&`mwriJ4ud!j^q@#hacY zGqdi+c26V50>acZUbrg{ru-1SW{7UCYxrdhGH2cXeWb$A(j&XP84j3xB-mE09Tl=E z4wZW!;Fzxp5_b_@%k+KxK*WP_e948nWsCD}At{c)6TVd$?sw=?q}49!rEck=^XyWF zol-I!bt{Z?q4qN16i5GYxv9|My!MXu!v_8Hb+&!~nm?i$C%k1;Jw`U^N3(P`S$Hkd zhwZ{yETM!UylBPePE0{rY=BjsZf}&gqmPM)vdZTGmID)oy!pXtn7Lham|8@&Z`sh8 z=Af+9+_2ci8AbcTe|nj zkGNR6^z!%#(JOCDHS8ATL&S|j5EH<@4Z=JbcrrZz*jG7RB|12nzPRXZZ z@v7Xgx(2;oGq3HJTOQ>$Q0O9fMz;tlzmdoi{h6t})$}C-B_C@CK#R7l2JxQs?8VQE zRwFU--wIw0I{gG0O$M=~k?dO)u^ai<&E*k0(zj!H?y`t>h-~0{ordiNFWNM|lMmWl z3A$+^wmh--X&9c#J%(U;d}c|tu%P#Vem6eFnUHo`10nSD^_)TM?`CL5&)hmXe;|8i z>a{&;@v7W+MZJ}s_M3YfkH43sNz-S2g;A`H&tDAW?8T;vea@d9;Q~Ibk`rbTVPlll zB$uPRn0^1QLg2_TugUXw@1z{z9}&9eU>ZJsU$w(E-HGBXl!@?c*N-3nB4@$zQBYQk z>{6X}@Keek*Snl699=|>N#;jzL#)UivuOWWi1ltX;W6~}P3`A^iWBBSP*Gx@en`>2ul6`aOy+so6Z&_Gw>85-3XHqERw=tEn$(G^107?N42=`+T-Bu2<760QJvO2(*$$O2B zFx{dgD`!kTU*CYK6~fs}-ZnLT&R3VbX_|$19SpGAuPzR~M+h({hz>cxu;-9un^3w5 zI+D*$_75yJjzpAFb9Lw*PS)?h?kQ7RqS%HDT!YkBZhoX2P2ODq72?sqon7MtXGHba z11#qvtt5CI9W*lc%hgz9Z*-BY+uIu#3JM3L8H&5l*F>>DKiO@r8pXdp6@zk~w!Z`Y z0XtaW-667nOJ><8!P9B1jv8#X8f@q9Pk{J7lfNu0QwxJr(43+HFqBDrXpEv17$>9? zkWYx&fr=UQEN3V!qiX1Mp*MqECk|bqOr4VqOs{e4%PeH+Zo)B_6o1)>UNlDt7^BUE zo0H{Sxtee6+4ypvf~znYsKf3EQ9ykK^#;{@U1(v z5!m4nN~TmKtXH3JZ^8zj|LKH7u@GJoBCKh8bGJU7VUkHUmhsj0bq_VG75{{jD+|F2 zx&`f95^&XaeqbJ|dkH3!1iaw~b(F_>DQNrmre@Uho9B{`tF&zitaqkYV&zb}2}dG& zp8ru$@pc^*d2>w%j(;sEOOH}~j8`F>ld_I9`ffO=(Yn0bpbdN7ffay=dF+}uHWZH3 zLXx)Llw%)B+>SB6!F-LSMOr{PTi+nXk)~(x9VFtr{3VKqBq%-j?{nSV^F3iJ1B{3T zqV=id*NS7S*UXE#`UgxC%*PZ9rVDrFL~fyah1A(aHP!5?9YVJ19Kh+#Ir&OsE{+rS zY>^%Tqe!feHKmDNdw&~t6hje6S|?IBTl^5DcOL!;2AcYX01`A$&?qL%sL@ z>oKmKkrEaOUKmz?dqOO}`-O{!zE3|oqLTooS6zz)pv};t7 zaylNL>ZWl(ZT-Am_3zuM(K-!|YDjN1ohGAe8;7K-WmWXRhX9k$`RV{d{>*a$|jYO=K5jQa#G5`YrXk)x6WDs z1*A-hT9GDiPyi6zJOIov=OQJ*5IiSle~$;Ky`A*t9(+5{bAuP*7jEn#~ubuRs*_*d3n2U6TGa#^5Z6sT+dHScfDVfKnH$MCkr@CxvYK zpuuJpi;cFN)fQ>3NKe~-6Xzn6pPEX7|9K#R0%K9l(laXgrBD5xHNL;OIy#&Bq51L> zXL-`!J}BV-14gQ7uF&XhfO{`Zk704OOQ%=T!Gk^Po)98`1}YAa`dCCn%aQ4aolmT^ zNT~j5Ur;*WDHMI5vhz}HI#>ouGB%{EitIciVRGR7zqVr`QFYDIE^>0GG5^ z3tYTe!bS3%tcsVFDY(^oAt~{d|1(^hnwz?6oJBM-b>MJijug)xPVVt<$lYbJquvCh z0UQvep&%wG@&H=g0E`!fYlIe#0D+ov$^C(ACP+8>dC-0K)GLucCV>}S30TaM*(8ih z9EZfW4>J`5k2L{qCTx$GiTdr2QzQUPZ*cuB5v;R+GsbG{a2lJ0vT(htBIS}h?><&| z1e63saoL&ct0qKN%l+Gz=BNR-@peSAW`RfnAtp;{9eD6UFc`Y;$-OhVR{`^^-|4WE zyC!J}Y}gRAnaPmLI?0m<6vTe@UJyJ+i?$AZW({2E3IwdOIIw}*VcST+7i(@q!NQG0 z1rPVg2-5mN9=wIf4yuvAewC_{2f$d8(PJ}6GPz7}xA?#-V}C&*Pb#?101;SBL~WP0 zk1U+}uO_pt81I2NK6P>l19~(edKNgAENZYJ%Z0auZg9i+Tf}OS-Q+MDc1cVHeU?%la zKrFEL#77r;rrLp^N{oOHW#nN+Tio>Pua&WDz%@!7?l}4s;W)Np{og6{z^QXoZAMYU^Vpm0`Z)>wHdWCPrzx$!&cbuW|BJ{%ZY!@nx?l3ExnD!r|NuN zyen^hVC2qG*Ke&;30N=`*V1X;i1n!~~KrKYc>!UdSEI K+c>3rkNyY2fxn>u diff --git a/docs/zh/06-advanced/05-data-in/pic/Oracle-01zh-EnterDataSourcePage.png b/docs/zh/06-advanced/05-data-in/pic/Oracle-01zh-EnterDataSourcePage.png deleted file mode 100644 index ca8107066f81d25252033636186f40ded9edec43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32308 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 z 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 K+c>3rkNyY2fxn>u diff --git a/docs/zh/06-advanced/05-data-in/pic/PostgreSQL-01zh-EnterDataSourcePage.png b/docs/zh/06-advanced/05-data-in/pic/PostgreSQL-01zh-EnterDataSourcePage.png deleted file mode 100644 index ca8107066f81d25252033636186f40ded9edec43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32308 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 z 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 K+c>3rkNyY2fxn>u diff --git a/docs/zh/06-advanced/05-data-in/pic/mssql-05.png b/docs/zh/06-advanced/05-data-in/pic/mssql-05.png index de12a55e06d818e3b7d52764d50a43a7683a4bb8..a1e7fa3324b0545b83b6fedd3ac27bf935b88155 100644 GIT binary patch literal 31087 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

-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 literal 22216 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%0AGUqlX6-QQea9Q?nE!c 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 Cs^wV# diff --git a/docs/zh/06-advanced/05-data-in/pic/oracle-04.png b/docs/zh/06-advanced/05-data-in/pic/oracle-04.png index e168d9e7397ccfdfc4c7a6219e261bb420e8ff48..650c80718388af4da9def1e5d8bf3924fc4e57d7 100644 GIT binary patch literal 30832 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

R60`~~$=+wL1eZW#1{iGKwloRb z5Hc1AFj@DzP^KJ%>LiUEzd^GChk09v&|78_b)bc`-rJ}`$1&dr3Z3*hNFErA&LInQ)63vzUJoW+0jk;AsTWN+} zxBhU(R>GvJ^;q}>lCql{z-tb=@KU=!twjyE&M#QJiY$$A>gdu5+~|&lB6c7remQnf z3}gIE6P2pn3sH;U6ip?;+tP447*v1Wh7M2JCYLl=m~5pITlwlRWSLG4!o{f?Ts0Mx8pSt%OgkG!}doXthO?$;x@BA zedlW@3k}CCpXM}Gys65NH{eNQP$oE{I7M|rZ8UPKShtfN!d&i@E|aiuH-14iQauPg_& zyh4dh^pru|Ta?yx7sH+o=jz1~^B(~00dWC5e18@{(v{K_H3XcJE9VxkxEipowx!?7 zO9o@%q2v1KvzwLx&g~4K*SYeaF;gtD=6JTGIW^9?dPq^4QjKya0h5&o^fLd@XDIY$ z!sPq3V{2oiG2{|yUqEL!phoT+{;Zn*{;n;fg1^Qw9Vgm1HG0L858wwULY8Gw*&90R zAJ5%($xB^c+&YI^MPn*3!G{oQ*jOF)ZE)x5o~qe?j8vEbhM>Yim!wj)p1;>ijkF(mz_?`Cqjavnp^?|UckQ6Tf zRlA8EqeXSjQwAqT&hfm)7Z4Q=upzgVfCFzLUM|UTm#Z6w%)}-=MjOtFz+Ol*?8y%Mn zJ-Al^y5>%>k)7|jDaexU)Mj^Zz}&b+*-KhyRuucKnEF?yPC%?SH-Iim1MMh-mN4&v z(-s-|%oDn=^-+_gk8!m0Z&mEzZYVjp>l#0aJC)}HkBE)?v{f%~LGuVMf!eO*(Vn7|bpp88v*eV3sS)j}%9Y zzN~&zmX%xM>R^Zw)fj3%Pl!8{V>z`{`Z3GzLU}K^wx>45^$U5HfK%?_?Ma7z9;*Fpvrrt95iVDuJf&dglw zV(I=g>>DLnG4hNtYzk@cwf-QFCSj|y>J~840Z_|thOvr4Oc$_z_{p&xGk&!=tm0SJUpRUb;iF!*& zq2)#eznXleH(>#1tls_sDkeH75jrz2%t6$X$yY-Tkqkya&}B{0iY>|>lQ}jg`1&Pb z!|ctsmk^G2gM&TT{l1dqpa7Uig2bzWeizkKl}EhEd|pcvTUua?SbXyDdn@|XFr0u8z0f~FdClVDD+j7w(s zc724lupI@Hlgw9@U;gk0r*!RtkMZ3>BBzD>(|0n zQ?nIUn!wYu$Yy3{{yuMuL?yyqy$>fX?ismMW`RCq@E298DvlG`YMmzQUPvZo_tG~>{`t#BO{}vs#@Wb)x1Aoz6LnzS;Pv$uX_e& zF|CE#61Zk&`fFWQyl?7ZQ>^#F>k7by6E z+8k2zP}fO=bvi6nG)ErUihO$+%(dfNH1}k5U0*M9MfNtwhS%svvwp}tYw|7o5g}5^Ns03Z^Uk3!=3zqPnxiAu=dI%Hl%U%@X0>&MI91h}hoihI*1bQH zG+xiya#k8osH~+_Fb~Ct;Ixf|?pcK+rX5=dOPcD11t%_vN5XP9Es}Vel z#blD*8=ikaHc(9KL@{B@be$;dQ;YL^6u^ZP^1b9p&Dy>QtO|kIp(605uk}U3>{mQ( zz>f}IpdfW128E@Ue&`st9EQv|Q?f%vqKQw2X_mrR;K+p+xJXdmo?aV$nqfa=B8NB6 zZ7-En*4=b_e(OBUJ7&&9TJ%gTYqrESFsxaw9n}5NZQp;;!~Tq-(#wfq^QJRtGvI4@ zDV9!**Z@t~eTuuoZVBc2I%G-Q9GtBI1ilnrb7g{X*0AL6HXD5DvLgTor*WpO7zmcUPaCQy2Ns@_s@o)c;C?~=5 zO~Iz#JY28=zxEM%z}5l$8N*o7{@v8z7ZMgvurNw3nMC6AgYz9j@$q5b>py+lJZxfP z3^l(edG@;J7vE}8=k-sWxZq|fi0%O41|8*Tv&+4CU^!qLq@*bmMG65sPVCM_;g;L# zY1w>GH2CecP!ZbA`nj<+{7+bri7)F%;TO*c*Sj-N!8$dozEih-LtFZgHTyO5|BbGHvYIJvPliLoGi$RlLC9VZn1HF$Pv3fHf; zwmQCn>uo0H{dy(dzj_*Jai>lHUj)?tXV*;;LkI?-J(AD_l2WZiL>iOhsHZoMHYP*( z9ee2`IWiw=O@X&;fbg3bD8xr!$8%rmj+=){VgW&{<2RR1hnL)H!uG}c^kecu$_t=g zuspm(L#!e;&`$FrtW@ZWl}aJsIx3($@n(}W&<0ll?yEaz{YK@ddVx6C*n82h^92F1 znRyIy`lix7hpk@bL)&}QZ*vPBkdnEKc5n)f>u_UZFs`_scTiZf>8^=%1I4FJLV3w)= zqXyO#=$RPJh30P}B{SA}Zch)=3iBHcSnu(KaNMtT*5-Vn)z62cb=%W;O@mO~GVUmf z;L4&{8FVB(?|Y0#>HlK&i?r}cEQQ|Tn&rmIpdhZc?QpvX~kmLu0 zG_nAapQf{@v4mPm3glH@Av6Tz_!TVdzF zs;Se41IQ)3?|2<`sA^IW@_txw-Kgum;kuANQF@^Q3(VY-7fCyNytG(mBH_#}`Jx`8 zsYV>Rf@_G~SZ3xWSfwnj1U*`5v_Df+(7D`y>XWANnITya*9J4 zYNQ}6*im&NIwB68e$sJXxjn)x6bV>rb2<$#V?X*PJ{ULp7Mhg~ozj|HLpc6Qr#t<7 z$+f8Tv2A`SZK~6b)HmloDlr$6%lViZ@EwFdq3NwypV;@U%x6s)c>?dDzHkOlaI9Ce z5q=)nhlh*Q(v({F43-ikLz^bX_(U4J%81uIRXC0O!IKoa5*7d=F zlTY-je=aFvp?r~B4Le?V_Z$imzrcmue}(owwDdmJ7E2;I=r1a0``uRpYBO!|3-h@}b>C@N#|w_&q5Wbc*j? z@pDX(s}a4mn|wQt6n=r^%ZKFy4b?*&!kCI1;a<9KqIYhb^Rv_zI3kN&C~0esXWuMF zgqOD7KyOCp?guTe-5-Pf-=cV(i-CjR8OVUNS`Ww=vKIVIMYad>6@oGuCyTx30@zDo= z>y1){p#x?!V(hQ!`w~>zX;>?#yuDgwRinSv^|_RsIiC~Q?LWB6Srp@}GGr_iNBzji zfSbCW;!5eyBC2JIr~|?0k1*go_+iIi_0Pqfz6!wgp>{bO2)xHnZM&fbt+a`UynN_h zgStkhghBk2L$DYv;3l@#`qe-av)i?rV`Kd}vsl&Ee3aO$oLua6Q?>;O0&*Wk5(2$- z0poZ$l#l#`zSJ94PciAmDzubXXfnG(jF1ppF)c=3jIqb6usRfu>N?yShI z<8BJfzBj?OWEPk5N9Sy$j0(nfi&< z=$%tTZ%Qyw#Io4y>n}OcWfR``^8^>IEcyRq%@wP*yZasSq=m{nlpTy#LPS! zBhN6DWm%nyMlpnVlO#6lY;$c~a2Z&GA!~t)JqX!sFQ2o{xUs&Ch)^g@r*+u9(lyb} z8TTF{b#PCO8)NF6u*08T44iD>A!L@fNPh{wErvhytf zBI)!2LRt-3+9bt}3}2G0%I=$uwyb3#02Fim!G98!{|_vp-+#X^nlvdn)$L+u_}|$4 zFY;ouhn5P|*Vz)Qb=j1S{2JN7|N37N(=j$(qN$}*;R9nJH&p;GY1q2q;T9=Xf>8?# z{AgKXbYy_Qm{gUvL0dfD5H^kiioG)*o|&!s;w+$)$$4NzNAvRWsWsb7{^|p8lF~o* zU-9|?ySxwn``a5|{vSgVScv++pii)N{0|ssXmpfEK%jnR5-4XI@6JdP?Fv|Ik>BXd zfmB}lSfTS1JOGn45)*skIS64;SPR3z#M2yO<5&a9my2#$=EaV)g1= zwocY|_dr$WgX1ABS^Uyqp4IithtN30Kq#1@uGIGGAti1?;eiYbQ4x;$6Vju&IWoR z4E9LR)Bv%gGG+{!dyf$jaSYV!R{u9IA3ZrkymzG)xdkal``qZURFMsgIc$cpEmm7G zvjZT6)CROMpJcGB!;#Vou$^SB0abGVX{3t#zuLYn2iZrgZ8(#oEb|Y5LmQdpoh)?~>_oDL{DV0v{kwS?R>^RQ;cx2tV0gw`C-`53F}p zb+@eZ1!vVL4jnN#L0ABBDBxB=wU8`ucX_qCwi`xO0A`dF-;e0@bpI4}@K>vjWs$HX zfcxx?s7%%|T21+Q$mvx1Sny8xhTLE%pmc%$x+Ne^bT3Tj9Rj!Wjv&ekY0-A^u3)p% zUf$pVWzPZS*5P=&!TG{2)C@&D;DXl(nrHjQg8apXhw{5c^L)0=Th2s$48f-AT^>{* z-XEPzJ6jO}9D`?LRr%z=LS00s6Z{WHT{#ojoY!|?lBv&pVqrm8vq}h}{53AjYu(T5y39k1fn#3e^hoZy_#4^Q$o*PG5QlJlj3$?-jO7^%Vsu7hpe{e1o z2utkNfj0VnyqnL8?-y+LSg6kVYAwD2gu68dRVa6l>hIvgOU2iTt(bqQBZR}q5AAd| zuqb!A!LP6v<=!I2!-w8q(D&h|0wP}ey{KcbMlr~bU7&3XAwWPS@Ng7nkRSkD3~X9q z&_{*seAXt7rVwDKoZro2UkU>Q6-M%^i!+b4iO#%FWxm7VW$ItV;sT;|Z*v4K(iN*vT#OF)tn&39U)u^}Yg5~^xeZ-xgI0e{Jvgh=>lpgr z?)Y&%X1i*rud4Lc^=**9GBi67>9)j}i_FKYjDc1Nj~A}-G(wFv0G8z-@!f+)sxBjD z%k1Lv!UkUPh3`HX5T=z^yG(_8BY30^4F;+!lbTYt9{?VyFRUICv8AFr|15fx1Ec)b zP5PMDsUovqgqA`@(Y8`s87C^JktZd-l9zMm#oDEkHFUdqI@F=Bo6h+2JsH-%gW+;9 z);4%32+juU7H(1=Ygi^tm?sdy?!eZv$rBJ)z(Yf{NO0?7>@poo^U>L21`rmn?w#L_ zbpEMhA8pqXp7&9EA}#7wN1Tvy6FK#Ig}g{dl_?AlKap9Xf^L`ug7yia?e}z1c1a-mkUs zzaR-ZT=I;oIU~%?vASvW(8sY#hm{& zHF5bNd%k=qX~yPX$fEe)LKbs2ADJ1nhZx6uQHsLM=rAb2f7a|Vb`lPx)wyx_(sn~# zu19`6MYex6h9!@-MVGaTOy3q3~4oRp0=prpk;I`hM;8c|1u zj+&&up$vn#yM^&_a?(-%hwg_x8;^F33RX8%o&Osqlft66uvdlX(k$Y&*TtLG$O`WN zz^a9okOW^0Omw3@9p4@zq%Ua$h1 z`CaqSC=dKpn04B>@cpFG99XgdwbE!j*YS`NBGqW)(1W8zj@eDckMNC&rm2kBAgrQ5 z0yk@&eeU`(-ei1w`l3*mCVC*F#^fW;jtQdKY@xpZcKqTxtlyzon{kYcopOxb?N{6$ z1b%XGDl%%agg!j(1d0q)fmJI{J_V2drV54pc_qQKyju4z<0{hoP2lBO5r+QUor#0w zu66@kTqfCJZLHhIkc>$TWf?I6fOo z=YldsiY2!Xn3Q@cwxZ32Qa%;TFPLsWf{cHV2}7%}0Ks5a{Mypsmis={;8}p4$8L zql>%-`!o3VU!{x>GF;o+lMT2xL#g*qiV6fL4wmu@6*BTzrzx(3Jblq9ctE5H7Eh&K z>)y-AtE&k$V=lH5yuLAEC3FkzSkN125Wn^$KP3kFH0_mlHaKO|p*I3p^WXz(wuNBS znWxIYi*uk*Klt*go(R)$M<7t96nTrA5+Xwh9SYpuW0mYngkC~KN&Vn>1DZqbf%K`> z59-Rs21&1SVy6*a_3Y=j6o(+Xj>0) zdEZ&MTKzZ>jBV#*w)q0{Gui8?i{eL8_(D7H9i*7jM?3gRw_F5J07G+Zm4yHYVE^lp zouum~AcJatVSK0@r2dt6^T?2Ej(S!b#D zZbF;0u}=2rbn$;XIPC81KKY#^iJY4l9(IZkju8gt1=bNfXtUUz;d+`joA3z0>Rv_Bgf;RRCS&|A*UhmGqR3dTF;p2MMss~ZK!HJ)xhLzgAbEeC8 zr*33I_hf7p*=9F(#%%L#0xL#0*`9&m3sv!qs!i_}M*rIdMDd65i6bAG7i>mkVt=I( zB{ROcZd`)XWUq3>$ZU4r4@|*iN|;=>_}f8n_}=(di9r zD3)`+j+a!3t8XY}CP+(WJ25b5EkpCm`C)S8v%vj(JqlCzTAoq`x`9(CT~w{hCI=%5 z&%}^}_Gc_V65(PuBI(3HqDCq0Q6Mbs-rH^zLN|%5?i7@jC(Y2*cF3Qn+B7qm?p`%L z7|hUb?ceKH)EZgU#_=b&^m~~dTCH6r4OMBc7*&;uF2V_5BHyv<@2tHq8Ag#_iHv+1 zqet!n6em7V2;|yYsCjuVS;Tv?Yy0@K7^k30o%=XyM3ge0ud!%<{9N}8j3)rOku)KR zEN&rcx)3aJAO5PvM!-ugBOi`3AVpdGuL(5U<($N>o2*RV1=$c1GRL=zTbLRhdlbIT zhj29JYgDuPs{W{NF}%O|oZfp36v+69uu?jU|p+bn~e% zwf;&QsoJ8``#O}SfDmO(7K@@rhsTra!wg9WMuw+7;jEt3RR5*h>Jq=*i2}S{(DpK6 z@1GAlnPrMu0^BB5cIMf&!Mtnlp2EVHuqjXbzJ+-m2|m`l9ogSO6ww34_bw4Q&eq$p zoDY3tyU)Nkm**wGCwbW)-YA3HmZk$&PD44{b zPC(ftbTC#3*W&k~vmjaHrdiN@X$y$SlLzbS#`|U^2 z*ZE-5{9{_3T{g}X*KGg3+qUK#VK-!IKrn_S&dy(@VVo3nN|!7HA~H<)R#{>_NVxNp03LFks=QP$N@ z6-zaI>3M?AHURD_oQOQf^-YpaV_Xf6W{J4y9k}6K`}zc>^9aQI9NvHA(HQFhTHTNj zNZWkm@Oo?(H$ON7lRX4nD<10srlv%OrfU2ax!koQ@ss$}Z1VIdsxI)#U|fuZ@UH)O zt-sBogMY+P;8|!v2qD}7_iIf)t5xi$lnQ-x=@fOC`k7h6vo8*Wd_Y3jSqK0(>&hLe z5;TJx5Bada(W}wK4MzEcVA6plPe*`i(AlpUX;De`e~6YT#Ahe;3lkre3q6idq%NA? zxjmI2H;+}2^b36$A^_90pg>L)nZ}62Vr}Xwh!q-3G8C{2EI9A|MOq*)(hgG zrHw-WuXShVZCkToEJW!a&Y_}?)EctL7F>#EUAFRreir^g(KQpx=3R@VXm9qZ`;2f6 z<+0ZI=(E0UDIaYB0&U;3xTxjs8usc|z2f_!mcf*wiBf`|cm^Z5)Khh6to1B|+yxz#Vd zq50KVsjF|>Wqdz{_mks+y>7ijS3k46*_Z9opso^;KkXk3XQHhJC`!+)pzMxb^pqRg ziAFc;01iiBPM_t`AM(zFh_SKSYs2#DuScI9_f+g-7^&4i+@DO`*Dti^+s*d9Xutx} zS43?xOa|K+8q=yOX4e2QAB@i#c>$zZ99QzOO9E+TU$+hE-3c3Y+JH2qCHy3KSj>(c z|9?ov`5U1COH6imhBN<$IE`r1`D#k^lM{sOlK&zUJVJaIhmRl2iU3WP+Vj)55}o2- znY_7Rd2|ZLV0&-WT-1uO?DzgZ2`zmAc1Ecx<s> zgUiK^GCf04@lQ@QO^ZXgggKNSEiFma)i`~iq9oM6?lfLYPdA)fOiV^k4|RLHAYya% z_Wq!vU8T+0$||O~*hZ=FTsq_L>sd59E~T0J_=HBj&`>yq*L(Id=))zwfa4ISfPku= z9upm1FCHObm1zjS3L)&=@tQ#TmWAo7!NQA!1}P)+f`q(07hoMdgxH3be~4=T(Iph2WUt%mGuH+Q@HuKYc^MVy J@;4^I{{=fEXtMwS literal 22398 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 Cs^wV# From 1f91e78b53dfe91ac1eb8ef184bc0846eca8b229 Mon Sep 17 00:00:00 2001 From: xiao-77 Date: Fri, 20 Sep 2024 15:38:02 +0800 Subject: [PATCH 06/27] remove mndMain.c and mndProfile.c --- source/dnode/mnode/impl/src/mndMain.c | 100 ++++++++-- source/dnode/mnode/impl/src/mndProfile.c | 240 +++++++++++++++++++---- 2 files changed, 281 insertions(+), 59 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index a0dd30f11a..a969f628df 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -85,7 +85,10 @@ static void *mndBuildTimerMsg(int32_t *pContLen) { void *pReq = rpcMallocCont(contLen); if (pReq == NULL) return NULL; - (void)tSerializeSMTimerMsg(pReq, contLen, &timerReq); + if (tSerializeSMTimerMsg(pReq, contLen, &timerReq) < 0) { + rpcFreeCont(pReq); + return NULL; + } *pContLen = contLen; return pReq; } @@ -97,7 +100,9 @@ static void mndPullupTrans(SMnode *pMnode) { if (pReq != NULL) { SRpcMsg rpcMsg = {.msgType = TDMT_MND_TRANS_TIMER, .pCont = pReq, .contLen = contLen}; // TODO check return value - (void)tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) { + mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__); + } } } @@ -108,7 +113,9 @@ static void mndPullupCompacts(SMnode *pMnode) { if (pReq != NULL) { SRpcMsg rpcMsg = {.msgType = TDMT_MND_COMPACT_TIMER, .pCont = pReq, .contLen = contLen}; // TODO check return value - (void)tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) { + mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__); + } } } @@ -118,7 +125,9 @@ static void mndPullupTtl(SMnode *pMnode) { void *pReq = mndBuildTimerMsg(&contLen); SRpcMsg rpcMsg = {.msgType = TDMT_MND_TTL_TIMER, .pCont = pReq, .contLen = contLen}; // TODO check return value - (void)tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) { + mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__); + } } static void mndPullupTrimDb(SMnode *pMnode) { @@ -127,7 +136,9 @@ static void mndPullupTrimDb(SMnode *pMnode) { void *pReq = mndBuildTimerMsg(&contLen); SRpcMsg rpcMsg = {.msgType = TDMT_MND_TRIM_DB_TIMER, .pCont = pReq, .contLen = contLen}; // TODO check return value - (void)tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) { + mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__); + } } static void mndPullupS3MigrateDb(SMnode *pMnode) { @@ -136,7 +147,9 @@ static void mndPullupS3MigrateDb(SMnode *pMnode) { void *pReq = mndBuildTimerMsg(&contLen); // TODO check return value SRpcMsg rpcMsg = {.msgType = TDMT_MND_S3MIGRATE_DB_TIMER, .pCont = pReq, .contLen = contLen}; - (void)tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) { + mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__); + } } static int32_t mndPullupArbHeartbeat(SMnode *pMnode) { @@ -160,7 +173,9 @@ static void mndCalMqRebalance(SMnode *pMnode) { void *pReq = mndBuildTimerMsg(&contLen); if (pReq != NULL) { SRpcMsg rpcMsg = {.msgType = TDMT_MND_TMQ_TIMER, .pCont = pReq, .contLen = contLen}; - (void)tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) { + mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__); + } } } @@ -170,7 +185,9 @@ static void mndStreamCheckpointTimer(SMnode *pMnode) { int32_t size = sizeof(SMStreamDoCheckpointMsg); SRpcMsg rpcMsg = {.msgType = TDMT_MND_STREAM_BEGIN_CHECKPOINT, .pCont = pMsg, .contLen = size}; // TODO check return value - (void)tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) { + mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__); + } } } @@ -180,7 +197,9 @@ static void mndStreamCheckNode(SMnode *pMnode) { if (pReq != NULL) { SRpcMsg rpcMsg = {.msgType = TDMT_MND_NODECHECK_TIMER, .pCont = pReq, .contLen = contLen}; // TODO check return value - (void)tmsgPutToQueue(&pMnode->msgCb, READ_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, READ_QUEUE, &rpcMsg) < 0) { + mError("failed to put into read-queue since %s, line:%d", terrstr(), __LINE__); + } } } @@ -190,7 +209,9 @@ static void mndStreamConsensusChkpt(SMnode *pMnode) { if (pReq != NULL) { SRpcMsg rpcMsg = {.msgType = TDMT_MND_STREAM_CONSEN_TIMER, .pCont = pReq, .contLen = contLen}; // TODO check return value - (void)tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) { + mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__); + } } } @@ -201,7 +222,9 @@ static void mndPullupTelem(SMnode *pMnode) { if (pReq != NULL) { SRpcMsg rpcMsg = {.msgType = TDMT_MND_TELEM_TIMER, .pCont = pReq, .contLen = contLen}; // TODO check return value - (void)tmsgPutToQueue(&pMnode->msgCb, READ_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, READ_QUEUE, &rpcMsg) < 0) { + mError("failed to put into read-queue since %s, line:%d", terrstr(), __LINE__); + } } } @@ -213,7 +236,9 @@ static void mndPullupGrant(SMnode *pMnode) { SRpcMsg rpcMsg = { .msgType = TDMT_MND_GRANT_HB_TIMER, .pCont = pReq, .contLen = contLen, .info.ahandle = (void *)0x9527}; // TODO check return value - (void)tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) { + mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__); + } } } @@ -225,7 +250,9 @@ static void mndIncreaseUpTime(SMnode *pMnode) { SRpcMsg rpcMsg = { .msgType = TDMT_MND_UPTIME_TIMER, .pCont = pReq, .contLen = contLen, .info.ahandle = (void *)0x9528}; // TODO check return value - (void)tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); + if (tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg) < 0) { + mError("failed to put into write-queue since %s, line:%d", terrstr(), __LINE__); + } } } @@ -676,7 +703,13 @@ SMnode *mndOpen(const char *path, const SMnodeOpt *pOption) { } char timestr[24] = "1970-01-01 00:00:00.00"; - (void)taosParseTime(timestr, &pMnode->checkTime, (int32_t)strlen(timestr), TSDB_TIME_PRECISION_MILLI, 0); + code = taosParseTime(timestr, &pMnode->checkTime, (int32_t)strlen(timestr), TSDB_TIME_PRECISION_MILLI, 0); + if (code < 0) { + mError("failed to parse time since %s", tstrerror(code)); + taosThreadRwlockDestroy(&pMnode->lock); + taosMemoryFree(pMnode); + return NULL; + } mndSetOptions(pMnode, pOption); pMnode->deploy = pOption->deploy; @@ -721,10 +754,17 @@ SMnode *mndOpen(const char *path, const SMnodeOpt *pOption) { void mndPreClose(SMnode *pMnode) { if (pMnode != NULL) { + int32_t code = 0; // TODO check return value - (void)syncLeaderTransfer(pMnode->syncMgmt.sync); + code = syncLeaderTransfer(pMnode->syncMgmt.sync); + if (code < 0) { + mError("failed to transfer leader since %s", tstrerror(code)); + } syncPreStop(pMnode->syncMgmt.sync); - (void)sdbWriteFile(pMnode->pSdb, 0); + code = sdbWriteFile(pMnode->pSdb, 0); + if (code < 0) { + mError("failed to write sdb since %s", tstrerror(code)); + } } } @@ -872,7 +912,12 @@ _OVER: int32_t contLen = tSerializeSEpSet(NULL, 0, &epSet); pMsg->info.rsp = rpcMallocCont(contLen); if (pMsg->info.rsp != NULL) { - (void)tSerializeSEpSet(pMsg->info.rsp, contLen, &epSet); + code = tSerializeSEpSet(pMsg->info.rsp, contLen, &epSet); + if (code < 0) { + rpcFreeCont(pMsg->info.rsp); + pMsg->info.rsp = NULL; + TAOS_RETURN(code); + } pMsg->info.hasEpSet = 1; pMsg->info.rspLen = contLen; } @@ -1039,7 +1084,12 @@ int32_t mndGetMonitorInfo(SMnode *pMnode, SMonClusterInfo *pClusterInfo, SMonVgr desc.vgroup_id = pVgroup->vgId; SName name = {0}; - (void)tNameFromString(&name, pVgroup->dbName, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); + code = tNameFromString(&name, pVgroup->dbName, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); + if (code < 0) { + mError("failed to get db name since %s", tstrerror(code)); + sdbRelease(pSdb, pVgroup); + TAOS_RETURN(code); + } (void)tNameGetDbName(&name, desc.database_name); desc.tables_num = pVgroup->numOfTables; @@ -1077,11 +1127,21 @@ int32_t mndGetMonitorInfo(SMnode *pMnode, SMonClusterInfo *pClusterInfo, SMonVgr SMonStbDesc desc = {0}; SName name1 = {0}; - (void)tNameFromString(&name1, pStb->db, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); + code = tNameFromString(&name1, pStb->db, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); + if (code < 0) { + mError("failed to get db name since %s", tstrerror(code)); + sdbRelease(pSdb, pStb); + TAOS_RETURN(code); + } (void)tNameGetDbName(&name1, desc.database_name); SName name2 = {0}; - (void)tNameFromString(&name2, pStb->name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); + code = tNameFromString(&name2, pStb->name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); + if (code < 0) { + mError("failed to get table name since %s", tstrerror(code)); + sdbRelease(pSdb, pStb); + TAOS_RETURN(code); + } tstrncpy(desc.stb_name, tNameGetTableName(&name2), TSDB_TABLE_NAME_LEN); if (taosArrayPush(pStbInfo->stbs, &desc) == NULL) { diff --git a/source/dnode/mnode/impl/src/mndProfile.c b/source/dnode/mnode/impl/src/mndProfile.c index 645a187abb..4dc2f093e8 100644 --- a/source/dnode/mnode/impl/src/mndProfile.c +++ b/source/dnode/mnode/impl/src/mndProfile.c @@ -14,12 +14,12 @@ */ #define _DEFAULT_SOURCE -#include "mndProfile.h" #include "audit.h" #include "mndDb.h" #include "mndDnode.h" #include "mndMnode.h" #include "mndPrivilege.h" +#include "mndProfile.h" #include "mndQnode.h" #include "mndShow.h" #include "mndSma.h" @@ -65,7 +65,7 @@ typedef struct { int64_t ipWhiteListVer; } SConnPreparedObj; -#define CACHE_OBJ_KEEP_TIME 3 // s +#define CACHE_OBJ_KEEP_TIME 3 // s static SConnObj *mndCreateConn(SMnode *pMnode, const char *user, int8_t connType, uint32_t ip, uint16_t port, int32_t pid, const char *app, int64_t startTime); @@ -377,7 +377,8 @@ static SAppObj *mndCreateApp(SMnode *pMnode, uint32_t clientIp, SAppHbReq *pReq) (void)memcpy(&app.summary, &pReq->summary, sizeof(pReq->summary)); app.lastAccessTimeMs = taosGetTimestampMs(); - SAppObj *pApp = taosCachePut(pMgmt->appCache, &pReq->appId, sizeof(pReq->appId), &app, sizeof(app), CACHE_OBJ_KEEP_TIME * 1000); + SAppObj *pApp = + taosCachePut(pMgmt->appCache, &pReq->appId, sizeof(pReq->appId), &app, sizeof(app), CACHE_OBJ_KEEP_TIME * 1000); if (pApp == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; mError("failed to app %" PRIx64 " into cache since %s", pReq->appId, terrstr()); @@ -841,6 +842,7 @@ static int32_t mndRetrieveConns(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl SSdb *pSdb = pMnode->pSdb; int32_t numOfRows = 0; int32_t cols = 0; + int32_t code = 0; SConnObj *pConn = NULL; if (pShow->pIter == NULL) { @@ -863,32 +865,60 @@ static int32_t mndRetrieveConns(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl cols = 0; SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pConn->id, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pConn->id, false); + if (code != 0) { + mError("failed to set conn id:%u since %s", pConn->id, tstrerror(code)); + return code; + } char user[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0}; STR_TO_VARSTR(user, pConn->user); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)user, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)user, false); + if (code != 0) { + mError("failed to set user since %s", tstrerror(code)); + return code; + } char app[TSDB_APP_NAME_LEN + VARSTR_HEADER_SIZE]; STR_TO_VARSTR(app, pConn->app); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)app, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)app, false); + if (code != 0) { + mError("failed to set app since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pConn->pid, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pConn->pid, false); + if (code != 0) { + mError("failed to set conn id:%u since %s", pConn->id, tstrerror(code)); + return code; + } char endpoint[TSDB_IPv4ADDR_LEN + 6 + VARSTR_HEADER_SIZE] = {0}; (void)sprintf(&endpoint[VARSTR_HEADER_SIZE], "%s:%d", taosIpStr(pConn->ip), pConn->port); varDataLen(endpoint) = strlen(&endpoint[VARSTR_HEADER_SIZE]); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)endpoint, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)endpoint, false); + if (code != 0) { + mError("failed to set endpoint since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pConn->loginTimeMs, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pConn->loginTimeMs, false); + if (code != 0) { + mError("failed to set login time since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pConn->lastAccessTimeMs, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pConn->lastAccessTimeMs, false); + if (code != 0) { + mError("failed to set last access time since %s", tstrerror(code)); + return code; + } numOfRows++; } @@ -907,6 +937,7 @@ static int32_t mndRetrieveConns(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl static int32_t packQueriesIntoBlock(SShowObj *pShow, SConnObj *pConn, SSDataBlock *pBlock, uint32_t offset, uint32_t rowsToPack) { int32_t cols = 0; + int32_t code = 0; taosRLockLatch(&pConn->queryLock); int32_t numOfQueries = taosArrayGetSize(pConn->pQueries); if (NULL == pConn->pQueries || numOfQueries <= offset) { @@ -924,47 +955,107 @@ static int32_t packQueriesIntoBlock(SShowObj *pShow, SConnObj *pConn, SSDataBloc (void)sprintf(&queryId[VARSTR_HEADER_SIZE], "%x:%" PRIx64, pConn->id, pQuery->reqRid); varDataLen(queryId) = strlen(&queryId[VARSTR_HEADER_SIZE]); SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)queryId, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)queryId, false); + if (code != 0) { + mError("failed to set query id:%s since %s", queryId, tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->queryId, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->queryId, false); + if (code != 0) { + mError("failed to set query id:%" PRIx64 " since %s", pQuery->queryId, tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)&pConn->id, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)&pConn->id, false); + if (code != 0) { + mError("failed to set conn id:%u since %s", pConn->id, tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } char app[TSDB_APP_NAME_LEN + VARSTR_HEADER_SIZE]; STR_TO_VARSTR(app, pConn->app); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)app, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)app, false); + if (code != 0) { + mError("failed to set app since %s", tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)&pConn->pid, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)&pConn->pid, false); + if (code != 0) { + mError("failed to set conn id:%u since %s", pConn->id, tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } char user[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0}; STR_TO_VARSTR(user, pConn->user); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)user, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)user, false); + if (code != 0) { + mError("failed to set user since %s", tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } char endpoint[TSDB_IPv4ADDR_LEN + 6 + VARSTR_HEADER_SIZE] = {0}; (void)sprintf(&endpoint[VARSTR_HEADER_SIZE], "%s:%d", taosIpStr(pConn->ip), pConn->port); varDataLen(endpoint) = strlen(&endpoint[VARSTR_HEADER_SIZE]); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)endpoint, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)endpoint, false); + if (code != 0) { + mError("failed to set endpoint since %s", tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->stime, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->stime, false); + if (code != 0) { + mError("failed to set start time since %s", tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->useconds, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->useconds, false); + if (code != 0) { + mError("failed to set useconds since %s", tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->stableQuery, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->stableQuery, false); + if (code != 0) { + mError("failed to set stable query since %s", tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->isSubQuery, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->isSubQuery, false); + if (code != 0) { + mError("failed to set sub query since %s", tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->subPlanNum, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)&pQuery->subPlanNum, false); + if (code != 0) { + mError("failed to set sub plan num since %s", tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } char subStatus[TSDB_SHOW_SUBQUERY_LEN + VARSTR_HEADER_SIZE] = {0}; int64_t reserve = 64; @@ -983,12 +1074,22 @@ static int32_t packQueriesIntoBlock(SShowObj *pShow, SConnObj *pConn, SSDataBloc } varDataLen(subStatus) = strlen(&subStatus[VARSTR_HEADER_SIZE]); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, subStatus, (varDataLen(subStatus) == 0) ? true : false); + code = colDataSetVal(pColInfo, curRowIndex, subStatus, (varDataLen(subStatus) == 0) ? true : false); + if (code != 0) { + mError("failed to set sub status since %s", tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } char sql[TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE] = {0}; STR_TO_VARSTR(sql, pQuery->sql); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, curRowIndex, (const char *)sql, false); + code = colDataSetVal(pColInfo, curRowIndex, (const char *)sql, false); + if (code != 0) { + mError("failed to set sql since %s", tstrerror(code)); + taosRUnLockLatch(&pConn->queryLock); + return code; + } pBlock->info.rows++; } @@ -1040,6 +1141,7 @@ static int32_t mndRetrieveApps(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlo int32_t numOfRows = 0; int32_t cols = 0; SAppObj *pApp = NULL; + int32_t code = 0; if (pShow->pIter == NULL) { SProfileMgmt *pMgmt = &pMnode->profileMgmt; @@ -1057,55 +1159,115 @@ static int32_t mndRetrieveApps(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlo cols = 0; SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->appId, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->appId, false); + if (code != 0) { + mError("failed to set app id since %s", tstrerror(code)); + return code; + } char ip[TSDB_IPv4ADDR_LEN + 6 + VARSTR_HEADER_SIZE] = {0}; (void)sprintf(&ip[VARSTR_HEADER_SIZE], "%s", taosIpStr(pApp->ip)); varDataLen(ip) = strlen(&ip[VARSTR_HEADER_SIZE]); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)ip, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)ip, false); + if (code != 0) { + mError("failed to set ip since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->pid, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->pid, false); + if (code != 0) { + mError("failed to set pid since %s", tstrerror(code)); + return code; + } char name[TSDB_APP_NAME_LEN + 6 + VARSTR_HEADER_SIZE] = {0}; (void)sprintf(&name[VARSTR_HEADER_SIZE], "%s", pApp->name); varDataLen(name) = strlen(&name[VARSTR_HEADER_SIZE]); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)name, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)name, false); + if (code != 0) { + mError("failed to set app name since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->startTime, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->startTime, false); + if (code != 0) { + mError("failed to set start time since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.numOfInsertsReq, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.numOfInsertsReq, false); + if (code != 0) { + mError("failed to set insert req since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.numOfInsertRows, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.numOfInsertRows, false); + if (code != 0) { + mError("failed to set insert rows since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.insertElapsedTime, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.insertElapsedTime, false); + if (code != 0) { + mError("failed to set insert elapsed time since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.insertBytes, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.insertBytes, false); + if (code != 0) { + mError("failed to set insert bytes since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.fetchBytes, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.fetchBytes, false); + if (code != 0) { + mError("failed to set fetch bytes since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.queryElapsedTime, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.queryElapsedTime, false); + if (code != 0) { + mError("failed to set query elapsed time since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.numOfSlowQueries, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.numOfSlowQueries, false); + if (code != 0) { + mError("failed to set slow queries since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.totalRequests, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.totalRequests, false); + if (code != 0) { + mError("failed to set total requests since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.currentRequests, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->summary.currentRequests, false); + if (code != 0) { + mError("failed to set current requests since %s", tstrerror(code)); + return code; + } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->lastAccessTimeMs, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)&pApp->lastAccessTimeMs, false); + if (code != 0) { + mError("failed to set last access time since %s", tstrerror(code)); + return code; + } numOfRows++; } From 840e006249fcc008d362d054ea2c613801b1ac02 Mon Sep 17 00:00:00 2001 From: xiao-77 Date: Fri, 20 Sep 2024 16:37:27 +0800 Subject: [PATCH 07/27] remove void in mnode --- include/util/tutil.h | 9 ++ source/dnode/mnode/impl/src/mndCluster.c | 23 +++- .../dnode/mnode/impl/src/mndCompactDetail.c | 20 ++- source/dnode/mnode/impl/src/mndFunc.c | 46 +++++-- source/dnode/mnode/impl/src/mndQnode.c | 40 ++++-- source/dnode/mnode/impl/src/mndSnode.c | 31 +++-- source/dnode/mnode/impl/src/mndUser.c | 130 ++++++++++++++---- 7 files changed, 223 insertions(+), 76 deletions(-) diff --git a/include/util/tutil.h b/include/util/tutil.h index 6a8f58e360..87710b091d 100644 --- a/include/util/tutil.h +++ b/include/util/tutil.h @@ -176,6 +176,15 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, } \ } while (0) +#define TAOS_CHECK_RETURN_WITH_RELEASE(CMD, PTR1, PTR2) \ + do { \ + int32_t __c = (CMD); \ + if (__c != TSDB_CODE_SUCCESS) { \ + sdbRelease(PTR1, PTR2); \ + TAOS_RETURN(__c); \ + } \ + } while (0) + #define TAOS_CHECK_RETURN_WITH_FREE(CMD, PTR) \ do { \ int32_t __c = (CMD); \ diff --git a/source/dnode/mnode/impl/src/mndCluster.c b/source/dnode/mnode/impl/src/mndCluster.c index 5cec3a8f27..5e38a91ab0 100644 --- a/source/dnode/mnode/impl/src/mndCluster.c +++ b/source/dnode/mnode/impl/src/mndCluster.c @@ -14,8 +14,8 @@ */ #define _DEFAULT_SOURCE -#include "mndCluster.h" #include "audit.h" +#include "mndCluster.h" #include "mndGrant.h" #include "mndPrivilege.h" #include "mndShow.h" @@ -257,7 +257,11 @@ static int32_t mndCreateDefaultCluster(SMnode *pMnode) { code = terrno; TAOS_RETURN(code); } - (void)sdbSetRawStatus(pRaw, SDB_STATUS_READY); + code = sdbSetRawStatus(pRaw, SDB_STATUS_READY); + if (code != 0) { + sdbFreeRaw(pRaw); + TAOS_RETURN(code); + } mInfo("cluster:%" PRId64 ", will be created when deploying, raw:%p", clusterObj.id, pRaw); @@ -275,7 +279,12 @@ static int32_t mndCreateDefaultCluster(SMnode *pMnode) { mndTransDrop(pTrans); TAOS_RETURN(code); } - (void)sdbSetRawStatus(pRaw, SDB_STATUS_READY); + code = sdbSetRawStatus(pRaw, SDB_STATUS_READY); + if (code != 0) { + sdbFreeRaw(pRaw); + mndTransDrop(pTrans); + TAOS_RETURN(code); + } if ((code = mndTransPrepare(pMnode, pTrans)) != 0) { mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); @@ -317,7 +326,6 @@ static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock * pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); COL_DATA_SET_VAL_GOTO((const char *)&pCluster->createdTime, false, pCluster, _OVER); - char ver[12] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(ver, tsVersionName, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); @@ -386,7 +394,12 @@ static int32_t mndProcessUptimeTimer(SRpcMsg *pReq) { mndTransDrop(pTrans); TAOS_RETURN(code); } - (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + code = sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + if (code != 0) { + sdbFreeRaw(pCommitRaw); + mndTransDrop(pTrans); + TAOS_RETURN(code); + } if ((code = mndTransPrepare(pMnode, pTrans)) != 0) { mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); diff --git a/source/dnode/mnode/impl/src/mndCompactDetail.c b/source/dnode/mnode/impl/src/mndCompactDetail.c index d1bdb4734d..cbd0df7e68 100644 --- a/source/dnode/mnode/impl/src/mndCompactDetail.c +++ b/source/dnode/mnode/impl/src/mndCompactDetail.c @@ -67,22 +67,28 @@ int32_t mndRetrieveCompactDetail(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB char tmpBuf[TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE] = {0}; pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->compactId, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->compactId, false), + pSdb, pCompactDetail); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->vgId, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->vgId, false), pSdb, + pCompactDetail); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->dnodeId, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->dnodeId, false), + pSdb, pCompactDetail); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->numberFileset, false); + TAOS_CHECK_RETURN_WITH_RELEASE( + colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->numberFileset, false), pSdb, pCompactDetail); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->finished, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->finished, false), + pSdb, pCompactDetail); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->startTime, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->startTime, false), + pSdb, pCompactDetail); numOfRows++; sdbRelease(pSdb, pCompactDetail); @@ -302,7 +308,7 @@ int32_t mndAddCompactDetailToTran(SMnode *pMnode, STrans *pTrans, SCompactObj *p if (terrno != 0) code = terrno; TAOS_RETURN(code); } - (void)sdbSetRawStatus(pVgRaw, SDB_STATUS_READY); + code = sdbSetRawStatus(pVgRaw, SDB_STATUS_READY); TAOS_RETURN(code); } diff --git a/source/dnode/mnode/impl/src/mndFunc.c b/source/dnode/mnode/impl/src/mndFunc.c index 9e97aa674b..4c5a695402 100644 --- a/source/dnode/mnode/impl/src/mndFunc.c +++ b/source/dnode/mnode/impl/src/mndFunc.c @@ -621,8 +621,8 @@ static void *mnodeGenTypeStr(char *buf, int32_t buflen, uint8_t type, int32_t le return msg; } - if (type == TSDB_DATA_TYPE_NCHAR || type == TSDB_DATA_TYPE_VARBINARY || - type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_GEOMETRY) { + if (type == TSDB_DATA_TYPE_NCHAR || type == TSDB_DATA_TYPE_VARBINARY || type == TSDB_DATA_TYPE_BINARY || + type == TSDB_DATA_TYPE_GEOMETRY) { int32_t bytes = len > 0 ? (int32_t)(len - VARSTR_HEADER_SIZE) : len; (void)snprintf(buf, buflen - 1, "%s(%d)", tDataTypes[type].name, type == TSDB_DATA_TYPE_NCHAR ? bytes / 4 : bytes); @@ -640,6 +640,7 @@ static int32_t mndRetrieveFuncs(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl int32_t numOfRows = 0; SFuncObj *pFunc = NULL; int32_t cols = 0; + int32_t code = 0; char buf[TSDB_TYPE_STR_MAX_LEN]; while (numOfRows < rows) { @@ -652,40 +653,51 @@ static int32_t mndRetrieveFuncs(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl STR_WITH_MAXSIZE_TO_VARSTR(b1, pFunc->name, pShow->pMeta->pSchemas[cols].bytes); SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)b1, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)b1, false), pSdb, pFunc); if (pFunc->pComment) { char *b2 = taosMemoryCalloc(1, pShow->pMeta->pSchemas[cols].bytes); STR_WITH_MAXSIZE_TO_VARSTR(b2, pFunc->pComment, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)b2, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)b2, false); + if (code != 0) { + sdbRelease(pSdb, pFunc); + taosMemoryFree(b2); + TAOS_RETURN(code); + } taosMemoryFree(b2); } else { pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, NULL, true); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, NULL, true), pSdb, pFunc); + if (code != 0) { + sdbRelease(pSdb, pFunc); + TAOS_RETURN(code); + } } int32_t isAgg = (pFunc->funcType == TSDB_FUNC_TYPE_AGGREGATE) ? 1 : 0; pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&isAgg, false); - + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&isAgg, false), pSdb, pFunc); char b3[TSDB_TYPE_STR_MAX_LEN + 1] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(b3, mnodeGenTypeStr(buf, TSDB_TYPE_STR_MAX_LEN, pFunc->outputType, pFunc->outputLen), pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)b3, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)b3, false), pSdb, pFunc); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->createdTime, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->createdTime, false), pSdb, + pFunc); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->codeSize, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->codeSize, false), pSdb, + pFunc); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->bufSize, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->bufSize, false), pSdb, + pFunc); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); char *language = ""; @@ -697,7 +709,7 @@ static int32_t mndRetrieveFuncs(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl char varLang[TSDB_TYPE_STR_MAX_LEN + 1] = {0}; varDataSetLen(varLang, strlen(language)); strcpy(varDataVal(varLang), language); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)varLang, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)varLang, false), pSdb, pFunc); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); int32_t varCodeLen = (pFunc->codeSize + VARSTR_HEADER_SIZE) > TSDB_MAX_BINARY_LEN @@ -706,11 +718,17 @@ static int32_t mndRetrieveFuncs(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl char *b4 = taosMemoryMalloc(varCodeLen); (void)memcpy(varDataVal(b4), pFunc->pCode, varCodeLen - VARSTR_HEADER_SIZE); varDataSetLen(b4, varCodeLen - VARSTR_HEADER_SIZE); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)b4, false); + code = colDataSetVal(pColInfo, numOfRows, (const char *)b4, false); + if (code < 0) { + sdbRelease(pSdb, pFunc); + taosMemoryFree(b4); + TAOS_RETURN(code); + } taosMemoryFree(b4); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->funcVersion, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->funcVersion, false), pSdb, + pFunc); numOfRows++; sdbRelease(pSdb, pFunc); diff --git a/source/dnode/mnode/impl/src/mndQnode.c b/source/dnode/mnode/impl/src/mndQnode.c index 41d292a62f..1793acf9f2 100644 --- a/source/dnode/mnode/impl/src/mndQnode.c +++ b/source/dnode/mnode/impl/src/mndQnode.c @@ -14,13 +14,13 @@ */ #define _DEFAULT_SOURCE -#include "mndQnode.h" +#include "audit.h" #include "mndDnode.h" #include "mndPrivilege.h" +#include "mndQnode.h" #include "mndShow.h" #include "mndTrans.h" #include "mndUser.h" -#include "audit.h" #define QNODE_VER_NUMBER 1 #define QNODE_RESERVE_SIZE 64 @@ -209,9 +209,7 @@ int32_t mndSetCreateQnodeCommitLogs(STrans *pTrans, SQnodeObj *pObj) { TAOS_RETURN(code); } -bool mndQnodeInDnode(SQnodeObj *pQnode, int32_t dnodeId) { - return pQnode->pDnode->id == dnodeId; -} +bool mndQnodeInDnode(SQnodeObj *pQnode, int32_t dnodeId) { return pQnode->pDnode->id == dnodeId; } int32_t mndSetCreateQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQnodeObj *pObj) { int32_t code = 0; @@ -224,8 +222,11 @@ int32_t mndSetCreateQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQnodeOb terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } - (void)tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq); - + code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq); + if (code < 0) { + taosMemoryFree(pReq); + return code; + } STransAction action = {0}; action.epSet = mndGetDnodeEpset(pDnode); action.pCont = pReq; @@ -252,7 +253,11 @@ static int32_t mndSetCreateQnodeUndoActions(STrans *pTrans, SDnodeObj *pDnode, S code = terrno; TAOS_RETURN(code); } - (void)tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); + code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); + if (code < 0) { + taosMemoryFree(pReq); + TAOS_RETURN(code); + } STransAction action = {0}; action.epSet = mndGetDnodeEpset(pDnode); @@ -383,7 +388,11 @@ static int32_t mndSetDropQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQn code = terrno; TAOS_RETURN(code); } - (void)tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); + code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); + if (code < 0) { + taosMemoryFree(pReq); + TAOS_RETURN(code); + } STransAction action = {0}; action.epSet = mndGetDnodeEpset(pDnode); @@ -536,7 +545,11 @@ static int32_t mndProcessQnodeListReq(SRpcMsg *pReq) { goto _OVER; } - (void)tSerializeSQnodeListRsp(pRsp, rspLen, &qlistRsp); + code = tSerializeSQnodeListRsp(pRsp, rspLen, &qlistRsp); + if (code < 0) { + rpcFreeCont(pRsp); + goto _OVER; + } pReq->info.rspLen = rspLen; pReq->info.rsp = pRsp; @@ -561,15 +574,16 @@ static int32_t mndRetrieveQnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB cols = 0; SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pObj->id, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pObj->id, false), pSdb, pObj); char ep[TSDB_EP_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(ep, pObj->pDnode->ep, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)ep, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)ep, false), pSdb, pObj); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pObj->createdTime, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pObj->createdTime, false), pSdb, + pObj); numOfRows++; sdbRelease(pSdb, pObj); diff --git a/source/dnode/mnode/impl/src/mndSnode.c b/source/dnode/mnode/impl/src/mndSnode.c index 4616f50a79..3bfc7a7eea 100644 --- a/source/dnode/mnode/impl/src/mndSnode.c +++ b/source/dnode/mnode/impl/src/mndSnode.c @@ -14,10 +14,10 @@ */ #define _DEFAULT_SOURCE -#include "mndSnode.h" #include "mndDnode.h" #include "mndPrivilege.h" #include "mndShow.h" +#include "mndSnode.h" #include "mndTrans.h" #include "mndUser.h" @@ -223,7 +223,11 @@ static int32_t mndSetCreateSnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, S code = terrno; TAOS_RETURN(code); } - (void)tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq); + code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq); + if (code < 0) { + taosMemoryFree(pReq); + TAOS_RETURN(code); + } STransAction action = {0}; action.epSet = mndGetDnodeEpset(pDnode); @@ -251,7 +255,11 @@ static int32_t mndSetCreateSnodeUndoActions(STrans *pTrans, SDnodeObj *pDnode, S code = terrno; TAOS_RETURN(code); } - (void)tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); + code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); + if (code < 0) { + taosMemoryFree(pReq); + TAOS_RETURN(code); + } STransAction action = {0}; action.epSet = mndGetDnodeEpset(pDnode); @@ -320,7 +328,7 @@ static int32_t mndProcessCreateSnodeReq(SRpcMsg *pReq) { // goto _OVER; // } - if (sdbGetSize(pMnode->pSdb, SDB_SNODE) >= 1){ + if (sdbGetSize(pMnode->pSdb, SDB_SNODE) >= 1) { code = TSDB_CODE_MND_SNODE_ALREADY_EXIST; goto _OVER; } @@ -340,7 +348,7 @@ _OVER: TAOS_RETURN(code); } -// mndReleaseSnode(pMnode, pObj); + // mndReleaseSnode(pMnode, pObj); mndReleaseDnode(pMnode, pDnode); tFreeSMCreateQnodeReq(&createReq); TAOS_RETURN(code); @@ -383,7 +391,11 @@ static int32_t mndSetDropSnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SSn code = terrno; TAOS_RETURN(code); } - (void)tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); + code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); + if (code < 0) { + taosMemoryFree(pReq); + TAOS_RETURN(code); + } STransAction action = {0}; action.epSet = mndGetDnodeEpset(pDnode); @@ -482,16 +494,17 @@ static int32_t mndRetrieveSnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB cols = 0; SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pObj->id, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pObj->id, false), pSdb, pObj); char ep[TSDB_EP_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(ep, pObj->pDnode->ep, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)ep, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)ep, false), pSdb, pObj); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pObj->createdTime, false); + TAOS_CHECK_RETURN_WITH_RELEASE(colDataSetVal(pColInfo, numOfRows, (const char *)&pObj->createdTime, false), pSdb, + pObj); numOfRows++; sdbRelease(pSdb, pObj); diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index 8ca3d59868..99472ca457 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -220,14 +220,18 @@ _OVER: TAOS_RETURN(code); } int32_t ipWhiteMgtRemove(char *user) { - bool update = true; + bool update = true; + int32_t code = 0; (void)taosThreadRwlockWrlock(&ipWhiteMgt.rw); SIpWhiteList **ppList = taosHashGet(ipWhiteMgt.pIpWhiteTab, user, strlen(user)); if (ppList == NULL || *ppList == NULL) { update = false; } else { taosMemoryFree(*ppList); - (void)taosHashRemove(ipWhiteMgt.pIpWhiteTab, user, strlen(user)); + code = taosHashRemove(ipWhiteMgt.pIpWhiteTab, user, strlen(user)); + if (code != 0) { + update = false; + } } if (update) ipWhiteMgt.ver++; @@ -391,7 +395,9 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 if (pList != NULL) { if (isRangeInWhiteList(pList, &range)) { if (pList->num == 1) { - (void)taosHashRemove(pIpWhiteTab, user, strlen(user)); + if (taosHashRemove(pIpWhiteTab, user, strlen(user)) < 0) { + mError("failed to remove ip-white-list for user: %s at line %d", user, lino); + } taosMemoryFree(pList); } else { int32_t idx = 0; @@ -842,6 +848,7 @@ static int32_t createDefaultIpWhiteList(SIpWhiteList **ppWhiteList) { static int32_t mndCreateDefaultUser(SMnode *pMnode, char *acct, char *user, char *pass) { int32_t code = 0; + int32_t lino = 0; SUserObj userObj = {0}; taosEncryptPass_c((uint8_t *)pass, strlen(pass), userObj.pass); tstrncpy(userObj.user, user, TSDB_USER_LEN); @@ -859,7 +866,7 @@ static int32_t mndCreateDefaultUser(SMnode *pMnode, char *acct, char *user, char SSdbRaw *pRaw = mndUserActionEncode(&userObj); if (pRaw == NULL) goto _ERROR; - (void)sdbSetRawStatus(pRaw, SDB_STATUS_READY); + TAOS_CHECK_GOTO(sdbSetRawStatus(pRaw, SDB_STATUS_READY), &lino, _ERROR); mInfo("user:%s, will be created when deploying, raw:%p", userObj.user, pRaw); @@ -876,7 +883,7 @@ static int32_t mndCreateDefaultUser(SMnode *pMnode, char *acct, char *user, char mndTransDrop(pTrans); goto _ERROR; } - (void)sdbSetRawStatus(pRaw, SDB_STATUS_READY); + TAOS_CHECK_GOTO(sdbSetRawStatus(pRaw, SDB_STATUS_READY), &lino, _ERROR); if (mndTransPrepare(pMnode, pTrans) != 0) { mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); @@ -1775,7 +1782,7 @@ static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate mndTransDrop(pTrans); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + TAOS_CHECK_GOTO(sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY), &lino, _OVER); if (mndTransPrepare(pMnode, pTrans) != 0) { mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); @@ -1990,7 +1997,11 @@ static int32_t mndAlterUser(SMnode *pMnode, SUserObj *pOld, SUserObj *pNew, SRpc mndTransDrop(pTrans); TAOS_RETURN(terrno); } - (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + code = sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + if (code < 0) { + mndTransDrop(pTrans); + TAOS_RETURN(code); + } if (mndTransPrepare(pMnode, pTrans) != 0) { mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); @@ -2189,7 +2200,10 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode mndReleaseDb(pMnode, pDb); TAOS_CHECK_GOTO(terrno, &lino, _OVER); // TODO: refactor the terrno to code } - (void)taosHashRemove(pNewUser->readDbs, pAlterReq->objname, len); + code = taosHashRemove(pNewUser->readDbs, pAlterReq->objname, len); + if (code < 0) { + mError("read db:%s, failed to remove db:%s since %s", pNewUser->user, pAlterReq->objname, terrstr()); + } mndReleaseDb(pMnode, pDb); } else { taosHashClear(pNewUser->readDbs); @@ -2205,7 +2219,10 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode mndReleaseDb(pMnode, pDb); TAOS_CHECK_GOTO(terrno, &lino, _OVER); // TODO: refactor the terrno to code } - (void)taosHashRemove(pNewUser->writeDbs, pAlterReq->objname, len); + code = taosHashRemove(pNewUser->writeDbs, pAlterReq->objname, len); + if (code < 0) { + mError("user:%s, failed to remove db:%s since %s", pNewUser->user, pAlterReq->objname, terrstr()); + } mndReleaseDb(pMnode, pDb); } else { taosHashClear(pNewUser->writeDbs); @@ -2275,7 +2292,10 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode mndReleaseTopic(pMnode, pTopic); TAOS_CHECK_GOTO(code, &lino, _OVER); } - (void)taosHashRemove(pNewUser->topics, pAlterReq->objname, len); + code = taosHashRemove(pNewUser->topics, pAlterReq->objname, len); + if (code < 0) { + mError("user:%s, failed to remove topic:%s since %s", pNewUser->user, pAlterReq->objname, tstrerror(code)); + } mndReleaseTopic(pMnode, pTopic); } @@ -2461,7 +2481,7 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) { ALTER_USER_ADD_ALL_TB_PRIV(alterReq.alterType, alterReq.privileges, alterReq.tabName)) { if (strcmp(alterReq.objname, "1.*") != 0) { SName name = {0}; - (void)tNameFromString(&name, alterReq.objname, T_NAME_ACCT | T_NAME_DB); + TAOS_CHECK_GOTO(tNameFromString(&name, alterReq.objname, T_NAME_ACCT | T_NAME_DB), &lino, _OVER); auditRecord(pReq, pMnode->clusterId, "GrantPrivileges", name.dbname, alterReq.user, alterReq.sql, alterReq.sqlLen); } else { @@ -2476,7 +2496,7 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) { } else { if (strcmp(alterReq.objname, "1.*") != 0) { SName name = {0}; - (void)tNameFromString(&name, alterReq.objname, T_NAME_ACCT | T_NAME_DB); + TAOS_CHECK_GOTO(tNameFromString(&name, alterReq.objname, T_NAME_ACCT | T_NAME_DB), &lino, _OVER); auditRecord(pReq, pMnode->clusterId, "RevokePrivileges", name.dbname, alterReq.user, alterReq.sql, alterReq.sqlLen); } else { @@ -2511,7 +2531,10 @@ static int32_t mndDropUser(SMnode *pMnode, SRpcMsg *pReq, SUserObj *pUser) { mndTransDrop(pTrans); TAOS_RETURN(terrno); } - (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED); + if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED) < 0) { + mndTransDrop(pTrans); + TAOS_RETURN(terrno); + } if (mndTransPrepare(pMnode, pTrans) != 0) { mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); @@ -2982,7 +3005,11 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock SName name = {0}; char objName[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; - (void)tNameFromString(&name, db, T_NAME_ACCT | T_NAME_DB); + code = tNameFromString(&name, db, T_NAME_ACCT | T_NAME_DB); + if (code < 0) { + sdbRelease(pSdb, pUser); + TAOS_CHECK_GOTO(code, &lino, _exit); + } (void)tNameGetDbName(&name, varDataVal(objName)); varDataSetLen(objName, strlen(varDataVal(objName))); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); @@ -3026,7 +3053,11 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock SName name = {0}; char objName[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; - (void)tNameFromString(&name, db, T_NAME_ACCT | T_NAME_DB); + code = tNameFromString(&name, db, T_NAME_ACCT | T_NAME_DB); + if (code < 0) { + sdbRelease(pSdb, pUser); + TAOS_CHECK_GOTO(code, &lino, _exit); + } (void)tNameGetDbName(&name, varDataVal(objName)); varDataSetLen(objName, strlen(varDataVal(objName))); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); @@ -3213,6 +3244,7 @@ _OVER: int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db) { int32_t code = 0; + int32_t lino = 0; SSdb *pSdb = pMnode->pSdb; int32_t len = strlen(db) + 1; void *pIter = NULL; @@ -3230,15 +3262,21 @@ int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db) { bool inRead = (taosHashGet(newUser.readDbs, db, len) != NULL); bool inWrite = (taosHashGet(newUser.writeDbs, db, len) != NULL); if (inRead || inWrite) { - (void)taosHashRemove(newUser.readDbs, db, len); - (void)taosHashRemove(newUser.writeDbs, db, len); + code = taosHashRemove(newUser.readDbs, db, len); + if (code < 0) { + mError("failed to remove readDbs:%s from user:%s", db, pUser->user); + } + code = taosHashRemove(newUser.writeDbs, db, len); + if (code < 0) { + mError("failed to remove writeDbs:%s from user:%s", db, pUser->user); + } SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { code = TSDB_CODE_OUT_OF_MEMORY; break; } - (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + TAOS_CHECK_GOTO(sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY), &lino, _OVER); } mndUserFreeObj(&newUser); @@ -3272,16 +3310,30 @@ int32_t mndUserRemoveStb(SMnode *pMnode, STrans *pTrans, char *stb) { bool inWrite = (taosHashGet(newUser.writeTbs, stb, len) != NULL); bool inAlter = (taosHashGet(newUser.alterTbs, stb, len) != NULL); if (inRead || inWrite || inAlter) { - (void)taosHashRemove(newUser.readTbs, stb, len); - (void)taosHashRemove(newUser.writeTbs, stb, len); - (void)taosHashRemove(newUser.alterTbs, stb, len); + code = taosHashRemove(newUser.readTbs, stb, len); + if (code < 0) { + mError("failed to remove readTbs:%s from user:%s", stb, pUser->user); + } + code = taosHashRemove(newUser.writeTbs, stb, len); + if (code < 0) { + mError("failed to remove writeTbs:%s from user:%s", stb, pUser->user); + } + code = taosHashRemove(newUser.alterTbs, stb, len); + if (code < 0) { + mError("failed to remove alterTbs:%s from user:%s", stb, pUser->user); + } SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { code = TSDB_CODE_OUT_OF_MEMORY; break; } - (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + code = sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + if (code != 0) { + mndUserFreeObj(&newUser); + sdbRelease(pSdb, pUser); + TAOS_RETURN(code); + } } mndUserFreeObj(&newUser); @@ -3314,16 +3366,30 @@ int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view) { bool inWrite = (taosHashGet(newUser.writeViews, view, len) != NULL); bool inAlter = (taosHashGet(newUser.alterViews, view, len) != NULL); if (inRead || inWrite || inAlter) { - (void)taosHashRemove(newUser.readViews, view, len); - (void)taosHashRemove(newUser.writeViews, view, len); - (void)taosHashRemove(newUser.alterViews, view, len); + code = taosHashRemove(newUser.readViews, view, len); + if (code < 0) { + mError("failed to remove readViews:%s from user:%s", view, pUser->user); + } + code = taosHashRemove(newUser.writeViews, view, len); + if (code < 0) { + mError("failed to remove writeViews:%s from user:%s", view, pUser->user); + } + code = taosHashRemove(newUser.alterViews, view, len); + if (code < 0) { + mError("failed to remove alterViews:%s from user:%s", view, pUser->user); + } SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { code = TSDB_CODE_OUT_OF_MEMORY; break; } - (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + code = sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + if (code < 0) { + mndUserFreeObj(&newUser); + sdbRelease(pSdb, pUser); + TAOS_RETURN(code); + } } mndUserFreeObj(&newUser); @@ -3356,13 +3422,21 @@ int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic) { bool inTopic = (taosHashGet(newUser.topics, topic, len) != NULL); if (inTopic) { - (void)taosHashRemove(newUser.topics, topic, len); + code = taosHashRemove(newUser.topics, topic, len); + if (code < 0) { + mError("failed to remove topic:%s from user:%s", topic, pUser->user); + } SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { code = TSDB_CODE_OUT_OF_MEMORY; break; } - (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + code = sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); + if (code < 0) { + mndUserFreeObj(&newUser); + sdbRelease(pSdb, pUser); + TAOS_RETURN(code); + } } mndUserFreeObj(&newUser); From 1e61539838d967b8e82c37d4becaf0d29394e680 Mon Sep 17 00:00:00 2001 From: xiao-77 Date: Fri, 20 Sep 2024 18:14:18 +0800 Subject: [PATCH 08/27] fix ci scan --- source/dnode/mnode/impl/src/mndMain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index a969f628df..208d0205a5 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -706,7 +706,7 @@ SMnode *mndOpen(const char *path, const SMnodeOpt *pOption) { code = taosParseTime(timestr, &pMnode->checkTime, (int32_t)strlen(timestr), TSDB_TIME_PRECISION_MILLI, 0); if (code < 0) { mError("failed to parse time since %s", tstrerror(code)); - taosThreadRwlockDestroy(&pMnode->lock); + (void)taosThreadRwlockDestroy(&pMnode->lock); taosMemoryFree(pMnode); return NULL; } From 4acfdfe403f69aa1d506c9f4b8a1e3728fc8484b Mon Sep 17 00:00:00 2001 From: sheyanjie-qq <249478495@qq.com> Date: Sat, 21 Sep 2024 17:04:30 +0800 Subject: [PATCH 09/27] merge --- .../example/ParameterBindingFullDemo.java | 321 +++++------------- .../example/WSParameterBindingFullDemo.java | 181 ++++------ .../src/test/java/com/taos/test/TestAll.java | 76 +++-- docs/examples/rust/nativeexample/Cargo.toml | 1 + .../rust/nativeexample/examples/stmt_all.rs | 121 +++++++ .../nativeexample/examples/stmt_json_tag.rs | 94 +++++ .../rust/restexample/examples/stmt_all.rs | 121 +++++++ docs/zh/14-reference/05-connector/26-rust.mdx | 2 + .../20-third-party/01-collection/11-kafka.md | 34 +- 9 files changed, 570 insertions(+), 381 deletions(-) create mode 100644 docs/examples/rust/nativeexample/examples/stmt_all.rs create mode 100644 docs/examples/rust/nativeexample/examples/stmt_json_tag.rs create mode 100644 docs/examples/rust/restexample/examples/stmt_all.rs diff --git a/docs/examples/java/src/main/java/com/taos/example/ParameterBindingFullDemo.java b/docs/examples/java/src/main/java/com/taos/example/ParameterBindingFullDemo.java index 5eb0cf0a61..dfb2915037 100644 --- a/docs/examples/java/src/main/java/com/taos/example/ParameterBindingFullDemo.java +++ b/docs/examples/java/src/main/java/com/taos/example/ParameterBindingFullDemo.java @@ -3,10 +3,7 @@ package com.taos.example; import com.taosdata.jdbc.TSDBPreparedStatement; import com.taosdata.jdbc.utils.StringUtils; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; +import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -16,15 +13,32 @@ public class ParameterBindingFullDemo { private static final String host = "127.0.0.1"; private static final Random random = new Random(System.currentTimeMillis()); - private static final int BINARY_COLUMN_SIZE = 50; + private static final int BINARY_COLUMN_SIZE = 100; private static final String[] schemaList = { - "create table stable1(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint) tags(t1 tinyint, t2 smallint, t3 int, t4 bigint)", - "create table stable2(ts timestamp, f1 float, f2 double) tags(t1 float, t2 double)", - "create table stable3(ts timestamp, f1 bool) tags(t1 bool)", - "create table stable4(ts timestamp, f1 binary(" + BINARY_COLUMN_SIZE + ")) tags(t1 binary(" + BINARY_COLUMN_SIZE + "))", - "create table stable5(ts timestamp, f1 nchar(" + BINARY_COLUMN_SIZE + ")) tags(t1 nchar(" + BINARY_COLUMN_SIZE + "))", - "create table stable6(ts timestamp, f1 varbinary(" + BINARY_COLUMN_SIZE + ")) tags(t1 varbinary(" + BINARY_COLUMN_SIZE + "))", - "create table stable7(ts timestamp, f1 geometry(" + BINARY_COLUMN_SIZE + ")) tags(t1 geometry(" + BINARY_COLUMN_SIZE + "))", + "drop database if exists example_all_type_stmt", + "CREATE DATABASE IF NOT EXISTS example_all_type_stmt", + "USE example_all_type_stmt", + "CREATE STABLE IF NOT EXISTS stb_json (" + + "ts TIMESTAMP, " + + "int_col INT) " + + "tags (json_tag json)", + "CREATE STABLE IF NOT EXISTS stb (" + + "ts TIMESTAMP, " + + "int_col INT, " + + "double_col DOUBLE, " + + "bool_col BOOL, " + + "binary_col BINARY(100), " + + "nchar_col NCHAR(100), " + + "varbinary_col VARBINARY(100), " + + "geometry_col GEOMETRY(100)) " + + "tags (" + + "int_tag INT, " + + "double_tag DOUBLE, " + + "bool_tag BOOL, " + + "binary_tag BINARY(100), " + + "nchar_tag NCHAR(100), " + + "varbinary_tag VARBINARY(100), " + + "geometry_tag GEOMETRY(100))" }; private static final int numOfSubTable = 10, numOfRow = 10; @@ -34,55 +48,37 @@ public class ParameterBindingFullDemo { try (Connection conn = DriverManager.getConnection(jdbcUrl, "root", "taosdata")) { init(conn); + stmtJsonTag(conn); + stmtAll(conn); - bindInteger(conn); - bindFloat(conn); - bindBoolean(conn); - bindBytes(conn); - bindString(conn); - bindVarbinary(conn); - bindGeometry(conn); - - clean(conn); } catch (SQLException ex) { // handle any errors, please refer to the JDBC specifications for detailed exceptions info - System.out.println("Failed to insert to table meters using stmt, url: " + jdbcUrl + "; ErrCode:" + ex.getErrorCode() + "; ErrMessage: " + ex.getMessage()); + System.out.println("Failed to insert data using stmt, ErrCode:" + ex.getErrorCode() + "; ErrMessage: " + ex.getMessage()); throw ex; - } catch (Exception ex){ - System.out.println("Failed to insert to table meters using stmt, url: " + jdbcUrl + "; ErrMessage: " + ex.getMessage()); + } catch (Exception ex) { + System.out.println("Failed to insert data using stmt, ErrMessage: " + ex.getMessage()); throw ex; } } private static void init(Connection conn) throws SQLException { - clean(conn); try (Statement stmt = conn.createStatement()) { - stmt.execute("create database if not exists test_parabind"); - stmt.execute("use test_parabind"); for (int i = 0; i < schemaList.length; i++) { stmt.execute(schemaList[i]); } } } - private static void clean(Connection conn) throws SQLException { - try (Statement stmt = conn.createStatement()) { - stmt.execute("drop database if exists test_parabind"); - } - } - private static void bindInteger(Connection conn) throws SQLException { - String sql = "insert into ? using stable1 tags(?,?,?,?) values(?,?,?,?,?)"; + private static void stmtJsonTag(Connection conn) throws SQLException { + String sql = "INSERT INTO ? using stb_json tags(?) VALUES (?,?)"; try (TSDBPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSDBPreparedStatement.class)) { for (int i = 1; i <= numOfSubTable; i++) { // set table name - pstmt.setTableName("t1_" + i); + pstmt.setTableName("ntb_json_" + i); // set tags - pstmt.setTagByte(0, Byte.parseByte(Integer.toString(random.nextInt(Byte.MAX_VALUE)))); - pstmt.setTagShort(1, Short.parseShort(Integer.toString(random.nextInt(Short.MAX_VALUE)))); - pstmt.setTagInt(2, random.nextInt(Integer.MAX_VALUE)); - pstmt.setTagLong(3, random.nextLong()); + pstmt.setTagJson(0, "{\"device\":\"device_" + i + "\"}"); // set columns ArrayList tsList = new ArrayList<>(); long current = System.currentTimeMillis(); @@ -90,45 +86,42 @@ public class ParameterBindingFullDemo { tsList.add(current + j); pstmt.setTimestamp(0, tsList); - ArrayList f1List = new ArrayList<>(); + ArrayList f1List = new ArrayList<>(); for (int j = 0; j < numOfRow; j++) - f1List.add(Byte.parseByte(Integer.toString(random.nextInt(Byte.MAX_VALUE)))); - pstmt.setByte(1, f1List); - - ArrayList f2List = new ArrayList<>(); - for (int j = 0; j < numOfRow; j++) - f2List.add(Short.parseShort(Integer.toString(random.nextInt(Short.MAX_VALUE)))); - pstmt.setShort(2, f2List); - - ArrayList f3List = new ArrayList<>(); - for (int j = 0; j < numOfRow; j++) - f3List.add(random.nextInt(Integer.MAX_VALUE)); - pstmt.setInt(3, f3List); - - ArrayList f4List = new ArrayList<>(); - for (int j = 0; j < numOfRow; j++) - f4List.add(random.nextLong()); - pstmt.setLong(4, f4List); + f1List.add(random.nextInt(Integer.MAX_VALUE)); + pstmt.setInt(1, f1List); // add column pstmt.columnDataAddBatch(); } // execute column pstmt.columnDataExecuteBatch(); + System.out.println("Successfully inserted rows to example_all_type_stmt.ntb_json"); } } - private static void bindFloat(Connection conn) throws SQLException { - String sql = "insert into ? using stable2 tags(?,?) values(?,?,?)"; + private static void stmtAll(Connection conn) throws SQLException { + String sql = "INSERT INTO ? using stb tags(?,?,?,?,?,?,?) VALUES (?,?,?,?,?,?,?,?)"; TSDBPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSDBPreparedStatement.class); for (int i = 1; i <= numOfSubTable; i++) { // set table name - pstmt.setTableName("t2_" + i); + pstmt.setTableName("ntb" + i); // set tags - pstmt.setTagFloat(0, random.nextFloat()); - pstmt.setTagDouble(1, random.nextDouble()); + pstmt.setTagInt(0, i); + pstmt.setTagDouble(1, 1.1); + pstmt.setTagBoolean(2, true); + pstmt.setTagString(3, "binary_value"); + pstmt.setTagNString(4, "nchar_value"); + pstmt.setTagVarbinary(5, new byte[]{(byte) 0x98, (byte) 0xf4, 0x6e}); + pstmt.setTagGeometry(6, new byte[]{ + 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x59, + 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x59, 0x40}); + // set columns ArrayList tsList = new ArrayList<>(); long current = System.currentTimeMillis(); @@ -136,190 +129,54 @@ public class ParameterBindingFullDemo { tsList.add(current + j); pstmt.setTimestamp(0, tsList); - ArrayList f1List = new ArrayList<>(); + ArrayList f1List = new ArrayList<>(); for (int j = 0; j < numOfRow; j++) - f1List.add(random.nextFloat()); - pstmt.setFloat(1, f1List); + f1List.add(random.nextInt(Integer.MAX_VALUE)); + pstmt.setInt(1, f1List); ArrayList f2List = new ArrayList<>(); for (int j = 0; j < numOfRow; j++) f2List.add(random.nextDouble()); pstmt.setDouble(2, f2List); + ArrayList f3List = new ArrayList<>(); + for (int j = 0; j < numOfRow; j++) + f3List.add(true); + pstmt.setBoolean(3, f3List); + + ArrayList f4List = new ArrayList<>(); + for (int j = 0; j < numOfRow; j++) + f4List.add("binary_value"); + pstmt.setString(4, f4List, BINARY_COLUMN_SIZE); + + ArrayList f5List = new ArrayList<>(); + for (int j = 0; j < numOfRow; j++) + f5List.add("nchar_value"); + pstmt.setNString(5, f5List, BINARY_COLUMN_SIZE); + + ArrayList f6List = new ArrayList<>(); + for (int j = 0; j < numOfRow; j++) + f6List.add(new byte[]{(byte) 0x98, (byte) 0xf4, 0x6e}); + pstmt.setVarbinary(6, f6List, BINARY_COLUMN_SIZE); + + ArrayList f7List = new ArrayList<>(); + for (int j = 0; j < numOfRow; j++) + f7List.add(new byte[]{ + 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x59, + 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x59, 0x40}); + pstmt.setGeometry(7, f7List, BINARY_COLUMN_SIZE); + // add column pstmt.columnDataAddBatch(); } // execute pstmt.columnDataExecuteBatch(); + System.out.println("Successfully inserted rows to example_all_type_stmt.ntb"); // close if no try-with-catch statement is used pstmt.close(); } - - private static void bindBoolean(Connection conn) throws SQLException { - String sql = "insert into ? using stable3 tags(?) values(?,?)"; - - try (TSDBPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSDBPreparedStatement.class)) { - for (int i = 1; i <= numOfSubTable; i++) { - // set table name - pstmt.setTableName("t3_" + i); - // set tags - pstmt.setTagBoolean(0, random.nextBoolean()); - // set columns - ArrayList tsList = new ArrayList<>(); - long current = System.currentTimeMillis(); - for (int j = 0; j < numOfRow; j++) - tsList.add(current + j); - pstmt.setTimestamp(0, tsList); - - ArrayList f1List = new ArrayList<>(); - for (int j = 0; j < numOfRow; j++) - f1List.add(random.nextBoolean()); - pstmt.setBoolean(1, f1List); - - // add column - pstmt.columnDataAddBatch(); - } - // execute - pstmt.columnDataExecuteBatch(); - } - } - - private static void bindBytes(Connection conn) throws SQLException { - String sql = "insert into ? using stable4 tags(?) values(?,?)"; - - try (TSDBPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSDBPreparedStatement.class)) { - - for (int i = 1; i <= numOfSubTable; i++) { - // set table name - pstmt.setTableName("t4_" + i); - // set tags - pstmt.setTagString(0, new String("abc")); - - // set columns - ArrayList tsList = new ArrayList<>(); - long current = System.currentTimeMillis(); - for (int j = 0; j < numOfRow; j++) - tsList.add(current + j); - pstmt.setTimestamp(0, tsList); - - ArrayList f1List = new ArrayList<>(); - for (int j = 0; j < numOfRow; j++) { - f1List.add(new String("abc")); - } - pstmt.setString(1, f1List, BINARY_COLUMN_SIZE); - - // add column - pstmt.columnDataAddBatch(); - } - // execute - pstmt.columnDataExecuteBatch(); - } - } - - private static void bindString(Connection conn) throws SQLException { - String sql = "insert into ? using stable5 tags(?) values(?,?)"; - - try (TSDBPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSDBPreparedStatement.class)) { - - for (int i = 1; i <= numOfSubTable; i++) { - // set table name - pstmt.setTableName("t5_" + i); - // set tags - pstmt.setTagNString(0, "California.SanFrancisco"); - - // set columns - ArrayList tsList = new ArrayList<>(); - long current = System.currentTimeMillis(); - for (int j = 0; j < numOfRow; j++) - tsList.add(current + j); - pstmt.setTimestamp(0, tsList); - - ArrayList f1List = new ArrayList<>(); - for (int j = 0; j < numOfRow; j++) { - f1List.add("California.LosAngeles"); - } - pstmt.setNString(1, f1List, BINARY_COLUMN_SIZE); - - // add column - pstmt.columnDataAddBatch(); - } - // execute - pstmt.columnDataExecuteBatch(); - } - } - - private static void bindVarbinary(Connection conn) throws SQLException { - String sql = "insert into ? using stable6 tags(?) values(?,?)"; - - try (TSDBPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSDBPreparedStatement.class)) { - - for (int i = 1; i <= numOfSubTable; i++) { - // set table name - pstmt.setTableName("t6_" + i); - // set tags - byte[] bTag = new byte[]{0,2,3,4,5}; - bTag[0] = (byte) i; - pstmt.setTagVarbinary(0, bTag); - - // set columns - ArrayList tsList = new ArrayList<>(); - long current = System.currentTimeMillis(); - for (int j = 0; j < numOfRow; j++) - tsList.add(current + j); - pstmt.setTimestamp(0, tsList); - - ArrayList f1List = new ArrayList<>(); - for (int j = 0; j < numOfRow; j++) { - byte[] v = new byte[]{0,2,3,4,5,6}; - v[0] = (byte)j; - f1List.add(v); - } - pstmt.setVarbinary(1, f1List, BINARY_COLUMN_SIZE); - - // add column - pstmt.columnDataAddBatch(); - } - // execute - pstmt.columnDataExecuteBatch(); - } - } - - private static void bindGeometry(Connection conn) throws SQLException { - String sql = "insert into ? using stable7 tags(?) values(?,?)"; - - try (TSDBPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSDBPreparedStatement.class)) { - - byte[] g1 = StringUtils.hexToBytes("0101000000000000000000F03F0000000000000040"); - byte[] g2 = StringUtils.hexToBytes("0102000020E610000002000000000000000000F03F000000000000004000000000000008400000000000001040"); - List listGeo = new ArrayList<>(); - listGeo.add(g1); - listGeo.add(g2); - - for (int i = 1; i <= 2; i++) { - // set table name - pstmt.setTableName("t7_" + i); - // set tags - pstmt.setTagGeometry(0, listGeo.get(i - 1)); - - // set columns - ArrayList tsList = new ArrayList<>(); - long current = System.currentTimeMillis(); - for (int j = 0; j < numOfRow; j++) - tsList.add(current + j); - pstmt.setTimestamp(0, tsList); - - ArrayList f1List = new ArrayList<>(); - for (int j = 0; j < numOfRow; j++) { - f1List.add(listGeo.get(i - 1)); - } - pstmt.setGeometry(1, f1List, BINARY_COLUMN_SIZE); - - // add column - pstmt.columnDataAddBatch(); - } - // execute - pstmt.columnDataExecuteBatch(); - } - } } // ANCHOR_END: para_bind diff --git a/docs/examples/java/src/main/java/com/taos/example/WSParameterBindingFullDemo.java b/docs/examples/java/src/main/java/com/taos/example/WSParameterBindingFullDemo.java index ec94f2ded6..f23fb187f4 100644 --- a/docs/examples/java/src/main/java/com/taos/example/WSParameterBindingFullDemo.java +++ b/docs/examples/java/src/main/java/com/taos/example/WSParameterBindingFullDemo.java @@ -11,11 +11,30 @@ public class WSParameterBindingFullDemo { private static final Random random = new Random(System.currentTimeMillis()); private static final int BINARY_COLUMN_SIZE = 30; private static final String[] schemaList = { - "create table stable1(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint) tags(t1 tinyint, t2 smallint, t3 int, t4 bigint)", - "create table stable2(ts timestamp, f1 float, f2 double) tags(t1 float, t2 double)", - "create table stable3(ts timestamp, f1 bool) tags(t1 bool)", - "create table stable4(ts timestamp, f1 binary(" + BINARY_COLUMN_SIZE + ")) tags(t1 binary(" + BINARY_COLUMN_SIZE + "))", - "create table stable5(ts timestamp, f1 nchar(" + BINARY_COLUMN_SIZE + ")) tags(t1 nchar(" + BINARY_COLUMN_SIZE + "))" + "drop database if exists example_all_type_stmt", + "CREATE DATABASE IF NOT EXISTS example_all_type_stmt", + "USE example_all_type_stmt", + "CREATE STABLE IF NOT EXISTS stb_json (" + + "ts TIMESTAMP, " + + "int_col INT) " + + "tags (json_tag json)", + "CREATE STABLE IF NOT EXISTS stb (" + + "ts TIMESTAMP, " + + "int_col INT, " + + "double_col DOUBLE, " + + "bool_col BOOL, " + + "binary_col BINARY(100), " + + "nchar_col NCHAR(100), " + + "varbinary_col VARBINARY(100), " + + "geometry_col GEOMETRY(100)) " + + "tags (" + + "int_tag INT, " + + "double_tag DOUBLE, " + + "bool_tag BOOL, " + + "binary_tag BINARY(100), " + + "nchar_tag NCHAR(100), " + + "varbinary_tag VARBINARY(100), " + + "geometry_tag GEOMETRY(100))" }; private static final int numOfSubTable = 10, numOfRow = 10; @@ -27,153 +46,91 @@ public class WSParameterBindingFullDemo { init(conn); - bindInteger(conn); + stmtJsonTag(conn); - bindFloat(conn); - - bindBoolean(conn); - - bindBytes(conn); - - bindString(conn); + stmtAll(conn); } catch (SQLException ex) { // handle any errors, please refer to the JDBC specifications for detailed exceptions info - System.out.println("Failed to insert to table meters using stmt, url: " + jdbcUrl + "; ErrCode:" + ex.getErrorCode() + "; ErrMessage: " + ex.getMessage()); + System.out.println("Failed to insert data using stmt, ErrCode:" + ex.getErrorCode() + "; ErrMessage: " + ex.getMessage()); throw ex; - } catch (Exception ex){ - System.out.println("Failed to insert to table meters using stmt, url: " + jdbcUrl + "; ErrMessage: " + ex.getMessage()); + } catch (Exception ex) { + System.out.println("Failed to insert data using stmt, ErrMessage: " + ex.getMessage()); throw ex; } } private static void init(Connection conn) throws SQLException { try (Statement stmt = conn.createStatement()) { - stmt.execute("drop database if exists test_ws_parabind"); - stmt.execute("create database if not exists test_ws_parabind"); - stmt.execute("use test_ws_parabind"); for (int i = 0; i < schemaList.length; i++) { stmt.execute(schemaList[i]); } } } - private static void bindInteger(Connection conn) throws SQLException { - String sql = "insert into ? using stable1 tags(?,?,?,?) values(?,?,?,?,?)"; + private static void stmtJsonTag(Connection conn) throws SQLException { + String sql = "INSERT INTO ? using stb_json tags(?) VALUES (?,?)"; try (TSWSPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSWSPreparedStatement.class)) { for (int i = 1; i <= numOfSubTable; i++) { // set table name - pstmt.setTableName("t1_" + i); + pstmt.setTableName("ntb_json_" + i); // set tags - pstmt.setTagByte(1, Byte.parseByte(Integer.toString(random.nextInt(Byte.MAX_VALUE)))); - pstmt.setTagShort(2, Short.parseShort(Integer.toString(random.nextInt(Short.MAX_VALUE)))); - pstmt.setTagInt(3, random.nextInt(Integer.MAX_VALUE)); - pstmt.setTagLong(4, random.nextLong()); + pstmt.setTagJson(1, "{\"device\":\"device_" + i + "\"}"); // set columns long current = System.currentTimeMillis(); for (int j = 0; j < numOfRow; j++) { pstmt.setTimestamp(1, new Timestamp(current + j)); - pstmt.setByte(2, Byte.parseByte(Integer.toString(random.nextInt(Byte.MAX_VALUE)))); - pstmt.setShort(3, Short.parseShort(Integer.toString(random.nextInt(Short.MAX_VALUE)))); - pstmt.setInt(4, random.nextInt(Integer.MAX_VALUE)); - pstmt.setLong(5, random.nextLong()); + pstmt.setInt(2, j); pstmt.addBatch(); } pstmt.executeBatch(); } + System.out.println("Successfully inserted rows to example_all_type_stmt.ntb_json"); } } - private static void bindFloat(Connection conn) throws SQLException { - String sql = "insert into ? using stable2 tags(?,?) values(?,?,?)"; - - try(TSWSPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSWSPreparedStatement.class)) { - - for (int i = 1; i <= numOfSubTable; i++) { - // set table name - pstmt.setTableName("t2_" + i); - // set tags - pstmt.setTagFloat(1, random.nextFloat()); - pstmt.setTagDouble(2, random.nextDouble()); - // set columns - long current = System.currentTimeMillis(); - for (int j = 0; j < numOfRow; j++) { - pstmt.setTimestamp(1, new Timestamp(current + j)); - pstmt.setFloat(2, random.nextFloat()); - pstmt.setDouble(3, random.nextDouble()); - pstmt.addBatch(); - } - pstmt.executeBatch(); - } - } - } - - private static void bindBoolean(Connection conn) throws SQLException { - String sql = "insert into ? using stable3 tags(?) values(?,?)"; - - try (TSWSPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSWSPreparedStatement.class)) { - for (int i = 1; i <= numOfSubTable; i++) { - // set table name - pstmt.setTableName("t3_" + i); - // set tags - pstmt.setTagBoolean(1, random.nextBoolean()); - // set columns - long current = System.currentTimeMillis(); - for (int j = 0; j < numOfRow; j++) { - pstmt.setTimestamp(1, new Timestamp(current + j)); - pstmt.setBoolean(2, random.nextBoolean()); - pstmt.addBatch(); - } - pstmt.executeBatch(); - } - } - } - - private static void bindBytes(Connection conn) throws SQLException { - String sql = "insert into ? using stable4 tags(?) values(?,?)"; + private static void stmtAll(Connection conn) throws SQLException { + String sql = "INSERT INTO ? using stb tags(?,?,?,?,?,?,?) VALUES (?,?,?,?,?,?,?,?)"; try (TSWSPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSWSPreparedStatement.class)) { - for (int i = 1; i <= numOfSubTable; i++) { - // set table name - pstmt.setTableName("t4_" + i); - // set tags - pstmt.setTagString(1, new String("abc")); + // set table name + pstmt.setTableName("ntb"); + // set tags + pstmt.setTagInt(1, 1); + pstmt.setTagDouble(2, 1.1); + pstmt.setTagBoolean(3, true); + pstmt.setTagString(4, "binary_value"); + pstmt.setTagNString(5, "nchar_value"); + pstmt.setTagVarbinary(6, new byte[]{(byte) 0x98, (byte) 0xf4, 0x6e}); + pstmt.setTagGeometry(7, new byte[]{ + 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x59, + 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x59, 0x40}); - // set columns - long current = System.currentTimeMillis(); - for (int j = 0; j < numOfRow; j++) { - pstmt.setTimestamp(1, new Timestamp(current + j)); - pstmt.setString(2, "abc"); - pstmt.addBatch(); - } - pstmt.executeBatch(); - } - } - } + long current = System.currentTimeMillis(); - private static void bindString(Connection conn) throws SQLException { - String sql = "insert into ? using stable5 tags(?) values(?,?)"; - try (TSWSPreparedStatement pstmt = conn.prepareStatement(sql).unwrap(TSWSPreparedStatement.class)) { - - for (int i = 1; i <= numOfSubTable; i++) { - // set table name - pstmt.setTableName("t5_" + i); - // set tags - pstmt.setTagNString(1, "California.SanFrancisco"); - - // set columns - long current = System.currentTimeMillis(); - for (int j = 0; j < numOfRow; j++) { - pstmt.setTimestamp(0, new Timestamp(current + j)); - pstmt.setNString(1, "California.SanFrancisco"); - pstmt.addBatch(); - } - pstmt.executeBatch(); - } + pstmt.setTimestamp(1, new Timestamp(current)); + pstmt.setInt(2, 1); + pstmt.setDouble(3, 1.1); + pstmt.setBoolean(4, true); + pstmt.setString(5, "binary_value"); + pstmt.setNString(6, "nchar_value"); + pstmt.setVarbinary(7, new byte[]{(byte) 0x98, (byte) 0xf4, 0x6e}); + pstmt.setGeometry(8, new byte[]{ + 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x59, + 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x59, 0x40}); + pstmt.addBatch(); + pstmt.executeBatch(); + System.out.println("Successfully inserted rows to example_all_type_stmt.ntb"); } } } diff --git a/docs/examples/java/src/test/java/com/taos/test/TestAll.java b/docs/examples/java/src/test/java/com/taos/test/TestAll.java index 6a45c5fd5b..e014a3b315 100644 --- a/docs/examples/java/src/test/java/com/taos/test/TestAll.java +++ b/docs/examples/java/src/test/java/com/taos/test/TestAll.java @@ -50,36 +50,68 @@ public class TestAll { } @Test - public void testRestInsert() throws SQLException { - dropDB("power"); - RestInsertExample.main(args); - RestQueryExample.main(args); + public void testWsConnect() throws Exception { + WSConnectExample.main(args); } @Test - public void testStmtInsert() throws SQLException { + public void testBase() throws Exception { + JdbcCreatDBDemo.main(args); + JdbcInsertDataDemo.main(args); + JdbcQueryDemo.main(args); + dropDB("power"); - StmtInsertExample.main(args); } @Test - public void testSubscribe() { + public void testWsSchemaless() throws Exception { + dropDB("power"); + SchemalessWsTest.main(args); + } + @Test + public void testJniSchemaless() throws Exception { + dropDB("power"); + SchemalessJniTest.main(args); + } + + @Test + public void testJniStmtBasic() throws Exception { + dropDB("power"); + ParameterBindingBasicDemo.main(args); + } + + @Test + public void testJniStmtFull() throws Exception { + dropDB("power"); + ParameterBindingFullDemo.main(args); + } + + @Test + public void testWsStmtBasic() throws Exception { + dropDB("power"); + WSParameterBindingBasicDemo.main(args); + } + + @Test + public void testWsStmtFull() throws Exception { + dropDB("power"); + WSParameterBindingFullDemo.main(args); + } + + @Test + public void testConsumer() throws Exception { + dropDB("power"); SubscribeDemo.main(args); } - - @Test - public void testSubscribeOverWebsocket() { - WebsocketSubscribeDemo.main(args); - } - - @Test - public void testSchemaless() throws SQLException { - LineProtocolExample.main(args); - TelnetLineProtocolExample.main(args); - // for json protocol, tags may be double type. but for telnet protocol tag must be nchar type. - // To avoid type mismatch, we delete database test. - dropDB("test"); - JSONProtocolExample.main(args); - } +// @Test +// public void testSubscribeJni() throws SQLException, InterruptedException { +// dropDB("power"); +// ConsumerLoopFull.main(args); +// } +// @Test +// public void testSubscribeWs() throws SQLException, InterruptedException { +// dropDB("power"); +// WsConsumerLoopFull.main(args); +// } } diff --git a/docs/examples/rust/nativeexample/Cargo.toml b/docs/examples/rust/nativeexample/Cargo.toml index 13e68d6d9d..041ca4f617 100644 --- a/docs/examples/rust/nativeexample/Cargo.toml +++ b/docs/examples/rust/nativeexample/Cargo.toml @@ -8,6 +8,7 @@ edition = "2021" anyhow = "1" chrono = "0.4" serde = { version = "1", features = ["derive"] } +serde_json = "1.0" tokio = { version = "1", features = ["rt", "macros", "rt-multi-thread"] } log = "0.4" pretty_env_logger = "0.5.0" diff --git a/docs/examples/rust/nativeexample/examples/stmt_all.rs b/docs/examples/rust/nativeexample/examples/stmt_all.rs new file mode 100644 index 0000000000..6560d8a0ab --- /dev/null +++ b/docs/examples/rust/nativeexample/examples/stmt_all.rs @@ -0,0 +1,121 @@ +use taos::*; +use taos_query::util::hex::hex_string_to_bytes; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let dsn = "taos://"; + let taos = TaosBuilder::from_dsn(dsn)?.build().await?; + + taos.exec("DROP DATABASE IF EXISTS example_all_type_stmt") + .await?; + taos.create_database("example_all_type_stmt").await?; + taos.use_database("example_all_type_stmt").await?; + taos.exec( + r#" + CREATE STABLE IF NOT EXISTS stb ( + ts TIMESTAMP, + int_col INT, + double_col DOUBLE, + bool_col BOOL, + binary_col BINARY(100), + nchar_col NCHAR(100), + varbinary_col VARBINARY(100), + geometry_col GEOMETRY(100)) + TAGS ( + int_tag INT, + double_tag DOUBLE, + bool_tag BOOL, + binary_tag BINARY(100), + nchar_tag NCHAR(100)) + "#, + ) + .await?; + + let mut stmt = Stmt::init(&taos).await?; + stmt.prepare("INSERT INTO ? using stb tags(?,?,?,?,?) VALUES (?,?,?,?,?,?,?,?)") + .await?; + + const NUM_TABLES: usize = 10; + const NUM_ROWS: usize = 10; + for i in 0..NUM_TABLES { + let table_name = format!("d_bind_{}", i); + let tags = vec![ + Value::Int(i as i32), + Value::Double(1.1), + Value::Bool(true), + Value::VarChar("binary_value".into()), + Value::NChar("nchar_value".into()), + // Value::VarBinary(vec![0x98, 0xf4, 0x6e].into()), + // Value::Geometry( + // vec![ + // 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, + // ] + // .into(), + // ), + ]; + + // set table name and tags for the prepared statement. + match stmt.set_tbname_tags(&table_name, &tags).await { + Ok(_) => {} + Err(err) => { + eprintln!( + "Failed to set table name and tags, table_name:{}, tags:{:?}, ErrMessage: {}", + table_name, tags, err + ); + return Err(err.into()); + } + } + for j in 0..NUM_ROWS { + let values = vec![ + ColumnView::from_millis_timestamp(vec![1648432611249 + j as i64]), + ColumnView::from_ints(vec![j as i32]), + ColumnView::from_doubles(vec![1.1]), + ColumnView::from_bools(vec![true]), + ColumnView::from_varchar(vec!["ABC"]), + ColumnView::from_nchar(vec!["涛思数据"]), + ColumnView::from_bytes(vec![hex_string_to_bytes("123456").to_vec()]), + ColumnView::from_geobytes(vec![hex_string_to_bytes( + "0101000000000000000000F03F0000000000000040", + ) + .to_vec()]), + ]; + // bind values to the prepared statement. + match stmt.bind(&values).await { + Ok(_) => {} + Err(err) => { + eprintln!( + "Failed to bind values, values:{:?}, ErrMessage: {}", + values, err + ); + return Err(err.into()); + } + } + } + + match stmt.add_batch().await { + Ok(_) => {} + Err(err) => { + eprintln!("Failed to add batch, ErrMessage: {}", err); + return Err(err.into()); + } + } + } + + // execute. + match stmt.execute().await { + Ok(affected_rows) => println!( + "Successfully inserted {} rows to example_all_type_stmt.stb.", + affected_rows + ), + Err(err) => { + eprintln!( + "Failed to insert to table stb using stmt, ErrMessage: {}", + err + ); + return Err(err.into()); + } + } + + Ok(()) +} diff --git a/docs/examples/rust/nativeexample/examples/stmt_json_tag.rs b/docs/examples/rust/nativeexample/examples/stmt_json_tag.rs new file mode 100644 index 0000000000..7c1b26a0f5 --- /dev/null +++ b/docs/examples/rust/nativeexample/examples/stmt_json_tag.rs @@ -0,0 +1,94 @@ +use serde_json::json; +use taos::*; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let dsn = "taos://"; + let taos = TaosBuilder::from_dsn(dsn)?.build().await?; + + taos.exec("DROP DATABASE IF EXISTS example_all_type_stmt") + .await?; + taos.create_database("example_all_type_stmt").await?; + taos.use_database("example_all_type_stmt").await?; + taos.exec( + r#" +CREATE STABLE IF NOT EXISTS stb_json ( + ts TIMESTAMP, + int_col INT) +TAGS ( + json_tag JSON) +"#, + ) + .await?; + + let mut stmt = Stmt::init(&taos).await?; + stmt.prepare("INSERT INTO ? using stb_json tags(?) VALUES (?,?)") + .await?; + + const NUM_TABLES: usize = 1; + const NUM_ROWS: usize = 1; + for i in 0..NUM_TABLES { + let table_name = format!("d_bind_{}", i); + let json_value: serde_json::Value = json!({ + "name": "value" + }); + + dbg!(json_value.to_string()); + + let tags = vec![Value::Json(json_value)]; + + // set table name and tags for the prepared statement. + match stmt.set_tbname_tags(&table_name, &tags).await { + Ok(_) => {} + Err(err) => { + eprintln!( + "Failed to set table name and tags, table_name:{}, tags:{:?}, ErrMessage: {}", + table_name, tags, err + ); + return Err(err.into()); + } + } + for j in 0..NUM_ROWS { + let values = vec![ + ColumnView::from_millis_timestamp(vec![1648432611249 + j as i64]), + ColumnView::from_ints(vec![j as i32]), + ]; + // bind values to the prepared statement. + match stmt.bind(&values).await { + Ok(_) => {} + Err(err) => { + eprintln!( + "Failed to bind values, values:{:?}, ErrMessage: {}", + values, err + ); + return Err(err.into()); + } + } + } + + match stmt.add_batch().await { + Ok(_) => {} + Err(err) => { + eprintln!("Failed to add batch, ErrMessage: {}", err); + return Err(err.into()); + } + } + } + + // execute. + match stmt.execute().await { + Ok(affected_rows) => println!( + "Successfully inserted {} rows to example_all_type_stmt.stb_json.", + affected_rows + ), + Err(err) => { + eprintln!( + "Failed to insert to table stb_json using stmt, ErrMessage: {}", + err + ); + return Err(err.into()); + } + } + + Ok(()) +} diff --git a/docs/examples/rust/restexample/examples/stmt_all.rs b/docs/examples/rust/restexample/examples/stmt_all.rs new file mode 100644 index 0000000000..07ab658bad --- /dev/null +++ b/docs/examples/rust/restexample/examples/stmt_all.rs @@ -0,0 +1,121 @@ +use taos::*; +use taos_query::util::hex::hex_string_to_bytes; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let dsn = "ws://"; + let taos = TaosBuilder::from_dsn(dsn)?.build().await?; + + taos.exec("DROP DATABASE IF EXISTS example_all_type_stmt") + .await?; + taos.create_database("example_all_type_stmt").await?; + taos.use_database("example_all_type_stmt").await?; + taos.exec( + r#" + CREATE STABLE IF NOT EXISTS stb ( + ts TIMESTAMP, + int_col INT, + double_col DOUBLE, + bool_col BOOL, + binary_col BINARY(100), + nchar_col NCHAR(100), + varbinary_col VARBINARY(100), + geometry_col GEOMETRY(100)) + TAGS ( + int_tag INT, + double_tag DOUBLE, + bool_tag BOOL, + binary_tag BINARY(100), + nchar_tag NCHAR(100)) + "#, + ) + .await?; + + let mut stmt = Stmt::init(&taos).await?; + stmt.prepare("INSERT INTO ? using stb tags(?,?,?,?,?) VALUES (?,?,?,?,?,?,?,?)") + .await?; + + const NUM_TABLES: usize = 10; + const NUM_ROWS: usize = 10; + for i in 0..NUM_TABLES { + let table_name = format!("d_bind_{}", i); + let tags = vec![ + Value::Int(i as i32), + Value::Double(1.1), + Value::Bool(true), + Value::VarChar("binary_value".into()), + Value::NChar("nchar_value".into()), + // Value::VarBinary(vec![0x98, 0xf4, 0x6e].into()), + // Value::Geometry( + // vec![ + // 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, + // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, + // ] + // .into(), + // ), + ]; + + // set table name and tags for the prepared statement. + match stmt.set_tbname_tags(&table_name, &tags).await { + Ok(_) => {} + Err(err) => { + eprintln!( + "Failed to set table name and tags, table_name:{}, tags:{:?}, ErrMessage: {}", + table_name, tags, err + ); + return Err(err.into()); + } + } + for j in 0..NUM_ROWS { + let values = vec![ + ColumnView::from_millis_timestamp(vec![1648432611249 + j as i64]), + ColumnView::from_ints(vec![j as i32]), + ColumnView::from_doubles(vec![1.1]), + ColumnView::from_bools(vec![true]), + ColumnView::from_varchar(vec!["ABC"]), + ColumnView::from_nchar(vec!["涛思数据"]), + ColumnView::from_bytes(vec![hex_string_to_bytes("123456").to_vec()]), + ColumnView::from_geobytes(vec![hex_string_to_bytes( + "0101000000000000000000F03F0000000000000040", + ) + .to_vec()]), + ]; + // bind values to the prepared statement. + match stmt.bind(&values).await { + Ok(_) => {} + Err(err) => { + eprintln!( + "Failed to bind values, values:{:?}, ErrMessage: {}", + values, err + ); + return Err(err.into()); + } + } + } + + match stmt.add_batch().await { + Ok(_) => {} + Err(err) => { + eprintln!("Failed to add batch, ErrMessage: {}", err); + return Err(err.into()); + } + } + } + + // execute. + match stmt.execute().await { + Ok(affected_rows) => println!( + "Successfully inserted {} rows to example_all_type_stmt.stb.", + affected_rows + ), + Err(err) => { + eprintln!( + "Failed to insert to table stb using stmt, ErrMessage: {}", + err + ); + return Err(err.into()); + } + } + + Ok(()) +} diff --git a/docs/zh/14-reference/05-connector/26-rust.mdx b/docs/zh/14-reference/05-connector/26-rust.mdx index 88be297ac6..c5d2a165d4 100644 --- a/docs/zh/14-reference/05-connector/26-rust.mdx +++ b/docs/zh/14-reference/05-connector/26-rust.mdx @@ -80,6 +80,8 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Rust 对 | BINARY | Vec\ | | NCHAR | String | | JSON | serde_json::Value | +| VARBINARY | Bytes | +| GEOMETRY | Bytes | **注意**:JSON 类型仅在 tag 中支持。 diff --git a/docs/zh/20-third-party/01-collection/11-kafka.md b/docs/zh/20-third-party/01-collection/11-kafka.md index d9a416aa40..75adefbc50 100644 --- a/docs/zh/20-third-party/01-collection/11-kafka.md +++ b/docs/zh/20-third-party/01-collection/11-kafka.md @@ -243,6 +243,7 @@ vi source-demo.json "topic.per.stable": true, "topic.ignore.db": false, "out.format": "line", + "data.precision": "ms", "key.converter": "org.apache.kafka.connect.storage.StringConverter", "value.converter": "org.apache.kafka.connect.storage.StringConverter" } @@ -331,14 +332,13 @@ curl -X DELETE http://localhost:8083/connectors/TDengineSourceConnector 1. 打开 KAFKA_HOME/config/producer.properties 配置文件。 2. 参数说明及配置建议如下: - | **参数** | **参数说明** | **设置建议** | - | --------| --------------------------------- | -------------- | - | producer.type | 此参数用于设置消息的发送方式,默认值为 `sync` 表示同步发送,`async` 表示异步发送。采用异步发送能够提升消息发送的吞吐量。 | async | - | request.required.acks | 参数用于配置生产者发送消息后需要等待的确认数量。当设置为1时,表示只要领导者副本成功写入消息就会给生产者发送确认,而无需等待集群中的其他副本写入成功。这种设置可以在一定程度上保证消息的可靠性,同时也能保证一定的吞吐量。因为不需要等待所有副本都写入成功,所以可以减少生产者的等待时间,提高发送消息的效率。|1| - | max.request.size| 该参数决定了生产者在一次请求中可以发送的最大数据量。其默认值为 1048576,也就是 1M。如果设置得太小,可能会导致频繁的网络请求,降低吞吐量。如果设置得太大,可能会导致内存占用过高,或者在网络状况不佳时增加请求失败的概率。建议设置为 100M。|104857600| - |batch.size| 此参数用于设定 batch 的大小,默认值为 16384,即 16KB。在消息发送过程中,发送到 Kafka 缓冲区中的消息会被划分成一个个的 batch。故而减小 batch 大小有助于降低消息延迟,而增大 batch 大小则有利于提升吞吐量,可根据实际的数据量大小进行合理配置。可根据实际情况进行调整,建议设置为 512K。|524288| - | buffer.memory| 此参数用于设置生产者缓冲待发送消息的内存总量。较大的缓冲区可以允许生产者积累更多的消息后批量发送,提高吞吐量,但也会增加延迟和内存使用。可根据机器资源来配置,建议配置为 1G。|1073741824| - + | **参数** | **参数说明** | **设置建议** | + | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | + | producer.type | 此参数用于设置消息的发送方式,默认值为 `sync` 表示同步发送,`async` 表示异步发送。采用异步发送能够提升消息发送的吞吐量。 | async | + | request.required.acks | 参数用于配置生产者发送消息后需要等待的确认数量。当设置为1时,表示只要领导者副本成功写入消息就会给生产者发送确认,而无需等待集群中的其他副本写入成功。这种设置可以在一定程度上保证消息的可靠性,同时也能保证一定的吞吐量。因为不需要等待所有副本都写入成功,所以可以减少生产者的等待时间,提高发送消息的效率。 | 1 | + | max.request.size | 该参数决定了生产者在一次请求中可以发送的最大数据量。其默认值为 1048576,也就是 1M。如果设置得太小,可能会导致频繁的网络请求,降低吞吐量。如果设置得太大,可能会导致内存占用过高,或者在网络状况不佳时增加请求失败的概率。建议设置为 100M。 | 104857600 | + | batch.size | 此参数用于设定 batch 的大小,默认值为 16384,即 16KB。在消息发送过程中,发送到 Kafka 缓冲区中的消息会被划分成一个个的 batch。故而减小 batch 大小有助于降低消息延迟,而增大 batch 大小则有利于提升吞吐量,可根据实际的数据量大小进行合理配置。可根据实际情况进行调整,建议设置为 512K。 | 524288 | + | buffer.memory | 此参数用于设置生产者缓冲待发送消息的内存总量。较大的缓冲区可以允许生产者积累更多的消息后批量发送,提高吞吐量,但也会增加延迟和内存使用。可根据机器资源来配置,建议配置为 1G。 | 1073741824 | ## 配置参考 @@ -370,7 +370,7 @@ curl -X DELETE http://localhost:8083/connectors/TDengineSourceConnector 7. `data.precision`: 使用 InfluxDB 行协议格式时,时间戳的精度。可选值为: 1. ms : 表示毫秒 2. us : 表示微秒 - 3. ns : 表示纳秒。默认为纳秒。 + 3. ns : 表示纳秒。 ### TDengine Source Connector 特有的配置 @@ -381,12 +381,16 @@ curl -X DELETE http://localhost:8083/connectors/TDengineSourceConnector 5. `fetch.max.rows` : 检索数据库时最大检索条数。 默认为 100。 6. `query.interval.ms`: 从 TDengine 一次读取数据的时间跨度,需要根据表中的数据特征合理配置,避免一次查询的数据量过大或过小;在具体的环境中建议通过测试设置一个较优值,默认值为 0,即获取到当前最新时间的所有数据。 7. `out.format` : 结果集输出格式。`line` 表示输出格式为 InfluxDB Line 协议格式,`json` 表示输出格式是 json。默认为 line。 -8. `topic.per.stable`: 如果设置为 true,表示一个超级表对应一个 Kafka topic,topic的命名规则 ``;如果设置为 false,则指定的 DB 中的所有数据进入一个 Kafka topic,topic 的命名规则为 `` -9. `topic.ignore.db`: topic 命名规则是否包含 database 名称,true 表示规则为 ``,false 表示规则为 ``,默认 false。此配置项在 `topic.per.stable` 设置为 false 时不生效。 -10. `topic.delimiter`: topic 名称分割符,默认为 `-`。 -11. `read.method`: 从 TDengine 读取数据方式,query 或是 subscription。默认为 subscription。 -12. `subscription.group.id`: 指定 TDengine 数据订阅的组 id,当 `read.method` 为 subscription 时,此项为必填项。 -13. `subscription.from`: 指定 TDengine 数据订阅起始位置,latest 或是 earliest。默认为 latest。 +8. `data.precision`: 使用 InfluxDB 行协议格式时,时间戳的精度。可选值为: + 1. ms : 表示毫秒, + 2. us : 表示微秒 + 3. ns : 表示纳秒。 +9. `topic.per.stable`: 如果设置为 true,表示一个超级表对应一个 Kafka topic,topic的命名规则 ``;如果设置为 false,则指定的 DB 中的所有数据进入一个 Kafka topic,topic 的命名规则为 `` +10. `topic.ignore.db`: topic 命名规则是否包含 database 名称,true 表示规则为 ``,false 表示规则为 ``,默认 false。此配置项在 `topic.per.stable` 设置为 false 时不生效。 +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。 ## 其他说明 From 576e6a4f1740e8a367331882fde79560c3c37f2b Mon Sep 17 00:00:00 2001 From: menshibin Date: Sat, 21 Sep 2024 17:54:29 +0800 Subject: [PATCH 10/27] add python all types examples --- docs/zh/14-reference/05-connector/30-python.mdx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/zh/14-reference/05-connector/30-python.mdx b/docs/zh/14-reference/05-connector/30-python.mdx index 1a805c692e..8e08bfc103 100644 --- a/docs/zh/14-reference/05-connector/30-python.mdx +++ b/docs/zh/14-reference/05-connector/30-python.mdx @@ -103,7 +103,8 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Python 对 |BINARY|str| |NCHAR|str| |JSON|str| - +|GEOMETRY|bytearray| +|VARBINARY|bytearray| ## 示例程序汇总 | 示例程序链接 | 示例程序内容 | @@ -113,6 +114,13 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Python 对 | [insert_lines.py](https://github.com/taosdata/taos-connector-python/blob/main/examples/insert-lines.py) | InfluxDB 行协议写入 | | [json_tag.py](https://github.com/taosdata/taos-connector-python/blob/main/examples/json-tag.py) | 使用 JSON 类型的标签 | | [tmq_consumer.py](https://github.com/taosdata/taos-connector-python/blob/main/examples/tmq_consumer.py) | tmq 订阅 | +| [native_all_type_query.py](https://github.com/taosdata/taos-connector-python/blob/main/examples/native_all_type_query.py) | 支持全部类型示例 | +| [native_all_type_stmt.py](https://github.com/taosdata/taos-connector-python/blob/main/examples/native_all_type_stmt.py) | 参数绑定支持全部类型示例 | + +示例程序源码请参考: + +1. [原生更多示例程序](https://github.com/taosdata/taos-connector-python/tree/main/examples) +2. [WebSocket 更多示例程序](https://github.com/taosdata/taos-connector-python/tree/main/taos-ws-py/examples) ## 关于纳秒 (nanosecond) From 2355e2f8dede0e11dfd0912341a7f23e53a7fbf5 Mon Sep 17 00:00:00 2001 From: menshibin Date: Sat, 21 Sep 2024 19:49:14 +0800 Subject: [PATCH 11/27] modify nodejs example --- docs/examples/node/websocketexample/sql_example.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/examples/node/websocketexample/sql_example.js b/docs/examples/node/websocketexample/sql_example.js index 5dc8ba6021..8eb8af989d 100644 --- a/docs/examples/node/websocketexample/sql_example.js +++ b/docs/examples/node/websocketexample/sql_example.js @@ -24,13 +24,18 @@ async function createConnect() { async function createDbAndTable() { let wsSql = null; try { - wsSql = await createConnect(); + let conf = new taos.WSConfig(dsn); + conf.setUser('root'); + conf.setPwd('taosdata'); + conf.setDb('power'); + wsSql = await taos.sqlConnect(conf); + console.log("Connected to " + dsn + " successfully."); // create database await wsSql.exec('CREATE DATABASE IF NOT EXISTS power'); console.log("Create database power successfully."); // create table await wsSql.exec('CREATE STABLE IF NOT EXISTS power.meters ' + - '(_ts timestamp, current float, voltage int, phase float) ' + + '(ts timestamp, current float, voltage int, phase float) ' + 'TAGS (location binary(64), groupId int);'); console.log("Create stable power.meters successfully"); From cf0996b1f95cc06988874abd57e197381f6ec0d1 Mon Sep 17 00:00:00 2001 From: menshibin Date: Sat, 21 Sep 2024 21:22:11 +0800 Subject: [PATCH 12/27] modify nodejs example --- .../node/websocketexample/all_type_query.js | 98 ++++++++++++ .../node/websocketexample/all_type_stmt.js | 149 ++++++++++++++++++ 2 files changed, 247 insertions(+) create mode 100644 docs/examples/node/websocketexample/all_type_query.js create mode 100644 docs/examples/node/websocketexample/all_type_stmt.js diff --git a/docs/examples/node/websocketexample/all_type_query.js b/docs/examples/node/websocketexample/all_type_query.js new file mode 100644 index 0000000000..54562652a1 --- /dev/null +++ b/docs/examples/node/websocketexample/all_type_query.js @@ -0,0 +1,98 @@ +const taos = require("@tdengine/websocket"); + +let dsn = 'ws://127.0.0.1:6041'; +async function json_tag_example() { + let wsSql = null; + try { + let conf = new taos.WSConfig(dsn); + conf.setUser('root'); + conf.setPwd('taosdata'); + wsSql = await taos.sqlConnect(conf); + console.log("Connected to " + dsn + " successfully."); + + // create database + await wsSql.exec('CREATE DATABASE IF NOT EXISTS example_json_tag'); + console.log("Create database example_json_tag successfully."); + + // create table + await wsSql.exec('create table if not exists example_json_tag.stb (ts timestamp, v int) tags(jt json)'); + + console.log("Create stable example_json_tag.stb successfully"); + + let insertQuery = 'INSERT INTO ' + + 'example_json_tag.tb1 USING example_json_tag.stb TAGS(\'{"name":"value"}\') ' + + "values(now, 1) "; + taosResult = await wsSql.exec(insertQuery); + console.log("Successfully inserted " + taosResult.getAffectRows() + " rows to example_json_tag.stb."); + + let sql = 'SELECT ts, v, jt FROM example_json_tag.stb limit 100'; + wsRows = await wsSql.query(sql); + while (await wsRows.next()) { + let row = wsRows.getData(); + console.log('ts: ' + row[0] + ', v: ' + row[1] + ', jt: ' + row[2]); + } + + } catch (err) { + console.error(`Failed to create database example_json_tag or stable stb, ErrCode: ${err.code}, ErrMessage: ${err.message}`); + } finally { + if (wsSql) { + await wsSql.close(); + } + } + +} + +async function all_type_example() { + let wsSql = null; + try { + let conf = new taos.WSConfig(dsn); + conf.setUser('root'); + conf.setPwd('taosdata'); + wsSql = await taos.sqlConnect(conf); + console.log("Connected to " + dsn + " successfully."); + + // create database + await wsSql.exec('CREATE DATABASE IF NOT EXISTS all_type_example'); + console.log("Create database all_type_example successfully."); + + // create table + await wsSql.exec('create table if not exists all_type_example.stb (ts timestamp, ' + + 'int_col INT, double_col DOUBLE, bool_col BOOL, binary_col BINARY(100),' + + 'nchar_col NCHAR(100), varbinary_col VARBINARY(100), geometry_col GEOMETRY(100)) ' + + 'tags(int_tag INT, double_tag DOUBLE, bool_tag BOOL, binary_tag BINARY(100),' + + 'nchar_tag NCHAR(100), varbinary_tag VARBINARY(100), geometry_tag GEOMETRY(100));'); + + console.log("Create stable all_type_example.stb successfully"); + + let insertQuery = "INSERT INTO all_type_example.tb1 using all_type_example.stb " + + "tags(1, 1.1, true, 'binary_value', 'nchar_value', '\\x98f46e', 'POINT(100 100)') " + + "values(now, 1, 1.1, true, 'binary_value', 'nchar_value', '\\x98f46e', 'POINT(100 100)')"; + taosResult = await wsSql.exec(insertQuery); + console.log("Successfully inserted " + taosResult.getAffectRows() + " rows to all_type_example.stb."); + + let sql = 'SELECT * FROM all_type_example.stb limit 100'; + let wsRows = await wsSql.query(sql); + let meta = wsRows.getMeta(); + console.log("wsRow:meta:=>", meta); + while (await wsRows.next()) { + let row = wsRows.getData(); + console.log(row); + } + + } catch (err) { + console.error(`Failed to create database all_type_example or stable stb, ErrCode: ${err.code}, ErrMessage: ${err.message}`); + } finally { + if (wsSql) { + await wsSql.close(); + } + } + +} + +async function test() { + await json_tag_example() + await all_type_example() + taos.destroy(); +} + +test() diff --git a/docs/examples/node/websocketexample/all_type_stmt.js b/docs/examples/node/websocketexample/all_type_stmt.js new file mode 100644 index 0000000000..09e58d27e8 --- /dev/null +++ b/docs/examples/node/websocketexample/all_type_stmt.js @@ -0,0 +1,149 @@ +const taos = require("@tdengine/websocket"); + + +let dsn = 'ws://127.0.0.1:6041'; +async function json_tag_example() { + let wsSql = null; + try { + let conf = new taos.WSConfig(dsn); + conf.setUser('root'); + conf.setPwd('taosdata'); + wsSql = await taos.sqlConnect(conf); + console.log("Connected to " + dsn + " successfully."); + + // create database + await wsSql.exec('CREATE DATABASE IF NOT EXISTS example_json_tag'); + console.log("Create database example_json_tag successfully."); + + await wsSql.exec('use example_json_tag'); + + // create table + await wsSql.exec('create table if not exists stb (ts timestamp, v int) tags(jt json)'); + + console.log("Create stable example_json_tag.stb successfully"); + + let stmt = await wsSql.stmtInit(); + await stmt.prepare("INSERT INTO ? using stb tags(?) VALUES (?,?)"); + await stmt.setTableName(`tb1`); + let tagParams = stmt.newStmtParam(); + tagParams.setJson(['{"name":"value"}']) + await stmt.setTags(tagParams); + let bindParams = stmt.newStmtParam(); + const currentMillis = new Date().getTime(); + bindParams.setTimestamp([currentMillis]); + bindParams.setInt([1]); + await stmt.bind(bindParams); + await stmt.batch(); + await stmt.exec(); + await stmt.close(); + + let sql = 'SELECT ts, v, jt FROM example_json_tag.stb limit 100'; + wsRows = await wsSql.query(sql); + while (await wsRows.next()) { + let row = wsRows.getData(); + console.log('ts: ' + row[0] + ', v: ' + row[1] + ', jt: ' + row[2]); + } + + } catch (err) { + console.error(`Failed to create database example_json_tag or stable stb, ErrCode: ${err.code}, ErrMessage: ${err.message}`); + } finally { + if (wsSql) { + await wsSql.close(); + } + } + +} + +async function all_type_example() { + let wsSql = null; + let stmt = null; + try { + let conf = new taos.WSConfig(dsn); + conf.setUser('root'); + conf.setPwd('taosdata'); + wsSql = await taos.sqlConnect(conf); + console.log("Connected to " + dsn + " successfully."); + + // create database + await wsSql.exec('CREATE DATABASE IF NOT EXISTS all_type_example'); + console.log("Create database all_type_example successfully."); + + await wsSql.exec('use all_type_example'); + + // create table + await wsSql.exec('create table if not exists stb (ts timestamp, ' + + 'int_col INT, double_col DOUBLE, bool_col BOOL, binary_col BINARY(100),' + + 'nchar_col NCHAR(100), varbinary_col VARBINARY(100), geometry_col GEOMETRY(100)) ' + + 'tags(int_tag INT, double_tag DOUBLE, bool_tag BOOL, binary_tag BINARY(100),' + + 'nchar_tag NCHAR(100), varbinary_tag VARBINARY(100), geometry_tag GEOMETRY(100));'); + + console.log("Create stable all_type_example.stb successfully"); + + let geometryData = new Uint8Array([0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x59,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x40,]).buffer; + + const encoder = new TextEncoder(); + let vbData = encoder.encode(`Hello, world!`).buffer; + + stmt = await wsSql.stmtInit(); + await stmt.prepare("INSERT INTO ? using stb tags(?,?,?,?,?,?,?) VALUES (?,?,?,?,?,?,?,?)"); + await stmt.setTableName(`tb1`); + let tagParams = stmt.newStmtParam(); + tagParams.setInt([1]); + tagParams.setDouble([1.1]); + tagParams.setBoolean([true]); + tagParams.setVarchar(["hello"]); + tagParams.setNchar(["stmt"]); + tagParams.setGeometry([geometryData]); + tagParams.setVarBinary([vbData]); + await stmt.setTags(tagParams); + + + let bindParams = stmt.newStmtParam(); + const currentMillis = new Date().getTime(); + bindParams.setTimestamp([currentMillis]); + bindParams.setInt([1]); + bindParams.setDouble([1.1]); + bindParams.setBoolean([true]); + bindParams.setVarchar(["hello"]); + bindParams.setNchar(["stmt"]); + bindParams.setGeometry([geometryData]); + bindParams.setVarBinary([vbData]); + + await stmt.bind(bindParams); + await stmt.batch(); + await stmt.exec(); + + let sql = 'SELECT * FROM all_type_example.stb limit 100'; + let wsRows = await wsSql.query(sql); + let meta = wsRows.getMeta(); + console.log("wsRow:meta:=>", meta); + while (await wsRows.next()) { + let row = wsRows.getData(); + console.log(row); + } + + } catch (err) { + console.error(`Failed to create database all_type_example or stable stb, ErrCode: ${err.code}, ErrMessage: ${err.message}`); + } finally { + if (stmt) { + await stmt.close(); + } + if (wsSql) { + await wsSql.close(); + } + } + +} + + + +async function test() { + taos.setLevel("debug") + await json_tag_example() + await all_type_example() + taos.destroy(); +} + +test() + From 6256450acfcbc6a815c3c196d9cf6bfbc0af5889 Mon Sep 17 00:00:00 2001 From: menshibin Date: Sat, 21 Sep 2024 21:25:58 +0800 Subject: [PATCH 13/27] modify nodejs example --- docs/zh/14-reference/05-connector/35-node.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/zh/14-reference/05-connector/35-node.mdx b/docs/zh/14-reference/05-connector/35-node.mdx index a3d5099235..3d8e82086e 100644 --- a/docs/zh/14-reference/05-connector/35-node.mdx +++ b/docs/zh/14-reference/05-connector/35-node.mdx @@ -88,6 +88,8 @@ Node.js 连接器目前仅支持 Websocket 连接器, 其通过 taosAdapter | [telnet_line_example](https://github.com/taosdata/TDengine/tree/main/docs/examples/node/websocketexample/telnet_line_example.js) | OpenTSDB Telnet 行协议写入示例。 | | [json_line_example](https://github.com/taosdata/TDengine/tree/main/docs/examples/node/websocketexample/json_line_example.js) | OpenTSDB JSON 行协议写入示例。 | | [tmq_example](https://github.com/taosdata/TDengine/tree/main/docs/examples/node/websocketexample/tmq_example.js) | 订阅的使用示例。 | +| [all_type_query](https://github.com/taosdata/TDengine/tree/main/docs/examples/node/websocketexample/all_type_query.js) | 支持全部类型示例。 | +| [all_type_stmt](https://github.com/taosdata/TDengine/tree/main/docs/examples/node/websocketexample/all_type_stmt.js) | 参数绑定支持全部类型示例。 | ## 使用限制 From bbee8916eaade1f7b0b4efde10507ee76c442544 Mon Sep 17 00:00:00 2001 From: menshibin Date: Sat, 21 Sep 2024 21:32:23 +0800 Subject: [PATCH 14/27] modify nodejs example --- docs/examples/node/websocketexample/all_type_query.js | 2 +- docs/examples/node/websocketexample/all_type_stmt.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/examples/node/websocketexample/all_type_query.js b/docs/examples/node/websocketexample/all_type_query.js index 54562652a1..266d110d24 100644 --- a/docs/examples/node/websocketexample/all_type_query.js +++ b/docs/examples/node/websocketexample/all_type_query.js @@ -1,6 +1,6 @@ const taos = require("@tdengine/websocket"); -let dsn = 'ws://127.0.0.1:6041'; +let dsn = 'ws://localhost:6041'; async function json_tag_example() { let wsSql = null; try { diff --git a/docs/examples/node/websocketexample/all_type_stmt.js b/docs/examples/node/websocketexample/all_type_stmt.js index 09e58d27e8..8a0dcf21e1 100644 --- a/docs/examples/node/websocketexample/all_type_stmt.js +++ b/docs/examples/node/websocketexample/all_type_stmt.js @@ -1,7 +1,7 @@ const taos = require("@tdengine/websocket"); -let dsn = 'ws://127.0.0.1:6041'; +let dsn = 'ws://localhost:6041'; async function json_tag_example() { let wsSql = null; try { From 15924a45ad5d9295a5a17ced2a4e7106826dc077 Mon Sep 17 00:00:00 2001 From: Yaming Pei Date: Sat, 21 Sep 2024 21:45:41 +0800 Subject: [PATCH 15/27] docs: update docs to support ODBC x86 and view --- docs/zh/14-reference/05-connector/50-odbc.mdx | 20 +++++---- docs/zh/20-third-party/05-bi/03-powerbi.md | 42 +++++++++---------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/docs/zh/14-reference/05-connector/50-odbc.mdx b/docs/zh/14-reference/05-connector/50-odbc.mdx index 244a3f8d4e..ee69cf9364 100644 --- a/docs/zh/14-reference/05-connector/50-odbc.mdx +++ b/docs/zh/14-reference/05-connector/50-odbc.mdx @@ -3,11 +3,11 @@ sidebar_label: ODBC title: TDengine ODBC --- -TDengine ODBC 是为 TDengine 实现的 ODBC 驱动程序,支持 Windows 系统的应用(如 [PowerBI](https://powerbi.microsoft.com/zh-cn/) 等)通过 ODBC 标准接口访问本地、远程和云服务的 TDengine 数据库。 +TDengine ODBC 是为 TDengine 实现的 ODBC 驱动程序,支持 Windows 系统的应用(如 [PowerBI](https://powerbi.microsoft.com/zh-cn/) 等)通过 ODBC 标准接口访问本地、远程和云服务的 TDengine 数据库的数据表/视图。 TDengine ODBC 提供基于 WebSocket(推荐)和 原生连接两种方式连接 TDengine 数据库,使用时可以为 TDengine 数据源设置不同的连接方式。访问云服务时必须使用 WebSocket 连接方式。 -注意:TDengine ODBC 只支持 64 位系统,调用 TDengine ODBC 必须通过 64 位的 ODBC 驱动管理器进行。因此调用 ODBC 的程序不能使用 32 位版本。 +注意:TDengine ODBC 支持 32/64 位 Windows 系统,调用 TDengine ODBC 需要通过相应位数的 ODBC 驱动管理器进行。在 32 位 Windows 系统或者 64 位 Windows 系统的 32 位应用程序中,仅支持使用 WebSocket 连接方式访问 TDengine 数据库。 想更多了解 TDengine 时序时序数据库的使用,可访问 [TDengine官方文档](https://docs.taosdata.com/intro/)。 @@ -18,7 +18,7 @@ TDengine ODBC 提供基于 WebSocket(推荐)和 原生连接两种方式连 1. 仅支持 Windows 平台。Windows 上需要安装过 VC 运行时库,可在此下载安装 [VC运行时库](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170) 如果已经安装VS开发工具可忽略。 -2. 安装 TDengine Windows 客户端,版本在 3.2.1.0 或以上,都会包含 TDengine 的 ODBC 驱动。 +2. 安装 TDengine Windows 客户端。版本在 3.2.1.0 或以上,包含 TDengine 的 ODBC 64 位驱动;版本在 3.3.3.0 或以上,包含 TDengine 的 ODBC 32/64 位驱动。 ## 配置数据源 @@ -26,17 +26,19 @@ TDengine ODBC 提供基于 WebSocket(推荐)和 原生连接两种方式连 TDengine ODBC 支持两种连接 TDengine 数据库方式:Websocket 连接与 Native 连接,其区别如下: -1. 只有 Websocket 支持连接云服务 +1. 访问云服务仅支持使用 Websocket 连接方式。 -2. Websocket 连接的兼容性更好,一般不需要随着 TDengine 数据库服务端升级而升级客户端的库。 +2. 32 位应用程序仅支持使用 WebSocket 连接方式。 -3. Native 连接通常性能更好一点,但是必须与 TDengine 数据库服务端的版本保持一致。 +3. Websocket 连接的兼容性更好,一般不需要随着 TDengine 数据库服务端升级而升级客户端的库。 -4. 对于一般用户,建议使用 **Websocket** 连接方式,性能与 Native 差别不大,兼容性更好。 +4. Native 连接通常性能更好一点,但是必须与 TDengine 数据库服务端的版本保持一致。 + +5. 对于一般用户,建议使用 **Websocket** 连接方式,性能与 Native 差别不大,兼容性更好。 ### WebSocket 连接 -1. 【开始】菜单搜索打开【ODBC 数据源(64 位)】管理工具(注意不要选择ODBC 数据源(32 位)) +1. 【开始】菜单搜索打开【ODBC 数据源(32 位)】或者【ODBC 数据源(64 位)】管理工具 2. 选中【用户 DSN】标签页,通过【添加(D)】按钮进入"创建数据源"界面 @@ -64,7 +66,7 @@ TDengine ODBC 支持两种连接 TDengine 数据库方式:Websocket 连接与 7. 也可以在第2步选择已经配置好的数据源名通过【配置】按钮进入配置页面,修改已有配置 -### 原生连接(不支持云服务) +### 原生连接(不支持云服务和 32 位应用程序) 1. 【开始】菜单搜索打开【ODBC 数据源(64 位)】管理工具(注意不要选择ODBC 数据源(32 位)) diff --git a/docs/zh/20-third-party/05-bi/03-powerbi.md b/docs/zh/20-third-party/05-bi/03-powerbi.md index f4709da447..bd51b5591d 100644 --- a/docs/zh/20-third-party/05-bi/03-powerbi.md +++ b/docs/zh/20-third-party/05-bi/03-powerbi.md @@ -8,35 +8,35 @@ Power BI是由Microsoft提供的一种商业分析工具。通过配置使用ODB ## 前置条件 -安装完成Power BI Desktop软件并运行(如未安装,请从其官方地址下载最新的Windows操作系统X64版本)。 +安装完成Power BI Desktop软件并运行(如未安装,请从其官方地址下载最新的Windows操作系统 32/64 位版本)。 ## 安装 ODBC 驱动 -从TDengine官网下载最新的Windows操作系统X64客户端驱动程序,并安装在运行Power BI的机器上。安装成功后可在“ODBC数据源(64位)”管理工具中看到 TAOS_ODBC_DSN”驱动程序。 +从TDengine官网下载最新的Windows操作系统X64客户端驱动程序,并安装在运行Power BI的机器上。安装成功后可在“ODBC数据源(32位)”或者“ODBC数据源(64位)”管理工具中看到 TDengine 驱动程序。 ## 配置ODBC数据源 配置ODBC数据源的操作步骤如下。 -第1步,在Windows操作系统的开始菜单中搜索并打开“ODBC数据源(64位)”管理工具。 -第2步,点击“用户DSN”选项卡→“添加”按钮,进入“创建新数据源”对话框。 -第3步,选择想要添加的数据源后选择“TDengine”,点击“完成”按钮,进入TDengine ODBC数据源配置页面。填写如下必要信息。 +第1步,在Windows操作系统的开始菜单中搜索并打开“ODBC数据源(32位)”或者“ODBC数据源(64位)”管理工具。 +第2步,点击“用户DSN”选项卡→“添加”按钮,进入“创建新数据源”对话框。 +第3步,在“选择您想为其安装数据源的驱动程序”列表中选择“TDengine”,点击“完成”按钮,进入TDengine ODBC数据源配置页面。填写如下必要信息。 - DSN:数据源名称,必填,比如“MyTDengine”。 - 连接类型:勾选“WebSocket”复选框。 - - 服务地址:输入“taos://127.0.0.1:6041”。 + - URL:ODBC 数据源 URL,必填,比如“http://127.0.0.1:6041”。 - 数据库:表示需要连接的数据库,可选,比如“test”。 - 用户名:输入用户名,如果不填,默认为“root”。 - - 密码:输入用户密码,如果不填,默认为“taosdata”。 -第4步,点击“测试连接”按钮,测试连接情况,如果成功连接,则会提示“成功连接到taos://root:taosdata@127.0.0.1:6041”。 + - 密码:输入用户密码,如果不填,默认为“taosdata”。 + +第4步,点击“测试连接”按钮,测试连接情况,如果成功连接,则会提示“成功连接到http://127.0.0.1:6041”。 第5步,点击“确定”按钮,即可保存配置并退出。 ## 导入TDengine数据到Power BI -将TDengine数据导入Power BI的操作步骤如下。 - -第1步,打开Power BI并登录后,点击“主页”→“获取数据”→“其他”→“ODBC”→“连接”,添加数据源。 -第2步,选择刚才创建的数据源名称,比如“MyTDengine”,点击“确定”按钮。在弹出的“ODBC驱动程序”对话框中,在左侧导航栏中点击“默认或自定义”→“连接”按钮,即可连接到配置好的数据源。进入“导航器”后,可以浏览对应数据库的数据表并加载。 -第3步,如果需要输入SQL,则可以点击“高级选项”选项卡,在展开的对话框中输入并加载数据。 +将TDengine数据导入Power BI的操作步骤如下: +第1步,打开Power BI并登录后,点击“主页”→“获取数据”→“其他”→“ODBC”→“连接”,添加数据源。 +第2步,选择刚才创建的数据源名称,比如“MyTDengine”,如果需要输入SQL,则可以点击“高级选项”选项卡,在展开的对话框的编辑框中输入SQL语句。点击“确定”按钮,即可连接到配置好的数据源。 +第3步,进入“导航器”后,可以浏览对应数据库的数据表/视图并加载数据。 为了充分发挥Power BI在分析TDengine中数据方面的优势,用户需要先理解维度、度量、窗口切分查询、数据切分查询、时序和相关性等核心概念,之后通过自定义的SQL导入数据。 - 维度:通常是分类(文本)数据,描述设备、测点、型号等类别信息。在TDengine的超级表中,使用标签列存储数据的维度信息,可以通过形如“select distinct tbname, tag1, tag2 from supertable”的SQL语法快速获得维度信息。 @@ -54,25 +54,25 @@ TDengine采用了一种独特的数据模型,以优化时序数据的存储和 在Power BI中,用户可以将TDengine表中的标签列映射为维度列,以便对数据进行分组和筛选。同时,数据列的聚合结果可以导入为度量列,用于计算关键指标和生成报表。通过这种方式,Power BI能够帮助决策者快速获取所需的信息,深入了解业务运营情况,从而制定更加明智的决策。 -根据如下步骤,便可以体验通过Power BI生成时序数据报表的功能。 +根据如下步骤,便可以体验通过Power BI生成时序数据报表的功能。 第1步,使用TDengine的taosBenchMark快速生成1000块智能电表3天的数据,采集频率为1s。 ```shell - taosBenchmark-t1000-n259200-S1000-H200-y + taosBenchmark -t 1000 -n 259200 -S 1000 -y ``` 第2步,导入维度数据。在Power BI中导入表的标签列,取名为tags,通过如下SQL获取超级表下所有智能电表的标签数据。 ```sql - selectdistincttbnamedevice,groupId,locationfromtest.meters + select distinct tbname device, groupId, location from test.meters ``` 第3步,导入度量数据。在Power BI中,按照1小时的时间窗口,导入每块智能电表的电流均值、电压均值、相位均值,取名为data,SQL如下。 ```sql - 第3步,导入度量数据。在Power BI中,按照1小时的时间窗口,导入每块智能电表的电流均值、电压均值、相位均值,取名为data,SQL如下。 + select tbname, _wstart ws, avg(current), avg(voltage), avg(phase) from test.meters PARTITION by tbname interval(1h) ``` 第4步,导入日期数据。按照1天的时间窗口,获得时序数据的时间范围及数据计数,SQL如下。需要在Power Query编辑器中将date列的格式从“文本”转化为“日期”。 ```sql - select_wstartdate,count(*)fromtest.metersinterval(1d)havingcount(*)>0 + select _wstart date, count(*) from test.meters interval(1d) having count(*)>0 ``` -第5步,建立维度和度量的关联关系。打开模型视图,建立表tags和data的关联关系,将tbname设置为关联数据列。 -第6步,建立日期和度量的关联关系。打开模型视图,建立数据集date和data的关联关系,关联的数据列为date和datatime。 -第7步,制作报告。在柱状图、饼图等控件中使用这些数据。 +第5步,建立维度和度量的关联关系。打开模型视图,建立表tags和data的关联关系,将tbname设置为关联数据列。 +第6步,建立日期和度量的关联关系。打开模型视图,建立数据集date和data的关联关系,关联的数据列为date和datatime。 +第7步,制作报告。在柱状图、饼图等控件中使用这些数据。 由于TDengine处理时序数据的超强性能,使得用户在数据导入及每日定期刷新数据时,都可以得到非常好的体验。更多有关Power BI视觉效果的构建方法,请参照Power BI的官方文档。 \ No newline at end of file From abc55063cd31eb5b114db60cd8874f5cde3fe297 Mon Sep 17 00:00:00 2001 From: xiao-77 Date: Mon, 23 Sep 2024 11:33:06 +0800 Subject: [PATCH 16/27] fix ci error --- source/dnode/mnode/impl/src/mndMain.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index 208d0205a5..4d91b17252 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -86,8 +86,7 @@ static void *mndBuildTimerMsg(int32_t *pContLen) { if (pReq == NULL) return NULL; if (tSerializeSMTimerMsg(pReq, contLen, &timerReq) < 0) { - rpcFreeCont(pReq); - return NULL; + mError("failed to serialize timer msg since %s", terrstr()); } *pContLen = contLen; return pReq; From ef56a07bea5ef81fffec51acc3cad4b18f06de9c Mon Sep 17 00:00:00 2001 From: xiao-77 Date: Mon, 23 Sep 2024 13:39:43 +0800 Subject: [PATCH 17/27] fix ci error --- source/dnode/mnode/impl/src/mndQnode.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndQnode.c b/source/dnode/mnode/impl/src/mndQnode.c index 1793acf9f2..ba1a88aab3 100644 --- a/source/dnode/mnode/impl/src/mndQnode.c +++ b/source/dnode/mnode/impl/src/mndQnode.c @@ -224,8 +224,7 @@ int32_t mndSetCreateQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQnodeOb } code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq); if (code < 0) { - taosMemoryFree(pReq); - return code; + mError("qnode:%d, failed to serialize create drop qnode request since %s", createReq.dnodeId, terrstr()); } STransAction action = {0}; action.epSet = mndGetDnodeEpset(pDnode); @@ -255,8 +254,7 @@ static int32_t mndSetCreateQnodeUndoActions(STrans *pTrans, SDnodeObj *pDnode, S } code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); if (code < 0) { - taosMemoryFree(pReq); - TAOS_RETURN(code); + mError("qnode:%d, failed to serialize create drop qnode request since %s", dropReq.dnodeId, terrstr()); } STransAction action = {0}; @@ -390,8 +388,7 @@ static int32_t mndSetDropQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQn } code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); if (code < 0) { - taosMemoryFree(pReq); - TAOS_RETURN(code); + mError("qnode:%d, failed to serialize create drop qnode request since %s", dropReq.dnodeId, terrstr()); } STransAction action = {0}; @@ -547,8 +544,7 @@ static int32_t mndProcessQnodeListReq(SRpcMsg *pReq) { code = tSerializeSQnodeListRsp(pRsp, rspLen, &qlistRsp); if (code < 0) { - rpcFreeCont(pRsp); - goto _OVER; + mError("failed to serialize qnode list response since %s", terrstr()); } pReq->info.rspLen = rspLen; From 17dfd6ba427aec714571bc3bda665728e5d324da Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 23 Sep 2024 13:48:34 +0800 Subject: [PATCH 18/27] enh: handle void --- source/dnode/vnode/src/inc/vnodeInt.h | 6 +-- source/dnode/vnode/src/sma/smaSnapshot.c | 12 ++---- source/dnode/vnode/src/tsdb/tsdbSnapshot.c | 6 +-- source/dnode/vnode/src/tsdb/tsdbSnapshotRAW.c | 13 ++---- source/dnode/vnode/src/vnd/vnodeSnapshot.c | 42 ++++++++++--------- 5 files changed, 36 insertions(+), 43 deletions(-) diff --git a/source/dnode/vnode/src/inc/vnodeInt.h b/source/dnode/vnode/src/inc/vnodeInt.h index e50ced2ebb..4cc4e11329 100644 --- a/source/dnode/vnode/src/inc/vnodeInt.h +++ b/source/dnode/vnode/src/inc/vnodeInt.h @@ -314,7 +314,7 @@ int32_t metaSnapWriterClose(SMetaSnapWriter** ppWriter, int8_t rollback); // STsdbSnapReader ======================================== int32_t tsdbSnapReaderOpen(STsdb* pTsdb, int64_t sver, int64_t ever, int8_t type, void* pRanges, STsdbSnapReader** ppReader); -int32_t tsdbSnapReaderClose(STsdbSnapReader** ppReader); +void tsdbSnapReaderClose(STsdbSnapReader** ppReader); int32_t tsdbSnapRead(STsdbSnapReader* pReader, uint8_t** ppData); // STsdbSnapWriter ======================================== int32_t tsdbSnapWriterOpen(STsdb* pTsdb, int64_t sver, int64_t ever, void* pRanges, STsdbSnapWriter** ppWriter); @@ -323,7 +323,7 @@ int32_t tsdbSnapWriterPrepareClose(STsdbSnapWriter* pWriter, bool rollback); int32_t tsdbSnapWriterClose(STsdbSnapWriter** ppWriter, int8_t rollback); // STsdbSnapRAWReader ======================================== int32_t tsdbSnapRAWReaderOpen(STsdb* pTsdb, int64_t ever, int8_t type, STsdbSnapRAWReader** ppReader); -int32_t tsdbSnapRAWReaderClose(STsdbSnapRAWReader** ppReader); +void tsdbSnapRAWReaderClose(STsdbSnapRAWReader** ppReader); int32_t tsdbSnapRAWRead(STsdbSnapRAWReader* pReader, uint8_t** ppData); // STsdbSnapRAWWriter ======================================== int32_t tsdbSnapRAWWriterOpen(STsdb* pTsdb, int64_t ever, STsdbSnapRAWWriter** ppWriter); @@ -368,7 +368,7 @@ int32_t streamStateLoadTasks(SStreamStateWriter* pWriter); // SStreamStateReader ===================================== // SRSmaSnapReader ======================================== int32_t rsmaSnapReaderOpen(SSma* pSma, int64_t sver, int64_t ever, SRSmaSnapReader** ppReader); -int32_t rsmaSnapReaderClose(SRSmaSnapReader** ppReader); +void rsmaSnapReaderClose(SRSmaSnapReader** ppReader); int32_t rsmaSnapRead(SRSmaSnapReader* pReader, uint8_t** ppData); // SRSmaSnapWriter ======================================== int32_t rsmaSnapWriterOpen(SSma* pSma, int64_t sver, int64_t ever, void** ppRanges, SRSmaSnapWriter** ppWriter); diff --git a/source/dnode/vnode/src/sma/smaSnapshot.c b/source/dnode/vnode/src/sma/smaSnapshot.c index 348d378081..5836b69b5f 100644 --- a/source/dnode/vnode/src/sma/smaSnapshot.c +++ b/source/dnode/vnode/src/sma/smaSnapshot.c @@ -93,30 +93,26 @@ int32_t rsmaSnapRead(SRSmaSnapReader* pReader, uint8_t** ppData) { _exit: if (code) { smaError("vgId:%d, %s failed at line %d since %s", SMA_VID(pReader->pSma), __func__, lino, tstrerror(code)); - TAOS_UNUSED(rsmaSnapReaderClose(&pReader)); + rsmaSnapReaderClose(&pReader); } else { smaInfo("vgId:%d, vnode snapshot rsma read succeed", SMA_VID(pReader->pSma)); } TAOS_RETURN(code); } -int32_t rsmaSnapReaderClose(SRSmaSnapReader** ppReader) { - int32_t code = 0; +void rsmaSnapReaderClose(SRSmaSnapReader** ppReader) { SRSmaSnapReader* pReader = *ppReader; for (int32_t i = 0; i < TSDB_RETENTION_L2; ++i) { if (pReader->pDataReader[i]) { - if ((code = tsdbSnapReaderClose(&pReader->pDataReader[i])) < 0) { - smaError("vgId:%d, vnode snapshot rsma , failed to close tsdbSnapReader since %s", SMA_VID(pReader->pSma), - tstrerror(code)); - } + tsdbSnapReaderClose(&pReader->pDataReader[i]); } } smaInfo("vgId:%d, vnode snapshot rsma reader closed", SMA_VID(pReader->pSma)); taosMemoryFreeClear(*ppReader); - TAOS_RETURN(code); + return; } // SRSmaSnapWriter ======================================== diff --git a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c index da49b40d18..bd22beb52d 100644 --- a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c +++ b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c @@ -440,9 +440,9 @@ _exit: return code; } -int32_t tsdbSnapReaderClose(STsdbSnapReader** reader) { +void tsdbSnapReaderClose(STsdbSnapReader** reader) { if (reader[0] == NULL) { - return 0; + return; } int32_t code = 0; @@ -469,7 +469,7 @@ int32_t tsdbSnapReaderClose(STsdbSnapReader** reader) { taosMemoryFree(reader[0]); reader[0] = NULL; - return code; + return; } int32_t tsdbSnapRead(STsdbSnapReader* reader, uint8_t** data) { diff --git a/source/dnode/vnode/src/tsdb/tsdbSnapshotRAW.c b/source/dnode/vnode/src/tsdb/tsdbSnapshotRAW.c index 609e2a80e9..a41003d9ab 100644 --- a/source/dnode/vnode/src/tsdb/tsdbSnapshotRAW.c +++ b/source/dnode/vnode/src/tsdb/tsdbSnapshotRAW.c @@ -75,8 +75,8 @@ _exit: return code; } -int32_t tsdbSnapRAWReaderClose(STsdbSnapRAWReader** reader) { - if (reader[0] == NULL) return 0; +void tsdbSnapRAWReaderClose(STsdbSnapRAWReader** reader) { + if (reader[0] == NULL) return; int32_t code = 0; int32_t lino = 0; @@ -87,14 +87,7 @@ int32_t tsdbSnapRAWReaderClose(STsdbSnapRAWReader** reader) { tsdbFSDestroyRefSnapshot(&reader[0]->fsetArr); taosMemoryFree(reader[0]); reader[0] = NULL; - -_exit: - if (code) { - TSDB_ERROR_LOG(TD_VID(tsdb->pVnode), lino, code); - } else { - tsdbDebug("vgId:%d %s done", TD_VID(tsdb->pVnode), __func__); - } - return code; + return; } static int32_t tsdbSnapRAWReadFileSetOpenReader(STsdbSnapRAWReader* reader) { diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c index 74b893d256..b65f9c0e1a 100644 --- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c +++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c @@ -219,15 +219,15 @@ void vnodeSnapReaderClose(SVSnapReader *pReader) { vnodeSnapReaderDestroyTsdbRanges(pReader); if (pReader->pRsmaReader) { - (void)rsmaSnapReaderClose(&pReader->pRsmaReader); + rsmaSnapReaderClose(&pReader->pRsmaReader); } if (pReader->pTsdbReader) { - (void)tsdbSnapReaderClose(&pReader->pTsdbReader); + tsdbSnapReaderClose(&pReader->pTsdbReader); } if (pReader->pTsdbRAWReader) { - (void)tsdbSnapRAWReaderClose(&pReader->pTsdbRAWReader); + tsdbSnapRAWReaderClose(&pReader->pTsdbRAWReader); } if (pReader->pMetaReader) { @@ -333,8 +333,7 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) goto _exit; } else { pReader->tsdbDone = 1; - code = tsdbSnapReaderClose(&pReader->pTsdbReader); - TSDB_CHECK_CODE(code, lino, _exit); + tsdbSnapReaderClose(&pReader->pTsdbReader); } } @@ -351,8 +350,7 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) goto _exit; } else { pReader->tsdbRAWDone = 1; - code = tsdbSnapRAWReaderClose(&pReader->pTsdbRAWReader); - TSDB_CHECK_CODE(code, lino, _exit); + tsdbSnapRAWReaderClose(&pReader->pTsdbRAWReader); } } @@ -463,8 +461,7 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) goto _exit; } else { pReader->rsmaDone = 1; - code = rsmaSnapReaderClose(&pReader->pRsmaReader); - TSDB_CHECK_CODE(code, lino, _exit); + rsmaSnapReaderClose(&pReader->pRsmaReader); } } @@ -590,15 +587,15 @@ extern int32_t tsdbDisableAndCancelAllBgTask(STsdb *pTsdb); extern void tsdbEnableBgTask(STsdb *pTsdb); static int32_t vnodeCancelAndDisableAllBgTask(SVnode *pVnode) { - (void)tsdbDisableAndCancelAllBgTask(pVnode->pTsdb); - (void)vnodeSyncCommit(pVnode); - (void)vnodeAChannelDestroy(&pVnode->commitChannel, true); + TAOS_CHECK_RETURN(tsdbDisableAndCancelAllBgTask(pVnode->pTsdb)); + TAOS_CHECK_RETURN(vnodeSyncCommit(pVnode)); + TAOS_CHECK_RETURN(vnodeAChannelDestroy(&pVnode->commitChannel, true)); return 0; } static int32_t vnodeEnableBgTask(SVnode *pVnode) { tsdbEnableBgTask(pVnode->pTsdb); - (void)vnodeAChannelInit(1, &pVnode->commitChannel); + TAOS_CHECK_RETURN(vnodeAChannelInit(1, &pVnode->commitChannel)); return 0; } @@ -613,7 +610,9 @@ int32_t vnodeSnapWriterOpen(SVnode *pVnode, SSnapshotParam *pParam, SVSnapWriter (void)taosThreadMutexLock(&pVnode->mutex); pVnode->disableWrite = true; (void)taosThreadMutexUnlock(&pVnode->mutex); - (void)vnodeCancelAndDisableAllBgTask(pVnode); + + code = vnodeCancelAndDisableAllBgTask(pVnode); + TSDB_CHECK_CODE(code, lino, _exit); // alloc pWriter = (SVSnapWriter *)taosMemoryCalloc(1, sizeof(*pWriter)); @@ -661,15 +660,18 @@ int32_t vnodeSnapWriterClose(SVSnapWriter *pWriter, int8_t rollback, SSnapshot * // prepare if (pWriter->pTsdbSnapWriter) { - (void)tsdbSnapWriterPrepareClose(pWriter->pTsdbSnapWriter, rollback); + code = tsdbSnapWriterPrepareClose(pWriter->pTsdbSnapWriter, rollback); + if (code) goto _exit; } if (pWriter->pTsdbSnapRAWWriter) { - (void)tsdbSnapRAWWriterPrepareClose(pWriter->pTsdbSnapRAWWriter); + code = tsdbSnapRAWWriterPrepareClose(pWriter->pTsdbSnapRAWWriter); + if (code) goto _exit; } if (pWriter->pRsmaSnapWriter) { - (void)rsmaSnapWriterPrepareClose(pWriter->pRsmaSnapWriter, rollback); + code = rsmaSnapWriterPrepareClose(pWriter->pRsmaSnapWriter, rollback); + if (code) goto _exit; } // commit json @@ -743,7 +745,9 @@ int32_t vnodeSnapWriterClose(SVSnapWriter *pWriter, int8_t rollback, SSnapshot * if (code) goto _exit; } - (void)vnodeBegin(pVnode); + code = vnodeBegin(pVnode); + if (code) goto _exit; + (void)taosThreadMutexLock(&pVnode->mutex); pVnode->disableWrite = false; (void)taosThreadMutexUnlock(&pVnode->mutex); @@ -755,7 +759,7 @@ _exit: vInfo("vgId:%d, vnode snapshot writer closed, rollback:%d", TD_VID(pVnode), rollback); taosMemoryFree(pWriter); } - (void)vnodeEnableBgTask(pVnode); + vnodeEnableBgTask(pVnode); return code; } From 00ef87dd3fdbcb8846825e322d4501040f26468e Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 23 Sep 2024 15:33:28 +0800 Subject: [PATCH 19/27] enh: handle void --- source/dnode/vnode/src/meta/metaCommit.c | 11 +--- source/dnode/vnode/src/tq/tqSnapshot.c | 30 +++++----- source/dnode/vnode/src/tq/tqStreamTaskSnap.c | 2 +- source/libs/stream/src/streamMeta.c | 9 +-- source/libs/tdb/inc/tdb.h | 12 ++-- source/libs/tdb/src/db/tdbBtree.c | 61 +++++++++++++++----- source/libs/tdb/src/db/tdbDb.c | 9 ++- source/libs/tdb/src/db/tdbPCache.c | 41 +++++++++---- source/libs/tdb/src/db/tdbPage.c | 5 +- source/libs/tdb/src/db/tdbPager.c | 48 ++++++++++----- source/libs/tdb/src/db/tdbTable.c | 14 ++++- source/libs/tdb/src/db/tdbTxn.c | 9 ++- source/libs/tdb/src/inc/tdbInt.h | 4 +- 13 files changed, 168 insertions(+), 87 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaCommit.c b/source/dnode/vnode/src/meta/metaCommit.c index ec9e2d90ec..f2a9f61595 100644 --- a/source/dnode/vnode/src/meta/metaCommit.c +++ b/source/dnode/vnode/src/meta/metaCommit.c @@ -91,12 +91,7 @@ int metaAbort(SMeta *pMeta) { return 0; } - int code = tdbAbort(pMeta->pEnv, pMeta->txn); - if (code) { - metaError("vgId:%d, failed to abort meta since %s", TD_VID(pMeta->pVnode), tstrerror(terrno)); - } else { - pMeta->txn = NULL; - } - - return code; + tdbAbort(pMeta->pEnv, pMeta->txn); + pMeta->txn = NULL; + return 0; } diff --git a/source/dnode/vnode/src/tq/tqSnapshot.c b/source/dnode/vnode/src/tq/tqSnapshot.c index 8861f1f49f..cfa97def74 100644 --- a/source/dnode/vnode/src/tq/tqSnapshot.c +++ b/source/dnode/vnode/src/tq/tqSnapshot.c @@ -42,7 +42,7 @@ int32_t tqSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, int8_t type, STqS pReader->type = type; // impl - TTB *pTb = NULL; + TTB* pTb = NULL; if (type == SNAP_DATA_TQ_CHECKINFO) { pTb = pTq->pCheckStore; } else if (type == SNAP_DATA_TQ_HANDLE) { @@ -132,7 +132,8 @@ int32_t tqSnapWriterOpen(STQ* pTq, int64_t sver, int64_t ever, STqSnapWriter** p // alloc pWriter = (STqSnapWriter*)taosMemoryCalloc(1, sizeof(*pWriter)); if (pWriter == NULL) { - code = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY);; + code = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + ; goto _err; } pWriter->pTq = pTq; @@ -160,7 +161,7 @@ int32_t tqSnapWriterClose(STqSnapWriter** ppWriter, int8_t rollback) { STQ* pTq = pWriter->pTq; if (rollback) { - (void)tdbAbort(pWriter->pTq->pMetaDB, pWriter->txn); + tdbAbort(pWriter->pTq->pMetaDB, pWriter->txn); } else { code = tdbCommit(pWriter->pTq->pMetaDB, pWriter->txn); if (code) goto _err; @@ -189,7 +190,8 @@ int32_t tqSnapHandleWrite(STqSnapWriter* pWriter, uint8_t* pData, uint32_t nData code = tDecodeSTqHandle(pDecoder, &handle); if (code) goto end; taosWLockLatch(&pTq->lock); - code = tqMetaSaveInfo(pTq, pTq->pExecStore, handle.subKey, (int)strlen(handle.subKey), pData + sizeof(SSnapDataHdr), nData - sizeof(SSnapDataHdr)); + code = tqMetaSaveInfo(pTq, pTq->pExecStore, handle.subKey, (int)strlen(handle.subKey), pData + sizeof(SSnapDataHdr), + nData - sizeof(SSnapDataHdr)); taosWUnLockLatch(&pTq->lock); end: @@ -200,15 +202,16 @@ end: } int32_t tqSnapCheckInfoWrite(STqSnapWriter* pWriter, uint8_t* pData, uint32_t nData) { - int32_t code = 0; - STQ* pTq = pWriter->pTq; + int32_t code = 0; + STQ* pTq = pWriter->pTq; STqCheckInfo info = {0}; code = tqMetaDecodeCheckInfo(&info, pData + sizeof(SSnapDataHdr), nData - sizeof(SSnapDataHdr)); - if(code != 0){ + if (code != 0) { goto _err; } - code = tqMetaSaveInfo(pTq, pTq->pCheckStore, &info.topic, strlen(info.topic), pData + sizeof(SSnapDataHdr), nData - sizeof(SSnapDataHdr)); + code = tqMetaSaveInfo(pTq, pTq->pCheckStore, &info.topic, strlen(info.topic), pData + sizeof(SSnapDataHdr), + nData - sizeof(SSnapDataHdr)); tDeleteSTqCheckInfo(&info); if (code) goto _err; @@ -220,22 +223,23 @@ _err: } int32_t tqSnapOffsetWrite(STqSnapWriter* pWriter, uint8_t* pData, uint32_t nData) { - int32_t code = 0; - STQ* pTq = pWriter->pTq; + int32_t code = 0; + STQ* pTq = pWriter->pTq; STqOffset info = {0}; code = tqMetaDecodeOffsetInfo(&info, pData + sizeof(SSnapDataHdr), nData - sizeof(SSnapDataHdr)); - if(code != 0){ + if (code != 0) { goto _err; } - code = tqMetaSaveInfo(pTq, pTq->pOffsetStore, info.subKey, strlen(info.subKey), pData + sizeof(SSnapDataHdr), nData - sizeof(SSnapDataHdr)); + code = tqMetaSaveInfo(pTq, pTq->pOffsetStore, info.subKey, strlen(info.subKey), pData + sizeof(SSnapDataHdr), + nData - sizeof(SSnapDataHdr)); tDeleteSTqOffset(&info); if (code) goto _err; return code; - _err: +_err: tqError("vgId:%d, vnode check info tq write failed since %s", TD_VID(pTq->pVnode), tstrerror(code)); return code; } diff --git a/source/dnode/vnode/src/tq/tqStreamTaskSnap.c b/source/dnode/vnode/src/tq/tqStreamTaskSnap.c index 2605d70c37..7c05b405ce 100644 --- a/source/dnode/vnode/src/tq/tqStreamTaskSnap.c +++ b/source/dnode/vnode/src/tq/tqStreamTaskSnap.c @@ -210,7 +210,7 @@ int32_t streamTaskSnapWriterClose(SStreamTaskWriter* pWriter, int8_t rollback, i streamMetaWLock(pTq->pStreamMeta); tqDebug("vgId:%d, vnode stream-task snapshot writer closed", TD_VID(pTq->pVnode)); if (rollback) { - (void)tdbAbort(pTq->pStreamMeta->db, pTq->pStreamMeta->txn); + tdbAbort(pTq->pStreamMeta->db, pTq->pStreamMeta->txn); } else { code = tdbCommit(pTq->pStreamMeta->db, pTq->pStreamMeta->txn); if (code) goto _err; diff --git a/source/libs/stream/src/streamMeta.c b/source/libs/stream/src/streamMeta.c index 4c51026640..7860dd9f0a 100644 --- a/source/libs/stream/src/streamMeta.c +++ b/source/libs/stream/src/streamMeta.c @@ -597,10 +597,7 @@ void streamMetaCloseImpl(void* arg) { streamMetaWUnLock(pMeta); // already log the error, ignore here - code = tdbAbort(pMeta->db, pMeta->txn); - if (code) { - stError("vgId:%d failed to jump of trans for tdb, code:%s", vgId, tstrerror(code)); - } + tdbAbort(pMeta->db, pMeta->txn); code = tdbTbClose(pMeta->pTaskDb); if (code) { stError("vgId:%d failed to close taskDb, code:%s", vgId, tstrerror(code)); @@ -895,7 +892,7 @@ int32_t streamMetaUnregisterTask(SStreamMeta* pMeta, int64_t streamId, int32_t t stError("vgId:%d failed to remove task:0x%" PRIx64 ", code:%s", pMeta->vgId, id.taskId, tstrerror(code)); } - int32_t size = (int32_t) taosHashGetSize(pMeta->pTasksMap); + int32_t size = (int32_t)taosHashGetSize(pMeta->pTasksMap); int32_t sizeInList = taosArrayGetSize(pMeta->pTaskList); if (sizeInList != size) { stError("vgId:%d tasks number not consistent in list:%d and map:%d, ", vgId, sizeInList, size); @@ -1077,7 +1074,7 @@ void streamMetaLoadAllTasks(SStreamMeta* pMeta) { tFreeStreamTask(pTask); STaskId id = streamTaskGetTaskId(pTask); - void* px = taosArrayPush(pRecycleList, &id); + void* px = taosArrayPush(pRecycleList, &id); if (px == NULL) { stError("s-task:0x%x failed record the task into recycle list due to out of memory", taskId); } diff --git a/source/libs/tdb/inc/tdb.h b/source/libs/tdb/inc/tdb.h index 374c3e0dc3..ad9af57abf 100644 --- a/source/libs/tdb/inc/tdb.h +++ b/source/libs/tdb/inc/tdb.h @@ -40,7 +40,7 @@ int32_t tdbBegin(TDB *pDb, TXN **pTxn, void *(*xMalloc)(void *, size_t), void (* int32_t tdbCommit(TDB *pDb, TXN *pTxn); int32_t tdbPostCommit(TDB *pDb, TXN *pTxn); int32_t tdbPrepareAsyncCommit(TDB *pDb, TXN *pTxn); -int32_t tdbAbort(TDB *pDb, TXN *pTxn); +void tdbAbort(TDB *pDb, TXN *pTxn); int32_t tdbAlter(TDB *pDb, int pages); // TTB @@ -79,11 +79,11 @@ int32_t tdbTbcUpsert(TBC *pTbc, const void *pKey, int nKey, const void *pData, i int32_t tdbTxnOpen(TXN *pTxn, int64_t txnid, void *(*xMalloc)(void *, size_t), void (*xFree)(void *, void *), void *xArg, int flags); -int32_t tdbTxnCloseImpl(TXN *pTxn); -#define tdbTxnClose(pTxn) \ - do { \ - (void)tdbTxnCloseImpl(pTxn); \ - (pTxn) = NULL; \ +void tdbTxnCloseImpl(TXN *pTxn); +#define tdbTxnClose(pTxn) \ + do { \ + tdbTxnCloseImpl(pTxn); \ + (pTxn) = NULL; \ } while (0) // other diff --git a/source/libs/tdb/src/db/tdbBtree.c b/source/libs/tdb/src/db/tdbBtree.c index a7bce24aa4..c688a6cc6a 100644 --- a/source/libs/tdb/src/db/tdbBtree.c +++ b/source/libs/tdb/src/db/tdbBtree.c @@ -118,7 +118,7 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, char const *tbname, SPg zArg.pBt = pBt; ret = tdbPagerFetchPage(pPager, &pgno, &pPage, tdbBtreeInitPage, &zArg, txn); if (ret < 0) { - (void)tdbAbort(pEnv, txn); + tdbAbort(pEnv, txn); tdbOsFree(pBt); return ret; } @@ -126,7 +126,7 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, char const *tbname, SPg ret = tdbPagerWrite(pPager, pPage); if (ret < 0) { tdbError("failed to write page since %s", terrstr()); - (void)tdbAbort(pEnv, txn); + tdbAbort(pEnv, txn); tdbOsFree(pBt); return ret; } @@ -139,7 +139,7 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, char const *tbname, SPg ret = tdbTbInsert(pPager->pEnv->pMainDb, tbname, strlen(tbname) + 1, &pBt->info, sizeof(pBt->info), txn); if (ret < 0) { - (void)tdbAbort(pEnv, txn); + tdbAbort(pEnv, txn); tdbOsFree(pBt); return ret; } @@ -513,7 +513,10 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild, TXN } // Copy the root page content to the child page - (void)tdbPageCopy(pRoot, pChild, 0); + ret = tdbPageCopy(pRoot, pChild, 0); + if (ret < 0) { + return ret; + } // Reinitialize the root page zArg.flags = TDB_BTREE_ROOT; @@ -633,14 +636,22 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx } } - (void)tdbPageDropCell(pParent, sIdx, pTxn, pBt); + ret = tdbPageDropCell(pParent, sIdx, pTxn, pBt); + if (ret < 0) { + tdbError("tdb/btree-balance: drop cell failed with ret: %d.", ret); + return TSDB_CODE_FAILED; + } if (!childNotLeaf) { SArray *ofps = pParent->pPager->ofps; if (ofps) { for (int i = 0; i < TARRAY_SIZE(ofps); ++i) { SPage *ofp = *(SPage **)taosArrayGet(ofps, i); - (void)tdbPagerInsertFreePage(pParent->pPager, ofp, pTxn); + ret = tdbPagerInsertFreePage(pParent->pPager, ofp, pTxn); + if (ret < 0) { + tdbError("tdb/btree-balance: insert free page failed with ret: %d.", ret); + return TSDB_CODE_FAILED; + } } if (destroyOfps) { @@ -853,7 +864,11 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx if (iNew == nNews - 1 && pIntHdr->pgno == 0) { pIntHdr->pgno = TDB_PAGE_PGNO(pNews[iNew]); } else { - (void)tdbBtreeDecodeCell(pPage, pCell, &cd, pTxn, pBt); + ret = tdbBtreeDecodeCell(pPage, pCell, &cd, pTxn, pBt); + if (ret < 0) { + tdbError("tdb/btree-balance: decode cell failed with ret: %d.", ret); + return TSDB_CODE_FAILED; + } // TODO: pCell here may be inserted as an overflow cell, handle it SCell *pNewCell = tdbOsMalloc(cd.kLen + 9); @@ -863,8 +878,12 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx int szNewCell; SPgno pgno; pgno = TDB_PAGE_PGNO(pNews[iNew]); - (void)tdbBtreeEncodeCell(pParent, cd.pKey, cd.kLen, (void *)&pgno, sizeof(SPgno), pNewCell, &szNewCell, + ret = tdbBtreeEncodeCell(pParent, cd.pKey, cd.kLen, (void *)&pgno, sizeof(SPgno), pNewCell, &szNewCell, pTxn, pBt); + if (ret < 0) { + tdbError("tdb/btree-balance: encode cell failed with ret: %d.", ret); + return TSDB_CODE_FAILED; + } ret = tdbPageInsertCell(pParent, sIdx++, pNewCell, szNewCell, 0); if (ret) { tdbError("tdb/btree-balance: insert cell failed with ret: %d.", ret); @@ -979,7 +998,10 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx for (pageIdx = 0; pageIdx < nOlds; ++pageIdx) { if (pageIdx >= nNews) { - (void)tdbPagerInsertFreePage(pBt->pPager, pOlds[pageIdx], pTxn); + ret = tdbPagerInsertFreePage(pBt->pPager, pOlds[pageIdx], pTxn); + if (ret < 0) { + return ret; + } } tdbPagerReturnPage(pBt->pPager, pOlds[pageIdx], pTxn); } @@ -2189,7 +2211,11 @@ int tdbBtcGet(SBTC *pBtc, const void **ppKey, int *kLen, const void **ppVal, int } pCell = tdbPageGetCell(pBtc->pPage, pBtc->idx); - (void)tdbBtreeDecodeCell(pBtc->pPage, pCell, &pBtc->coder, pBtc->pTxn, pBtc->pBt); + int32_t ret = tdbBtreeDecodeCell(pBtc->pPage, pCell, &pBtc->coder, pBtc->pTxn, pBtc->pBt); + if (ret < 0) { + tdbError("tdb/btc-get: decode cell failed with ret: %d.", ret); + return ret; + } if (ppKey) { *ppKey = (void *)pBtc->coder.pKey; @@ -2238,13 +2264,19 @@ int tdbBtcDelete(SBTC *pBtc) { destroyOfps = true; } - (void)tdbPageDropCell(pBtc->pPage, idx, pBtc->pTxn, pBtc->pBt); + ret = tdbPageDropCell(pBtc->pPage, idx, pBtc->pTxn, pBtc->pBt); + if (ret < 0) { + tdbError("tdb/btc-delete: page drop cell failed with ret: %d.", ret); + } SArray *ofps = pBtc->pPage->pPager->ofps; if (ofps) { for (int i = 0; i < TARRAY_SIZE(ofps); ++i) { SPage *ofp = *(SPage **)taosArrayGet(ofps, i); - (void)tdbPagerInsertFreePage(pBtc->pPage->pPager, ofp, pBtc->pTxn); + ret = tdbPagerInsertFreePage(pBtc->pPage->pPager, ofp, pBtc->pTxn); + if (ret < 0) { + tdbError("tdb/btc-delete: insert free page failed with ret: %d.", ret); + } } if (destroyOfps) { @@ -2282,7 +2314,10 @@ int tdbBtcDelete(SBTC *pBtc) { tdbError("tdb/btc-delete: malloc failed."); return terrno; } - (void)tdbBtreeEncodeCell(pPage, pKey, nKey, &pgno, sizeof(pgno), pCell, &szCell, pBtc->pTxn, pBtc->pBt); + ret = tdbBtreeEncodeCell(pPage, pKey, nKey, &pgno, sizeof(pgno), pCell, &szCell, pBtc->pTxn, pBtc->pBt); + if (ret < 0) { + tdbError("tdb/btc-delete: btree encode cell failed with ret: %d.", ret); + } ret = tdbPageUpdateCell(pPage, idx, pCell, szCell, pBtc->pTxn, pBtc->pBt); if (ret < 0) { diff --git a/source/libs/tdb/src/db/tdbDb.c b/source/libs/tdb/src/db/tdbDb.c index 825a6e2b94..eb2603bdd8 100644 --- a/source/libs/tdb/src/db/tdbDb.c +++ b/source/libs/tdb/src/db/tdbDb.c @@ -101,10 +101,10 @@ int tdbClose(TDB *pDb) { for (pPager = pDb->pgrList; pPager; pPager = pDb->pgrList) { pDb->pgrList = pPager->pNext; - (void)tdbPagerClose(pPager); + tdbPagerClose(pPager); } - (void)tdbPCacheClose(pDb->pCache); + tdbPCacheClose(pDb->pCache); tdbOsFree(pDb->pgrHash); tdbOsFree(pDb); } @@ -199,7 +199,7 @@ int32_t tdbPrepareAsyncCommit(TDB *pDb, TXN *pTxn) { return 0; } -int32_t tdbAbort(TDB *pDb, TXN *pTxn) { +void tdbAbort(TDB *pDb, TXN *pTxn) { SPager *pPager; int ret; @@ -208,13 +208,12 @@ int32_t tdbAbort(TDB *pDb, TXN *pTxn) { if (ret < 0) { tdbError("failed to abort pager since %s. dbName:%s, txnId:%" PRId64, tstrerror(terrno), pDb->dbName, pTxn->txnId); - return ret; } } tdbTxnClose(pTxn); - return 0; + return; } SPager *tdbEnvGetPager(TDB *pDb, const char *fname) { diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c index 6fcc8deb12..b0bcbd1a4c 100644 --- a/source/libs/tdb/src/db/tdbPCache.c +++ b/source/libs/tdb/src/db/tdbPCache.c @@ -42,12 +42,31 @@ static void tdbPCachePinPage(SPCache *pCache, SPage *pPage); static void tdbPCacheRemovePageFromHash(SPCache *pCache, SPage *pPage); static void tdbPCacheAddPageToHash(SPCache *pCache, SPage *pPage); static void tdbPCacheUnpinPage(SPCache *pCache, SPage *pPage); -static int tdbPCacheCloseImpl(SPCache *pCache); +static void tdbPCacheCloseImpl(SPCache *pCache); -static void tdbPCacheInitLock(SPCache *pCache) { (void)tdbMutexInit(&(pCache->mutex), NULL); } -static void tdbPCacheDestroyLock(SPCache *pCache) { (void)tdbMutexDestroy(&(pCache->mutex)); } -static void tdbPCacheLock(SPCache *pCache) { (void)tdbMutexLock(&(pCache->mutex)); } -static void tdbPCacheUnlock(SPCache *pCache) { (void)tdbMutexUnlock(&(pCache->mutex)); } +static void tdbPCacheInitLock(SPCache *pCache) { + if (tdbMutexInit(&(pCache->mutex), NULL) != 0) { + tdbError("tdb/pcache: mutex init failed."); + } +} + +static void tdbPCacheDestroyLock(SPCache *pCache) { + if (tdbMutexDestroy(&(pCache->mutex)) != 0) { + tdbError("tdb/pcache: mutex destroy failed."); + } +} + +static void tdbPCacheLock(SPCache *pCache) { + if (tdbMutexLock(&(pCache->mutex)) != 0) { + tdbError("tdb/pcache: mutex lock failed."); + } +} + +static void tdbPCacheUnlock(SPCache *pCache) { + if (tdbMutexUnlock(&(pCache->mutex)) != 0) { + tdbError("tdb/pcache: mutex unlock failed."); + } +} int tdbPCacheOpen(int pageSize, int cacheSize, SPCache **ppCache) { int32_t code = 0; @@ -74,7 +93,7 @@ int tdbPCacheOpen(int pageSize, int cacheSize, SPCache **ppCache) { _exit: if (code) { tdbError("%s failed at %s:%d since %s", __func__, __FILE__, __LINE__, tstrerror(code)); - (void)tdbPCacheClose(pCache); + tdbPCacheClose(pCache); *ppCache = NULL; } else { *ppCache = pCache; @@ -82,13 +101,13 @@ _exit: return code; } -int tdbPCacheClose(SPCache *pCache) { +void tdbPCacheClose(SPCache *pCache) { if (pCache) { - (void)tdbPCacheCloseImpl(pCache); + tdbPCacheCloseImpl(pCache); tdbOsFree(pCache->aPage); tdbOsFree(pCache); } - return 0; + return; } // TODO: @@ -514,7 +533,7 @@ static int tdbPCacheOpenImpl(SPCache *pCache) { return 0; } -static int tdbPCacheCloseImpl(SPCache *pCache) { +static void tdbPCacheCloseImpl(SPCache *pCache) { // free free page for (SPage *pPage = pCache->pFree; pPage;) { SPage *pPageT = pPage->pFreeNext; @@ -532,5 +551,5 @@ static int tdbPCacheCloseImpl(SPCache *pCache) { tdbOsFree(pCache->pgHash); tdbPCacheDestroyLock(pCache); - return 0; + return ; } diff --git a/source/libs/tdb/src/db/tdbPage.c b/source/libs/tdb/src/db/tdbPage.c index abc7fb5858..be391a75f1 100644 --- a/source/libs/tdb/src/db/tdbPage.c +++ b/source/libs/tdb/src/db/tdbPage.c @@ -64,7 +64,10 @@ int tdbPageCreate(int pageSize, SPage **ppPage, void *(*xMalloc)(void *, size_t) memset(ptr, 0, size); pPage = (SPage *)(ptr + pageSize); - (void)TDB_INIT_PAGE_LOCK(pPage); + int32_t code = TDB_INIT_PAGE_LOCK(pPage); + if (code) { + tdbError("tdb/page-create: init page lock failed."); + } pPage->pageSize = pageSize; pPage->pData = ptr; if (pageSize < 65536) { diff --git a/source/libs/tdb/src/db/tdbPager.c b/source/libs/tdb/src/db/tdbPager.c index 7d9e70cfaa..2753fe30d6 100644 --- a/source/libs/tdb/src/db/tdbPager.c +++ b/source/libs/tdb/src/db/tdbPager.c @@ -95,7 +95,7 @@ static int hashset_add(hashset_t set, void *item) { set->nitems = 0; for (size_t i = 0; i < old_capacity; ++i) { - (void)hashset_add_member(set, (void *)old_items[i]); + int nt = hashset_add_member(set, (void *)old_items[i]); } tdbOsFree(old_items); } @@ -209,12 +209,15 @@ int tdbPagerOpen(SPCache *pCache, const char *fileName, SPager **ppPager) { return 0; } -int tdbPagerClose(SPager *pPager) { +void tdbPagerClose(SPager *pPager) { if (pPager) { - (void)tdbOsClose(pPager->fd); + int32_t code = tdbOsClose(pPager->fd); + if (code) { + tdbWarn("failed to close file since %s", tstrerror(code)); + } tdbOsFree(pPager); } - return 0; + return; } int tdbPagerWrite(SPager *pPager, SPage *pPage) { @@ -224,14 +227,14 @@ int tdbPagerWrite(SPager *pPager, SPage *pPage) { if (pPage->isDirty) return 0; // ref page one more time so the page will not be release - (void)tdbRefPage(pPage); - tdbTrace("pager/mdirty page %p/%d/%d", pPage, TDB_PAGE_PGNO(pPage), pPage->id); + int32_t nRef = tdbRefPage(pPage); + tdbTrace("pager/mdirty page %p/%d/%d, ref:%d", pPage, TDB_PAGE_PGNO(pPage), pPage->id, nRef); // Set page as dirty pPage->isDirty = 1; tdbTrace("tdb/pager-write: put page: %p %d to dirty tree: %p", pPage, TDB_PAGE_PGNO(pPage), &pPager->rbt); - (void)tRBTreePut(&pPager->rbt, (SRBTreeNode *)pPage); + SRBTreeNode *tnode = tRBTreePut(&pPager->rbt, (SRBTreeNode *)pPage); // Write page to journal if neccessary if (TDB_PAGE_PGNO(pPage) <= pPager->dbOrigSize && @@ -244,7 +247,7 @@ int tdbPagerWrite(SPager *pPager, SPage *pPage) { } if (pPager->pActiveTxn->jPageSet) { - (void)hashset_add(pPager->pActiveTxn->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage))); + int32_t nt = hashset_add(pPager->pActiveTxn->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage))); } } @@ -340,7 +343,7 @@ int tdbPagerCommit(SPager *pPager, TXN *pTxn) { tRBTreeDrop(&pPager->rbt, (SRBTreeNode *)pPage); if (pTxn->jPageSet) { - (void)hashset_remove(pTxn->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage))); + int32_t nt = hashset_remove(pTxn->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage))); } tdbTrace("tdb/pager-commit: remove page: %p %d from dirty tree: %p", pPage, TDB_PAGE_PGNO(pPage), &pPager->rbt); @@ -577,7 +580,7 @@ int tdbPagerAbort(SPager *pPager, TXN *pTxn) { pPage->isDirty = 0; tRBTreeDrop(&pPager->rbt, (SRBTreeNode *)pPage); - (void)hashset_remove(pTxn->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage))); + int32_t nt = hashset_remove(pTxn->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage))); tdbPCacheMarkFree(pPager->pCache, pPage); tdbPCacheRelease(pPager->pCache, pPage, pTxn); } @@ -699,7 +702,11 @@ int tdbPagerFetchPage(SPager *pPager, SPgno *ppgno, SPage **ppPage, int (*initPa memcpy(&pgid, pPager->fid, TDB_FILE_ID_LEN); pgid.pgno = pgno; while ((pPage = tdbPCacheFetch(pPager->pCache, &pgid, pTxn)) == NULL) { - (void)tdbPagerFlushPage(pPager, pTxn); + int32_t code = tdbPagerFlushPage(pPager, pTxn); + if (code) { + tdbError("tdb/pager: %p, pPage: %p, flush page failed.", pPager, pPage); + return code; + } } tdbTrace("tdbttl fetch pager:%p", pPage->pPager); @@ -879,7 +886,9 @@ static int tdbPagerInitPage(SPager *pPager, SPage *pPage, int (*initPage)(SPage lcode = TDB_TRY_LOCK_PAGE(pPage); if (lcode == P_LOCK_SUCC) { if (TDB_PAGE_INITIALIZED(pPage)) { - (void)TDB_UNLOCK_PAGE(pPage); + if (TDB_UNLOCK_PAGE(pPage) != 0) { + tdbError("tdb/pager:%p, pgno:%d, unlock page failed.", pPager, pgno); + } return 0; } @@ -893,7 +902,10 @@ static int tdbPagerInitPage(SPager *pPager, SPage *pPage, int (*initPage)(SPage tdbTrace("tdb/pager:%p, pgno:%d, nRead:%" PRId64, pPager, pgno, nRead); if (nRead < pPage->pageSize) { tdbError("tdb/pager:%p, pgno:%d, nRead:%" PRId64 "pgSize:%" PRId32, pPager, pgno, nRead, pPage->pageSize); - (void)TDB_UNLOCK_PAGE(pPage); + if (TDB_UNLOCK_PAGE(pPage) < 0) { + tdbError("tdb/pager:%p, pgno:%d, nRead:%" PRId64 "pgSize:%" PRId32 " unlock page failed.", pPager, pgno, + nRead, pPage->pageSize); + } return TAOS_SYSTEM_ERROR(errno); } @@ -939,7 +951,10 @@ static int tdbPagerInitPage(SPager *pPager, SPage *pPage, int (*initPage)(SPage if (ret < 0) { tdbError("tdb/pager:%p, pgno:%d, nRead:%" PRId64 "pgSize:%" PRId32 " init page failed.", pPager, pgno, nRead, pPage->pageSize); - (void)TDB_UNLOCK_PAGE(pPage); + if (TDB_UNLOCK_PAGE(pPage) != 0) { + tdbError("tdb/pager:%p, pgno:%d, nRead:%" PRId64 "pgSize:%" PRId32 " unlock page failed.", pPager, pgno, nRead, + pPage->pageSize); + } return ret; } @@ -947,7 +962,10 @@ static int tdbPagerInitPage(SPager *pPager, SPage *pPage, int (*initPage)(SPage pPage->pPager = pPager; - (void)TDB_UNLOCK_PAGE(pPage); + if (TDB_UNLOCK_PAGE(pPage) != 0) { + tdbError("tdb/pager:%p, pgno:%d, nRead:%" PRId64 "pgSize:%" PRId32 " unlock page failed.", pPager, pgno, nRead, + pPage->pageSize); + } } else if (lcode == P_LOCK_BUSY) { nLoops = 0; for (;;) { diff --git a/source/libs/tdb/src/db/tdbTable.c b/source/libs/tdb/src/db/tdbTable.c index e7a25c7fee..d41f4c2e49 100644 --- a/source/libs/tdb/src/db/tdbTable.c +++ b/source/libs/tdb/src/db/tdbTable.c @@ -112,7 +112,11 @@ int tdbTbOpen(const char *tbname, int keyLen, int valLen, tdb_cmpr_fn_t keyCmprF return ret; } } else { - (void)tdbPagerRollback(pPager); + ret = tdbPagerRollback(pPager); + if (ret < 0) { + tdbOsFree(pTb); + return ret; + } } // pTb->pBt @@ -202,7 +206,7 @@ int tdbTbInsert(TTB *pTb, const void *pKey, int keyLen, const void *pVal, int va int tdbTbDelete(TTB *pTb, const void *pKey, int kLen, TXN *pTxn) { return tdbBtreeDelete(pTb->pBt, pKey, kLen, pTxn); } int tdbTbUpsert(TTB *pTb, const void *pKey, int kLen, const void *pVal, int vLen, TXN *pTxn) { - (void)tdbTbDelete(pTb, pKey, kLen, pTxn); + TAOS_UNUSED(tdbTbDelete(pTb, pKey, kLen, pTxn)); return tdbTbInsert(pTb, pKey, kLen, pVal, vLen, pTxn); } @@ -241,7 +245,11 @@ int32_t tdbTbTraversal(TTB *pTb, void *data, return ret; } - (void)tdbTbcMoveToFirst(pCur); + ret = tdbTbcMoveToFirst(pCur); + if (ret < 0) { + tdbTbcClose(pCur); + return ret; + } void *pKey = NULL; int kLen = 0; diff --git a/source/libs/tdb/src/db/tdbTxn.c b/source/libs/tdb/src/db/tdbTxn.c index 71560e3e85..fff0fc0261 100644 --- a/source/libs/tdb/src/db/tdbTxn.c +++ b/source/libs/tdb/src/db/tdbTxn.c @@ -31,7 +31,7 @@ int tdbTxnOpen(TXN *pTxn, int64_t txnid, void *(*xMalloc)(void *, size_t), void return 0; } -int tdbTxnCloseImpl(TXN *pTxn) { +void tdbTxnCloseImpl(TXN *pTxn) { if (pTxn) { if (pTxn->jPageSet) { hashset_destroy(pTxn->jPageSet); @@ -39,11 +39,14 @@ int tdbTxnCloseImpl(TXN *pTxn) { } if (pTxn->jfd) { - TAOS_UNUSED(tdbOsClose(pTxn->jfd)); + int32_t code = tdbOsClose(pTxn->jfd); + if (code) { + tdbError("tdb/txn: close journal file failed, code:%d", code); + } } tdbOsFree(pTxn); } - return 0; + return; } diff --git a/source/libs/tdb/src/inc/tdbInt.h b/source/libs/tdb/src/inc/tdbInt.h index a4498ee1ea..3e12483309 100644 --- a/source/libs/tdb/src/inc/tdbInt.h +++ b/source/libs/tdb/src/inc/tdbInt.h @@ -179,7 +179,7 @@ int tdbBtcUpsert(SBTC *pBtc, const void *pKey, int kLen, const void *pData, int // tdbPager.c ==================================== int tdbPagerOpen(SPCache *pCache, const char *fileName, SPager **ppPager); -int tdbPagerClose(SPager *pPager); +void tdbPagerClose(SPager *pPager); int tdbPagerOpenDB(SPager *pPager, SPgno *ppgno, bool toCreate, SBTree *pBt); int tdbPagerWrite(SPager *pPager, SPage *pPage); int tdbPagerBegin(SPager *pPager, TXN *pTxn); @@ -214,7 +214,7 @@ int tdbPagerRollback(SPager *pPager); // For page ref int tdbPCacheOpen(int pageSize, int cacheSize, SPCache **ppCache); -int tdbPCacheClose(SPCache *pCache); +void tdbPCacheClose(SPCache *pCache); int tdbPCacheAlter(SPCache *pCache, int32_t nPage); SPage *tdbPCacheFetch(SPCache *pCache, const SPgid *pPgid, TXN *pTxn); void tdbPCacheRelease(SPCache *pCache, SPage *pPage, TXN *pTxn); From a4114850b429ddcc94dfa7b0def42caa9ae87033 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 23 Sep 2024 15:38:55 +0800 Subject: [PATCH 20/27] more --- source/dnode/vnode/src/vnd/vnodeSnapshot.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c index b65f9c0e1a..f732596d3b 100644 --- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c +++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c @@ -759,7 +759,9 @@ _exit: vInfo("vgId:%d, vnode snapshot writer closed, rollback:%d", TD_VID(pVnode), rollback); taosMemoryFree(pWriter); } - vnodeEnableBgTask(pVnode); + if (vnodeEnableBgTask(pVnode) != 0) { + tsdbError("vgId:%d, failed to enable bg task", TD_VID(pVnode)); + } return code; } From 55d4d812e1b7426f9b4097915ac9e0d19b7d350d Mon Sep 17 00:00:00 2001 From: xiao-77 Date: Mon, 23 Sep 2024 15:43:21 +0800 Subject: [PATCH 21/27] fix ci error --- source/dnode/mnode/impl/src/mndMain.c | 7 ++----- source/dnode/mnode/impl/src/mndSnode.c | 9 +++------ 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index 4d91b17252..51c1d90d69 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -911,11 +911,8 @@ _OVER: int32_t contLen = tSerializeSEpSet(NULL, 0, &epSet); pMsg->info.rsp = rpcMallocCont(contLen); if (pMsg->info.rsp != NULL) { - code = tSerializeSEpSet(pMsg->info.rsp, contLen, &epSet); - if (code < 0) { - rpcFreeCont(pMsg->info.rsp); - pMsg->info.rsp = NULL; - TAOS_RETURN(code); + if (tSerializeSEpSet(pMsg->info.rsp, contLen, &epSet) < 0) { + mError("failed to serialize ep set"); } pMsg->info.hasEpSet = 1; pMsg->info.rspLen = contLen; diff --git a/source/dnode/mnode/impl/src/mndSnode.c b/source/dnode/mnode/impl/src/mndSnode.c index 3bfc7a7eea..2fb3d377c4 100644 --- a/source/dnode/mnode/impl/src/mndSnode.c +++ b/source/dnode/mnode/impl/src/mndSnode.c @@ -225,8 +225,7 @@ static int32_t mndSetCreateSnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, S } code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &createReq); if (code < 0) { - taosMemoryFree(pReq); - TAOS_RETURN(code); + mError("snode:%d, failed to serialize create drop snode request since %s", createReq.dnodeId, terrstr()); } STransAction action = {0}; @@ -257,8 +256,7 @@ static int32_t mndSetCreateSnodeUndoActions(STrans *pTrans, SDnodeObj *pDnode, S } code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); if (code < 0) { - taosMemoryFree(pReq); - TAOS_RETURN(code); + mError("snode:%d, failed to serialize create drop snode request since %s", dropReq.dnodeId, terrstr()); } STransAction action = {0}; @@ -393,8 +391,7 @@ static int32_t mndSetDropSnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SSn } code = tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); if (code < 0) { - taosMemoryFree(pReq); - TAOS_RETURN(code); + mError("snode:%d, failed to serialize create drop snode request since %s", dropReq.dnodeId, terrstr()); } STransAction action = {0}; From a1804419986fa8f8f141290529cee0669265111b Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 23 Sep 2024 16:20:05 +0800 Subject: [PATCH 22/27] enh: handle void --- source/client/src/clientMonitor.c | 29 +++---- source/dnode/mgmt/mgmt_dnode/src/dmWorker.c | 6 +- source/util/src/tencode.c | 2 +- source/util/src/thash.c | 5 +- source/util/src/theap.c | 14 ++-- source/util/src/tlrucache.c | 6 +- source/util/src/tskiplist.c | 50 ++++++------ source/util/src/tworker.c | 85 +++++++++++++++------ 8 files changed, 121 insertions(+), 76 deletions(-) diff --git a/source/client/src/clientMonitor.c b/source/client/src/clientMonitor.c index dbcc046b4a..f424e4d1a2 100644 --- a/source/client/src/clientMonitor.c +++ b/source/client/src/clientMonitor.c @@ -73,7 +73,7 @@ static void destroyMonitorClient(void* data) { } taosHashCleanup(pMonitor->counters); int ret = taos_collector_registry_destroy(pMonitor->registry); - if (ret){ + if (ret) { tscError("failed to destroy registry, pMonitor:%p ret:%d", pMonitor, ret); } taosMemoryFree(pMonitor); @@ -192,7 +192,7 @@ static void generateClusterReport(taos_collector_registry_t* registry, void* pTr if (strlen(pCont) != 0 && sendReport(pTransporter, epSet, pCont, MONITOR_TYPE_COUNTER, NULL) == 0) { int ret = taos_collector_registry_clear_batch(registry); - if (ret){ + if (ret) { tscError("failed to clear registry, ret:%d", ret); } } @@ -215,7 +215,8 @@ static void reportSendProcess(void* param, void* tmrId) { SEpSet ep = getEpSet_s(&pInst->mgmtEp); generateClusterReport(pMonitor->registry, pInst->pTransporter, &ep); - bool reset = taosTmrReset(reportSendProcess, pInst->monitorParas.tsMonitorInterval * 1000, param, monitorTimer, &tmrId); + bool reset = + taosTmrReset(reportSendProcess, pInst->monitorParas.tsMonitorInterval * 1000, param, monitorTimer, &tmrId); tscDebug("reset timer, pMonitor:%p, %d", pMonitor, reset); taosRUnLockLatch(&monitorLock); } @@ -265,7 +266,7 @@ void monitorCreateClient(int64_t clusterId) { } int r = taos_collector_registry_register_collector(pMonitor->registry, pMonitor->colector); - if (r){ + if (r) { tscError("failed to register collector, ret:%d", r); goto fail; } @@ -318,7 +319,7 @@ void monitorCreateClientCounter(int64_t clusterId, const char* name, const char* if (taos_collector_add_metric(pMonitor->colector, newCounter) != 0) { tscError("failed to add metric to collector"); int r = taos_counter_destroy(newCounter); - if (r){ + if (r) { tscError("failed to destroy counter, code: %d", r); } goto end; @@ -326,7 +327,7 @@ void monitorCreateClientCounter(int64_t clusterId, const char* name, const char* if (taosHashPut(pMonitor->counters, name, strlen(name), &newCounter, POINTER_BYTES) != 0) { tscError("failed to put counter to monitor"); int r = taos_counter_destroy(newCounter); - if (r){ + if (r) { tscError("failed to destroy counter, code: %d", r); } goto end; @@ -394,7 +395,7 @@ static void monitorWriteSlowLog2File(MonitorSlowLogData* slowLogData, char* tmpP if (pClient == NULL) { tscError("failed to allocate memory for slow log client"); int32_t ret = taosCloseFile(&pFile); - if (ret != 0){ + if (ret != 0) { tscError("failed to close file:%p ret:%d", pFile, ret); } return; @@ -406,7 +407,7 @@ static void monitorWriteSlowLog2File(MonitorSlowLogData* slowLogData, char* tmpP if (taosHashPut(monitorSlowLogHash, &slowLogData->clusterId, LONG_BYTES, &pClient, POINTER_BYTES) != 0) { tscError("failed to put clusterId:%" PRId64 " to hash table", slowLogData->clusterId); int32_t ret = taosCloseFile(&pFile); - if (ret != 0){ + if (ret != 0) { tscError("failed to close file:%p ret:%d", pFile, ret); } taosMemoryFree(pClient); @@ -635,7 +636,7 @@ static void processFileRemoved(SlowLogClient* pClient) { return; } int32_t ret = taosCloseFile(&(pClient->pFile)); - if (ret != 0){ + if (ret != 0) { tscError("failed to close file:%p ret:%d", pClient->pFile, ret); return; } @@ -728,7 +729,7 @@ static void monitorSendAllSlowLogFromTempDir(int64_t clusterId) { if (taosLockFile(pFile) < 0) { tscInfo("failed to lock file:%s since %s, maybe used by other process", filename, terrstr()); int32_t ret = taosCloseFile(&pFile); - if (ret != 0){ + if (ret != 0) { tscError("failed to close file:%p ret:%d", pFile, ret); } continue; @@ -749,7 +750,7 @@ static void monitorSendAllSlowLogFromTempDir(int64_t clusterId) { } int32_t ret = taosCloseDir(&pDir); - if (ret != 0){ + if (ret != 0) { tscError("failed to close dir, ret:%d", ret); } } @@ -831,7 +832,7 @@ static int32_t tscMonitortInit() { static void tscMonitorStop() { if (taosCheckPthreadValid(monitorThread)) { (void)taosThreadJoin(monitorThread, NULL); - (void)taosThreadClear(&monitorThread); + taosThreadClear(&monitorThread); } } @@ -897,7 +898,7 @@ void monitorClose() { taosHashCleanup(monitorSlowLogHash); taosTmrCleanUp(monitorTimer); taosCloseQueue(monitorQueue); - if(tsem2_destroy(&monitorSem) != 0) { + if (tsem2_destroy(&monitorSem) != 0) { tscError("failed to destroy semaphore"); } taosWUnLockLatch(&monitorLock); @@ -921,7 +922,7 @@ int32_t monitorPutData2MonitorQueue(MonitorSlowLogData data) { tscDebug("[monitor] write slow log to queue, clusterId:%" PRIx64 " type:%s, data:%s", slowLogData->clusterId, queueTypeStr[slowLogData->type], slowLogData->data); if (taosWriteQitem(monitorQueue, slowLogData) == 0) { - if(tsem2_post(&monitorSem) != 0) { + if (tsem2_post(&monitorSem) != 0) { tscError("failed to post semaphore"); } } else { diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c b/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c index 4cfadc8f59..1ed7c9ecd9 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c @@ -347,14 +347,14 @@ int32_t dmStartAuditThread(SDnodeMgmt *pMgmt) { void dmStopMonitorThread(SDnodeMgmt *pMgmt) { if (taosCheckPthreadValid(pMgmt->monitorThread)) { (void)taosThreadJoin(pMgmt->monitorThread, NULL); - (void)taosThreadClear(&pMgmt->monitorThread); + taosThreadClear(&pMgmt->monitorThread); } } void dmStopAuditThread(SDnodeMgmt *pMgmt) { if (taosCheckPthreadValid(pMgmt->auditThread)) { (void)taosThreadJoin(pMgmt->auditThread, NULL); - (void)taosThreadClear(&pMgmt->auditThread); + taosThreadClear(&pMgmt->auditThread); } } @@ -385,7 +385,7 @@ void dmStopCrashReportThread(SDnodeMgmt *pMgmt) { if (taosCheckPthreadValid(pMgmt->crashReportThread)) { (void)taosThreadJoin(pMgmt->crashReportThread, NULL); - (void)taosThreadClear(&pMgmt->crashReportThread); + taosThreadClear(&pMgmt->crashReportThread); } } diff --git a/source/util/src/tencode.c b/source/util/src/tencode.c index 99b0b2bded..e962edaa27 100644 --- a/source/util/src/tencode.c +++ b/source/util/src/tencode.c @@ -112,7 +112,7 @@ void tEndEncode(SEncoder* pCoder) { pCoder->size = pNode->size; pCoder->pos = pNode->pos; - (void)tEncodeI32(pCoder, len); + int32_t ret = tEncodeI32(pCoder, len); pCoder->pos += len; } diff --git a/source/util/src/thash.c b/source/util/src/thash.c index 758e283bc3..e3fc68928f 100644 --- a/source/util/src/thash.c +++ b/source/util/src/thash.c @@ -391,14 +391,13 @@ void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen) { int32_t taosHashGetDup(SHashObj *pHashObj, const void *key, size_t keyLen, void *destBuf) { terrno = 0; - (void)taosHashGetImpl(pHashObj, key, keyLen, &destBuf, 0, false); + void *data = taosHashGetImpl(pHashObj, key, keyLen, &destBuf, 0, false); return terrno; } int32_t taosHashGetDup_m(SHashObj *pHashObj, const void *key, size_t keyLen, void **destBuf, int32_t *size) { terrno = 0; - - (void)taosHashGetImpl(pHashObj, key, keyLen, destBuf, size, false); + void *data = taosHashGetImpl(pHashObj, key, keyLen, destBuf, size, false); return terrno; } diff --git a/source/util/src/theap.c b/source/util/src/theap.c index 7ee49ff56d..e906d1f55b 100644 --- a/source/util/src/theap.c +++ b/source/util/src/theap.c @@ -257,10 +257,11 @@ static PriorityQueueNode* pqHeapify(PriorityQueue* pq, size_t from, size_t last) static void pqBuildHeap(PriorityQueue* pq) { if (pqContainerSize(pq) > 1) { + PriorityQueueNode* node; for (size_t i = pqContainerSize(pq) - 1; i > 0; --i) { - (void)pqHeapify(pq, i, pqContainerSize(pq)); + node = pqHeapify(pq, i, pqContainerSize(pq)); } - (void)pqHeapify(pq, 0, pqContainerSize(pq)); + node = pqHeapify(pq, 0, pqContainerSize(pq)); } } @@ -274,23 +275,24 @@ static PriorityQueueNode* pqReverseHeapify(PriorityQueue* pq, size_t i) { } static void pqUpdate(PriorityQueue* pq, size_t i) { + PriorityQueueNode* node; if (i == 0 || pq->fn(pqContainerGetEle(pq, i)->data, pqContainerGetEle(pq, pqParent(i))->data, pq->param)) { // if value in pos i is smaller than parent, heapify down from i to the end - (void)pqHeapify(pq, i, pqContainerSize(pq)); + node = pqHeapify(pq, i, pqContainerSize(pq)); } else { // if value in pos i is big than parent, heapify up from i - (void)pqReverseHeapify(pq, i); + node = pqReverseHeapify(pq, i); } } static void pqRemove(PriorityQueue* pq, size_t i) { if (i == pqContainerSize(pq) - 1) { - (void)taosArrayPop(pq->container); + void* tmp = taosArrayPop(pq->container); return; } taosArraySet(pq->container, i, taosArrayGet(pq->container, pqContainerSize(pq) - 1)); - (void)taosArrayPop(pq->container); + void* tmp = taosArrayPop(pq->container); pqUpdate(pq, i); } diff --git a/source/util/src/tlrucache.c b/source/util/src/tlrucache.c index cfbd875890..5764f936f6 100644 --- a/source/util/src/tlrucache.c +++ b/source/util/src/tlrucache.c @@ -305,7 +305,7 @@ static void taosLRUCacheShardEvictLRU(SLRUCacheShard *shard, size_t charge, SArr SLRUEntry *old = shard->lru.next; taosLRUCacheShardLRURemove(shard, old); - (void)taosLRUEntryTableRemove(&shard->table, old->keyData, old->keyLength, old->hash); + SLRUEntry *tentry = taosLRUEntryTableRemove(&shard->table, old->keyData, old->keyLength, old->hash); TAOS_LRU_ENTRY_SET_IN_CACHE(old, false); shard->usage -= old->totalCharge; @@ -529,7 +529,7 @@ static void taosLRUCacheShardEraseUnrefEntries(SLRUCacheShard *shard) { while (shard->lru.next != &shard->lru) { SLRUEntry *old = shard->lru.next; taosLRUCacheShardLRURemove(shard, old); - (void)taosLRUEntryTableRemove(&shard->table, old->keyData, old->keyLength, old->hash); + SLRUEntry *tentry = taosLRUEntryTableRemove(&shard->table, old->keyData, old->keyLength, old->hash); TAOS_LRU_ENTRY_SET_IN_CACHE(old, false); shard->usage -= old->totalCharge; @@ -574,7 +574,7 @@ static bool taosLRUCacheShardRelease(SLRUCacheShard *shard, LRUHandle *handle, b lastReference = taosLRUEntryUnref(e); if (lastReference && TAOS_LRU_ENTRY_IN_CACHE(e)) { if (shard->usage > shard->capacity || eraseIfLastRef) { - (void)taosLRUEntryTableRemove(&shard->table, e->keyData, e->keyLength, e->hash); + SLRUEntry *tentry = taosLRUEntryTableRemove(&shard->table, e->keyData, e->keyLength, e->hash); TAOS_LRU_ENTRY_SET_IN_CACHE(e, false); } else { taosLRUCacheShardLRUInsert(shard, e); diff --git a/source/util/src/tskiplist.c b/source/util/src/tskiplist.c index ae01292e08..95680686cf 100644 --- a/source/util/src/tskiplist.c +++ b/source/util/src/tskiplist.c @@ -32,9 +32,9 @@ static SSkipListNode *tSkipListNewNode(uint8_t level); static SSkipListNode *tSkipListPutImpl(SSkipList *pSkipList, void *pData, SSkipListNode **direction, bool isForward, bool hasDup); -static FORCE_INLINE int32_t tSkipListWLock(SSkipList *pSkipList); -static FORCE_INLINE int32_t tSkipListRLock(SSkipList *pSkipList); -static FORCE_INLINE int32_t tSkipListUnlock(SSkipList *pSkipList); +static FORCE_INLINE void tSkipListWLock(SSkipList *pSkipList); +static FORCE_INLINE void tSkipListRLock(SSkipList *pSkipList); +static FORCE_INLINE void tSkipListUnlock(SSkipList *pSkipList); static FORCE_INLINE int32_t getSkipListRandLevel(SSkipList *pSkipList); SSkipList *tSkipListCreate(uint8_t maxLevel, uint8_t keyType, uint16_t keyLen, __compar_fn_t comparFn, uint8_t flags, @@ -103,7 +103,7 @@ SSkipList *tSkipListCreate(uint8_t maxLevel, uint8_t keyType, uint16_t keyLen, _ void tSkipListDestroy(SSkipList *pSkipList) { if (pSkipList == NULL) return; - (void)tSkipListWLock(pSkipList); + tSkipListWLock(pSkipList); SSkipListNode *pNode = SL_NODE_GET_FORWARD_POINTER(pSkipList->pHead, 0); @@ -113,7 +113,7 @@ void tSkipListDestroy(SSkipList *pSkipList) { tSkipListFreeNode(pTemp); } - (void)tSkipListUnlock(pSkipList); + tSkipListUnlock(pSkipList); if (pSkipList->lock != NULL) { (void)taosThreadRwlockDestroy(pSkipList->lock); taosMemoryFreeClear(pSkipList->lock); @@ -130,12 +130,12 @@ SSkipListNode *tSkipListPut(SSkipList *pSkipList, void *pData) { SSkipListNode *backward[MAX_SKIP_LIST_LEVEL] = {0}; SSkipListNode *pNode = NULL; - (void)tSkipListWLock(pSkipList); + tSkipListWLock(pSkipList); bool hasDup = tSkipListGetPosToPut(pSkipList, backward, pData); pNode = tSkipListPutImpl(pSkipList, pData, backward, false, hasDup); - (void)tSkipListUnlock(pSkipList); + tSkipListUnlock(pSkipList); return pNode; } @@ -293,11 +293,11 @@ SSkipListIterator *tSkipListCreateIterFromVal(SSkipList *pSkipList, const char * return iter; } - (void)tSkipListRLock(pSkipList); + tSkipListRLock(pSkipList); iter->cur = getPriorNode(pSkipList, val, order, &(iter->next)); - (void)tSkipListUnlock(pSkipList); + tSkipListUnlock(pSkipList); return iter; } @@ -307,13 +307,13 @@ bool tSkipListIterNext(SSkipListIterator *iter) { SSkipList *pSkipList = iter->pSkipList; - (void)tSkipListRLock(pSkipList); + tSkipListRLock(pSkipList); if (iter->order == TSDB_ORDER_ASC) { // no data in the skip list if (iter->cur == pSkipList->pTail || iter->next == NULL) { iter->cur = pSkipList->pTail; - (void)tSkipListUnlock(pSkipList); + tSkipListUnlock(pSkipList); return false; } @@ -329,7 +329,7 @@ bool tSkipListIterNext(SSkipListIterator *iter) { } else { if (iter->cur == pSkipList->pHead) { iter->cur = pSkipList->pHead; - (void)tSkipListUnlock(pSkipList); + tSkipListUnlock(pSkipList); return false; } @@ -344,7 +344,7 @@ bool tSkipListIterNext(SSkipListIterator *iter) { iter->step++; } - (void)tSkipListUnlock(pSkipList); + tSkipListUnlock(pSkipList); return (iter->order == TSDB_ORDER_ASC) ? (iter->cur != pSkipList->pTail) : (iter->cur != pSkipList->pHead); } @@ -413,25 +413,31 @@ static SSkipListIterator *doCreateSkipListIterator(SSkipList *pSkipList, int32_t return iter; } -static FORCE_INLINE int32_t tSkipListWLock(SSkipList *pSkipList) { +static FORCE_INLINE void tSkipListWLock(SSkipList *pSkipList) { if (pSkipList->lock) { - return taosThreadRwlockWrlock(pSkipList->lock); + if (taosThreadRwlockWrlock(pSkipList->lock) != 0) { + uError("failed to lock skip list"); + } } - return 0; + return; } -static FORCE_INLINE int32_t tSkipListRLock(SSkipList *pSkipList) { +static FORCE_INLINE void tSkipListRLock(SSkipList *pSkipList) { if (pSkipList->lock) { - return taosThreadRwlockRdlock(pSkipList->lock); + if (taosThreadRwlockRdlock(pSkipList->lock) != 0) { + uError("failed to lock skip list"); + } } - return 0; + return; } -static FORCE_INLINE int32_t tSkipListUnlock(SSkipList *pSkipList) { +static FORCE_INLINE void tSkipListUnlock(SSkipList *pSkipList) { if (pSkipList->lock) { - return taosThreadRwlockUnlock(pSkipList->lock); + if (taosThreadRwlockUnlock(pSkipList->lock) != 0) { + uError("failed to unlock skip list"); + } } - return 0; + return; } static bool tSkipListGetPosToPut(SSkipList *pSkipList, SSkipListNode **backward, void *pData) { diff --git a/source/util/src/tworker.c b/source/util/src/tworker.c index c2757dcabc..940cc2b8c8 100644 --- a/source/util/src/tworker.c +++ b/source/util/src/tworker.c @@ -59,7 +59,7 @@ void tQWorkerCleanup(SQWorkerPool *pool) { if (taosCheckPthreadValid(worker->thread)) { uInfo("worker:%s:%d is stopping", pool->name, worker->id); (void)taosThreadJoin(worker->thread, NULL); - (void)taosThreadClear(&worker->thread); + taosThreadClear(&worker->thread); uInfo("worker:%s:%d is stopped", pool->name, worker->id); } } @@ -77,7 +77,11 @@ static void *tQWorkerThreadFp(SQueueWorker *worker) { void *msg = NULL; int32_t code = 0; - (void)taosBlockSIGPIPE(); + int32_t ret = taosBlockSIGPIPE(); + if (ret < 0) { + uError("worker:%s:%d failed to block SIGPIPE", pool->name, worker->id); + } + setThreadName(pool->name); worker->pid = taosGetSelfPthreadId(); uInfo("worker:%s:%d is running, thread:%08" PRId64, pool->name, worker->id, worker->pid); @@ -122,7 +126,13 @@ STaosQueue *tQWorkerAllocQueue(SQWorkerPool *pool, void *ahandle, FItem fp) { (void)taosThreadMutexLock(&pool->mutex); taosSetQueueFp(queue, fp, NULL); - (void)taosAddIntoQset(pool->qset, queue, ahandle); + code = taosAddIntoQset(pool->qset, queue, ahandle); + if (code) { + taosCloseQueue(queue); + (void)taosThreadMutexUnlock(&pool->mutex); + terrno = code; + return NULL; + } // spawn a thread to process queue if (pool->num < pool->max) { @@ -191,7 +201,7 @@ void tAutoQWorkerCleanup(SAutoQWorkerPool *pool) { if (taosCheckPthreadValid(worker->thread)) { uInfo("worker:%s:%d is stopping", pool->name, worker->id); (void)taosThreadJoin(worker->thread, NULL); - (void)taosThreadClear(&worker->thread); + taosThreadClear(&worker->thread); uInfo("worker:%s:%d is stopped", pool->name, worker->id); } taosMemoryFree(worker); @@ -210,7 +220,11 @@ static void *tAutoQWorkerThreadFp(SQueueWorker *worker) { void *msg = NULL; int32_t code = 0; - (void)taosBlockSIGPIPE(); + int32_t ret = taosBlockSIGPIPE(); + if (ret < 0) { + uError("worker:%s:%d failed to block SIGPIPE", pool->name, worker->id); + } + setThreadName(pool->name); worker->pid = taosGetSelfPthreadId(); uInfo("worker:%s:%d is running, thread:%08" PRId64, pool->name, worker->id, worker->pid); @@ -254,7 +268,14 @@ STaosQueue *tAutoQWorkerAllocQueue(SAutoQWorkerPool *pool, void *ahandle, FItem (void)taosThreadMutexLock(&pool->mutex); taosSetQueueFp(queue, fp, NULL); - (void)taosAddIntoQset(pool->qset, queue, ahandle); + + code = taosAddIntoQset(pool->qset, queue, ahandle); + if (code) { + taosCloseQueue(queue); + (void)taosThreadMutexUnlock(&pool->mutex); + terrno = code; + return NULL; + } int32_t queueNum = taosGetQueueNumber(pool->qset); int32_t curWorkerNum = taosArrayGetSize(pool->workers); @@ -281,7 +302,7 @@ STaosQueue *tAutoQWorkerAllocQueue(SAutoQWorkerPool *pool, void *ahandle, FItem if (taosThreadCreate(&worker->thread, &thAttr, (ThreadFp)tAutoQWorkerThreadFp, worker) != 0) { uError("worker:%s:%d failed to create thread, total:%d", pool->name, worker->id, curWorkerNum); - (void)taosArrayPop(pool->workers); + void *tmp = taosArrayPop(pool->workers); taosMemoryFree(worker); taosCloseQueue(queue); terrno = TSDB_CODE_OUT_OF_MEMORY; @@ -342,7 +363,7 @@ void tWWorkerCleanup(SWWorkerPool *pool) { if (taosCheckPthreadValid(worker->thread)) { uInfo("worker:%s:%d is stopping", pool->name, worker->id); (void)taosThreadJoin(worker->thread, NULL); - (void)taosThreadClear(&worker->thread); + taosThreadClear(&worker->thread); taosFreeQall(worker->qall); taosCloseQset(worker->qset); uInfo("worker:%s:%d is stopped", pool->name, worker->id); @@ -362,7 +383,11 @@ static void *tWWorkerThreadFp(SWWorker *worker) { int32_t code = 0; int32_t numOfMsgs = 0; - (void)taosBlockSIGPIPE(); + int32_t ret = taosBlockSIGPIPE(); + if (ret < 0) { + uError("worker:%s:%d failed to block SIGPIPE", pool->name, worker->id); + } + setThreadName(pool->name); worker->pid = taosGetSelfPthreadId(); uInfo("worker:%s:%d is running, thread:%08" PRId64, pool->name, worker->id, worker->pid); @@ -407,7 +432,8 @@ STaosQueue *tWWorkerAllocQueue(SWWorkerPool *pool, void *ahandle, FItems fp) { code = taosOpenQset(&worker->qset); if (code) goto _OVER; - (void)taosAddIntoQset(worker->qset, queue, ahandle); + code = taosAddIntoQset(worker->qset, queue, ahandle); + if (code) goto _OVER; code = taosAllocateQall(&worker->qall); if (code) goto _OVER; @@ -423,7 +449,8 @@ STaosQueue *tWWorkerAllocQueue(SWWorkerPool *pool, void *ahandle, FItems fp) { pool->num++; if (pool->num > pool->max) pool->num = pool->max; } else { - (void)taosAddIntoQset(worker->qset, queue, ahandle); + code = taosAddIntoQset(worker->qset, queue, ahandle); + if (code) goto _OVER; pool->nextId = (pool->nextId + 1) % pool->max; } @@ -551,7 +578,7 @@ void tMultiWorkerCleanup(SMultiWorker *pWorker) { static int32_t tQueryAutoQWorkerAddWorker(SQueryAutoQWorkerPool *pool); static int32_t tQueryAutoQWorkerBeforeBlocking(void *p); static int32_t tQueryAutoQWorkerRecoverFromBlocking(void *p); -static int32_t tQueryAutoQWorkerWaitingCheck(SQueryAutoQWorkerPool *pPool); +static void tQueryAutoQWorkerWaitingCheck(SQueryAutoQWorkerPool *pPool); static bool tQueryAutoQWorkerTryRecycleWorker(SQueryAutoQWorkerPool *pPool, SQueryAutoQWorker *pWorker); #define GET_ACTIVE_N(int64_val) (int32_t)((int64_val) >> 32) @@ -629,7 +656,11 @@ static void *tQueryAutoQWorkerThreadFp(SQueryAutoQWorker *worker) { void *msg = NULL; int32_t code = 0; - (void)taosBlockSIGPIPE(); + int32_t ret = taosBlockSIGPIPE(); + if (ret < 0) { + uError("worker:%s:%d failed to block SIGPIPE", pool->name, worker->id); + } + setThreadName(pool->name); worker->pid = taosGetSelfPthreadId(); uDebug("worker:%s:%d is running, thread:%08" PRId64, pool->name, worker->id, worker->pid); @@ -648,7 +679,7 @@ static void *tQueryAutoQWorkerThreadFp(SQueryAutoQWorker *worker) { } } - (void)tQueryAutoQWorkerWaitingCheck(pool); + tQueryAutoQWorkerWaitingCheck(pool); if (qinfo.fp != NULL) { qinfo.workerId = worker->id; @@ -717,13 +748,13 @@ static bool tQueryAutoQWorkerTryDecActive(void *p, int32_t minActive) { return false; } -static int32_t tQueryAutoQWorkerWaitingCheck(SQueryAutoQWorkerPool *pPool) { +static void tQueryAutoQWorkerWaitingCheck(SQueryAutoQWorkerPool *pPool) { while (1) { int64_t val64 = pPool->activeRunningN; int32_t running = GET_RUNNING_N(val64), active = GET_ACTIVE_N(val64); while (running < pPool->num) { if (atomicCompareExchangeActiveAndRunning(&pPool->activeRunningN, &active, active, &running, running + 1)) { - return TSDB_CODE_SUCCESS; + return; } } if (atomicCompareExchangeActive(&pPool->activeRunningN, &active, active - 1)) { @@ -736,7 +767,7 @@ static int32_t tQueryAutoQWorkerWaitingCheck(SQueryAutoQWorkerPool *pPool) { if (!pPool->exit) (void)taosThreadCondWait(&pPool->waitingBeforeProcessMsgCond, &pPool->waitingBeforeProcessMsgLock); // recovered from waiting (void)taosThreadMutexUnlock(&pPool->waitingBeforeProcessMsgLock); - return TSDB_CODE_SUCCESS; + return; } bool tQueryAutoQWorkerTryRecycleWorker(SQueryAutoQWorkerPool *pPool, SQueryAutoQWorker *pWorker) { @@ -744,7 +775,7 @@ bool tQueryAutoQWorkerTryRecycleWorker(SQueryAutoQWorkerPool *pPool, SQueryAutoQ tQueryAutoQWorkerTryDecActive(pPool, pPool->num)) { (void)taosThreadMutexLock(&pPool->poolLock); SListNode *pNode = listNode(pWorker); - (void)tdListPopNode(pPool->workers, pNode); + SListNode *tNode = tdListPopNode(pPool->workers, pNode); // reclaim some workers if (pWorker->id >= pPool->maxInUse) { while (listNEles(pPool->exitedWorkers) > pPool->maxInUse - pPool->num) { @@ -752,7 +783,7 @@ bool tQueryAutoQWorkerTryRecycleWorker(SQueryAutoQWorkerPool *pPool, SQueryAutoQ SQueryAutoQWorker *pWorker = (SQueryAutoQWorker *)head->data; if (pWorker && taosCheckPthreadValid(pWorker->thread)) { (void)taosThreadJoin(pWorker->thread, NULL); - (void)taosThreadClear(&pWorker->thread); + taosThreadClear(&pWorker->thread); } taosMemoryFree(head); } @@ -777,7 +808,7 @@ bool tQueryAutoQWorkerTryRecycleWorker(SQueryAutoQWorkerPool *pPool, SQueryAutoQ (void)taosThreadMutexUnlock(&pPool->poolLock); return false; } - (void)tdListPopNode(pPool->backupWorkers, pNode); + SListNode *tNode1 = tdListPopNode(pPool->backupWorkers, pNode); tdListAppendNode(pPool->workers, pNode); (void)taosThreadMutexUnlock(&pPool->poolLock); @@ -862,7 +893,7 @@ void tQueryAutoQWorkerCleanup(SQueryAutoQWorkerPool *pPool) { (void)taosThreadMutexUnlock(&pPool->poolLock); if (worker && taosCheckPthreadValid(worker->thread)) { (void)taosThreadJoin(worker->thread, NULL); - (void)taosThreadClear(&worker->thread); + taosThreadClear(&worker->thread); } taosMemoryFree(pNode); } @@ -872,7 +903,7 @@ void tQueryAutoQWorkerCleanup(SQueryAutoQWorkerPool *pPool) { worker = (SQueryAutoQWorker *)pNode->data; if (worker && taosCheckPthreadValid(worker->thread)) { (void)taosThreadJoin(worker->thread, NULL); - (void)taosThreadClear(&worker->thread); + taosThreadClear(&worker->thread); } taosMemoryFree(pNode); } @@ -882,7 +913,7 @@ void tQueryAutoQWorkerCleanup(SQueryAutoQWorkerPool *pPool) { worker = (SQueryAutoQWorker *)pNode->data; if (worker && taosCheckPthreadValid(worker->thread)) { (void)taosThreadJoin(worker->thread, NULL); - (void)taosThreadClear(&worker->thread); + taosThreadClear(&worker->thread); } taosMemoryFree(pNode); } @@ -913,7 +944,13 @@ STaosQueue *tQueryAutoQWorkerAllocQueue(SQueryAutoQWorkerPool *pool, void *ahand (void)taosThreadMutexLock(&pool->poolLock); taosSetQueueFp(queue, fp, NULL); - (void)taosAddIntoQset(pool->qset, queue, ahandle); + code = taosAddIntoQset(pool->qset, queue, ahandle); + if (code) { + taosCloseQueue(queue); + queue = NULL; + (void)taosThreadMutexUnlock(&pool->poolLock); + return NULL; + } SQueryAutoQWorker worker = {0}; SQueryAutoQWorker *pWorker = NULL; From 49dd1c33f4bb5b47efad240522f060f3c5d9e205 Mon Sep 17 00:00:00 2001 From: gccgdb1234 Date: Mon, 23 Sep 2024 18:12:41 +0800 Subject: [PATCH 23/27] doc: fix syntax error --- docs/zh/06-advanced/05-data-in/17-mongodb.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/zh/06-advanced/05-data-in/17-mongodb.md b/docs/zh/06-advanced/05-data-in/17-mongodb.md index 860184df90..ffd3df1f2c 100644 --- a/docs/zh/06-advanced/05-data-in/17-mongodb.md +++ b/docs/zh/06-advanced/05-data-in/17-mongodb.md @@ -61,9 +61,9 @@ MongoDB 是一个介于关系型数据库与非关系型数据库之间的产品 ### 6. 配置数据查询 -**数据库** MongoDB 中源数据库,可以使用占位符进行动态配置,例如 database_${Y},可用占位符列表见下方表格。 +**数据库** MongoDB 中源数据库,可以使用占位符进行动态配置,例如 `database_${Y}`,可用占位符列表见下方表格。 -**集合** MongoDB 中集合,可以使用占位符进行动态配置,例如 collection_${md},可用占位符列表见下方表格。 +**集合** MongoDB 中集合,可以使用占位符进行动态配置,例如 `collection_${md}`,可用占位符列表见下方表格。 |占位符|描述|示例数据| |-|-|-| @@ -81,7 +81,7 @@ MongoDB 是一个介于关系型数据库与非关系型数据库之间的产品 **子表字段** 用于拆分子表的字段,通常与 transform 中的 tag 相对应,多个字段使用英文逗号分隔,例如 col_name1,col_name2。 > 此项配置主要为了解决数据迁移乱序问题,需要结合**查询模板**共同使用,否则不能达到预期效果,使用示例如下: -> 1. 配置两个子表字段``col_name1,col_name2` +> 1. 配置两个子表字段 `col_name1,col_name2` > 2. 在**查询模板**中添加子表字段占位符,例如 `{"ddate":{"$gte":${start_datetime},"$lt":${end_datetime}}, ${col_name1}, ${col_name2}}` 中的 `${col_name1}, ${col_name2}` 部分 > 3. 在 **transform** 中配置 `col_name1` 与 `col_name2` 两个 tag 映射 From 689b7ebfabc811b5e0abc98f9574be15c4c1ece9 Mon Sep 17 00:00:00 2001 From: gccgdb1234 Date: Mon, 23 Sep 2024 18:25:18 +0800 Subject: [PATCH 24/27] doc: fix syntax error --- docs/zh/06-advanced/05-data-in/17-mongodb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/zh/06-advanced/05-data-in/17-mongodb.md b/docs/zh/06-advanced/05-data-in/17-mongodb.md index ffd3df1f2c..73ef2eaf72 100644 --- a/docs/zh/06-advanced/05-data-in/17-mongodb.md +++ b/docs/zh/06-advanced/05-data-in/17-mongodb.md @@ -66,7 +66,7 @@ MongoDB 是一个介于关系型数据库与非关系型数据库之间的产品 **集合** MongoDB 中集合,可以使用占位符进行动态配置,例如 `collection_${md}`,可用占位符列表见下方表格。 |占位符|描述|示例数据| -|-|-|-| +| :-----: | :------------: |:--------:| |Y|完整的公历年表示,零填充的 4 位整数|2024| |y|公历年除以 100,零填充的 2 位整数|24| |M|整数月份(1 - 12)|1| From b990c07dbcf162a846cefbbcc01c1cd8fe000210 Mon Sep 17 00:00:00 2001 From: gccgdb1234 Date: Mon, 23 Sep 2024 18:33:28 +0800 Subject: [PATCH 25/27] doc: fix syntax error --- docs/zh/06-advanced/05-data-in/17-mongodb.md | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/zh/06-advanced/05-data-in/17-mongodb.md b/docs/zh/06-advanced/05-data-in/17-mongodb.md index 73ef2eaf72..507e417c36 100644 --- a/docs/zh/06-advanced/05-data-in/17-mongodb.md +++ b/docs/zh/06-advanced/05-data-in/17-mongodb.md @@ -19,9 +19,9 @@ MongoDB 是一个介于关系型数据库与非关系型数据库之间的产品 ### 2. 配置基本信息 -在 **名称** 字段中输入任务名称,例如 *`test_mongodb_01`* 。 +在 **名称** 字段中输入任务名称,例如 `test_mongodb_01` 。 -选择 **类型** 下拉框中的 *`MongoDB`* ,如下图所示(选择完成后页面中的字段会发生变化)。 +选择 **类型** 下拉框中的 `MongoDB` ,如下图所示(选择完成后页面中的字段会发生变化)。 **代理** 是非必填项,如有需要,可以在下拉框中选择指定的代理,也可以先点击右侧的 **+创建新的代理** 按钮创建一个新的代理。 @@ -80,19 +80,19 @@ MongoDB 是一个介于关系型数据库与非关系型数据库之间的产品 |F|相当于 ${Y}-${m}-${d}|2024-01-01| **子表字段** 用于拆分子表的字段,通常与 transform 中的 tag 相对应,多个字段使用英文逗号分隔,例如 col_name1,col_name2。 -> 此项配置主要为了解决数据迁移乱序问题,需要结合**查询模板**共同使用,否则不能达到预期效果,使用示例如下: -> 1. 配置两个子表字段 `col_name1,col_name2` -> 2. 在**查询模板**中添加子表字段占位符,例如 `{"ddate":{"$gte":${start_datetime},"$lt":${end_datetime}}, ${col_name1}, ${col_name2}}` 中的 `${col_name1}, ${col_name2}` 部分 -> 3. 在 **transform** 中配置 `col_name1` 与 `col_name2` 两个 tag 映射 +此项配置主要为了解决数据迁移乱序问题,需要结合**查询模板**共同使用,否则不能达到预期效果,使用示例如下: +1. 配置两个子表字段 `col_name1,col_name2` +2. 在**查询模板**中添加子表字段占位符,例如 `{"ddate":{"$gte":${start_datetime},"$lt":${end_datetime}}, ${col_name1}, ${col_name2}}` 中的 `${col_name1}, ${col_name2}` 部分 +3. 在 **transform** 中配置 `col_name1` 与 `col_name2` 两个 tag 映射 **查询模板** 用于查询数据的查询语句,JSON格式,语句中必须包含时间范围条件,且开始时间和结束时间必须成对出现。模板中定义的时间范围由源数据库中的某个代表时间的列和下面定义的占位符组成。 -> 使用不同的占位符表示不同的时间格式要求,具体有以下占位符格式: -> 1. `${start_datetime}`、`${end_datetime}`:对应后端 datetime 类型字段的筛选,如:`{"ddate":{"$gte":${start_datetime},"$lt":${end_datetime}}}` 将被转换为 `{"ddate":{"$gte":{"$date":"2024-06-01T00:00:00+00:00"},"$lt":{"$date":"2024-07-01T00:00:00+00:00"}}}` -> 2. `${start_timestamp}`、`${end_timestamp}`: 对应后端 timestamp 类型字段的筛选,如:`{"ttime":{"$gte":${start_timestamp},"$lt":${end_timestamp}}}` 将被转换为 `{"ttime":{"$gte":{"$timestamp":{"t":123,"i":456}},"$lt":{"$timestamp":{"t":123,"i":456}}}}` +使用不同的占位符表示不同的时间格式要求,具体有以下占位符格式: +1. `${start_datetime}`、`${end_datetime}`:对应后端 datetime 类型字段的筛选,如:`{"ddate":{"$gte":${start_datetime},"$lt":${end_datetime}}}` 将被转换为 `{"ddate":{"$gte":{"$date":"2024-06-01T00:00:00+00:00"},"$lt":{"$date":"2024-07-01T00:00:00+00:00"}}}` +2. `${start_timestamp}`、`${end_timestamp}`: 对应后端 timestamp 类型字段的筛选,如:`{"ttime":{"$gte":${start_timestamp},"$lt":${end_timestamp}}}` 将被转换为 `{"ttime":{"$gte":{"$timestamp":{"t":123,"i":456}},"$lt":{"$timestamp":{"t":123,"i":456}}}}` **查询排序** 执行查询时的排序条件,JSON格式,它必须符合 MongoDB 排序条件的格式规范,使用示例如下: -> 1. `{"createtime":1}`:MongoDB 查询结果按 createtime 正序返回。 -> 2. `{"createdate":1, "createtime":1}`:MongoDB 查询结果按 createdate 正序、createtime 正序返回。 +1. `{"createtime":1}`:MongoDB 查询结果按 createtime 正序返回。 +2. `{"createdate":1, "createtime":1}`:MongoDB 查询结果按 createdate 正序、createtime 正序返回。 **起始时间** 迁移数据的起始时间,此项为必填字段。 @@ -114,7 +114,7 @@ MongoDB 是一个介于关系型数据库与非关系型数据库之间的产品 在 **从列中提取或拆分** 中填写从消息体中提取或拆分的字段,例如:将 vValue 字段拆分成 `vValue_0` 和 `vValue_1` 这 2 个字段,选择 split 提取器,seperator 填写分割符 `,`, number 填写 2,配置完成后点击右侧的 **预览** 按钮可以查看转换的结果。 -在 **过滤** 中,填写过滤条件,例如:填写`Value > 0`,则只有 Value 大于 0 的数据才会被写入 TDengine,配置完成后点击右侧的 **预览** 按钮可以查看过滤的结果。 +在 **过滤** 中,填写过滤条件,例如:填写 `Value > 0`,则只有 Value 大于 0 的数据才会被写入 TDengine,配置完成后点击右侧的 **预览** 按钮可以查看过滤的结果。 在 **映射** 中,选择要映射到 TDengine 的超级表,以及映射到超级表的列,配置完成后点击右侧的 **预览** 按钮可以查看映射的结果。 From 640493fb9932fe8b86a36eed5e84dc6809af44a1 Mon Sep 17 00:00:00 2001 From: gccgdb1234 Date: Mon, 23 Sep 2024 18:41:13 +0800 Subject: [PATCH 26/27] doc: fix syntax error --- docs/zh/06-advanced/05-data-in/17-mongodb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/zh/06-advanced/05-data-in/17-mongodb.md b/docs/zh/06-advanced/05-data-in/17-mongodb.md index 507e417c36..2434e2e122 100644 --- a/docs/zh/06-advanced/05-data-in/17-mongodb.md +++ b/docs/zh/06-advanced/05-data-in/17-mongodb.md @@ -77,7 +77,7 @@ MongoDB 是一个介于关系型数据库与非关系型数据库之间的产品 |d|日期的数字表示(01 - 31)|01| |J|一年中的第几天(1 - 366)|1| |j|一年中的第几天(001 - 366)|001| -|F|相当于 ${Y}-${m}-${d}|2024-01-01| +|F|相当于 `${Y}-${m}-${d}`|2024-01-01| **子表字段** 用于拆分子表的字段,通常与 transform 中的 tag 相对应,多个字段使用英文逗号分隔,例如 col_name1,col_name2。 此项配置主要为了解决数据迁移乱序问题,需要结合**查询模板**共同使用,否则不能达到预期效果,使用示例如下: From 21994d450cc469771726c0714ed9735277edc327 Mon Sep 17 00:00:00 2001 From: sheyanjie-qq <249478495@qq.com> Date: Mon, 23 Sep 2024 20:22:56 +0800 Subject: [PATCH 27/27] update jdbc driver to 3.3.3 --- docs/en/08-develop/01-connect/index.md | 2 +- docs/examples/JDBC/JDBCDemo/pom.xml | 2 +- docs/examples/JDBC/connectionPools/pom.xml | 2 +- docs/examples/JDBC/consumer-demo/pom.xml | 2 +- docs/examples/JDBC/taosdemo/pom.xml | 2 +- docs/examples/java/pom.xml | 2 +- docs/zh/07-develop/01-connect/index.md | 2 +- docs/zh/14-reference/05-connector/14-java.mdx | 1 + 8 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/en/08-develop/01-connect/index.md b/docs/en/08-develop/01-connect/index.md index ab35f6ad63..f4dbccba24 100644 --- a/docs/en/08-develop/01-connect/index.md +++ b/docs/en/08-develop/01-connect/index.md @@ -90,7 +90,7 @@ If `maven` is used to manage the projects, what needs to be done is only adding com.taosdata.jdbc taos-jdbcdriver - 3.3.2 + 3.3.3 ``` diff --git a/docs/examples/JDBC/JDBCDemo/pom.xml b/docs/examples/JDBC/JDBCDemo/pom.xml index a9b981a026..315b147cce 100644 --- a/docs/examples/JDBC/JDBCDemo/pom.xml +++ b/docs/examples/JDBC/JDBCDemo/pom.xml @@ -19,7 +19,7 @@ com.taosdata.jdbc taos-jdbcdriver - 3.3.2 + 3.3.3 org.locationtech.jts diff --git a/docs/examples/JDBC/connectionPools/pom.xml b/docs/examples/JDBC/connectionPools/pom.xml index a3705e6834..1791bfe8bc 100644 --- a/docs/examples/JDBC/connectionPools/pom.xml +++ b/docs/examples/JDBC/connectionPools/pom.xml @@ -18,7 +18,7 @@ com.taosdata.jdbc taos-jdbcdriver - 3.3.2 + 3.3.3 diff --git a/docs/examples/JDBC/consumer-demo/pom.xml b/docs/examples/JDBC/consumer-demo/pom.xml index 0db41bc33f..dcabfc1249 100644 --- a/docs/examples/JDBC/consumer-demo/pom.xml +++ b/docs/examples/JDBC/consumer-demo/pom.xml @@ -17,7 +17,7 @@ com.taosdata.jdbc taos-jdbcdriver - 3.3.2 + 3.3.3 com.google.guava diff --git a/docs/examples/JDBC/taosdemo/pom.xml b/docs/examples/JDBC/taosdemo/pom.xml index 8e61cbecdf..ffe159ea49 100644 --- a/docs/examples/JDBC/taosdemo/pom.xml +++ b/docs/examples/JDBC/taosdemo/pom.xml @@ -67,7 +67,7 @@ com.taosdata.jdbc taos-jdbcdriver - 3.3.2 + 3.3.3 diff --git a/docs/examples/java/pom.xml b/docs/examples/java/pom.xml index c44be4704d..f23b73177e 100644 --- a/docs/examples/java/pom.xml +++ b/docs/examples/java/pom.xml @@ -22,7 +22,7 @@ com.taosdata.jdbc taos-jdbcdriver - 3.3.2 + 3.3.3 diff --git a/docs/zh/07-develop/01-connect/index.md b/docs/zh/07-develop/01-connect/index.md index b16e96922f..d15f481b05 100644 --- a/docs/zh/07-develop/01-connect/index.md +++ b/docs/zh/07-develop/01-connect/index.md @@ -89,7 +89,7 @@ TDengine 提供了丰富的应用程序开发接口,为了便于用户快速 com.taosdata.jdbc taos-jdbcdriver - 3.3.2 + 3.3.3 ``` diff --git a/docs/zh/14-reference/05-connector/14-java.mdx b/docs/zh/14-reference/05-connector/14-java.mdx index ec24f1329d..ba4cb38afd 100644 --- a/docs/zh/14-reference/05-connector/14-java.mdx +++ b/docs/zh/14-reference/05-connector/14-java.mdx @@ -33,6 +33,7 @@ REST 连接支持所有能运行 Java 的平台。 | taos-jdbcdriver 版本 | 主要变化 | TDengine 版本 | | :------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------: | +| 3.3.3 | 1. 解决了 Websocket statement 关闭导致的内存泄漏 | - | | 3.3.2 | 1. 优化 Websocket 连接下的参数绑定性能;2. 优化了对 mybatis 的支持 | - | | 3.3.0 | 1. 优化 Websocket 连接下的数据传输性能;2. 支持跳过 SSL 验证,默认关闭 | 3.3.2.0 及更高版本 | | 3.2.11 | 解决了 Native 连接关闭结果集 bug | - |

}Y>g?#)Heo9xH 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]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%0DdEAhIbOyHWx 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 Cs^wV# diff --git a/docs/zh/06-advanced/05-data-in/pic/postgres-05.png b/docs/zh/06-advanced/05-data-in/pic/postgres-05.png index e168d9e7397ccfdfc4c7a6219e261bb420e8ff48..2604deddb70f180fc05b21f8028915b06d6c2323 100644 GIT binary patch literal 31413 zcmcG$byQr1H~4R$prBC1#f0RbpkPU%prHL;Apq}87&|~i zL6Jg<3w=>=N!efWw$YeM-Fk2~c@St>l9LoL`yODS`=J;71!0YoYN%8E1S%9S7r{7@ zNq9w^E)=vpNb5TL0ZFpLs2!PSvek{TgO5tS2-Jb#v{vrgDhV%J9gl^euUibq+KX*h zq@=zZH-BqLCTX^Hv$kw?0bVGcMy)ZpcU8>xwT8GK?kv=(Z@G_LrJPkk9uA#bDB7>D z;kHJ=QOU_2Q_5SUl=jcswE^3LYMo0{yjuQSUIYtj$XM`+xw~H+(|RF9R*0{X6VUTj1TbHO!R* zWoS4*94>FKFyK-p^}7ZB0WX&d&e|;~EFtITk3ZY$d4<4$ztAey)IT)zZ6xUBbK1Nx zWP-XnE{~fHPAFw~Kb*vbgh?NJ^ygRI`;unvpdUZPecM7c*qE5UI5|xZivD={-rzSU zCu~eiObs?JE@301ZoL`Nmwq+3GqbQHq@*y*m9bt5zPv@B9fq77)z;UyOF zlZwikU0tC#-`2@q-Z0ICdTA>(E&~0peuu-Lz4Sty0REo<{$zji`K8f&%XdC6jl||P z@SuZhq7k3A;Rv3jDUFS0FP2(BZGMQu!WLXTkf&r!i~G#kgO^({t1F8@{VYJ`U&}pe zOPslL;rKH|@Hf?JjbE8No=$1#pYCHYW0&NKiy#JZ-R#7}*;QP3U%=0XmVO*CoB7L` znf8TmJJHv-P_?Ea;hu2ezVLX(*y28!0kdTpH0bB;(7qZ_c(cP_w7O7Jw3-XyZIgxE z{cJ)UJ~ev^0etB78)w5G;OL!mizNQ=w+g?xinWc zes4ppy>^0+To=<+Ubh3b!!jaAX4aq9jrj{U_Ua}UmLC={@6SPhlMM-PCJI!Q_XfYS z6MKMgp9CDq7@idAX4Ht@z11t(%=LcDFO5Cwp9nozWd7+n4t5*3xVRd@#Ay8P>CAp$ zDT2M`!~i1PgVev#kai)L7EapA1W}@K6rqmVHD8Y4NK)Qln2;E4fqAa?mK+yZ zkA@@d?;l#YhL)|ubk;0hhk+zm$A@4~C=K@` zJFR7lD6fr!^)?dJ5zdmAU<)Cip?+@cXxu}r4RKG`7;0(cYxDZfaxcnqUAxJHb-#pK zN(S*TU9Cyo_wY!N_uF#4Y`K|xg6&Bu#5`mpBeywrk~#XSIxz4w+A;Ff+p|oPu4Aon z)W!UGT^eV*`I*2Sy6j}hktOUQZ+N|)YewZI=>6qB`k(3TRv)xrW)yX5w%fKnk9gBz zX6;;T_8g9(BORCQ9t|gY?yuA7?Jk$dWFA`ELR8cFf6sI{Y+g)Qcs!h+BMdN+YM)N< zbGLQ#Gx)Wf*mf?u9W)JaoucZaf0y_Z?(K!ipXjNS@H|O-u`C~<#j;a*N(nZPypVDq zTPhdts==k+EMPis8#)O62=bBB=^w7`Oy+XK!>)h9`H2$u076mUDe-s(% zBGEs$B5X5C)iZnpM*TskeTu4R5suICbHH)x^Ob|@>z>$`_0SuJt%JX8xOgXowSYhP z`=g)7EXMH(IOD9a^^#nYtGX>Xf1d1 z6qaZ-mzj|f>rbntE%J=OBiUsA?5o;9`j-F8aCdSw{$&l@ZK$;}kwzLatVNK-*!Enx z-^hA<#rZ*Vp6oDsvG7S@!dam;H7);{mote-d%w8D8`g>Fw4jg9ck5hT^^vNv4Z5=wp> z$;$bQ^_&_K18%N-&Qn)1NKi4$w1vB>=89-R;I z)))qd3+wu)e8xeSs>R)y-62Zu=egR;^r^FowfEqr^AE<|40Z*MyyqA*UIT3t3n>bN zJP!pS>Gy(I{E5a?##;PC-B+bXnW|p~97<4!o=S)7Jlrf_o*aAZ9yW5-{N`raT-U?j z2TxXKpi@hS4O|i);#lb7su}qsiU}t7&gHaJl+zI%x25%m6A4E#ZB{$)<$|{xrsyN< zMS&2#0H->^)BQ&;JEZ$+$`}G8{RMFU%FV=UuLcTy3Y?G5<=0<>c;GeB*%7^@V03X49UYt3 zaHKgue8A3{euO)HtJ)7ccGTDn0x!9>;#Zsk)XQJw+Lo}een{mQ_5WmOv;UQZ)NYnN8;t1Dcg{i8zBX>udY2Z#7(dijJJQ%inB#2U`Tv; zuB}|GDQZI%{!Akm{q`kTOG5FO@ZhJrbJ+yxKV9qSb3xo!UlX%EVG+5!Y}|t*jj)kB zl$W`#o2;#-UMMzhI4$e1n-6%pMt9bDEBB7izjT?`d3I4PzXk0;8bZNw3|rhXXM36r zVQXve>{*~>nj6l31dDJQ`PH)?{&)lihEwVGuftm179&HGBlpKLv1vif1qxj_I$`q} z=HzSw>-wiJ2u>}7Dl%! z;W)YwKIszkf#9nk%EvF|0h0cTl7RJG4~unbg!l;8FoQEu_WPKh@8a#=CHuxo6kx|e zi#n9)Uj8hLJMwJ#o?MW!Qjd&{${dq*^`7?Q(5L$QNx8Dk7>p_Vg!oHh<6gaZn(qW46 zciKNN&Z}LvTl~`4D^ebPbhya%Ah-6w+s~IaSH-Z1+r0D0vpsu3AhT%8zt7U`!izt) z%~yW(>B9oM{Apo4UV<>{D=1J9mlOV{@I_AhH*sSPXmnLRI$V$jOfMp!P~t#zf!&MA z=QhIS5pXE&Jhk?Du#eIeu68m1s7D zD=NuG&A`kVEL3RVll0XQ9B(7+J$r@Jgth(%!5An1iL4P==u?yFja^CdhGSAOG=x+* z8!N6<`pRDl4E-8R^n>Y$iLei0EcAKJ4~_#fY*gOsXk}^tNSnm!5C6IU9R4BKVENVj z$+%?Cj-FWyCO#~>+fNb+RqkO1u;?YV3Rse}+#2T&Glz{Rg4i4b<1EXYUH`MmTu-Si z!`5b%pF{VcuOUdQ3%8Itp7_V_D%8_aGoJ|$hsK2D8m|0(I-~94_&L;fU5-jc8;G(( zR#L2=`7b>rGBJRh6V+AD2qInaAti@;b)lrd_H|&OvAiK6V-?F|AtlYp?YJ_rVsg#6 ztTyJmXTxCIevXZGz?@0-_R@2gdJsbKU_wG>&PI{tJ98#sebMtKJ-JPCq7QOdcBj^< zRHi`~o3l~x<^PUP5NkTcj!o#F8)SXF+1ET_F@Bj*SpzWVKDaEr!j}rTu+;>E2-VR? zUiMrhO>DhG3qP|?64nGI#CT`9)5d;n4O7-G7@xQDo;z}k>|auv{OuX}#ik!3m&tV5 zxe&Kbp0(ZC+<{!;87Vs8)gc)K5+DCvWDFa61l`6g+)v#aViZR3!;nyUaL7ED^22d; zs$QN;(|GCgd@=Y!+bZDS6yx#qH^YvyrxAHV-S0AQsg9ghd z2I?-nDEC9P2ikRbt58R3s}5chOaHNRog(VSjfwLVkx)5Nt3C`P{6m~1!ogat530(2 zn+z>ofU+ZG9_K$z!{m>@GqZFfH2LeMpU3Ic1lSAass_kM#hVa2_XzxBjIl$FW5-3- z9z2dFH1{FqlXqk+@cW5Pe(#DsM`v4lt_Pd1Iv>icl_&8jUv|77gYHC;J3g%%nH>hm z?cHv7`B>;k=pv}c5$e2XVvbFry z?rcJjnlT&Q=DK}ey_fcdhN!(p#A-{#l`>*X9M%iSEfUS#jaAn^G!Cgn?%w2Xc8A)9 z#4qS5G4}iSHh7KTug_yF^!~^9?_WyP_9gzQ24e;PkFeDL&IbLTKp8W30}OdZEdm0< z@x{g1(G?3DTh;8;^8)}aBa!Y#|W>Q>;ULN-0!Q-}%QbSu^atVb) zr*aOvK>`SAMJJr!7q^kLjR{%4l|7DSF>&#}#(sGyay$658;|GKu@iN(iZ2)LH>wO+ zc+=e63}i!mSfIt;)m?t=W>Qy4AP@r$1nQEyK(7|>#{(7*kG=?diye}8b;&9K1JRxltD)GJJ- zAs|u~1b*w5;hdT^4pBr#8RCV?#EYm>WhI}hv+bEidM92-?!Lailp{pHGD?Nf&yq0-a6j?=Ck>NGPt83B3|1b=8 zbL#leVo8dSGpL}$a<>n9MuiRX2W&eVRg{_@ws%d9Xl$5D@akUG(RA3N9v&4z1j-_a zm{Bacs_^(E>HFgO?BtSK@dWWWDFnOu(pNW|c83l#93P7lguol-LPgkC#|E|*yJ|<*#72jRj=-wcLwV2(T9{npOPb436UeC~X z6dp{AwS)9ofJ#Xmw+UY9&D`y%od&}Pi56djN}cSOKrERf2|jzp#y8UtjowE%*xBOY z0|MM`V}{`Q;-V}xZJqb@jIW!NjAX`W$m5&a>P9#27K>{|PxD(G;SG`GRt-Nb9uI5o zC()9l(h&)+E3l8N=sz~pfsLF?gh}y!E%A#4f`-22JiQwt%6v!P<|8W9%sr0dQ?xXg zA!Kftz#_snG4xf?;ABlMi`tdv7@8A zQHJxpakeg2>KGAJ5b?OU;=iHB2aAQ!@4chdSJPzS=<^4gU2&ZB+Z8pkjzg}e8zzOfnw%OPU4m z?X+xeAzSQ``99@X=8~R~JMwLYQ?*_OM#Nf%{${IZ(5)-$%zwf|Z&`L*ycU%FS%>z1 zUSimvzclYEZ5_F}rF+|8yZ$}*h{Ya(-ub8$^!Es*c~wC_icNO`D=D=p z&VwGc!5Mw+(8&Eqv?!Wk#Zb-fb*5``2Mw zQwY6XvF=cJBK7WDOGZ=^+Jd2M`SqLMf2K?>ZT*5xyx3P82+j)BQjxsEpGASqrIEKo1<)L;b%C#1uUhu zT9Kb;s5~<4-5GRB&BI*yJskp3kuhq&qMfMWP}ao(eVtseM8Es!g$iZJHvCS0WZZ`C zr>B=D`c?@I`I<+|O_DA(qqyz%eY9Y0gN~sIq>rq=VbHGV5Vl2F@jiDOgnA=fewCOS zsBT_nj1Mh$&6h$5D@q|vAn^T5rz^ERUO1Pm*+uwzR(VNqSTGdXq5DrR5$knFe*R8> z3J2@(6)x=h8uAY<{6g#f_H!3L{y3NxHsh1TplHPl5bAM)Gly)D8we^-rIpG>aNfnK z0ZDngadVzromee=k4m3b%yIG8xk<*3qqgT6?DHP87_yb|Wycei;=U_=h*z_;_ctQ} zlOfyJh8(8*^-BBRUQN`8hU$Xg#@m( z^QJcEE2kf4Z#?)9yeLuL@}Sh@B<=o`6yE;f>h%#%gYj{JM8{=ZL^uB?NgtkIkg~D) z@qO0^k96pHQD1|1vqRkt(Pr-ahfz??a68MaObjZ&I93&#G?_nZ|Y=5D+ z$Fi(8$+Waoq*yFQ9kqG1TQvsR?LX2ZH2BQ%-pKY;iJjk|+oOib$Xxj+Fz;vFQO6fa zGrB+mC2F8Kv>e!Ys(K!=E=M@eap}cUdSl}aMOc}4 zgxtS7BLoN5my+t>D-}bT3I7CIi>96&GiR^V0xGee@!;YmVRjl5t z@9t!`4eZaB&e_e|zpeCi^aPWT%98~Mgc1_#E2Np1_{t{4;LU(`E+4aCF+3Xc9 zV(+0BymH8DFVZ-PZZf-(ALGp3*;&W8yiz zAD!cRD814}^pD0Ppo3*f`+ENj<-dbm!zU1SEG;q<#X#Y$L1Tnlim43$)(oAE5m;D! z{2U>}+=ZLAiT(TTp1j93Az$8JoFbHaWdEo}HB@4(GAau1%uQ+7p={+jyfG?Bj^4q& z%00i~No~z-Sy?}jct`0Vi(a)U&rb45T^wB5naB!HHZLJ+>rPziVw5bQkA+5!-_QV6 z5_Rjezaf{a#fZ#w@|vuZg>|N>`g!ZQnBj+jMdulA_GKm6yS}tzg$AHZ@+#kh21=!9 z1u=uy!P~LNb?Ub6OAgbM(aEs}A+t7joqQc$bG5M1VXd@A5zPI_LT`7gTz(Q^+&I)c zXLMk7M_^H<(@6l6G7SIAG%bFBA=i)P+>=SSYdQAu`rB7hBI^gq`tOYjX(qw<49V88^6l%EZ!9%Rj zV`rFrAS2f%3dQz$uN6um+{0tbB;~l#L|B2l4LajeI_piFI%&eKG|2LQsk#W?ATnmK zeGV(9PQFw_)j*}9p)$}H*Im3ujmoBVGMoEKkqPyQroU_LAQO|PD#H_Y&K6d|Jo-Rc z{&RDUHMcZ{p4+GaW*xp^pj_c#3~eZdUhX_yZ#8uH#3Glp+d-N9ESo`2>+EYb)_e=8 z<%Xnn&p4bEGMyZ}*p&<(wD%oWS!3rz*%5K{3E?W4<))6sMh4A6U%9nRT5X3d5Vc26 z)MyvqZ+!VE0*&Z!iOkeR=;lx8^roSH+YvFZIK3IQ`+&_NFX&R=Xr#v@cRIWY@*K(e zvUvRO?E*<};LkNZ;Xdl)zulr}HU|kx8Df7sBwhUii{$(~Wx6+_eX(eEij?BT3^5t@ ze=Pq2N<2adm)3STE^^6lst@=gYU8%~+Rb}E{Ru1)T`jl8 zEKO+daYT1ke>V9e$Y9o7&P?MLsHzxZlD_}dDCvS>>M?T}jA_4@(EsKBiBw$k-V?2) z@abJgbgO}Or>E$+>Z*}_+HqA9DofdGhd-mt^J1BqsPQvJ)>?H;qr4SCObjIT0;XYg zoE$1m;5rBi`RUa8za=BBeYfCV^6Q}}iu=dz@K8;Zy5FuQrUBgpx>$gGm*~8ptD|#l zml~)nB-D&iFG6aCuZE6(L*3vZ576!&$4#2z|W? zPlQT;3J1+Xt_loE+>1?ibi-U|{fd*XFB|mdp!c z#K*;*6!0fkuKzhM2f$9827I8EUBK5jaW6nB>px-H|0CA=|LTQSR=Yys{M!Bju(V&= zbRt7>80b}8@sN~$25ZD2jHGt#U5w8xH2ezz7c~C%?eCWeiKk0;R(*-GS2~!1o5xm3 z*}kJdan_=`tK=u}z_d)jrIss=Z|*BcYQ4JN5CW0^7pT5_;4Cc6x8ufXpni^{(40lJ zje6VB*$@xZ7%ou!DKO$17`P;an3t&T7rcP6U#m&xxOl{A&RoxT{K}pjUS7_WtqH(B zF$n?7pc}dWK=H>C_yAaV*2^c8DH+^cn@of#xJPz=Iv?HOdReOo{amkOX`SWRF=wVo zGgN(Sl%7#8z3P95(v5g}*t_2tWBN#5V?1+u^t3569moN9vwB?Wa_fCQ&Vg4BQJgD!Toxg2 z$c<|}?$*+BKXtsUOv3S+em7GqD{gT-`pBKU9O2@5WToK_ox)pf%(91x%{s9+?RB~c zjlWxP-Bp74yV|<3n2#{!{`iOTsuqr_$1}o2557*@RDMBi9o`|E5o9?NIO zBA3Q@rP5S*vF|&Yo4k@OKg`Ik1Anu#wF=Ic1t6|7?Uy?H=>0R5-JjD<1K|Ub_iR$# z&$kt)CI>Send%)TAJ-Ljn;zn3Gw!k=6XDDg-%8Q>^9}ezQn&9YE}LclXs=!wf1CM0 zbJ>7#mnwFuSqCT30z2J87B%R$(FIBF-onw=PH(`v3Xn^h=EQtl?tDb}XrxiI;+wde zD3Sr8m)~cTdYB*XK6g~qwO%xEdY`Ci=De><$anu!rc1ii8`Ib-ckSU5=6 zT6j{6>0Ih%R_uiq)v-|)ggg$F7AbC!u*-7fjSFu;r77#{E_GwU78hU5o1N1eAQe$0 z=2|nPr(Q+c`UoMO4tlbL#}46)N%4}8H|X4LdM!+DOVDP~Z2tP*vh|C#jpZ#>6LIHT z`~1R{&SCfc_!ak_>&t4bI%jzE4^C%VSEEEw?wV^K?uO&DZ|C|xusku5R`Xu3wzPZS zrXL^L9}mcgl@+xb=fXs)4owdM!wFXwrMz!&aWo};rGeZ$BH2P5Sij(MsJ+-u9Tb%o z8+(+s6Xf0AqHVmkIOaSDVe7di=5Nh8XqY=!AXsv7al5l(R}F&~H#snRdob6R(W5Lc zO{Pu)>B|5L_4T+p_FXK&}ZObha7^BQ%2cZ%Pvpx-6oY=Jv{gKx3)+C z{7~B`zBwPmvvrVB+IK`@WY?wOm))z?;FbwF)A8U%TOQ|P6=}|lN$C?85g>S23yYSt zm5|Nc$^~FpSl_qXd!(-kz*X2a`djHg-<4ylZQfpS=M0>}}1{y~2o zCpJ3P6b|2(*%FOY@Xms7BFSx6{xQ6A!p2rVd2q3b?36#%y=IU~4hGL26{#M2t z1p_cMH@Y?)T09KSLnnwE<^mBFYk-z7qvB)b?VX1nafYez&4fJ&rF~Y3m>8~zlrZ#^au{PClO1B?}{D2dH z90)ai1F(w=1y`e8}wj_r4>Eb;fXKchXI?8NC>aU-p+Zy5ffYWrHV zbqLC~)o6u~n4%Ol*|W{mRGrLgAFgb3G`CGRSnD^jxIwwqIKTSTo|qS|Sr@hk9Y2FO zNCpM{D?XD11vX$Tndo(Q)H4rGeVQ-4?K1l`X?4lLYP(GgMG3a_%Y~Hn#7uNoF7V`+ zgi*(WWiM^k`nNgo@y}L}!c-6dhE)L-;6R=5&0tua&sWS2VKLaq{ouIOY#fEGl7-c# z*U=6)u@|Ej+P!_ka)0B&*PXdhj-{|#F+Q1a|Kw!~E1Z#X-6F1s{ldI&wAR5t%*p;{ z?TH-Y&0!!#T4S_zE@LIl;`YS_SfH)yoeKCp6wDuIlqgIy#%tNJ#g&}OoHRB2FiFmf z0brYZOEKFI&&mJBF`Si4Pu?rchg8ETo>Oft65EfIVet* z(C8A*$D^xFjH!BK0J~cy5nwZ}f&obOzTI28P%Of&6xdGNTd4L=#EcSP?PG>s! zD)W9ki^F#KRw+|iD_+bA(?nnoFuK(rWGlN*JD)go4)jhJp=8d7jN(Qu<0WDw2+D~5 zKKgY6O6{j%+f~(;aJJ|7^!gNfbHK8!PO_x=HO@>{?HN>ebNtfhH--^{5aoLf|L~@y z^=_bm1*1%(Dnn-m)wf_dSB|l<^UB}Og+XSRx+~31)bu&_&?L5)`P2n2IQ(L5I%cBo zE2AaNp8wX?92=T*U(SPC3u@i<^V51}l%Y9KcNyyhwl>s1Gk{~jf zO$=KhW>gTb_%}wG4>YYmy&r>!=ReW1 z?O~j#8KXuj<3BdOsj&1nM%lsFWd-W5QDb%ah$U+T;TtISeZ@^{T_BQD>6x^YJgaI# z9K4=uI6iQdWZl7sbIjvVnL=4klS)`)3%Xe}!d^0|g8BduZ4X!0Z-KkHF`_UW1dmNb zDeA;1CXMu!*m}Ti6MSz^>K&O{P2(Uai8As^vcT$HUtL7AhYaZCRgAPl?H%*8)bMu3+y_A`lx-OE%&j_> zXM&)LHj`24FTH06;@rcClQK!%@|s;eHR_bUAhbqhS`FBeDS8XeBGC}3{ebbAt=@PtrJx8|vB9w`G$g=iGV-#Gg z-qyel{dIbyduq|wJr3ITBuOMheW=yw59-XqD@uqC@e5+ElYjVK`Tv7)9xiLU40YQ9x_)TEQO#euq;l4ZFcn5 zRTE}acTd#S(z9|2AW8!3(8G2MK!4=f`{`gFk|hsd9DbG(9MW6yt88WUn9v^clXExv zi4ra9jF{j&R;*0jy&rgju(+~NeO-8Wh~+sx9@hLzApZ&OpQxY1J?aUVkd#e*C&Te# zHVoE=!=47AkJXV&q~EjJe%`KR;xA0ZgLTW5e;8C9!Z(`lUL2 z*%r+8NKv2C_GsIE_Ga7$956msZ?aRtV5U#Cm8atJd>CNAQVUDj6F*P@*i%SImX)|kB`!txPG^8Nx)7Nk;;5jiq~A)$5&AM zj*TKA@z6s0ey%UO=9(sBAq@8u{{pUJoZ|pc7f|<>f<46UCpYy8A4pPDI)<;B*?LY$ zmZ4@KM38}Ro+Gf``$_;eZX$~*jn1Nh_r!wu%N(~MH9SabUcw3HAkJ%xujDRK|g2X2oMP0min8nG^ zyM3cGxUa7?NEOwAiV|-7fs4y&ZO79na^>-}uO}uW|JmW_GZxFWOZi}bY`mS87?6*& z`Kal6ve%GuggWxkAS}KYOw8~d{g22n^Cpl9%$!7rxUut#SV`!^7{55ERteXIfx`qY z1tPvkkh3-1x?6O7z!tF~dMbjavV z4r+EE2~|!>X+;66d45z(ek^!{R>d&;#-MYNziErYNTG;|lwU8WX3k4HbC2ZxsQz>t zi4N!K75R!WT7<3)nOr@`2&UVwiktN9ueEmB%Jc+ zh7Kssw-@?oVre_-ZbO;9LRTC#RWb2*yJO=Zb1v0<8gz;u_=vyobJ$xOSmRr~R8lwi zZhFK_qgE1`vU@m}i*q*;dNYbu525XrY;^!Da8`8&HqrOVYq4lr zv6k}I7u`!8Yn7Q8%-AYB{#Z1MIFD>E_YoMy23iNPqQ^=hvI|D`(2K<>#&YBXMq_VK@b**&ZRK}`m|f{ zyZ;)D-cb)+xN>>}zZs$6v=iv zy?OHFO6G=jKB#f%_E(Fzp36<7pgGg}m_&<5`YK@Ca|UA11NP{_8_TvT@wd9^Vd(2$ z->i)oCwB?Xp%gUb_j`J@ptU1}g#8lvagi^ODU(26h4al9d1oUTm4HTKAc~BXh z9+@Cg2I*SwUHaHp<*sm=!ebO%=&?d;VtoKR(tZ9E-)S8|xN^l|rLk`o9Gq1$AbsZI zsv#k>zPn;-KUe&*B?i}T)ZRKAAEtCXGnlpXOqgAn|X;&7pLOT6Hf z0`8ao%O#t;CUJMB2x5!OhKwI{u@g;HE6m$~o5ZtGLV6N=7?2!mN(k1;@moxu{u4o z$%n$S$UTn5p{Iq>K67{Q@xFEy6ZCp+E;$u7FG(dA+* zm%6m>3WHxZ!3R`p&z(u1YAmB<9%Y2dx&Y+3p3Bdx#CU^U2$FBsy1fCqSIjPB@`Li3 znA*qmS9B3LT*5`PaFkP*UW-I@tXH{ws+|_wmFga*(rs#JI4~ZUeYu1r8pG2^S>?%! z>oj67!T~cuyylx}-`?uV-A(Iqv+})vPW@C?Ur!u|JhSn=SpTzEO*s#c0j#X(+x{Zc z96q;XTyjca0PH%-pOS|}zUY#@=n0B1TEnxR03UFsoh}0nTyOB3QebXFGBH>b^n5ct zDqQ68wUfU)hutd)PrKpq5Y|TW3LV0?h>3W3E=^k8d`}+bg%m(bNd;G7c#a}9;gbr( zGy1(#^?#Y`=p_MTyF}ZwqZB>r{6Co3|F6mc&v*NeC!qeT`U3QxoZK|Jd=?8Ws*8=0 z(WkT&?A4NwQgpsW^pmjmYa97FmsL+06Po`T` z0(^h})(liyAhKO-GqnHGfxg-fv7O&NoY9LukBx|cIONH)Hv&EIta)f_er za`krP$UTVSsKNATTXobP=p@ihcq9%KYa5u46@Pc@h?bv?N{t}GCtrOwhWnx)yQ5y9 zj<4Sc9-STVC~eq)RZ~2L_m44sZ7)F8rrSfTrK118O}q%Lg-o#x*?NZ za5@bZP6b>o|6kgHTxqfxzI4i7<^o6OUzfEs6d_>6F)pS-qs9vy|>SPCu=3S&GA{xCC%2?v^PVmprBdOHf_O$H|r zT9xOT<;BY1^&r_sjH~+I-$}=3;_j$^Edv>~4tP@=iBiaE9gv&XEe~qYY$#O@^ab5 zK^Wd%283q-sV&Q2ABRaN^ffyghjb-RbIR>*Nm%KMxB;K<%&d2jsb z*EXMvFN0M}swlPKmf3I9hEQX0Y4yHmf>Xpy+9DBz1;!_cXko!epqlRyY6>yeFG=)r z@b^q-dyD&_^0QAV^R9)U>S2n5|8IA!3?RHbmmk+K6weiC?Sl|@mjeI6(-tibjdDc> zHR>y7HbaWc*$8_sH21t?@0W_k{r&w7ZtYq$2+K$Zjo zut1jCAjrPsj@=rUb=>p+juWc#vUI>SxL~p>&B$Mt$@_9-b@8>j8&BEF*c>VCnHGBW zRc}w%GtD%k+gZfvv}ST{zQ;t1OWHi8o2i)CY(|Lwz3C(ye&L(oj%BoFzJD;5igaRlfqMKSPKzTx* zzBmK$yF~hW?`%H55WxiDi%I{o0O12_z6hUgjl7mkU~4ZY-!Iyn#rfYFyvyPut;|s3 z9%-ZQ`})sR=O9yebTb*M-xgWR_^Wqjg(2GqxEYx3C>PHn+NoV%I$^RsSKnUpt^3&p zm^n64whmSY9;mL)FA-bOA@1d0H-PHV`J&-iO<2hYF{&+S{c}lPtmk#5K_e`XIrtg zOoM@~V*$hb#xAou0*vT0$7Ydvs_vuLP826uz=M>JEB9fT6nUD^M5gK;Dwl0#>tz z6}Aqt7{~oR&T$Y!TTRkRM($sA26PSykAuy;wiR1_)<${_PFGrSG&DA-CHDvhpIubc zgnU)vy|(2Z)G||RO3@*H%{cwf)YiZHPPp$-FDo9?-q2V5i!9b5XWi_;!7WE-<>Sj& zEjNg|8DWWw4Yltk8t5D09{5`O&Emsnh!}g95h0%)nV3uzk=W&=*Q3Xwmk5C3Pu}xW zQcea}MJG=MbSdEa1Ofh2ROHZ$=Y0Dn$ zua6+IyqHQtvV#5Oav8kKx=B{A;c21ki3U`?Wii$D5KBehAo4Z6M)VVeS3h*BcnSxs zV!7>hfpq2_=uMpH_&-TDo(;a>VGjlxs!kl-A4pOHrLpjvQGw)k`5q`a!w+%JkS97Q z-U^Y)q;pw z3bEG>{EXQETw|Gl*_fWd?)H_xUzB9$etucfkSRA-zZfjJ8CosZujFmKveg8A?7%zN z>)Vme!3f2)cGn`|;WxrSm)X!_?KS`&W#|nbcHV z@>XPVJkxggym^&w)aG15*}*sS2l)dvT=T1@gE zgRZc2=^g>@W_PTjZJVe`y%x&n_^x+^u(GVxB5^T zYT@7KbtPH*R!Lt{4m7gQNj1FJF|h_66g`|qmV@!uE8U%|GT*wwb3o#ZYi>-o0U{0y zSZ1v=%lf&G)$;6s5@|=$9BO=tC5*{x6-wIn1{-U7Vx>FI_So|BE|rz-55V*L^cb+f)#g`zty%24+;#?a(iUki2&($WsKyRvLCBzd9gLA?d@rEvTyXQjMQZ+ZbgQC**cmdu!{DryOzd$k=E*E5q+b8{^t?`Kgh6{#RRppu`Sxc zYPrzI!Oz-bF<5b89d?mGJaICF<9v1=YRQY>&;n}W)cv!~Kb#K$Y&c04kZvdm?9YOV zp8{Tw#>pLpsT=_5xz>`N~xBch73w@=|Bo1VQFU0Iv!)uV`~x{ee7 z4YK`e?>>RRytRdu@m9i`;!<6qr%p*;#+#LL#*?tLI zFWvv5DgmBm&Rx5m z{ajz8XEQ+MYjj_r43HaTGUFeE2Y&~9$LZ8BU7#NQN!uu>_!J(^7>IJiVaTQ^n}+cSTdYr#834PE))SkgWTifg7lX+UcMI_8-FHj zObH?ey9ogJw^NQ0H>+oD1@O@I_xEpVF3;TFjXacOWw}5Xd?b(0{Ql_W!AJ7o#V;=} zAFBC$u3J@)nVI>MBj+a?hTN94P2hji{P&DL z$^VB_-TyxWVt>FOhw<+SR=~mgeWBNCtku~tq*W0ow^POEb$(kqBdKkDq^JDs+ltFO z4S7RNLqnxiZLw@f^*jVOo_x*Q`<<$qLnwtxy8rDQ+Sv%-+AS814JY9lwd@PGaCEg+ zRFc!bqw$X)4#Ti=uH6#8WrX7hYQ2yNp%Z{5m#~DIfJ0M5#J7! z&1iJ=9v?RjsQN=?#RG6;D8g_0W>ZvK>RwHa=pTgJV{yoL-S0ay@;|!Yklfxzsr)zB zorL$B>66U;D<0SVw2(QXt>+@Xy4Htud}6^_z2&dU5E6gG_e|O5VK47Na};SpHy6j< zi&{gj8U73I7WQSHT{iGw~=)A{OX(dlmMtAEbGi7r2d0q3NEGjN}Q1qU2-%4k}{ zC9qcS@^mhiY_fV8bxDmR*hu!YrM(Q(1(|8V)nC7#ff!L;Tc5r=`&oP1$349!;Pe@m z&R*J(NL}3H)8!$kdg$!`>Fq4Ts`|b-4^ko}-67qb(h|~0gLF%mbP7sIcY`7z(jeV= zflGIHNO!}%bM7zZnVDzeKQCs^J1(d8I{WOs*5|wSIztzb`kC>m@!yO#w1c=>VWH7` zS~Q>t7DVZNJb3z_HR;)2@p@Rn81zJQq4m9)?GsjU82c*spb=`~Zhitbbs~2LUEdWh zdzubXB@uXRPLHhOWoGYnEb zH)uINXbNkPu;p}KpEF(2T^IOZ<9d2Nu3QP_Q3@**>$D6 z8}qRZ_rueNK8KQG?RY@Fh=ai;oo@6f18aMF1s8Ap%mdO&M`pdw=h!W+I(fBd5Bp7b zKt^f5;SUpdIWP~0^EGkQP}kzA!lS8pK#N56Oc1X>TG%!o!w7m+4V+@TSUYe3Ow5!C zwb2C^PI^Dd2fqM$!zzpHG_(tp6Do7#R1N+5h?G#AoxV2eB`6ByGMf4QkppisyLFz; z&JOrzYj-Cod^CguN4cfke!sBU{mic&r0mSR*hu9#%b9qVO2;?n@mnMJ3>COR_`Z_& zdsXRfBQ!U=Ka6-ZQv$Q5ywfYM=RSbBii8xeNA*So!RaTi<;rc)-W~n+w=Bd!fux!G zF2ZlQJZ@Wm22%`|y`vBBJ|*MswppyD_u&t*3FRmDSQjKcMDHB5*G{6CUuZLy~gA* zckDIg!41s2@eZEyEO1;9+-QDd5fBlWzVnzRa~5{8QT=FKyvj3VA%hUZUUEjE8dsMj zMC=wlB(+@@QxkQ^e$f2op#cxx&04_Y-ubR#4I{J0y2Wu;5a>+D_?&RWz)PT#W$Jv~ z{(-F8ezSkIbM&HacDQ-I^`#^o|z+9H#nKCA5Ji^ zGqrY3M88kkg6(q~I(KVv$lFYoC+s#NaH=RG0Da_$1M?DPmY zuy5tj4Z4&D%k(;2xpOjDK>}y>4mKL@Cu|8*O