diff --git a/.github/workflows/tdengine-build.yml b/.github/workflows/tdengine-build.yml
index 2a71cae71c..1fd7831203 100644
--- a/.github/workflows/tdengine-build.yml
+++ b/.github/workflows/tdengine-build.yml
@@ -81,6 +81,8 @@ jobs:
-DBUILD_KEEPER=true \
-DBUILD_HTTP=false \
-DBUILD_TEST=true \
+ -DWEBSOCKET=true \
+ -DCMAKE_BUILD_TYPE=Release \
-DBUILD_DEPENDENCY_TESTS=false
make -j 4
sudo make install
diff --git a/docs/en/08-operation/09-backup.md b/docs/en/08-operation/09-backup.md
index ee0a56c497..a3ef6d19db 100644
--- a/docs/en/08-operation/09-backup.md
+++ b/docs/en/08-operation/09-backup.md
@@ -72,8 +72,16 @@ TDengine Enterprise implements incremental backup and recovery of data by using
7. **Directory:** Enter the full path of the directory in which you want to store backup files.
8. **Backup file max size:** Enter the maximum size of a single backup file. If the total size of your backup exceeds this number, the backup is split into multiple files.
9. **Compression level:** Select **fastest** for the fastest performance but lowest compression ratio, **best** for the highest compression ratio but slowest performance, or **balanced** for a combination of performance and compression.
-
-4. Click **Confirm** to create the backup plan.
+4. Users can enable S3 dumping to upload backup files to the S3 storage service. To enable S3 dumping, the following information needs to be provided:
+ 1. **Endpoint**: The address of the S3 endpoint.
+ 2. **Access Key ID**: The access key ID for authentication.
+ 3. **Secret Access Key**: The secret access key for authentication.
+ 4. **Bucket**: The name of the target bucket.
+ 5. **Region**: The region where the bucket is located.
+ 6. **Object Prefix**: A prefix for backup file objects, similar to a directory path on S3.
+ 7. **Backup Retention Period**: The retention duration for local backups. All files older than `current time - backup_retention_period` must be uploaded to S3.
+ 8. **Backup Retention Count**: The number of local backups to retain. Only the latest `backup_retention_size` backup files are kept locally.
+5. Click **Confirm** to create the backup plan.
You can view your backup plans and modify, clone, or delete them using the buttons in the **Operation** columns. Click **Refresh** to update the status of your plans. Note that you must stop a backup plan before you can delete it. You can also click **View** in the **Backup File** column to view the backup record points and files created by each plan.
diff --git a/docs/zh/14-reference/01-components/01-taosd.md b/docs/zh/14-reference/01-components/01-taosd.md
index 3722cce357..159b066313 100644
--- a/docs/zh/14-reference/01-components/01-taosd.md
+++ b/docs/zh/14-reference/01-components/01-taosd.md
@@ -366,7 +366,7 @@ taosd 命令行参数如下:
- 支持版本:v3.1.0.0 引入
#### queryNoFetchTimeoutSec
-- 说明:查询中当应用长时间不 FETCH 数据时的超时时间,从最后一次响应起计时,超时自动清除任务。 `内部参数`
+- 说明:查询中当应用长时间不 FETCH 数据时的超时时间,从最后一次响应起计时,超时自动清除任务。 **`内部参数`**
- 类型:整数;0:关闭;1:开启。
- 默认值:18000
- 最小值:60
@@ -375,7 +375,7 @@ taosd 命令行参数如下:
- 支持版本:从 v3.1.0.0 版本开始引入
#### queryPlannerTrace
-- 说明:查询计划是否输出详细日志 `内部参数`
+- 说明:查询计划是否输出详细日志 **`内部参数`**
- 类型:整数;0:关闭;1:开启。
- 默认值:0
- 最小值:0
@@ -384,7 +384,7 @@ taosd 命令行参数如下:
- 支持版本:从 v3.1.0.0 版本开始引入
#### queryNodeChunkSize
-- 说明:查询计划的块大小 `内部参数`
+- 说明:查询计划的块大小 **`内部参数`**
- 类型:整数
- 单位:byte
- 默认值:32 * 1024
@@ -394,7 +394,7 @@ taosd 命令行参数如下:
- 支持版本:从 v3.1.0.0 版本开始引入
#### queryUseNodeAllocator
-- 说明:查询计划的分配方法 `内部参数`
+- 说明:查询计划的分配方法 **`内部参数`**
- 类型:整数;0:关闭;1:开启。
- 默认值:1
- 最小值:0
@@ -403,7 +403,7 @@ taosd 命令行参数如下:
- 支持版本:从 v3.1.0.0 版本开始引入
#### queryMaxConcurrentTables
-- 说明:查询计划的分配方法 `内部参数`
+- 说明:查询计划的分配方法 **`内部参数`**
- 类型:整数
- 默认值:200
- 最小值:INT64_M
@@ -412,7 +412,7 @@ taosd 命令行参数如下:
- 支持版本:v3.1.0.0 引入
#### queryRsmaTolerance
-- 说明:查询计划的分配方法 `内部参数`
+- 说明:查询计划的分配方法 **`内部参数`**
- 类型:整数
- 默认值:1000
- 最小值:0
@@ -421,7 +421,7 @@ taosd 命令行参数如下:
- 支持版本:v3.1.0.0 引入
#### enableQueryHb
-- 说明:是否发送查询心跳消息 `内部参数`
+- 说明:是否发送查询心跳消息 **`内部参数`**
- 类型:整数;0:关闭;1:开启。
- 默认值:1
- 最小值:0
@@ -430,7 +430,7 @@ taosd 命令行参数如下:
- 支持版本:从 v3.1.0.0 版本开始引入
#### pqSortMemThreshold
-- 说明:排序使用的内存阈值 `内部参数`
+- 说明:排序使用的内存阈值 **`内部参数`**
- 类型:整数
- 单位:MB
- 默认值:16
@@ -579,7 +579,7 @@ charset 的有效值是 UTF-8。
- 支持版本:v3.1.0.0 引入
#### minDiskFreeSize
-- 说明:当某块磁盘上的可用空间小于等于这个阈值时,该磁盘将不再被选择用于生成新的数据文件。 `企业版参数`
+- 说明:当某块磁盘上的可用空间小于等于这个阈值时,该磁盘将不再被选择用于生成新的数据文件。 **`企业版参数`**
- 类型:整数
- 单位:byte
- 默认值:52428800
@@ -589,7 +589,7 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.1.0.0 版本开始引入
#### s3MigrateIntervalSec
-- 说明:本地数据文件自动上传 S3 的触发周期 `企业版参数`
+- 说明:本地数据文件自动上传 S3 的触发周期 **`企业版参数`**
- 类型:整数
- 单位:秒
- 默认值:3600
@@ -599,7 +599,7 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.3.4.3 版本开始引入
#### s3MigrateEnabled
-- 说明:是否自动进行 S3 迁移 `企业版参数`
+- 说明:是否自动进行 S3 迁移 **`企业版参数`**
- 类型:整数;0:关闭,1:开启。
- 默认值:0
- 最小值:0
@@ -608,24 +608,24 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.3.4.3 版本开始引入
#### s3Accesskey
-- 说明:冒号分隔的用户 SecretId:SecretKey `企业版参数`
+- 说明:冒号分隔的用户 SecretId:SecretKey **`企业版参数`**
- 示例:AKIDsQmwsfKxTo2A6nGVXZN0UlofKn6JRRSJ:lIdoy99ygEacU7iHfogaN2Xq0yumSm1E
- 动态修改:支持通过 SQL 修改,重启生效。
- 支持版本:从 v3.3.4.3 版本开始引入
#### s3Endpoint
-- 说明:用户所在地域的 COS 服务域名,支持 http 和 https,bucket 的区域需要与 endpoint 保持一致,否则无法访问。 `企业版参数`
+- 说明:用户所在地域的 COS 服务域名,支持 http 和 https,bucket 的区域需要与 endpoint 保持一致,否则无法访问。 **`企业版参数`**
- 动态修改:支持通过 SQL 修改,重启生效。
- 支持版本:从 v3.3.4.3 版本开始引入
#### s3BucketName
-- 说明:存储桶名称,减号后面是用户注册 COS 服务的 AppId,其中 AppId 是 COS 特有,AWS 和阿里云都没有,配置时需要作为 bucket name 的一部分,使用减号分隔;参数值均为字符串类型,但不需要引号。 `企业版参数`
+- 说明:存储桶名称,减号后面是用户注册 COS 服务的 AppId,其中 AppId 是 COS 特有,AWS 和阿里云都没有,配置时需要作为 bucket name 的一部分,使用减号分隔;参数值均为字符串类型,但不需要引号。 **`企业版参数`**
- 示例:test0711-1309024725
- 动态修改:支持通过 SQL 修改,重启生效。
- 支持版本:从 v3.3.4.3 版本开始引入
#### s3PageCacheSize
-- 说明:S3 page cache 缓存页数目 `企业版参数`
+- 说明:S3 page cache 缓存页数目 **`企业版参数`**
- 类型:整数
- 单位:页
- 默认值:4096
@@ -636,7 +636,7 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.3.4.3 版本开始引入
#### s3UploadDelaySec
-- 说明:data 文件持续多长时间不再变动后上传至 S3 `企业版参数`
+- 说明:data 文件持续多长时间不再变动后上传至 S3 **`企业版参数`**
- 类型:整数
- 单位:秒
- 默认值:60
@@ -646,7 +646,7 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.3.4.3 版本开始引入
#### cacheLazyLoadThreshold
-- 说明:缓存的装载策略 `内部参数`
+- 说明:缓存的装载策略 **`内部参数`**
- 类型:整数
- 默认值:500
- 最小值:0
@@ -831,7 +831,7 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.1.0.0 版本开始引入
#### audit
-- 说明:审计功能开关 `企业版参数`
+- 说明:审计功能开关 **`企业版参数`**
- 类型:整数;0:关闭,1:开启。
- 默认值:1
- 最小值:0
@@ -840,7 +840,7 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.1.0.0 版本开始引入
#### auditInterval
-- 说明:审计数据上报的时间间隔 `企业版参数`
+- 说明:审计数据上报的时间间隔 **`企业版参数`**
- 类型:整数
- 默认值:5000
- 最小值:500
@@ -849,7 +849,7 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.1.0.0 版本开始引入
#### auditCreateTable
-- 说明:是否针对创建子表开启申计功能 `企业版参数`
+- 说明:是否针对创建子表开启申计功能 **`企业版参数`**
- 类型:整数;0:关闭,1:开启。
- 默认值:1
- 最小值:0
@@ -858,19 +858,19 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.1.0.0 版本开始引入
#### encryptAlgorithm
-- 说明:数据加密算法 `企业版参数`
+- 说明:数据加密算法 **`企业版参数`**
- 类型:字符串
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
#### encryptScope
-- 说明:加密范围 `企业版参数`
+- 说明:加密范围 **`企业版参数`**
- 类型:字符串
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
#### enableWhiteList
-- 说明:白名单功能开关 `企业版参数`
+- 说明:白名单功能开关 **`企业版参数`**
- 类型:整数;0:关闭,1:开启。
- 默认值:0
- 最小值:0
@@ -889,109 +889,109 @@ charset 的有效值是 UTF-8。
- 支持版本:v3.1.3.2/v3.3.2.13 版本开始生效
#### syncElectInterval
-- 说明:用于同步模块调试 `内部参数`
+- 说明:用于同步模块调试 **`内部参数`**
- 类型:整数
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
#### syncHeartbeatInterval
-- 说明:用于同步模块调试 `内部参数`
+- 说明:用于同步模块调试 **`内部参数`**
- 类型:整数
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
#### syncHeartbeatTimeout
-- 说明:用于同步模块调试 `内部参数`
+- 说明:用于同步模块调试 **`内部参数`**
- 类型:整数
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
#### syncSnapReplMaxWaitN
-- 说明:用于同步模块调试 `内部参数`
+- 说明:用于同步模块调试 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### arbHeartBeatIntervalSec
-- 说明:用于同步模块调试 `内部参数`
+- 说明:用于同步模块调试 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### arbCheckSyncIntervalSec
-- 说明:用于同步模块调试 `内部参数`
+- 说明:用于同步模块调试 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### arbSetAssignedTimeoutSec
-- 说明:用于同步模块调试 `内部参数`
+- 说明:用于同步模块调试 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### arbSetAssignedTimeoutSec
-- 说明:用于 mnode 模块调试 `内部参数`
+- 说明:用于 mnode 模块调试 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### mndLogRetention
-- 说明:用于 mnode 模块调试 `内部参数`
+- 说明:用于 mnode 模块调试 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### skipGrant
-- 说明:用于授权检查 `内部参数`
+- 说明:用于授权检查 **`内部参数`**
- 类型:整数
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
#### trimVDbIntervalSec
-- 说明:用于删除过期数据 `内部参数`
+- 说明:用于删除过期数据 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### ttlFlushThreshold
-- 说明:ttl 定时器的频率 `内部参数`
+- 说明:ttl 定时器的频率 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### compactPullupInterval
-- 说明:数据重整定时器的频率 `内部参数`
+- 说明:数据重整定时器的频率 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### walFsyncDataSizeLimit
-- 说明:WAL 进行 FSYNC 的阈值 `内部参数`
+- 说明:WAL 进行 FSYNC 的阈值 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### transPullupInterval
-- 说明:mnode 执行事务的重试间 `内部参数`
+- 说明:mnode 执行事务的重试间 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### mqRebalanceInterval
-- 说明:消费者再平衡的时间间隔`内部参数`
+- 说明:消费者再平衡的时间间隔**`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### uptimeInterval
-- 说明:用于记录系统启动时间 `内部参数`
+- 说明:用于记录系统启动时间 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### timeseriesThreshold
-- 说明:用于统计用量 `内部参数`
+- 说明:用于统计用量 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
@@ -1006,13 +1006,13 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.1.0.0 版本开始引入
#### udfdResFuncs
-- 说明:用于统计用量 `内部参数`
+- 说明:用于统计用量 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,重启生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### udfdLdLibPath
-- 说明:用于统计用量 `内部参数`
+- 说明:用于统计用量 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,重启生效
- 支持版本:v3.1.0.0 引入
@@ -1046,31 +1046,31 @@ charset 的有效值是 UTF-8。
- 支持版本:从 v3.1.0.0 版本开始引入
#### streamAggCnt
-- 说明:并发进行聚合计算的数目 `内部参数`
+- 说明:并发进行聚合计算的数目 **`内部参数`**
- 类型:整数
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
#### checkpointInterval
-- 说明:checkponit 同步间隔 `内部参数`
+- 说明:checkponit 同步间隔 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,重启生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### concurrentCheckpoint
-- 说明:是否并发检查 checkpoint `内部参数`
+- 说明:是否并发检查 checkpoint **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### maxStreamBackendCache
-- 说明:流计算使用的最大缓存 `内部参数`
+- 说明:流计算使用的最大缓存 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### streamSinkDataRate
-- 说明:用于控制流计算结果的写入速度 `内部参数`
+- 说明:用于控制流计算结果的写入速度 **`内部参数`**
- 类型:整数
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
@@ -1364,7 +1364,7 @@ charset 的有效值是 UTF-8。
- 支持版本:v3.3.5.0 引入
#### scriptDir
-- 说明:测试工具的脚本目录 `内部参数`
+- 说明:测试工具的脚本目录 **`内部参数`**
- 类型:字符串
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
@@ -1379,62 +1379,62 @@ charset 的有效值是 UTF-8。
- 支持版本:v3.1.0.0 引入
#### randErrorChance
-- 说明:用于随机失败测试 `内部参数`
+- 说明:用于随机失败测试 **`内部参数`**
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### randErrorDivisor
-- 说明:用于随机失败测试 `内部参数`
+- 说明:用于随机失败测试 **`内部参数`**
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### randErrorScope
-- 说明:用于随机失败测试 `内部参数`
+- 说明:用于随机失败测试 **`内部参数`**
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### safetyCheckLevel
-- 说明:用于随机失败测试 `内部参数`
+- 说明:用于随机失败测试 **`内部参数`**
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### experimental
-- 说明:用于一些实验特性 `内部参数`
+- 说明:用于一些实验特性 **`内部参数`**
- 动态修改:支持通过 SQL 修改,立即生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### simdEnable
-- 说明:用于测试 SIMD 加速 `内部参数`
+- 说明:用于测试 SIMD 加速 **`内部参数`**
- 动态修改:不支持
- 支持版本:v3.3.4.3 引入
#### AVX512Enable
-- 说明:用于测试 AVX512 加速 `内部参数`
+- 说明:用于测试 AVX512 加速 **`内部参数`**
- 动态修改:不支持
- 支持版本:v3.3.4.3 引入
#### rsyncPort
-- 说明:用于调试流计算 `内部参数`
+- 说明:用于调试流计算 **`内部参数`**
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
#### snodeAddress
-- 说明:用于调试流计算 `内部参数`
+- 说明:用于调试流计算 **`内部参数`**
- 动态修改:支持通过 SQL 修改,重启生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### checkpointBackupDir
-- 说明:用于恢复 snode 数据 `内部参数`
+- 说明:用于恢复 snode 数据 **`内部参数`**
- 动态修改:支持通过 SQL 修改,重启生效。
- 支持版本:从 v3.1.0.0 版本开始引入
#### enableAuditDelete
-- 说明:用于测试审计功能 `内部参数`
+- 说明:用于测试审计功能 **`内部参数`**
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
#### slowLogThresholdTest
-- 说明:用于测试慢日志 `内部参数`
+- 说明:用于测试慢日志 **`内部参数`**
- 动态修改:不支持
- 支持版本:v3.1.0.0 引入
@@ -1488,17 +1488,17 @@ charset 的有效值是 UTF-8。
- 支持版本:从v3.1.0.0 版本引入,v3.3.0.0 以后废弃。
#### maxRange
-- 说明:用于有损压缩设置 `内部参数`
+- 说明:用于有损压缩设置 **`内部参数`**
- 动态修改:支持通过 SQL 修改,重启生效。
- 支持版本:从v3.1.0.0 版本引入,v3.3.0.0 以后废弃。
#### curRange
-- 说明:用于有损压缩设置 `内部参数`
+- 说明:用于有损压缩设置 **`内部参数`**
- 动态修改:支持通过 SQL 修改,重启生效。
- 支持版本:从v3.1.0.0 版本引入,v3.3.0.0 以后废弃。
#### compressor
-- 说明:用于有损压缩设置 `内部参数`
+- 说明:用于有损压缩设置 **`内部参数`**
- 动态修改:支持通过 SQL 修改,重启生效。
- 支持版本:从v3.1.0.0 版本引入,v3.3.0.0 以后废弃。
diff --git a/docs/zh/14-reference/03-taos-sql/02-database.md b/docs/zh/14-reference/03-taos-sql/02-database.md
index 1a99af9439..cdd37fbdc4 100644
--- a/docs/zh/14-reference/03-taos-sql/02-database.md
+++ b/docs/zh/14-reference/03-taos-sql/02-database.md
@@ -96,23 +96,23 @@ database_option: {
- 当其为负值时,在决定把一个表分配到哪个 vgroup 时只使用表名中指定长度的后缀;
- 例如:假定表名为 "v30001",当 TSDB_SUFFIX = 2 时,使用 "v300" 来决定分配到哪个 vgroup ,当 TSDB_SUFFIX = -2 时使用 "01" 来决定分配到哪个 vgroup。
- TSDB_PAGESIZE:一个 vnode 中时序数据存储引擎的页大小,单位为 KB,默认为 4 KB。范围为 1 到 16384,即 1 KB到 16 MB。
-- DNODES:指定 vnode 所在的 DNODE 列表,如 '1,2,3',以逗号区分且字符间不能有空格(仅企业版支持)。
+- DNODES:指定 vnode 所在的 DNODE 列表,如 '1,2,3',以逗号区分且字符间不能有空格 (**仅企业版支持**)
- WAL_LEVEL:WAL 级别,默认为 1。
- 1:写 WAL,但不执行 fsync。
- 2:写 WAL,而且执行 fsync。
- WAL_FSYNC_PERIOD:当 WAL_LEVEL 参数设置为 2 时,用于设置落盘的周期。默认为 3000,单位毫秒。最小为 0,表示每次写入立即落盘;最大为 180000,即三分钟。
- WAL_RETENTION_PERIOD:为了数据订阅消费,需要 WAL 日志文件额外保留的最大时长策略。WAL 日志清理,不受订阅客户端消费状态影响。单位为 s。默认为 3600,表示在 WAL 保留最近 3600 秒的数据,请根据数据订阅的需要修改这个参数为适当值。
- WAL_RETENTION_SIZE:为了数据订阅消费,需要 WAL 日志文件额外保留的最大累计大小策略。单位为 KB。默认为 0,表示累计大小无上限。
-- COMPACT_INTERVAL:自动 compact 触发周期(从 1970-01-01T00:00:00Z 开始切分的时间周期)(仅企业版 3.3.5.0 版本开始支持)。
+- COMPACT_INTERVAL:自动 compact 触发周期(从 1970-01-01T00:00:00Z 开始切分的时间周期)(**仅企业版 3.3.5.0 版本开始支持**)。
- 取值范围:0 或 [10m, keep2],单位:m(分钟),h(小时),d(天);
- 不加时间单位默认单位为天,默认值为 0,即不触发自动 compact 功能;
- 如果 db 中有未完成的 compact 任务,不重复下发 compact 任务。
-- COMPACT_TIME_RANGE:自动 compact 任务触发的 compact 时间范围(仅企业版 3.3.5.0 版本开始支持)。
+- COMPACT_TIME_RANGE:自动 compact 任务触发的 compact 时间范围(**仅企业版 3.3.5.0 版本开始支持**)。
- 取值范围:[-keep2, -duration],单位:m(分钟),h(小时),d(天);
- 不加时间单位时默认单位为天,默认值为 [0, 0];
- 取默认值 [0, 0] 时,如果 COMPACT_INTERVAL 大于 0,会按照 [-keep2, -duration] 下发自动 compact;
- 因此,要关闭自动 compact 功能,需要将 COMPACT_INTERVAL 设置为 0。
-- COMPACT_TIME_OFFSET:自动 compact 任务触发的 compact 时间相对本地时间的偏移量(仅企业版 3.3.5.0 版本开始支持)。取值范围:[0, 23],单位:h(小时),默认值为 0。以 UTC 0 时区为例:
+- COMPACT_TIME_OFFSET:自动 compact 任务触发的 compact 时间相对本地时间的偏移量(**仅企业版 3.3.5.0 版本开始支持**)。取值范围:[0, 23],单位:h(小时),默认值为 0。以 UTC 0 时区为例:
- 如果 COMPACT_INTERVAL 为 1d,当 COMPACT_TIME_OFFSET 为 0 时,在每天 0 点下发自动 compact;
- 如果 COMPACT_TIME_OFFSET 为 2,在每天 2 点下发自动 compact。
@@ -245,7 +245,7 @@ REDISTRIBUTE VGROUP vgroup_no DNODE dnode_id1 [DNODE dnode_id2] [DNODE dnode_id3
BALANCE VGROUP LEADER;
```
-触发集群所有 vgroup 中的 leader 重新选主,对集群各节点进行负载均衡操作。(企业版功能)
+触发集群所有 vgroup 中的 leader 重新选主,对集群各节点进行负载均衡操作。(**企业版功能**)
## 查看数据库工作状态
diff --git a/docs/zh/14-reference/03-taos-sql/14-stream.md b/docs/zh/14-reference/03-taos-sql/14-stream.md
index 9359f85915..ec57d54ab1 100644
--- a/docs/zh/14-reference/03-taos-sql/14-stream.md
+++ b/docs/zh/14-reference/03-taos-sql/14-stream.md
@@ -34,7 +34,7 @@ subquery: SELECT select_list
stb_name 是保存计算结果的超级表的表名,如果该超级表不存在,会自动创建;如果已存在,则检查列的 schema 信息。详见 [写入已存在的超级表](#写入已存在的超级表)。
-TAGS 子句定义了流计算中创建TAG的规则,可以为每个 partition 对应的子表生成自定义的TAG值,详见 [自定义 TAG](#自定义 TAG)
+TAGS 子句定义了流计算中创建TAG的规则,可以为每个 partition 对应的子表生成自定义的TAG值,详见 [自定义 TAG](#自定义-TAG)
```sql
create_definition:
col_name column_definition
@@ -42,7 +42,7 @@ column_definition:
type_name [COMMENT 'string_value']
```
-subtable 子句定义了流式计算中创建的子表的命名规则,详见 [流式计算的 partition](#流式计算的 partition)。
+subtable 子句定义了流式计算中创建的子表的命名规则,详见 [流式计算的 partition](#流式计算的-partition)。
```sql
window_clause: {
diff --git a/docs/zh/14-reference/07-supported.md b/docs/zh/14-reference/07-supported.md
index 5115bd8188..f0f8d08256 100644
--- a/docs/zh/14-reference/07-supported.md
+++ b/docs/zh/14-reference/07-supported.md
@@ -31,7 +31,7 @@ description: "TDengine 服务端、客户端和连接器支持的平台列表"
## TDengine 客户端和连接器支持的平台列表
-目前 TDengine 的连接器可支持的平台广泛,目前包括:X64/X86/ARM64/ARM32/MIPS/LoongArch64 等硬件平台,以及 Linux/Win64/Win32/macOS 等开发环境。
+目前 TDengine 的连接器可支持的平台广泛,目前包括:X64/X86/ARM64/ARM32/MIPS/LoongArch64(或Loong64) 等硬件平台,以及 Linux/Win64/Win32/macOS 等开发环境。
对照矩阵如下:
diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c
index 4addd37ce1..983694b106 100644
--- a/source/dnode/mnode/impl/src/mndMain.c
+++ b/source/dnode/mnode/impl/src/mndMain.c
@@ -429,9 +429,8 @@ void mndDoTimerPullupTask(SMnode *pMnode, int64_t sec) {
if (sec % 5 == 0) {
mndStreamConsensusChkpt(pMnode);
}
-#endif
-#ifdef USE_REPORT
- if (sec % tsTelemInterval == (TMIN(86400, (tsTelemInterval - 1)))) {
+
+ if (tsTelemInterval > 0 && sec % tsTelemInterval == 0) {
mndPullupTelem(pMnode);
}
#endif
diff --git a/source/dnode/vnode/src/tqCommon/tqCommon.c b/source/dnode/vnode/src/tqCommon/tqCommon.c
index 83c57846cd..6b6dfb3167 100644
--- a/source/dnode/vnode/src/tqCommon/tqCommon.c
+++ b/source/dnode/vnode/src/tqCommon/tqCommon.c
@@ -1391,17 +1391,6 @@ int32_t tqStreamTaskProcessConsenChkptIdReq(SStreamMeta* pMeta, SRpcMsg* pMsg) {
if (ret) {
tqError("s-task:0x%x failed add check downstream failed, core:%s", req.taskId, tstrerror(ret));
}
-
-// STaskId id = {.streamId = req.streamId, .taskId = req.taskId};
-// int32_t ret1 = streamMetaAcquireTaskUnsafe(pMeta, &id, &pTask);
-// if (ret1 == 0 && pTask != NULL) {
-// SStreamTaskState s = streamTaskGetStatus(pTask);
-// if (s.state == TASK_STATUS__STOP) {
-// tqDebug("s-task:0x%x status:%s wait for it become init", req.taskId, s.name);
-// streamMetaReleaseTask(pMeta, pTask);
-// return TSDB_CODE_STREAM_TASK_IVLD_STATUS;
-// }
-// }
} else {
tqDebug("vgId:%d task:0x%x stopped in follower node, not set the consensus checkpointId:%" PRId64 " transId:%d",
pMeta->vgId, req.taskId, req.checkpointId, req.transId);
diff --git a/source/libs/scalar/test/filter/CMakeLists.txt b/source/libs/scalar/test/filter/CMakeLists.txt
index 44a0395286..c14bad1c65 100644
--- a/source/libs/scalar/test/filter/CMakeLists.txt
+++ b/source/libs/scalar/test/filter/CMakeLists.txt
@@ -1,20 +1,18 @@
MESSAGE(STATUS "build filter unit test")
-IF(TD_DARWIN)
- # GoogleTest requires at least C++11
- SET(CMAKE_CXX_STANDARD 11)
- AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
+# GoogleTest requires at least C++11
+SET(CMAKE_CXX_STANDARD 11)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
- ADD_EXECUTABLE(filterTest ${SOURCE_LIST})
- TARGET_LINK_LIBRARIES(
- filterTest
- PUBLIC os util common gtest qcom function nodes scalar parser catalog transport
- )
+ADD_EXECUTABLE(filterTest ${SOURCE_LIST})
+TARGET_LINK_LIBRARIES(
+ filterTest
+ PUBLIC os util common gtest qcom function nodes scalar parser catalog transport
+)
- TARGET_INCLUDE_DIRECTORIES(
- filterTest
- PUBLIC "${TD_SOURCE_DIR}/include/libs/scalar/"
- PRIVATE "${TD_SOURCE_DIR}/source/libs/scalar/inc"
- )
-ENDIF()
+TARGET_INCLUDE_DIRECTORIES(
+ filterTest
+ PUBLIC "${TD_SOURCE_DIR}/include/libs/scalar/"
+ PRIVATE "${TD_SOURCE_DIR}/source/libs/scalar/inc"
+)
diff --git a/source/libs/scalar/test/scalar/CMakeLists.txt b/source/libs/scalar/test/scalar/CMakeLists.txt
index 4624c1a7fd..6c3b40f49f 100644
--- a/source/libs/scalar/test/scalar/CMakeLists.txt
+++ b/source/libs/scalar/test/scalar/CMakeLists.txt
@@ -1,25 +1,23 @@
MESSAGE(STATUS "build scalar unit test")
-IF(NOT TD_DARWIN)
- # GoogleTest requires at least C++11
- SET(CMAKE_CXX_STANDARD 11)
- AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
+# GoogleTest requires at least C++11
+SET(CMAKE_CXX_STANDARD 11)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
- ADD_EXECUTABLE(scalarTest ${SOURCE_LIST})
- TARGET_LINK_LIBRARIES(
- scalarTest
- PUBLIC os util common gtest qcom function nodes scalar parser catalog transport
- )
+ADD_EXECUTABLE(scalarTest ${SOURCE_LIST})
+TARGET_LINK_LIBRARIES(
+ scalarTest
+ PUBLIC os util common gtest qcom function nodes scalar parser catalog transport
+)
- TARGET_INCLUDE_DIRECTORIES(
- scalarTest
- PUBLIC "${TD_SOURCE_DIR}/include/libs/scalar/"
- PUBLIC "${TD_SOURCE_DIR}/source/libs/parser/inc"
- PRIVATE "${TD_SOURCE_DIR}/source/libs/scalar/inc"
- )
- add_test(
- NAME scalarTest
- COMMAND scalarTest
- )
-ENDIF()
+TARGET_INCLUDE_DIRECTORIES(
+ scalarTest
+ PUBLIC "${TD_SOURCE_DIR}/include/libs/scalar/"
+ PUBLIC "${TD_SOURCE_DIR}/source/libs/parser/inc"
+ PRIVATE "${TD_SOURCE_DIR}/source/libs/scalar/inc"
+)
+add_test(
+ NAME scalarTest
+ COMMAND scalarTest
+)
\ No newline at end of file
diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c
index fef6f016d3..587ba6c72a 100644
--- a/source/libs/sync/src/syncMain.c
+++ b/source/libs/sync/src/syncMain.c
@@ -2421,6 +2421,7 @@ void syncNodeVoteForTerm(SSyncNode* pSyncNode, SyncTerm term, SRaftId* pRaftId)
sError("vgId:%d, failed to vote for term, term:%" PRId64 ", storeTerm:%" PRId64, pSyncNode->vgId, term, storeTerm);
return;
}
+ sTrace("vgId:%d, begin hasVoted", pSyncNode->vgId);
bool voted = raftStoreHasVoted(pSyncNode);
if (voted) {
sError("vgId:%d, failed to vote for term since not voted", pSyncNode->vgId);
@@ -3578,7 +3579,7 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
SRpcMsg rpcMsg = {0};
TAOS_CHECK_RETURN(syncBuildHeartbeatReply(&rpcMsg, ths->vgId));
- SyncTerm currentTerm = raftStoreGetTerm(ths);
+ SyncTerm currentTerm = raftStoreTryGetTerm(ths);
SyncHeartbeatReply* pMsgReply = rpcMsg.pCont;
pMsgReply->destId = pMsg->srcId;
@@ -3588,6 +3589,15 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
pMsgReply->startTime = ths->startTime;
pMsgReply->timeStamp = tsMs;
+ // reply
+ TRACE_SET_MSGID(&(rpcMsg.info.traceId), tGenIdPI64());
+ trace = &(rpcMsg.info.traceId);
+ sGTrace("vgId:%d, send sync-heartbeat-reply to dnode:%d term:%" PRId64 " timestamp:%" PRId64, ths->vgId,
+ DID(&(pMsgReply->destId)), pMsgReply->term, pMsgReply->timeStamp);
+
+ TAOS_CHECK_RETURN(syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg));
+
+ if (currentTerm == 0) currentTerm = raftStoreGetTerm(ths);
sGTrace("vgId:%d, process sync-heartbeat msg from dnode:%d, cluster:%d, Msgterm:%" PRId64 " currentTerm:%" PRId64,
ths->vgId, DID(&(pMsg->srcId)), CID(&(pMsg->srcId)), pMsg->term, currentTerm);
@@ -3647,9 +3657,6 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
}
}
- // reply
- TAOS_CHECK_RETURN(syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg));
-
if (resetElect) syncNodeResetElectTimer(ths);
return 0;
}
diff --git a/source/libs/sync/src/syncRequestVote.c b/source/libs/sync/src/syncRequestVote.c
index c887846915..88a97e55f3 100644
--- a/source/libs/sync/src/syncRequestVote.c
+++ b/source/libs/sync/src/syncRequestVote.c
@@ -108,6 +108,7 @@ int32_t syncNodeOnRequestVote(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
SyncTerm currentTerm = raftStoreGetTerm(ths);
if (!(pMsg->term <= currentTerm)) return TSDB_CODE_SYN_INTERNAL_ERROR;
+ sTrace("vgId:%d, begin hasVoted", ths->vgId);
bool grant = (pMsg->term == currentTerm) && logOK &&
((!raftStoreHasVoted(ths)) || (syncUtilSameId(&ths->raftStore.voteFor, &pMsg->srcId)));
if (grant) {
diff --git a/tests/README.md b/tests/README.md
index 5450e9072c..df8fbfc655 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -241,20 +241,23 @@ Please refer to the [Unit Test](#31-unit-test)、[System Test](#32-system-test)
### 3.7.1 How to run tests?
-TSBS test can be started locally by running command below. Ensure that your virtual machine supports the AVX instruction set:
+
+TSBS test can be started locally by running command below. Ensure that your virtual machine supports the AVX instruction set.
+You need to use sudo -s to start a new shell session as the superuser (root) in order to begin the testing:
```bash
cd /usr/local/src && \
git clone https://github.com/taosdata/tsbs.git && \
cd tsbs && \
-git checkout enh/chr-td-33357 && \
+git checkout enh/add-influxdb3.0 && \
cd scripts/tsdbComp && \
-./testTsbs.sh
+./tsbs_test.sh -s scenario4
```
> [!NOTE]
-> 1. TSBS test is written in Golang, in order to run the test smoothly, a Go proxy in China is set in above script by default. If this is not what you want, please unset it with command `sed -i '/GOPROXY/d' /usr/local/src/tsbs/scripts/tsdbComp/installTsbsCommand.sh` before starting the test.
-> 2. To check your current Go proxy setting, please run `go env | grep GOPROXY`.
+> 1. TSBS test is written in Golang. If you are unable to connect to the [international Go proxy](https://proxy.golang.org), the script will automatically set it to the [china Go proxy](https://goproxy.cn).
+> 2. If you need to cancel this china Go proxy, you can execute the following command in your environment `go env -u GOPROXY`.
+> 3. To check your current Go proxy setting, please run `go env | grep GOPROXY`.
### 3.7.2 How to start client and server on different hosts?
@@ -277,4 +280,9 @@ serverPass="taosdata123" # server root password
### 3.7.3 Check test results
-When the test is done, the result can be found in `/data2/` directory, which can also be configured in `test.ini`.
+When the test is done, the result can be found in `${installPath}/tsbs/scripts/tsdbComp/log/` directory, which ${installPath} can be configured in `test.ini`.
+
+### 3.7.4 Test more scenario
+
+Use `./tsbs_test.sh -h` to get more test scenarios.
+