diff --git a/cmake/cmake.platform b/cmake/cmake.platform
index 3e239d2e0c..eb8b63b4c2 100644
--- a/cmake/cmake.platform
+++ b/cmake/cmake.platform
@@ -102,6 +102,12 @@ IF ("${CPUTYPE}" STREQUAL "")
SET(TD_ARM_64 TRUE)
ADD_DEFINITIONS("-D_TD_ARM_")
ADD_DEFINITIONS("-D_TD_ARM_64")
+ ELSEIF (CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
+ MESSAGE(STATUS "The current platform is loongarch64")
+ SET(PLATFORM_ARCH_STR "loongarch64")
+ SET(TD_LOONGARCH_64 TRUE)
+ ADD_DEFINITIONS("-D_TD_LOONGARCH_")
+ ADD_DEFINITIONS("-D_TD_LOONGARCH_64")
ENDIF ()
ELSE ()
# if generate ARM version:
@@ -118,6 +124,12 @@ ELSE ()
ADD_DEFINITIONS("-D_TD_ARM_")
ADD_DEFINITIONS("-D_TD_ARM_64")
SET(TD_ARM_64 TRUE)
+ ELSEIF (${CPUTYPE} MATCHES "loongarch64")
+ SET(PLATFORM_ARCH_STR "loongarch64")
+ MESSAGE(STATUS "input cpuType: loongarch64")
+ SET(TD_LOONGARCH_64 TRUE)
+ ADD_DEFINITIONS("-D_TD_LOONGARCH_")
+ ADD_DEFINITIONS("-D_TD_LOONGARCH_64")
ELSEIF (${CPUTYPE} MATCHES "mips64")
SET(PLATFORM_ARCH_STR "mips")
MESSAGE(STATUS "input cpuType: mips64")
diff --git a/cmake/taostools_CMakeLists.txt.in b/cmake/taostools_CMakeLists.txt.in
index d18d85171d..82a7052125 100644
--- a/cmake/taostools_CMakeLists.txt.in
+++ b/cmake/taostools_CMakeLists.txt.in
@@ -2,7 +2,7 @@
# taos-tools
ExternalProject_Add(taos-tools
GIT_REPOSITORY https://github.com/taosdata/taos-tools.git
- GIT_TAG a921bd4
+ GIT_TAG 23e2b73
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools"
BINARY_DIR ""
#BUILD_IN_SOURCE TRUE
diff --git a/docs/en/14-reference/09-support-platform/index.md b/docs/en/14-reference/09-support-platform/index.md
index fe26860765..061294f016 100644
--- a/docs/en/14-reference/09-support-platform/index.md
+++ b/docs/en/14-reference/09-support-platform/index.md
@@ -14,7 +14,7 @@ Note: ● means officially tested and verified, ○ means unofficially tested an
## List of supported platforms for TDengine clients and connectors
-TDengine's connector can support a wide range of platforms, including X64/X86/ARM64/ARM32/MIPS/Alpha hardware platforms and Linux/Win64/Win32/macOS development environments.
+TDengine's connector can support a wide range of platforms, including X64/X86/ARM64/ARM32/MIPS/Alpha/LoongArch64 hardware platforms and Linux/Win64/Win32/macOS development environments.
The comparison matrix is as follows.
diff --git a/docs/en/28-releases/01-tdengine.md b/docs/en/28-releases/01-tdengine.md
index 74eeeb5efb..eee2f94ee1 100644
--- a/docs/en/28-releases/01-tdengine.md
+++ b/docs/en/28-releases/01-tdengine.md
@@ -1,9 +1,13 @@
---
sidebar_label: TDengine
-title: TDengine
+title: TDengine Release History and Download Links
description: TDengine release history, Release Notes and download links.
---
+TDengine 3.x installation packages can be downloaded at the following links:
+
+For TDengine 2.x installation packages by version, please visit [here](https://www.taosdata.com/all-downloads).
+
import Release from "/components/ReleaseV3";
## 3.0.1.6
@@ -33,4 +37,3 @@ import Release from "/components/ReleaseV3";
## 3.0.1.0
-
diff --git a/docs/en/28-releases/02-tools.md b/docs/en/28-releases/02-tools.md
index 0a96c776e0..6e8a040f8b 100644
--- a/docs/en/28-releases/02-tools.md
+++ b/docs/en/28-releases/02-tools.md
@@ -1,9 +1,13 @@
---
-sidebar_label: taosTools
-title: taosTools
+sidebar_label: taosTools
+title: taosTools Release History and Download Links
description: taosTools release history, Release Notes, download links.
---
+taosTools installation packages can be downloaded at the following links:
+
+For other historical version installers, please visit [here](https://www.taosdata.com/all-downloads).
+
import Release from "/components/ReleaseV3";
## 2.2.7
diff --git a/docs/zh/05-get-started/index.md b/docs/zh/05-get-started/index.md
index 20f8235d87..dec4d800bc 100644
--- a/docs/zh/05-get-started/index.md
+++ b/docs/zh/05-get-started/index.md
@@ -3,6 +3,8 @@ title: 立即开始
description: '快速设置 TDengine 环境并体验其高效写入和查询'
---
+import xiaot from './tdengine.webp'
+
TDengine 完整的软件包包括服务端(taosd)、用于与第三方系统对接并提供 RESTful 接口的 taosAdapter、应用驱动(taosc)、命令行程序 (CLI,taos) 和一些工具软件。TDengine 除了提供多种语言的连接器之外,还通过 [taosAdapter](../reference/taosadapter) 提供 [RESTful 接口](../connector/rest-api)。
本章主要介绍如何利用 Docker 或者安装包快速设置 TDengine 环境并体验其高效写入和查询。
@@ -12,4 +14,10 @@ import DocCardList from '@theme/DocCardList';
import {useCurrentSidebarCategory} from '@docusaurus/theme-common';
-```
\ No newline at end of file
+```
+
+### 开发者技术交流群
+
+微信扫描下面二维码,加“小 T”为好友,即可加入“物联网大数据技术前沿群”,与大家共同交流物联网大数据技术应用、TDengine 使用问题和技巧等话题。
+
+
diff --git a/docs/zh/05-get-started/tdengine.webp b/docs/zh/05-get-started/tdengine.webp
new file mode 100644
index 0000000000..e1bc0a75ac
Binary files /dev/null and b/docs/zh/05-get-started/tdengine.webp differ
diff --git a/docs/zh/08-connector/10-cpp.mdx b/docs/zh/08-connector/10-cpp.mdx
index cc7991da74..8a4f4946a7 100644
--- a/docs/zh/08-connector/10-cpp.mdx
+++ b/docs/zh/08-connector/10-cpp.mdx
@@ -115,6 +115,7 @@ TDengine 客户端驱动的安装请参考 [安装指南](../#安装步骤)
订阅和消费
```c
+ {{#include examples/c/tmq.c}}
```
diff --git a/docs/zh/12-taos-sql/01-data-type.md b/docs/zh/12-taos-sql/01-data-type.md
index a59330546b..f014573ca6 100644
--- a/docs/zh/12-taos-sql/01-data-type.md
+++ b/docs/zh/12-taos-sql/01-data-type.md
@@ -45,6 +45,7 @@ CREATE DATABASE db_name PRECISION 'ns';
:::note
+- 表的每行长度不能超过 48KB(注意:每个 BINARY/NCHAR 类型的列还会额外占用 2 个字节的存储位置)。
- 虽然 BINARY 类型在底层存储上支持字节型的二进制字符,但不同编程语言对二进制数据的处理方式并不保证一致,因此建议在 BINARY 类型中只存储 ASCII 可见字符,而避免存储不可见字符。多字节的数据,例如中文字符,则需要使用 NCHAR 类型进行保存。如果强行使用 BINARY 类型保存中文字符,虽然有时也能正常读写,但并不带有字符集信息,很容易出现数据乱码甚至数据损坏等情况。
- BINARY 类型理论上最长可以有 16,374 字节。BINARY 仅支持字符串输入,字符串两端需使用单引号引用。使用时须指定大小,如 BINARY(20) 定义了最长为 20 个单字节字符的字符串,每个字符占 1 字节的存储空间,总共固定占用 20 字节的空间,此时如果用户字符串超出 20 字节将会报错。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\'`。
- SQL 语句中的数值类型将依据是否存在小数点,或使用科学计数法表示,来判断数值类型是否为整型或者浮点型,因此在使用时要注意相应类型越界的情况。例如,9999999999999999999 会认为超过长整型的上边界而溢出,而 9999999999999999999.0 会被认为是有效的浮点数。
diff --git a/docs/zh/14-reference/09-support-platform/index.md b/docs/zh/14-reference/09-support-platform/index.md
index 7292ca4814..500eeeb14c 100644
--- a/docs/zh/14-reference/09-support-platform/index.md
+++ b/docs/zh/14-reference/09-support-platform/index.md
@@ -16,7 +16,7 @@ description: "TDengine 服务端、客户端和连接器支持的平台列表"
## TDengine 客户端和连接器支持的平台列表
-目前 TDengine 的连接器可支持的平台广泛,目前包括:X64/X86/ARM64/ARM32/MIPS/Alpha 等硬件平台,以及 Linux/Win64/Win32/macOS 等开发环境。
+目前 TDengine 的连接器可支持的平台广泛,目前包括:X64/X86/ARM64/ARM32/MIPS/LoongArch64 等硬件平台,以及 Linux/Win64/Win32/macOS 等开发环境。
对照矩阵如下:
diff --git a/docs/zh/14-reference/11-docker/index.md b/docs/zh/14-reference/11-docker/index.md
index 58bbe1e117..086d72940c 100644
--- a/docs/zh/14-reference/11-docker/index.md
+++ b/docs/zh/14-reference/11-docker/index.md
@@ -119,7 +119,7 @@ taos -h tdengine -P 6030
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y wget
ENV TDENGINE_VERSION=3.0.0.0
-RUN wget -c https://www.tdengine.com/assets-download/TDengine-client-${TDENGINE_VERSION}-Linux-x64.tar.gz \
+RUN wget -c https://www.tdengine.com/assets-download/3.0/TDengine-client-${TDENGINE_VERSION}-Linux-x64.tar.gz \
&& tar xvf TDengine-client-${TDENGINE_VERSION}-Linux-x64.tar.gz \
&& cd TDengine-client-${TDENGINE_VERSION} \
&& ./install_client.sh \
diff --git a/docs/zh/28-releases/01-tdengine.md b/docs/zh/28-releases/01-tdengine.md
index 31093ce557..4108212c55 100644
--- a/docs/zh/28-releases/01-tdengine.md
+++ b/docs/zh/28-releases/01-tdengine.md
@@ -1,9 +1,13 @@
---
sidebar_label: TDengine 发布历史
-title: TDengine 发布历史
+title: TDengine 发布历史及下载链接
description: TDengine 发布历史、Release Notes 及下载链接
---
+TDengine 3.x 各版本安装包下载链接如下:
+
+TDengine 2.x 各版本安装包请访问[这里](https://www.taosdata.com/all-downloads)
+
import Release from "/components/ReleaseV3";
## 3.0.1.6
@@ -33,4 +37,3 @@ import Release from "/components/ReleaseV3";
## 3.0.1.0
-
diff --git a/docs/zh/28-releases/02-tools.md b/docs/zh/28-releases/02-tools.md
index 2623391fb9..28e0d4bca9 100644
--- a/docs/zh/28-releases/02-tools.md
+++ b/docs/zh/28-releases/02-tools.md
@@ -1,9 +1,13 @@
---
sidebar_label: taosTools 发布历史
-title: taosTools 发布历史
+title: taosTools 发布历史及下载链接
description: taosTools 的发布历史、Release Notes 和下载链接
---
+taosTools 各版本安装包下载链接如下:
+
+其他历史版本安装包请访问[这里](https://www.taosdata.com/all-downloads)
+
import Release from "/components/ReleaseV3";
## 2.2.7
diff --git a/include/common/tmsg.h b/include/common/tmsg.h
index b16b5a2d4b..99c5c72e2f 100644
--- a/include/common/tmsg.h
+++ b/include/common/tmsg.h
@@ -418,13 +418,17 @@ static FORCE_INLINE int32_t taosEncodeSSchemaWrapper(void** buf, const SSchemaWr
static FORCE_INLINE void* taosDecodeSSchemaWrapper(const void* buf, SSchemaWrapper* pSW) {
buf = taosDecodeVariantI32(buf, &pSW->nCols);
buf = taosDecodeVariantI32(buf, &pSW->version);
- pSW->pSchema = (SSchema*)taosMemoryCalloc(pSW->nCols, sizeof(SSchema));
- if (pSW->pSchema == NULL) {
- return NULL;
- }
+ if (pSW->nCols > 0) {
+ pSW->pSchema = (SSchema*)taosMemoryCalloc(pSW->nCols, sizeof(SSchema));
+ if (pSW->pSchema == NULL) {
+ return NULL;
+ }
- for (int32_t i = 0; i < pSW->nCols; i++) {
- buf = taosDecodeSSchema(buf, &pSW->pSchema[i]);
+ for (int32_t i = 0; i < pSW->nCols; i++) {
+ buf = taosDecodeSSchema(buf, &pSW->pSchema[i]);
+ }
+ } else {
+ pSW->pSchema = NULL;
}
return (void*)buf;
}
@@ -839,7 +843,7 @@ typedef struct {
int64_t dbId;
int32_t vgVersion;
int32_t numOfTable; // unit is TSDB_TABLE_NUM_UNIT
- int64_t stateTs; // ms
+ int64_t stateTs; // ms
} SUseDbReq;
int32_t tSerializeSUseDbReq(void* buf, int32_t bufLen, SUseDbReq* pReq);
@@ -2990,7 +2994,8 @@ static FORCE_INLINE void* tDecodeSMqSubTopicEp(void* buf, SMqSubTopicEp* pTopicE
}
static FORCE_INLINE void tDeleteSMqSubTopicEp(SMqSubTopicEp* pSubTopicEp) {
- if (pSubTopicEp->schema.nCols) taosMemoryFreeClear(pSubTopicEp->schema.pSchema);
+ taosMemoryFreeClear(pSubTopicEp->schema.pSchema);
+ pSubTopicEp->schema.nCols = 0;
taosArrayDestroy(pSubTopicEp->vgs);
}
diff --git a/include/common/tmsgdef.h b/include/common/tmsgdef.h
index a12a635837..7ca552f179 100644
--- a/include/common/tmsgdef.h
+++ b/include/common/tmsgdef.h
@@ -250,8 +250,8 @@ enum {
TD_NEW_MSG_SEG(TDMT_SYNC_MSG)
TD_DEF_MSG_TYPE(TDMT_SYNC_TIMEOUT, "sync-timer", NULL, NULL)
- TD_DEF_MSG_TYPE(TDMT_SYNC_PING, "sync-ping", NULL, NULL)
- TD_DEF_MSG_TYPE(TDMT_SYNC_PING_REPLY, "sync-ping-reply", NULL, NULL)
+ TD_DEF_MSG_TYPE(TDMT_SYNC_PING, "sync-ping", NULL, NULL) // no longer used
+ TD_DEF_MSG_TYPE(TDMT_SYNC_PING_REPLY, "sync-ping-reply", NULL, NULL) // no longer used
TD_DEF_MSG_TYPE(TDMT_SYNC_CLIENT_REQUEST, "sync-client-request", NULL, NULL)
TD_DEF_MSG_TYPE(TDMT_SYNC_CLIENT_REQUEST_BATCH, "sync-client-request-batch", NULL, NULL)
TD_DEF_MSG_TYPE(TDMT_SYNC_CLIENT_REQUEST_REPLY, "sync-client-request-reply", NULL, NULL)
@@ -274,8 +274,8 @@ enum {
TD_DEF_MSG_TYPE(TDMT_SYNC_HEARTBEAT, "sync-heartbeat", NULL, NULL)
TD_DEF_MSG_TYPE(TDMT_SYNC_HEARTBEAT_REPLY, "sync-heartbeat-reply", NULL, NULL)
TD_DEF_MSG_TYPE(TDMT_SYNC_LOCAL_CMD, "sync-local-cmd", NULL, NULL)
- TD_DEF_MSG_TYPE(TDMT_SYNC_PRE_SNAPSHOT, "sync-pre-snapshot", NULL, NULL)
- TD_DEF_MSG_TYPE(TDMT_SYNC_PRE_SNAPSHOT_REPLY, "sync-pre-snapshot-reply", NULL, NULL)
+ TD_DEF_MSG_TYPE(TDMT_SYNC_PRE_SNAPSHOT, "sync-pre-snapshot", NULL, NULL) // no longer used
+ TD_DEF_MSG_TYPE(TDMT_SYNC_PRE_SNAPSHOT_REPLY, "sync-pre-snapshot-reply", NULL, NULL) // no longer used
TD_DEF_MSG_TYPE(TDMT_SYNC_MAX_MSG, "sync-max", NULL, NULL)
TD_NEW_MSG_SEG(TDMT_VND_STREAM_MSG)
diff --git a/include/libs/qworker/qworker.h b/include/libs/qworker/qworker.h
index 6ddd906700..2be0561ce7 100644
--- a/include/libs/qworker/qworker.h
+++ b/include/libs/qworker/qworker.h
@@ -94,6 +94,8 @@ int32_t qWorkerProcessHbMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, int64_
int32_t qWorkerProcessDeleteMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg, SDeleteRes *pRes);
+void qWorkerStopAllTasks(void *qWorkerMgmt);
+
void qWorkerDestroy(void **qWorkerMgmt);
int32_t qWorkerGetStat(SReadHandle *handle, void *qWorkerMgmt, SQWorkerStat *pStat);
diff --git a/include/libs/sync/sync.h b/include/libs/sync/sync.h
index 6060da6d3b..3a808ac6f3 100644
--- a/include/libs/sync/sync.h
+++ b/include/libs/sync/sync.h
@@ -59,7 +59,6 @@ typedef int64_t SyncIndex;
typedef uint64_t SyncTerm;
typedef struct SSyncNode SSyncNode;
-typedef struct SSyncBuffer SSyncBuffer;
typedef struct SWal SWal;
typedef struct SSyncRaftEntry SSyncRaftEntry;
diff --git a/include/util/taoserror.h b/include/util/taoserror.h
index a03dc7d9f9..636decc60b 100644
--- a/include/util/taoserror.h
+++ b/include/util/taoserror.h
@@ -385,6 +385,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_QRY_JSON_NOT_SUPPORT_ERROR TAOS_DEF_ERROR_CODE(0, 0x072D)
#define TSDB_CODE_QRY_JSON_IN_GROUP_ERROR TAOS_DEF_ERROR_CODE(0, 0x072E)
#define TSDB_CODE_QRY_JOB_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x072F)
+#define TSDB_CODE_QRY_QWORKER_QUIT TAOS_DEF_ERROR_CODE(0, 0x0730)
// grant
#define TSDB_CODE_GRANT_EXPIRED TAOS_DEF_ERROR_CODE(0, 0x0800)
diff --git a/packaging/docker/dockerbuild.sh b/packaging/docker/dockerbuild.sh
index 4c8f1413aa..b02387a3d1 100755
--- a/packaging/docker/dockerbuild.sh
+++ b/packaging/docker/dockerbuild.sh
@@ -5,7 +5,7 @@ set -e
#set -x
# dockerbuild.sh
-# -c [aarch32 | aarch64 | amd64 | x86 | mips64 ...]
+# -c [aarch32 | aarch64 | amd64 | x86 | mips64 | loongarch64...]
# -n [version number]
# -p [password for docker hub]
# -V [stable | beta]
@@ -57,7 +57,7 @@ do
dockerLatest=$(echo $OPTARG)
;;
h)
- echo "Usage: `basename $0` -c [aarch32 | aarch64 | amd64 | x86 | mips64 ...] "
+ echo "Usage: `basename $0` -c [aarch32 | aarch64 | amd64 | x86 | mips64 | loongarch64...] "
echo " -n [version number] "
echo " -p [password for docker hub] "
echo " -V [stable | beta] "
@@ -136,4 +136,4 @@ if [ "$cloudBuild" != "y" ] && [ ${dockerLatest} == 'y' ] ;then
docker push tdengine/tdengine-${dockername}:latest
fi
-rm -f ${pkgFile}
\ No newline at end of file
+rm -f ${pkgFile}
diff --git a/packaging/docker/dockerbuildi.sh b/packaging/docker/dockerbuildi.sh
index a0a954e30f..9b7497dc4a 100755
--- a/packaging/docker/dockerbuildi.sh
+++ b/packaging/docker/dockerbuildi.sh
@@ -5,7 +5,7 @@ set -e
#set -x
# dockerbuild.sh
-# -c [aarch32 | aarch64 | amd64 | x86 | mips64 ...]
+# -c [aarch32 | aarch64 | amd64 | x86 | mips64 | loongarch64...]
# -n [version number]
# -p [password for docker hub]
@@ -30,7 +30,7 @@ do
passWord=$(echo $OPTARG)
;;
h)
- echo "Usage: `basename $0` -c [aarch32 | aarch64 | amd64 | x86 | mips64 ...] "
+ echo "Usage: `basename $0` -c [aarch32 | aarch64 | amd64 | x86 | mips64 | loongarch64...] "
echo " -n [version number] "
echo " -p [password for docker hub] "
exit 0
diff --git a/packaging/release.sh b/packaging/release.sh
index f250e667fa..c07331a0df 100755
--- a/packaging/release.sh
+++ b/packaging/release.sh
@@ -6,7 +6,7 @@ set -e
#set -x
# release.sh -v [cluster | edge]
-# -c [aarch32 | aarch64 | x64 | x86 | mips64 ...]
+# -c [aarch32 | aarch64 | x64 | x86 | mips64 | loongarch64...]
# -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...]
# -V [stable | beta]
# -l [full | lite]
@@ -19,7 +19,7 @@ set -e
# set parameters by default value
verMode=edge # [cluster, edge, cloud]
verType=stable # [stable, beta]
-cpuType=x64 # [aarch32 | aarch64 | x64 | x86 | mips64 ...]
+cpuType=x64 # [aarch32 | aarch64 | x64 | x86 | mips64 loongarch64...]
osType=Linux # [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...]
pagMode=full # [full | lite]
soMode=dynamic # [static | dynamic]
@@ -77,7 +77,7 @@ while getopts "hv:V:c:o:l:s:d:a:n:m:H:" arg; do
;;
h)
echo "Usage: $(basename $0) -v [cluster | edge] "
- echo " -c [aarch32 | aarch64 | x64 | x86 | mips64 ...] "
+ echo " -c [aarch32 | aarch64 | x64 | x86 | mips64 | loongarch64 ...] "
echo " -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...] "
echo " -V [stable | beta] "
echo " -l [full | lite] "
@@ -216,7 +216,7 @@ else
fi
# check support cpu type
-if [[ "$cpuType" == "x64" ]] || [[ "$cpuType" == "aarch64" ]] || [[ "$cpuType" == "aarch32" ]] || [[ "$cpuType" == "arm64" ]] || [[ "$cpuType" == "arm32" ]] || [[ "$cpuType" == "mips64" ]]; then
+if [[ "$cpuType" == "x64" ]] || [[ "$cpuType" == "aarch64" ]] || [[ "$cpuType" == "aarch32" ]] || [[ "$cpuType" == "arm64" ]] || [[ "$cpuType" == "arm32" ]] || [[ "$cpuType" == "mips64" ]] || [[ "$cpuType" == "loongarch64" ]] ; then
if [ "$verMode" == "edge" ]; then
# community-version compile
cmake ../ -DCPUTYPE=${cpuType} -DWEBSOCKET=true -DOSTYPE=${osType} -DSOMODE=${soMode} -DDBNAME=${dbName} -DVERTYPE=${verType} -DVERDATE="${build_time}" -DGITINFO=${gitinfo} -DGITINFOI=${gitinfoOfInternal} -DVERNUMBER=${verNumber} -DVERCOMPATIBLE=${verNumberComp} -DPAGMODE=${pagMode} -DBUILD_HTTP=${BUILD_HTTP} -DBUILD_TOOLS=${BUILD_TOOLS} ${allocator_macro}
diff --git a/source/client/src/clientHb.c b/source/client/src/clientHb.c
index bf34d3e2df..0f881beb66 100644
--- a/source/client/src/clientHb.c
+++ b/source/client/src/clientHb.c
@@ -61,7 +61,8 @@ static int32_t hbProcessDBInfoRsp(void *value, int32_t valueLen, struct SCatalog
int32_t numOfBatchs = taosArrayGetSize(batchUseRsp.pArray);
for (int32_t i = 0; i < numOfBatchs; ++i) {
SUseDbRsp *rsp = taosArrayGet(batchUseRsp.pArray, i);
- tscDebug("hb db rsp, db:%s, vgVersion:%d, stateTs:%" PRId64 ", uid:%" PRIx64, rsp->db, rsp->vgVersion, rsp->stateTs, rsp->uid);
+ tscDebug("hb db rsp, db:%s, vgVersion:%d, stateTs:%" PRId64 ", uid:%" PRIx64, rsp->db, rsp->vgVersion, rsp->stateTs,
+ rsp->uid);
if (rsp->vgVersion < 0) {
code = catalogRemoveDB(pCatalog, rsp->db, rsp->uid);
@@ -293,6 +294,7 @@ static int32_t hbAsyncCallBack(void *param, SDataBuf *pMsg, int32_t code) {
taosThreadMutexUnlock(&appInfo.mutex);
tscError("cluster not exist, key:%s", key);
taosMemoryFree(pMsg->pData);
+ taosMemoryFree(pMsg->pEpSet);
tFreeClientHbBatchRsp(&pRsp);
return -1;
}
@@ -322,6 +324,7 @@ static int32_t hbAsyncCallBack(void *param, SDataBuf *pMsg, int32_t code) {
tFreeClientHbBatchRsp(&pRsp);
taosMemoryFree(pMsg->pData);
+ taosMemoryFree(pMsg->pEpSet);
return code;
}
diff --git a/source/client/src/clientSml.c b/source/client/src/clientSml.c
index d1aeaac587..4cd1b5416c 100644
--- a/source/client/src/clientSml.c
+++ b/source/client/src/clientSml.c
@@ -2082,7 +2082,7 @@ static int32_t smlParseJSONString(SSmlHandle *info, cJSON *root, SSmlTableInfo *
static int32_t smlParseInfluxLine(SSmlHandle *info, const char *sql, const int len) {
SSmlLineInfo elements = {0};
- uDebug("SML:0x%" PRIx64 " smlParseInfluxLine sql:%s, hello", info->id, sql);
+ uDebug("SML:0x%" PRIx64 " smlParseInfluxLine sql", info->id);
int ret = smlParseInfluxString(sql, sql + len, &elements, &info->msgBuf);
if (ret != TSDB_CODE_SUCCESS) {
diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c
index 536cbed33e..e8d5989e4d 100644
--- a/source/common/src/tdatablock.c
+++ b/source/common/src/tdatablock.c
@@ -334,10 +334,12 @@ int32_t colDataAssign(SColumnInfoData* pColumnInfoData, const SColumnInfoData* p
}
pColumnInfoData->varmeta.length = pSource->varmeta.length;
- memcpy(pColumnInfoData->pData, pSource->pData, pSource->varmeta.length);
+ if (pColumnInfoData->pData != NULL && pSource->pData != NULL) {
+ memcpy(pColumnInfoData->pData, pSource->pData, pSource->varmeta.length);
+ }
} else {
memcpy(pColumnInfoData->nullbitmap, pSource->nullbitmap, BitmapLen(numOfRows));
- if (pSource->pData) {
+ if (pSource->pData != NULL) {
memcpy(pColumnInfoData->pData, pSource->pData, pSource->info.bytes * numOfRows);
}
}
@@ -2261,7 +2263,9 @@ int32_t blockEncode(const SSDataBlock* pBlock, char* data, int32_t numOfCols) {
colSizes[col] = colDataGetLength(pColRes, numOfRows);
dataLen += colSizes[col];
- memmove(data, pColRes->pData, colSizes[col]);
+ if (pColRes->pData != NULL) {
+ memmove(data, pColRes->pData, colSizes[col]);
+ }
data += colSizes[col];
colSizes[col] = htonl(colSizes[col]);
diff --git a/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c b/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
index ec4f42c847..16fe6c1b91 100644
--- a/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
+++ b/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
@@ -183,8 +183,6 @@ SArray *mmGetMsgHandles() {
if (dmSetMgmtHandle(pArray, TDMT_VND_COMPACT_RSP, mmPutMsgToWriteQueue, 0) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_TIMEOUT, mmPutMsgToSyncQueue, 1) == NULL) goto _OVER;
- if (dmSetMgmtHandle(pArray, TDMT_SYNC_PING, mmPutMsgToSyncQueue, 1) == NULL) goto _OVER;
- if (dmSetMgmtHandle(pArray, TDMT_SYNC_PING_REPLY, mmPutMsgToSyncQueue, 1) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_CLIENT_REQUEST, mmPutMsgToSyncQueue, 1) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_CLIENT_REQUEST_BATCH, mmPutMsgToSyncQueue, 1) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_CLIENT_REQUEST_REPLY, mmPutMsgToSyncQueue, 1) == NULL) goto _OVER;
@@ -197,7 +195,6 @@ SArray *mmGetMsgHandles() {
if (dmSetMgmtHandle(pArray, TDMT_SYNC_SNAPSHOT_RSP, mmPutMsgToSyncQueue, 1) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_PRE_SNAPSHOT, mmPutMsgToSyncQueue, 1) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_PRE_SNAPSHOT_REPLY, mmPutMsgToSyncQueue, 1) == NULL) goto _OVER;
-
if (dmSetMgmtHandle(pArray, TDMT_SYNC_HEARTBEAT, mmPutMsgToSyncCtrlQueue, 1) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_HEARTBEAT_REPLY, mmPutMsgToSyncCtrlQueue, 1) == NULL) goto _OVER;
diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c b/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
index 2265f58060..e15d7ac3df 100644
--- a/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
+++ b/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
@@ -450,8 +450,6 @@ SArray *vmGetMsgHandles() {
if (dmSetMgmtHandle(pArray, TDMT_DND_DROP_VNODE, vmPutMsgToMgmtQueue, 0) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_TIMEOUT, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER;
- if (dmSetMgmtHandle(pArray, TDMT_SYNC_PING, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER;
- if (dmSetMgmtHandle(pArray, TDMT_SYNC_PING_REPLY, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_CLIENT_REQUEST, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_CLIENT_REQUEST_BATCH, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER;
if (dmSetMgmtHandle(pArray, TDMT_SYNC_CLIENT_REQUEST_REPLY, vmPutMsgToSyncQueue, 0) == NULL) goto _OVER;
diff --git a/source/dnode/mnode/impl/src/mndSma.c b/source/dnode/mnode/impl/src/mndSma.c
index 56e725fac7..698c07d9bc 100644
--- a/source/dnode/mnode/impl/src/mndSma.c
+++ b/source/dnode/mnode/impl/src/mndSma.c
@@ -532,6 +532,7 @@ static int32_t mndCreateSma(SMnode *pMnode, SRpcMsg *pReq, SMCreateSmaReq *pCrea
streamObj.sql = strdup(pCreate->sql);
streamObj.smaId = smaObj.uid;
streamObj.watermark = pCreate->watermark;
+ streamObj.fillHistory = STREAM_FILL_HISTORY_ON;
streamObj.trigger = STREAM_TRIGGER_WINDOW_CLOSE;
streamObj.triggerParam = pCreate->maxDelay;
streamObj.ast = strdup(smaObj.ast);
diff --git a/source/dnode/mnode/impl/src/mndSubscribe.c b/source/dnode/mnode/impl/src/mndSubscribe.c
index a62f15f978..71e0b09e02 100644
--- a/source/dnode/mnode/impl/src/mndSubscribe.c
+++ b/source/dnode/mnode/impl/src/mndSubscribe.c
@@ -944,6 +944,8 @@ static int32_t mndRetrieveSubscribe(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
int32_t numOfRows = 0;
SMqSubscribeObj *pSub = NULL;
+ mDebug("mnd show subscriptions begin");
+
while (numOfRows < rowsCapacity) {
pShow->pIter = sdbFetch(pSdb, SDB_SUBSCRIBE, pShow->pIter, (void **)&pSub);
if (pShow->pIter == NULL) break;
@@ -989,6 +991,9 @@ static int32_t mndRetrieveSubscribe(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
colDataAppend(pColInfo, numOfRows, (const char *)&pConsumerEp->consumerId, false);
+ mDebug("mnd show subscrptions: topic %s, consumer %" PRId64 "cgroup %s vgid %d", varDataVal(topic),
+ pConsumerEp->consumerId, varDataVal(cgroup), pVgEp->vgId);
+
// offset
#if 0
// subscribe time
@@ -1034,6 +1039,9 @@ static int32_t mndRetrieveSubscribe(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
colDataAppend(pColInfo, numOfRows, NULL, true);
+ mDebug("mnd show subscrptions(unassigned): topic %s, cgroup %s vgid %d", varDataVal(topic), varDataVal(cgroup),
+ pVgEp->vgId);
+
// offset
#if 0
// subscribe time
@@ -1053,6 +1061,8 @@ static int32_t mndRetrieveSubscribe(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
sdbRelease(pSdb, pSub);
}
+ mDebug("mnd end show subscriptions");
+
pShow->numOfRows += numOfRows;
return numOfRows;
}
diff --git a/source/dnode/mnode/impl/src/mndTopic.c b/source/dnode/mnode/impl/src/mndTopic.c
index e1ca1d2708..522036afa2 100644
--- a/source/dnode/mnode/impl/src/mndTopic.c
+++ b/source/dnode/mnode/impl/src/mndTopic.c
@@ -637,6 +637,7 @@ static int32_t mndProcessDropTopicReq(SRpcMsg *pReq) {
if (pIter == NULL) break;
if (pConsumer->status == MQ_CONSUMER_STATUS__LOST_REBD) continue;
+
int32_t sz = taosArrayGetSize(pConsumer->assignedTopics);
for (int32_t i = 0; i < sz; i++) {
char *name = taosArrayGetP(pConsumer->assignedTopics, i);
@@ -649,6 +650,33 @@ static int32_t mndProcessDropTopicReq(SRpcMsg *pReq) {
return -1;
}
}
+
+ sz = taosArrayGetSize(pConsumer->rebNewTopics);
+ for (int32_t i = 0; i < sz; i++) {
+ char *name = taosArrayGetP(pConsumer->rebNewTopics, i);
+ if (strcmp(name, pTopic->name) == 0) {
+ mndReleaseConsumer(pMnode, pConsumer);
+ mndReleaseTopic(pMnode, pTopic);
+ terrno = TSDB_CODE_MND_TOPIC_SUBSCRIBED;
+ mError("topic:%s, failed to drop since subscribed by consumer:%" PRId64 ", in consumer group %s (reb new)",
+ dropReq.name, pConsumer->consumerId, pConsumer->cgroup);
+ return -1;
+ }
+ }
+
+ sz = taosArrayGetSize(pConsumer->rebRemovedTopics);
+ for (int32_t i = 0; i < sz; i++) {
+ char *name = taosArrayGetP(pConsumer->rebRemovedTopics, i);
+ if (strcmp(name, pTopic->name) == 0) {
+ mndReleaseConsumer(pMnode, pConsumer);
+ mndReleaseTopic(pMnode, pTopic);
+ terrno = TSDB_CODE_MND_TOPIC_SUBSCRIBED;
+ mError("topic:%s, failed to drop since subscribed by consumer:%" PRId64 ", in consumer group %s (reb remove)",
+ dropReq.name, pConsumer->consumerId, pConsumer->cgroup);
+ return -1;
+ }
+ }
+
sdbRelease(pSdb, pConsumer);
}
@@ -675,15 +703,6 @@ static int32_t mndProcessDropTopicReq(SRpcMsg *pReq) {
mInfo("trans:%d, used to drop topic:%s", pTrans->id, pTopic->name);
-#if 0
- if (mndDropOffsetByTopic(pMnode, pTrans, dropReq.name) < 0) {
- ASSERT(0);
- mndTransDrop(pTrans);
- mndReleaseTopic(pMnode, pTopic);
- return -1;
- }
-#endif
-
// TODO check if rebalancing
if (mndDropSubByTopic(pMnode, pTrans, dropReq.name) < 0) {
/*ASSERT(0);*/
diff --git a/source/dnode/vnode/src/inc/meta.h b/source/dnode/vnode/src/inc/meta.h
index 9e2fe4aaf0..2ceae91f7c 100644
--- a/source/dnode/vnode/src/inc/meta.h
+++ b/source/dnode/vnode/src/inc/meta.h
@@ -70,6 +70,7 @@ int32_t metaCacheDrop(SMeta* pMeta, int64_t uid);
int32_t metaStatsCacheUpsert(SMeta* pMeta, SMetaStbStats* pInfo);
int32_t metaStatsCacheDrop(SMeta* pMeta, int64_t uid);
int32_t metaStatsCacheGet(SMeta* pMeta, int64_t uid, SMetaStbStats* pInfo);
+void metaUpdateStbStats(SMeta *pMeta, int64_t uid, int64_t delta);
struct SMeta {
TdThreadRwlock lock;
diff --git a/source/dnode/vnode/src/inc/vnd.h b/source/dnode/vnode/src/inc/vnd.h
index 8f8691cfc2..83f375c986 100644
--- a/source/dnode/vnode/src/inc/vnd.h
+++ b/source/dnode/vnode/src/inc/vnd.h
@@ -61,14 +61,14 @@ struct SVBufPoolNode {
};
struct SVBufPool {
- SVBufPool* next;
- SVnode* pVnode;
- volatile int32_t nRef;
- TdThreadSpinlock lock;
- int64_t size;
- uint8_t* ptr;
- SVBufPoolNode* pTail;
- SVBufPoolNode node;
+ SVBufPool* next;
+ SVnode* pVnode;
+ TdThreadSpinlock* lock;
+ volatile int32_t nRef;
+ int64_t size;
+ uint8_t* ptr;
+ SVBufPoolNode* pTail;
+ SVBufPoolNode node;
};
int32_t vnodeOpenBufPool(SVnode* pVnode);
@@ -77,6 +77,7 @@ void vnodeBufPoolReset(SVBufPool* pPool);
// vnodeQuery.c
int32_t vnodeQueryOpen(SVnode* pVnode);
+void vnodeQueryPreClose(SVnode *pVnode);
void vnodeQueryClose(SVnode* pVnode);
int32_t vnodeGetTableMeta(SVnode* pVnode, SRpcMsg* pMsg, bool direct);
int vnodeGetTableCfg(SVnode* pVnode, SRpcMsg* pMsg, bool direct);
diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c
index 4aabd39800..620022c06d 100644
--- a/source/dnode/vnode/src/meta/metaQuery.c
+++ b/source/dnode/vnode/src/meta/metaQuery.c
@@ -1445,3 +1445,13 @@ int32_t metaGetStbStats(SMeta *pMeta, int64_t uid, SMetaStbStats *pInfo) {
_exit:
return code;
}
+
+void metaUpdateStbStats(SMeta *pMeta, int64_t uid, int64_t delta) {
+ SMetaStbStats stats = {0};
+
+ if (metaStatsCacheGet(pMeta, uid, &stats) == TSDB_CODE_SUCCESS) {
+ stats.ctbNum += delta;
+
+ metaStatsCacheUpsert(pMeta, &stats);
+ }
+}
diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c
index 6dadce80ca..5921adfbfa 100644
--- a/source/dnode/vnode/src/meta/metaTable.c
+++ b/source/dnode/vnode/src/meta/metaTable.c
@@ -371,7 +371,7 @@ int metaAlterSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) {
// update uid index
metaUpdateUidIdx(pMeta, &nStbEntry);
- metaStatsCacheDrop(pMeta, nStbEntry.uid);
+ // metaStatsCacheDrop(pMeta, nStbEntry.uid);
metaULock(pMeta);
@@ -450,6 +450,10 @@ int metaCreateTable(SMeta *pMeta, int64_t version, SVCreateTbReq *pReq, STableMe
#endif
++pMeta->pVnode->config.vndStats.numOfCTables;
+
+ metaWLock(pMeta);
+ metaUpdateStbStats(pMeta, me.ctbEntry.suid, 1);
+ metaULock(pMeta);
} else {
me.ntbEntry.ctime = pReq->ctime;
me.ntbEntry.ttlDays = pReq->ttl;
@@ -670,6 +674,8 @@ static int metaDropTableByUid(SMeta *pMeta, tb_uid_t uid, int *type) {
tdbTbDelete(pMeta->pCtbIdx, &(SCtbIdxKey){.suid = e.ctbEntry.suid, .uid = uid}, sizeof(SCtbIdxKey), &pMeta->txn);
--pMeta->pVnode->config.vndStats.numOfCTables;
+
+ metaUpdateStbStats(pMeta, e.ctbEntry.suid, -1);
} else if (e.type == TSDB_NORMAL_TABLE) {
// drop schema.db (todo)
diff --git a/source/dnode/vnode/src/tq/tq.c b/source/dnode/vnode/src/tq/tq.c
index 9c377fe7f5..f75dce8231 100644
--- a/source/dnode/vnode/src/tq/tq.c
+++ b/source/dnode/vnode/src/tq/tq.c
@@ -582,10 +582,10 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
code = -1;
}
- tqDebug("tmq poll: consumer %" PRId64 ", subkey %s, vg %d, send data blockNum:%d, offset type:%d, uid:%" PRId64
- ", version:%" PRId64 "",
+ tqDebug("tmq poll: consumer %" PRId64
+ ", subkey %s, vg %d, send data blockNum:%d, offset type:%d, uid/version:%" PRId64 ", ts:%" PRId64 "",
consumerId, pHandle->subKey, TD_VID(pTq->pVnode), dataRsp.blockNum, dataRsp.rspOffset.type,
- dataRsp.rspOffset.uid, dataRsp.rspOffset.version);
+ dataRsp.rspOffset.uid, dataRsp.rspOffset.ts);
tDeleteSMqDataRsp(&dataRsp);
return code;
diff --git a/source/dnode/vnode/src/tq/tqSink.c b/source/dnode/vnode/src/tq/tqSink.c
index 913fa67bd6..f782411084 100644
--- a/source/dnode/vnode/src/tq/tqSink.c
+++ b/source/dnode/vnode/src/tq/tqSink.c
@@ -244,7 +244,7 @@ SSubmitReq* tqBlockToSubmit(SVnode* pVnode, const SArray* pBlocks, const STSchem
int32_t rows = pDataBlock->info.rows;
- tqDebug("tq sink, convert block %d, rows: %d", i, rows);
+ tqDebug("tq sink, convert block1 %d, rows: %d", i, rows);
int32_t dataLen = 0;
int32_t schemaLen = 0;
@@ -486,7 +486,7 @@ void tqSinkToTablePipeline(SStreamTask* pTask, void* vnode, int64_t ver, void* d
blkHead->uid = 0;
blkHead->schemaLen = 0;
- tqDebug("tq sink, convert block %d, rows: %d", i, rows);
+ tqDebug("tq sink, convert block2 %d, rows: %d", i, rows);
int32_t dataLen = 0;
void* blkSchema = POINTER_SHIFT(blkHead, sizeof(SSubmitBlk));
@@ -514,6 +514,9 @@ void tqSinkToTablePipeline(SStreamTask* pTask, void* vnode, int64_t ver, void* d
tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NULL, NULL, false, pColumn->offset, k);
} else {
void* colData = colDataGetData(pColData, j);
+ if (k == 0) {
+ tqDebug("tq sink, row %d ts %" PRId64, j, *(int64_t*)colData);
+ }
tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NORM, colData, true, pColumn->offset, k);
}
}
diff --git a/source/dnode/vnode/src/tsdb/tsdbMemTable.c b/source/dnode/vnode/src/tsdb/tsdbMemTable.c
index 52c7a07c49..654afe1b6a 100644
--- a/source/dnode/vnode/src/tsdb/tsdbMemTable.c
+++ b/source/dnode/vnode/src/tsdb/tsdbMemTable.c
@@ -458,11 +458,10 @@ static void tbDataMovePosTo(STbData *pTbData, SMemSkipListNode **pos, TSDBKEY *p
}
static FORCE_INLINE int8_t tsdbMemSkipListRandLevel(SMemSkipList *pSl) {
- int8_t level = 1;
- int8_t tlevel = TMIN(pSl->maxLevel, pSl->level + 1);
- const uint32_t factor = 4;
+ int8_t level = 1;
+ int8_t tlevel = TMIN(pSl->maxLevel, pSl->level + 1);
- while ((taosRandR(&pSl->seed) % factor) == 0 && level < tlevel) {
+ while ((taosRandR(&pSl->seed) & 0x3) == 0 && level < tlevel) {
level++;
}
@@ -568,7 +567,9 @@ static int32_t tsdbInsertTableDataImpl(SMemTable *pMemTable, STbData *pTbData, i
do {
key.ts = row.pTSRow->ts;
nRow++;
- tbDataMovePosTo(pTbData, pos, &key, SL_MOVE_FROM_POS);
+ if (SL_NODE_FORWARD(pos[0], 0) != pTbData->sl.pTail) {
+ tbDataMovePosTo(pTbData, pos, &key, SL_MOVE_FROM_POS);
+ }
code = tbDataDoPut(pMemTable, pTbData, pos, &row, 1);
if (code) {
goto _err;
diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil.c b/source/dnode/vnode/src/tsdb/tsdbUtil.c
index a40b1667c5..755a551e20 100644
--- a/source/dnode/vnode/src/tsdb/tsdbUtil.c
+++ b/source/dnode/vnode/src/tsdb/tsdbUtil.c
@@ -1015,6 +1015,191 @@ _err:
return code;
}
+static int32_t tBlockDataAppendBlockRow(SBlockData *pBlockData, SBlockData *pBlockDataFrom, int32_t iRow) {
+ int32_t code = 0;
+
+ SColVal cv = {0};
+ int32_t iColDataFrom = 0;
+ SColData *pColDataFrom =
+ (iColDataFrom < pBlockDataFrom->nColData) ? &((SColData *)pBlockDataFrom->aColData->pData)[iColDataFrom] : NULL;
+
+ for (int32_t iColDataTo = 0; iColDataTo < pBlockData->nColData; iColDataTo++) {
+ SColData *pColDataTo = &((SColData *)pBlockData->aColData->pData)[iColDataTo];
+
+ while (pColDataFrom && pColDataFrom->cid < pColDataTo->cid) {
+ iColDataFrom++;
+ pColDataFrom = (iColDataFrom < pBlockDataFrom->nColData)
+ ? &((SColData *)pBlockDataFrom->aColData->pData)[iColDataFrom]
+ : NULL;
+ }
+
+ if (pColDataFrom == NULL || pColDataFrom->cid > pColDataTo->cid) {
+ code = tColDataAppendValue(pColDataTo, &COL_VAL_NONE(pColDataTo->cid, pColDataTo->type));
+ if (code) goto _exit;
+ } else {
+ tColDataGetValue(pColDataFrom, iRow, &cv);
+
+ code = tColDataAppendValue(pColDataTo, &cv);
+ if (code) goto _exit;
+
+ iColDataFrom++;
+ pColDataFrom = (iColDataFrom < pBlockDataFrom->nColData)
+ ? &((SColData *)pBlockDataFrom->aColData->pData)[iColDataFrom]
+ : NULL;
+ }
+ }
+
+_exit:
+ return code;
+}
+
+static int32_t tBlockDataAppendTPRow(SBlockData *pBlockData, STSRow *pRow, STSchema *pTSchema) {
+ int32_t code = 0;
+
+ int32_t iTColumn = 1;
+ STColumn *pTColumn = (iTColumn < pTSchema->numOfCols) ? &pTSchema->columns[iTColumn] : NULL;
+ void *pBitmap = pRow->statis ? tdGetBitmapAddrTp(pRow, pTSchema->flen) : NULL;
+
+ for (int32_t iColData = 0; iColData < pBlockData->nColData; iColData++) {
+ SColData *pColData = &((SColData *)pBlockData->aColData->pData)[iColData];
+
+ while (pTColumn && pTColumn->colId < pColData->cid) {
+ iTColumn++;
+ pTColumn = (iTColumn < pTSchema->numOfCols) ? &pTSchema->columns[iTColumn] : NULL;
+ }
+
+ if (pTColumn == NULL || pTColumn->colId > pColData->cid) {
+ code = tColDataAppendValue(pColData, &COL_VAL_NONE(pColData->cid, pColData->type));
+ if (code) goto _exit;
+ } else {
+ ASSERT(pTColumn->type == pColData->type);
+
+ SColVal cv = {.cid = pTColumn->colId, .type = pTColumn->type};
+
+ if (pRow->statis) {
+ TDRowValT vt = TD_VTYPE_MAX;
+ tdGetBitmapValTypeII(pBitmap, iTColumn - 1, &vt);
+
+ if (vt == TD_VTYPE_NORM) {
+ cv.flag = CV_FLAG_VALUE;
+
+ if (IS_VAR_DATA_TYPE(pTColumn->type)) {
+ void *pData = (char*)pRow + *(int32_t *)(pRow->data + pTColumn->offset - sizeof(TSKEY));
+ cv.value.nData = varDataLen(pData);
+ cv.value.pData = varDataVal(pData);
+ } else {
+ memcpy(&cv.value.val, pRow->data + pTColumn->offset - sizeof(TSKEY), pTColumn->bytes);
+ }
+
+ code = tColDataAppendValue(pColData, &cv);
+ if (code) goto _exit;
+ } else if (vt == TD_VTYPE_NONE) {
+ code = tColDataAppendValue(pColData, &COL_VAL_NONE(pColData->cid, pColData->type));
+ if (code) goto _exit;
+ } else if (vt == TD_VTYPE_NULL) {
+ code = tColDataAppendValue(pColData, &COL_VAL_NULL(pColData->cid, pColData->type));
+ if (code) goto _exit;
+ } else {
+ ASSERT(0);
+ }
+ } else {
+ cv.flag = CV_FLAG_VALUE;
+
+ if (IS_VAR_DATA_TYPE(pTColumn->type)) {
+ void *pData = (char*)pRow + *(int32_t *)(pRow->data + pTColumn->offset - sizeof(TSKEY));
+ cv.value.nData = varDataLen(pData);
+ cv.value.pData = varDataVal(pData);
+ } else {
+ memcpy(&cv.value.val, pRow->data + pTColumn->offset - sizeof(TSKEY), pTColumn->bytes);
+ }
+
+ code = tColDataAppendValue(pColData, &cv);
+ if (code) goto _exit;
+ }
+
+ iTColumn++;
+ pTColumn = (iTColumn < pTSchema->numOfCols) ? &pTSchema->columns[iTColumn] : NULL;
+ }
+ }
+
+_exit:
+ return code;
+}
+
+static int32_t tBlockDataAppendKVRow(SBlockData *pBlockData, STSRow *pRow, STSchema *pTSchema) {
+ int32_t code = 0;
+
+ col_id_t kvIter = 0;
+ col_id_t nKvCols = tdRowGetNCols(pRow) - 1;
+ void *pColIdx = TD_ROW_COL_IDX(pRow);
+ void *pBitmap = tdGetBitmapAddrKv(pRow, tdRowGetNCols(pRow));
+ int32_t iTColumn = 1;
+ STColumn *pTColumn = (iTColumn < pTSchema->numOfCols) ? &pTSchema->columns[iTColumn] : NULL;
+
+ for (int32_t iColData = 0; iColData < pBlockData->nColData; iColData++) {
+ SColData *pColData = &((SColData *)pBlockData->aColData->pData)[iColData];
+
+ while (pTColumn && pTColumn->colId < pColData->cid) {
+ iTColumn++;
+ pTColumn = (iTColumn < pTSchema->numOfCols) ? &pTSchema->columns[iTColumn] : NULL;
+ }
+
+ if (pTColumn == NULL || pTColumn->colId > pColData->cid) {
+ code = tColDataAppendValue(pColData, &COL_VAL_NONE(pColData->cid, pColData->type));
+ if (code) goto _exit;
+ } else {
+ ASSERT(pTColumn->type == pColData->type);
+
+ SColVal cv = {.cid = pTColumn->colId, .type = pTColumn->type};
+ TDRowValT vt = TD_VTYPE_NONE; // default is NONE
+ SKvRowIdx *pKvIdx = NULL;
+
+ while (kvIter < nKvCols) {
+ pKvIdx = (SKvRowIdx *)POINTER_SHIFT(pColIdx, kvIter * sizeof(SKvRowIdx));
+ if (pKvIdx->colId == pTColumn->colId) {
+ tdGetBitmapValTypeII(pBitmap, kvIter, &vt);
+ ++kvIter;
+ break;
+ } else if (pKvIdx->colId > pTColumn->colId) {
+ vt = TD_VTYPE_NONE;
+ break;
+ } else {
+ ++kvIter;
+ }
+ }
+
+ if (vt == TD_VTYPE_NORM) {
+ cv.flag = CV_FLAG_VALUE;
+
+ void *pData = POINTER_SHIFT(pRow, pKvIdx->offset);
+ if (IS_VAR_DATA_TYPE(pTColumn->type)) {
+ cv.value.nData = varDataLen(pData);
+ cv.value.pData = varDataVal(pData);
+ } else {
+ memcpy(&cv.value.val, pData, pTColumn->bytes);
+ }
+
+ code = tColDataAppendValue(pColData, &cv);
+ if (code) goto _exit;
+ } else if (vt == TD_VTYPE_NONE) {
+ code = tColDataAppendValue(pColData, &COL_VAL_NONE(pColData->cid, pColData->type));
+ if (code) goto _exit;
+ } else if (vt == TD_VTYPE_NULL) {
+ code = tColDataAppendValue(pColData, &COL_VAL_NULL(pColData->cid, pColData->type));
+ if (code) goto _exit;
+ } else {
+ ASSERT(0);
+ }
+
+ iTColumn++;
+ pTColumn = (iTColumn < pTSchema->numOfCols) ? &pTSchema->columns[iTColumn] : NULL;
+ }
+ }
+
+_exit:
+ return code;
+}
+
int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTSchema, int64_t uid) {
int32_t code = 0;
@@ -1036,27 +1221,20 @@ int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTS
if (code) goto _err;
pBlockData->aTSKEY[pBlockData->nRow] = TSDBROW_TS(pRow);
- // OTHER
- SRowIter rIter = {0};
- SColVal *pColVal;
-
- tRowIterInit(&rIter, pRow, pTSchema);
- pColVal = tRowIterNext(&rIter);
- for (int32_t iColData = 0; iColData < pBlockData->nColData; iColData++) {
- SColData *pColData = &((SColData *)pBlockData->aColData->pData)[iColData];
-
- while (pColVal && pColVal->cid < pColData->cid) {
- pColVal = tRowIterNext(&rIter);
- }
-
- if (pColVal == NULL || pColVal->cid > pColData->cid) {
- code = tColDataAppendValue(pColData, &COL_VAL_NONE(pColData->cid, pColData->type));
+ SColVal cv = {0};
+ if (pRow->type == 0) {
+ if (TD_IS_TP_ROW(pRow->pTSRow)) {
+ code = tBlockDataAppendTPRow(pBlockData, pRow->pTSRow, pTSchema);
+ if (code) goto _err;
+ } else if (TD_IS_KV_ROW(pRow->pTSRow)) {
+ code = tBlockDataAppendKVRow(pBlockData, pRow->pTSRow, pTSchema);
if (code) goto _err;
} else {
- code = tColDataAppendValue(pColData, pColVal);
- if (code) goto _err;
- pColVal = tRowIterNext(&rIter);
+ ASSERT(0);
}
+ } else {
+ code = tBlockDataAppendBlockRow(pBlockData, pRow->pBlockData, pRow->iRow);
+ if (code) goto _err;
}
pBlockData->nRow++;
diff --git a/source/dnode/vnode/src/vnd/vnodeBufPool.c b/source/dnode/vnode/src/vnd/vnodeBufPool.c
index 6ac2ce1c16..71e926bd35 100644
--- a/source/dnode/vnode/src/vnd/vnodeBufPool.c
+++ b/source/dnode/vnode/src/vnd/vnodeBufPool.c
@@ -27,10 +27,21 @@ static int vnodeBufPoolCreate(SVnode *pVnode, int64_t size, SVBufPool **ppPool)
return -1;
}
- if (taosThreadSpinInit(&pPool->lock, 0) != 0) {
- taosMemoryFree(pPool);
- terrno = TAOS_SYSTEM_ERROR(errno);
- return -1;
+ if (VND_IS_RSMA(pVnode)) {
+ pPool->lock = taosMemoryMalloc(sizeof(TdThreadSpinlock));
+ if (!pPool->lock) {
+ taosMemoryFree(pPool);
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
+ }
+ if (taosThreadSpinInit(pPool->lock, 0) != 0) {
+ taosMemoryFree((void*)pPool->lock);
+ taosMemoryFree(pPool);
+ terrno = TAOS_SYSTEM_ERROR(errno);
+ return -1;
+ }
+ } else {
+ pPool->lock = NULL;
}
pPool->next = NULL;
@@ -49,7 +60,10 @@ static int vnodeBufPoolCreate(SVnode *pVnode, int64_t size, SVBufPool **ppPool)
static int vnodeBufPoolDestroy(SVBufPool *pPool) {
vnodeBufPoolReset(pPool);
- taosThreadSpinDestroy(&pPool->lock);
+ if (pPool->lock) {
+ taosThreadSpinDestroy(pPool->lock);
+ taosMemoryFree((void*)pPool->lock);
+ }
taosMemoryFree(pPool);
return 0;
}
@@ -114,7 +128,7 @@ void *vnodeBufPoolMalloc(SVBufPool *pPool, int size) {
void *p = NULL;
ASSERT(pPool != NULL);
- taosThreadSpinLock(&pPool->lock);
+ if (pPool->lock) taosThreadSpinLock(pPool->lock);
if (pPool->node.size >= pPool->ptr - pPool->node.data + size) {
// allocate from the anchor node
p = pPool->ptr;
@@ -125,7 +139,7 @@ void *vnodeBufPoolMalloc(SVBufPool *pPool, int size) {
pNode = taosMemoryMalloc(sizeof(*pNode) + size);
if (pNode == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
- taosThreadSpinUnlock(&pPool->lock);
+ if (pPool->lock) taosThreadSpinUnlock(pPool->lock);
return NULL;
}
@@ -138,7 +152,7 @@ void *vnodeBufPoolMalloc(SVBufPool *pPool, int size) {
pPool->size = pPool->size + sizeof(*pNode) + size;
}
- taosThreadSpinUnlock(&pPool->lock);
+ if (pPool->lock) taosThreadSpinUnlock(pPool->lock);
return p;
}
diff --git a/source/dnode/vnode/src/vnd/vnodeOpen.c b/source/dnode/vnode/src/vnd/vnodeOpen.c
index 8c2036b97b..77d375bc45 100644
--- a/source/dnode/vnode/src/vnd/vnodeOpen.c
+++ b/source/dnode/vnode/src/vnd/vnodeOpen.c
@@ -242,7 +242,10 @@ _err:
return NULL;
}
-void vnodePreClose(SVnode *pVnode) { vnodeSyncPreClose(pVnode); }
+void vnodePreClose(SVnode *pVnode) {
+ vnodeQueryPreClose(pVnode);
+ vnodeSyncPreClose(pVnode);
+}
void vnodeClose(SVnode *pVnode) {
if (pVnode) {
diff --git a/source/dnode/vnode/src/vnd/vnodeQuery.c b/source/dnode/vnode/src/vnd/vnodeQuery.c
index efedc12d80..ef0ee6ac0b 100644
--- a/source/dnode/vnode/src/vnd/vnodeQuery.c
+++ b/source/dnode/vnode/src/vnd/vnodeQuery.c
@@ -28,6 +28,8 @@ int vnodeQueryOpen(SVnode *pVnode) {
return qWorkerInit(NODE_TYPE_VNODE, TD_VID(pVnode), (void **)&pVnode->pQuery, &pVnode->msgCb);
}
+void vnodeQueryPreClose(SVnode *pVnode) { qWorkerStopAllTasks((void *)pVnode->pQuery); }
+
void vnodeQueryClose(SVnode *pVnode) { qWorkerDestroy((void **)&pVnode->pQuery); }
int vnodeGetTableMeta(SVnode *pVnode, SRpcMsg *pMsg, bool direct) {
diff --git a/source/libs/catalog/src/ctgAsync.c b/source/libs/catalog/src/ctgAsync.c
index ff3bd4d33c..2a032de003 100644
--- a/source/libs/catalog/src/ctgAsync.c
+++ b/source/libs/catalog/src/ctgAsync.c
@@ -1204,11 +1204,12 @@ int32_t ctgHandleGetTbMetasRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBu
stbCtx.flag = flag;
stbCtx.pName = &stbName;
- STableMeta *stbMeta = NULL;
+ STableMeta* stbMeta = NULL;
ctgReadTbMetaFromCache(pCtg, &stbCtx, &stbMeta);
if (stbMeta && stbMeta->sversion >= pOut->tbMeta->sversion) {
ctgDebug("use cached stb meta, tbName:%s", tNameGetTableName(pName));
exist = 1;
+ taosMemoryFreeClear(stbMeta);
} else {
ctgDebug("need to get/update stb meta, tbName:%s", tNameGetTableName(pName));
taosMemoryFreeClear(pOut->tbMeta);
diff --git a/source/libs/catalog/src/ctgCache.c b/source/libs/catalog/src/ctgCache.c
index e99beca69a..fa38eeba0c 100644
--- a/source/libs/catalog/src/ctgCache.c
+++ b/source/libs/catalog/src/ctgCache.c
@@ -72,8 +72,8 @@ void ctgRUnlockVgInfo(SCtgDBCache *dbCache) { CTG_UNLOCK(CTG_READ, &dbCache->vgC
void ctgWUnlockVgInfo(SCtgDBCache *dbCache) { CTG_UNLOCK(CTG_WRITE, &dbCache->vgCache.vgLock); }
-void ctgReleaseDBCache(SCatalog *pCtg, SCtgDBCache *dbCache) {
- CTG_UNLOCK(CTG_READ, &dbCache->dbLock);
+void ctgReleaseDBCache(SCatalog *pCtg, SCtgDBCache *dbCache) {
+ CTG_UNLOCK(CTG_READ, &dbCache->dbLock);
taosHashRelease(pCtg->dbCache, dbCache);
}
@@ -90,7 +90,7 @@ int32_t ctgAcquireDBCacheImpl(SCatalog *pCtg, const char *dbFName, SCtgDBCache *
} else {
dbCache = (SCtgDBCache *)taosHashGet(pCtg->dbCache, dbFName, strlen(dbFName));
}
-
+
if (NULL == dbCache) {
*pCache = NULL;
ctgDebug("db not in cache, dbFName:%s", dbFName);
@@ -422,6 +422,7 @@ _return:
ctgReleaseTbMetaToCache(pCtg, dbCache, tbCache);
taosMemoryFreeClear(*pTableMeta);
+ *pTableMeta = NULL;
CTG_RET(code);
}
@@ -1436,7 +1437,7 @@ int32_t ctgWriteTbMetaToCache(SCatalog *pCtg, SCtgDBCache *dbCache, char *dbFNam
if (pCache) {
CTG_ERR_RET(ctgUpdateRentStbVersion(pCtg, dbFName, tbName, dbId, meta->suid, pCache));
}
-
+
return TSDB_CODE_SUCCESS;
}
@@ -1565,7 +1566,8 @@ int32_t ctgOpUpdateVgroup(SCtgCacheOperation *operation) {
}
bool newAdded = false;
- SDbVgVersion vgVersion = {.dbId = msg->dbId, .vgVersion = dbInfo->vgVersion, .numOfTable = dbInfo->numOfTable, .stateTs = dbInfo->stateTs};
+ SDbVgVersion vgVersion = {
+ .dbId = msg->dbId, .vgVersion = dbInfo->vgVersion, .numOfTable = dbInfo->numOfTable, .stateTs = dbInfo->stateTs};
SCtgDBCache *dbCache = NULL;
CTG_ERR_JRET(ctgGetAddDBCache(msg->pCtg, dbFName, msg->dbId, &dbCache));
@@ -1581,15 +1583,17 @@ int32_t ctgOpUpdateVgroup(SCtgCacheOperation *operation) {
SDBVgInfo *vgInfo = vgCache->vgInfo;
if (dbInfo->vgVersion < vgInfo->vgVersion) {
- ctgDebug("db updateVgroup is ignored, dbFName:%s, vgVer:%d, curVer:%d", dbFName, dbInfo->vgVersion, vgInfo->vgVersion);
+ ctgDebug("db updateVgroup is ignored, dbFName:%s, vgVer:%d, curVer:%d", dbFName, dbInfo->vgVersion,
+ vgInfo->vgVersion);
ctgWUnlockVgInfo(dbCache);
goto _return;
}
- if (dbInfo->vgVersion == vgInfo->vgVersion && dbInfo->numOfTable == vgInfo->numOfTable && dbInfo->stateTs == vgInfo->stateTs) {
- ctgDebug("no new db vgroup update info, dbFName:%s, vgVer:%d, numOfTable:%d, stateTs:%" PRId64, dbFName, dbInfo->vgVersion,
- dbInfo->numOfTable, dbInfo->stateTs);
+ if (dbInfo->vgVersion == vgInfo->vgVersion && dbInfo->numOfTable == vgInfo->numOfTable &&
+ dbInfo->stateTs == vgInfo->stateTs) {
+ ctgDebug("no new db vgroup update info, dbFName:%s, vgVer:%d, numOfTable:%d, stateTs:%" PRId64, dbFName,
+ dbInfo->vgVersion, dbInfo->numOfTable, dbInfo->stateTs);
ctgWUnlockVgInfo(dbCache);
goto _return;
@@ -1601,7 +1605,8 @@ int32_t ctgOpUpdateVgroup(SCtgCacheOperation *operation) {
vgCache->vgInfo = dbInfo;
msg->dbInfo = NULL;
- ctgDebug("db vgInfo updated, dbFName:%s, vgVer:%d, stateTs:%" PRId64 ", dbId:0x%" PRIx64, dbFName, vgVersion.vgVersion, vgVersion.stateTs, vgVersion.dbId);
+ ctgDebug("db vgInfo updated, dbFName:%s, vgVer:%d, stateTs:%" PRId64 ", dbId:0x%" PRIx64, dbFName,
+ vgVersion.vgVersion, vgVersion.stateTs, vgVersion.dbId);
ctgWUnlockVgInfo(dbCache);
@@ -1692,7 +1697,7 @@ int32_t ctgOpUpdateTbMeta(SCtgCacheOperation *operation) {
if (pCtg->stopUpdate) {
goto _return;
}
-
+
if ((!CTG_IS_META_CTABLE(pMeta->metaType)) && NULL == pMeta->tbMeta) {
ctgError("no valid tbmeta got from meta rsp, dbFName:%s, tbName:%s", pMeta->dbFName, pMeta->tbName);
CTG_ERR_JRET(TSDB_CODE_CTG_INTERNAL_ERROR);
@@ -1902,7 +1907,7 @@ int32_t ctgOpUpdateEpset(SCtgCacheOperation *operation) {
int32_t code = 0;
SCtgUpdateEpsetMsg *msg = operation->data;
SCatalog *pCtg = msg->pCtg;
- SCtgDBCache *dbCache = NULL;
+ SCtgDBCache *dbCache = NULL;
if (pCtg->stopUpdate) {
goto _return;
@@ -2209,6 +2214,7 @@ int32_t ctgGetTbMetaFromCache(SCatalog *pCtg, SCtgTbMetaCtx *ctx, STableMeta **p
}
taosMemoryFreeClear(*pTableMeta);
+ *pTableMeta = NULL;
}
if (CTG_FLAG_IS_UNKNOWN_STB(ctx->flag)) {
diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h
index 62146b6048..b0da277cfb 100644
--- a/source/libs/executor/inc/executorimpl.h
+++ b/source/libs/executor/inc/executorimpl.h
@@ -153,6 +153,16 @@ typedef struct {
SSchemaWrapper* qsw;
} SSchemaInfo;
+typedef struct {
+ int32_t operatorType;
+ int64_t refId;
+} SExchangeOpStopInfo;
+
+typedef struct {
+ SRWLatch lock;
+ SArray* pStopInfo;
+} STaskStopInfo;
+
typedef struct SExecTaskInfo {
STaskIdInfo id;
uint32_t status;
@@ -171,6 +181,7 @@ typedef struct SExecTaskInfo {
SSubplan* pSubplan;
struct SOperatorInfo* pRoot;
SLocalFetch localFetch;
+ STaskStopInfo stopInfo;
} SExecTaskInfo;
enum {
@@ -981,6 +992,7 @@ void setTaskKilled(SExecTaskInfo* pTaskInfo);
void queryCostStatis(SExecTaskInfo* pTaskInfo);
void doDestroyTask(SExecTaskInfo* pTaskInfo);
+void destroyOperatorInfo(SOperatorInfo* pOperator);
int32_t getMaximumIdleDurationSec();
/*
@@ -1049,6 +1061,7 @@ int32_t setOutputBuf(SStreamState* pState, STimeWindow* win, SResultRow** pResul
int32_t releaseOutputBuf(SStreamState* pState, SWinKey* pKey, SResultRow* pResult);
int32_t saveOutputBuf(SStreamState* pState, SWinKey* pKey, SResultRow* pResult, int32_t resSize);
void getNextIntervalWindow(SInterval* pInterval, STimeWindow* tw, int32_t order);
+int32_t qAppendTaskStopInfo(SExecTaskInfo* pTaskInfo, SExchangeOpStopInfo *pInfo);
#ifdef __cplusplus
}
diff --git a/source/libs/executor/src/exchangeoperator.c b/source/libs/executor/src/exchangeoperator.c
index 049de727df..c57a1b38eb 100644
--- a/source/libs/executor/src/exchangeoperator.c
+++ b/source/libs/executor/src/exchangeoperator.c
@@ -65,6 +65,9 @@ static void concurrentlyLoadRemoteDataImpl(SOperatorInfo* pOperator, SExchangeIn
while (1) {
tsem_wait(&pExchangeInfo->ready);
+ if (isTaskKilled(pTaskInfo)) {
+ longjmp(pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED);
+ }
for (int32_t i = 0; i < totalSources; ++i) {
SSourceDataInfo* pDataInfo = taosArrayGet(pExchangeInfo->pSourceDataInfo, i);
@@ -286,6 +289,9 @@ SOperatorInfo* createExchangeOperatorInfo(void* pTransporter, SExchangePhysiNode
pInfo->pDummyBlock = createResDataBlock(pExNode->node.pOutputDataBlockDesc);
pInfo->pResultBlockList = taosArrayInit(1, POINTER_BYTES);
+ SExchangeOpStopInfo stopInfo = {QUERY_NODE_PHYSICAL_PLAN_EXCHANGE, pInfo->self};
+ qAppendTaskStopInfo(pTaskInfo, &stopInfo);
+
pInfo->seqLoadData = false;
pInfo->pTransporter = pTransporter;
@@ -543,6 +549,10 @@ int32_t prepareConcurrentlyLoad(SOperatorInfo* pOperator) {
pOperator->cost.openCost = taosGetTimestampUs() - startTs;
tsem_wait(&pExchangeInfo->ready);
+ if (isTaskKilled(pTaskInfo)) {
+ longjmp(pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED);
+ }
+
tsem_post(&pExchangeInfo->ready);
return TSDB_CODE_SUCCESS;
}
@@ -562,6 +572,9 @@ int32_t seqLoadRemoteData(SOperatorInfo* pOperator) {
doSendFetchDataRequest(pExchangeInfo, pTaskInfo, pExchangeInfo->current);
tsem_wait(&pExchangeInfo->ready);
+ if (isTaskKilled(pTaskInfo)) {
+ longjmp(pTaskInfo->env, TSDB_CODE_TSC_QUERY_CANCELLED);
+ }
SSourceDataInfo* pDataInfo = taosArrayGet(pExchangeInfo->pSourceDataInfo, pExchangeInfo->current);
SDownstreamSourceNode* pSource = taosArrayGet(pExchangeInfo->pSources, pExchangeInfo->current);
diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c
index 1aa9a3c613..428af19a6c 100644
--- a/source/libs/executor/src/executor.c
+++ b/source/libs/executor/src/executor.c
@@ -659,6 +659,54 @@ int32_t qExecTask(qTaskInfo_t tinfo, SSDataBlock** pRes, uint64_t* useconds) {
return pTaskInfo->code;
}
+int32_t qAppendTaskStopInfo(SExecTaskInfo* pTaskInfo, SExchangeOpStopInfo *pInfo) {
+ taosWLockLatch(&pTaskInfo->stopInfo.lock);
+ taosArrayPush(pTaskInfo->stopInfo.pStopInfo, pInfo);
+ taosWUnLockLatch(&pTaskInfo->stopInfo.lock);
+
+ return TSDB_CODE_SUCCESS;
+}
+
+int32_t stopInfoComp(void const* lp, void const* rp) {
+ SExchangeOpStopInfo* key = (SExchangeOpStopInfo*)lp;
+ SExchangeOpStopInfo* pInfo = (SExchangeOpStopInfo*)rp;
+
+ if (key->refId < pInfo->refId) {
+ return -1;
+ } else if (key->refId > pInfo->refId) {
+ return 1;
+ }
+
+ return 0;
+}
+
+void qRemoveTaskStopInfo(SExecTaskInfo* pTaskInfo, SExchangeOpStopInfo *pInfo) {
+ taosWLockLatch(&pTaskInfo->stopInfo.lock);
+ int32_t idx = taosArraySearchIdx(pTaskInfo->stopInfo.pStopInfo, pInfo, stopInfoComp, TD_EQ);
+ if (idx >= 0) {
+ taosArrayRemove(pTaskInfo->stopInfo.pStopInfo, idx);
+ }
+ taosWUnLockLatch(&pTaskInfo->stopInfo.lock);
+
+ return;
+}
+
+void qStopTaskOperators(SExecTaskInfo* pTaskInfo) {
+ taosWLockLatch(&pTaskInfo->stopInfo.lock);
+
+ int32_t num = taosArrayGetSize(pTaskInfo->stopInfo.pStopInfo);
+ for (int32_t i = 0; i < num; ++i) {
+ SExchangeOpStopInfo *pStop = taosArrayGet(pTaskInfo->stopInfo.pStopInfo, i);
+ SExchangeInfo* pExchangeInfo = taosAcquireRef(exchangeObjRefPool, pStop->refId);
+ if (pExchangeInfo) {
+ tsem_post(&pExchangeInfo->ready);
+ taosReleaseRef(exchangeObjRefPool, pStop->refId);
+ }
+ }
+
+ taosWUnLockLatch(&pTaskInfo->stopInfo.lock);
+}
+
int32_t qAsyncKillTask(qTaskInfo_t qinfo) {
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)qinfo;
@@ -667,7 +715,11 @@ int32_t qAsyncKillTask(qTaskInfo_t qinfo) {
}
qDebug("%s execTask async killed", GET_TASKID(pTaskInfo));
+
setTaskKilled(pTaskInfo);
+
+ qStopTaskOperators(pTaskInfo);
+
return TSDB_CODE_SUCCESS;
}
diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c
index 709e981a1f..baa5cb6479 100644
--- a/source/libs/executor/src/executorimpl.c
+++ b/source/libs/executor/src/executorimpl.c
@@ -91,9 +91,6 @@ static void destroyAggOperatorInfo(void* param);
static void destroyIntervalOperatorInfo(void* param);
-
-static void destroyOperatorInfo(SOperatorInfo* pOperator);
-
void setOperatorCompleted(SOperatorInfo* pOperator) {
pOperator->status = OP_EXEC_DONE;
ASSERT(pOperator->pTaskInfo != NULL);
@@ -2172,7 +2169,7 @@ void destroyExprInfo(SExprInfo* pExpr, int32_t numOfExprs) {
}
}
-static void destroyOperatorInfo(SOperatorInfo* pOperator) {
+void destroyOperatorInfo(SOperatorInfo* pOperator) {
if (pOperator == NULL) {
return;
}
@@ -2600,6 +2597,7 @@ static SExecTaskInfo* createExecTaskInfo(uint64_t queryId, uint64_t taskId, EOPT
pTaskInfo->id.queryId = queryId;
pTaskInfo->execModel = model;
pTaskInfo->pTableInfoList = tableListCreate();
+ pTaskInfo->stopInfo.pStopInfo = taosArrayInit(4, sizeof(SExchangeOpStopInfo));
char* p = taosMemoryCalloc(1, 128);
snprintf(p, 128, "TID:0x%" PRIx64 " QID:0x%" PRIx64, taskId, queryId);
@@ -3213,6 +3211,7 @@ void doDestroyTask(SExecTaskInfo* pTaskInfo) {
nodesDestroyNode((SNode*)pTaskInfo->pSubplan);
}
+ taosArrayDestroy(pTaskInfo->stopInfo.pStopInfo);
taosMemoryFreeClear(pTaskInfo->sql);
taosMemoryFreeClear(pTaskInfo->id.str);
taosMemoryFreeClear(pTaskInfo);
@@ -3426,6 +3425,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, SStreamState* pSta
ASSERT(code == 0);
if (code == -1) {
// coverity scan
+ pGroupResInfo->index += 1;
continue;
}
SResultRow* pRow = (SResultRow*)pVal;
diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c
index 47ee663abe..26a5f6838d 100644
--- a/source/libs/executor/src/groupoperator.c
+++ b/source/libs/executor/src/groupoperator.c
@@ -816,12 +816,12 @@ SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartition
goto _error;
}
- setOperatorInfo(pOperator, "PartitionOperator", QUERY_NODE_PHYSICAL_PLAN_PARTITION, false, OP_NOT_OPENED, pInfo, pTaskInfo);
+ setOperatorInfo(pOperator, "PartitionOperator", QUERY_NODE_PHYSICAL_PLAN_PARTITION, false, OP_NOT_OPENED, pInfo,
+ pTaskInfo);
pOperator->exprSupp.numOfExprs = numOfCols;
pOperator->exprSupp.pExprInfo = pExprInfo;
- pOperator->fpSet =
- createOperatorFpSet(operatorDummyOpenFn, hashPartition, NULL, destroyPartitionOperatorInfo, NULL);
+ pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, hashPartition, NULL, destroyPartitionOperatorInfo, NULL);
code = appendDownstream(pOperator, &downstream, 1);
return pOperator;
@@ -900,7 +900,7 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) {
// TODO check tbname validity
if (pData != (void*)-1) {
memset(pDest->info.parTbName, 0, TSDB_TABLE_NAME_LEN);
- int32_t len = TMIN(varDataLen(pData), TSDB_TABLE_NAME_LEN);
+ int32_t len = TMIN(varDataLen(pData), TSDB_TABLE_NAME_LEN - 1);
memcpy(pDest->info.parTbName, varDataVal(pData), len);
/*pDest->info.parTbName[len + 1] = 0;*/
} else {
@@ -1099,11 +1099,12 @@ SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStr
int32_t numOfCols = 0;
SExprInfo* pExprInfo = createExprInfo(pPartNode->part.pTargets, NULL, &numOfCols);
- setOperatorInfo(pOperator, "StreamPartitionOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION, false, OP_NOT_OPENED, pInfo, pTaskInfo);
+ setOperatorInfo(pOperator, "StreamPartitionOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION, false, OP_NOT_OPENED,
+ pInfo, pTaskInfo);
pOperator->exprSupp.numOfExprs = numOfCols;
pOperator->exprSupp.pExprInfo = pExprInfo;
- pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, doStreamHashPartition, NULL,
- destroyStreamPartitionOperatorInfo, NULL);
+ pOperator->fpSet =
+ createOperatorFpSet(operatorDummyOpenFn, doStreamHashPartition, NULL, destroyStreamPartitionOperatorInfo, NULL);
initParDownStream(downstream, &pInfo->partitionSup, &pInfo->scalarSup);
code = appendDownstream(pOperator, &downstream, 1);
diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c
index b83fac9fa6..d2e59ea8e1 100644
--- a/source/libs/executor/src/scanoperator.c
+++ b/source/libs/executor/src/scanoperator.c
@@ -946,7 +946,8 @@ SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode,
pInfo->currentGroupId = -1;
pInfo->assignBlockUid = pTableScanNode->assignBlockUid;
- setOperatorInfo(pOperator, "TableScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo);
+ setOperatorInfo(pOperator, "TableScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN, false, OP_NOT_OPENED, pInfo,
+ pTaskInfo);
pOperator->exprSupp.numOfExprs = numOfCols;
pInfo->metaCache.pTableMetaEntryCache = taosLRUCacheInit(1024 * 128, -1, .5);
@@ -980,7 +981,8 @@ SOperatorInfo* createTableSeqScanOperatorInfo(void* pReadHandle, SExecTaskInfo*
pInfo->dataReader = pReadHandle;
// pInfo->prevGroupId = -1;
- setOperatorInfo(pOperator, "TableSeqScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo);
+ setOperatorInfo(pOperator, "TableSeqScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN, false, OP_NOT_OPENED,
+ pInfo, pTaskInfo);
pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, doTableScanImpl, NULL, NULL, NULL);
return pOperator;
}
@@ -1136,8 +1138,10 @@ SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDi
goto _error;
}
- setOperatorInfo(pOperator, "DataBlockDistScanOperator", QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo);
- pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, doBlockInfoScan, NULL, destroyBlockDistScanOperatorInfo, NULL);
+ setOperatorInfo(pOperator, "DataBlockDistScanOperator", QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN, false,
+ OP_NOT_OPENED, pInfo, pTaskInfo);
+ pOperator->fpSet =
+ createOperatorFpSet(operatorDummyOpenFn, doBlockInfoScan, NULL, destroyBlockDistScanOperatorInfo, NULL);
return pOperator;
_error:
@@ -1581,7 +1585,7 @@ static void calBlockTbName(SExprSupp* pTbNameCalSup, SSDataBlock* pBlock) {
// TODO check tbname validation
if (pData != (void*)-1 && pData != NULL) {
memset(pBlock->info.parTbName, 0, TSDB_TABLE_NAME_LEN);
- int32_t len = TMIN(varDataLen(pData), TSDB_TABLE_NAME_LEN);
+ int32_t len = TMIN(varDataLen(pData), TSDB_TABLE_NAME_LEN - 1);
memcpy(pBlock->info.parTbName, varDataVal(pData), len);
/*pBlock->info.parTbName[len + 1] = 0;*/
} else {
@@ -1769,6 +1773,7 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) {
tqOffsetResetToLog(&pTaskInfo->streamInfo.prepareStatus, pTaskInfo->streamInfo.snapshotVer);
qDebug("queue scan tsdb over, switch to wal ver %" PRId64 "", pTaskInfo->streamInfo.snapshotVer + 1);
if (tqSeekVer(pInfo->tqReader, pTaskInfo->streamInfo.snapshotVer + 1) < 0) {
+ tqOffsetResetToLog(&pTaskInfo->streamInfo.lastStatus, pTaskInfo->streamInfo.snapshotVer);
return NULL;
}
ASSERT(pInfo->tqReader->pWalReader->curVersion == pTaskInfo->streamInfo.snapshotVer + 1);
@@ -2351,7 +2356,8 @@ SOperatorInfo* createRawScanOperatorInfo(SReadHandle* pHandle, SExecTaskInfo* pT
pInfo->vnode = pHandle->vnode;
pInfo->sContext = pHandle->sContext;
- setOperatorInfo(pOperator, "RawScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo);
+ setOperatorInfo(pOperator, "RawScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN, false, OP_NOT_OPENED, pInfo,
+ pTaskInfo);
pOperator->fpSet = createOperatorFpSet(NULL, doRawScan, NULL, destroyRawScanOperatorInfo, NULL);
return pOperator;
@@ -2366,9 +2372,7 @@ _end:
static void destroyStreamScanOperatorInfo(void* param) {
SStreamScanInfo* pStreamScan = (SStreamScanInfo*)param;
if (pStreamScan->pTableScanOp && pStreamScan->pTableScanOp->info) {
- STableScanInfo* pTableScanInfo = pStreamScan->pTableScanOp->info;
- destroyTableScanOperatorInfo(pTableScanInfo);
- taosMemoryFreeClear(pStreamScan->pTableScanOp);
+ destroyOperatorInfo(pStreamScan->pTableScanOp);
}
if (pStreamScan->tqReader) {
tqCloseReader(pStreamScan->tqReader);
@@ -2537,7 +2541,8 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys
pInfo->assignBlockUid = pTableScanNode->assignBlockUid;
pInfo->partitionSup.needCalc = false;
- setOperatorInfo(pOperator, "StreamScanOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo);
+ setOperatorInfo(pOperator, "StreamScanOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN, false, OP_NOT_OPENED, pInfo,
+ pTaskInfo);
pOperator->exprSupp.numOfExprs = taosArrayGetSize(pInfo->pRes->pDataBlock);
__optr_fn_t nextFn = pTaskInfo->execModel == OPTR_EXEC_MODEL_STREAM ? doStreamScan : doQueueScan;
@@ -4175,7 +4180,8 @@ SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSystemTableScan
pInfo->readHandle = *(SReadHandle*)readHandle;
}
- setOperatorInfo(pOperator, "SysTableScanOperator", QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo);
+ setOperatorInfo(pOperator, "SysTableScanOperator", QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN, false, OP_NOT_OPENED,
+ pInfo, pTaskInfo);
pOperator->exprSupp.numOfExprs = taosArrayGetSize(pInfo->pRes->pDataBlock);
pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, doSysTableScan, NULL, destroySysScanOperator, NULL);
return pOperator;
@@ -4305,7 +4311,8 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi
pInfo->readHandle = *pReadHandle;
pInfo->curPos = 0;
- setOperatorInfo(pOperator, "TagScanOperator", QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo);
+ setOperatorInfo(pOperator, "TagScanOperator", QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN, false, OP_NOT_OPENED, pInfo,
+ pTaskInfo);
initResultSizeInfo(&pOperator->resultInfo, 4096);
blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity);
@@ -4815,11 +4822,12 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN
int32_t rowSize = pInfo->pResBlock->info.rowSize;
pInfo->bufPageSize = getProperSortPageSize(rowSize);
- setOperatorInfo(pOperator, "TableMergeScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo);
+ setOperatorInfo(pOperator, "TableMergeScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN, false, OP_NOT_OPENED,
+ pInfo, pTaskInfo);
pOperator->exprSupp.numOfExprs = numOfCols;
- pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, doTableMergeScan, NULL,
- destroyTableMergeScanOperatorInfo, getTableMergeScanExplainExecInfo);
+ pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, doTableMergeScan, NULL, destroyTableMergeScanOperatorInfo,
+ getTableMergeScanExplainExecInfo);
pOperator->cost.openCost = 0;
return pOperator;
diff --git a/source/libs/executor/src/tfill.c b/source/libs/executor/src/tfill.c
index 7c9d73ad13..ddd948a6dd 100644
--- a/source/libs/executor/src/tfill.c
+++ b/source/libs/executor/src/tfill.c
@@ -680,9 +680,9 @@ SResultCellData* getResultCell(SResultRowData* pRaw, int32_t index) {
void* destroyFillColumnInfo(SFillColInfo* pFillCol, int32_t start, int32_t end) {
for (int32_t i = start; i < end; i++) {
destroyExprInfo(pFillCol[i].pExpr, 1);
- taosMemoryFreeClear(pFillCol[i].pExpr);
taosVariantDestroy(&pFillCol[i].fillVal);
}
+ taosMemoryFreeClear(pFillCol[start].pExpr);
taosMemoryFree(pFillCol);
return NULL;
}
diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c
index 4c369e8802..5d318c8ed6 100644
--- a/source/libs/executor/src/timewindowoperator.c
+++ b/source/libs/executor/src/timewindowoperator.c
@@ -3580,6 +3580,11 @@ static void removeSessionResult(SSHashObj* pHashMap, SSHashObj* pResMap, SSessio
tSimpleHashRemove(pResMap, &key, sizeof(SSessionKey));
}
+static void getSessionHashKey(const SSessionKey* pKey, SSessionKey* pHashKey) {
+ *pHashKey = *pKey;
+ pHashKey->win.ekey = pKey->win.skey;
+}
+
static void removeSessionResults(SSHashObj* pHashMap, SArray* pWins) {
if (tSimpleHashGetSize(pHashMap) == 0) {
return;
@@ -3588,8 +3593,8 @@ static void removeSessionResults(SSHashObj* pHashMap, SArray* pWins) {
for (int32_t i = 0; i < size; i++) {
SSessionKey* pWin = taosArrayGet(pWins, i);
if (!pWin) continue;
- SSessionKey key = *pWin;
- key.win.ekey = key.win.skey;
+ SSessionKey key = {0};
+ getSessionHashKey(pWin, &key);
tSimpleHashRemove(pHashMap, &key, sizeof(SSessionKey));
}
}
@@ -3642,7 +3647,9 @@ static int32_t doOneWindowAggImpl(SColumnInfoData* pTimeWindowData, SResultWindo
static bool doDeleteSessionWindow(SStreamAggSupporter* pAggSup, SSessionKey* pKey) {
streamStateSessionDel(pAggSup->pState, pKey);
- tSimpleHashRemove(pAggSup->pResultRows, pKey, sizeof(SSessionKey));
+ SSessionKey hashKey = {0};
+ getSessionHashKey(pKey, &hashKey);
+ tSimpleHashRemove(pAggSup->pResultRows, &hashKey, sizeof(SSessionKey));
return true;
}
@@ -3753,8 +3760,8 @@ static void doStreamSessionAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSData
}
}
if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) {
- SSessionKey key = winInfo.sessionWin;
- key.win.ekey = key.win.skey;
+ SSessionKey key = {0};
+ getSessionHashKey(&winInfo.sessionWin, &key);
tSimpleHashPut(pAggSup->pResultRows, &key, sizeof(SSessionKey), &winInfo, sizeof(SResultWindowInfo));
}
@@ -3853,23 +3860,28 @@ void doBuildDeleteDataBlock(SOperatorInfo* pOp, SSHashObj* pStDeleted, SSDataBlo
colDataAppendNULL(pCalEdCol, pBlock->info.rows);
SHashObj* pGroupIdTbNameMap = NULL;
- if (pOp->operatorType == QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION ||
+ if (pOp->operatorType == QUERY_NODE_PHYSICAL_PLAN_STREAM_SESSION ||
+ pOp->operatorType == QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION ||
pOp->operatorType == QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION) {
SStreamSessionAggOperatorInfo* pInfo = pOp->info;
pGroupIdTbNameMap = pInfo->pGroupIdTbNameMap;
} else if (pOp->operatorType == QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE) {
SStreamStateAggOperatorInfo* pInfo = pOp->info;
pGroupIdTbNameMap = pInfo->pGroupIdTbNameMap;
+ } else {
+ ASSERT(0);
}
char* tbname = taosHashGet(pGroupIdTbNameMap, &res->groupId, sizeof(int64_t));
SColumnInfoData* pTableCol = taosArrayGet(pBlock->pDataBlock, TABLE_NAME_COLUMN_INDEX);
if (tbname == NULL) {
+ /*printf("\n\n no tbname for group id %" PRId64 "%p %p\n\n", res->groupId, pOp->info, pGroupIdTbNameMap);*/
colDataAppendNULL(pTableCol, pBlock->info.rows);
} else {
char parTbName[VARSTR_HEADER_SIZE + TSDB_TABLE_NAME_LEN];
STR_WITH_MAXSIZE_TO_VARSTR(parTbName, tbname, sizeof(parTbName));
colDataAppend(pTableCol, pBlock->info.rows, (const char*)parTbName, false);
+ /*printf("\n\n get tbname %s group id %" PRId64 "\n\n", tbname, res->groupId);*/
}
pBlock->info.rows += 1;
}
@@ -3896,8 +3908,8 @@ static void rebuildSessionWindow(SOperatorInfo* pOperator, SArray* pWinArray, SS
SOperatorInfo* pChild = taosArrayGetP(pInfo->pChildren, j);
SStreamSessionAggOperatorInfo* pChInfo = pChild->info;
SStreamAggSupporter* pChAggSup = &pChInfo->streamAggSup;
- SSessionKey chWinKey = *pWinKey;
- chWinKey.win.ekey = chWinKey.win.skey;
+ SSessionKey chWinKey = {0};
+ getSessionHashKey(pWinKey, &chWinKey);
SStreamStateCur* pCur = streamStateSessionSeekKeyCurrentNext(pChAggSup->pState, &chWinKey);
SResultRow* pResult = NULL;
SResultRow* pChResult = NULL;
@@ -3978,8 +3990,8 @@ static void copyDeleteWindowInfo(SArray* pResWins, SSHashObj* pStDeleted) {
for (int32_t i = 0; i < size; i++) {
SSessionKey* pWinKey = taosArrayGet(pResWins, i);
if (!pWinKey) continue;
- SSessionKey winInfo = *pWinKey;
- winInfo.win.ekey = winInfo.win.skey;
+ SSessionKey winInfo = {0};
+ getSessionHashKey(pWinKey, &winInfo);
tSimpleHashPut(pStDeleted, &winInfo, sizeof(SSessionKey), NULL, 0);
}
}
@@ -4046,7 +4058,8 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) {
if (pBlock->info.parTbName[0]) {
taosHashPut(pInfo->pGroupIdTbNameMap, &pBlock->info.groupId, sizeof(int64_t), &pBlock->info.parTbName,
TSDB_TABLE_NAME_LEN);
- /*printf("\n\n put tbname %s\n\n", pBlock->info.parTbName);*/
+ /*printf("\n\n put tbname %s group id %" PRId64 "\n\n into %p %p", pBlock->info.parTbName, pBlock->info.groupId,*/
+ /*pInfo, pInfo->pGroupIdTbNameMap);*/
}
if (pBlock->info.parTbName[0]) {
@@ -4561,8 +4574,8 @@ static void doStreamStateAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl
}
if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) {
- SSessionKey key = curWin.winInfo.sessionWin;
- key.win.ekey = key.win.skey;
+ SSessionKey key = {0};
+ getSessionHashKey(&curWin.winInfo.sessionWin, &key);
tSimpleHashPut(pAggSup->pResultRows, &key, sizeof(SSessionKey), &curWin.winInfo, sizeof(SResultWindowInfo));
}
}
@@ -4645,6 +4658,12 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) {
initGroupResInfoFromArrayList(&pInfo->groupResInfo, pUpdated);
blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity);
+#if 0
+ char* pBuf = streamStateSessionDump(pInfo->streamAggSup.pState);
+ qDebug("===stream===final session%s", pBuf);
+ taosMemoryFree(pBuf);
+#endif
+
doBuildDeleteDataBlock(pOperator, pInfo->pSeDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
if (pInfo->pDelRes->info.rows > 0) {
printDataBlock(pInfo->pDelRes, "single state delete");
diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c
index 079e553b07..d02d30dc60 100644
--- a/source/libs/function/src/builtinsimpl.c
+++ b/source/libs/function/src/builtinsimpl.c
@@ -269,7 +269,7 @@ typedef struct SModeInfo {
STuplePos nullTuplePos;
bool nullTupleSaved;
- char pItems[];
+ char pItems[];
} SModeInfo;
typedef struct SDerivInfo {
@@ -911,7 +911,7 @@ int32_t avgFunction(SqlFunctionCtx* pCtx) {
case TSDB_DATA_TYPE_FLOAT: {
float* plist = (float*)pCol->pData;
-// float val = 0;
+ // float val = 0;
for (int32_t i = start; i < numOfRows + pInput->startRowIndex; ++i) {
if (pCol->hasNull && colDataIsNull_f(pCol->nullbitmap, i)) {
continue;
@@ -919,9 +919,9 @@ int32_t avgFunction(SqlFunctionCtx* pCtx) {
numOfElem += 1;
pAvgRes->count += 1;
- pAvgRes->sum.dsum += plist[i];
+ pAvgRes->sum.dsum += plist[i];
}
-// pAvgRes->sum.dsum = val;
+ // pAvgRes->sum.dsum = val;
break;
}
@@ -1187,7 +1187,11 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc) {
}
if (!pBuf->assign) {
- pBuf->v = *(int64_t*)tval;
+ if (type == TSDB_DATA_TYPE_FLOAT) {
+ *(float*)&pBuf->v = GET_DOUBLE_VAL(tval);
+ } else {
+ pBuf->v = *(int64_t*)tval;
+ }
if (pCtx->subsidiaries.num > 0) {
index = findRowIndex(pInput->startRowIndex, pInput->numOfRows, pCol, tval);
if (index >= 0) {
@@ -3007,7 +3011,7 @@ int32_t firstFunction(SqlFunctionCtx* pCtx) {
}
}
#else
- int64_t* pts = (int64_t*) pInput->pPTS->pData;
+ int64_t* pts = (int64_t*)pInput->pPTS->pData;
for (int32_t i = pInput->startRowIndex; i < pInput->startRowIndex + pInput->numOfRows; ++i) {
if (pInputCol->hasNull && colDataIsNull(pInputCol, pInput->totalRows, i, pColAgg)) {
continue;
@@ -3111,61 +3115,61 @@ int32_t lastFunction(SqlFunctionCtx* pCtx) {
}
}
#else
- if (!pInputCol->hasNull) {
- numOfElems = 1;
+ if (!pInputCol->hasNull) {
+ numOfElems = 1;
- int32_t round = pInput->numOfRows >> 2;
- int32_t reminder = pInput->numOfRows & 0x03;
+ int32_t round = pInput->numOfRows >> 2;
+ int32_t reminder = pInput->numOfRows & 0x03;
- int32_t tick = 0;
- for (int32_t i = pInput->startRowIndex; tick < round; i += 4, tick += 1) {
- int64_t cts = pts[i];
- int32_t chosen = i;
+ int32_t tick = 0;
+ for (int32_t i = pInput->startRowIndex; tick < round; i += 4, tick += 1) {
+ int64_t cts = pts[i];
+ int32_t chosen = i;
- if (cts < pts[i + 1]) {
- cts = pts[i + 1];
- chosen = i + 1;
- }
-
- if (cts < pts[i + 2]) {
- cts = pts[i + 2];
- chosen = i + 2;
- }
-
- if (cts < pts[i + 3]) {
- cts = pts[i + 3];
- chosen = i + 3;
- }
-
- if (pResInfo->numOfRes == 0 || pInfo->ts < cts) {
- char* data = colDataGetData(pInputCol, chosen);
- doSaveCurrentVal(pCtx, i, cts, type, data);
- pResInfo->numOfRes = 1;
- }
+ if (cts < pts[i + 1]) {
+ cts = pts[i + 1];
+ chosen = i + 1;
}
- for (int32_t i = pInput->startRowIndex + round * 4; i < pInput->startRowIndex + pInput->numOfRows; ++i) {
- if (pResInfo->numOfRes == 0 || pInfo->ts < pts[i]) {
- char* data = colDataGetData(pInputCol, i);
- doSaveCurrentVal(pCtx, i, pts[i], type, data);
- pResInfo->numOfRes = 1;
- }
+ if (cts < pts[i + 2]) {
+ cts = pts[i + 2];
+ chosen = i + 2;
}
- } else {
- for (int32_t i = pInput->startRowIndex; i < pInput->startRowIndex + pInput->numOfRows; ++i) {
- if (pInputCol->hasNull && colDataIsNull(pInputCol, pInput->totalRows, i, pColAgg)) {
- continue;
- }
- numOfElems++;
+ if (cts < pts[i + 3]) {
+ cts = pts[i + 3];
+ chosen = i + 3;
+ }
- if (pResInfo->numOfRes == 0 || pInfo->ts < pts[i]) {
- char* data = colDataGetData(pInputCol, i);
- doSaveCurrentVal(pCtx, i, pts[i], type, data);
- pResInfo->numOfRes = 1;
- }
+ if (pResInfo->numOfRes == 0 || pInfo->ts < cts) {
+ char* data = colDataGetData(pInputCol, chosen);
+ doSaveCurrentVal(pCtx, i, cts, type, data);
+ pResInfo->numOfRes = 1;
}
}
+
+ for (int32_t i = pInput->startRowIndex + round * 4; i < pInput->startRowIndex + pInput->numOfRows; ++i) {
+ if (pResInfo->numOfRes == 0 || pInfo->ts < pts[i]) {
+ char* data = colDataGetData(pInputCol, i);
+ doSaveCurrentVal(pCtx, i, pts[i], type, data);
+ pResInfo->numOfRes = 1;
+ }
+ }
+ } else {
+ for (int32_t i = pInput->startRowIndex; i < pInput->startRowIndex + pInput->numOfRows; ++i) {
+ if (pInputCol->hasNull && colDataIsNull(pInputCol, pInput->totalRows, i, pColAgg)) {
+ continue;
+ }
+
+ numOfElems++;
+
+ if (pResInfo->numOfRes == 0 || pInfo->ts < pts[i]) {
+ char* data = colDataGetData(pInputCol, i);
+ doSaveCurrentVal(pCtx, i, pts[i], type, data);
+ pResInfo->numOfRes = 1;
+ }
+ }
+ }
#endif
#endif
@@ -3175,7 +3179,7 @@ int32_t lastFunction(SqlFunctionCtx* pCtx) {
firstlastSaveTupleData(pCtx->pSrcBlock, pInput->startRowIndex, pCtx, pInfo);
}
-// SET_VAL(pResInfo, numOfElems, 1);
+ // SET_VAL(pResInfo, numOfElems, 1);
return TSDB_CODE_SUCCESS;
}
@@ -5276,7 +5280,6 @@ int32_t sampleFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
return pInfo->numSampled;
}
-
bool getTailFuncEnv(SFunctionNode* pFunc, SFuncExecEnv* pEnv) {
#if 0
SColumnNode* pCol = (SColumnNode*)nodesListGetNode(pFunc->pParameterList, 0);
@@ -6073,11 +6076,19 @@ int32_t blockDistFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
int32_t row = 0;
char st[256] = {0};
- double totalRawSize = pData->totalRows * pData->rowSize;
+ double averageSize = 0;
+ if (pData->numOfBlocks != 0) {
+ averageSize = ((double)pData->totalSize) / pData->numOfBlocks;
+ }
+ uint64_t totalRawSize = pData->totalRows * pData->rowSize;
+ double compRatio = 0;
+ if (totalRawSize != 0) {
+ compRatio = pData->totalSize * 100 / (double)totalRawSize;
+ }
+
int32_t len = sprintf(st + VARSTR_HEADER_SIZE,
"Total_Blocks=[%d] Total_Size=[%.2f Kb] Average_size=[%.2f Kb] Compression_Ratio=[%.2f %c]",
- pData->numOfBlocks, pData->totalSize / 1024.0, ((double)pData->totalSize) / pData->numOfBlocks,
- pData->totalSize * 100 / totalRawSize, '%');
+ pData->numOfBlocks, pData->totalSize / 1024.0, averageSize, compRatio, '%');
varDataSetLen(st, len);
colDataAppend(pColInfo, row++, st, false);
diff --git a/source/libs/function/src/udfd.c b/source/libs/function/src/udfd.c
index 088aa62248..f5682b69bf 100644
--- a/source/libs/function/src/udfd.c
+++ b/source/libs/function/src/udfd.c
@@ -864,6 +864,7 @@ void udfdCtrlAllocBufCb(uv_handle_t *handle, size_t suggested_size, uv_buf_t *bu
void udfdCtrlReadCb(uv_stream_t *q, ssize_t nread, const uv_buf_t *buf) {
if (nread < 0) {
fnError("udfd ctrl pipe read error. %s", uv_err_name(nread));
+ taosMemoryFree(buf->base);
uv_close((uv_handle_t *)q, NULL);
uv_stop(global.loop);
return;
diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c
index 7897623ab1..0e5cb14208 100644
--- a/source/libs/parser/src/parTranslater.c
+++ b/source/libs/parser/src/parTranslater.c
@@ -1878,6 +1878,7 @@ static int32_t rewriteIsTrue(SNode* pSrc, SNode** pIsTrue) {
static EDealRes translateCaseWhen(STranslateContext* pCxt, SCaseWhenNode* pCaseWhen) {
bool first = true;
+ bool allNullThen = true;
SNode* pNode = NULL;
FOREACH(pNode, pCaseWhen->pWhenThenList) {
SWhenThenNode* pWhenThen = (SWhenThenNode*)pNode;
@@ -1889,12 +1890,28 @@ static EDealRes translateCaseWhen(STranslateContext* pCxt, SCaseWhenNode* pCaseW
}
pWhenThen->pWhen = pIsTrue;
}
- if (first || dataTypeComp(&pCaseWhen->node.resType, &((SExprNode*)pNode)->resType) < 0) {
- pCaseWhen->node.resType = ((SExprNode*)pNode)->resType;
+
+ SExprNode* pThenExpr = (SExprNode*)pNode;
+ if (TSDB_DATA_TYPE_NULL == pThenExpr->resType.type) {
+ continue;
+ }
+ allNullThen = false;
+ if (first || dataTypeComp(&pCaseWhen->node.resType, &pThenExpr->resType) < 0) {
+ pCaseWhen->node.resType = pThenExpr->resType;
}
first = false;
}
+ if (allNullThen) {
+ if (NULL != pCaseWhen->pElse) {
+ pCaseWhen->node.resType = ((SExprNode*)pCaseWhen->pElse)->resType;
+ } else {
+ pCaseWhen->node.resType.type = TSDB_DATA_TYPE_NULL;
+ pCaseWhen->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_NULL].bytes;
+ return DEAL_RES_CONTINUE;
+ }
+ }
+
FOREACH(pNode, pCaseWhen->pWhenThenList) {
SWhenThenNode* pWhenThen = (SWhenThenNode*)pNode;
if (!dataTypeEqual(&pCaseWhen->node.resType, &((SExprNode*)pNode)->resType)) {
diff --git a/source/libs/parser/src/parUtil.c b/source/libs/parser/src/parUtil.c
index 00a72a1946..e8c3f2fa8d 100644
--- a/source/libs/parser/src/parUtil.c
+++ b/source/libs/parser/src/parUtil.c
@@ -138,7 +138,7 @@ static char* getSyntaxErrFormat(int32_t errCode) {
case TSDB_CODE_PAR_CANNOT_DROP_PRIMARY_KEY:
return "Primary timestamp column cannot be dropped";
case TSDB_CODE_PAR_INVALID_MODIFY_COL:
- return "Only binary/nchar column length could be modified";
+ return "Only binary/nchar column length could be modified, and the length can only be increased, not decreased";
case TSDB_CODE_PAR_INVALID_TBNAME:
return "Invalid tbname pseudo column";
case TSDB_CODE_PAR_INVALID_FUNCTION_NAME:
diff --git a/source/libs/qworker/inc/qwInt.h b/source/libs/qworker/inc/qwInt.h
index 36c6817595..a9eca64675 100644
--- a/source/libs/qworker/inc/qwInt.h
+++ b/source/libs/qworker/inc/qwInt.h
@@ -246,7 +246,7 @@ typedef struct SQWorkerMgmt {
#define QW_ERR_RET(c) \
do { \
- int32_t _code = c; \
+ int32_t _code = (c); \
if (_code != TSDB_CODE_SUCCESS) { \
terrno = _code; \
return _code; \
@@ -254,7 +254,7 @@ typedef struct SQWorkerMgmt {
} while (0)
#define QW_RET(c) \
do { \
- int32_t _code = c; \
+ int32_t _code = (c); \
if (_code != TSDB_CODE_SUCCESS) { \
terrno = _code; \
} \
@@ -262,7 +262,7 @@ typedef struct SQWorkerMgmt {
} while (0)
#define QW_ERR_JRET(c) \
do { \
- code = c; \
+ code = (c); \
if (code != TSDB_CODE_SUCCESS) { \
terrno = code; \
goto _return; \
diff --git a/source/libs/qworker/src/qwDbg.c b/source/libs/qworker/src/qwDbg.c
index 1871316260..4c4a41df82 100644
--- a/source/libs/qworker/src/qwDbg.c
+++ b/source/libs/qworker/src/qwDbg.c
@@ -91,11 +91,53 @@ _return:
void qwDbgDumpSchInfo(SQWorker *mgmt, SQWSchStatus *sch, int32_t i) {
QW_LOCK(QW_READ, &sch->tasksLock);
- QW_DLOG("the %dth scheduler status, hbBrokenTs:%" PRId64 ",taskNum:%d", i, sch->hbBrokenTs,
- taosHashGetSize(sch->tasksHash));
+ int32_t taskNum = taosHashGetSize(sch->tasksHash);
+ QW_DLOG("***The %dth scheduler status, hbBrokenTs:%" PRId64 ",taskNum:%d", i, sch->hbBrokenTs, taskNum);
+
+ uint64_t qId, tId;
+ int32_t eId;
+ SQWTaskStatus *pTask = NULL;
+ void *pIter = taosHashIterate(sch->tasksHash, NULL);
+ while (pIter) {
+ pTask = (SQWTaskStatus *)pIter;
+ void *key = taosHashGetKey(pIter, NULL);
+ QW_GET_QTID(key, qId, tId, eId);
+
+ QW_TASK_DLOG("job refId:%" PRIx64 ", code:%x, task status:%d", pTask->refId, pTask->code, pTask->status);
+
+ pIter = taosHashIterate(sch->tasksHash, pIter);
+ }
+
QW_UNLOCK(QW_READ, &sch->tasksLock);
}
+void qwDbgDumpTasksInfo(SQWorker *mgmt) {
+ QW_DUMP("***Total remain ctx num %d", taosHashGetSize(mgmt->ctxHash));
+
+ int32_t i = 0;
+ SQWTaskCtx *ctx = NULL;
+ uint64_t qId, tId;
+ int32_t eId;
+ void *pIter = taosHashIterate(mgmt->ctxHash, NULL);
+ while (pIter) {
+ ctx = (SQWTaskCtx *)pIter;
+ void *key = taosHashGetKey(pIter, NULL);
+ QW_GET_QTID(key, qId, tId, eId);
+
+ QW_TASK_DLOG("%p lock:%x, phase:%d, type:%d, explain:%d, needFetch:%d, localExec:%d, msgType:%d, fetchType:%d, "
+ "execId:%x, level:%d, queryGotData:%d, queryRsped:%d, queryEnd:%d, queryContinue:%d, queryInQueue:%d, "
+ "rspCode:%x, affectedRows:%" PRId64 ", taskHandle:%p, sinkHandle:%p, tbFName:%s, sver:%d, tver:%d, events:%d,%d,%d,%d,%d",
+ ctx, ctx->lock, ctx->phase, ctx->taskType, ctx->explain, ctx->needFetch, ctx->localExec, ctx->msgType,
+ ctx->fetchType, ctx->execId, ctx->level, ctx->queryGotData, ctx->queryRsped, ctx->queryEnd, ctx->queryContinue,
+ ctx->queryInQueue, ctx->rspCode, ctx->affectedRows, ctx->taskHandle, ctx->sinkHandle, ctx->tbInfo.tbFName,
+ ctx->tbInfo.sversion, ctx->tbInfo.tversion, ctx->events[QW_EVENT_CANCEL], ctx->events[QW_EVENT_READY],
+ ctx->events[QW_EVENT_FETCH], ctx->events[QW_EVENT_DROP], ctx->events[QW_EVENT_CQUERY]);
+
+ pIter = taosHashIterate(mgmt->ctxHash, pIter);
+ }
+
+}
+
void qwDbgDumpMgmtInfo(SQWorker *mgmt) {
if (!gQWDebug.dumpEnable) {
return;
@@ -120,7 +162,7 @@ void qwDbgDumpMgmtInfo(SQWorker *mgmt) {
QW_UNLOCK(QW_READ, &mgmt->schLock);
- QW_DUMP("total remain ctx num %d", taosHashGetSize(mgmt->ctxHash));
+ qwDbgDumpTasksInfo(mgmt);
}
int32_t qwDbgBuildAndSendRedirectRsp(int32_t rspType, SRpcHandleInfo *pConn, int32_t code, SEpSet *pEpSet) {
diff --git a/source/libs/qworker/src/qwUtil.c b/source/libs/qworker/src/qwUtil.c
index e9ded9b269..e13791ae89 100644
--- a/source/libs/qworker/src/qwUtil.c
+++ b/source/libs/qworker/src/qwUtil.c
@@ -281,9 +281,11 @@ void qwFreeTaskHandle(qTaskInfo_t *taskHandle) {
int32_t qwKillTaskHandle(SQWTaskCtx *ctx) {
int32_t code = 0;
+
// Note: free/kill may in RC
qTaskInfo_t taskHandle = atomic_load_ptr(&ctx->taskHandle);
if (taskHandle && atomic_val_compare_exchange_ptr(&ctx->taskHandle, taskHandle, NULL)) {
+ qDebug("start to kill task");
code = qAsyncKillTask(taskHandle);
atomic_store_ptr(&ctx->taskHandle, taskHandle);
}
diff --git a/source/libs/qworker/src/qworker.c b/source/libs/qworker/src/qworker.c
index a7cd3db824..e45beb7e13 100644
--- a/source/libs/qworker/src/qworker.c
+++ b/source/libs/qworker/src/qworker.c
@@ -683,6 +683,8 @@ int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg) {
bool queryStop = false;
do {
+ ctx = NULL;
+
QW_ERR_JRET(qwHandlePrePhaseEvents(QW_FPARAMS(), QW_PHASE_PRE_CQUERY, &input, NULL));
QW_ERR_JRET(qwGetTaskCtx(QW_FPARAMS(), &ctx));
@@ -1162,6 +1164,41 @@ _return:
QW_RET(code);
}
+void qWorkerStopAllTasks(void *qWorkerMgmt) {
+ SQWorker *mgmt = (SQWorker *)qWorkerMgmt;
+
+ QW_DLOG("start to stop all tasks, taskNum:%d", taosHashGetSize(mgmt->ctxHash));
+
+ uint64_t qId, tId;
+ int32_t eId;
+ void *pIter = taosHashIterate(mgmt->ctxHash, NULL);
+ while (pIter) {
+ SQWTaskCtx *ctx = (SQWTaskCtx *)pIter;
+ void *key = taosHashGetKey(pIter, NULL);
+ QW_GET_QTID(key, qId, tId, eId);
+
+ QW_LOCK(QW_WRITE, &ctx->lock);
+
+ QW_TASK_DLOG_E("start to force stop task");
+
+ if (QW_EVENT_RECEIVED(ctx, QW_EVENT_DROP) || QW_EVENT_PROCESSED(ctx, QW_EVENT_DROP)) {
+ QW_TASK_WLOG_E("task already dropping");
+ QW_UNLOCK(QW_WRITE, &ctx->lock);
+
+ pIter = taosHashIterate(mgmt->ctxHash, pIter);
+ continue;
+ }
+
+ if (QW_QUERY_RUNNING(ctx)) {
+ qwKillTaskHandle(ctx);
+ }
+
+ QW_UNLOCK(QW_WRITE, &ctx->lock);
+
+ pIter = taosHashIterate(mgmt->ctxHash, pIter);
+ }
+}
+
void qWorkerDestroy(void **qWorkerMgmt) {
if (NULL == qWorkerMgmt || NULL == *qWorkerMgmt) {
return;
diff --git a/source/libs/stream/src/streamState.c b/source/libs/stream/src/streamState.c
index ccb0dd4a92..88c39c1157 100644
--- a/source/libs/stream/src/streamState.c
+++ b/source/libs/stream/src/streamState.c
@@ -521,9 +521,13 @@ int32_t streamStateSessionGet(SStreamState* pState, SSessionKey* key, void** pVa
void* tmp = NULL;
int32_t code = streamStateSessionGetKVByCur(pCur, &resKey, &tmp, pVLen);
if (code == 0) {
- *key = resKey;
- *pVal = tdbRealloc(NULL, *pVLen);
- memcpy(*pVal, tmp, *pVLen);
+ if (key->win.skey != resKey.win.skey) {
+ code = -1;
+ } else {
+ *key = resKey;
+ *pVal = tdbRealloc(NULL, *pVLen);
+ memcpy(*pVal, tmp, *pVLen);
+ }
}
streamStateFreeCur(pCur);
return code;
diff --git a/source/libs/sync/inc/syncAppendEntries.h b/source/libs/sync/inc/syncAppendEntries.h
index 0a67939d35..7791160afa 100644
--- a/source/libs/sync/inc/syncAppendEntries.h
+++ b/source/libs/sync/inc/syncAppendEntries.h
@@ -21,7 +21,6 @@ extern "C" {
#endif
#include "syncInt.h"
-#include "syncMessage.h"
// TLA+ Spec
// HandleAppendEntriesRequest(i, j, m) ==
@@ -89,7 +88,7 @@ extern "C" {
// /\ UNCHANGED <>
//
-int32_t syncNodeOnAppendEntries(SSyncNode* ths, SyncAppendEntries* pMsg);
+int32_t syncNodeOnAppendEntries(SSyncNode* ths, const SRpcMsg* pMsg);
#ifdef __cplusplus
}
diff --git a/source/libs/sync/inc/syncAppendEntriesReply.h b/source/libs/sync/inc/syncAppendEntriesReply.h
index d2dff92d43..199a895961 100644
--- a/source/libs/sync/inc/syncAppendEntriesReply.h
+++ b/source/libs/sync/inc/syncAppendEntriesReply.h
@@ -21,7 +21,6 @@ extern "C" {
#endif
#include "syncInt.h"
-#include "syncMessage.h"
// TLA+ Spec
// HandleAppendEntriesResponse(i, j, m) ==
@@ -36,7 +35,7 @@ extern "C" {
// /\ Discard(m)
// /\ UNCHANGED <>
//
-int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, SyncAppendEntriesReply* pMsg);
+int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, const SRpcMsg* pMsg);
#ifdef __cplusplus
}
diff --git a/source/libs/sync/inc/syncElection.h b/source/libs/sync/inc/syncElection.h
index 662c17094e..53337e1a8a 100644
--- a/source/libs/sync/inc/syncElection.h
+++ b/source/libs/sync/inc/syncElection.h
@@ -34,9 +34,7 @@ extern "C" {
// mdest |-> j])
// /\ UNCHANGED <>
-int32_t syncNodeElect(SSyncNode* pSyncNode);
-int32_t syncNodeRequestVotePeers(SSyncNode* pSyncNode);
-int32_t syncNodeSendRequestVote(SSyncNode* pSyncNode, const SRaftId* destRaftId, const SyncRequestVote* pMsg);
+int32_t syncNodeElect(SSyncNode* pNode);
#ifdef __cplusplus
}
diff --git a/source/libs/sync/inc/syncEnv.h b/source/libs/sync/inc/syncEnv.h
index cf4e3309f1..628e8874b4 100644
--- a/source/libs/sync/inc/syncEnv.h
+++ b/source/libs/sync/inc/syncEnv.h
@@ -30,8 +30,6 @@ extern "C" {
#define ELECT_TIMER_MS_RANGE (ELECT_TIMER_MS_MAX - ELECT_TIMER_MS_MIN)
#define HEARTBEAT_TIMER_MS 1000
-#define EMPTY_RAFT_ID ((SRaftId){.addr = 0, .vgId = 0})
-
typedef struct SSyncEnv {
uint8_t isStart;
diff --git a/source/libs/sync/inc/syncIndexMgr.h b/source/libs/sync/inc/syncIndexMgr.h
index bd88f5cdce..79b4fa0fbf 100644
--- a/source/libs/sync/inc/syncIndexMgr.h
+++ b/source/libs/sync/inc/syncIndexMgr.h
@@ -41,22 +41,13 @@ void syncIndexMgrDestroy(SSyncIndexMgr *pSyncIndexMgr);
void syncIndexMgrClear(SSyncIndexMgr *pSyncIndexMgr);
void syncIndexMgrSetIndex(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, SyncIndex index);
SyncIndex syncIndexMgrGetIndex(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId);
-cJSON * syncIndexMgr2Json(SSyncIndexMgr *pSyncIndexMgr);
-char * syncIndexMgr2Str(SSyncIndexMgr *pSyncIndexMgr);
-void syncIndexMgrSetStartTime(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, int64_t startTime);
-int64_t syncIndexMgrGetStartTime(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId);
-void syncIndexMgrSetRecvTime(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, int64_t recvTime);
-int64_t syncIndexMgrGetRecvTime(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId);
-
-// void syncIndexMgrSetTerm(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, SyncTerm term);
-// SyncTerm syncIndexMgrGetTerm(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId);
-
-// for debug -------------------
-void syncIndexMgrPrint(SSyncIndexMgr *pObj);
-void syncIndexMgrPrint2(char *s, SSyncIndexMgr *pObj);
-void syncIndexMgrLog(SSyncIndexMgr *pObj);
-void syncIndexMgrLog2(char *s, SSyncIndexMgr *pObj);
+void syncIndexMgrSetStartTime(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, int64_t startTime);
+int64_t syncIndexMgrGetStartTime(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId);
+void syncIndexMgrSetRecvTime(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, int64_t recvTime);
+int64_t syncIndexMgrGetRecvTime(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId);
+void syncIndexMgrSetTerm(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, SyncTerm term);
+SyncTerm syncIndexMgrGetTerm(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId);
#ifdef __cplusplus
}
diff --git a/source/libs/sync/inc/syncInt.h b/source/libs/sync/inc/syncInt.h
index 706c494048..e81f63d871 100644
--- a/source/libs/sync/inc/syncInt.h
+++ b/source/libs/sync/inc/syncInt.h
@@ -21,55 +21,12 @@ extern "C" {
#endif
#include "sync.h"
-#include "syncTools.h"
#include "taosdef.h"
-#include "tlog.h"
#include "trpc.h"
#include "ttimer.h"
-// clang-format off
-
-#define sFatal(...) if (sDebugFlag & DEBUG_FATAL) { taosPrintLog("SYN FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }
-#define sError(...) if (sDebugFlag & DEBUG_ERROR) { taosPrintLog("SYN ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }
-#define sWarn(...) if (sDebugFlag & DEBUG_WARN) { taosPrintLog("SYN WARN ", DEBUG_WARN, 255, __VA_ARGS__); }
-#define sInfo(...) if (sDebugFlag & DEBUG_INFO) { taosPrintLog("SYN ", DEBUG_INFO, 255, __VA_ARGS__); }
-#define sDebug(...) if (sDebugFlag & DEBUG_DEBUG) { taosPrintLog("SYN ", DEBUG_DEBUG, sDebugFlag, __VA_ARGS__); }
-#define sTrace(...) if (sDebugFlag & DEBUG_TRACE) { taosPrintLog("SYN ", DEBUG_TRACE, sDebugFlag, __VA_ARGS__); }
-
-#define sLFatal(...) if (sDebugFlag & DEBUG_FATAL) { taosPrintLongString("SYN FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }
-#define sLError(...) if (sDebugFlag & DEBUG_ERROR) { taosPrintLongString("SYN ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }
-#define sLWarn(...) if (sDebugFlag & DEBUG_WARN) { taosPrintLongString("SYN WARN ", DEBUG_WARN, 255, __VA_ARGS__); }
-#define sLInfo(...) if (sDebugFlag & DEBUG_INFO) { taosPrintLongString("SYN ", DEBUG_INFO, 255, __VA_ARGS__); }
-#define sLDebug(...) if (sDebugFlag & DEBUG_DEBUG) { taosPrintLongString("SYN ", DEBUG_DEBUG, sDebugFlag, __VA_ARGS__); }
-#define sLTrace(...) if (sDebugFlag & DEBUG_TRACE) { taosPrintLongString("SYN ", DEBUG_TRACE, sDebugFlag, __VA_ARGS__); }
-
-#define sNFatal(pNode, ...) if (sDebugFlag & DEBUG_FATAL) { syncPrintNodeLog("SYN FATAL ", DEBUG_FATAL, 255, pNode, __VA_ARGS__); }
-#define sNError(pNode, ...) if (sDebugFlag & DEBUG_ERROR) { syncPrintNodeLog("SYN ERROR ", DEBUG_ERROR, 255, pNode, __VA_ARGS__); }
-#define sNWarn(pNode, ...) if (sDebugFlag & DEBUG_WARN) { syncPrintNodeLog("SYN WARN ", DEBUG_WARN, 255, pNode, __VA_ARGS__); }
-#define sNInfo(pNode, ...) if (sDebugFlag & DEBUG_INFO) { syncPrintNodeLog("SYN ", DEBUG_INFO, 255, pNode, __VA_ARGS__); }
-#define sNDebug(pNode, ...) if (sDebugFlag & DEBUG_DEBUG) { syncPrintNodeLog("SYN ", DEBUG_DEBUG, sDebugFlag, pNode, __VA_ARGS__); }
-#define sNTrace(pNode, ...) if (sDebugFlag & DEBUG_TRACE) { syncPrintNodeLog("SYN ", DEBUG_TRACE, sDebugFlag, pNode, __VA_ARGS__); }
-
-#define sSFatal(pSender, ...) if (sDebugFlag & DEBUG_FATAL) { syncPrintSnapshotSenderLog("SYN FATAL ", DEBUG_FATAL, 255, pSender, __VA_ARGS__); }
-#define sSError(pSender, ...) if (sDebugFlag & DEBUG_ERROR) { syncPrintSnapshotSenderLog("SYN ERROR ", DEBUG_ERROR, 255, pSender, __VA_ARGS__); }
-#define sSWarn(pSender, ...) if (sDebugFlag & DEBUG_WARN) { syncPrintSnapshotSenderLog("SYN WARN ", DEBUG_WARN, 255, pSender, __VA_ARGS__); }
-#define sSInfo(pSender, ...) if (sDebugFlag & DEBUG_INFO) { syncPrintSnapshotSenderLog("SYN ", DEBUG_INFO, 255, pSender, __VA_ARGS__); }
-#define sSDebug(pSender, ...) if (sDebugFlag & DEBUG_DEBUG) { syncPrintSnapshotSenderLog("SYN ", DEBUG_DEBUG, sDebugFlag, pSender, __VA_ARGS__); }
-#define sSTrace(pSender, ...) if (sDebugFlag & DEBUG_TRACE) { syncPrintSnapshotSenderLog("SYN ", DEBUG_TRACE, sDebugFlag, pSender, __VA_ARGS__); }
-
-#define sRFatal(pReceiver, ...) if (sDebugFlag & DEBUG_FATAL) { syncPrintSnapshotReceiverLog("SYN FATAL ", DEBUG_FATAL, 255, pReceiver, __VA_ARGS__); }
-#define sRError(pReceiver, ...) if (sDebugFlag & DEBUG_ERROR) { syncPrintSnapshotReceiverLog("SYN ERROR ", DEBUG_ERROR, 255, pReceiver, __VA_ARGS__); }
-#define sRWarn(pReceiver, ...) if (sDebugFlag & DEBUG_WARN) { syncPrintSnapshotReceiverLog("SYN WARN ", DEBUG_WARN, 255, pReceiver, __VA_ARGS__); }
-#define sRInfo(pReceiver, ...) if (sDebugFlag & DEBUG_INFO) { syncPrintSnapshotReceiverLog("SYN ", DEBUG_INFO, 255, pReceiver, __VA_ARGS__); }
-#define sRDebug(pReceiver, ...) if (sDebugFlag & DEBUG_DEBUG) { syncPrintSnapshotReceiverLog("SYN ", DEBUG_DEBUG, sDebugFlag, pReceiver, __VA_ARGS__); }
-#define sRTrace(pReceiver, ...) if (sDebugFlag & DEBUG_TRACE) { syncPrintSnapshotReceiverLog("SYN ", DEBUG_TRACE, sDebugFlag, pReceiver, __VA_ARGS__); }
-
-// clang-format on
-
typedef struct SyncTimeout SyncTimeout;
typedef struct SyncClientRequest SyncClientRequest;
-typedef struct SyncPing SyncPing;
-typedef struct SyncPingReply SyncPingReply;
typedef struct SyncRequestVote SyncRequestVote;
typedef struct SyncRequestVoteReply SyncRequestVoteReply;
typedef struct SyncAppendEntries SyncAppendEntries;
@@ -85,8 +42,19 @@ typedef struct SSyncSnapshotSender SSyncSnapshotSender;
typedef struct SSyncSnapshotReceiver SSyncSnapshotReceiver;
typedef struct SSyncTimer SSyncTimer;
typedef struct SSyncHbTimerData SSyncHbTimerData;
+typedef struct SyncSnapshotSend SyncSnapshotSend;
+typedef struct SyncSnapshotRsp SyncSnapshotRsp;
+typedef struct SyncLocalCmd SyncLocalCmd;
+typedef struct SyncAppendEntriesBatch SyncAppendEntriesBatch;
+typedef struct SyncPreSnapshotReply SyncPreSnapshotReply;
+typedef struct SyncHeartbeatReply SyncHeartbeatReply;
+typedef struct SyncHeartbeat SyncHeartbeat;
+typedef struct SyncPreSnapshot SyncPreSnapshot;
-extern bool gRaftDetailLog;
+typedef struct SRaftId {
+ SyncNodeId addr;
+ SyncGroupId vgId;
+} SRaftId;
typedef struct SSyncHbTimerData {
SSyncNode* pSyncNode;
@@ -197,18 +165,6 @@ typedef struct SSyncNode {
// peer heartbeat timer
SSyncTimer peerHeartbeatTimerArr[TSDB_MAX_REPLICA];
- // callback
- FpOnPingCb FpOnPing;
- FpOnPingReplyCb FpOnPingReply;
- FpOnClientRequestCb FpOnClientRequest;
- FpOnTimeoutCb FpOnTimeout;
- FpOnRequestVoteCb FpOnRequestVote;
- FpOnRequestVoteReplyCb FpOnRequestVoteReply;
- FpOnAppendEntriesCb FpOnAppendEntries;
- FpOnAppendEntriesReplyCb FpOnAppendEntriesReply;
- FpOnSnapshotCb FpOnSnapshot;
- FpOnSnapshotReplyCb FpOnSnapshotReply;
-
// tools
SSyncRespMgr* pSyncRespMgr;
@@ -241,26 +197,26 @@ void syncNodeClose(SSyncNode* pSyncNode);
void syncNodePreClose(SSyncNode* pSyncNode);
int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak);
-// option
-bool syncNodeSnapshotEnable(SSyncNode* pSyncNode);
-ESyncStrategy syncNodeStrategy(SSyncNode* pSyncNode);
-SyncIndex syncNodeGetSnapshotConfigIndex(SSyncNode* pSyncNode, SyncIndex snapshotLastApplyIndex);
-
-// ping --------------
-int32_t syncNodePing(SSyncNode* pSyncNode, const SRaftId* destRaftId, SyncPing* pMsg);
-int32_t syncNodePingSelf(SSyncNode* pSyncNode);
-int32_t syncNodePingPeers(SSyncNode* pSyncNode);
-int32_t syncNodePingAll(SSyncNode* pSyncNode);
+// on message ---------------------
+int32_t syncNodeOnTimeout(SSyncNode* ths, const SRpcMsg* pMsg);
+int32_t syncNodeOnClientRequest(SSyncNode* ths, SRpcMsg* pMsg, SyncIndex* pRetIndex);
+int32_t syncNodeOnRequestVote(SSyncNode* pNode, const SRpcMsg* pMsg);
+int32_t syncNodeOnRequestVoteReply(SSyncNode* pNode, const SRpcMsg* pMsg);
+int32_t syncNodeOnAppendEntries(SSyncNode* pNode, const SRpcMsg* pMsg);
+int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, const SRpcMsg* pMsg);
+int32_t syncNodeOnSnapshot(SSyncNode* ths, const SRpcMsg* pMsg);
+int32_t syncNodeOnSnapshotReply(SSyncNode* ths, const SRpcMsg* pMsg);
+int32_t syncNodeOnHeartbeat(SSyncNode* ths, const SRpcMsg* pMsg);
+int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, const SRpcMsg* pMsg);
+int32_t syncNodeOnLocalCmd(SSyncNode* ths, const SRpcMsg* pMsg);
// timer control --------------
int32_t syncNodeStartPingTimer(SSyncNode* pSyncNode);
int32_t syncNodeStopPingTimer(SSyncNode* pSyncNode);
-
int32_t syncNodeStartElectTimer(SSyncNode* pSyncNode, int32_t ms);
int32_t syncNodeStopElectTimer(SSyncNode* pSyncNode);
int32_t syncNodeRestartElectTimer(SSyncNode* pSyncNode, int32_t ms);
int32_t syncNodeResetElectTimer(SSyncNode* pSyncNode);
-
int32_t syncNodeStartHeartbeatTimer(SSyncNode* pSyncNode);
int32_t syncNodeStopHeartbeatTimer(SSyncNode* pSyncNode);
int32_t syncNodeRestartHeartbeatTimer(SSyncNode* pSyncNode);
@@ -268,9 +224,6 @@ int32_t syncNodeRestartHeartbeatTimer(SSyncNode* pSyncNode);
// utils --------------
int32_t syncNodeSendMsgById(const SRaftId* destRaftId, SSyncNode* pSyncNode, SRpcMsg* pMsg);
int32_t syncNodeSendMsgByInfo(const SNodeInfo* nodeInfo, SSyncNode* pSyncNode, SRpcMsg* pMsg);
-char* syncNode2SimpleStr(const SSyncNode* pSyncNode);
-bool syncNodeInConfig(SSyncNode* pSyncNode, const SSyncCfg* config);
-void syncNodeDoConfigChange(SSyncNode* pSyncNode, SSyncCfg* newConfig, SyncIndex lastConfigChangeIndex);
SyncIndex syncMinMatchIndex(SSyncNode* pSyncNode);
// raft state change --------------
@@ -279,7 +232,6 @@ void syncNodeUpdateTermWithoutStepDown(SSyncNode* pSyncNode, SyncTerm term);
void syncNodeStepDown(SSyncNode* pSyncNode, SyncTerm newTerm);
void syncNodeBecomeFollower(SSyncNode* pSyncNode, const char* debugStr);
void syncNodeBecomeLeader(SSyncNode* pSyncNode, const char* debugStr);
-
void syncNodeCandidate2Leader(SSyncNode* pSyncNode);
void syncNodeFollower2Candidate(SSyncNode* pSyncNode);
void syncNodeLeader2Follower(SSyncNode* pSyncNode);
@@ -302,13 +254,10 @@ SyncIndex syncNodeGetPreIndex(SSyncNode* pSyncNode, SyncIndex index);
SyncTerm syncNodeGetPreTerm(SSyncNode* pSyncNode, SyncIndex index);
int32_t syncNodeGetPreIndexTerm(SSyncNode* pSyncNode, SyncIndex index, SyncIndex* pPreIndex, SyncTerm* pPreTerm);
-bool syncNodeIsOptimizedOneReplica(SSyncNode* ths, SRpcMsg* pMsg);
int32_t syncNodeDoCommit(SSyncNode* ths, SyncIndex beginIndex, SyncIndex endIndex, uint64_t flag);
int32_t syncNodeFollowerCommit(SSyncNode* ths, SyncIndex newCommitIndex);
int32_t syncNodePreCommit(SSyncNode* ths, SSyncRaftEntry* pEntry, int32_t code);
-int32_t syncNodeUpdateNewConfigIndex(SSyncNode* ths, SSyncCfg* pNewCfg);
-
bool syncNodeInRaftGroup(SSyncNode* ths, SRaftId* pRaftId);
SSyncSnapshotSender* syncNodeGetSnapshotSender(SSyncNode* ths, SRaftId* pDestId);
SSyncTimer* syncNodeGetHbTimer(SSyncNode* ths, SRaftId* pDestId);
@@ -318,61 +267,10 @@ bool syncNodeNeedSendAppendEntries(SSyncNode* ths, const SRaftId* pDestId, const
int32_t syncGetSnapshotMeta(int64_t rid, struct SSnapshotMeta* sMeta);
int32_t syncGetSnapshotMetaByIndex(int64_t rid, SyncIndex snapshotIndex, struct SSnapshotMeta* sMeta);
-bool syncNodeCanChange(SSyncNode* pSyncNode);
-
-int32_t syncNodeLeaderTransfer(SSyncNode* pSyncNode);
-int32_t syncNodeLeaderTransferTo(SSyncNode* pSyncNode, SNodeInfo newLeader);
-int32_t syncDoLeaderTransfer(SSyncNode* ths, SRpcMsg* pRpcMsg, SSyncRaftEntry* pEntry);
-
int32_t syncNodeDynamicQuorum(const SSyncNode* pSyncNode);
-
bool syncNodeIsMnode(SSyncNode* pSyncNode);
int32_t syncNodePeerStateInit(SSyncNode* pSyncNode);
-// trace log
-void syncLogRecvTimer(SSyncNode* pSyncNode, const SyncTimeout* pMsg, const char* s);
-void syncLogRecvLocalCmd(SSyncNode* pSyncNode, const SyncLocalCmd* pMsg, const char* s);
-
-void syncLogSendRequestVote(SSyncNode* pSyncNode, const SyncRequestVote* pMsg, const char* s);
-void syncLogRecvRequestVote(SSyncNode* pSyncNode, const SyncRequestVote* pMsg, const char* s);
-
-void syncLogSendRequestVoteReply(SSyncNode* pSyncNode, const SyncRequestVoteReply* pMsg, const char* s);
-void syncLogRecvRequestVoteReply(SSyncNode* pSyncNode, const SyncRequestVoteReply* pMsg, const char* s);
-
-void syncLogSendAppendEntries(SSyncNode* pSyncNode, const SyncAppendEntries* pMsg, const char* s);
-void syncLogRecvAppendEntries(SSyncNode* pSyncNode, const SyncAppendEntries* pMsg, const char* s);
-
-void syncLogSendAppendEntriesBatch(SSyncNode* pSyncNode, const SyncAppendEntriesBatch* pMsg, const char* s);
-void syncLogRecvAppendEntriesBatch(SSyncNode* pSyncNode, const SyncAppendEntriesBatch* pMsg, const char* s);
-
-void syncLogSendAppendEntriesReply(SSyncNode* pSyncNode, const SyncAppendEntriesReply* pMsg, const char* s);
-void syncLogRecvAppendEntriesReply(SSyncNode* pSyncNode, const SyncAppendEntriesReply* pMsg, const char* s);
-
-void syncLogSendHeartbeat(SSyncNode* pSyncNode, const SyncHeartbeat* pMsg, const char* s);
-void syncLogRecvHeartbeat(SSyncNode* pSyncNode, const SyncHeartbeat* pMsg, const char* s);
-
-void syncLogSendHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s);
-void syncLogRecvHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s);
-
-void syncLogSendSyncPreSnapshot(SSyncNode* pSyncNode, const SyncPreSnapshot* pMsg, const char* s);
-void syncLogRecvSyncPreSnapshot(SSyncNode* pSyncNode, const SyncPreSnapshot* pMsg, const char* s);
-
-void syncLogSendSyncPreSnapshotReply(SSyncNode* pSyncNode, const SyncPreSnapshotReply* pMsg, const char* s);
-void syncLogRecvSyncPreSnapshotReply(SSyncNode* pSyncNode, const SyncPreSnapshotReply* pMsg, const char* s);
-
-void syncLogSendSyncSnapshotSend(SSyncNode* pSyncNode, const SyncSnapshotSend* pMsg, const char* s);
-void syncLogRecvSyncSnapshotSend(SSyncNode* pSyncNode, const SyncSnapshotSend* pMsg, const char* s);
-
-void syncLogSendSyncSnapshotRsp(SSyncNode* pSyncNode, const SyncSnapshotRsp* pMsg, const char* s);
-void syncLogRecvSyncSnapshotRsp(SSyncNode* pSyncNode, const SyncSnapshotRsp* pMsg, const char* s);
-
-// syncUtil.h
-void syncPrintNodeLog(const char* flags, ELogLevel level, int32_t dflag, SSyncNode* pNode, const char* format, ...);
-void syncPrintSnapshotSenderLog(const char* flags, ELogLevel level, int32_t dflag, SSyncSnapshotSender* pSender,
- const char* format, ...);
-void syncPrintSnapshotReceiverLog(const char* flags, ELogLevel level, int32_t dflag, SSyncSnapshotReceiver* pReceiver,
- const char* format, ...);
-
#ifdef __cplusplus
}
#endif
diff --git a/source/libs/sync/inc/syncMessage.h b/source/libs/sync/inc/syncMessage.h
index 936081c7b2..92e7b555a4 100644
--- a/source/libs/sync/inc/syncMessage.h
+++ b/source/libs/sync/inc/syncMessage.h
@@ -22,17 +22,239 @@ extern "C" {
#include "syncInt.h"
-// ---------------------------------------------
-cJSON* syncRpcMsg2Json(SRpcMsg* pRpcMsg);
-cJSON* syncRpcUnknownMsg2Json();
-char* syncRpcMsg2Str(SRpcMsg* pRpcMsg);
+typedef enum ESyncTimeoutType {
+ SYNC_TIMEOUT_PING = 100,
+ SYNC_TIMEOUT_ELECTION,
+ SYNC_TIMEOUT_HEARTBEAT,
+} ESyncTimeoutType;
-// for debug ----------------------
-void syncRpcMsgPrint(SRpcMsg* pMsg);
-void syncRpcMsgPrint2(char* s, SRpcMsg* pMsg);
-void syncRpcMsgLog(SRpcMsg* pMsg);
-void syncRpcMsgLog2(char* s, SRpcMsg* pMsg);
-// ---------------------------------------------
+typedef struct SyncTimeout {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ ESyncTimeoutType timeoutType;
+ uint64_t logicClock;
+ int32_t timerMS;
+ void* data; // need optimized
+} SyncTimeout;
+
+typedef struct SyncClientRequest {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType; // TDMT_SYNC_CLIENT_REQUEST
+ uint32_t originalRpcType; // origin RpcMsg msgType
+ uint64_t seqNum;
+ bool isWeak;
+ uint32_t dataLen; // origin RpcMsg.contLen
+ char data[]; // origin RpcMsg.pCont
+} SyncClientRequest;
+
+typedef struct SyncClientRequestReply {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ int32_t errCode;
+ SRaftId leaderHint;
+} SyncClientRequestReply;
+
+typedef struct SyncRequestVote {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+ // private data
+ SyncTerm term;
+ SyncIndex lastLogIndex;
+ SyncTerm lastLogTerm;
+} SyncRequestVote;
+
+typedef struct SyncRequestVoteReply {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+ // private data
+ SyncTerm term;
+ bool voteGranted;
+} SyncRequestVoteReply;
+
+typedef struct SyncAppendEntries {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+
+ // private data
+ SyncTerm term;
+ SyncIndex prevLogIndex;
+ SyncTerm prevLogTerm;
+ SyncIndex commitIndex;
+ SyncTerm privateTerm;
+ uint32_t dataLen;
+ char data[];
+} SyncAppendEntries;
+
+typedef struct SyncAppendEntriesReply {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+ // private data
+ SyncTerm term;
+ SyncTerm privateTerm;
+ bool success;
+ SyncIndex matchIndex;
+ SyncIndex lastSendIndex;
+ int64_t startTime;
+} SyncAppendEntriesReply;
+
+typedef struct SyncHeartbeat {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+
+ // private data
+ SyncTerm term;
+ SyncIndex commitIndex;
+ SyncTerm privateTerm;
+ SyncTerm minMatchIndex;
+} SyncHeartbeat;
+
+typedef struct SyncHeartbeatReply {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+
+ // private data
+ SyncTerm term;
+ SyncTerm privateTerm;
+ int64_t startTime;
+} SyncHeartbeatReply;
+
+typedef struct SyncPreSnapshot {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+
+ // private data
+ SyncTerm term;
+} SyncPreSnapshot;
+
+typedef struct SyncPreSnapshotReply {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+
+ // private data
+ SyncTerm term;
+ SyncIndex snapStart;
+} SyncPreSnapshotReply;
+
+typedef struct SyncApplyMsg {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType; // user SyncApplyMsg msgType
+ uint32_t originalRpcType; // user RpcMsg msgType
+ SFsmCbMeta fsmMeta;
+ uint32_t dataLen; // user RpcMsg.contLen
+ char data[]; // user RpcMsg.pCont
+} SyncApplyMsg;
+
+typedef struct SyncSnapshotSend {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+
+ SyncTerm term;
+ SyncIndex beginIndex; // snapshot.beginIndex
+ SyncIndex lastIndex; // snapshot.lastIndex
+ SyncTerm lastTerm; // snapshot.lastTerm
+ SyncIndex lastConfigIndex; // snapshot.lastConfigIndex
+ SSyncCfg lastConfig;
+ int64_t startTime;
+ int32_t seq;
+ uint32_t dataLen;
+ char data[];
+} SyncSnapshotSend;
+
+typedef struct SyncSnapshotRsp {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+
+ SyncTerm term;
+ SyncIndex lastIndex;
+ SyncTerm lastTerm;
+ int64_t startTime;
+ int32_t ack;
+ int32_t code;
+ SyncIndex snapBeginIndex; // when ack = SYNC_SNAPSHOT_SEQ_BEGIN, it's valid
+} SyncSnapshotRsp;
+
+typedef struct SyncLeaderTransfer {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ /*
+ SRaftId srcId;
+ SRaftId destId;
+ */
+ SNodeInfo newNodeInfo;
+ SRaftId newLeaderId;
+} SyncLeaderTransfer;
+
+typedef enum {
+ SYNC_LOCAL_CMD_STEP_DOWN = 100,
+ SYNC_LOCAL_CMD_FOLLOWER_CMT,
+} ESyncLocalCmd;
+
+typedef struct SyncLocalCmd {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+
+ int32_t cmd;
+ SyncTerm sdNewTerm; // step down new term
+ SyncIndex fcIndex; // follower commit index
+} SyncLocalCmd;
+
+int32_t syncBuildTimeout(SRpcMsg* pMsg, ESyncTimeoutType ttype, uint64_t logicClock, int32_t ms, SSyncNode* pNode);
+int32_t syncBuildClientRequest(SRpcMsg* pMsg, const SRpcMsg* pOriginal, uint64_t seq, bool isWeak, int32_t vgId);
+int32_t syncBuildClientRequestFromNoopEntry(SRpcMsg* pMsg, const SSyncRaftEntry* pEntry, int32_t vgId);
+int32_t syncBuildRequestVote(SRpcMsg* pMsg, int32_t vgId);
+int32_t syncBuildRequestVoteReply(SRpcMsg* pMsg, int32_t vgId);
+int32_t syncBuildAppendEntries(SRpcMsg* pMsg, int32_t dataLen, int32_t vgId);
+int32_t syncBuildAppendEntriesReply(SRpcMsg* pMsg, int32_t vgId);
+int32_t syncBuildHeartbeat(SRpcMsg* pMsg, int32_t vgId);
+int32_t syncBuildHeartbeatReply(SRpcMsg* pMsg, int32_t vgId);
+int32_t syncBuildPreSnapshot(SRpcMsg* pMsg, int32_t vgId);
+int32_t syncBuildPreSnapshotReply(SRpcMsg* pMsg, int32_t vgId);
+int32_t syncBuildApplyMsg(SRpcMsg* pMsg, const SRpcMsg* pOriginal, int32_t vgId, SFsmCbMeta* pMeta);
+int32_t syncBuildSnapshotSend(SRpcMsg* pMsg, int32_t dataLen, int32_t vgId);
+int32_t syncBuildSnapshotSendRsp(SRpcMsg* pMsg, int32_t vgId);
+int32_t syncBuildLeaderTransfer(SRpcMsg* pMsg, int32_t vgId);
+int32_t syncBuildLocalCmd(SRpcMsg* pMsg, int32_t vgId);
+
+const char* syncTimerTypeStr(ESyncTimeoutType timerType);
+const char* syncLocalCmdGetStr(ESyncLocalCmd cmd);
#ifdef __cplusplus
}
diff --git a/source/libs/sync/inc/syncRaftCfg.h b/source/libs/sync/inc/syncRaftCfg.h
index 6b6ca21399..823983e732 100644
--- a/source/libs/sync/inc/syncRaftCfg.h
+++ b/source/libs/sync/inc/syncRaftCfg.h
@@ -22,11 +22,9 @@ extern "C" {
#include "syncInt.h"
-#define CONFIG_FILE_LEN 2048
-
+#define CONFIG_FILE_LEN 2048
#define MAX_CONFIG_INDEX_COUNT 256
-// SRaftCfgIndex ------------------------------------------
typedef struct SRaftCfgIndex {
TdFilePtr pFile;
char path[TSDB_FILENAME_LEN * 2];
@@ -44,11 +42,8 @@ cJSON *raftCfgIndex2Json(SRaftCfgIndex *pRaftCfgIndex);
char *raftCfgIndex2Str(SRaftCfgIndex *pRaftCfgIndex);
int32_t raftCfgIndexFromJson(const cJSON *pRoot, SRaftCfgIndex *pRaftCfgIndex);
int32_t raftCfgIndexFromStr(const char *s, SRaftCfgIndex *pRaftCfgIndex);
-
int32_t raftCfgIndexCreateFile(const char *path);
-// ---------------------------------------------------------
-
typedef struct SRaftCfg {
SSyncCfg cfg;
TdFilePtr pFile;
@@ -68,11 +63,9 @@ int32_t raftCfgClose(SRaftCfg *pRaftCfg);
int32_t raftCfgPersist(SRaftCfg *pRaftCfg);
int32_t raftCfgAddConfigIndex(SRaftCfg *pRaftCfg, SyncIndex configIndex);
-cJSON *syncCfg2Json(SSyncCfg *pSyncCfg);
-char *syncCfg2Str(SSyncCfg *pSyncCfg);
void syncCfg2SimpleStr(const SSyncCfg *pCfg, char *str, int32_t bufLen);
+cJSON *syncCfg2Json(SSyncCfg *pSyncCfg);
int32_t syncCfgFromJson(const cJSON *pRoot, SSyncCfg *pSyncCfg);
-int32_t syncCfgFromStr(const char *s, SSyncCfg *pSyncCfg);
cJSON *raftCfg2Json(SRaftCfg *pRaftCfg);
char *raftCfg2Str(SRaftCfg *pRaftCfg);
diff --git a/source/libs/sync/inc/syncRaftLog.h b/source/libs/sync/inc/syncRaftLog.h
index 17ea36c640..de8bd81b30 100644
--- a/source/libs/sync/inc/syncRaftLog.h
+++ b/source/libs/sync/inc/syncRaftLog.h
@@ -38,7 +38,6 @@ SSyncLogStore* logStoreCreate(SSyncNode* pSyncNode);
void logStoreDestory(SSyncLogStore* pLogStore);
SyncIndex logStoreFirstIndex(SSyncLogStore* pLogStore);
-
SyncIndex logStoreWalCommitVer(SSyncLogStore* pLogStore);
SyncIndex raftLogWriteIndex(struct SSyncLogStore* pLogStore);
diff --git a/source/libs/sync/inc/syncRaftStore.h b/source/libs/sync/inc/syncRaftStore.h
index 077e6a7658..bb6405f6b2 100644
--- a/source/libs/sync/inc/syncRaftStore.h
+++ b/source/libs/sync/inc/syncRaftStore.h
@@ -25,6 +25,8 @@ extern "C" {
#define RAFT_STORE_BLOCK_SIZE 512
#define RAFT_STORE_PATH_LEN (TSDB_FILENAME_LEN * 2)
+#define EMPTY_RAFT_ID ((SRaftId){.addr = 0, .vgId = 0})
+
typedef struct SRaftStore {
SyncTerm currentTerm;
SRaftId voteFor;
@@ -38,20 +40,11 @@ int32_t raftStorePersist(SRaftStore *pRaftStore);
int32_t raftStoreSerialize(SRaftStore *pRaftStore, char *buf, size_t len);
int32_t raftStoreDeserialize(SRaftStore *pRaftStore, char *buf, size_t len);
-bool raftStoreHasVoted(SRaftStore *pRaftStore);
-void raftStoreVote(SRaftStore *pRaftStore, SRaftId *pRaftId);
-void raftStoreClearVote(SRaftStore *pRaftStore);
-void raftStoreNextTerm(SRaftStore *pRaftStore);
-void raftStoreSetTerm(SRaftStore *pRaftStore, SyncTerm term);
-int32_t raftStoreFromJson(SRaftStore *pRaftStore, cJSON *pJson);
-cJSON *raftStore2Json(SRaftStore *pRaftStore);
-char *raftStore2Str(SRaftStore *pRaftStore);
-
-// for debug -------------------
-void raftStorePrint(SRaftStore *pObj);
-void raftStorePrint2(char *s, SRaftStore *pObj);
-void raftStoreLog(SRaftStore *pObj);
-void raftStoreLog2(char *s, SRaftStore *pObj);
+bool raftStoreHasVoted(SRaftStore *pRaftStore);
+void raftStoreVote(SRaftStore *pRaftStore, SRaftId *pRaftId);
+void raftStoreClearVote(SRaftStore *pRaftStore);
+void raftStoreNextTerm(SRaftStore *pRaftStore);
+void raftStoreSetTerm(SRaftStore *pRaftStore, SyncTerm term);
#ifdef __cplusplus
}
diff --git a/source/libs/sync/inc/syncReplication.h b/source/libs/sync/inc/syncReplication.h
index 08a92d1368..7da610a9ed 100644
--- a/source/libs/sync/inc/syncReplication.h
+++ b/source/libs/sync/inc/syncReplication.h
@@ -48,14 +48,11 @@ extern "C" {
// /\ UNCHANGED <>
int32_t syncNodeHeartbeatPeers(SSyncNode* pSyncNode);
-int32_t syncNodeSendHeartbeat(SSyncNode* pSyncNode, const SRaftId* pDestId, const SyncHeartbeat* pMsg);
+int32_t syncNodeSendHeartbeat(SSyncNode* pSyncNode, const SRaftId* pDestId, SRpcMsg* pMsg);
int32_t syncNodeReplicate(SSyncNode* pSyncNode);
int32_t syncNodeReplicateOne(SSyncNode* pSyncNode, SRaftId* pDestId, bool snapshot);
-int32_t syncNodeSendAppendEntries(SSyncNode* pSyncNode, const SRaftId* pDestId, const SyncAppendEntries* pMsg);
-int32_t syncNodeMaybeSendAppendEntries(SSyncNode* pSyncNode, const SRaftId* pDestId, const SyncAppendEntries* pMsg);
-
#ifdef __cplusplus
}
#endif
diff --git a/source/libs/sync/inc/syncRequestVote.h b/source/libs/sync/inc/syncRequestVote.h
index c51ea4eea6..7e7c5f7e16 100644
--- a/source/libs/sync/inc/syncRequestVote.h
+++ b/source/libs/sync/inc/syncRequestVote.h
@@ -21,7 +21,6 @@ extern "C" {
#endif
#include "syncInt.h"
-#include "syncMessage.h"
// TLA+ Spec
// HandleRequestVoteRequest(i, j, m) ==
@@ -45,7 +44,7 @@ extern "C" {
// m)
// /\ UNCHANGED <>
//
-int32_t syncNodeOnRequestVote(SSyncNode* ths, SyncRequestVote* pMsg);
+int32_t syncNodeOnRequestVote(SSyncNode* pNode, const SRpcMsg* pMsg);
#ifdef __cplusplus
}
diff --git a/source/libs/sync/inc/syncRequestVoteReply.h b/source/libs/sync/inc/syncRequestVoteReply.h
index 1adab30aaa..5d46365280 100644
--- a/source/libs/sync/inc/syncRequestVoteReply.h
+++ b/source/libs/sync/inc/syncRequestVoteReply.h
@@ -21,7 +21,6 @@ extern "C" {
#endif
#include "syncInt.h"
-#include "syncMessage.h"
// TLA+ Spec
// HandleRequestVoteResponse(i, j, m) ==
@@ -40,7 +39,7 @@ extern "C" {
// /\ Discard(m)
// /\ UNCHANGED <>
//
-int32_t syncNodeOnRequestVoteReply(SSyncNode* ths, SyncRequestVoteReply* pMsg);
+int32_t syncNodeOnRequestVoteReply(SSyncNode* ths, const SRpcMsg* pMsg);
#ifdef __cplusplus
}
diff --git a/source/libs/sync/inc/syncSnapshot.h b/source/libs/sync/inc/syncSnapshot.h
index 93b2531235..7b8e768391 100644
--- a/source/libs/sync/inc/syncSnapshot.h
+++ b/source/libs/sync/inc/syncSnapshot.h
@@ -84,8 +84,8 @@ bool snapshotReceiverIsStart(SSyncSnapshotReceiver *pReceiver)
void snapshotReceiverForceStop(SSyncSnapshotReceiver *pReceiver);
// on message
-int32_t syncNodeOnSnapshot(SSyncNode *ths, SyncSnapshotSend *pMsg);
-int32_t syncNodeOnSnapshotReply(SSyncNode *ths, SyncSnapshotRsp *pMsg);
+int32_t syncNodeOnSnapshot(SSyncNode *ths, const SRpcMsg *pMsg);
+int32_t syncNodeOnSnapshotReply(SSyncNode *ths, const SRpcMsg *pMsg);
// start
diff --git a/source/libs/sync/inc/syncTimeout.h b/source/libs/sync/inc/syncTimeout.h
index 3139707d54..66f6e6ee18 100644
--- a/source/libs/sync/inc/syncTimeout.h
+++ b/source/libs/sync/inc/syncTimeout.h
@@ -34,7 +34,7 @@ extern "C" {
// /\ voterLog' = [voterLog EXCEPT ![i] = [j \in {} |-> <<>>]]
// /\ UNCHANGED <>
//
-int32_t syncNodeOnTimer(SSyncNode* ths, SyncTimeout* pMsg);
+int32_t syncNodeOnTimeout(SSyncNode* ths, const SRpcMsg* pMsg);
#ifdef __cplusplus
}
diff --git a/source/libs/sync/inc/syncTools.h b/source/libs/sync/inc/syncTools.h
deleted file mode 100644
index 3fb4a5ba0c..0000000000
--- a/source/libs/sync/inc/syncTools.h
+++ /dev/null
@@ -1,755 +0,0 @@
-/*
- * Copyright (c) 2019 TAOS Data, Inc.
- *
- * This program is free software: you can use, redistribute, and/or modify
- * it under the terms of the GNU Affero General Public License, version 3
- * or later ("AGPL"), as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-#ifndef _TD_LIBS_SYNC_TOOLS_H
-#define _TD_LIBS_SYNC_TOOLS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// ------------------ ds -------------------
-typedef struct SRaftId {
- SyncNodeId addr;
- SyncGroupId vgId;
-} SRaftId;
-
-// ------------------ for debug -------------------
-void syncRpcMsgPrint(SRpcMsg* pMsg);
-void syncRpcMsgPrint2(char* s, SRpcMsg* pMsg);
-void syncRpcMsgLog(SRpcMsg* pMsg);
-void syncRpcMsgLog2(char* s, SRpcMsg* pMsg);
-
-// ------------------ for compile -------------------
-typedef struct SSyncBuffer {
- void* data;
- size_t len;
-} SSyncBuffer;
-
-typedef struct SNodesRole {
- int32_t replicaNum;
- SNodeInfo nodeInfo[TSDB_MAX_REPLICA];
- ESyncState role[TSDB_MAX_REPLICA];
-} SNodesRole;
-
-typedef struct SStateMgr {
- void* data;
-
- int32_t (*getCurrentTerm)(struct SStateMgr* pMgr, SyncTerm* pCurrentTerm);
- int32_t (*persistCurrentTerm)(struct SStateMgr* pMgr, SyncTerm pCurrentTerm);
-
- int32_t (*getVoteFor)(struct SStateMgr* pMgr, SyncNodeId* pVoteFor);
- int32_t (*persistVoteFor)(struct SStateMgr* pMgr, SyncNodeId voteFor);
-
- int32_t (*getSyncCfg)(struct SStateMgr* pMgr, SSyncCfg* pSyncCfg);
- int32_t (*persistSyncCfg)(struct SStateMgr* pMgr, SSyncCfg* pSyncCfg);
-
-} SStateMgr;
-
-// ------------------ for message process -------------------
-
-// ---------------------------------------------
-typedef struct SyncPing {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
- // private data
- uint32_t dataLen;
- char data[];
-} SyncPing;
-
-SyncPing* syncPingBuild(uint32_t dataLen);
-SyncPing* syncPingBuild2(const SRaftId* srcId, const SRaftId* destId, int32_t vgId, const char* str);
-SyncPing* syncPingBuild3(const SRaftId* srcId, const SRaftId* destId, int32_t vgId);
-void syncPingDestroy(SyncPing* pMsg);
-void syncPingSerialize(const SyncPing* pMsg, char* buf, uint32_t bufLen);
-void syncPingDeserialize(const char* buf, uint32_t len, SyncPing* pMsg);
-char* syncPingSerialize2(const SyncPing* pMsg, uint32_t* len);
-SyncPing* syncPingDeserialize2(const char* buf, uint32_t len);
-int32_t syncPingSerialize3(const SyncPing* pMsg, char* buf, int32_t bufLen);
-SyncPing* syncPingDeserialize3(void* buf, int32_t bufLen);
-void syncPing2RpcMsg(const SyncPing* pMsg, SRpcMsg* pRpcMsg);
-void syncPingFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPing* pMsg);
-SyncPing* syncPingFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncPing2Json(const SyncPing* pMsg);
-char* syncPing2Str(const SyncPing* pMsg);
-
-// for debug ----------------------
-void syncPingPrint(const SyncPing* pMsg);
-void syncPingPrint2(char* s, const SyncPing* pMsg);
-void syncPingLog(const SyncPing* pMsg);
-void syncPingLog2(char* s, const SyncPing* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncPingReply {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
- // private data
- uint32_t dataLen;
- char data[];
-} SyncPingReply;
-
-SyncPingReply* syncPingReplyBuild(uint32_t dataLen);
-SyncPingReply* syncPingReplyBuild2(const SRaftId* srcId, const SRaftId* destId, int32_t vgId, const char* str);
-SyncPingReply* syncPingReplyBuild3(const SRaftId* srcId, const SRaftId* destId, int32_t vgId);
-void syncPingReplyDestroy(SyncPingReply* pMsg);
-void syncPingReplySerialize(const SyncPingReply* pMsg, char* buf, uint32_t bufLen);
-void syncPingReplyDeserialize(const char* buf, uint32_t len, SyncPingReply* pMsg);
-char* syncPingReplySerialize2(const SyncPingReply* pMsg, uint32_t* len);
-SyncPingReply* syncPingReplyDeserialize2(const char* buf, uint32_t len);
-int32_t syncPingReplySerialize3(const SyncPingReply* pMsg, char* buf, int32_t bufLen);
-SyncPingReply* syncPingReplyDeserialize3(void* buf, int32_t bufLen);
-void syncPingReply2RpcMsg(const SyncPingReply* pMsg, SRpcMsg* pRpcMsg);
-void syncPingReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPingReply* pMsg);
-SyncPingReply* syncPingReplyFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncPingReply2Json(const SyncPingReply* pMsg);
-char* syncPingReply2Str(const SyncPingReply* pMsg);
-
-// for debug ----------------------
-void syncPingReplyPrint(const SyncPingReply* pMsg);
-void syncPingReplyPrint2(char* s, const SyncPingReply* pMsg);
-void syncPingReplyLog(const SyncPingReply* pMsg);
-void syncPingReplyLog2(char* s, const SyncPingReply* pMsg);
-
-// ---------------------------------------------
-typedef enum ESyncTimeoutType {
- SYNC_TIMEOUT_PING = 100,
- SYNC_TIMEOUT_ELECTION,
- SYNC_TIMEOUT_HEARTBEAT,
-} ESyncTimeoutType;
-
-const char* syncTimerTypeStr(enum ESyncTimeoutType timerType);
-
-typedef struct SyncTimeout {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- ESyncTimeoutType timeoutType;
- uint64_t logicClock;
- int32_t timerMS;
- void* data; // need optimized
-} SyncTimeout;
-
-SyncTimeout* syncTimeoutBuild();
-SyncTimeout* syncTimeoutBuild2(ESyncTimeoutType timeoutType, uint64_t logicClock, int32_t timerMS, int32_t vgId,
- void* data);
-void syncTimeoutDestroy(SyncTimeout* pMsg);
-void syncTimeoutSerialize(const SyncTimeout* pMsg, char* buf, uint32_t bufLen);
-void syncTimeoutDeserialize(const char* buf, uint32_t len, SyncTimeout* pMsg);
-char* syncTimeoutSerialize2(const SyncTimeout* pMsg, uint32_t* len);
-SyncTimeout* syncTimeoutDeserialize2(const char* buf, uint32_t len);
-void syncTimeout2RpcMsg(const SyncTimeout* pMsg, SRpcMsg* pRpcMsg);
-void syncTimeoutFromRpcMsg(const SRpcMsg* pRpcMsg, SyncTimeout* pMsg);
-SyncTimeout* syncTimeoutFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncTimeout2Json(const SyncTimeout* pMsg);
-char* syncTimeout2Str(const SyncTimeout* pMsg);
-
-// for debug ----------------------
-void syncTimeoutPrint(const SyncTimeout* pMsg);
-void syncTimeoutPrint2(char* s, const SyncTimeout* pMsg);
-void syncTimeoutLog(const SyncTimeout* pMsg);
-void syncTimeoutLog2(char* s, const SyncTimeout* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncClientRequest {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType; // TDMT_SYNC_CLIENT_REQUEST
- uint32_t originalRpcType; // origin RpcMsg msgType
- uint64_t seqNum;
- bool isWeak;
- uint32_t dataLen; // origin RpcMsg.contLen
- char data[]; // origin RpcMsg.pCont
-} SyncClientRequest;
-
-SyncClientRequest* syncClientRequestAlloc(uint32_t dataLen);
-int32_t syncClientRequestBuildFromRpcMsg(SRpcMsg* pClientRequestRpcMsg, const SRpcMsg* pOriginalRpcMsg, uint64_t seqNum,
- bool isWeak, int32_t vgId);
-int32_t syncClientRequestBuildFromNoopEntry(SRpcMsg* pClientRequestRpcMsg, const SSyncRaftEntry* pEntry, int32_t vgId);
-void syncClientRequest2RpcMsg(const SyncClientRequest* pMsg, SRpcMsg* pRpcMsg); // step 2
-void syncClientRequestFromRpcMsg(const SRpcMsg* pRpcMsg, SyncClientRequest* pMsg);
-cJSON* syncClientRequest2Json(const SyncClientRequest* pMsg);
-char* syncClientRequest2Str(const SyncClientRequest* pMsg);
-
-// for debug ----------------------
-void syncClientRequestPrint(const SyncClientRequest* pMsg);
-void syncClientRequestPrint2(char* s, const SyncClientRequest* pMsg);
-void syncClientRequestLog(const SyncClientRequest* pMsg);
-void syncClientRequestLog2(char* s, const SyncClientRequest* pMsg);
-
-// ---------------------------------------------
-typedef struct SRaftMeta {
- uint64_t seqNum;
- bool isWeak;
-} SRaftMeta;
-
-// block1:
-// block2: SRaftMeta array
-// block3: rpc msg array (with pCont pointer)
-
-typedef struct SyncClientRequestBatch {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType; // TDMT_SYNC_CLIENT_REQUEST_BATCH
- uint32_t dataCount;
- uint32_t dataLen;
- char data[]; // block2, block3
-} SyncClientRequestBatch;
-
-SyncClientRequestBatch* syncClientRequestBatchBuild(SRpcMsg** rpcMsgPArr, SRaftMeta* raftArr, int32_t arrSize,
- int32_t vgId);
-void syncClientRequestBatch2RpcMsg(const SyncClientRequestBatch* pSyncMsg, SRpcMsg* pRpcMsg);
-void syncClientRequestBatchDestroy(SyncClientRequestBatch* pMsg);
-void syncClientRequestBatchDestroyDeep(SyncClientRequestBatch* pMsg);
-SRaftMeta* syncClientRequestBatchMetaArr(const SyncClientRequestBatch* pSyncMsg);
-SRpcMsg* syncClientRequestBatchRpcMsgArr(const SyncClientRequestBatch* pSyncMsg);
-SyncClientRequestBatch* syncClientRequestBatchFromRpcMsg(const SRpcMsg* pRpcMsg);
-cJSON* syncClientRequestBatch2Json(const SyncClientRequestBatch* pMsg);
-char* syncClientRequestBatch2Str(const SyncClientRequestBatch* pMsg);
-
-// for debug ----------------------
-void syncClientRequestBatchPrint(const SyncClientRequestBatch* pMsg);
-void syncClientRequestBatchPrint2(char* s, const SyncClientRequestBatch* pMsg);
-void syncClientRequestBatchLog(const SyncClientRequestBatch* pMsg);
-void syncClientRequestBatchLog2(char* s, const SyncClientRequestBatch* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncClientRequestReply {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- int32_t errCode;
- SRaftId leaderHint;
-} SyncClientRequestReply;
-
-// ---------------------------------------------
-typedef struct SyncRequestVote {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
- // private data
- SyncTerm term;
- SyncIndex lastLogIndex;
- SyncTerm lastLogTerm;
-} SyncRequestVote;
-
-SyncRequestVote* syncRequestVoteBuild(int32_t vgId);
-void syncRequestVoteDestroy(SyncRequestVote* pMsg);
-void syncRequestVoteSerialize(const SyncRequestVote* pMsg, char* buf, uint32_t bufLen);
-void syncRequestVoteDeserialize(const char* buf, uint32_t len, SyncRequestVote* pMsg);
-char* syncRequestVoteSerialize2(const SyncRequestVote* pMsg, uint32_t* len);
-SyncRequestVote* syncRequestVoteDeserialize2(const char* buf, uint32_t len);
-void syncRequestVote2RpcMsg(const SyncRequestVote* pMsg, SRpcMsg* pRpcMsg);
-void syncRequestVoteFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVote* pMsg);
-SyncRequestVote* syncRequestVoteFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncRequestVote2Json(const SyncRequestVote* pMsg);
-char* syncRequestVote2Str(const SyncRequestVote* pMsg);
-
-// for debug ----------------------
-void syncRequestVotePrint(const SyncRequestVote* pMsg);
-void syncRequestVotePrint2(char* s, const SyncRequestVote* pMsg);
-void syncRequestVoteLog(const SyncRequestVote* pMsg);
-void syncRequestVoteLog2(char* s, const SyncRequestVote* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncRequestVoteReply {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
- // private data
- SyncTerm term;
- bool voteGranted;
-} SyncRequestVoteReply;
-
-SyncRequestVoteReply* syncRequestVoteReplyBuild(int32_t vgId);
-void syncRequestVoteReplyDestroy(SyncRequestVoteReply* pMsg);
-void syncRequestVoteReplySerialize(const SyncRequestVoteReply* pMsg, char* buf, uint32_t bufLen);
-void syncRequestVoteReplyDeserialize(const char* buf, uint32_t len, SyncRequestVoteReply* pMsg);
-char* syncRequestVoteReplySerialize2(const SyncRequestVoteReply* pMsg, uint32_t* len);
-SyncRequestVoteReply* syncRequestVoteReplyDeserialize2(const char* buf, uint32_t len);
-void syncRequestVoteReply2RpcMsg(const SyncRequestVoteReply* pMsg, SRpcMsg* pRpcMsg);
-void syncRequestVoteReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVoteReply* pMsg);
-SyncRequestVoteReply* syncRequestVoteReplyFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncRequestVoteReply2Json(const SyncRequestVoteReply* pMsg);
-char* syncRequestVoteReply2Str(const SyncRequestVoteReply* pMsg);
-
-// for debug ----------------------
-void syncRequestVoteReplyPrint(const SyncRequestVoteReply* pMsg);
-void syncRequestVoteReplyPrint2(char* s, const SyncRequestVoteReply* pMsg);
-void syncRequestVoteReplyLog(const SyncRequestVoteReply* pMsg);
-void syncRequestVoteReplyLog2(char* s, const SyncRequestVoteReply* pMsg);
-
-// ---------------------------------------------
-// data: entry
-
-typedef struct SyncAppendEntries {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
-
- // private data
- SyncTerm term;
- SyncIndex prevLogIndex;
- SyncTerm prevLogTerm;
- SyncIndex commitIndex;
- SyncTerm privateTerm;
- uint32_t dataLen;
- char data[];
-} SyncAppendEntries;
-
-SyncAppendEntries* syncAppendEntriesBuild(uint32_t dataLen, int32_t vgId);
-void syncAppendEntriesDestroy(SyncAppendEntries* pMsg);
-void syncAppendEntriesSerialize(const SyncAppendEntries* pMsg, char* buf, uint32_t bufLen);
-void syncAppendEntriesDeserialize(const char* buf, uint32_t len, SyncAppendEntries* pMsg);
-char* syncAppendEntriesSerialize2(const SyncAppendEntries* pMsg, uint32_t* len);
-SyncAppendEntries* syncAppendEntriesDeserialize2(const char* buf, uint32_t len);
-void syncAppendEntries2RpcMsg(const SyncAppendEntries* pMsg, SRpcMsg* pRpcMsg);
-void syncAppendEntriesFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntries* pMsg);
-SyncAppendEntries* syncAppendEntriesFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncAppendEntries2Json(const SyncAppendEntries* pMsg);
-char* syncAppendEntries2Str(const SyncAppendEntries* pMsg);
-
-// for debug ----------------------
-void syncAppendEntriesPrint(const SyncAppendEntries* pMsg);
-void syncAppendEntriesPrint2(char* s, const SyncAppendEntries* pMsg);
-void syncAppendEntriesLog(const SyncAppendEntries* pMsg);
-void syncAppendEntriesLog2(char* s, const SyncAppendEntries* pMsg);
-
-// ---------------------------------------------
-
-typedef struct SOffsetAndContLen {
- int32_t offset;
- int32_t contLen;
-} SOffsetAndContLen;
-
-// data:
-// block1: SOffsetAndContLen Array
-// block2: entry Array
-
-typedef struct SyncAppendEntriesBatch {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
-
- // private data
- SyncTerm term;
- SyncIndex prevLogIndex;
- SyncTerm prevLogTerm;
- SyncIndex commitIndex;
- SyncTerm privateTerm;
- int32_t dataCount;
- uint32_t dataLen;
- char data[]; // block1, block2
-} SyncAppendEntriesBatch;
-
-SyncAppendEntriesBatch* syncAppendEntriesBatchBuild(SSyncRaftEntry** entryPArr, int32_t arrSize, int32_t vgId);
-SOffsetAndContLen* syncAppendEntriesBatchMetaTableArray(SyncAppendEntriesBatch* pMsg);
-void syncAppendEntriesBatchDestroy(SyncAppendEntriesBatch* pMsg);
-void syncAppendEntriesBatchSerialize(const SyncAppendEntriesBatch* pMsg, char* buf, uint32_t bufLen);
-void syncAppendEntriesBatchDeserialize(const char* buf, uint32_t len, SyncAppendEntriesBatch* pMsg);
-char* syncAppendEntriesBatchSerialize2(const SyncAppendEntriesBatch* pMsg, uint32_t* len);
-SyncAppendEntriesBatch* syncAppendEntriesBatchDeserialize2(const char* buf, uint32_t len);
-void syncAppendEntriesBatch2RpcMsg(const SyncAppendEntriesBatch* pMsg, SRpcMsg* pRpcMsg);
-void syncAppendEntriesBatchFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntriesBatch* pMsg);
-SyncAppendEntriesBatch* syncAppendEntriesBatchFromRpcMsg2(const SRpcMsg* pRpcMsg);
-
-// ---------------------------------------------
-typedef struct SyncAppendEntriesReply {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
- // private data
- SyncTerm term;
- SyncTerm privateTerm;
- bool success;
- SyncIndex matchIndex;
- SyncIndex lastSendIndex;
- int64_t startTime;
-} SyncAppendEntriesReply;
-
-SyncAppendEntriesReply* syncAppendEntriesReplyBuild(int32_t vgId);
-void syncAppendEntriesReplyDestroy(SyncAppendEntriesReply* pMsg);
-void syncAppendEntriesReplySerialize(const SyncAppendEntriesReply* pMsg, char* buf, uint32_t bufLen);
-void syncAppendEntriesReplyDeserialize(const char* buf, uint32_t len, SyncAppendEntriesReply* pMsg);
-char* syncAppendEntriesReplySerialize2(const SyncAppendEntriesReply* pMsg, uint32_t* len);
-SyncAppendEntriesReply* syncAppendEntriesReplyDeserialize2(const char* buf, uint32_t len);
-void syncAppendEntriesReply2RpcMsg(const SyncAppendEntriesReply* pMsg, SRpcMsg* pRpcMsg);
-void syncAppendEntriesReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntriesReply* pMsg);
-SyncAppendEntriesReply* syncAppendEntriesReplyFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncAppendEntriesReply2Json(const SyncAppendEntriesReply* pMsg);
-char* syncAppendEntriesReply2Str(const SyncAppendEntriesReply* pMsg);
-
-// for debug ----------------------
-void syncAppendEntriesReplyPrint(const SyncAppendEntriesReply* pMsg);
-void syncAppendEntriesReplyPrint2(char* s, const SyncAppendEntriesReply* pMsg);
-void syncAppendEntriesReplyLog(const SyncAppendEntriesReply* pMsg);
-void syncAppendEntriesReplyLog2(char* s, const SyncAppendEntriesReply* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncHeartbeat {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
-
- // private data
- SyncTerm term;
- SyncIndex commitIndex;
- SyncTerm privateTerm;
- SyncTerm minMatchIndex;
-
-} SyncHeartbeat;
-
-SyncHeartbeat* syncHeartbeatBuild(int32_t vgId);
-void syncHeartbeatDestroy(SyncHeartbeat* pMsg);
-void syncHeartbeatSerialize(const SyncHeartbeat* pMsg, char* buf, uint32_t bufLen);
-void syncHeartbeatDeserialize(const char* buf, uint32_t len, SyncHeartbeat* pMsg);
-char* syncHeartbeatSerialize2(const SyncHeartbeat* pMsg, uint32_t* len);
-SyncHeartbeat* syncHeartbeatDeserialize2(const char* buf, uint32_t len);
-void syncHeartbeat2RpcMsg(const SyncHeartbeat* pMsg, SRpcMsg* pRpcMsg);
-void syncHeartbeatFromRpcMsg(const SRpcMsg* pRpcMsg, SyncHeartbeat* pMsg);
-SyncHeartbeat* syncHeartbeatFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncHeartbeat2Json(const SyncHeartbeat* pMsg);
-char* syncHeartbeat2Str(const SyncHeartbeat* pMsg);
-
-// for debug ----------------------
-void syncHeartbeatPrint(const SyncHeartbeat* pMsg);
-void syncHeartbeatPrint2(char* s, const SyncHeartbeat* pMsg);
-void syncHeartbeatLog(const SyncHeartbeat* pMsg);
-void syncHeartbeatLog2(char* s, const SyncHeartbeat* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncHeartbeatReply {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
-
- // private data
- SyncTerm term;
- SyncTerm privateTerm;
- int64_t startTime;
-} SyncHeartbeatReply;
-
-SyncHeartbeatReply* syncHeartbeatReplyBuild(int32_t vgId);
-void syncHeartbeatReplyDestroy(SyncHeartbeatReply* pMsg);
-void syncHeartbeatReplySerialize(const SyncHeartbeatReply* pMsg, char* buf, uint32_t bufLen);
-void syncHeartbeatReplyDeserialize(const char* buf, uint32_t len, SyncHeartbeatReply* pMsg);
-char* syncHeartbeatReplySerialize2(const SyncHeartbeatReply* pMsg, uint32_t* len);
-SyncHeartbeatReply* syncHeartbeatReplyDeserialize2(const char* buf, uint32_t len);
-void syncHeartbeatReply2RpcMsg(const SyncHeartbeatReply* pMsg, SRpcMsg* pRpcMsg);
-void syncHeartbeatReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncHeartbeatReply* pMsg);
-SyncHeartbeatReply* syncHeartbeatReplyFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncHeartbeatReply2Json(const SyncHeartbeatReply* pMsg);
-char* syncHeartbeatReply2Str(const SyncHeartbeatReply* pMsg);
-
-// for debug ----------------------
-void syncHeartbeatReplyPrint(const SyncHeartbeatReply* pMsg);
-void syncHeartbeatReplyPrint2(char* s, const SyncHeartbeatReply* pMsg);
-void syncHeartbeatReplyLog(const SyncHeartbeatReply* pMsg);
-void syncHeartbeatReplyLog2(char* s, const SyncHeartbeatReply* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncPreSnapshot {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
-
- // private data
- SyncTerm term;
-
-} SyncPreSnapshot;
-
-SyncPreSnapshot* syncPreSnapshotBuild(int32_t vgId);
-void syncPreSnapshotDestroy(SyncPreSnapshot* pMsg);
-void syncPreSnapshotSerialize(const SyncPreSnapshot* pMsg, char* buf, uint32_t bufLen);
-void syncPreSnapshotDeserialize(const char* buf, uint32_t len, SyncPreSnapshot* pMsg);
-char* syncPreSnapshotSerialize2(const SyncPreSnapshot* pMsg, uint32_t* len);
-SyncPreSnapshot* syncPreSnapshotDeserialize2(const char* buf, uint32_t len);
-void syncPreSnapshot2RpcMsg(const SyncPreSnapshot* pMsg, SRpcMsg* pRpcMsg);
-void syncPreSnapshotFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPreSnapshot* pMsg);
-SyncPreSnapshot* syncPreSnapshotFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncPreSnapshot2Json(const SyncPreSnapshot* pMsg);
-char* syncPreSnapshot2Str(const SyncPreSnapshot* pMsg);
-
-// for debug ----------------------
-void syncPreSnapshotPrint(const SyncPreSnapshot* pMsg);
-void syncPreSnapshotPrint2(char* s, const SyncPreSnapshot* pMsg);
-void syncPreSnapshotLog(const SyncPreSnapshot* pMsg);
-void syncPreSnapshotLog2(char* s, const SyncPreSnapshot* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncPreSnapshotReply {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
-
- // private data
- SyncTerm term;
- SyncIndex snapStart;
-
-} SyncPreSnapshotReply;
-
-SyncPreSnapshotReply* syncPreSnapshotReplyBuild(int32_t vgId);
-void syncPreSnapshotReplyDestroy(SyncPreSnapshotReply* pMsg);
-void syncPreSnapshotReplySerialize(const SyncPreSnapshotReply* pMsg, char* buf, uint32_t bufLen);
-void syncPreSnapshotReplyDeserialize(const char* buf, uint32_t len, SyncPreSnapshotReply* pMsg);
-char* syncPreSnapshotReplySerialize2(const SyncPreSnapshotReply* pMsg, uint32_t* len);
-SyncPreSnapshotReply* syncPreSnapshotReplyDeserialize2(const char* buf, uint32_t len);
-void syncPreSnapshotReply2RpcMsg(const SyncPreSnapshotReply* pMsg, SRpcMsg* pRpcMsg);
-void syncPreSnapshotReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPreSnapshotReply* pMsg);
-SyncPreSnapshotReply* syncPreSnapshotReplyFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncPreSnapshotReply2Json(const SyncPreSnapshotReply* pMsg);
-char* syncPreSnapshotReply2Str(const SyncPreSnapshotReply* pMsg);
-
-// for debug ----------------------
-void syncPreSnapshotReplyPrint(const SyncPreSnapshotReply* pMsg);
-void syncPreSnapshotReplyPrint2(char* s, const SyncPreSnapshotReply* pMsg);
-void syncPreSnapshotReplyLog(const SyncPreSnapshotReply* pMsg);
-void syncPreSnapshotReplyLog2(char* s, const SyncPreSnapshotReply* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncApplyMsg {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType; // user SyncApplyMsg msgType
- uint32_t originalRpcType; // user RpcMsg msgType
- SFsmCbMeta fsmMeta;
- uint32_t dataLen; // user RpcMsg.contLen
- char data[]; // user RpcMsg.pCont
-} SyncApplyMsg;
-
-SyncApplyMsg* syncApplyMsgBuild(uint32_t dataLen);
-SyncApplyMsg* syncApplyMsgBuild2(const SRpcMsg* pOriginalRpcMsg, int32_t vgId, SFsmCbMeta* pMeta);
-void syncApplyMsgDestroy(SyncApplyMsg* pMsg);
-void syncApplyMsgSerialize(const SyncApplyMsg* pMsg, char* buf, uint32_t bufLen);
-void syncApplyMsgDeserialize(const char* buf, uint32_t len, SyncApplyMsg* pMsg);
-char* syncApplyMsgSerialize2(const SyncApplyMsg* pMsg, uint32_t* len);
-SyncApplyMsg* syncApplyMsgDeserialize2(const char* buf, uint32_t len);
-void syncApplyMsg2RpcMsg(const SyncApplyMsg* pMsg, SRpcMsg* pRpcMsg); // SyncApplyMsg to SRpcMsg, put it into ApplyQ
-void syncApplyMsgFromRpcMsg(const SRpcMsg* pRpcMsg, SyncApplyMsg* pMsg); // get SRpcMsg from ApplyQ, to SyncApplyMsg
-SyncApplyMsg* syncApplyMsgFromRpcMsg2(const SRpcMsg* pRpcMsg);
-void syncApplyMsg2OriginalRpcMsg(const SyncApplyMsg* pMsg, SRpcMsg* pOriginalRpcMsg); // SyncApplyMsg to OriginalRpcMsg
-cJSON* syncApplyMsg2Json(const SyncApplyMsg* pMsg);
-char* syncApplyMsg2Str(const SyncApplyMsg* pMsg);
-
-// for debug ----------------------
-void syncApplyMsgPrint(const SyncApplyMsg* pMsg);
-void syncApplyMsgPrint2(char* s, const SyncApplyMsg* pMsg);
-void syncApplyMsgLog(const SyncApplyMsg* pMsg);
-void syncApplyMsgLog2(char* s, const SyncApplyMsg* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncSnapshotSend {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
-
- SyncTerm term;
- SyncIndex beginIndex; // snapshot.beginIndex
- SyncIndex lastIndex; // snapshot.lastIndex
- SyncTerm lastTerm; // snapshot.lastTerm
- SyncIndex lastConfigIndex; // snapshot.lastConfigIndex
- SSyncCfg lastConfig;
- int64_t startTime;
- int32_t seq;
- uint32_t dataLen;
- char data[];
-} SyncSnapshotSend;
-
-SyncSnapshotSend* syncSnapshotSendBuild(uint32_t dataLen, int32_t vgId);
-void syncSnapshotSendDestroy(SyncSnapshotSend* pMsg);
-void syncSnapshotSendSerialize(const SyncSnapshotSend* pMsg, char* buf, uint32_t bufLen);
-void syncSnapshotSendDeserialize(const char* buf, uint32_t len, SyncSnapshotSend* pMsg);
-char* syncSnapshotSendSerialize2(const SyncSnapshotSend* pMsg, uint32_t* len);
-SyncSnapshotSend* syncSnapshotSendDeserialize2(const char* buf, uint32_t len);
-void syncSnapshotSend2RpcMsg(const SyncSnapshotSend* pMsg, SRpcMsg* pRpcMsg);
-void syncSnapshotSendFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotSend* pMsg);
-SyncSnapshotSend* syncSnapshotSendFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncSnapshotSend2Json(const SyncSnapshotSend* pMsg);
-char* syncSnapshotSend2Str(const SyncSnapshotSend* pMsg);
-
-// for debug ----------------------
-void syncSnapshotSendPrint(const SyncSnapshotSend* pMsg);
-void syncSnapshotSendPrint2(char* s, const SyncSnapshotSend* pMsg);
-void syncSnapshotSendLog(const SyncSnapshotSend* pMsg);
-void syncSnapshotSendLog2(char* s, const SyncSnapshotSend* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncSnapshotRsp {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
-
- SyncTerm term;
- SyncIndex lastIndex;
- SyncTerm lastTerm;
- int64_t startTime;
- int32_t ack;
- int32_t code;
- SyncIndex snapBeginIndex; // when ack = SYNC_SNAPSHOT_SEQ_BEGIN, it's valid
-} SyncSnapshotRsp;
-
-SyncSnapshotRsp* syncSnapshotRspBuild(int32_t vgId);
-void syncSnapshotRspDestroy(SyncSnapshotRsp* pMsg);
-void syncSnapshotRspSerialize(const SyncSnapshotRsp* pMsg, char* buf, uint32_t bufLen);
-void syncSnapshotRspDeserialize(const char* buf, uint32_t len, SyncSnapshotRsp* pMsg);
-char* syncSnapshotRspSerialize2(const SyncSnapshotRsp* pMsg, uint32_t* len);
-SyncSnapshotRsp* syncSnapshotRspDeserialize2(const char* buf, uint32_t len);
-void syncSnapshotRsp2RpcMsg(const SyncSnapshotRsp* pMsg, SRpcMsg* pRpcMsg);
-void syncSnapshotRspFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotRsp* pMsg);
-SyncSnapshotRsp* syncSnapshotRspFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncSnapshotRsp2Json(const SyncSnapshotRsp* pMsg);
-char* syncSnapshotRsp2Str(const SyncSnapshotRsp* pMsg);
-
-// for debug ----------------------
-void syncSnapshotRspPrint(const SyncSnapshotRsp* pMsg);
-void syncSnapshotRspPrint2(char* s, const SyncSnapshotRsp* pMsg);
-void syncSnapshotRspLog(const SyncSnapshotRsp* pMsg);
-void syncSnapshotRspLog2(char* s, const SyncSnapshotRsp* pMsg);
-
-// ---------------------------------------------
-typedef struct SyncLeaderTransfer {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- /*
- SRaftId srcId;
- SRaftId destId;
- */
- SNodeInfo newNodeInfo;
- SRaftId newLeaderId;
-} SyncLeaderTransfer;
-
-SyncLeaderTransfer* syncLeaderTransferBuild(int32_t vgId);
-void syncLeaderTransferDestroy(SyncLeaderTransfer* pMsg);
-void syncLeaderTransferSerialize(const SyncLeaderTransfer* pMsg, char* buf, uint32_t bufLen);
-void syncLeaderTransferDeserialize(const char* buf, uint32_t len, SyncLeaderTransfer* pMsg);
-char* syncLeaderTransferSerialize2(const SyncLeaderTransfer* pMsg, uint32_t* len);
-SyncLeaderTransfer* syncLeaderTransferDeserialize2(const char* buf, uint32_t len);
-void syncLeaderTransfer2RpcMsg(const SyncLeaderTransfer* pMsg, SRpcMsg* pRpcMsg);
-void syncLeaderTransferFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLeaderTransfer* pMsg);
-SyncLeaderTransfer* syncLeaderTransferFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncLeaderTransfer2Json(const SyncLeaderTransfer* pMsg);
-char* syncLeaderTransfer2Str(const SyncLeaderTransfer* pMsg);
-
-typedef enum {
- SYNC_LOCAL_CMD_STEP_DOWN = 100,
- SYNC_LOCAL_CMD_FOLLOWER_CMT,
-} ESyncLocalCmd;
-
-const char* syncLocalCmdGetStr(int32_t cmd);
-
-typedef struct SyncLocalCmd {
- uint32_t bytes;
- int32_t vgId;
- uint32_t msgType;
- SRaftId srcId;
- SRaftId destId;
-
- int32_t cmd;
- SyncTerm sdNewTerm; // step down new term
- SyncIndex fcIndex;// follower commit index
-
-} SyncLocalCmd;
-
-SyncLocalCmd* syncLocalCmdBuild(int32_t vgId);
-void syncLocalCmdDestroy(SyncLocalCmd* pMsg);
-void syncLocalCmdSerialize(const SyncLocalCmd* pMsg, char* buf, uint32_t bufLen);
-void syncLocalCmdDeserialize(const char* buf, uint32_t len, SyncLocalCmd* pMsg);
-char* syncLocalCmdSerialize2(const SyncLocalCmd* pMsg, uint32_t* len);
-SyncLocalCmd* syncLocalCmdDeserialize2(const char* buf, uint32_t len);
-void syncLocalCmd2RpcMsg(const SyncLocalCmd* pMsg, SRpcMsg* pRpcMsg);
-void syncLocalCmdFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLocalCmd* pMsg);
-SyncLocalCmd* syncLocalCmdFromRpcMsg2(const SRpcMsg* pRpcMsg);
-cJSON* syncLocalCmd2Json(const SyncLocalCmd* pMsg);
-char* syncLocalCmd2Str(const SyncLocalCmd* pMsg);
-
-// for debug ----------------------
-void syncLocalCmdPrint(const SyncLocalCmd* pMsg);
-void syncLocalCmdPrint2(char* s, const SyncLocalCmd* pMsg);
-void syncLocalCmdLog(const SyncLocalCmd* pMsg);
-void syncLocalCmdLog2(char* s, const SyncLocalCmd* pMsg);
-
-// on message ----------------------
-int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg);
-int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg);
-
-int32_t syncNodeOnRequestVote(SSyncNode* ths, SyncRequestVote* pMsg);
-int32_t syncNodeOnRequestVoteReply(SSyncNode* ths, SyncRequestVoteReply* pMsg);
-
-int32_t syncNodeOnAppendEntries(SSyncNode* ths, SyncAppendEntries* pMsg);
-int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, SyncAppendEntriesReply* pMsg);
-
-int32_t syncNodeOnPreSnapshot(SSyncNode* ths, SyncPreSnapshot* pMsg);
-int32_t syncNodeOnPreSnapshotReply(SSyncNode* ths, SyncPreSnapshotReply* pMsg);
-
-int32_t syncNodeOnSnapshot(SSyncNode* ths, SyncSnapshotSend* pMsg);
-int32_t syncNodeOnSnapshotReply(SSyncNode* ths, SyncSnapshotRsp* pMsg);
-
-int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg);
-int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, SyncHeartbeatReply* pMsg);
-
-int32_t syncNodeOnClientRequest(SSyncNode* ths, SRpcMsg* pMsg, SyncIndex* pRetIndex);
-int32_t syncNodeOnLocalCmd(SSyncNode* ths, SyncLocalCmd* pMsg);
-
-// -----------------------------------------
-typedef int32_t (*FpOnPingCb)(SSyncNode* ths, SyncPing* pMsg);
-typedef int32_t (*FpOnPingReplyCb)(SSyncNode* ths, SyncPingReply* pMsg);
-typedef int32_t (*FpOnClientRequestCb)(SSyncNode* ths, SRpcMsg* pMsg, SyncIndex* pRetIndex);
-typedef int32_t (*FpOnRequestVoteCb)(SSyncNode* ths, SyncRequestVote* pMsg);
-typedef int32_t (*FpOnRequestVoteReplyCb)(SSyncNode* ths, SyncRequestVoteReply* pMsg);
-typedef int32_t (*FpOnAppendEntriesCb)(SSyncNode* ths, SyncAppendEntries* pMsg);
-typedef int32_t (*FpOnAppendEntriesReplyCb)(SSyncNode* ths, SyncAppendEntriesReply* pMsg);
-typedef int32_t (*FpOnTimeoutCb)(SSyncNode* pSyncNode, SyncTimeout* pMsg);
-typedef int32_t (*FpOnSnapshotCb)(SSyncNode* ths, SyncSnapshotSend* pMsg);
-typedef int32_t (*FpOnSnapshotReplyCb)(SSyncNode* ths, SyncSnapshotRsp* pMsg);
-
-// option ----------------------------------
-bool syncNodeSnapshotEnable(SSyncNode* pSyncNode);
-ESyncStrategy syncNodeStrategy(SSyncNode* pSyncNode);
-
-// ---------------------------------------------
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*_TD_LIBS_SYNC_TOOLS_H*/
diff --git a/source/libs/sync/inc/syncUtil.h b/source/libs/sync/inc/syncUtil.h
index 076101ef43..b7ee320aa5 100644
--- a/source/libs/sync/inc/syncUtil.h
+++ b/source/libs/sync/inc/syncUtil.h
@@ -21,6 +21,46 @@ extern "C" {
#endif
#include "syncInt.h"
+#include "tlog.h"
+
+// clang-format off
+
+#define sFatal(...) if (sDebugFlag & DEBUG_FATAL) { taosPrintLog("SYN FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }
+#define sError(...) if (sDebugFlag & DEBUG_ERROR) { taosPrintLog("SYN ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }
+#define sWarn(...) if (sDebugFlag & DEBUG_WARN) { taosPrintLog("SYN WARN ", DEBUG_WARN, 255, __VA_ARGS__); }
+#define sInfo(...) if (sDebugFlag & DEBUG_INFO) { taosPrintLog("SYN ", DEBUG_INFO, 255, __VA_ARGS__); }
+#define sDebug(...) if (sDebugFlag & DEBUG_DEBUG) { taosPrintLog("SYN ", DEBUG_DEBUG, sDebugFlag, __VA_ARGS__); }
+#define sTrace(...) if (sDebugFlag & DEBUG_TRACE) { taosPrintLog("SYN ", DEBUG_TRACE, sDebugFlag, __VA_ARGS__); }
+
+#define sLFatal(...) if (sDebugFlag & DEBUG_FATAL) { taosPrintLongString("SYN FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }
+#define sLError(...) if (sDebugFlag & DEBUG_ERROR) { taosPrintLongString("SYN ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }
+#define sLWarn(...) if (sDebugFlag & DEBUG_WARN) { taosPrintLongString("SYN WARN ", DEBUG_WARN, 255, __VA_ARGS__); }
+#define sLInfo(...) if (sDebugFlag & DEBUG_INFO) { taosPrintLongString("SYN ", DEBUG_INFO, 255, __VA_ARGS__); }
+#define sLDebug(...) if (sDebugFlag & DEBUG_DEBUG) { taosPrintLongString("SYN ", DEBUG_DEBUG, sDebugFlag, __VA_ARGS__); }
+#define sLTrace(...) if (sDebugFlag & DEBUG_TRACE) { taosPrintLongString("SYN ", DEBUG_TRACE, sDebugFlag, __VA_ARGS__); }
+
+#define sNFatal(pNode, ...) if (sDebugFlag & DEBUG_FATAL) { syncPrintNodeLog("SYN FATAL ", DEBUG_FATAL, 255, pNode, __VA_ARGS__); }
+#define sNError(pNode, ...) if (sDebugFlag & DEBUG_ERROR) { syncPrintNodeLog("SYN ERROR ", DEBUG_ERROR, 255, pNode, __VA_ARGS__); }
+#define sNWarn(pNode, ...) if (sDebugFlag & DEBUG_WARN) { syncPrintNodeLog("SYN WARN ", DEBUG_WARN, 255, pNode, __VA_ARGS__); }
+#define sNInfo(pNode, ...) if (sDebugFlag & DEBUG_INFO) { syncPrintNodeLog("SYN ", DEBUG_INFO, 255, pNode, __VA_ARGS__); }
+#define sNDebug(pNode, ...) if (sDebugFlag & DEBUG_DEBUG) { syncPrintNodeLog("SYN ", DEBUG_DEBUG, sDebugFlag, pNode, __VA_ARGS__); }
+#define sNTrace(pNode, ...) if (sDebugFlag & DEBUG_TRACE) { syncPrintNodeLog("SYN ", DEBUG_TRACE, sDebugFlag, pNode, __VA_ARGS__); }
+
+#define sSFatal(pSender, ...) if (sDebugFlag & DEBUG_FATAL) { syncPrintSnapshotSenderLog("SYN FATAL ", DEBUG_FATAL, 255, pSender, __VA_ARGS__); }
+#define sSError(pSender, ...) if (sDebugFlag & DEBUG_ERROR) { syncPrintSnapshotSenderLog("SYN ERROR ", DEBUG_ERROR, 255, pSender, __VA_ARGS__); }
+#define sSWarn(pSender, ...) if (sDebugFlag & DEBUG_WARN) { syncPrintSnapshotSenderLog("SYN WARN ", DEBUG_WARN, 255, pSender, __VA_ARGS__); }
+#define sSInfo(pSender, ...) if (sDebugFlag & DEBUG_INFO) { syncPrintSnapshotSenderLog("SYN ", DEBUG_INFO, 255, pSender, __VA_ARGS__); }
+#define sSDebug(pSender, ...) if (sDebugFlag & DEBUG_DEBUG) { syncPrintSnapshotSenderLog("SYN ", DEBUG_DEBUG, sDebugFlag, pSender, __VA_ARGS__); }
+#define sSTrace(pSender, ...) if (sDebugFlag & DEBUG_TRACE) { syncPrintSnapshotSenderLog("SYN ", DEBUG_TRACE, sDebugFlag, pSender, __VA_ARGS__); }
+
+#define sRFatal(pReceiver, ...) if (sDebugFlag & DEBUG_FATAL) { syncPrintSnapshotReceiverLog("SYN FATAL ", DEBUG_FATAL, 255, pReceiver, __VA_ARGS__); }
+#define sRError(pReceiver, ...) if (sDebugFlag & DEBUG_ERROR) { syncPrintSnapshotReceiverLog("SYN ERROR ", DEBUG_ERROR, 255, pReceiver, __VA_ARGS__); }
+#define sRWarn(pReceiver, ...) if (sDebugFlag & DEBUG_WARN) { syncPrintSnapshotReceiverLog("SYN WARN ", DEBUG_WARN, 255, pReceiver, __VA_ARGS__); }
+#define sRInfo(pReceiver, ...) if (sDebugFlag & DEBUG_INFO) { syncPrintSnapshotReceiverLog("SYN ", DEBUG_INFO, 255, pReceiver, __VA_ARGS__); }
+#define sRDebug(pReceiver, ...) if (sDebugFlag & DEBUG_DEBUG) { syncPrintSnapshotReceiverLog("SYN ", DEBUG_DEBUG, sDebugFlag, pReceiver, __VA_ARGS__); }
+#define sRTrace(pReceiver, ...) if (sDebugFlag & DEBUG_TRACE) { syncPrintSnapshotReceiverLog("SYN ", DEBUG_TRACE, sDebugFlag, pReceiver, __VA_ARGS__); }
+
+// clang-format on
uint64_t syncUtilAddr2U64(const char* host, uint16_t port);
void syncUtilU642Addr(uint64_t u64, char* host, int64_t len, uint16_t* port);
@@ -48,6 +88,39 @@ void syncPrintSnapshotSenderLog(const char* flags, ELogLevel level, int32_t dfla
void syncPrintSnapshotReceiverLog(const char* flags, ELogLevel level, int32_t dflag, SSyncSnapshotReceiver* pReceiver,
const char* format, ...);
+void syncLogRecvTimer(SSyncNode* pSyncNode, const SyncTimeout* pMsg, const char* s);
+void syncLogRecvLocalCmd(SSyncNode* pSyncNode, const SyncLocalCmd* pMsg, const char* s);
+
+void syncLogSendAppendEntriesReply(SSyncNode* pSyncNode, const SyncAppendEntriesReply* pMsg, const char* s);
+void syncLogRecvAppendEntriesReply(SSyncNode* pSyncNode, const SyncAppendEntriesReply* pMsg, const char* s);
+
+void syncLogSendHeartbeat(SSyncNode* pSyncNode, const SyncHeartbeat* pMsg, const char* s);
+void syncLogRecvHeartbeat(SSyncNode* pSyncNode, const SyncHeartbeat* pMsg, const char* s);
+
+void syncLogSendHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s);
+void syncLogRecvHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s);
+
+void syncLogSendSyncPreSnapshot(SSyncNode* pSyncNode, const SyncPreSnapshot* pMsg, const char* s);
+void syncLogRecvSyncPreSnapshot(SSyncNode* pSyncNode, const SyncPreSnapshot* pMsg, const char* s);
+
+void syncLogSendSyncPreSnapshotReply(SSyncNode* pSyncNode, const SyncPreSnapshotReply* pMsg, const char* s);
+void syncLogRecvSyncPreSnapshotReply(SSyncNode* pSyncNode, const SyncPreSnapshotReply* pMsg, const char* s);
+
+void syncLogSendSyncSnapshotSend(SSyncNode* pSyncNode, const SyncSnapshotSend* pMsg, const char* s);
+void syncLogRecvSyncSnapshotSend(SSyncNode* pSyncNode, const SyncSnapshotSend* pMsg, const char* s);
+
+void syncLogSendSyncSnapshotRsp(SSyncNode* pSyncNode, const SyncSnapshotRsp* pMsg, const char* s);
+void syncLogRecvSyncSnapshotRsp(SSyncNode* pSyncNode, const SyncSnapshotRsp* pMsg, const char* s);
+
+void syncLogRecvAppendEntries(SSyncNode* pSyncNode, const SyncAppendEntries* pMsg, const char* s);
+void syncLogSendAppendEntries(SSyncNode* pSyncNode, const SyncAppendEntries* pMsg, const char* s);
+
+void syncLogRecvRequestVote(SSyncNode* pSyncNode, const SyncRequestVote* pMsg, const char* s);
+void syncLogSendRequestVote(SSyncNode* pNode, const SyncRequestVote* pMsg, const char* s);
+
+void syncLogRecvRequestVoteReply(SSyncNode* pSyncNode, const SyncRequestVoteReply* pMsg, const char* s);
+void syncLogSendRequestVoteReply(SSyncNode* pSyncNode, const SyncRequestVoteReply* pMsg, const char* s);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/libs/sync/src/syncAppendEntries.c b/source/libs/sync/src/syncAppendEntries.c
index 12c0430760..4551702b34 100644
--- a/source/libs/sync/src/syncAppendEntries.c
+++ b/source/libs/sync/src/syncAppendEntries.c
@@ -13,15 +13,12 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncAppendEntries.h"
-#include "syncInt.h"
-#include "syncRaftCfg.h"
+#include "syncMessage.h"
#include "syncRaftLog.h"
#include "syncRaftStore.h"
-#include "syncSnapshot.h"
#include "syncUtil.h"
-#include "syncVoteMgr.h"
-#include "wal.h"
// TLA+ Spec
// HandleAppendEntriesRequest(i, j, m) ==
@@ -127,7 +124,10 @@ int32_t syncNodeFollowerCommit(SSyncNode* ths, SyncIndex newCommitIndex) {
return 0;
}
-int32_t syncNodeOnAppendEntries(SSyncNode* ths, SyncAppendEntries* pMsg) {
+int32_t syncNodeOnAppendEntries(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
+ SyncAppendEntries* pMsg = pRpcMsg->pCont;
+ SRpcMsg rpcRsp = {0};
+
// if already drop replica, do not process
if (!syncNodeInRaftGroup(ths, &(pMsg->srcId))) {
syncLogRecvAppendEntries(ths, pMsg, "not in my config");
@@ -135,7 +135,13 @@ int32_t syncNodeOnAppendEntries(SSyncNode* ths, SyncAppendEntries* pMsg) {
}
// prepare response msg
- SyncAppendEntriesReply* pReply = syncAppendEntriesReplyBuild(ths->vgId);
+ int32_t code = syncBuildAppendEntriesReply(&rpcRsp, ths->vgId);
+ if (code != 0) {
+ syncLogRecvAppendEntries(ths, pMsg, "build rsp error");
+ goto _IGNORE;
+ }
+
+ SyncAppendEntriesReply* pReply = rpcRsp.pCont;
pReply->srcId = ths->myRaftId;
pReply->destId = pMsg->srcId;
pReply->term = ths->pRaftStore->currentTerm;
@@ -281,7 +287,7 @@ int32_t syncNodeOnAppendEntries(SSyncNode* ths, SyncAppendEntries* pMsg) {
goto _SEND_RESPONSE;
_IGNORE:
- syncAppendEntriesReplyDestroy(pReply);
+ rpcFreeCont(rpcRsp.pCont);
return 0;
_SEND_RESPONSE:
@@ -289,10 +295,6 @@ _SEND_RESPONSE:
syncLogSendAppendEntriesReply(ths, pReply, "");
// send response
- SRpcMsg rpcMsg;
- syncAppendEntriesReply2RpcMsg(pReply, &rpcMsg);
- syncNodeSendMsgById(&pReply->destId, ths, &rpcMsg);
- syncAppendEntriesReplyDestroy(pReply);
-
+ syncNodeSendMsgById(&pReply->destId, ths, &rpcRsp);
return 0;
}
\ No newline at end of file
diff --git a/source/libs/sync/src/syncAppendEntriesReply.c b/source/libs/sync/src/syncAppendEntriesReply.c
index 2e22ac98a5..875204c0a9 100644
--- a/source/libs/sync/src/syncAppendEntriesReply.c
+++ b/source/libs/sync/src/syncAppendEntriesReply.c
@@ -13,17 +13,15 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncAppendEntriesReply.h"
#include "syncCommit.h"
#include "syncIndexMgr.h"
-#include "syncInt.h"
-#include "syncRaftCfg.h"
-#include "syncRaftLog.h"
+#include "syncMessage.h"
#include "syncRaftStore.h"
#include "syncReplication.h"
#include "syncSnapshot.h"
#include "syncUtil.h"
-#include "syncVoteMgr.h"
// TLA+ Spec
// HandleAppendEntriesResponse(i, j, m) ==
@@ -39,8 +37,9 @@
// /\ UNCHANGED <>
//
-int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, SyncAppendEntriesReply* pMsg) {
- int32_t ret = 0;
+int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
+ int32_t ret = 0;
+ SyncAppendEntriesReply* pMsg = pRpcMsg->pCont;
// if already drop replica, do not process
if (!syncNodeInRaftGroup(ths, &(pMsg->srcId))) {
diff --git a/source/libs/sync/src/syncCommit.c b/source/libs/sync/src/syncCommit.c
index a951b78e1e..d2320fc6be 100644
--- a/source/libs/sync/src/syncCommit.c
+++ b/source/libs/sync/src/syncCommit.c
@@ -13,10 +13,9 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncCommit.h"
#include "syncIndexMgr.h"
-#include "syncInt.h"
-#include "syncRaftCfg.h"
#include "syncRaftLog.h"
#include "syncRaftStore.h"
#include "syncUtil.h"
diff --git a/source/libs/sync/src/syncElection.c b/source/libs/sync/src/syncElection.c
index 85e4572877..5c41e43fd4 100644
--- a/source/libs/sync/src/syncElection.c
+++ b/source/libs/sync/src/syncElection.c
@@ -18,8 +18,8 @@
#include "syncMessage.h"
#include "syncRaftCfg.h"
#include "syncRaftStore.h"
-#include "syncVoteMgr.h"
#include "syncUtil.h"
+#include "syncVoteMgr.h"
// TLA+ Spec
// RequestVote(i, j) ==
@@ -33,6 +33,33 @@
// mdest |-> j])
// /\ UNCHANGED <>
+static int32_t syncNodeRequestVotePeers(SSyncNode* pNode) {
+ if (pNode->state != TAOS_SYNC_STATE_CANDIDATE) {
+ sNTrace(pNode, "not candidate, stop elect");
+ return 0;
+ }
+
+ int32_t ret = 0;
+ for (int i = 0; i < pNode->peersNum; ++i) {
+ SRpcMsg rpcMsg = {0};
+ ret = syncBuildRequestVote(&rpcMsg, pNode->vgId);
+ ASSERT(ret == 0);
+
+ SyncRequestVote* pMsg = rpcMsg.pCont;
+ pMsg->srcId = pNode->myRaftId;
+ pMsg->destId = pNode->peersId[i];
+ pMsg->term = pNode->pRaftStore->currentTerm;
+
+ ret = syncNodeGetLastIndexTerm(pNode, &pMsg->lastLogIndex, &pMsg->lastLogTerm);
+ ASSERT(ret == 0);
+
+ ret = syncNodeSendMsgById(&pNode->peersId[i], pNode, &rpcMsg);
+ ASSERT(ret == 0);
+ }
+
+ return ret;
+}
+
int32_t syncNodeElect(SSyncNode* pSyncNode) {
sNTrace(pSyncNode, "begin election");
@@ -81,36 +108,3 @@ int32_t syncNodeElect(SSyncNode* pSyncNode) {
return ret;
}
-
-int32_t syncNodeRequestVotePeers(SSyncNode* pSyncNode) {
- if (pSyncNode->state != TAOS_SYNC_STATE_CANDIDATE) {
- sNTrace(pSyncNode, "not candidate, stop elect");
- return 0;
- }
-
- int32_t ret = 0;
- for (int i = 0; i < pSyncNode->peersNum; ++i) {
- SyncRequestVote* pMsg = syncRequestVoteBuild(pSyncNode->vgId);
- pMsg->srcId = pSyncNode->myRaftId;
- pMsg->destId = pSyncNode->peersId[i];
- pMsg->term = pSyncNode->pRaftStore->currentTerm;
-
- ret = syncNodeGetLastIndexTerm(pSyncNode, &(pMsg->lastLogIndex), &(pMsg->lastLogTerm));
- ASSERT(ret == 0);
-
- ret = syncNodeSendRequestVote(pSyncNode, &pSyncNode->peersId[i], pMsg);
- ASSERT(ret == 0);
- syncRequestVoteDestroy(pMsg);
- }
- return ret;
-}
-
-int32_t syncNodeSendRequestVote(SSyncNode* pSyncNode, const SRaftId* destRaftId, const SyncRequestVote* pMsg) {
- int32_t ret = 0;
- syncLogSendRequestVote(pSyncNode, pMsg, "");
-
- SRpcMsg rpcMsg;
- syncRequestVote2RpcMsg(pMsg, &rpcMsg);
- syncNodeSendMsgById(destRaftId, pSyncNode, &rpcMsg);
- return ret;
-}
\ No newline at end of file
diff --git a/source/libs/sync/src/syncEnv.c b/source/libs/sync/src/syncEnv.c
index 3f3b794f46..2abc8c0b7f 100644
--- a/source/libs/sync/src/syncEnv.c
+++ b/source/libs/sync/src/syncEnv.c
@@ -15,11 +15,11 @@
#define _DEFAULT_SOURCE
#include "syncEnv.h"
+#include "syncUtil.h"
#include "tref.h"
static SSyncEnv gSyncEnv = {0};
static int32_t gNodeRefId = -1;
-bool gRaftDetailLog = false;
static void syncEnvTick(void *param, void *tmrId);
SSyncEnv *syncEnv() { return &gSyncEnv; }
@@ -105,6 +105,7 @@ void syncEnvStopTimer() {
#endif
static void syncEnvTick(void *param, void *tmrId) {
+#if 0
SSyncEnv *pSyncEnv = param;
if (atomic_load_64(&gSyncEnv.envTickTimerLogicClockUser) <= atomic_load_64(&gSyncEnv.envTickTimerLogicClock)) {
gSyncEnv.envTickTimerCounter++;
@@ -121,4 +122,5 @@ static void syncEnvTick(void *param, void *tmrId) {
gSyncEnv.envTickTimerLogicClockUser, gSyncEnv.envTickTimerLogicClock, gSyncEnv.envTickTimerCounter,
gSyncEnv.envTickTimerMS, tmrId);
}
+#endif
}
diff --git a/source/libs/sync/src/syncIndexMgr.c b/source/libs/sync/src/syncIndexMgr.c
index 8e78aeedc3..ca5e531528 100644
--- a/source/libs/sync/src/syncIndexMgr.c
+++ b/source/libs/sync/src/syncIndexMgr.c
@@ -13,18 +13,16 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncIndexMgr.h"
#include "syncUtil.h"
-// SMatchIndex -----------------------------
-
SSyncIndexMgr *syncIndexMgrCreate(SSyncNode *pSyncNode) {
- SSyncIndexMgr *pSyncIndexMgr = taosMemoryMalloc(sizeof(SSyncIndexMgr));
+ SSyncIndexMgr *pSyncIndexMgr = taosMemoryCalloc(1, sizeof(SSyncIndexMgr));
if (pSyncIndexMgr == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return NULL;
}
- memset(pSyncIndexMgr, 0, sizeof(SSyncIndexMgr));
pSyncIndexMgr->replicas = &(pSyncNode->replicasId);
pSyncIndexMgr->replicaNum = pSyncNode->replicaNum;
@@ -97,54 +95,6 @@ SyncIndex syncIndexMgrGetIndex(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaf
return SYNC_INDEX_INVALID;
}
-cJSON *syncIndexMgr2Json(SSyncIndexMgr *pSyncIndexMgr) {
- char u64buf[128] = {0};
- cJSON *pRoot = cJSON_CreateObject();
-
- if (pSyncIndexMgr != NULL) {
- cJSON_AddNumberToObject(pRoot, "replicaNum", pSyncIndexMgr->replicaNum);
- cJSON *pReplicas = cJSON_CreateArray();
- cJSON_AddItemToObject(pRoot, "replicas", pReplicas);
- for (int i = 0; i < pSyncIndexMgr->replicaNum; ++i) {
- cJSON_AddItemToArray(pReplicas, syncUtilRaftId2Json(&(*(pSyncIndexMgr->replicas))[i]));
- }
-
- {
- int *arr = (int *)taosMemoryMalloc(sizeof(int) * pSyncIndexMgr->replicaNum);
- for (int i = 0; i < pSyncIndexMgr->replicaNum; ++i) {
- arr[i] = pSyncIndexMgr->index[i];
- }
- cJSON *pIndex = cJSON_CreateIntArray(arr, pSyncIndexMgr->replicaNum);
- taosMemoryFree(arr);
- cJSON_AddItemToObject(pRoot, "index", pIndex);
- }
-
- {
- int *arr = (int *)taosMemoryMalloc(sizeof(int) * pSyncIndexMgr->replicaNum);
- for (int i = 0; i < pSyncIndexMgr->replicaNum; ++i) {
- arr[i] = pSyncIndexMgr->privateTerm[i];
- }
- cJSON *pIndex = cJSON_CreateIntArray(arr, pSyncIndexMgr->replicaNum);
- taosMemoryFree(arr);
- cJSON_AddItemToObject(pRoot, "privateTerm", pIndex);
- }
-
- snprintf(u64buf, sizeof(u64buf), "%p", pSyncIndexMgr->pSyncNode);
- cJSON_AddStringToObject(pRoot, "pSyncNode", u64buf);
- }
-
- cJSON *pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "pSyncIndexMgr", pRoot);
- return pJson;
-}
-
-char *syncIndexMgr2Str(SSyncIndexMgr *pSyncIndexMgr) {
- cJSON *pJson = syncIndexMgr2Json(pSyncIndexMgr);
- char *serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
void syncIndexMgrSetStartTime(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, int64_t startTime) {
for (int i = 0; i < pSyncIndexMgr->replicaNum; ++i) {
if (syncUtilSameId(&((*(pSyncIndexMgr->replicas))[i]), pRaftId)) {
@@ -201,35 +151,6 @@ int64_t syncIndexMgrGetRecvTime(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRa
return -1;
}
-// for debug -------------------
-void syncIndexMgrPrint(SSyncIndexMgr *pObj) {
- char *serialized = syncIndexMgr2Str(pObj);
- printf("syncIndexMgrPrint | len:%" PRIu64 " | %s \n", (uint64_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncIndexMgrPrint2(char *s, SSyncIndexMgr *pObj) {
- char *serialized = syncIndexMgr2Str(pObj);
- printf("syncIndexMgrPrint2 | len:%" PRIu64 " | %s | %s \n", (uint64_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncIndexMgrLog(SSyncIndexMgr *pObj) {
- char *serialized = syncIndexMgr2Str(pObj);
- sTrace("syncIndexMgrLog | len:%" PRIu64 " | %s", (uint64_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncIndexMgrLog2(char *s, SSyncIndexMgr *pObj) {
- if (gRaftDetailLog) {
- char *serialized = syncIndexMgr2Str(pObj);
- sTrace("syncIndexMgrLog2 | len:%" PRIu64 " | %s | %s", (uint64_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
void syncIndexMgrSetTerm(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, SyncTerm term) {
for (int i = 0; i < pSyncIndexMgr->replicaNum; ++i) {
if (syncUtilSameId(&((*(pSyncIndexMgr->replicas))[i]), pRaftId)) {
diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c
index b650cd81ab..7ed90fb140 100644
--- a/source/libs/sync/src/syncMain.c
+++ b/source/libs/sync/src/syncMain.c
@@ -45,6 +45,18 @@ static bool syncIsConfigChanged(const SSyncCfg* pOldCfg, const SSyncCfg* pNew
static int32_t syncHbTimerInit(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer, SRaftId destId);
static int32_t syncHbTimerStart(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer);
static int32_t syncHbTimerStop(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer);
+static int32_t syncNodeUpdateNewConfigIndex(SSyncNode* ths, SSyncCfg* pNewCfg);
+static bool syncNodeInConfig(SSyncNode* pSyncNode, const SSyncCfg* config);
+static void syncNodeDoConfigChange(SSyncNode* pSyncNode, SSyncCfg* newConfig, SyncIndex lastConfigChangeIndex);
+static bool syncNodeIsOptimizedOneReplica(SSyncNode* ths, SRpcMsg* pMsg);
+
+static bool syncNodeCanChange(SSyncNode* pSyncNode);
+static int32_t syncNodeLeaderTransfer(SSyncNode* pSyncNode);
+static int32_t syncNodeLeaderTransferTo(SSyncNode* pSyncNode, SNodeInfo newLeader);
+static int32_t syncDoLeaderTransfer(SSyncNode* ths, SRpcMsg* pRpcMsg, SSyncRaftEntry* pEntry);
+
+static ESyncStrategy syncNodeStrategy(SSyncNode* pSyncNode);
+static SyncIndex syncNodeGetSnapshotConfigIndex(SSyncNode* pSyncNode, SyncIndex snapshotLastApplyIndex);
int64_t syncOpen(SSyncInfo* pSyncInfo) {
SSyncNode* pSyncNode = syncNodeOpen(pSyncInfo);
@@ -133,59 +145,44 @@ int32_t syncProcessMsg(int64_t rid, SRpcMsg* pMsg) {
SSyncNode* pSyncNode = syncNodeAcquire(rid);
if (pSyncNode == NULL) return code;
- if (pMsg->msgType == TDMT_SYNC_HEARTBEAT) {
- SyncHeartbeat* pSyncMsg = syncHeartbeatFromRpcMsg2(pMsg);
- code = syncNodeOnHeartbeat(pSyncNode, pSyncMsg);
- syncHeartbeatDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_HEARTBEAT_REPLY) {
- SyncHeartbeatReply* pSyncMsg = syncHeartbeatReplyFromRpcMsg2(pMsg);
- code = syncNodeOnHeartbeatReply(pSyncNode, pSyncMsg);
- syncHeartbeatReplyDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_TIMEOUT) {
- SyncTimeout* pSyncMsg = syncTimeoutFromRpcMsg2(pMsg);
- code = syncNodeOnTimer(pSyncNode, pSyncMsg);
- syncTimeoutDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_PING) {
- SyncPing* pSyncMsg = syncPingFromRpcMsg2(pMsg);
- code = syncNodeOnPing(pSyncNode, pSyncMsg);
- syncPingDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_PING_REPLY) {
- SyncPingReply* pSyncMsg = syncPingReplyFromRpcMsg2(pMsg);
- code = syncNodeOnPingReply(pSyncNode, pSyncMsg);
- syncPingReplyDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_CLIENT_REQUEST) {
- code = syncNodeOnClientRequest(pSyncNode, pMsg, NULL);
- } else if (pMsg->msgType == TDMT_SYNC_REQUEST_VOTE) {
- SyncRequestVote* pSyncMsg = syncRequestVoteFromRpcMsg2(pMsg);
- code = syncNodeOnRequestVote(pSyncNode, pSyncMsg);
- syncRequestVoteDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_REQUEST_VOTE_REPLY) {
- SyncRequestVoteReply* pSyncMsg = syncRequestVoteReplyFromRpcMsg2(pMsg);
- code = syncNodeOnRequestVoteReply(pSyncNode, pSyncMsg);
- syncRequestVoteReplyDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_APPEND_ENTRIES) {
- SyncAppendEntries* pSyncMsg = syncAppendEntriesFromRpcMsg2(pMsg);
- code = syncNodeOnAppendEntries(pSyncNode, pSyncMsg);
- syncAppendEntriesDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_APPEND_ENTRIES_REPLY) {
- SyncAppendEntriesReply* pSyncMsg = syncAppendEntriesReplyFromRpcMsg2(pMsg);
- code = syncNodeOnAppendEntriesReply(pSyncNode, pSyncMsg);
- syncAppendEntriesReplyDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_SNAPSHOT_SEND) {
- SyncSnapshotSend* pSyncMsg = syncSnapshotSendFromRpcMsg2(pMsg);
- code = syncNodeOnSnapshot(pSyncNode, pSyncMsg);
- syncSnapshotSendDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_SNAPSHOT_RSP) {
- SyncSnapshotRsp* pSyncMsg = syncSnapshotRspFromRpcMsg2(pMsg);
- code = syncNodeOnSnapshotReply(pSyncNode, pSyncMsg);
- syncSnapshotRspDestroy(pSyncMsg);
- } else if (pMsg->msgType == TDMT_SYNC_LOCAL_CMD) {
- SyncLocalCmd* pSyncMsg = syncLocalCmdFromRpcMsg2(pMsg);
- code = syncNodeOnLocalCmd(pSyncNode, pSyncMsg);
- syncLocalCmdDestroy(pSyncMsg);
- } else {
- sError("vgId:%d, failed to process msg:%p since invalid type:%s", pSyncNode->vgId, pMsg, TMSG_INFO(pMsg->msgType));
- code = -1;
+ switch (pMsg->msgType) {
+ case TDMT_SYNC_HEARTBEAT:
+ code = syncNodeOnHeartbeat(pSyncNode, pMsg);
+ break;
+ case TDMT_SYNC_HEARTBEAT_REPLY:
+ code = syncNodeOnHeartbeatReply(pSyncNode, pMsg);
+ break;
+ case TDMT_SYNC_TIMEOUT:
+ code = syncNodeOnTimeout(pSyncNode, pMsg);
+ break;
+ case TDMT_SYNC_CLIENT_REQUEST:
+ code = syncNodeOnClientRequest(pSyncNode, pMsg, NULL);
+ break;
+ case TDMT_SYNC_REQUEST_VOTE:
+ code = syncNodeOnRequestVote(pSyncNode, pMsg);
+ break;
+ case TDMT_SYNC_REQUEST_VOTE_REPLY:
+ code = syncNodeOnRequestVoteReply(pSyncNode, pMsg);
+ break;
+ case TDMT_SYNC_APPEND_ENTRIES:
+ code = syncNodeOnAppendEntries(pSyncNode, pMsg);
+ break;
+ case TDMT_SYNC_APPEND_ENTRIES_REPLY:
+ code = syncNodeOnAppendEntriesReply(pSyncNode, pMsg);
+ break;
+ case TDMT_SYNC_SNAPSHOT_SEND:
+ code = syncNodeOnSnapshot(pSyncNode, pMsg);
+ break;
+ case TDMT_SYNC_SNAPSHOT_RSP:
+ code = syncNodeOnSnapshotReply(pSyncNode, pMsg);
+ break;
+ case TDMT_SYNC_LOCAL_CMD:
+ code = syncNodeOnLocalCmd(pSyncNode, pMsg);
+ break;
+ default:
+ sError("vgId:%d, failed to process msg:%p since invalid type:%s", pSyncNode->vgId, pMsg,
+ TMSG_INFO(pMsg->msgType));
+ code = -1;
}
syncNodeRelease(pSyncNode);
@@ -388,7 +385,7 @@ bool syncIsReadyForRead(int64_t rid) {
if (!pSyncNode->pLogStore->syncLogIsEmpty(pSyncNode->pLogStore)) {
SSyncRaftEntry* pEntry = NULL;
int32_t code = pSyncNode->pLogStore->syncLogGetEntry(
- pSyncNode->pLogStore, pSyncNode->pLogStore->syncLogLastIndex(pSyncNode->pLogStore), &pEntry);
+ pSyncNode->pLogStore, pSyncNode->pLogStore->syncLogLastIndex(pSyncNode->pLogStore), &pEntry);
if (code == 0 && pEntry != NULL) {
if (pEntry->originalRpcType == TDMT_SYNC_NOOP && pEntry->term == pSyncNode->pRaftStore->currentTerm) {
ready = true;
@@ -437,17 +434,15 @@ int32_t syncNodeLeaderTransferTo(SSyncNode* pSyncNode, SNodeInfo newLeader) {
sNTrace(pSyncNode, "begin leader transfer to %s:%u", newLeader.nodeFqdn, newLeader.nodePort);
- SyncLeaderTransfer* pMsg = syncLeaderTransferBuild(pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildLeaderTransfer(&rpcMsg, pSyncNode->vgId);
+
+ SyncLeaderTransfer* pMsg = rpcMsg.pCont;
pMsg->newLeaderId.addr = syncUtilAddr2U64(newLeader.nodeFqdn, newLeader.nodePort);
pMsg->newLeaderId.vgId = pSyncNode->vgId;
pMsg->newNodeInfo = newLeader;
- ASSERT(pMsg != NULL);
- SRpcMsg rpcMsg = {0};
- syncLeaderTransfer2RpcMsg(pMsg, &rpcMsg);
- syncLeaderTransferDestroy(pMsg);
- int32_t ret = syncNodePropose(pSyncNode, &rpcMsg, false);
- return ret;
+ return syncNodePropose(pSyncNode, &rpcMsg, false);
}
SSyncState syncGetState(int64_t rid) {
@@ -619,7 +614,7 @@ int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak) {
SRespStub stub = {.createTime = taosGetTimestampMs(), .rpcMsg = *pMsg};
uint64_t seqNum = syncRespMgrAdd(pSyncNode->pSyncRespMgr, &stub);
SRpcMsg rpcMsg = {0};
- int32_t code = syncClientRequestBuildFromRpcMsg(&rpcMsg, pMsg, seqNum, isWeak, pSyncNode->vgId);
+ int32_t code = syncBuildClientRequest(&rpcMsg, pMsg, seqNum, isWeak, pSyncNode->vgId);
if (code != 0) {
sError("vgId:%d, failed to propose msg while serialize since %s", pSyncNode->vgId, terrstr());
(void)syncRespMgrDel(pSyncNode->pSyncRespMgr, seqNum);
@@ -906,18 +901,6 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo) {
syncHbTimerInit(pSyncNode, &(pSyncNode->peerHeartbeatTimerArr[i]), (pSyncNode->replicasId)[i]);
}
- // init callback
- pSyncNode->FpOnPing = syncNodeOnPing;
- pSyncNode->FpOnPingReply = syncNodeOnPingReply;
- pSyncNode->FpOnClientRequest = syncNodeOnClientRequest;
- pSyncNode->FpOnTimeout = syncNodeOnTimer;
- pSyncNode->FpOnSnapshot = syncNodeOnSnapshot;
- pSyncNode->FpOnSnapshotReply = syncNodeOnSnapshotReply;
- pSyncNode->FpOnRequestVote = syncNodeOnRequestVote;
- pSyncNode->FpOnRequestVoteReply = syncNodeOnRequestVoteReply;
- pSyncNode->FpOnAppendEntries = syncNodeOnAppendEntries;
- pSyncNode->FpOnAppendEntriesReply = syncNodeOnAppendEntriesReply;
-
// tools
pSyncNode->pSyncRespMgr = syncRespMgrCreate(pSyncNode, SYNC_RESP_TTL_MS);
if (pSyncNode->pSyncRespMgr == NULL) {
@@ -1076,9 +1059,6 @@ void syncNodeClose(SSyncNode* pSyncNode) {
taosMemoryFree(pSyncNode);
}
-// option
-// bool syncNodeSnapshotEnable(SSyncNode* pSyncNode) { return pSyncNode->pRaftCfg->snapshotEnable; }
-
ESyncStrategy syncNodeStrategy(SSyncNode* pSyncNode) { return pSyncNode->pRaftCfg->snapshotStrategy; }
// timer control --------------
@@ -1222,6 +1202,7 @@ int32_t syncNodeSendMsgById(const SRaftId* destRaftId, SSyncNode* pSyncNode, SRp
pSyncNode->syncSendMSg(&epSet, pMsg);
} else {
sError("vgId:%d, sync send msg by id error, fp-send-msg is null", pSyncNode->vgId);
+ rpcFreeCont(pMsg->pCont);
return -1;
}
@@ -1663,8 +1644,6 @@ void syncNodeCandidate2Follower(SSyncNode* pSyncNode) {
sNTrace(pSyncNode, "candidate to follower");
}
-// raft vote --------------
-
// just called by syncNodeVoteForSelf
// need assert
void syncNodeVoteForTerm(SSyncNode* pSyncNode, SyncTerm term, SRaftId* pRaftId) {
@@ -1676,9 +1655,13 @@ void syncNodeVoteForTerm(SSyncNode* pSyncNode, SyncTerm term, SRaftId* pRaftId)
// simulate get vote from outside
void syncNodeVoteForSelf(SSyncNode* pSyncNode) {
- syncNodeVoteForTerm(pSyncNode, pSyncNode->pRaftStore->currentTerm, &(pSyncNode->myRaftId));
+ syncNodeVoteForTerm(pSyncNode, pSyncNode->pRaftStore->currentTerm, &pSyncNode->myRaftId);
- SyncRequestVoteReply* pMsg = syncRequestVoteReplyBuild(pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ int32_t ret = syncBuildRequestVoteReply(&rpcMsg, pSyncNode->vgId);
+ if (ret != 0) return;
+
+ SyncRequestVoteReply* pMsg = rpcMsg.pCont;
pMsg->srcId = pSyncNode->myRaftId;
pMsg->destId = pSyncNode->myRaftId;
pMsg->term = pSyncNode->pRaftStore->currentTerm;
@@ -1686,11 +1669,9 @@ void syncNodeVoteForSelf(SSyncNode* pSyncNode) {
voteGrantedVote(pSyncNode->pVotesGranted, pMsg);
votesRespondAdd(pSyncNode->pVotesRespond, pMsg);
- syncRequestVoteReplyDestroy(pMsg);
+ rpcFreeCont(rpcMsg.pCont);
}
-// snapshot --------------
-
// return if has a snapshot
bool syncNodeHasSnapshot(SSyncNode* pSyncNode) {
bool ret = false;
@@ -1817,70 +1798,67 @@ int32_t syncNodeGetPreIndexTerm(SSyncNode* pSyncNode, SyncIndex index, SyncIndex
}
static void syncNodeEqPingTimer(void* param, void* tmrId) {
- SSyncNode* pSyncNode = (SSyncNode*)param;
- if (atomic_load_64(&pSyncNode->pingTimerLogicClockUser) <= atomic_load_64(&pSyncNode->pingTimerLogicClock)) {
- SyncTimeout* pSyncMsg = syncTimeoutBuild2(SYNC_TIMEOUT_PING, atomic_load_64(&pSyncNode->pingTimerLogicClock),
- pSyncNode->pingTimerMS, pSyncNode->vgId, pSyncNode);
- SRpcMsg rpcMsg;
- syncTimeout2RpcMsg(pSyncMsg, &rpcMsg);
- sNTrace(pSyncNode, "enqueue ping timer");
- if (pSyncNode->syncEqMsg != NULL) {
- int32_t code = pSyncNode->syncEqMsg(pSyncNode->msgcb, &rpcMsg);
- if (code != 0) {
- sError("vgId:%d, sync enqueue ping msg error, code:%d", pSyncNode->vgId, code);
- rpcFreeCont(rpcMsg.pCont);
- syncTimeoutDestroy(pSyncMsg);
- return;
- }
- } else {
- sTrace("syncNodeEqPingTimer pSyncNode->syncEqMsg is NULL");
- }
- syncTimeoutDestroy(pSyncMsg);
+ if (!syncIsInit()) return;
- if (syncIsInit()) {
- taosTmrReset(syncNodeEqPingTimer, pSyncNode->pingTimerMS, pSyncNode, syncEnv()->pTimerManager,
- &pSyncNode->pPingTimer);
- } else {
- sError("sync env is stop, syncNodeEqPingTimer");
+ SSyncNode* pNode = param;
+ if (atomic_load_64(&pNode->pingTimerLogicClockUser) <= atomic_load_64(&pNode->pingTimerLogicClock)) {
+ SRpcMsg rpcMsg = {0};
+ int32_t code = syncBuildTimeout(&rpcMsg, SYNC_TIMEOUT_PING, atomic_load_64(&pNode->pingTimerLogicClock),
+ pNode->pingTimerMS, pNode);
+ if (code != 0) {
+ sNError(pNode, "failed to build ping msg");
+ rpcFreeCont(rpcMsg.pCont);
+ return;
}
+ sNTrace(pNode, "enqueue ping msg");
+ code = pNode->syncEqMsg(pNode->msgcb, &rpcMsg);
+ if (code != 0) {
+ sNError(pNode, "failed to sync enqueue ping msg since %s", terrstr());
+ rpcFreeCont(rpcMsg.pCont);
+ return;
+ }
+
+ taosTmrReset(syncNodeEqPingTimer, pNode->pingTimerMS, pNode, syncEnv()->pTimerManager, &pNode->pPingTimer);
} else {
sTrace("==syncNodeEqPingTimer== pingTimerLogicClock:%" PRId64 ", pingTimerLogicClockUser:%" PRId64,
- pSyncNode->pingTimerLogicClock, pSyncNode->pingTimerLogicClockUser);
+ pNode->pingTimerLogicClock, pNode->pingTimerLogicClockUser);
}
}
static void syncNodeEqElectTimer(void* param, void* tmrId) {
- SElectTimer* pElectTimer = (SElectTimer*)param;
- SSyncNode* pSyncNode = pElectTimer->pSyncNode;
+ if (!syncIsInit()) return;
- SyncTimeout* pSyncMsg = syncTimeoutBuild2(SYNC_TIMEOUT_ELECTION, pElectTimer->logicClock, pSyncNode->electTimerMS,
- pSyncNode->vgId, pSyncNode);
- SRpcMsg rpcMsg;
- syncTimeout2RpcMsg(pSyncMsg, &rpcMsg);
- if (pSyncNode->syncEqMsg != NULL && pSyncNode->msgcb != NULL && pSyncNode->msgcb->putToQueueFp != NULL) {
- int32_t code = pSyncNode->syncEqMsg(pSyncNode->msgcb, &rpcMsg);
- if (code != 0) {
- sError("vgId:%d, sync enqueue elect msg error, code:%d", pSyncNode->vgId, code);
- rpcFreeCont(rpcMsg.pCont);
- syncTimeoutDestroy(pSyncMsg);
- taosMemoryFree(pElectTimer);
- return;
- }
- sNTrace(pSyncNode, "eq elect timer lc:%" PRId64, pSyncMsg->logicClock);
- } else {
- sTrace("syncNodeEqElectTimer syncEqMsg is NULL");
+ SElectTimer* pElectTimer = param;
+ SSyncNode* pNode = pElectTimer->pSyncNode;
+
+ SRpcMsg rpcMsg = {0};
+ int32_t code = syncBuildTimeout(&rpcMsg, SYNC_TIMEOUT_ELECTION, pElectTimer->logicClock, pNode->electTimerMS, pNode);
+
+ if (code != 0) {
+ sNError(pNode, "failed to build elect msg");
+ taosMemoryFree(pElectTimer);
+ return;
+ }
+
+ SyncTimeout* pTimeout = rpcMsg.pCont;
+ sNTrace(pNode, "enqueue elect msg lc:%" PRId64, pTimeout->logicClock);
+
+ code = pNode->syncEqMsg(pNode->msgcb, &rpcMsg);
+ if (code != 0) {
+ sNError(pNode, "failed to sync enqueue elect msg since %s", terrstr());
+ rpcFreeCont(rpcMsg.pCont);
+ taosMemoryFree(pElectTimer);
+ return;
}
- syncTimeoutDestroy(pSyncMsg);
taosMemoryFree(pElectTimer);
#if 0
// reset timer ms
- if (syncIsInit() && pSyncNode->electBaseLine > 0) {
- pSyncNode->electTimerMS = syncUtilElectRandomMS(pSyncNode->electBaseLine, 2 * pSyncNode->electBaseLine);
- taosTmrReset(syncNodeEqElectTimer, pSyncNode->electTimerMS, pSyncNode, syncEnv()->pTimerManager,
- &pSyncNode->pElectTimer);
+ if (syncIsInit() && pNode->electBaseLine > 0) {
+ pNode->electTimerMS = syncUtilElectRandomMS(pNode->electBaseLine, 2 * pNode->electBaseLine);
+ taosTmrReset(syncNodeEqElectTimer, pNode->electTimerMS, pNode, syncEnv()->pTimerManager, &pNode->pElectTimer);
} else {
sError("sync env is stop, syncNodeEqElectTimer");
}
@@ -1888,41 +1866,34 @@ static void syncNodeEqElectTimer(void* param, void* tmrId) {
}
static void syncNodeEqHeartbeatTimer(void* param, void* tmrId) {
- SSyncNode* pSyncNode = (SSyncNode*)param;
- sNTrace(pSyncNode, "eq hb timer");
+ if (!syncIsInit()) return;
- if (pSyncNode->replicaNum > 1) {
- if (atomic_load_64(&pSyncNode->heartbeatTimerLogicClockUser) <=
- atomic_load_64(&pSyncNode->heartbeatTimerLogicClock)) {
- SyncTimeout* pSyncMsg =
- syncTimeoutBuild2(SYNC_TIMEOUT_HEARTBEAT, atomic_load_64(&pSyncNode->heartbeatTimerLogicClock),
- pSyncNode->heartbeatTimerMS, pSyncNode->vgId, pSyncNode);
- SRpcMsg rpcMsg;
- syncTimeout2RpcMsg(pSyncMsg, &rpcMsg);
- sNTrace(pSyncNode, "enqueue heartbeat timer");
- if (pSyncNode->syncEqMsg != NULL) {
- int32_t code = pSyncNode->syncEqMsg(pSyncNode->msgcb, &rpcMsg);
- if (code != 0) {
- sError("vgId:%d, sync enqueue timer msg error, code:%d", pSyncNode->vgId, code);
- rpcFreeCont(rpcMsg.pCont);
- syncTimeoutDestroy(pSyncMsg);
- return;
- }
- } else {
- sError("vgId:%d, enqueue msg cb ptr (i.e. syncEqMsg) not set.", pSyncNode->vgId);
- }
- syncTimeoutDestroy(pSyncMsg);
+ SSyncNode* pNode = param;
+ if (pNode->replicaNum > 1) {
+ if (atomic_load_64(&pNode->heartbeatTimerLogicClockUser) <= atomic_load_64(&pNode->heartbeatTimerLogicClock)) {
+ SRpcMsg rpcMsg = {0};
+ int32_t code = syncBuildTimeout(&rpcMsg, SYNC_TIMEOUT_HEARTBEAT, atomic_load_64(&pNode->heartbeatTimerLogicClock),
+ pNode->heartbeatTimerMS, pNode);
- if (syncIsInit()) {
- taosTmrReset(syncNodeEqHeartbeatTimer, pSyncNode->heartbeatTimerMS, pSyncNode, syncEnv()->pTimerManager,
- &pSyncNode->pHeartbeatTimer);
- } else {
- sError("sync env is stop, syncNodeEqHeartbeatTimer");
+ if (code != 0) {
+ sNError(pNode, "failed to build heartbeat msg");
+ return;
}
+
+ sNTrace(pNode, "enqueue heartbeat timer");
+ code = pNode->syncEqMsg(pNode->msgcb, &rpcMsg);
+ if (code != 0) {
+ sNError(pNode, "failed to enqueue heartbeat msg since %s", terrstr());
+ rpcFreeCont(rpcMsg.pCont);
+ return;
+ }
+
+ taosTmrReset(syncNodeEqHeartbeatTimer, pNode->heartbeatTimerMS, pNode, syncEnv()->pTimerManager,
+ &pNode->pHeartbeatTimer);
+
} else {
- sTrace("==syncNodeEqHeartbeatTimer== heartbeatTimerLogicClock:%" PRId64 ", heartbeatTimerLogicClockUser:%" PRId64
- "",
- pSyncNode->heartbeatTimerLogicClock, pSyncNode->heartbeatTimerLogicClockUser);
+ sTrace("==syncNodeEqHeartbeatTimer== heartbeatTimerLogicClock:%" PRId64 ", heartbeatTimerLogicClockUser:%" PRId64,
+ pNode->heartbeatTimerLogicClock, pNode->heartbeatTimerLogicClockUser);
}
}
}
@@ -1951,7 +1922,10 @@ static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId) {
if (pSyncNode->replicaNum > 1) {
if (timerLogicClock == msgLogicClock) {
- SyncHeartbeat* pSyncMsg = syncHeartbeatBuild(pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildHeartbeat(&rpcMsg, pSyncNode->vgId);
+
+ SyncHeartbeat* pSyncMsg = rpcMsg.pCont;
pSyncMsg->srcId = pSyncNode->myRaftId;
pSyncMsg->destId = pData->destId;
pSyncMsg->term = pSyncNode->pRaftStore->currentTerm;
@@ -1959,28 +1933,8 @@ static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId) {
pSyncMsg->minMatchIndex = syncMinMatchIndex(pSyncNode);
pSyncMsg->privateTerm = 0;
- SRpcMsg rpcMsg;
- syncHeartbeat2RpcMsg(pSyncMsg, &rpcMsg);
-
-// eq msg
-#if 0
- if (pSyncNode->syncEqCtrlMsg != NULL) {
- int32_t code = pSyncNode->syncEqCtrlMsg(pSyncNode->msgcb, &rpcMsg);
- if (code != 0) {
- sError("vgId:%d, sync ctrl enqueue timer msg error, code:%d", pSyncNode->vgId, code);
- rpcFreeCont(rpcMsg.pCont);
- syncHeartbeatDestroy(pSyncMsg);
- return;
- }
- } else {
- sError("vgId:%d, enqueue ctrl msg cb ptr (i.e. syncEqMsg) not set.", pSyncNode->vgId);
- }
-#endif
-
// send msg
- syncNodeSendHeartbeat(pSyncNode, &(pSyncMsg->destId), pSyncMsg);
-
- syncHeartbeatDestroy(pSyncMsg);
+ syncNodeSendHeartbeat(pSyncNode, &pSyncMsg->destId, &rpcMsg);
if (syncIsInit()) {
taosTmrReset(syncNodeEqPeerHeartbeatTimer, pSyncTimer->timerMS, pData, syncEnv()->pTimerManager,
@@ -2008,7 +1962,7 @@ static int32_t syncNodeEqNoop(SSyncNode* pNode) {
if (pEntry == NULL) return -1;
SRpcMsg rpcMsg = {0};
- int32_t code = syncClientRequestBuildFromNoopEntry(&rpcMsg, pEntry, pNode->vgId);
+ int32_t code = syncBuildClientRequestFromNoopEntry(&rpcMsg, pEntry, pNode->vgId);
syncEntryDestory(pEntry);
sNTrace(pNode, "propose msg, type:noop");
@@ -2062,58 +2016,32 @@ static int32_t syncNodeAppendNoop(SSyncNode* ths) {
return ret;
}
-// on message ----
-int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg) {
- sTrace("vgId:%d, recv sync-ping", ths->vgId);
-
- SyncPingReply* pMsgReply = syncPingReplyBuild3(&ths->myRaftId, &pMsg->srcId, ths->vgId);
- SRpcMsg rpcMsg;
- syncPingReply2RpcMsg(pMsgReply, &rpcMsg);
-
- /*
- // htonl
- SMsgHead* pHead = rpcMsg.pCont;
- pHead->contLen = htonl(pHead->contLen);
- pHead->vgId = htonl(pHead->vgId);
- */
-
- syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg);
- syncPingReplyDestroy(pMsgReply);
-
- return 0;
-}
-
-int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg) {
- int32_t ret = 0;
- sTrace("vgId:%d, recv sync-ping-reply", ths->vgId);
- return ret;
-}
-
-int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg) {
+int32_t syncNodeOnHeartbeat(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
+ SyncHeartbeat* pMsg = pRpcMsg->pCont;
syncLogRecvHeartbeat(ths, pMsg, "");
- SyncHeartbeatReply* pMsgReply = syncHeartbeatReplyBuild(ths->vgId);
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildHeartbeatReply(&rpcMsg, ths->vgId);
+
+ SyncHeartbeatReply* pMsgReply = rpcMsg.pCont;
pMsgReply->destId = pMsg->srcId;
pMsgReply->srcId = ths->myRaftId;
pMsgReply->term = ths->pRaftStore->currentTerm;
pMsgReply->privateTerm = 8864; // magic number
- SRpcMsg rpcMsg;
- syncHeartbeatReply2RpcMsg(pMsgReply, &rpcMsg);
-
if (pMsg->term == ths->pRaftStore->currentTerm && ths->state != TAOS_SYNC_STATE_LEADER) {
syncNodeResetElectTimer(ths);
ths->minMatchIndex = pMsg->minMatchIndex;
if (ths->state == TAOS_SYNC_STATE_FOLLOWER) {
// syncNodeFollowerCommit(ths, pMsg->commitIndex);
- SyncLocalCmd* pSyncMsg = syncLocalCmdBuild(ths->vgId);
+ SRpcMsg rpcMsgLocalCmd = {0};
+ (void)syncBuildLocalCmd(&rpcMsgLocalCmd, ths->vgId);
+
+ SyncLocalCmd* pSyncMsg = rpcMsgLocalCmd.pCont;
pSyncMsg->cmd = SYNC_LOCAL_CMD_FOLLOWER_CMT;
pSyncMsg->fcIndex = pMsg->commitIndex;
- SRpcMsg rpcMsgLocalCmd;
- syncLocalCmd2RpcMsg(pSyncMsg, &rpcMsgLocalCmd);
-
if (ths->syncEqMsg != NULL && ths->msgcb != NULL) {
int32_t code = ths->syncEqMsg(ths->msgcb, &rpcMsgLocalCmd);
if (code != 0) {
@@ -2128,13 +2056,13 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg) {
if (pMsg->term >= ths->pRaftStore->currentTerm && ths->state != TAOS_SYNC_STATE_FOLLOWER) {
// syncNodeStepDown(ths, pMsg->term);
- SyncLocalCmd* pSyncMsg = syncLocalCmdBuild(ths->vgId);
+ SRpcMsg rpcMsgLocalCmd = {0};
+ (void)syncBuildLocalCmd(&rpcMsgLocalCmd, ths->vgId);
+
+ SyncLocalCmd* pSyncMsg = rpcMsgLocalCmd.pCont;
pSyncMsg->cmd = SYNC_LOCAL_CMD_STEP_DOWN;
pSyncMsg->sdNewTerm = pMsg->term;
- SRpcMsg rpcMsgLocalCmd;
- syncLocalCmd2RpcMsg(pSyncMsg, &rpcMsgLocalCmd);
-
if (ths->syncEqMsg != NULL && ths->msgcb != NULL) {
int32_t code = ths->syncEqMsg(ths->msgcb, &rpcMsgLocalCmd);
if (code != 0) {
@@ -2144,8 +2072,6 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg) {
sTrace("vgId:%d, sync enqueue step-down msg, new-term: %" PRId64, ths->vgId, pSyncMsg->sdNewTerm);
}
}
-
- syncLocalCmdDestroy(pSyncMsg);
}
/*
@@ -2157,21 +2083,20 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg) {
// reply
syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg);
- syncHeartbeatReplyDestroy(pMsgReply);
-
return 0;
}
-int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, SyncHeartbeatReply* pMsg) {
+int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
+ SyncHeartbeatReply* pMsg = pRpcMsg->pCont;
syncLogRecvHeartbeatReply(ths, pMsg, "");
// update last reply time, make decision whether the other node is alive or not
- syncIndexMgrSetRecvTime(ths->pMatchIndex, &(pMsg->destId), pMsg->startTime);
-
+ syncIndexMgrSetRecvTime(ths->pMatchIndex, &pMsg->destId, pMsg->startTime);
return 0;
}
-int32_t syncNodeOnLocalCmd(SSyncNode* ths, SyncLocalCmd* pMsg) {
+int32_t syncNodeOnLocalCmd(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
+ SyncLocalCmd* pMsg = pRpcMsg->pCont;
syncLogRecvLocalCmd(ths, pMsg, "");
if (pMsg->cmd == SYNC_LOCAL_CMD_STEP_DOWN) {
@@ -2300,6 +2225,7 @@ const char* syncStr(ESyncState state) {
}
}
+#if 0
int32_t syncDoLeaderTransfer(SSyncNode* ths, SRpcMsg* pRpcMsg, SSyncRaftEntry* pEntry) {
if (ths->state != TAOS_SYNC_STATE_FOLLOWER) {
sNTrace(ths, "I am not follower, can not do leader transfer");
@@ -2328,7 +2254,7 @@ int32_t syncDoLeaderTransfer(SSyncNode* ths, SRpcMsg* pRpcMsg, SSyncRaftEntry* p
}
*/
- SyncLeaderTransfer* pSyncLeaderTransfer = syncLeaderTransferFromRpcMsg2(pRpcMsg);
+ SyncLeaderTransfer* pSyncLeaderTransfer = pRpcMsg->pCont;
sNTrace(ths, "do leader transfer, index:%" PRId64, pEntry->index);
bool sameId = syncUtilSameId(&(pSyncLeaderTransfer->newLeaderId), &(ths->myRaftId));
@@ -2361,10 +2287,11 @@ int32_t syncDoLeaderTransfer(SSyncNode* ths, SRpcMsg* pRpcMsg, SSyncRaftEntry* p
ths->pFsm->FpLeaderTransferCb(ths->pFsm, pRpcMsg, &cbMeta);
}
- syncLeaderTransferDestroy(pSyncLeaderTransfer);
return 0;
}
+#endif
+
int32_t syncNodeUpdateNewConfigIndex(SSyncNode* ths, SSyncCfg* pNewCfg) {
for (int32_t i = 0; i < pNewCfg->replicaNum; ++i) {
SRaftId raftId;
@@ -2576,241 +2503,3 @@ bool syncNodeCanChange(SSyncNode* pSyncNode) {
return true;
}
-
-const char* syncTimerTypeStr(enum ESyncTimeoutType timerType) {
- if (timerType == SYNC_TIMEOUT_PING) {
- return "ping";
- } else if (timerType == SYNC_TIMEOUT_ELECTION) {
- return "elect";
- } else if (timerType == SYNC_TIMEOUT_HEARTBEAT) {
- return "heartbeat";
- } else {
- return "unknown";
- }
-}
-
-void syncLogRecvTimer(SSyncNode* pSyncNode, const SyncTimeout* pMsg, const char* s) {
- sNTrace(pSyncNode, "recv sync-timer {type:%s, lc:%" PRId64 ", ms:%d, data:%p}, %s",
- syncTimerTypeStr(pMsg->timeoutType), pMsg->logicClock, pMsg->timerMS, pMsg->data, s);
-}
-
-void syncLogSendRequestVote(SSyncNode* pSyncNode, const SyncRequestVote* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
- sNTrace(pSyncNode, "send sync-request-vote to %s:%d {term:%" PRId64 ", lindex:%" PRId64 ", lterm:%" PRId64 "}, %s",
- host, port, pMsg->term, pMsg->lastLogIndex, pMsg->lastLogTerm, s);
-}
-
-void syncLogRecvRequestVote(SSyncNode* pSyncNode, const SyncRequestVote* pMsg, const char* s) {
- char logBuf[256];
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
- sNTrace(pSyncNode, "recv sync-request-vote from %s:%d, {term:%" PRId64 ", lindex:%" PRId64 ", lterm:%" PRId64 "}, %s",
- host, port, pMsg->term, pMsg->lastLogIndex, pMsg->lastLogTerm, s);
-}
-
-void syncLogSendRequestVoteReply(SSyncNode* pSyncNode, const SyncRequestVoteReply* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
- sNTrace(pSyncNode, "send sync-request-vote-reply to %s:%d {term:%" PRId64 ", grant:%d}, %s", host, port, pMsg->term,
- pMsg->voteGranted, s);
-}
-
-void syncLogRecvRequestVoteReply(SSyncNode* pSyncNode, const SyncRequestVoteReply* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
- sNTrace(pSyncNode, "recv sync-request-vote-reply from %s:%d {term:%" PRId64 ", grant:%d}, %s", host, port, pMsg->term,
- pMsg->voteGranted, s);
-}
-
-void syncLogSendAppendEntries(SSyncNode* pSyncNode, const SyncAppendEntries* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
- sNTrace(pSyncNode,
- "send sync-append-entries to %s:%d, {term:%" PRId64 ", pre-index:%" PRId64 ", pre-term:%" PRId64
- ", pterm:%" PRId64 ", cmt:%" PRId64 ", datalen:%d}, %s",
- host, port, pMsg->term, pMsg->prevLogIndex, pMsg->prevLogTerm, pMsg->privateTerm, pMsg->commitIndex,
- pMsg->dataLen, s);
-}
-
-void syncLogRecvAppendEntries(SSyncNode* pSyncNode, const SyncAppendEntries* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "recv sync-append-entries from %s:%d {term:%" PRId64 ", pre-index:%" PRId64 ", pre-term:%" PRId64
- ", cmt:%" PRId64 ", pterm:%" PRId64 ", datalen:%d}, %s",
- host, port, pMsg->term, pMsg->prevLogIndex, pMsg->prevLogTerm, pMsg->commitIndex, pMsg->privateTerm,
- pMsg->dataLen, s);
-}
-
-void syncLogSendAppendEntriesBatch(SSyncNode* pSyncNode, const SyncAppendEntriesBatch* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "send sync-append-entries-batch to %s:%d, {term:%" PRId64 ", pre-index:%" PRId64 ", pre-term:%" PRId64
- ", pterm:%" PRId64 ", cmt:%" PRId64 ", datalen:%d, count:%d}, %s",
- host, port, pMsg->term, pMsg->prevLogIndex, pMsg->prevLogTerm, pMsg->privateTerm, pMsg->commitIndex,
- pMsg->dataLen, pMsg->dataCount, s);
-}
-
-void syncLogRecvAppendEntriesBatch(SSyncNode* pSyncNode, const SyncAppendEntriesBatch* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "recv sync-append-entries-batch from %s:%d, {term:%" PRId64 ", pre-index:%" PRId64 ", pre-term:%" PRId64
- ", pterm:%" PRId64 ", cmt:%" PRId64 ", datalen:%d, count:%d}, %s",
- host, port, pMsg->term, pMsg->prevLogIndex, pMsg->prevLogTerm, pMsg->privateTerm, pMsg->commitIndex,
- pMsg->dataLen, pMsg->dataCount, s);
-}
-
-void syncLogSendAppendEntriesReply(SSyncNode* pSyncNode, const SyncAppendEntriesReply* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "send sync-append-entries-reply to %s:%d, {term:%" PRId64 ", pterm:%" PRId64 ", success:%d, match:%" PRId64
- "}, %s",
- host, port, pMsg->term, pMsg->privateTerm, pMsg->success, pMsg->matchIndex, s);
-}
-
-void syncLogRecvAppendEntriesReply(SSyncNode* pSyncNode, const SyncAppendEntriesReply* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "recv sync-append-entries-reply from %s:%d {term:%" PRId64 ", pterm:%" PRId64 ", success:%d, match:%" PRId64
- "}, %s",
- host, port, pMsg->term, pMsg->privateTerm, pMsg->success, pMsg->matchIndex, s);
-}
-
-void syncLogSendHeartbeat(SSyncNode* pSyncNode, const SyncHeartbeat* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "send sync-heartbeat to %s:%d {term:%" PRId64 ", cmt:%" PRId64 ", min-match:%" PRId64 ", pterm:%" PRId64
- "}, %s",
- host, port, pMsg->term, pMsg->commitIndex, pMsg->minMatchIndex, pMsg->privateTerm, s);
-}
-
-void syncLogRecvHeartbeat(SSyncNode* pSyncNode, const SyncHeartbeat* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "recv sync-heartbeat from %s:%d {term:%" PRId64 ", cmt:%" PRId64 ", min-match:%" PRId64 ", pterm:%" PRId64
- "}, %s",
- host, port, pMsg->term, pMsg->commitIndex, pMsg->minMatchIndex, pMsg->privateTerm, s);
-}
-
-void syncLogSendHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode, "send sync-heartbeat-reply from %s:%d {term:%" PRId64 ", pterm:%" PRId64 "}, %s", host, port,
- pMsg->term, pMsg->privateTerm, s);
-}
-
-void syncLogRecvHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
- sNTrace(pSyncNode, "recv sync-heartbeat-reply from %s:%d {term:%" PRId64 ", pterm:%" PRId64 "}, %s", host, port,
- pMsg->term, pMsg->privateTerm, s);
-}
-
-void syncLogRecvLocalCmd(SSyncNode* pSyncNode, const SyncLocalCmd* pMsg, const char* s) {
- sNTrace(pSyncNode, "recv sync-local-cmd {cmd:%d-%s, sd-new-term:%" PRId64 ", fc-index:%" PRId64 "}, %s", pMsg->cmd,
- syncLocalCmdGetStr(pMsg->cmd), pMsg->sdNewTerm, pMsg->fcIndex, s);
-}
-
-void syncLogSendSyncPreSnapshot(SSyncNode* pSyncNode, const SyncPreSnapshot* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
- sNTrace(pSyncNode, "send sync-pre-snapshot to %s:%d {term:%" PRId64 "}, %s", host, port, pMsg->term, s);
-}
-
-void syncLogRecvSyncPreSnapshot(SSyncNode* pSyncNode, const SyncPreSnapshot* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
- sNTrace(pSyncNode, "recv sync-pre-snapshot from %s:%d {term:%" PRId64 "}, %s", host, port, pMsg->term, s);
-}
-
-void syncLogSendSyncPreSnapshotReply(SSyncNode* pSyncNode, const SyncPreSnapshotReply* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
- sNTrace(pSyncNode, "send sync-pre-snapshot-reply to %s:%d {term:%" PRId64 ", snap-start:%" PRId64 "}, %s", host, port,
- pMsg->term, pMsg->snapStart, s);
-}
-
-void syncLogRecvSyncPreSnapshotReply(SSyncNode* pSyncNode, const SyncPreSnapshotReply* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
- sNTrace(pSyncNode, "recv sync-pre-snapshot-reply from %s:%d {term:%" PRId64 ", snap-start:%" PRId64 "}, %s", host,
- port, pMsg->term, pMsg->snapStart, s);
-}
-
-void syncLogSendSyncSnapshotSend(SSyncNode* pSyncNode, const SyncSnapshotSend* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "send sync-snapshot-send from %s:%d {term:%" PRId64 ", begin:%" PRId64 ", end:%" PRId64 ", lterm:%" PRId64
- ", stime:%" PRId64 ", seq:%d}, %s",
- host, port, pMsg->term, pMsg->beginIndex, pMsg->lastIndex, pMsg->lastTerm, pMsg->startTime, pMsg->seq, s);
-}
-
-void syncLogRecvSyncSnapshotSend(SSyncNode* pSyncNode, const SyncSnapshotSend* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "recv sync-snapshot-send from %s:%d {term:%" PRId64 ", begin:%" PRId64 ", lst:%" PRId64 ", lterm:%" PRId64
- ", stime:%" PRId64 ", seq:%d, len:%u}, %s",
- host, port, pMsg->term, pMsg->beginIndex, pMsg->lastIndex, pMsg->lastTerm, pMsg->startTime, pMsg->seq,
- pMsg->dataLen, s);
-}
-
-void syncLogSendSyncSnapshotRsp(SSyncNode* pSyncNode, const SyncSnapshotRsp* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "send sync-snapshot-rsp from %s:%d {term:%" PRId64 ", begin:%" PRId64 ", lst:%" PRId64 ", lterm:%" PRId64
- ", stime:%" PRId64 ", ack:%d}, %s",
- host, port, pMsg->term, pMsg->snapBeginIndex, pMsg->lastIndex, pMsg->lastTerm, pMsg->startTime, pMsg->ack, s);
-}
-
-void syncLogRecvSyncSnapshotRsp(SSyncNode* pSyncNode, const SyncSnapshotRsp* pMsg, const char* s) {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
-
- sNTrace(pSyncNode,
- "recv sync-snapshot-rsp from %s:%d {term:%" PRId64 ", begin:%" PRId64 ", lst:%" PRId64 ", lterm:%" PRId64
- ", stime:%" PRId64 ", ack:%d}, %s",
- host, port, pMsg->term, pMsg->snapBeginIndex, pMsg->lastIndex, pMsg->lastTerm, pMsg->startTime, pMsg->ack, s);
-}
diff --git a/source/libs/sync/src/syncMessage.c b/source/libs/sync/src/syncMessage.c
index 3fcb563f3b..ce98419980 100644
--- a/source/libs/sync/src/syncMessage.c
+++ b/source/libs/sync/src/syncMessage.c
@@ -13,726 +13,66 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncMessage.h"
-#include "syncRaftCfg.h"
#include "syncRaftEntry.h"
-#include "syncUtil.h"
-#include "tcoding.h"
-// ---- message process SyncTimeout----
-SyncTimeout* syncTimeoutBuild() {
- uint32_t bytes = sizeof(SyncTimeout);
- SyncTimeout* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
+int32_t syncBuildTimeout(SRpcMsg* pMsg, ESyncTimeoutType timeoutType, uint64_t logicClock, int32_t timerMS,
+ SSyncNode* pNode) {
+ int32_t bytes = sizeof(SyncTimeout);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_TIMEOUT;
- return pMsg;
-}
-
-SyncTimeout* syncTimeoutBuild2(ESyncTimeoutType timeoutType, uint64_t logicClock, int32_t timerMS, int32_t vgId,
- void* data) {
- SyncTimeout* pMsg = syncTimeoutBuild();
- pMsg->vgId = vgId;
- pMsg->timeoutType = timeoutType;
- pMsg->logicClock = logicClock;
- pMsg->timerMS = timerMS;
- pMsg->data = data;
- return pMsg;
-}
-
-void syncTimeoutDestroy(SyncTimeout* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncTimeoutSerialize(const SyncTimeout* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncTimeoutDeserialize(const char* buf, uint32_t len, SyncTimeout* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncTimeoutSerialize2(const SyncTimeout* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncTimeoutSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncTimeout* syncTimeoutDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncTimeout* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncTimeoutDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncTimeout2RpcMsg(const SyncTimeout* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncTimeoutSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncTimeoutFromRpcMsg(const SRpcMsg* pRpcMsg, SyncTimeout* pMsg) {
- syncTimeoutDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncTimeout* syncTimeoutFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncTimeout* pMsg = syncTimeoutDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncTimeout2Json(const SyncTimeout* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
- cJSON_AddNumberToObject(pRoot, "timeoutType", pMsg->timeoutType);
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->logicClock);
- cJSON_AddStringToObject(pRoot, "logicClock", u64buf);
- cJSON_AddNumberToObject(pRoot, "timerMS", pMsg->timerMS);
- snprintf(u64buf, sizeof(u64buf), "%p", pMsg->data);
- cJSON_AddStringToObject(pRoot, "data", u64buf);
- }
-
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncTimeout", pRoot);
- return pJson;
-}
-
-char* syncTimeout2Str(const SyncTimeout* pMsg) {
- cJSON* pJson = syncTimeout2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncTimeoutPrint(const SyncTimeout* pMsg) {
- char* serialized = syncTimeout2Str(pMsg);
- printf("syncTimeoutPrint | len:%zu | %s \n", strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncTimeoutPrint2(char* s, const SyncTimeout* pMsg) {
- char* serialized = syncTimeout2Str(pMsg);
- printf("syncTimeoutPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncTimeoutLog(const SyncTimeout* pMsg) {
- char* serialized = syncTimeout2Str(pMsg);
- sTrace("syncTimeoutLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncTimeoutLog2(char* s, const SyncTimeout* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncTimeout2Str(pMsg);
- sTrace("syncTimeoutLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncPing----
-SyncPing* syncPingBuild(uint32_t dataLen) {
- uint32_t bytes = sizeof(SyncPing) + dataLen;
- SyncPing* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->msgType = TDMT_SYNC_PING;
- pMsg->dataLen = dataLen;
- return pMsg;
-}
-
-SyncPing* syncPingBuild2(const SRaftId* srcId, const SRaftId* destId, int32_t vgId, const char* str) {
- uint32_t dataLen = strlen(str) + 1;
- SyncPing* pMsg = syncPingBuild(dataLen);
- pMsg->vgId = vgId;
- pMsg->srcId = *srcId;
- pMsg->destId = *destId;
- snprintf(pMsg->data, pMsg->dataLen, "%s", str);
- return pMsg;
-}
-
-SyncPing* syncPingBuild3(const SRaftId* srcId, const SRaftId* destId, int32_t vgId) {
- SyncPing* pMsg = syncPingBuild2(srcId, destId, vgId, "ping");
- return pMsg;
-}
-
-void syncPingDestroy(SyncPing* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncPingSerialize(const SyncPing* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncPingDeserialize(const char* buf, uint32_t len, SyncPing* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
- ASSERT(pMsg->bytes == sizeof(SyncPing) + pMsg->dataLen);
-}
-
-char* syncPingSerialize2(const SyncPing* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncPingSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncPing* syncPingDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncPing* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncPingDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-int32_t syncPingSerialize3(const SyncPing* pMsg, char* buf, int32_t bufLen) {
- SEncoder encoder = {0};
- tEncoderInit(&encoder, buf, bufLen);
- if (tStartEncode(&encoder) < 0) {
- return -1;
- }
-
- if (tEncodeU32(&encoder, pMsg->bytes) < 0) {
- return -1;
- }
- if (tEncodeI32(&encoder, pMsg->vgId) < 0) {
- return -1;
- }
- if (tEncodeU32(&encoder, pMsg->msgType) < 0) {
- return -1;
- }
- if (tEncodeU64(&encoder, pMsg->srcId.addr) < 0) {
- return -1;
- }
- if (tEncodeI32(&encoder, pMsg->srcId.vgId) < 0) {
- return -1;
- }
- if (tEncodeU64(&encoder, pMsg->destId.addr) < 0) {
- return -1;
- }
- if (tEncodeI32(&encoder, pMsg->destId.vgId) < 0) {
- return -1;
- }
- if (tEncodeU32(&encoder, pMsg->dataLen) < 0) {
- return -1;
- }
- if (tEncodeBinary(&encoder, pMsg->data, pMsg->dataLen)) {
- return -1;
- }
-
- tEndEncode(&encoder);
- int32_t tlen = encoder.pos;
- tEncoderClear(&encoder);
- return tlen;
-}
-
-SyncPing* syncPingDeserialize3(void* buf, int32_t bufLen) {
- SDecoder decoder = {0};
- tDecoderInit(&decoder, buf, bufLen);
- if (tStartDecode(&decoder) < 0) {
- return NULL;
- }
-
- SyncPing* pMsg = NULL;
- uint32_t bytes;
- if (tDecodeU32(&decoder, &bytes) < 0) {
- return NULL;
- }
-
- pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- pMsg->bytes = bytes;
-
- if (tDecodeI32(&decoder, &pMsg->vgId) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeU32(&decoder, &pMsg->msgType) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeU64(&decoder, &pMsg->srcId.addr) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeI32(&decoder, &pMsg->srcId.vgId) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeU64(&decoder, &pMsg->destId.addr) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeI32(&decoder, &pMsg->destId.vgId) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeU32(&decoder, &pMsg->dataLen) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- uint32_t len;
- char* data = NULL;
- if (tDecodeBinary(&decoder, (uint8_t**)(&data), &len) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- ASSERT(len == pMsg->dataLen);
- memcpy(pMsg->data, data, len);
-
- tEndDecode(&decoder);
- tDecoderClear(&decoder);
- return pMsg;
-}
-
-void syncPing2RpcMsg(const SyncPing* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncPingSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncPingFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPing* pMsg) {
- syncPingDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncPing* syncPingFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncPing* pMsg = syncPingDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncPing2Json(const SyncPing* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
- char* s;
- s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data", s);
- taosMemoryFree(s);
- s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data2", s);
- taosMemoryFree(s);
- }
-
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncPing", pRoot);
- return pJson;
-}
-
-char* syncPing2Str(const SyncPing* pMsg) {
- cJSON* pJson = syncPing2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncPingPrint(const SyncPing* pMsg) {
- char* serialized = syncPing2Str(pMsg);
- printf("syncPingPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncPingPrint2(char* s, const SyncPing* pMsg) {
- char* serialized = syncPing2Str(pMsg);
- printf("syncPingPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncPingLog(const SyncPing* pMsg) {
- char* serialized = syncPing2Str(pMsg);
- sTrace("syncPingLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncPingLog2(char* s, const SyncPing* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncPing2Str(pMsg);
- sTrace("syncPingLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncPingReply----
-SyncPingReply* syncPingReplyBuild(uint32_t dataLen) {
- uint32_t bytes = sizeof(SyncPingReply) + dataLen;
- SyncPingReply* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->msgType = TDMT_SYNC_PING_REPLY;
- pMsg->dataLen = dataLen;
- return pMsg;
-}
-
-SyncPingReply* syncPingReplyBuild2(const SRaftId* srcId, const SRaftId* destId, int32_t vgId, const char* str) {
- uint32_t dataLen = strlen(str) + 1;
- SyncPingReply* pMsg = syncPingReplyBuild(dataLen);
- pMsg->vgId = vgId;
- pMsg->srcId = *srcId;
- pMsg->destId = *destId;
- snprintf(pMsg->data, pMsg->dataLen, "%s", str);
- return pMsg;
-}
-
-SyncPingReply* syncPingReplyBuild3(const SRaftId* srcId, const SRaftId* destId, int32_t vgId) {
- SyncPingReply* pMsg = syncPingReplyBuild2(srcId, destId, vgId, "pang");
- return pMsg;
-}
-
-void syncPingReplyDestroy(SyncPingReply* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncPingReplySerialize(const SyncPingReply* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncPingReplyDeserialize(const char* buf, uint32_t len, SyncPingReply* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
- ASSERT(pMsg->bytes == sizeof(SyncPingReply) + pMsg->dataLen);
-}
-
-char* syncPingReplySerialize2(const SyncPingReply* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncPingReplySerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncPingReply* syncPingReplyDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncPingReply* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncPingReplyDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-int32_t syncPingReplySerialize3(const SyncPingReply* pMsg, char* buf, int32_t bufLen) {
- SEncoder encoder = {0};
- tEncoderInit(&encoder, buf, bufLen);
- if (tStartEncode(&encoder) < 0) {
- return -1;
- }
-
- if (tEncodeU32(&encoder, pMsg->bytes) < 0) {
- return -1;
- }
- if (tEncodeI32(&encoder, pMsg->vgId) < 0) {
- return -1;
- }
- if (tEncodeU32(&encoder, pMsg->msgType) < 0) {
- return -1;
- }
- if (tEncodeU64(&encoder, pMsg->srcId.addr) < 0) {
- return -1;
- }
- if (tEncodeI32(&encoder, pMsg->srcId.vgId) < 0) {
- return -1;
- }
- if (tEncodeU64(&encoder, pMsg->destId.addr) < 0) {
- return -1;
- }
- if (tEncodeI32(&encoder, pMsg->destId.vgId) < 0) {
- return -1;
- }
- if (tEncodeU32(&encoder, pMsg->dataLen) < 0) {
- return -1;
- }
- if (tEncodeBinary(&encoder, pMsg->data, pMsg->dataLen)) {
- return -1;
- }
-
- tEndEncode(&encoder);
- int32_t tlen = encoder.pos;
- tEncoderClear(&encoder);
- return tlen;
-}
-
-SyncPingReply* syncPingReplyDeserialize3(void* buf, int32_t bufLen) {
- SDecoder decoder = {0};
- tDecoderInit(&decoder, buf, bufLen);
- if (tStartDecode(&decoder) < 0) {
- return NULL;
- }
-
- SyncPingReply* pMsg = NULL;
- uint32_t bytes;
- if (tDecodeU32(&decoder, &bytes) < 0) {
- return NULL;
- }
-
- pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- pMsg->bytes = bytes;
-
- if (tDecodeI32(&decoder, &pMsg->vgId) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeU32(&decoder, &pMsg->msgType) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeU64(&decoder, &pMsg->srcId.addr) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeI32(&decoder, &pMsg->srcId.vgId) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeU64(&decoder, &pMsg->destId.addr) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeI32(&decoder, &pMsg->destId.vgId) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- if (tDecodeU32(&decoder, &pMsg->dataLen) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- uint32_t len;
- char* data = NULL;
- if (tDecodeBinary(&decoder, (uint8_t**)(&data), &len) < 0) {
- taosMemoryFree(pMsg);
- return NULL;
- }
- ASSERT(len == pMsg->dataLen);
- memcpy(pMsg->data, data, len);
-
- tEndDecode(&decoder);
- tDecoderClear(&decoder);
- return pMsg;
-}
-
-void syncPingReply2RpcMsg(const SyncPingReply* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncPingReplySerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncPingReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPingReply* pMsg) {
- syncPingReplyDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncPingReply* syncPingReplyFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncPingReply* pMsg = syncPingReplyDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncPingReply2Json(const SyncPingReply* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
- char* s;
- s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data", s);
- taosMemoryFree(s);
- s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data2", s);
- taosMemoryFree(s);
- }
-
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncPingReply", pRoot);
- return pJson;
-}
-
-char* syncPingReply2Str(const SyncPingReply* pMsg) {
- cJSON* pJson = syncPingReply2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncPingReplyPrint(const SyncPingReply* pMsg) {
- char* serialized = syncPingReply2Str(pMsg);
- printf("syncPingReplyPrint | len:%zu | %s \n", strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncPingReplyPrint2(char* s, const SyncPingReply* pMsg) {
- char* serialized = syncPingReply2Str(pMsg);
- printf("syncPingReplyPrint2 | len:%zu | %s | %s \n", strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncPingReplyLog(const SyncPingReply* pMsg) {
- char* serialized = syncPingReply2Str(pMsg);
- sTrace("syncPingReplyLog | len:%zu | %s", strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncPingReplyLog2(char* s, const SyncPingReply* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncPingReply2Str(pMsg);
- sTrace("syncPingReplyLog2 | len:%zu | %s | %s", strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncClientRequest----
-SyncClientRequest* syncClientRequestAlloc(uint32_t dataLen) {
- uint32_t bytes = sizeof(SyncClientRequest) + dataLen;
- SyncClientRequest* pMsg = taosMemoryCalloc(1, bytes);
- pMsg->bytes = bytes;
- pMsg->msgType = TDMT_SYNC_CLIENT_REQUEST;
- pMsg->dataLen = dataLen;
- return pMsg;
-}
-
-int32_t syncClientRequestBuildFromRpcMsg(SRpcMsg* pClientRequestRpcMsg, const SRpcMsg* pOriginalRpcMsg, uint64_t seqNum,
- bool isWeak, int32_t vgId) {
- int32_t bytes = sizeof(SyncClientRequest) + pOriginalRpcMsg->contLen;
- pClientRequestRpcMsg->pCont = rpcMallocCont(bytes);
- if (pClientRequestRpcMsg->pCont == NULL) {
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
}
- SyncClientRequest* pClientRequest = pClientRequestRpcMsg->pCont;
- pClientRequest->bytes = bytes;
- pClientRequest->vgId = vgId;
- pClientRequest->msgType = TDMT_SYNC_CLIENT_REQUEST;
- pClientRequest->originalRpcType = pOriginalRpcMsg->msgType;
- pClientRequest->seqNum = seqNum;
- pClientRequest->isWeak = isWeak;
- pClientRequest->dataLen = pOriginalRpcMsg->contLen;
- memcpy(pClientRequest->data, (char*)pOriginalRpcMsg->pCont, pOriginalRpcMsg->contLen);
-
- pClientRequestRpcMsg->msgType = TDMT_SYNC_CLIENT_REQUEST;
- pClientRequestRpcMsg->contLen = bytes;
+ SyncTimeout* pTimeout = pMsg->pCont;
+ pTimeout->bytes = bytes;
+ pTimeout->msgType = TDMT_SYNC_TIMEOUT;
+ pTimeout->vgId = pNode->vgId;
+ pTimeout->timeoutType = timeoutType;
+ pTimeout->logicClock = logicClock;
+ pTimeout->timerMS = timerMS;
+ pTimeout->data = pNode;
return 0;
}
-int32_t syncClientRequestBuildFromNoopEntry(SRpcMsg* pClientRequestRpcMsg, const SSyncRaftEntry* pEntry, int32_t vgId) {
- int32_t bytes = sizeof(SyncClientRequest) + pEntry->bytes;
- pClientRequestRpcMsg->pCont = rpcMallocCont(bytes);
- if (pClientRequestRpcMsg->pCont == NULL) {
+int32_t syncBuildClientRequest(SRpcMsg* pMsg, const SRpcMsg* pOriginal, uint64_t seqNum, bool isWeak, int32_t vgId) {
+ int32_t bytes = sizeof(SyncClientRequest) + pOriginal->contLen;
+ pMsg->pCont = rpcMallocCont(bytes);
+ pMsg->msgType = TDMT_SYNC_CLIENT_REQUEST;
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
}
- SyncClientRequest* pClientRequest = pClientRequestRpcMsg->pCont;
+ SyncClientRequest* pClientRequest = pMsg->pCont;
+ pClientRequest->bytes = bytes;
+ pClientRequest->vgId = vgId;
+ pClientRequest->msgType = TDMT_SYNC_CLIENT_REQUEST;
+ pClientRequest->originalRpcType = pOriginal->msgType;
+ pClientRequest->seqNum = seqNum;
+ pClientRequest->isWeak = isWeak;
+ pClientRequest->dataLen = pOriginal->contLen;
+ memcpy(pClientRequest->data, (char*)pOriginal->pCont, pOriginal->contLen);
+
+ return 0;
+}
+
+int32_t syncBuildClientRequestFromNoopEntry(SRpcMsg* pMsg, const SSyncRaftEntry* pEntry, int32_t vgId) {
+ int32_t bytes = sizeof(SyncClientRequest) + pEntry->bytes;
+ pMsg->pCont = rpcMallocCont(bytes);
+ pMsg->msgType = TDMT_SYNC_CLIENT_REQUEST;
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
+ }
+
+ SyncClientRequest* pClientRequest = pMsg->pCont;
pClientRequest->bytes = bytes;
pClientRequest->vgId = vgId;
pClientRequest->msgType = TDMT_SYNC_CLIENT_REQUEST;
@@ -740,2145 +80,237 @@ int32_t syncClientRequestBuildFromNoopEntry(SRpcMsg* pClientRequestRpcMsg, const
pClientRequest->dataLen = pEntry->bytes;
memcpy(pClientRequest->data, (char*)pEntry, pEntry->bytes);
- pClientRequestRpcMsg->msgType = TDMT_SYNC_CLIENT_REQUEST;
- pClientRequestRpcMsg->contLen = bytes;
return 0;
}
-cJSON* syncClientRequest2Json(const SyncClientRequest* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
- cJSON_AddNumberToObject(pRoot, "originalRpcType", pMsg->originalRpcType);
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->seqNum);
- cJSON_AddStringToObject(pRoot, "seqNum", u64buf);
- cJSON_AddNumberToObject(pRoot, "isWeak", pMsg->isWeak);
- cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
-
- char* s;
- s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data", s);
- taosMemoryFree(s);
- s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data2", s);
- taosMemoryFree(s);
- }
-
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncClientRequest", pRoot);
- return pJson;
-}
-
-char* syncClientRequest2Str(const SyncClientRequest* pMsg) {
- cJSON* pJson = syncClientRequest2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// ---- message process SyncClientRequestBatch----
-
-// block1:
-// block2: SRaftMeta array
-// block3: rpc msg array (with pCont)
-
-SyncClientRequestBatch* syncClientRequestBatchBuild(SRpcMsg** rpcMsgPArr, SRaftMeta* raftArr, int32_t arrSize,
- int32_t vgId) {
- ASSERT(rpcMsgPArr != NULL);
- ASSERT(arrSize > 0);
-
- int32_t dataLen = 0;
- int32_t raftMetaArrayLen = sizeof(SRaftMeta) * arrSize;
- int32_t rpcArrayLen = sizeof(SRpcMsg) * arrSize;
- dataLen += (raftMetaArrayLen + rpcArrayLen);
-
- uint32_t bytes = sizeof(SyncClientRequestBatch) + dataLen;
- SyncClientRequestBatch* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
- pMsg->msgType = TDMT_SYNC_CLIENT_REQUEST_BATCH;
- pMsg->dataCount = arrSize;
- pMsg->dataLen = dataLen;
-
- SRaftMeta* raftMetaArr = (SRaftMeta*)(pMsg->data);
- SRpcMsg* msgArr = (SRpcMsg*)((char*)(pMsg->data) + raftMetaArrayLen);
-
- for (int i = 0; i < arrSize; ++i) {
- // init raftMetaArr
- raftMetaArr[i].isWeak = raftArr[i].isWeak;
- raftMetaArr[i].seqNum = raftArr[i].seqNum;
-
- // init msgArr
- msgArr[i] = *(rpcMsgPArr[i]);
- }
-
- return pMsg;
-}
-
-void syncClientRequestBatch2RpcMsg(const SyncClientRequestBatch* pSyncMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pSyncMsg->msgType;
- pRpcMsg->contLen = pSyncMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- memcpy(pRpcMsg->pCont, pSyncMsg, pRpcMsg->contLen);
-}
-
-void syncClientRequestBatchDestroy(SyncClientRequestBatch* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncClientRequestBatchDestroyDeep(SyncClientRequestBatch* pMsg) {
- if (pMsg != NULL) {
- int32_t arrSize = pMsg->dataCount;
- int32_t raftMetaArrayLen = sizeof(SRaftMeta) * arrSize;
- SRpcMsg* msgArr = (SRpcMsg*)((char*)(pMsg->data) + raftMetaArrayLen);
- for (int i = 0; i < arrSize; ++i) {
- if (msgArr[i].pCont != NULL) {
- rpcFreeCont(msgArr[i].pCont);
- }
- }
-
- taosMemoryFree(pMsg);
- }
-}
-
-SRaftMeta* syncClientRequestBatchMetaArr(const SyncClientRequestBatch* pSyncMsg) {
- SRaftMeta* raftMetaArr = (SRaftMeta*)(pSyncMsg->data);
- return raftMetaArr;
-}
-
-SRpcMsg* syncClientRequestBatchRpcMsgArr(const SyncClientRequestBatch* pSyncMsg) {
- int32_t arrSize = pSyncMsg->dataCount;
- int32_t raftMetaArrayLen = sizeof(SRaftMeta) * arrSize;
- SRpcMsg* msgArr = (SRpcMsg*)((char*)(pSyncMsg->data) + raftMetaArrayLen);
- return msgArr;
-}
-
-SyncClientRequestBatch* syncClientRequestBatchFromRpcMsg(const SRpcMsg* pRpcMsg) {
- SyncClientRequestBatch* pSyncMsg = taosMemoryMalloc(pRpcMsg->contLen);
- ASSERT(pSyncMsg != NULL);
- memcpy(pSyncMsg, pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pRpcMsg->contLen == pSyncMsg->bytes);
-
- return pSyncMsg;
-}
-
-// ---- message process SyncRequestVote----
-SyncRequestVote* syncRequestVoteBuild(int32_t vgId) {
- uint32_t bytes = sizeof(SyncRequestVote);
- SyncRequestVote* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildRequestVote(SRpcMsg* pMsg, int32_t vgId) {
+ int32_t bytes = sizeof(SyncRequestVote);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_REQUEST_VOTE;
- return pMsg;
-}
-
-void syncRequestVoteDestroy(SyncRequestVote* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncRequestVoteSerialize(const SyncRequestVote* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncRequestVoteDeserialize(const char* buf, uint32_t len, SyncRequestVote* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncRequestVoteSerialize2(const SyncRequestVote* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncRequestVoteSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncRequestVote* syncRequestVoteDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncRequestVote* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncRequestVoteDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncRequestVote2RpcMsg(const SyncRequestVote* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncRequestVoteSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncRequestVoteFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVote* pMsg) {
- syncRequestVoteDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncRequestVote* syncRequestVoteFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncRequestVote* pMsg = syncRequestVoteDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncRequestVote2Json(const SyncRequestVote* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- cJSON_AddNumberToObject(pDestId, "addr", pMsg->destId.addr);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
- cJSON_AddStringToObject(pRoot, "term", u64buf);
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->lastLogIndex);
- cJSON_AddStringToObject(pRoot, "lastLogIndex", u64buf);
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->lastLogTerm);
- cJSON_AddStringToObject(pRoot, "lastLogTerm", u64buf);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncRequestVote", pRoot);
- return pJson;
+ SyncRequestVote* pRequestVote = pMsg->pCont;
+ pRequestVote->bytes = bytes;
+ pRequestVote->msgType = TDMT_SYNC_REQUEST_VOTE;
+ pRequestVote->vgId = vgId;
+ return 0;
}
-char* syncRequestVote2Str(const SyncRequestVote* pMsg) {
- cJSON* pJson = syncRequestVote2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncRequestVotePrint(const SyncRequestVote* pMsg) {
- char* serialized = syncRequestVote2Str(pMsg);
- printf("syncRequestVotePrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncRequestVotePrint2(char* s, const SyncRequestVote* pMsg) {
- char* serialized = syncRequestVote2Str(pMsg);
- printf("syncRequestVotePrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncRequestVoteLog(const SyncRequestVote* pMsg) {
- char* serialized = syncRequestVote2Str(pMsg);
- sTrace("syncRequestVoteLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncRequestVoteLog2(char* s, const SyncRequestVote* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncRequestVote2Str(pMsg);
- sTrace("syncRequestVoteLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncRequestVoteReply----
-SyncRequestVoteReply* syncRequestVoteReplyBuild(int32_t vgId) {
- uint32_t bytes = sizeof(SyncRequestVoteReply);
- SyncRequestVoteReply* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildRequestVoteReply(SRpcMsg* pMsg, int32_t vgId) {
+ int32_t bytes = sizeof(SyncRequestVoteReply);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_REQUEST_VOTE_REPLY;
- return pMsg;
-}
-
-void syncRequestVoteReplyDestroy(SyncRequestVoteReply* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncRequestVoteReplySerialize(const SyncRequestVoteReply* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncRequestVoteReplyDeserialize(const char* buf, uint32_t len, SyncRequestVoteReply* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncRequestVoteReplySerialize2(const SyncRequestVoteReply* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncRequestVoteReplySerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncRequestVoteReply* syncRequestVoteReplyDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncRequestVoteReply* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncRequestVoteReplyDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncRequestVoteReply2RpcMsg(const SyncRequestVoteReply* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncRequestVoteReplySerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncRequestVoteReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVoteReply* pMsg) {
- syncRequestVoteReplyDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncRequestVoteReply* syncRequestVoteReplyFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncRequestVoteReply* pMsg = syncRequestVoteReplyDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncRequestVoteReply2Json(const SyncRequestVoteReply* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- cJSON_AddNumberToObject(pDestId, "addr", pMsg->destId.addr);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
- cJSON_AddStringToObject(pRoot, "term", u64buf);
- cJSON_AddNumberToObject(pRoot, "vote_granted", pMsg->voteGranted);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncRequestVoteReply", pRoot);
- return pJson;
+ SyncRequestVoteReply* pRequestVoteReply = pMsg->pCont;
+ pRequestVoteReply->bytes = bytes;
+ pRequestVoteReply->msgType = TDMT_SYNC_REQUEST_VOTE_REPLY;
+ pRequestVoteReply->vgId = vgId;
+ return 0;
}
-char* syncRequestVoteReply2Str(const SyncRequestVoteReply* pMsg) {
- cJSON* pJson = syncRequestVoteReply2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncRequestVoteReplyPrint(const SyncRequestVoteReply* pMsg) {
- char* serialized = syncRequestVoteReply2Str(pMsg);
- printf("syncRequestVoteReplyPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncRequestVoteReplyPrint2(char* s, const SyncRequestVoteReply* pMsg) {
- char* serialized = syncRequestVoteReply2Str(pMsg);
- printf("syncRequestVoteReplyPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncRequestVoteReplyLog(const SyncRequestVoteReply* pMsg) {
- char* serialized = syncRequestVoteReply2Str(pMsg);
- sTrace("syncRequestVoteReplyLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncRequestVoteReplyLog2(char* s, const SyncRequestVoteReply* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncRequestVoteReply2Str(pMsg);
- sTrace("syncRequestVoteReplyLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncAppendEntries----
-SyncAppendEntries* syncAppendEntriesBuild(uint32_t dataLen, int32_t vgId) {
- uint32_t bytes = sizeof(SyncAppendEntries) + dataLen;
- SyncAppendEntries* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildAppendEntries(SRpcMsg* pMsg, int32_t dataLen, int32_t vgId) {
+ int32_t bytes = sizeof(SyncAppendEntries) + dataLen;
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_APPEND_ENTRIES;
- pMsg->dataLen = dataLen;
- return pMsg;
-}
-
-void syncAppendEntriesDestroy(SyncAppendEntries* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncAppendEntriesSerialize(const SyncAppendEntries* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncAppendEntriesDeserialize(const char* buf, uint32_t len, SyncAppendEntries* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
- ASSERT(pMsg->bytes == sizeof(SyncAppendEntries) + pMsg->dataLen);
-}
-
-char* syncAppendEntriesSerialize2(const SyncAppendEntries* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncAppendEntriesSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncAppendEntries* syncAppendEntriesDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncAppendEntries* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncAppendEntriesDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncAppendEntries2RpcMsg(const SyncAppendEntries* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncAppendEntriesSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncAppendEntriesFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntries* pMsg) {
- syncAppendEntriesDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncAppendEntries* syncAppendEntriesFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncAppendEntries* pMsg = syncAppendEntriesDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncAppendEntries2Json(const SyncAppendEntries* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
- cJSON_AddStringToObject(pRoot, "term", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->privateTerm);
- cJSON_AddStringToObject(pRoot, "privateTerm", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->prevLogIndex);
- cJSON_AddStringToObject(pRoot, "prevLogIndex", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->prevLogTerm);
- cJSON_AddStringToObject(pRoot, "pre_log_term", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->commitIndex);
- cJSON_AddStringToObject(pRoot, "commitIndex", u64buf);
-
- cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
- char* s;
- s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data", s);
- taosMemoryFree(s);
- s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data2", s);
- taosMemoryFree(s);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncAppendEntries", pRoot);
- return pJson;
+ SyncAppendEntries* pAppendEntries = pMsg->pCont;
+ pAppendEntries->bytes = bytes;
+ pAppendEntries->vgId = vgId;
+ pAppendEntries->msgType = TDMT_SYNC_APPEND_ENTRIES;
+ pAppendEntries->dataLen = dataLen;
+ return 0;
}
-char* syncAppendEntries2Str(const SyncAppendEntries* pMsg) {
- cJSON* pJson = syncAppendEntries2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncAppendEntriesPrint(const SyncAppendEntries* pMsg) {
- char* serialized = syncAppendEntries2Str(pMsg);
- printf("syncAppendEntriesPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncAppendEntriesPrint2(char* s, const SyncAppendEntries* pMsg) {
- char* serialized = syncAppendEntries2Str(pMsg);
- printf("syncAppendEntriesPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncAppendEntriesLog(const SyncAppendEntries* pMsg) {
- char* serialized = syncAppendEntries2Str(pMsg);
- sTrace("syncAppendEntriesLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncAppendEntriesLog2(char* s, const SyncAppendEntries* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncAppendEntries2Str(pMsg);
- sTrace("syncAppendEntriesLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncAppendEntriesBatch----
-
-// block1: SOffsetAndContLen
-// block2: SOffsetAndContLen Array
-// block3: entry Array
-
-SyncAppendEntriesBatch* syncAppendEntriesBatchBuild(SSyncRaftEntry** entryPArr, int32_t arrSize, int32_t vgId) {
- ASSERT(entryPArr != NULL);
- ASSERT(arrSize >= 0);
-
- int32_t dataLen = 0;
- int32_t metaArrayLen = sizeof(SOffsetAndContLen) * arrSize; //
- int32_t entryArrayLen = 0;
- for (int i = 0; i < arrSize; ++i) { // SRpcMsg pCont
- SSyncRaftEntry* pEntry = entryPArr[i];
- entryArrayLen += pEntry->bytes;
- }
- dataLen += (metaArrayLen + entryArrayLen);
-
- uint32_t bytes = sizeof(SyncAppendEntriesBatch) + dataLen;
- SyncAppendEntriesBatch* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
- pMsg->msgType = TDMT_SYNC_APPEND_ENTRIES_BATCH;
- pMsg->dataCount = arrSize;
- pMsg->dataLen = dataLen;
-
- SOffsetAndContLen* metaArr = (SOffsetAndContLen*)(pMsg->data);
- char* pData = pMsg->data;
-
- for (int i = 0; i < arrSize; ++i) {
- // init meta
- if (i == 0) {
- metaArr[i].offset = metaArrayLen;
- metaArr[i].contLen = entryPArr[i]->bytes;
- } else {
- metaArr[i].offset = metaArr[i - 1].offset + metaArr[i - 1].contLen;
- metaArr[i].contLen = entryPArr[i]->bytes;
- }
-
- // init entry array
- ASSERT(metaArr[i].contLen == entryPArr[i]->bytes);
- memcpy(pData + metaArr[i].offset, entryPArr[i], metaArr[i].contLen);
- }
-
- return pMsg;
-}
-
-SOffsetAndContLen* syncAppendEntriesBatchMetaTableArray(SyncAppendEntriesBatch* pMsg) {
- return (SOffsetAndContLen*)(pMsg->data);
-}
-
-void syncAppendEntriesBatchDestroy(SyncAppendEntriesBatch* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncAppendEntriesBatchSerialize(const SyncAppendEntriesBatch* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncAppendEntriesBatchDeserialize(const char* buf, uint32_t len, SyncAppendEntriesBatch* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
- ASSERT(pMsg->bytes == sizeof(SyncAppendEntriesBatch) + pMsg->dataLen);
-}
-
-char* syncAppendEntriesBatchSerialize2(const SyncAppendEntriesBatch* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncAppendEntriesBatchSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncAppendEntriesBatch* syncAppendEntriesBatchDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncAppendEntriesBatch* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncAppendEntriesBatchDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncAppendEntriesBatch2RpcMsg(const SyncAppendEntriesBatch* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncAppendEntriesBatchSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncAppendEntriesBatchFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntriesBatch* pMsg) {
- syncAppendEntriesBatchDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncAppendEntriesBatch* syncAppendEntriesBatchFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncAppendEntriesBatch* pMsg = syncAppendEntriesBatchDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-// ---- message process SyncAppendEntriesReply----
-SyncAppendEntriesReply* syncAppendEntriesReplyBuild(int32_t vgId) {
- uint32_t bytes = sizeof(SyncAppendEntriesReply);
- SyncAppendEntriesReply* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildAppendEntriesReply(SRpcMsg* pMsg, int32_t vgId) {
+ int32_t bytes = sizeof(SyncAppendEntriesReply);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_APPEND_ENTRIES_REPLY;
- return pMsg;
-}
-
-void syncAppendEntriesReplyDestroy(SyncAppendEntriesReply* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncAppendEntriesReplySerialize(const SyncAppendEntriesReply* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncAppendEntriesReplyDeserialize(const char* buf, uint32_t len, SyncAppendEntriesReply* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncAppendEntriesReplySerialize2(const SyncAppendEntriesReply* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncAppendEntriesReplySerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncAppendEntriesReply* syncAppendEntriesReplyDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncAppendEntriesReply* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncAppendEntriesReplyDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncAppendEntriesReply2RpcMsg(const SyncAppendEntriesReply* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncAppendEntriesReplySerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncAppendEntriesReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntriesReply* pMsg) {
- syncAppendEntriesReplyDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncAppendEntriesReply* syncAppendEntriesReplyFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncAppendEntriesReply* pMsg = syncAppendEntriesReplyDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncAppendEntriesReply2Json(const SyncAppendEntriesReply* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->privateTerm);
- cJSON_AddStringToObject(pRoot, "privateTerm", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
- cJSON_AddStringToObject(pRoot, "term", u64buf);
- cJSON_AddNumberToObject(pRoot, "success", pMsg->success);
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->matchIndex);
- cJSON_AddStringToObject(pRoot, "matchIndex", u64buf);
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->startTime);
- cJSON_AddStringToObject(pRoot, "startTime", u64buf);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncAppendEntriesReply", pRoot);
- return pJson;
+ SyncAppendEntriesReply* pAppendEntriesReply = pMsg->pCont;
+ pAppendEntriesReply->bytes = bytes;
+ pAppendEntriesReply->msgType = TDMT_SYNC_APPEND_ENTRIES_REPLY;
+ pAppendEntriesReply->vgId = vgId;
+ return 0;
}
-char* syncAppendEntriesReply2Str(const SyncAppendEntriesReply* pMsg) {
- cJSON* pJson = syncAppendEntriesReply2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncAppendEntriesReplyPrint(const SyncAppendEntriesReply* pMsg) {
- char* serialized = syncAppendEntriesReply2Str(pMsg);
- printf("syncAppendEntriesReplyPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncAppendEntriesReplyPrint2(char* s, const SyncAppendEntriesReply* pMsg) {
- char* serialized = syncAppendEntriesReply2Str(pMsg);
- printf("syncAppendEntriesReplyPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncAppendEntriesReplyLog(const SyncAppendEntriesReply* pMsg) {
- char* serialized = syncAppendEntriesReply2Str(pMsg);
- sTrace("syncAppendEntriesReplyLog | len:%d| %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncAppendEntriesReplyLog2(char* s, const SyncAppendEntriesReply* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncAppendEntriesReply2Str(pMsg);
- sTrace("syncAppendEntriesReplyLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncHeartbeat----
-SyncHeartbeat* syncHeartbeatBuild(int32_t vgId) {
- uint32_t bytes = sizeof(SyncHeartbeat);
- SyncHeartbeat* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildHeartbeat(SRpcMsg* pMsg, int32_t vgId) {
+ int32_t bytes = sizeof(SyncHeartbeat);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_HEARTBEAT;
- return pMsg;
-}
-
-void syncHeartbeatDestroy(SyncHeartbeat* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncHeartbeatSerialize(const SyncHeartbeat* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncHeartbeatDeserialize(const char* buf, uint32_t len, SyncHeartbeat* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncHeartbeatSerialize2(const SyncHeartbeat* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncHeartbeatSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncHeartbeat* syncHeartbeatDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncHeartbeat* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncHeartbeatDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncHeartbeat2RpcMsg(const SyncHeartbeat* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncHeartbeatSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncHeartbeatFromRpcMsg(const SRpcMsg* pRpcMsg, SyncHeartbeat* pMsg) {
- syncHeartbeatDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncHeartbeat* syncHeartbeatFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncHeartbeat* pMsg = syncHeartbeatDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncHeartbeat2Json(const SyncHeartbeat* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
- cJSON_AddStringToObject(pRoot, "term", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->privateTerm);
- cJSON_AddStringToObject(pRoot, "privateTerm", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->commitIndex);
- cJSON_AddStringToObject(pRoot, "commitIndex", u64buf);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncHeartbeat", pRoot);
- return pJson;
+ SyncHeartbeat* pHeartbeat = pMsg->pCont;
+ pHeartbeat->bytes = bytes;
+ pHeartbeat->msgType = TDMT_SYNC_HEARTBEAT;
+ pHeartbeat->vgId = vgId;
+ return 0;
}
-char* syncHeartbeat2Str(const SyncHeartbeat* pMsg) {
- cJSON* pJson = syncHeartbeat2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-void syncHeartbeatPrint(const SyncHeartbeat* pMsg) {
- char* serialized = syncHeartbeat2Str(pMsg);
- printf("syncHeartbeatPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncHeartbeatPrint2(char* s, const SyncHeartbeat* pMsg) {
- char* serialized = syncHeartbeat2Str(pMsg);
- printf("syncHeartbeatPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncHeartbeatLog(const SyncHeartbeat* pMsg) {
- char* serialized = syncHeartbeat2Str(pMsg);
- sTrace("syncHeartbeatLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncHeartbeatLog2(char* s, const SyncHeartbeat* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncHeartbeat2Str(pMsg);
- sTrace("syncHeartbeatLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncHeartbeatReply----
-SyncHeartbeatReply* syncHeartbeatReplyBuild(int32_t vgId) {
- uint32_t bytes = sizeof(SyncHeartbeatReply);
- SyncHeartbeatReply* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildHeartbeatReply(SRpcMsg* pMsg, int32_t vgId) {
+ int32_t bytes = sizeof(SyncHeartbeatReply);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_HEARTBEAT_REPLY;
- return pMsg;
-}
-
-void syncHeartbeatReplyDestroy(SyncHeartbeatReply* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncHeartbeatReplySerialize(const SyncHeartbeatReply* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncHeartbeatReplyDeserialize(const char* buf, uint32_t len, SyncHeartbeatReply* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncHeartbeatReplySerialize2(const SyncHeartbeatReply* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncHeartbeatReplySerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncHeartbeatReply* syncHeartbeatReplyDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncHeartbeatReply* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncHeartbeatReplyDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncHeartbeatReply2RpcMsg(const SyncHeartbeatReply* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncHeartbeatReplySerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncHeartbeatReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncHeartbeatReply* pMsg) {
- syncHeartbeatReplyDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncHeartbeatReply* syncHeartbeatReplyFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncHeartbeatReply* pMsg = syncHeartbeatReplyDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncHeartbeatReply2Json(const SyncHeartbeatReply* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->privateTerm);
- cJSON_AddStringToObject(pRoot, "privateTerm", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
- cJSON_AddStringToObject(pRoot, "term", u64buf);
-
- cJSON_AddStringToObject(pRoot, "matchIndex", u64buf);
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->startTime);
- cJSON_AddStringToObject(pRoot, "startTime", u64buf);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncHeartbeatReply", pRoot);
- return pJson;
+ SyncHeartbeatReply* pHeartbeatReply = pMsg->pCont;
+ pHeartbeatReply->bytes = bytes;
+ pHeartbeatReply->msgType = TDMT_SYNC_HEARTBEAT_REPLY;
+ pHeartbeatReply->vgId = vgId;
+ return 0;
}
-char* syncHeartbeatReply2Str(const SyncHeartbeatReply* pMsg) {
- cJSON* pJson = syncHeartbeatReply2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-void syncHeartbeatReplyPrint(const SyncHeartbeatReply* pMsg) {
- char* serialized = syncHeartbeatReply2Str(pMsg);
- printf("syncHeartbeatReplyPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncHeartbeatReplyPrint2(char* s, const SyncHeartbeatReply* pMsg) {
- char* serialized = syncHeartbeatReply2Str(pMsg);
- printf("syncHeartbeatReplyPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncHeartbeatReplyLog(const SyncHeartbeatReply* pMsg) {
- char* serialized = syncHeartbeatReply2Str(pMsg);
- sTrace("syncHeartbeatReplyLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncHeartbeatReplyLog2(char* s, const SyncHeartbeatReply* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncHeartbeatReply2Str(pMsg);
- sTrace("syncHeartbeatReplyLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncPreSnapshot----
-SyncPreSnapshot* syncPreSnapshotBuild(int32_t vgId) {
- uint32_t bytes = sizeof(SyncPreSnapshot);
- SyncPreSnapshot* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+#if 0
+int32_t syncBuildPreSnapshot(SRpcMsg* pMsg, int32_t vgId) {
+ int32_t bytes = sizeof(SyncPreSnapshot);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_PRE_SNAPSHOT;
- return pMsg;
-}
-
-void syncPreSnapshotDestroy(SyncPreSnapshot* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncPreSnapshotSerialize(const SyncPreSnapshot* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncPreSnapshotDeserialize(const char* buf, uint32_t len, SyncPreSnapshot* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncPreSnapshotSerialize2(const SyncPreSnapshot* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncPreSnapshotSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncPreSnapshot* syncPreSnapshotDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncPreSnapshot* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncPreSnapshotDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncPreSnapshot2RpcMsg(const SyncPreSnapshot* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncPreSnapshotSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncPreSnapshotFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPreSnapshot* pMsg) {
- syncPreSnapshotDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncPreSnapshot* syncPreSnapshotFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncPreSnapshot* pMsg = syncPreSnapshotDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncPreSnapshot2Json(const SyncPreSnapshot* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
- cJSON_AddStringToObject(pRoot, "term", u64buf);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncPreSnapshot", pRoot);
- return pJson;
+ SyncPreSnapshot* pPreSnapshot = pMsg->pCont;
+ pPreSnapshot->bytes = bytes;
+ pPreSnapshot->msgType = TDMT_SYNC_PRE_SNAPSHOT;
+ pPreSnapshot->vgId = vgId;
+ return 0;
}
-char* syncPreSnapshot2Str(const SyncPreSnapshot* pMsg) {
- cJSON* pJson = syncPreSnapshot2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-void syncPreSnapshotPrint(const SyncPreSnapshot* pMsg) {
- char* serialized = syncPreSnapshot2Str(pMsg);
- printf("syncPreSnapshotPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncPreSnapshotPrint2(char* s, const SyncPreSnapshot* pMsg) {
- char* serialized = syncPreSnapshot2Str(pMsg);
- printf("syncPreSnapshotPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncPreSnapshotLog(const SyncPreSnapshot* pMsg) {
- char* serialized = syncPreSnapshot2Str(pMsg);
- sTrace("syncPreSnapshotLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncPreSnapshotLog2(char* s, const SyncPreSnapshot* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncPreSnapshot2Str(pMsg);
- sTrace("syncPreSnapshotLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncPreSnapshotReply----
-SyncPreSnapshotReply* syncPreSnapshotReplyBuild(int32_t vgId) {
- uint32_t bytes = sizeof(SyncPreSnapshotReply);
- SyncPreSnapshotReply* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildPreSnapshotReply(SRpcMsg* pMsg, int32_t vgId) {
+ int32_t bytes = sizeof(SyncPreSnapshotReply);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_PRE_SNAPSHOT_REPLY;
- return pMsg;
-}
-
-void syncPreSnapshotReplyDestroy(SyncPreSnapshotReply* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncPreSnapshotReplySerialize(const SyncPreSnapshotReply* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncPreSnapshotReplyDeserialize(const char* buf, uint32_t len, SyncPreSnapshotReply* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncPreSnapshotReplySerialize2(const SyncPreSnapshotReply* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncPreSnapshotReplySerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncPreSnapshotReply* syncPreSnapshotReplyDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncPreSnapshotReply* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncPreSnapshotReplyDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncPreSnapshotReply2RpcMsg(const SyncPreSnapshotReply* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncPreSnapshotReplySerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncPreSnapshotReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPreSnapshotReply* pMsg) {
- syncPreSnapshotReplyDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncPreSnapshotReply* syncPreSnapshotReplyFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncPreSnapshotReply* pMsg = syncPreSnapshotReplyDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncPreSnapshotReply2Json(const SyncPreSnapshotReply* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
- cJSON_AddStringToObject(pRoot, "term", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->snapStart);
- cJSON_AddStringToObject(pRoot, "snap-start", u64buf);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncPreSnapshotReply", pRoot);
- return pJson;
+ SyncPreSnapshotReply* pPreSnapshotReply = pMsg->pCont;
+ pPreSnapshotReply->bytes = bytes;
+ pPreSnapshotReply->msgType = TDMT_SYNC_PRE_SNAPSHOT_REPLY;
+ pPreSnapshotReply->vgId = vgId;
+ return 0;
}
+#endif
-char* syncPreSnapshotReply2Str(const SyncPreSnapshotReply* pMsg) {
- cJSON* pJson = syncPreSnapshotReply2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-void syncPreSnapshotReplyPrint(const SyncPreSnapshotReply* pMsg) {
- char* serialized = syncPreSnapshotReply2Str(pMsg);
- printf("syncPreSnapshotReplyPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncPreSnapshotReplyPrint2(char* s, const SyncPreSnapshotReply* pMsg) {
- char* serialized = syncPreSnapshotReply2Str(pMsg);
- printf("syncPreSnapshotReplyPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncPreSnapshotReplyLog(const SyncPreSnapshotReply* pMsg) {
- char* serialized = syncPreSnapshotReply2Str(pMsg);
- sTrace("syncPreSnapshotReplyLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncPreSnapshotReplyLog2(char* s, const SyncPreSnapshotReply* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncPreSnapshotReply2Str(pMsg);
- sTrace("syncPreSnapshotReplyLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---- message process SyncApplyMsg----
-SyncApplyMsg* syncApplyMsgBuild(uint32_t dataLen) {
- uint32_t bytes = sizeof(SyncApplyMsg) + dataLen;
- SyncApplyMsg* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->msgType = TDMT_SYNC_APPLY_MSG;
- pMsg->dataLen = dataLen;
- return pMsg;
-}
-
-SyncApplyMsg* syncApplyMsgBuild2(const SRpcMsg* pOriginalRpcMsg, int32_t vgId, SFsmCbMeta* pMeta) {
- SyncApplyMsg* pMsg = syncApplyMsgBuild(pOriginalRpcMsg->contLen);
- pMsg->vgId = vgId;
- pMsg->originalRpcType = pOriginalRpcMsg->msgType;
- pMsg->fsmMeta = *pMeta;
- memcpy(pMsg->data, pOriginalRpcMsg->pCont, pOriginalRpcMsg->contLen);
- return pMsg;
-}
-
-void syncApplyMsgDestroy(SyncApplyMsg* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncApplyMsgSerialize(const SyncApplyMsg* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncApplyMsgDeserialize(const char* buf, uint32_t len, SyncApplyMsg* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncApplyMsgSerialize2(const SyncApplyMsg* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncApplyMsgSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncApplyMsg* syncApplyMsgDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncApplyMsg* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncApplyMsgDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-// SyncApplyMsg to SRpcMsg, put it into ApplyQ
-void syncApplyMsg2RpcMsg(const SyncApplyMsg* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncApplyMsgSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-// get SRpcMsg from ApplyQ, to SyncApplyMsg
-void syncApplyMsgFromRpcMsg(const SRpcMsg* pRpcMsg, SyncApplyMsg* pMsg) {
- syncApplyMsgDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncApplyMsg* syncApplyMsgFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncApplyMsg* pMsg = syncApplyMsgDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- return pMsg;
-}
-
-// SyncApplyMsg to OriginalRpcMsg
-void syncApplyMsg2OriginalRpcMsg(const SyncApplyMsg* pMsg, SRpcMsg* pOriginalRpcMsg) {
- memset(pOriginalRpcMsg, 0, sizeof(*pOriginalRpcMsg));
- pOriginalRpcMsg->msgType = pMsg->originalRpcType;
- pOriginalRpcMsg->contLen = pMsg->dataLen;
- pOriginalRpcMsg->pCont = rpcMallocCont(pOriginalRpcMsg->contLen);
- memcpy(pOriginalRpcMsg->pCont, pMsg->data, pOriginalRpcMsg->contLen);
-}
-
-cJSON* syncApplyMsg2Json(const SyncApplyMsg* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
- cJSON_AddNumberToObject(pRoot, "originalRpcType", pMsg->originalRpcType);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->fsmMeta.index);
- cJSON_AddStringToObject(pRoot, "fsmMeta.index", u64buf);
- cJSON_AddNumberToObject(pRoot, "fsmMeta.isWeak", pMsg->fsmMeta.isWeak);
- cJSON_AddNumberToObject(pRoot, "fsmMeta.code", pMsg->fsmMeta.code);
- cJSON_AddNumberToObject(pRoot, "fsmMeta.state", pMsg->fsmMeta.state);
- cJSON_AddStringToObject(pRoot, "fsmMeta.state.str", syncStr(pMsg->fsmMeta.state));
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->fsmMeta.seqNum);
- cJSON_AddStringToObject(pRoot, "fsmMeta.seqNum", u64buf);
-
- cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
- char* s;
- s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data", s);
- taosMemoryFree(s);
- s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data2", s);
- taosMemoryFree(s);
- }
-
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncApplyMsg", pRoot);
- return pJson;
-}
-
-char* syncApplyMsg2Str(const SyncApplyMsg* pMsg) {
- cJSON* pJson = syncApplyMsg2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncApplyMsgPrint(const SyncApplyMsg* pMsg) {
- char* serialized = syncApplyMsg2Str(pMsg);
- printf("syncApplyMsgPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncApplyMsgPrint2(char* s, const SyncApplyMsg* pMsg) {
- char* serialized = syncApplyMsg2Str(pMsg);
- printf("syncApplyMsgPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncApplyMsgLog(const SyncApplyMsg* pMsg) {
- char* serialized = syncApplyMsg2Str(pMsg);
- sTrace("ssyncApplyMsgLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncApplyMsgLog2(char* s, const SyncApplyMsg* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncApplyMsg2Str(pMsg);
- sTrace("syncApplyMsgLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---------------------------------------------
-SyncSnapshotSend* syncSnapshotSendBuild(uint32_t dataLen, int32_t vgId) {
- uint32_t bytes = sizeof(SyncSnapshotSend) + dataLen;
- SyncSnapshotSend* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildSnapshotSend(SRpcMsg* pMsg, int32_t dataLen, int32_t vgId) {
+ int32_t bytes = sizeof(SyncSnapshotSend) + dataLen;
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_SNAPSHOT_SEND;
- pMsg->dataLen = dataLen;
- return pMsg;
-}
-
-void syncSnapshotSendDestroy(SyncSnapshotSend* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
+
+ SyncSnapshotSend* pSnapshotSend = pMsg->pCont;
+ pSnapshotSend->bytes = bytes;
+ pSnapshotSend->vgId = vgId;
+ pSnapshotSend->msgType = TDMT_SYNC_SNAPSHOT_SEND;
+ pSnapshotSend->dataLen = dataLen;
+ return 0;
}
-void syncSnapshotSendSerialize(const SyncSnapshotSend* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncSnapshotSendDeserialize(const char* buf, uint32_t len, SyncSnapshotSend* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
- ASSERT(pMsg->bytes == sizeof(SyncSnapshotSend) + pMsg->dataLen);
-}
-
-char* syncSnapshotSendSerialize2(const SyncSnapshotSend* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncSnapshotSendSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncSnapshotSend* syncSnapshotSendDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncSnapshotSend* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncSnapshotSendDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncSnapshotSend2RpcMsg(const SyncSnapshotSend* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncSnapshotSendSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncSnapshotSendFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotSend* pMsg) {
- syncSnapshotSendDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncSnapshotSend* syncSnapshotSendFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncSnapshotSend* pMsg = syncSnapshotSendDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-SyncSnapshotRsp* syncSnapshotRspBuild(int32_t vgId) {
- uint32_t bytes = sizeof(SyncSnapshotRsp);
- SyncSnapshotRsp* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildSnapshotSendRsp(SRpcMsg* pMsg, int32_t vgId) {
+ int32_t bytes = sizeof(SyncSnapshotRsp);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_SNAPSHOT_RSP;
- return pMsg;
-}
-
-void syncSnapshotRspDestroy(SyncSnapshotRsp* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncSnapshotRspSerialize(const SyncSnapshotRsp* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncSnapshotRspDeserialize(const char* buf, uint32_t len, SyncSnapshotRsp* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncSnapshotRspSerialize2(const SyncSnapshotRsp* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncSnapshotRspSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncSnapshotRsp* syncSnapshotRspDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncSnapshotRsp* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncSnapshotRspDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncSnapshotRsp2RpcMsg(const SyncSnapshotRsp* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncSnapshotRspSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncSnapshotRspFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotRsp* pMsg) {
- syncSnapshotRspDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncSnapshotRsp* syncSnapshotRspFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncSnapshotRsp* pMsg = syncSnapshotRspDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncSnapshotRsp2Json(const SyncSnapshotRsp* pMsg) {
- char u64buf[128];
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128];
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128];
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
- cJSON_AddStringToObject(pRoot, "term", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->startTime);
- cJSON_AddStringToObject(pRoot, "startTime", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->lastIndex);
- cJSON_AddStringToObject(pRoot, "lastIndex", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->lastTerm);
- cJSON_AddStringToObject(pRoot, "lastTerm", u64buf);
-
- cJSON_AddNumberToObject(pRoot, "ack", pMsg->ack);
- cJSON_AddNumberToObject(pRoot, "code", pMsg->code);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->snapBeginIndex);
- cJSON_AddStringToObject(pRoot, "snap-begin", u64buf);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncSnapshotRsp", pRoot);
- return pJson;
+ SyncSnapshotRsp* pPreSnapshotRsp = pMsg->pCont;
+ pPreSnapshotRsp->bytes = bytes;
+ pPreSnapshotRsp->msgType = TDMT_SYNC_SNAPSHOT_RSP;
+ pPreSnapshotRsp->vgId = vgId;
+ return 0;
}
-char* syncSnapshotRsp2Str(const SyncSnapshotRsp* pMsg) {
- cJSON* pJson = syncSnapshotRsp2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncSnapshotRspPrint(const SyncSnapshotRsp* pMsg) {
- char* serialized = syncSnapshotRsp2Str(pMsg);
- printf("syncSnapshotRspPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncSnapshotRspPrint2(char* s, const SyncSnapshotRsp* pMsg) {
- char* serialized = syncSnapshotRsp2Str(pMsg);
- printf("syncSnapshotRspPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncSnapshotRspLog(const SyncSnapshotRsp* pMsg) {
- char* serialized = syncSnapshotRsp2Str(pMsg);
- sTrace("syncSnapshotRspLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncSnapshotRspLog2(char* s, const SyncSnapshotRsp* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncSnapshotRsp2Str(pMsg);
- sTrace("syncSnapshotRspLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
-// ---------------------------------------------
-SyncLeaderTransfer* syncLeaderTransferBuild(int32_t vgId) {
- uint32_t bytes = sizeof(SyncLeaderTransfer);
- SyncLeaderTransfer* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildLeaderTransfer(SRpcMsg* pMsg, int32_t vgId) {
+ int32_t bytes = sizeof(SyncLeaderTransfer);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_LEADER_TRANSFER;
- return pMsg;
-}
-
-void syncLeaderTransferDestroy(SyncLeaderTransfer* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
- }
-}
-
-void syncLeaderTransferSerialize(const SyncLeaderTransfer* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncLeaderTransferDeserialize(const char* buf, uint32_t len, SyncLeaderTransfer* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncLeaderTransferSerialize2(const SyncLeaderTransfer* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncLeaderTransferSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
- }
- return buf;
-}
-
-SyncLeaderTransfer* syncLeaderTransferDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncLeaderTransfer* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncLeaderTransferDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncLeaderTransfer2RpcMsg(const SyncLeaderTransfer* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncLeaderTransferSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncLeaderTransferFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLeaderTransfer* pMsg) {
- syncLeaderTransferDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncLeaderTransfer* syncLeaderTransferFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncLeaderTransfer* pMsg = syncLeaderTransferDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncLeaderTransfer2Json(const SyncLeaderTransfer* pMsg) {
- char u64buf[128];
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- /*
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128];
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128];
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
- */
-
- cJSON* pNewerId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->newLeaderId.addr);
- cJSON_AddStringToObject(pNewerId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->newLeaderId.addr;
- cJSON* pTmp = pNewerId;
- char host[128];
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pNewerId, "vgId", pMsg->newLeaderId.vgId);
- cJSON_AddItemToObject(pRoot, "newLeaderId", pNewerId);
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
}
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncLeaderTransfer", pRoot);
- return pJson;
+ SyncLeaderTransfer* pLeaderTransfer = pMsg->pCont;
+ pLeaderTransfer->bytes = bytes;
+ pLeaderTransfer->msgType = TDMT_SYNC_LEADER_TRANSFER;
+ pLeaderTransfer->vgId = vgId;
+ return 0;
}
-char* syncLeaderTransfer2Str(const SyncLeaderTransfer* pMsg) {
- cJSON* pJson = syncLeaderTransfer2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-const char* syncLocalCmdGetStr(int32_t cmd) {
- if (cmd == SYNC_LOCAL_CMD_STEP_DOWN) {
- return "step-down";
- } else if (cmd == SYNC_LOCAL_CMD_FOLLOWER_CMT) {
- return "follower-commit";
- }
-
- return "unknown-local-cmd";
-}
-
-SyncLocalCmd* syncLocalCmdBuild(int32_t vgId) {
- uint32_t bytes = sizeof(SyncLocalCmd);
- SyncLocalCmd* pMsg = taosMemoryMalloc(bytes);
- memset(pMsg, 0, bytes);
- pMsg->bytes = bytes;
- pMsg->vgId = vgId;
+int32_t syncBuildLocalCmd(SRpcMsg* pMsg, int32_t vgId) {
+ int32_t bytes = sizeof(SyncLocalCmd);
+ pMsg->pCont = rpcMallocCont(bytes);
pMsg->msgType = TDMT_SYNC_LOCAL_CMD;
- return pMsg;
+ pMsg->contLen = bytes;
+ if (pMsg->pCont == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
+ }
+
+ SyncLocalCmd* pLocalCmd = pMsg->pCont;
+ pLocalCmd->bytes = bytes;
+ pLocalCmd->msgType = TDMT_SYNC_LOCAL_CMD;
+ pLocalCmd->vgId = vgId;
+ return 0;
}
-void syncLocalCmdDestroy(SyncLocalCmd* pMsg) {
- if (pMsg != NULL) {
- taosMemoryFree(pMsg);
+const char* syncTimerTypeStr(enum ESyncTimeoutType timerType) {
+ switch (timerType) {
+ case SYNC_TIMEOUT_PING:
+ return "ping";
+ case SYNC_TIMEOUT_ELECTION:
+ return "elect";
+ case SYNC_TIMEOUT_HEARTBEAT:
+ return "heartbeat";
+ default:
+ return "unknown";
}
}
-void syncLocalCmdSerialize(const SyncLocalCmd* pMsg, char* buf, uint32_t bufLen) {
- ASSERT(pMsg->bytes <= bufLen);
- memcpy(buf, pMsg, pMsg->bytes);
-}
-
-void syncLocalCmdDeserialize(const char* buf, uint32_t len, SyncLocalCmd* pMsg) {
- memcpy(pMsg, buf, len);
- ASSERT(len == pMsg->bytes);
-}
-
-char* syncLocalCmdSerialize2(const SyncLocalCmd* pMsg, uint32_t* len) {
- char* buf = taosMemoryMalloc(pMsg->bytes);
- ASSERT(buf != NULL);
- syncLocalCmdSerialize(pMsg, buf, pMsg->bytes);
- if (len != NULL) {
- *len = pMsg->bytes;
+const char* syncLocalCmdGetStr(ESyncLocalCmd cmd) {
+ switch (cmd) {
+ case SYNC_LOCAL_CMD_STEP_DOWN:
+ return "step-down";
+ case SYNC_LOCAL_CMD_FOLLOWER_CMT:
+ return "follower-commit";
+ default:
+ return "unknown-local-cmd";
}
- return buf;
}
-
-SyncLocalCmd* syncLocalCmdDeserialize2(const char* buf, uint32_t len) {
- uint32_t bytes = *((uint32_t*)buf);
- SyncLocalCmd* pMsg = taosMemoryMalloc(bytes);
- ASSERT(pMsg != NULL);
- syncLocalCmdDeserialize(buf, len, pMsg);
- ASSERT(len == pMsg->bytes);
- return pMsg;
-}
-
-void syncLocalCmd2RpcMsg(const SyncLocalCmd* pMsg, SRpcMsg* pRpcMsg) {
- memset(pRpcMsg, 0, sizeof(*pRpcMsg));
- pRpcMsg->msgType = pMsg->msgType;
- pRpcMsg->contLen = pMsg->bytes;
- pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
- syncLocalCmdSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
-}
-
-void syncLocalCmdFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLocalCmd* pMsg) {
- syncLocalCmdDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
-}
-
-SyncLocalCmd* syncLocalCmdFromRpcMsg2(const SRpcMsg* pRpcMsg) {
- SyncLocalCmd* pMsg = syncLocalCmdDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
- ASSERT(pMsg != NULL);
- return pMsg;
-}
-
-cJSON* syncLocalCmd2Json(const SyncLocalCmd* pMsg) {
- char u64buf[128];
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128];
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128];
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- cJSON_AddNumberToObject(pRoot, "cmd", pMsg->cmd);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->sdNewTerm);
- cJSON_AddStringToObject(pRoot, "sd-new-term", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->fcIndex);
- cJSON_AddStringToObject(pRoot, "fc-index", u64buf);
- }
-
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncLocalCmd2Json", pRoot);
- return pJson;
-}
-
-char* syncLocalCmd2Str(const SyncLocalCmd* pMsg) {
- cJSON* pJson = syncLocalCmd2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncLocalCmdPrint(const SyncLocalCmd* pMsg) {
- char* serialized = syncLocalCmd2Str(pMsg);
- printf("syncLocalCmdPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncLocalCmdPrint2(char* s, const SyncLocalCmd* pMsg) {
- char* serialized = syncLocalCmd2Str(pMsg);
- printf("syncLocalCmdPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncLocalCmdLog(const SyncLocalCmd* pMsg) {
- char* serialized = syncLocalCmd2Str(pMsg);
- sTrace("syncLocalCmdLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncLocalCmdLog2(char* s, const SyncLocalCmd* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncLocalCmd2Str(pMsg);
- sTrace("syncLocalCmdLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
\ No newline at end of file
diff --git a/source/libs/sync/src/syncRaftCfg.c b/source/libs/sync/src/syncRaftCfg.c
index 66c399d15a..b425b0dba7 100644
--- a/source/libs/sync/src/syncRaftCfg.c
+++ b/source/libs/sync/src/syncRaftCfg.c
@@ -13,9 +13,8 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncRaftCfg.h"
-#include "cJSON.h"
-#include "syncEnv.h"
#include "syncUtil.h"
// file must already exist!
@@ -242,13 +241,6 @@ cJSON *syncCfg2Json(SSyncCfg *pSyncCfg) {
return pRoot;
}
-char *syncCfg2Str(SSyncCfg *pSyncCfg) {
- cJSON *pJson = syncCfg2Json(pSyncCfg);
- char *serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
int32_t syncCfgFromJson(const cJSON *pRoot, SSyncCfg *pSyncCfg) {
memset(pSyncCfg, 0, sizeof(SSyncCfg));
// cJSON *pJson = cJSON_GetObjectItem(pRoot, "SSyncCfg");
@@ -283,17 +275,6 @@ int32_t syncCfgFromJson(const cJSON *pRoot, SSyncCfg *pSyncCfg) {
return 0;
}
-int32_t syncCfgFromStr(const char *s, SSyncCfg *pSyncCfg) {
- cJSON *pRoot = cJSON_Parse(s);
- ASSERT(pRoot != NULL);
-
- int32_t ret = syncCfgFromJson(pRoot, pSyncCfg);
- ASSERT(ret == 0);
-
- cJSON_Delete(pRoot);
- return 0;
-}
-
cJSON *raftCfg2Json(SRaftCfg *pRaftCfg) {
cJSON *pRoot = cJSON_CreateObject();
cJSON_AddItemToObject(pRoot, "SSyncCfg", syncCfg2Json(&(pRaftCfg->cfg)));
diff --git a/source/libs/sync/src/syncRaftEntry.c b/source/libs/sync/src/syncRaftEntry.c
index 262a7b0879..540054e473 100644
--- a/source/libs/sync/src/syncRaftEntry.c
+++ b/source/libs/sync/src/syncRaftEntry.c
@@ -102,7 +102,6 @@ void syncEntry2OriginalRpc(const SSyncRaftEntry* pEntry, SRpcMsg* pRpcMsg) {
memcpy(pRpcMsg->pCont, pEntry->data, pRpcMsg->contLen);
}
-//-----------------------------------
SRaftEntryHashCache* raftCacheCreate(SSyncNode* pSyncNode, int32_t maxCount) {
SRaftEntryHashCache* pCache = taosMemoryMalloc(sizeof(SRaftEntryHashCache));
if (pCache == NULL) {
@@ -256,8 +255,6 @@ int32_t raftCacheClear(struct SRaftEntryHashCache* pCache) {
return 0;
}
-
-//-----------------------------------
static char* keyFn(const void* pData) {
SSyncRaftEntry* pEntry = (SSyncRaftEntry*)pData;
return (char*)(&(pEntry->index));
diff --git a/source/libs/sync/src/syncRaftLog.c b/source/libs/sync/src/syncRaftLog.c
index d4a1d35c74..7e4b18ab88 100644
--- a/source/libs/sync/src/syncRaftLog.c
+++ b/source/libs/sync/src/syncRaftLog.c
@@ -13,33 +13,34 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncRaftLog.h"
#include "syncRaftCfg.h"
#include "syncRaftStore.h"
+#include "syncUtil.h"
-//-------------------------------
// log[m .. n]
// public function
static int32_t raftLogRestoreFromSnapshot(struct SSyncLogStore* pLogStore, SyncIndex snapshotIndex);
-
static int32_t raftLogAppendEntry(struct SSyncLogStore* pLogStore, SSyncRaftEntry* pEntry);
static int32_t raftLogTruncate(struct SSyncLogStore* pLogStore, SyncIndex fromIndex);
static bool raftLogExist(struct SSyncLogStore* pLogStore, SyncIndex index);
static int32_t raftLogUpdateCommitIndex(SSyncLogStore* pLogStore, SyncIndex index);
static SyncIndex raftlogCommitIndex(SSyncLogStore* pLogStore);
+static int32_t raftLogGetLastEntry(SSyncLogStore* pLogStore, SSyncRaftEntry** ppLastEntry);
-static int32_t raftLogGetLastEntry(SSyncLogStore* pLogStore, SSyncRaftEntry** ppLastEntry);
-
-//-------------------------------
SSyncLogStore* logStoreCreate(SSyncNode* pSyncNode) {
- SSyncLogStore* pLogStore = taosMemoryMalloc(sizeof(SSyncLogStore));
- ASSERT(pLogStore != NULL);
+ SSyncLogStore* pLogStore = taosMemoryCalloc(1, sizeof(SSyncLogStore));
+ if (pLogStore == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return NULL;
+ }
pLogStore->pCache = taosLRUCacheInit(10 * 1024 * 1024, 1, .5);
if (pLogStore->pCache == NULL) {
- terrno = TSDB_CODE_WAL_OUT_OF_MEMORY;
taosMemoryFree(pLogStore);
+ terrno = TSDB_CODE_WAL_OUT_OF_MEMORY;
return NULL;
}
@@ -96,7 +97,6 @@ void logStoreDestory(SSyncLogStore* pLogStore) {
}
}
-//-------------------------------
// log[m .. n]
static int32_t raftLogRestoreFromSnapshot(struct SSyncLogStore* pLogStore, SyncIndex snapshotIndex) {
ASSERT(snapshotIndex >= 0);
diff --git a/source/libs/sync/src/syncRaftStore.c b/source/libs/sync/src/syncRaftStore.c
index dcc4e1f133..e328ed3d31 100644
--- a/source/libs/sync/src/syncRaftStore.c
+++ b/source/libs/sync/src/syncRaftStore.c
@@ -13,9 +13,8 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncRaftStore.h"
-#include "cJSON.h"
-#include "syncEnv.h"
#include "syncUtil.h"
// private function
@@ -26,22 +25,19 @@ static bool raftStoreFileExist(char *path);
SRaftStore *raftStoreOpen(const char *path) {
int32_t ret;
- SRaftStore *pRaftStore = taosMemoryMalloc(sizeof(SRaftStore));
+ SRaftStore *pRaftStore = taosMemoryCalloc(1, sizeof(SRaftStore));
if (pRaftStore == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return NULL;
}
- memset(pRaftStore, 0, sizeof(*pRaftStore));
+
snprintf(pRaftStore->path, sizeof(pRaftStore->path), "%s", path);
-
- char storeBuf[RAFT_STORE_BLOCK_SIZE] = {0};
- memset(storeBuf, 0, sizeof(storeBuf));
-
if (!raftStoreFileExist(pRaftStore->path)) {
ret = raftStoreInit(pRaftStore);
ASSERT(ret == 0);
}
+ char storeBuf[RAFT_STORE_BLOCK_SIZE] = {0};
pRaftStore->pFile = taosOpenFile(path, TD_FILE_READ | TD_FILE_WRITE);
ASSERT(pRaftStore->pFile != NULL);
@@ -72,9 +68,7 @@ static int32_t raftStoreInit(SRaftStore *pRaftStore) {
}
int32_t raftStoreClose(SRaftStore *pRaftStore) {
- if (pRaftStore == NULL) {
- return 0;
- }
+ if (pRaftStore == NULL) return 0;
taosCloseFile(&pRaftStore->pFile);
taosMemoryFree(pRaftStore);
@@ -182,69 +176,3 @@ void raftStoreSetTerm(SRaftStore *pRaftStore, SyncTerm term) {
pRaftStore->currentTerm = term;
raftStorePersist(pRaftStore);
}
-
-int32_t raftStoreFromJson(SRaftStore *pRaftStore, cJSON *pJson) { return 0; }
-
-cJSON *raftStore2Json(SRaftStore *pRaftStore) {
- char u64buf[128] = {0};
- cJSON *pRoot = cJSON_CreateObject();
-
- if (pRaftStore != NULL) {
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64 "", pRaftStore->currentTerm);
- cJSON_AddStringToObject(pRoot, "currentTerm", u64buf);
-
- cJSON *pVoteFor = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64 "", pRaftStore->voteFor.addr);
- cJSON_AddStringToObject(pVoteFor, "addr", u64buf);
- {
- uint64_t u64 = pRaftStore->voteFor.addr;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pVoteFor, "addr_host", host);
- cJSON_AddNumberToObject(pVoteFor, "addr_port", port);
- }
- cJSON_AddNumberToObject(pVoteFor, "vgId", pRaftStore->voteFor.vgId);
- cJSON_AddItemToObject(pRoot, "voteFor", pVoteFor);
-
- int hasVoted = raftStoreHasVoted(pRaftStore);
- cJSON_AddNumberToObject(pRoot, "hasVoted", hasVoted);
- }
-
- cJSON *pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SRaftStore", pRoot);
- return pJson;
-}
-
-char *raftStore2Str(SRaftStore *pRaftStore) {
- cJSON *pJson = raftStore2Json(pRaftStore);
- char *serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug -------------------
-void raftStorePrint(SRaftStore *pObj) {
- char *serialized = raftStore2Str(pObj);
- printf("raftStorePrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void raftStorePrint2(char *s, SRaftStore *pObj) {
- char *serialized = raftStore2Str(pObj);
- printf("raftStorePrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-void raftStoreLog(SRaftStore *pObj) {
- char *serialized = raftStore2Str(pObj);
- sTrace("raftStoreLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void raftStoreLog2(char *s, SRaftStore *pObj) {
- char *serialized = raftStore2Str(pObj);
- sTrace("raftStoreLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
-}
diff --git a/source/libs/sync/src/syncReplication.c b/source/libs/sync/src/syncReplication.c
index 00a3d72f25..25d6474f67 100644
--- a/source/libs/sync/src/syncReplication.c
+++ b/source/libs/sync/src/syncReplication.c
@@ -13,15 +13,16 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncReplication.h"
#include "syncIndexMgr.h"
-#include "syncMessage.h"
-#include "syncRaftCfg.h"
#include "syncRaftEntry.h"
-#include "syncRaftLog.h"
#include "syncRaftStore.h"
#include "syncUtil.h"
+static int32_t syncNodeSendAppendEntries(SSyncNode* pNode, const SRaftId* destRaftId, SRpcMsg* pRpcMsg);
+static int32_t syncNodeMaybeSendAppendEntries(SSyncNode* pNode, const SRaftId* destRaftId, SRpcMsg* pRpcMsg);
+
// TLA+ Spec
// AppendEntries(i, j) ==
// /\ i /= j
@@ -68,6 +69,7 @@ int32_t syncNodeReplicateOne(SSyncNode* pSyncNode, SRaftId* pDestId, bool snapsh
SyncTerm preLogTerm = syncNodeGetPreTerm(pSyncNode, nextIndex);
// prepare entry
+ SRpcMsg rpcMsg = {0};
SyncAppendEntries* pMsg = NULL;
SSyncRaftEntry* pEntry;
@@ -76,26 +78,23 @@ int32_t syncNodeReplicateOne(SSyncNode* pSyncNode, SRaftId* pDestId, bool snapsh
if (code == 0) {
ASSERT(pEntry != NULL);
- pMsg = syncAppendEntriesBuild(pEntry->bytes, pSyncNode->vgId);
- ASSERT(pMsg != NULL);
- memcpy(pMsg->data, pEntry, pEntry->bytes);
- syncEntryDestory(pEntry);
+ code = syncBuildAppendEntries(&rpcMsg, pEntry->bytes, pSyncNode->vgId);
+ ASSERT(code == 0);
+ pMsg = rpcMsg.pCont;
+ memcpy(pMsg->data, pEntry, pEntry->bytes);
} else {
if (terrno == TSDB_CODE_WAL_LOG_NOT_EXIST) {
// no entry in log
- pMsg = syncAppendEntriesBuild(0, pSyncNode->vgId);
- ASSERT(pMsg != NULL);
+ code = syncBuildAppendEntries(&rpcMsg, 0, pSyncNode->vgId);
+ ASSERT(code == 0);
+ pMsg = rpcMsg.pCont;
} else {
- do {
- char host[64];
- uint16_t port;
- syncUtilU642Addr(pDestId->addr, host, sizeof(host), &port);
- sNError(pSyncNode, "replicate to %s:%d error, next-index:%" PRId64, host, port, nextIndex);
- } while (0);
-
- syncAppendEntriesDestroy(pMsg);
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pDestId->addr, host, sizeof(host), &port);
+ sNError(pSyncNode, "replicate to %s:%d error, next-index:%" PRId64, host, port, nextIndex);
return -1;
}
}
@@ -112,9 +111,7 @@ int32_t syncNodeReplicateOne(SSyncNode* pSyncNode, SRaftId* pDestId, bool snapsh
// pMsg->privateTerm = syncIndexMgrGetTerm(pSyncNode->pNextIndex, pDestId);
// send msg
- syncNodeMaybeSendAppendEntries(pSyncNode, pDestId, pMsg);
- syncAppendEntriesDestroy(pMsg);
-
+ syncNodeMaybeSendAppendEntries(pSyncNode, pDestId, &rpcMsg);
return 0;
}
@@ -140,13 +137,13 @@ int32_t syncNodeReplicate(SSyncNode* pSyncNode) {
return 0;
}
-int32_t syncNodeSendAppendEntries(SSyncNode* pSyncNode, const SRaftId* destRaftId, const SyncAppendEntries* pMsg) {
- int32_t ret = 0;
- syncLogSendAppendEntries(pSyncNode, pMsg, "");
-
- SRpcMsg rpcMsg;
- syncAppendEntries2RpcMsg(pMsg, &rpcMsg);
- syncNodeSendMsgById(destRaftId, pSyncNode, &rpcMsg);
+int32_t syncNodeSendAppendEntries(SSyncNode* pSyncNode, const SRaftId* destRaftId, SRpcMsg* pRpcMsg) {
+ int32_t ret = 0;
+ SyncAppendEntries* pMsg = pRpcMsg->pCont;
+ if (pMsg == NULL) {
+ sError("vgId:%d, sync-append-entries msg is NULL", pSyncNode->vgId);
+ return 0;
+ }
SPeerState* pState = syncNodeGetPeerState(pSyncNode, destRaftId);
if (pState == NULL) {
@@ -154,53 +151,54 @@ int32_t syncNodeSendAppendEntries(SSyncNode* pSyncNode, const SRaftId* destRaftI
return 0;
}
+ // save index, otherwise pMsg will be free by rpc
+ SyncIndex saveLastSendIndex = pState->lastSendIndex;
if (pMsg->dataLen > 0) {
- pState->lastSendIndex = pMsg->prevLogIndex + 1;
+ saveLastSendIndex = pMsg->prevLogIndex + 1;
+ }
+
+ syncLogSendAppendEntries(pSyncNode, pMsg, "");
+ syncNodeSendMsgById(destRaftId, pSyncNode, pRpcMsg);
+
+ if (pMsg->dataLen > 0) {
+ pState->lastSendIndex = saveLastSendIndex;
pState->lastSendTime = taosGetTimestampMs();
}
return ret;
}
-int32_t syncNodeMaybeSendAppendEntries(SSyncNode* pSyncNode, const SRaftId* destRaftId, const SyncAppendEntries* pMsg) {
- int32_t ret = 0;
- if (syncNodeNeedSendAppendEntries(pSyncNode, destRaftId, pMsg)) {
- ret = syncNodeSendAppendEntries(pSyncNode, destRaftId, pMsg);
+int32_t syncNodeMaybeSendAppendEntries(SSyncNode* pSyncNode, const SRaftId* destRaftId, SRpcMsg* pRpcMsg) {
+ int32_t ret = 0;
+ SyncAppendEntries* pMsg = pRpcMsg->pCont;
+ if (syncNodeNeedSendAppendEntries(pSyncNode, destRaftId, pMsg)) {
+ ret = syncNodeSendAppendEntries(pSyncNode, destRaftId, pRpcMsg);
} else {
char logBuf[128];
char host[64];
int16_t port;
syncUtilU642Addr(destRaftId->addr, host, sizeof(host), &port);
sNTrace(pSyncNode, "do not repcate to %s:%d for index:%" PRId64, host, port, pMsg->prevLogIndex + 1);
+ rpcFreeCont(pRpcMsg->pCont);
}
return ret;
}
-int32_t syncNodeAppendEntries(SSyncNode* pSyncNode, const SRaftId* destRaftId, const SyncAppendEntries* pMsg) {
- int32_t ret = 0;
- syncLogSendAppendEntries(pSyncNode, pMsg, "");
-
- SRpcMsg rpcMsg;
- syncAppendEntries2RpcMsg(pMsg, &rpcMsg);
- syncNodeSendMsgById(destRaftId, pSyncNode, &rpcMsg);
- return ret;
-}
-
-int32_t syncNodeSendHeartbeat(SSyncNode* pSyncNode, const SRaftId* destRaftId, const SyncHeartbeat* pMsg) {
- int32_t ret = 0;
- syncLogSendHeartbeat(pSyncNode, pMsg, "");
-
- SRpcMsg rpcMsg;
- syncHeartbeat2RpcMsg(pMsg, &rpcMsg);
- syncNodeSendMsgById(&(pMsg->destId), pSyncNode, &rpcMsg);
- return ret;
+int32_t syncNodeSendHeartbeat(SSyncNode* pSyncNode, const SRaftId* destId, SRpcMsg* pMsg) {
+ syncLogSendHeartbeat(pSyncNode, pMsg->pCont, "");
+ return syncNodeSendMsgById(destId, pSyncNode, pMsg);
}
int32_t syncNodeHeartbeatPeers(SSyncNode* pSyncNode) {
for (int32_t i = 0; i < pSyncNode->peersNum; ++i) {
- SyncHeartbeat* pSyncMsg = syncHeartbeatBuild(pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ if (syncBuildHeartbeat(&rpcMsg, pSyncNode->vgId) != 0) {
+ continue;
+ }
+
+ SyncHeartbeat* pSyncMsg = rpcMsg.pCont;
pSyncMsg->srcId = pSyncNode->myRaftId;
pSyncMsg->destId = pSyncNode->peersId[i];
pSyncMsg->term = pSyncNode->pRaftStore->currentTerm;
@@ -208,13 +206,8 @@ int32_t syncNodeHeartbeatPeers(SSyncNode* pSyncNode) {
pSyncMsg->minMatchIndex = syncMinMatchIndex(pSyncNode);
pSyncMsg->privateTerm = 0;
- SRpcMsg rpcMsg;
- syncHeartbeat2RpcMsg(pSyncMsg, &rpcMsg);
-
// send msg
- syncNodeSendHeartbeat(pSyncNode, &(pSyncMsg->destId), pSyncMsg);
-
- syncHeartbeatDestroy(pSyncMsg);
+ syncNodeSendHeartbeat(pSyncNode, &pSyncMsg->destId, &rpcMsg);
}
return 0;
diff --git a/source/libs/sync/src/syncRequestVote.c b/source/libs/sync/src/syncRequestVote.c
index 7e2587372b..8ffc22ee25 100644
--- a/source/libs/sync/src/syncRequestVote.c
+++ b/source/libs/sync/src/syncRequestVote.c
@@ -13,8 +13,9 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncRequestVote.h"
-#include "syncInt.h"
+#include "syncMessage.h"
#include "syncRaftCfg.h"
#include "syncRaftStore.h"
#include "syncUtil.h"
@@ -87,8 +88,9 @@ static bool syncNodeOnRequestVoteLogOK(SSyncNode* pSyncNode, SyncRequestVote* pM
return false;
}
-int32_t syncNodeOnRequestVote(SSyncNode* ths, SyncRequestVote* pMsg) {
- int32_t ret = 0;
+int32_t syncNodeOnRequestVote(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
+ int32_t ret = 0;
+ SyncRequestVote* pMsg = pRpcMsg->pCont;
// if already drop replica, do not process
if (!syncNodeInRaftGroup(ths, &(pMsg->srcId))) {
@@ -120,7 +122,11 @@ int32_t syncNodeOnRequestVote(SSyncNode* ths, SyncRequestVote* pMsg) {
}
// send msg
- SyncRequestVoteReply* pReply = syncRequestVoteReplyBuild(ths->vgId);
+ SRpcMsg rpcMsg = {0};
+ ret = syncBuildRequestVoteReply(&rpcMsg, ths->vgId);
+ ASSERT(ret == 0 );
+
+ SyncRequestVoteReply* pReply = rpcMsg.pCont;
pReply->srcId = ths->myRaftId;
pReply->destId = pMsg->srcId;
pReply->term = ths->pRaftStore->currentTerm;
@@ -134,10 +140,6 @@ int32_t syncNodeOnRequestVote(SSyncNode* ths, SyncRequestVote* pMsg) {
syncLogSendRequestVoteReply(ths, pReply, "");
} while (0);
- SRpcMsg rpcMsg;
- syncRequestVoteReply2RpcMsg(pReply, &rpcMsg);
syncNodeSendMsgById(&pReply->destId, ths, &rpcMsg);
- syncRequestVoteReplyDestroy(pReply);
-
return 0;
}
\ No newline at end of file
diff --git a/source/libs/sync/src/syncRequestVoteReply.c b/source/libs/sync/src/syncRequestVoteReply.c
index 44efaa068a..563f475070 100644
--- a/source/libs/sync/src/syncRequestVoteReply.c
+++ b/source/libs/sync/src/syncRequestVoteReply.c
@@ -13,9 +13,9 @@
* along with this program. If not, see .
*/
+#define _DEFAULT_SOURCE
#include "syncRequestVoteReply.h"
-#include "syncInt.h"
-#include "syncRaftCfg.h"
+#include "syncMessage.h"
#include "syncRaftStore.h"
#include "syncUtil.h"
#include "syncVoteMgr.h"
@@ -37,8 +37,10 @@
// /\ Discard(m)
// /\ UNCHANGED <>
//
-int32_t syncNodeOnRequestVoteReply(SSyncNode* ths, SyncRequestVoteReply* pMsg) {
- int32_t ret = 0;
+
+int32_t syncNodeOnRequestVoteReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
+ int32_t ret = 0;
+ SyncRequestVoteReply* pMsg = pRpcMsg->pCont;
// if already drop replica, do not process
if (!syncNodeInRaftGroup(ths, &(pMsg->srcId))) {
diff --git a/source/libs/sync/src/syncRespMgr.c b/source/libs/sync/src/syncRespMgr.c
index de8f1927ae..049b02d73e 100644
--- a/source/libs/sync/src/syncRespMgr.c
+++ b/source/libs/sync/src/syncRespMgr.c
@@ -17,6 +17,7 @@
#include "syncRespMgr.h"
#include "syncRaftEntry.h"
#include "syncRaftStore.h"
+#include "syncUtil.h"
SSyncRespMgr *syncRespMgrCreate(void *data, int64_t ttl) {
SSyncRespMgr *pObj = taosMemoryCalloc(1, sizeof(SSyncRespMgr));
diff --git a/source/libs/sync/src/syncSnapshot.c b/source/libs/sync/src/syncSnapshot.c
index 41dc3d3c39..9bc0a07d48 100644
--- a/source/libs/sync/src/syncSnapshot.c
+++ b/source/libs/sync/src/syncSnapshot.c
@@ -105,7 +105,10 @@ int32_t snapshotSenderStart(SSyncSnapshotSender *pSender) {
pSender->finish = false;
// build begin msg
- SyncSnapshotSend *pMsg = syncSnapshotSendBuild(0, pSender->pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildSnapshotSend(&rpcMsg, 0, pSender->pSyncNode->vgId);
+
+ SyncSnapshotSend *pMsg = rpcMsg.pCont;
pMsg->srcId = pSender->pSyncNode->myRaftId;
pMsg->destId = (pSender->pSyncNode->replicasId)[pSender->replicaIndex];
pMsg->term = pSender->pSyncNode->pRaftStore->currentTerm;
@@ -118,11 +121,8 @@ int32_t snapshotSenderStart(SSyncSnapshotSender *pSender) {
pMsg->seq = SYNC_SNAPSHOT_SEQ_PRE_SNAPSHOT;
// send msg
- SRpcMsg rpcMsg;
- syncSnapshotSend2RpcMsg(pMsg, &rpcMsg);
- syncNodeSendMsgById(&(pMsg->destId), pSender->pSyncNode, &rpcMsg);
+ syncNodeSendMsgById(&pMsg->destId, pSender->pSyncNode, &rpcMsg);
syncLogSendSyncSnapshotSend(pSender->pSyncNode, pMsg, "");
- syncSnapshotSendDestroy(pMsg);
// event log
sSTrace(pSender, "snapshot sender start");
@@ -176,7 +176,10 @@ int32_t snapshotSend(SSyncSnapshotSender *pSender) {
}
// build msg
- SyncSnapshotSend *pMsg = syncSnapshotSendBuild(pSender->blockLen, pSender->pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildSnapshotSend(&rpcMsg, pSender->blockLen, pSender->pSyncNode->vgId);
+
+ SyncSnapshotSend *pMsg = rpcMsg.pCont;
pMsg->srcId = pSender->pSyncNode->myRaftId;
pMsg->destId = (pSender->pSyncNode->replicasId)[pSender->replicaIndex];
pMsg->term = pSender->pSyncNode->pRaftStore->currentTerm;
@@ -192,11 +195,8 @@ int32_t snapshotSend(SSyncSnapshotSender *pSender) {
memcpy(pMsg->data, pSender->pCurrentBlock, pSender->blockLen);
// send msg
- SRpcMsg rpcMsg;
- syncSnapshotSend2RpcMsg(pMsg, &rpcMsg);
- syncNodeSendMsgById(&(pMsg->destId), pSender->pSyncNode, &rpcMsg);
+ syncNodeSendMsgById(&pMsg->destId, pSender->pSyncNode, &rpcMsg);
syncLogSendSyncSnapshotSend(pSender->pSyncNode, pMsg, "");
- syncSnapshotSendDestroy(pMsg);
// event log
if (pSender->seq == SYNC_SNAPSHOT_SEQ_END) {
@@ -212,7 +212,10 @@ int32_t snapshotReSend(SSyncSnapshotSender *pSender) {
// send current block data
if (pSender->pCurrentBlock != NULL && pSender->blockLen > 0) {
// build msg
- SyncSnapshotSend *pMsg = syncSnapshotSendBuild(pSender->blockLen, pSender->pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildSnapshotSend(&rpcMsg, pSender->blockLen, pSender->pSyncNode->vgId);
+
+ SyncSnapshotSend *pMsg = rpcMsg.pCont;
pMsg->srcId = pSender->pSyncNode->myRaftId;
pMsg->destId = (pSender->pSyncNode->replicasId)[pSender->replicaIndex];
pMsg->term = pSender->pSyncNode->pRaftStore->currentTerm;
@@ -224,15 +227,11 @@ int32_t snapshotReSend(SSyncSnapshotSender *pSender) {
pMsg->seq = pSender->seq;
// pMsg->privateTerm = pSender->privateTerm;
-
memcpy(pMsg->data, pSender->pCurrentBlock, pSender->blockLen);
// send msg
- SRpcMsg rpcMsg;
- syncSnapshotSend2RpcMsg(pMsg, &rpcMsg);
- syncNodeSendMsgById(&(pMsg->destId), pSender->pSyncNode, &rpcMsg);
+ syncNodeSendMsgById(&pMsg->destId, pSender->pSyncNode, &rpcMsg);
syncLogSendSyncSnapshotSend(pSender->pSyncNode, pMsg, "");
- syncSnapshotSendDestroy(pMsg);
// event log
sSTrace(pSender, "snapshot sender resend");
@@ -546,7 +545,11 @@ _START_RECEIVER:
_SEND_REPLY:
// build msg
; // make complier happy
- SyncSnapshotRsp *pRspMsg = syncSnapshotRspBuild(pSyncNode->vgId);
+
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildSnapshotSendRsp(&rpcMsg, pSyncNode->vgId);
+
+ SyncSnapshotRsp *pRspMsg = rpcMsg.pCont;
pRspMsg->srcId = pSyncNode->myRaftId;
pRspMsg->destId = pMsg->srcId;
pRspMsg->term = pSyncNode->pRaftStore->currentTerm;
@@ -558,12 +561,8 @@ _SEND_REPLY:
pRspMsg->snapBeginIndex = syncNodeGetSnapBeginIndex(pSyncNode);
// send msg
- SRpcMsg rpcMsg;
- syncSnapshotRsp2RpcMsg(pRspMsg, &rpcMsg);
- syncNodeSendMsgById(&(pRspMsg->destId), pSyncNode, &rpcMsg);
+ syncNodeSendMsgById(&pRspMsg->destId, pSyncNode, &rpcMsg);
syncLogSendSyncSnapshotRsp(pSyncNode, pRspMsg, "");
- syncSnapshotRspDestroy(pRspMsg);
-
return 0;
}
@@ -585,7 +584,10 @@ static int32_t syncNodeOnSnapshotBegin(SSyncNode *pSyncNode, SyncSnapshotSend *p
snapshotReceiverStartWriter(pReceiver, pMsg);
// build msg
- SyncSnapshotRsp *pRspMsg = syncSnapshotRspBuild(pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildSnapshotSendRsp(&rpcMsg, pSyncNode->vgId);
+
+ SyncSnapshotRsp *pRspMsg = rpcMsg.pCont;
pRspMsg->srcId = pSyncNode->myRaftId;
pRspMsg->destId = pMsg->srcId;
pRspMsg->term = pSyncNode->pRaftStore->currentTerm;
@@ -597,12 +599,8 @@ static int32_t syncNodeOnSnapshotBegin(SSyncNode *pSyncNode, SyncSnapshotSend *p
pRspMsg->snapBeginIndex = pReceiver->snapshotParam.start;
// send msg
- SRpcMsg rpcMsg;
- syncSnapshotRsp2RpcMsg(pRspMsg, &rpcMsg);
- syncNodeSendMsgById(&(pRspMsg->destId), pSyncNode, &rpcMsg);
+ syncNodeSendMsgById(&pRspMsg->destId, pSyncNode, &rpcMsg);
syncLogSendSyncSnapshotRsp(pSyncNode, pRspMsg, "");
- syncSnapshotRspDestroy(pRspMsg);
-
return 0;
}
@@ -624,7 +622,10 @@ static int32_t syncNodeOnSnapshotTransfering(SSyncNode *pSyncNode, SyncSnapshotS
}
// build msg
- SyncSnapshotRsp *pRspMsg = syncSnapshotRspBuild(pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildSnapshotSendRsp(&rpcMsg, pSyncNode->vgId);
+
+ SyncSnapshotRsp *pRspMsg = rpcMsg.pCont;
pRspMsg->srcId = pSyncNode->myRaftId;
pRspMsg->destId = pMsg->srcId;
pRspMsg->term = pSyncNode->pRaftStore->currentTerm;
@@ -636,12 +637,8 @@ static int32_t syncNodeOnSnapshotTransfering(SSyncNode *pSyncNode, SyncSnapshotS
pRspMsg->snapBeginIndex = pReceiver->snapshotParam.start;
// send msg
- SRpcMsg rpcMsg;
- syncSnapshotRsp2RpcMsg(pRspMsg, &rpcMsg);
- syncNodeSendMsgById(&(pRspMsg->destId), pSyncNode, &rpcMsg);
+ syncNodeSendMsgById(&pRspMsg->destId, pSyncNode, &rpcMsg);
syncLogSendSyncSnapshotRsp(pSyncNode, pRspMsg, "");
- syncSnapshotRspDestroy(pRspMsg);
-
return 0;
}
@@ -664,7 +661,10 @@ static int32_t syncNodeOnSnapshotEnd(SSyncNode *pSyncNode, SyncSnapshotSend *pMs
}
// build msg
- SyncSnapshotRsp *pRspMsg = syncSnapshotRspBuild(pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildSnapshotSendRsp(&rpcMsg, pSyncNode->vgId);
+
+ SyncSnapshotRsp *pRspMsg = rpcMsg.pCont;
pRspMsg->srcId = pSyncNode->myRaftId;
pRspMsg->destId = pMsg->srcId;
pRspMsg->term = pSyncNode->pRaftStore->currentTerm;
@@ -676,12 +676,8 @@ static int32_t syncNodeOnSnapshotEnd(SSyncNode *pSyncNode, SyncSnapshotSend *pMs
pRspMsg->snapBeginIndex = pReceiver->snapshotParam.start;
// send msg
- SRpcMsg rpcMsg;
- syncSnapshotRsp2RpcMsg(pRspMsg, &rpcMsg);
- syncNodeSendMsgById(&(pRspMsg->destId), pSyncNode, &rpcMsg);
+ syncNodeSendMsgById(&pRspMsg->destId, pSyncNode, &rpcMsg);
syncLogSendSyncSnapshotRsp(pSyncNode, pRspMsg, "");
- syncSnapshotRspDestroy(pRspMsg);
-
return 0;
}
@@ -705,7 +701,9 @@ static int32_t syncNodeOnSnapshotEnd(SSyncNode *pSyncNode, SyncSnapshotSend *pMs
//
// condition 5, got data, update ack
//
-int32_t syncNodeOnSnapshot(SSyncNode *pSyncNode, SyncSnapshotSend *pMsg) {
+int32_t syncNodeOnSnapshot(SSyncNode *pSyncNode, const SRpcMsg *pRpcMsg) {
+ SyncSnapshotSend *pMsg = pRpcMsg->pCont;
+
// if already drop replica, do not process
if (!syncNodeInRaftGroup(pSyncNode, &(pMsg->srcId))) {
syncLogRecvSyncSnapshotSend(pSyncNode, pMsg, "not in my config");
@@ -797,13 +795,16 @@ int32_t syncNodeOnSnapshotReplyPre(SSyncNode *pSyncNode, SyncSnapshotRsp *pMsg)
}
// update next index
- syncIndexMgrSetIndex(pSyncNode->pNextIndex, &(pMsg->srcId), snapshot.lastApplyIndex + 1);
+ syncIndexMgrSetIndex(pSyncNode->pNextIndex, &pMsg->srcId, snapshot.lastApplyIndex + 1);
// update seq
pSender->seq = SYNC_SNAPSHOT_SEQ_BEGIN;
// build begin msg
- SyncSnapshotSend *pSendMsg = syncSnapshotSendBuild(0, pSender->pSyncNode->vgId);
+ SRpcMsg rpcMsg = {0};
+ (void)syncBuildSnapshotSend(&rpcMsg, 0, pSender->pSyncNode->vgId);
+
+ SyncSnapshotSend *pSendMsg = rpcMsg.pCont;
pSendMsg->srcId = pSender->pSyncNode->myRaftId;
pSendMsg->destId = (pSender->pSyncNode->replicasId)[pSender->replicaIndex];
pSendMsg->term = pSender->pSyncNode->pRaftStore->currentTerm;
@@ -816,11 +817,8 @@ int32_t syncNodeOnSnapshotReplyPre(SSyncNode *pSyncNode, SyncSnapshotRsp *pMsg)
pSendMsg->seq = SYNC_SNAPSHOT_SEQ_BEGIN;
// send msg
- SRpcMsg rpcMsg;
- syncSnapshotSend2RpcMsg(pSendMsg, &rpcMsg);
- syncNodeSendMsgById(&(pSendMsg->destId), pSender->pSyncNode, &rpcMsg);
+ syncNodeSendMsgById(&pSendMsg->destId, pSender->pSyncNode, &rpcMsg);
syncLogSendSyncSnapshotSend(pSyncNode, pSendMsg, "");
- syncSnapshotSendDestroy(pSendMsg);
return 0;
}
@@ -831,7 +829,9 @@ int32_t syncNodeOnSnapshotReplyPre(SSyncNode *pSyncNode, SyncSnapshotRsp *pMsg)
// condition 2 sender receives ack, set seq = ack + 1, send msg from seq
// condition 3 sender receives error msg, just print error log
//
-int32_t syncNodeOnSnapshotReply(SSyncNode *pSyncNode, SyncSnapshotRsp *pMsg) {
+int32_t syncNodeOnSnapshotReply(SSyncNode *pSyncNode, const SRpcMsg *pRpcMsg) {
+ SyncSnapshotRsp *pMsg = pRpcMsg->pCont;
+
// if already drop replica, do not process
if (!syncNodeInRaftGroup(pSyncNode, &(pMsg->srcId))) {
syncLogRecvSyncSnapshotRsp(pSyncNode, pMsg, "maybe replica already dropped");
@@ -903,60 +903,3 @@ int32_t syncNodeOnSnapshotReply(SSyncNode *pSyncNode, SyncSnapshotRsp *pMsg) {
return 0;
}
-
-int32_t syncNodeOnPreSnapshot(SSyncNode *ths, SyncPreSnapshot *pMsg) {
- syncLogRecvSyncPreSnapshot(ths, pMsg, "");
-
- SyncPreSnapshotReply *pMsgReply = syncPreSnapshotReplyBuild(ths->vgId);
- pMsgReply->srcId = ths->myRaftId;
- pMsgReply->destId = pMsg->srcId;
- pMsgReply->term = ths->pRaftStore->currentTerm;
-
- SSyncLogStoreData *pData = ths->pLogStore->data;
- SWal *pWal = pData->pWal;
-
- if (syncNodeIsMnode(ths)) {
- pMsgReply->snapStart = SYNC_INDEX_BEGIN;
-
- } else {
- bool isEmpty = ths->pLogStore->syncLogIsEmpty(ths->pLogStore);
- int64_t walCommitVer = walGetCommittedVer(pWal);
-
- if (!isEmpty && ths->commitIndex != walCommitVer) {
- sNError(ths, "commit not same, wal-commit:%" PRId64 ", commit:%" PRId64 ", ignore", walCommitVer,
- ths->commitIndex);
- goto _IGNORE;
- }
-
- pMsgReply->snapStart = ths->commitIndex + 1;
-
- // make local log clean
- int32_t code = ths->pLogStore->syncLogTruncate(ths->pLogStore, pMsgReply->snapStart);
- if (code != 0) {
- sNError(ths, "truncate wal error");
- goto _IGNORE;
- }
- }
-
- // can not write behind _RESPONSE
- SRpcMsg rpcMsg;
-
-_RESPONSE:
- syncPreSnapshotReply2RpcMsg(pMsgReply, &rpcMsg);
- syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg);
-
- syncPreSnapshotReplyDestroy(pMsgReply);
- return 0;
-
-_IGNORE:
- syncPreSnapshotReplyDestroy(pMsgReply);
- return 0;
-}
-
-int32_t syncNodeOnPreSnapshotReply(SSyncNode *ths, SyncPreSnapshotReply *pMsg) {
- syncLogRecvSyncPreSnapshotReply(ths, pMsg, "");
-
- // start snapshot
-
- return 0;
-}
\ No newline at end of file
diff --git a/source/libs/sync/src/syncTimeout.c b/source/libs/sync/src/syncTimeout.c
index 91d807319b..3d4583aadb 100644
--- a/source/libs/sync/src/syncTimeout.c
+++ b/source/libs/sync/src/syncTimeout.c
@@ -19,12 +19,13 @@
#include "syncRaftCfg.h"
#include "syncRaftLog.h"
#include "syncReplication.h"
+#include "syncUtil.h"
static void syncNodeCleanConfigIndex(SSyncNode* ths) {
int32_t newArrIndex = 0;
SyncIndex newConfigIndexArr[MAX_CONFIG_INDEX_COUNT] = {0};
SSnapshot snapshot = {0};
-
+
ths->pFsm->FpGetSnapshotInfo(ths->pFsm, &snapshot);
if (snapshot.lastApplyIndex != SYNC_INDEX_INVALID) {
for (int32_t i = 0; i < ths->pRaftCfg->configIndexCount; ++i) {
@@ -85,8 +86,10 @@ static int32_t syncNodeTimerRoutine(SSyncNode* ths) {
return 0;
}
-int32_t syncNodeOnTimer(SSyncNode* ths, SyncTimeout* pMsg) {
- int32_t ret = 0;
+int32_t syncNodeOnTimeout(SSyncNode* ths, const SRpcMsg* pRpc) {
+ int32_t ret = 0;
+ SyncTimeout* pMsg = pRpc->pCont;
+
syncLogRecvTimer(ths, pMsg, "");
if (pMsg->timeoutType == SYNC_TIMEOUT_PING) {
diff --git a/source/libs/sync/src/syncUtil.c b/source/libs/sync/src/syncUtil.c
index 894aa05aad..a575de7e56 100644
--- a/source/libs/sync/src/syncUtil.c
+++ b/source/libs/sync/src/syncUtil.c
@@ -15,6 +15,7 @@
#define _DEFAULT_SOURCE
#include "syncUtil.h"
+#include "syncMessage.h"
#include "syncRaftCfg.h"
#include "syncRaftStore.h"
#include "syncSnapshot.h"
@@ -345,3 +346,205 @@ void syncPrintSnapshotReceiverLog(const char* flags, ELogLevel level, int32_t df
pNode->replicaNum, pNode->pRaftCfg->lastConfigIndex, pNode->changing, pNode->restoreFinish, quorum,
pNode->electTimerLogicClock, pNode->heartbeatTimerLogicClockUser, peerStr, cfgStr);
}
+
+void syncLogRecvTimer(SSyncNode* pSyncNode, const SyncTimeout* pMsg, const char* s) {
+ sNTrace(pSyncNode, "recv sync-timer {type:%s, lc:%" PRId64 ", ms:%d, data:%p}, %s",
+ syncTimerTypeStr(pMsg->timeoutType), pMsg->logicClock, pMsg->timerMS, pMsg->data, s);
+}
+
+void syncLogRecvLocalCmd(SSyncNode* pSyncNode, const SyncLocalCmd* pMsg, const char* s) {
+ sNTrace(pSyncNode, "recv sync-local-cmd {cmd:%d-%s, sd-new-term:%" PRId64 ", fc-index:%" PRId64 "}, %s", pMsg->cmd,
+ syncLocalCmdGetStr(pMsg->cmd), pMsg->sdNewTerm, pMsg->fcIndex, s);
+}
+
+void syncLogSendAppendEntriesReply(SSyncNode* pSyncNode, const SyncAppendEntriesReply* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "send sync-append-entries-reply to %s:%d, {term:%" PRId64 ", pterm:%" PRId64 ", success:%d, match:%" PRId64
+ "}, %s",
+ host, port, pMsg->term, pMsg->privateTerm, pMsg->success, pMsg->matchIndex, s);
+}
+
+void syncLogRecvAppendEntriesReply(SSyncNode* pSyncNode, const SyncAppendEntriesReply* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "recv sync-append-entries-reply from %s:%d {term:%" PRId64 ", pterm:%" PRId64 ", success:%d, match:%" PRId64
+ "}, %s",
+ host, port, pMsg->term, pMsg->privateTerm, pMsg->success, pMsg->matchIndex, s);
+}
+
+void syncLogSendHeartbeat(SSyncNode* pSyncNode, const SyncHeartbeat* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "send sync-heartbeat to %s:%d {term:%" PRId64 ", cmt:%" PRId64 ", min-match:%" PRId64 ", pterm:%" PRId64
+ "}, %s",
+ host, port, pMsg->term, pMsg->commitIndex, pMsg->minMatchIndex, pMsg->privateTerm, s);
+}
+
+void syncLogRecvHeartbeat(SSyncNode* pSyncNode, const SyncHeartbeat* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "recv sync-heartbeat from %s:%d {term:%" PRId64 ", cmt:%" PRId64 ", min-match:%" PRId64 ", pterm:%" PRId64
+ "}, %s",
+ host, port, pMsg->term, pMsg->commitIndex, pMsg->minMatchIndex, pMsg->privateTerm, s);
+}
+
+void syncLogSendHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode, "send sync-heartbeat-reply from %s:%d {term:%" PRId64 ", pterm:%" PRId64 "}, %s", host, port,
+ pMsg->term, pMsg->privateTerm, s);
+}
+
+void syncLogRecvHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+ sNTrace(pSyncNode, "recv sync-heartbeat-reply from %s:%d {term:%" PRId64 ", pterm:%" PRId64 "}, %s", host, port,
+ pMsg->term, pMsg->privateTerm, s);
+}
+
+void syncLogSendSyncPreSnapshot(SSyncNode* pSyncNode, const SyncPreSnapshot* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+ sNTrace(pSyncNode, "send sync-pre-snapshot to %s:%d {term:%" PRId64 "}, %s", host, port, pMsg->term, s);
+}
+
+void syncLogRecvSyncPreSnapshot(SSyncNode* pSyncNode, const SyncPreSnapshot* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+ sNTrace(pSyncNode, "recv sync-pre-snapshot from %s:%d {term:%" PRId64 "}, %s", host, port, pMsg->term, s);
+}
+
+void syncLogSendSyncPreSnapshotReply(SSyncNode* pSyncNode, const SyncPreSnapshotReply* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+ sNTrace(pSyncNode, "send sync-pre-snapshot-reply to %s:%d {term:%" PRId64 ", snap-start:%" PRId64 "}, %s", host, port,
+ pMsg->term, pMsg->snapStart, s);
+}
+
+void syncLogRecvSyncPreSnapshotReply(SSyncNode* pSyncNode, const SyncPreSnapshotReply* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+ sNTrace(pSyncNode, "recv sync-pre-snapshot-reply from %s:%d {term:%" PRId64 ", snap-start:%" PRId64 "}, %s", host,
+ port, pMsg->term, pMsg->snapStart, s);
+}
+
+void syncLogSendSyncSnapshotSend(SSyncNode* pSyncNode, const SyncSnapshotSend* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "send sync-snapshot-send from %s:%d {term:%" PRId64 ", begin:%" PRId64 ", end:%" PRId64 ", lterm:%" PRId64
+ ", stime:%" PRId64 ", seq:%d}, %s",
+ host, port, pMsg->term, pMsg->beginIndex, pMsg->lastIndex, pMsg->lastTerm, pMsg->startTime, pMsg->seq, s);
+}
+
+void syncLogRecvSyncSnapshotSend(SSyncNode* pSyncNode, const SyncSnapshotSend* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "recv sync-snapshot-send from %s:%d {term:%" PRId64 ", begin:%" PRId64 ", lst:%" PRId64 ", lterm:%" PRId64
+ ", stime:%" PRId64 ", seq:%d, len:%u}, %s",
+ host, port, pMsg->term, pMsg->beginIndex, pMsg->lastIndex, pMsg->lastTerm, pMsg->startTime, pMsg->seq,
+ pMsg->dataLen, s);
+}
+
+void syncLogSendSyncSnapshotRsp(SSyncNode* pSyncNode, const SyncSnapshotRsp* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "send sync-snapshot-rsp from %s:%d {term:%" PRId64 ", begin:%" PRId64 ", lst:%" PRId64 ", lterm:%" PRId64
+ ", stime:%" PRId64 ", ack:%d}, %s",
+ host, port, pMsg->term, pMsg->snapBeginIndex, pMsg->lastIndex, pMsg->lastTerm, pMsg->startTime, pMsg->ack, s);
+}
+
+void syncLogRecvSyncSnapshotRsp(SSyncNode* pSyncNode, const SyncSnapshotRsp* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "recv sync-snapshot-rsp from %s:%d {term:%" PRId64 ", begin:%" PRId64 ", lst:%" PRId64 ", lterm:%" PRId64
+ ", stime:%" PRId64 ", ack:%d}, %s",
+ host, port, pMsg->term, pMsg->snapBeginIndex, pMsg->lastIndex, pMsg->lastTerm, pMsg->startTime, pMsg->ack, s);
+}
+
+void syncLogRecvAppendEntries(SSyncNode* pSyncNode, const SyncAppendEntries* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "recv sync-append-entries from %s:%d {term:%" PRId64 ", pre-index:%" PRId64 ", pre-term:%" PRId64
+ ", cmt:%" PRId64 ", pterm:%" PRId64 ", datalen:%d}, %s",
+ host, port, pMsg->term, pMsg->prevLogIndex, pMsg->prevLogTerm, pMsg->commitIndex, pMsg->privateTerm,
+ pMsg->dataLen, s);
+}
+
+void syncLogSendAppendEntries(SSyncNode* pSyncNode, const SyncAppendEntries* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+ sNTrace(pSyncNode,
+ "send sync-append-entries to %s:%d, {term:%" PRId64 ", pre-index:%" PRId64 ", pre-term:%" PRId64
+ ", pterm:%" PRId64 ", cmt:%" PRId64 ", datalen:%d}, %s",
+ host, port, pMsg->term, pMsg->prevLogIndex, pMsg->prevLogTerm, pMsg->privateTerm, pMsg->commitIndex,
+ pMsg->dataLen, s);
+}
+
+void syncLogRecvRequestVote(SSyncNode* pSyncNode, const SyncRequestVote* pMsg, const char* s) {
+ char logBuf[256];
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+ sNTrace(pSyncNode, "recv sync-request-vote from %s:%d, {term:%" PRId64 ", lindex:%" PRId64 ", lterm:%" PRId64 "}, %s",
+ host, port, pMsg->term, pMsg->lastLogIndex, pMsg->lastLogTerm, s);
+}
+
+void syncLogSendRequestVote(SSyncNode* pNode, const SyncRequestVote* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+ sNTrace(pNode, "send sync-request-vote to %s:%d {term:%" PRId64 ", lindex:%" PRId64 ", lterm:%" PRId64 "}, %s", host,
+ port, pMsg->term, pMsg->lastLogIndex, pMsg->lastLogTerm, s);
+}
+
+void syncLogRecvRequestVoteReply(SSyncNode* pSyncNode, const SyncRequestVoteReply* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+ sNTrace(pSyncNode, "recv sync-request-vote-reply from %s:%d {term:%" PRId64 ", grant:%d}, %s", host, port, pMsg->term,
+ pMsg->voteGranted, s);
+}
+
+void syncLogSendRequestVoteReply(SSyncNode* pSyncNode, const SyncRequestVoteReply* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+ sNTrace(pSyncNode, "send sync-request-vote-reply to %s:%d {term:%" PRId64 ", grant:%d}, %s", host, port, pMsg->term,
+ pMsg->voteGranted, s);
+}
\ No newline at end of file
diff --git a/source/libs/sync/src/syncVoteMgr.c b/source/libs/sync/src/syncVoteMgr.c
index 4ca4e26bec..8a0a35ce33 100644
--- a/source/libs/sync/src/syncVoteMgr.c
+++ b/source/libs/sync/src/syncVoteMgr.c
@@ -15,6 +15,7 @@
#define _DEFAULT_SOURCE
#include "syncVoteMgr.h"
+#include "syncMessage.h"
#include "syncUtil.h"
static void voteGrantedClearVotes(SVotesGranted *pVotesGranted) {
diff --git a/source/libs/sync/test/syncAppendEntriesBatchTest.cpp b/source/libs/sync/test/syncAppendEntriesBatchTest.cpp
index 947a2cb05c..964d991bb0 100644
--- a/source/libs/sync/test/syncAppendEntriesBatchTest.cpp
+++ b/source/libs/sync/test/syncAppendEntriesBatchTest.cpp
@@ -1,5 +1,5 @@
-//#include
#include "syncTest.h"
+#include "syncBatch.h"
void logTest() {
sTrace("--- sync log test: trace");
diff --git a/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp b/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp
index a6d33aa674..057f2ea6dd 100644
--- a/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp
+++ b/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp
@@ -143,7 +143,8 @@ int32_t SnapshotDoWrite(struct SSyncFSM* pFsm, void* pWriter, void* pBuf, int32_
void RestoreFinishCb(struct SSyncFSM* pFsm) { sTrace("==callback== ==RestoreFinishCb=="); }
void ReConfigCb(struct SSyncFSM* pFsm, const SRpcMsg* pMsg, SReConfigCbMeta* cbMeta) {
- sTrace("==callback== ==ReConfigCb== flag:0x%lX, index:%" PRId64 ", code:%d, currentTerm:%" PRIu64 ", term:%" PRIu64,
+ sTrace("==callback== ==ReConfigCb== flag:%" PRIx64 ", index:%" PRId64 ", code:%d, currentTerm:%" PRIu64
+ ", term:%" PRIu64,
cbMeta->flag, cbMeta->index, cbMeta->code, cbMeta->currentTerm, cbMeta->term);
}
@@ -222,18 +223,18 @@ int64_t createSyncNode(int32_t replicaNum, int32_t myIndex, int32_t vgId, SWal*
SSyncNode* pSyncNode = (SSyncNode*)syncNodeAcquire(rid);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
- gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncSnapshot = pSyncNode->FpOnSnapshot;
- gSyncIO->FpOnSyncSnapshotReply = pSyncNode->FpOnSnapshotReply;
+ // gSyncIO->FpOnSyncSnapshot = pSyncNode->FpOnSnapshot;
+ // gSyncIO->FpOnSyncSnapshotReply = pSyncNode->FpOnSnapshotReply;
gSyncIO->pSyncNode = pSyncNode;
syncNodeRelease(pSyncNode);
diff --git a/source/libs/sync/test/syncConfigChangeTest.cpp b/source/libs/sync/test/syncConfigChangeTest.cpp
index cf498933e1..bab3d2236f 100644
--- a/source/libs/sync/test/syncConfigChangeTest.cpp
+++ b/source/libs/sync/test/syncConfigChangeTest.cpp
@@ -73,7 +73,8 @@ int32_t GetSnapshotCb(const struct SSyncFSM* pFsm, SSnapshot* pSnapshot) {
void RestoreFinishCb(struct SSyncFSM* pFsm) { sTrace("==callback== ==RestoreFinishCb=="); }
void ReConfigCb(struct SSyncFSM* pFsm, const SRpcMsg* pMsg, SReConfigCbMeta* cbMeta) {
- sTrace("==callback== ==ReConfigCb== flag:0x%lX, index:%" PRId64 ", code:%d, currentTerm:%" PRIu64 ", term:%" PRIu64,
+ sTrace("==callback== ==ReConfigCb== flag:%" PRIx64 ", index:%" PRId64 ", code:%d, currentTerm:%" PRIu64
+ ", term:%" PRIu64,
cbMeta->flag, cbMeta->index, cbMeta->code, cbMeta->currentTerm, cbMeta->term);
}
@@ -145,16 +146,16 @@ int64_t createSyncNode(int32_t replicaNum, int32_t myIndex, int32_t vgId, SWal*
SSyncNode* pSyncNode = (SSyncNode*)syncNodeAcquire(rid);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
- gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
gSyncIO->pSyncNode = pSyncNode;
syncNodeRelease(pSyncNode);
diff --git a/source/libs/sync/test/syncElectTest.cpp b/source/libs/sync/test/syncElectTest.cpp
index 59d731c823..58c0e7d13a 100644
--- a/source/libs/sync/test/syncElectTest.cpp
+++ b/source/libs/sync/test/syncElectTest.cpp
@@ -59,15 +59,15 @@ SSyncNode* createSyncNode(int32_t replicaNum, int32_t myIndex, int32_t vgId, SWa
SSyncNode* pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
gSyncIO->pSyncNode = pSyncNode;
syncNodeStart(pSyncNode);
diff --git a/source/libs/sync/test/syncEnqTest.cpp b/source/libs/sync/test/syncEnqTest.cpp
index 54bfb1b387..d2ae46a443 100644
--- a/source/libs/sync/test/syncEnqTest.cpp
+++ b/source/libs/sync/test/syncEnqTest.cpp
@@ -38,15 +38,15 @@ SSyncNode* syncNodeInit() {
SSyncNode* pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
gSyncIO->pSyncNode = pSyncNode;
return pSyncNode;
diff --git a/source/libs/sync/test/syncIOSendMsgTest.cpp b/source/libs/sync/test/syncIOSendMsgTest.cpp
index a082f9373a..ae74929b7b 100644
--- a/source/libs/sync/test/syncIOSendMsgTest.cpp
+++ b/source/libs/sync/test/syncIOSendMsgTest.cpp
@@ -38,15 +38,15 @@ SSyncNode* syncNodeInit() {
SSyncNode* pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
gSyncIO->pSyncNode = pSyncNode;
return pSyncNode;
diff --git a/source/libs/sync/test/syncInitTest.cpp b/source/libs/sync/test/syncInitTest.cpp
index b15a767db5..1e0ff54514 100644
--- a/source/libs/sync/test/syncInitTest.cpp
+++ b/source/libs/sync/test/syncInitTest.cpp
@@ -38,14 +38,14 @@ SSyncNode* syncNodeInit() {
SSyncNode* pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
gSyncIO->pSyncNode = pSyncNode;
return pSyncNode;
diff --git a/source/libs/sync/test/syncPingSelfTest.cpp b/source/libs/sync/test/syncPingSelfTest.cpp
index 19f377e037..975565770a 100644
--- a/source/libs/sync/test/syncPingSelfTest.cpp
+++ b/source/libs/sync/test/syncPingSelfTest.cpp
@@ -39,14 +39,14 @@ SSyncNode* syncNodeInit() {
SSyncNode* pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
gSyncIO->pSyncNode = pSyncNode;
return pSyncNode;
diff --git a/source/libs/sync/test/syncPingTimerTest.cpp b/source/libs/sync/test/syncPingTimerTest.cpp
index ded7e22eac..8aa4e9dada 100644
--- a/source/libs/sync/test/syncPingTimerTest.cpp
+++ b/source/libs/sync/test/syncPingTimerTest.cpp
@@ -39,14 +39,14 @@ SSyncNode* syncNodeInit() {
SSyncNode* pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
gSyncIO->pSyncNode = pSyncNode;
return pSyncNode;
diff --git a/source/libs/sync/test/syncPingTimerTest2.cpp b/source/libs/sync/test/syncPingTimerTest2.cpp
index 4f1bb64798..e77358f375 100644
--- a/source/libs/sync/test/syncPingTimerTest2.cpp
+++ b/source/libs/sync/test/syncPingTimerTest2.cpp
@@ -39,14 +39,14 @@ SSyncNode* syncNodeInit() {
SSyncNode* pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
gSyncIO->pSyncNode = pSyncNode;
return pSyncNode;
diff --git a/source/libs/sync/test/syncReplicateTest.cpp b/source/libs/sync/test/syncReplicateTest.cpp
index 2419ec0974..4a82bba15d 100644
--- a/source/libs/sync/test/syncReplicateTest.cpp
+++ b/source/libs/sync/test/syncReplicateTest.cpp
@@ -120,16 +120,16 @@ int64_t createSyncNode(int32_t replicaNum, int32_t myIndex, int32_t vgId, SWal*
SSyncNode* pSyncNode = (SSyncNode*)syncNodeAcquire(rid);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
- gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
gSyncIO->pSyncNode = pSyncNode;
syncNodeRelease(pSyncNode);
diff --git a/source/libs/sync/test/syncRpcMsgTest.cpp b/source/libs/sync/test/syncRpcMsgTest.cpp
index 3f66cd9d1c..5fb622d791 100644
--- a/source/libs/sync/test/syncRpcMsgTest.cpp
+++ b/source/libs/sync/test/syncRpcMsgTest.cpp
@@ -45,7 +45,7 @@ SyncClientRequest *createSyncClientRequest() {
strcpy((char *)rpcMsg.pCont, "hello rpc");
SRpcMsg clientRequestMsg;
- syncClientRequestBuildFromRpcMsg(&clientRequestMsg, &rpcMsg, 123, true, 1000);
+ syncBuildClientRequest(&clientRequestMsg, &rpcMsg, 123, true, 1000);
SyncClientRequest *pMsg = (SyncClientRequest *)taosMemoryMalloc(clientRequestMsg.contLen);
memcpy(pMsg->data, clientRequestMsg.pCont, clientRequestMsg.contLen);
return pMsg;
diff --git a/source/libs/sync/test/syncSnapshotTest.cpp b/source/libs/sync/test/syncSnapshotTest.cpp
index 40eac0b55f..000348bf1b 100644
--- a/source/libs/sync/test/syncSnapshotTest.cpp
+++ b/source/libs/sync/test/syncSnapshotTest.cpp
@@ -116,14 +116,14 @@ SSyncNode *syncNodeInit() {
SSyncNode *pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
gSyncIO->pSyncNode = pSyncNode;
syncNodeStart(pSyncNode);
@@ -154,7 +154,7 @@ SRpcMsg *step0() {
SyncClientRequest *step1(const SRpcMsg *pMsg) {
SRpcMsg clientRequestMsg;
- syncClientRequestBuildFromRpcMsg(&clientRequestMsg, pMsg, 123, true, 1000);
+ syncBuildClientRequest(&clientRequestMsg, pMsg, 123, true, 1000);
SyncClientRequest *pMsg2 = (SyncClientRequest *)taosMemoryMalloc(clientRequestMsg.contLen);
memcpy(pMsg2->data, clientRequestMsg.pCont, clientRequestMsg.contLen);
return pMsg2;
diff --git a/source/libs/sync/test/syncTestTool.cpp b/source/libs/sync/test/syncTestTool.cpp
index b0fe612b7f..8c486df118 100644
--- a/source/libs/sync/test/syncTestTool.cpp
+++ b/source/libs/sync/test/syncTestTool.cpp
@@ -148,8 +148,8 @@ void RestoreFinishCb(struct SSyncFSM* pFsm) { sTrace("==callback== ==RestoreFini
void ReConfigCb(struct SSyncFSM* pFsm, const SRpcMsg* pMsg, SReConfigCbMeta* cbMeta) {
char* s = syncCfg2Str(&(cbMeta->newCfg));
- sTrace("==callback== ==ReConfigCb== flag:0x%lX, index:%" PRId64 ", code:%d, currentTerm:%" PRIu64 ", term:%" PRIu64
- ", newCfg:%s",
+ sTrace("==callback== ==ReConfigCb== flag:%" PRIx64 ", index:%" PRId64 ", code:%d, currentTerm:%" PRIu64
+ ", term:%" PRIu64 ", newCfg:%s",
cbMeta->flag, cbMeta->index, cbMeta->code, cbMeta->currentTerm, cbMeta->term, s);
taosMemoryFree(s);
}
@@ -257,16 +257,16 @@ int64_t createSyncNode(int32_t replicaNum, int32_t myIndex, int32_t vgId, SWal*
SSyncNode* pSyncNode = (SSyncNode*)syncNodeAcquire(rid);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
- gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncSnapshot = pSyncNode->FpOnSnapshot;
- gSyncIO->FpOnSyncSnapshotReply = pSyncNode->FpOnSnapshotReply;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncSnapshot = pSyncNode->FpOnSnapshot;
+ // gSyncIO->FpOnSyncSnapshotReply = pSyncNode->FpOnSnapshotReply;
gSyncIO->pSyncNode = pSyncNode;
syncNodeRelease(pSyncNode);
diff --git a/source/libs/sync/test/syncTimeoutTest.cpp b/source/libs/sync/test/syncTimeoutTest.cpp
index ed0742f499..211445b5fe 100644
--- a/source/libs/sync/test/syncTimeoutTest.cpp
+++ b/source/libs/sync/test/syncTimeoutTest.cpp
@@ -28,7 +28,7 @@ void test2() {
uint32_t len = pMsg->bytes;
char *serialized = (char *)taosMemoryMalloc(len);
syncTimeoutSerialize(pMsg, serialized, len);
- SyncTimeout *pMsg2 = syncTimeoutBuild();
+ SyncTimeout *pMsg2 = syncTimeoutBuildX();
syncTimeoutDeserialize(serialized, len, pMsg2);
syncTimeoutLog2((char *)"test2: syncTimeoutSerialize -> syncTimeoutDeserialize ", pMsg2);
diff --git a/source/libs/sync/test/syncVotesGrantedTest.cpp b/source/libs/sync/test/syncVotesGrantedTest.cpp
index 2d2a12c656..67573a6a37 100644
--- a/source/libs/sync/test/syncVotesGrantedTest.cpp
+++ b/source/libs/sync/test/syncVotesGrantedTest.cpp
@@ -39,14 +39,14 @@ SSyncNode* syncNodeInit() {
pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
gSyncIO->pSyncNode = pSyncNode;
return pSyncNode;
diff --git a/source/libs/sync/test/syncVotesRespondTest.cpp b/source/libs/sync/test/syncVotesRespondTest.cpp
index 712e97edc9..3a0dac98b0 100644
--- a/source/libs/sync/test/syncVotesRespondTest.cpp
+++ b/source/libs/sync/test/syncVotesRespondTest.cpp
@@ -40,14 +40,14 @@ SSyncNode* syncNodeInit() {
pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
gSyncIO->pSyncNode = pSyncNode;
return pSyncNode;
diff --git a/source/libs/sync/test/syncWriteTest.cpp b/source/libs/sync/test/syncWriteTest.cpp
index 56dd0a5845..aae1862681 100644
--- a/source/libs/sync/test/syncWriteTest.cpp
+++ b/source/libs/sync/test/syncWriteTest.cpp
@@ -94,14 +94,14 @@ SSyncNode *syncNodeInit() {
SSyncNode *pSyncNode = syncNodeOpen(&syncInfo);
assert(pSyncNode != NULL);
- gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
- gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
- gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
- gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
- gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
- gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
- gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
- gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
+ // gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
+ // gSyncIO->FpOnSyncClientRequest = pSyncNode->FpOnClientRequest;
+ // gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
+ // gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
+ // gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
+ // gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
+ // gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
+ // gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
gSyncIO->pSyncNode = pSyncNode;
syncNodeStart(pSyncNode);
diff --git a/source/libs/sync/test/sync_test_lib/inc/syncBatch.h b/source/libs/sync/test/sync_test_lib/inc/syncBatch.h
new file mode 100644
index 0000000000..9ea9da8d69
--- /dev/null
+++ b/source/libs/sync/test/sync_test_lib/inc/syncBatch.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2019 TAOS Data, Inc.
+ *
+ * This program is free software: you can use, redistribute, and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3
+ * or later ("AGPL"), as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef _TD_LIBS_SYNC_BATCH_H
+#define _TD_LIBS_SYNC_BATCH_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "syncInt.h"
+
+// ---------------------------------------------
+typedef struct SRaftMeta {
+ uint64_t seqNum;
+ bool isWeak;
+} SRaftMeta;
+
+// block1:
+// block2: SRaftMeta array
+// block3: rpc msg array (with pCont pointer)
+
+typedef struct SyncClientRequestBatch {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType; // TDMT_SYNC_CLIENT_REQUEST_BATCH
+ uint32_t dataCount;
+ uint32_t dataLen;
+ char data[]; // block2, block3
+} SyncClientRequestBatch;
+
+SyncClientRequestBatch* syncClientRequestBatchBuild(SRpcMsg** rpcMsgPArr, SRaftMeta* raftArr, int32_t arrSize,
+ int32_t vgId);
+void syncClientRequestBatch2RpcMsg(const SyncClientRequestBatch* pSyncMsg, SRpcMsg* pRpcMsg);
+void syncClientRequestBatchDestroy(SyncClientRequestBatch* pMsg);
+void syncClientRequestBatchDestroyDeep(SyncClientRequestBatch* pMsg);
+SRaftMeta* syncClientRequestBatchMetaArr(const SyncClientRequestBatch* pSyncMsg);
+SRpcMsg* syncClientRequestBatchRpcMsgArr(const SyncClientRequestBatch* pSyncMsg);
+SyncClientRequestBatch* syncClientRequestBatchFromRpcMsg(const SRpcMsg* pRpcMsg);
+cJSON* syncClientRequestBatch2Json(const SyncClientRequestBatch* pMsg);
+char* syncClientRequestBatch2Str(const SyncClientRequestBatch* pMsg);
+
+// for debug ----------------------
+void syncClientRequestBatchPrint(const SyncClientRequestBatch* pMsg);
+void syncClientRequestBatchPrint2(char* s, const SyncClientRequestBatch* pMsg);
+void syncClientRequestBatchLog(const SyncClientRequestBatch* pMsg);
+void syncClientRequestBatchLog2(char* s, const SyncClientRequestBatch* pMsg);
+
+typedef struct SOffsetAndContLen {
+ int32_t offset;
+ int32_t contLen;
+} SOffsetAndContLen;
+
+// data:
+// block1: SOffsetAndContLen Array
+// block2: entry Array
+
+typedef struct SyncAppendEntriesBatch {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+
+ // private data
+ SyncTerm term;
+ SyncIndex prevLogIndex;
+ SyncTerm prevLogTerm;
+ SyncIndex commitIndex;
+ SyncTerm privateTerm;
+ int32_t dataCount;
+ uint32_t dataLen;
+ char data[]; // block1, block2
+} SyncAppendEntriesBatch;
+
+SyncAppendEntriesBatch* syncAppendEntriesBatchBuild(SSyncRaftEntry** entryPArr, int32_t arrSize, int32_t vgId);
+SOffsetAndContLen* syncAppendEntriesBatchMetaTableArray(SyncAppendEntriesBatch* pMsg);
+void syncAppendEntriesBatchDestroy(SyncAppendEntriesBatch* pMsg);
+void syncAppendEntriesBatchSerialize(const SyncAppendEntriesBatch* pMsg, char* buf, uint32_t bufLen);
+void syncAppendEntriesBatchDeserialize(const char* buf, uint32_t len, SyncAppendEntriesBatch* pMsg);
+char* syncAppendEntriesBatchSerialize2(const SyncAppendEntriesBatch* pMsg, uint32_t* len);
+SyncAppendEntriesBatch* syncAppendEntriesBatchDeserialize2(const char* buf, uint32_t len);
+void syncAppendEntriesBatch2RpcMsg(const SyncAppendEntriesBatch* pMsg, SRpcMsg* pRpcMsg);
+void syncAppendEntriesBatchFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntriesBatch* pMsg);
+SyncAppendEntriesBatch* syncAppendEntriesBatchFromRpcMsg2(const SRpcMsg* pRpcMsg);
+
+// ---------------------------------------------
+void syncLogSendAppendEntriesBatch(SSyncNode* pSyncNode, const SyncAppendEntriesBatch* pMsg, const char* s);
+void syncLogRecvAppendEntriesBatch(SSyncNode* pSyncNode, const SyncAppendEntriesBatch* pMsg, const char* s);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_TD_LIBS_SYNC_INT_H*/
diff --git a/source/libs/sync/test/sync_test_lib/inc/syncIO.h b/source/libs/sync/test/sync_test_lib/inc/syncIO.h
index 955a832b68..19f896182e 100644
--- a/source/libs/sync/test/sync_test_lib/inc/syncIO.h
+++ b/source/libs/sync/test/sync_test_lib/inc/syncIO.h
@@ -25,6 +25,7 @@ extern "C" {
#include
#include "os.h"
#include "syncInt.h"
+#include "syncTest.h"
#include "taosdef.h"
#include "tqueue.h"
#include "trpc.h"
@@ -32,6 +33,11 @@ extern "C" {
#define TICK_Q_TIMER_MS 1000
#define TICK_Ping_TIMER_MS 1000
+typedef struct SyncPing SyncPing;
+typedef struct SyncPingReply SyncPingReply;
+
+extern bool gRaftDetailLog;
+
typedef struct SSyncIO {
STaosQueue *pMsgQ;
STaosQset *pQset;
diff --git a/source/libs/sync/test/sync_test_lib/inc/syncTest.h b/source/libs/sync/test/sync_test_lib/inc/syncTest.h
index a1881bf1b3..443d3a45d6 100644
--- a/source/libs/sync/test/sync_test_lib/inc/syncTest.h
+++ b/source/libs/sync/test/sync_test_lib/inc/syncTest.h
@@ -42,6 +42,20 @@ extern "C" {
extern void addEpIntoEpSet(SEpSet* pEpSet, const char* fqdn, uint16_t port);
+typedef struct SyncPing SyncPing;
+typedef struct SyncPingReply SyncPingReply;
+
+typedef int32_t (*FpOnPingCb)(SSyncNode* ths, SyncPing* pMsg);
+typedef int32_t (*FpOnPingReplyCb)(SSyncNode* ths, SyncPingReply* pMsg);
+typedef int32_t (*FpOnClientRequestCb)(SSyncNode* ths, SRpcMsg* pMsg, SyncIndex* pRetIndex);
+typedef int32_t (*FpOnRequestVoteCb)(SSyncNode* ths, SyncRequestVote* pMsg);
+typedef int32_t (*FpOnRequestVoteReplyCb)(SSyncNode* ths, SyncRequestVoteReply* pMsg);
+typedef int32_t (*FpOnAppendEntriesCb)(SSyncNode* ths, SyncAppendEntries* pMsg);
+typedef int32_t (*FpOnAppendEntriesReplyCb)(SSyncNode* ths, SyncAppendEntriesReply* pMsg);
+typedef int32_t (*FpOnTimeoutCb)(SSyncNode* pSyncNode, SyncTimeout* pMsg);
+typedef int32_t (*FpOnSnapshotCb)(SSyncNode* ths, SyncSnapshotSend* pMsg);
+typedef int32_t (*FpOnSnapshotReplyCb)(SSyncNode* ths, SyncSnapshotRsp* pMsg);
+
cJSON* syncEntry2Json(const SSyncRaftEntry* pEntry);
char* syncEntry2Str(const SSyncRaftEntry* pEntry);
void syncEntryPrint(const SSyncRaftEntry* pObj);
@@ -49,6 +63,9 @@ void syncEntryPrint2(char* s, const SSyncRaftEntry* pObj);
void syncEntryLog(const SSyncRaftEntry* pObj);
void syncEntryLog2(char* s, const SSyncRaftEntry* pObj);
+char* syncCfg2Str(SSyncCfg* pSyncCfg);
+int32_t syncCfgFromStr(const char* s, SSyncCfg* pSyncCfg);
+
cJSON* raftCache2Json(SRaftEntryHashCache* pObj);
char* raftCache2Str(SRaftEntryHashCache* pObj);
void raftCachePrint(SRaftEntryHashCache* pObj);
@@ -63,6 +80,14 @@ void raftEntryCachePrint2(char* s, SRaftEntryCache* pObj);
void raftEntryCacheLog(SRaftEntryCache* pObj);
void raftEntryCacheLog2(char* s, SRaftEntryCache* pObj);
+int32_t raftStoreFromJson(SRaftStore* pRaftStore, cJSON* pJson);
+cJSON* raftStore2Json(SRaftStore* pRaftStore);
+char* raftStore2Str(SRaftStore* pRaftStore);
+void raftStorePrint(SRaftStore* pObj);
+void raftStorePrint2(char* s, SRaftStore* pObj);
+void raftStoreLog(SRaftStore* pObj);
+void raftStoreLog2(char* s, SRaftStore* pObj);
+
cJSON* syncAppendEntriesBatch2Json(const SyncAppendEntriesBatch* pMsg);
char* syncAppendEntriesBatch2Str(const SyncAppendEntriesBatch* pMsg);
void syncAppendEntriesBatchPrint(const SyncAppendEntriesBatch* pMsg);
@@ -85,6 +110,7 @@ void logStoreSimpleLog2(char* s, SSyncLogStore* pLogStore);
cJSON* syncNode2Json(const SSyncNode* pSyncNode);
char* syncNode2Str(const SSyncNode* pSyncNode);
+char* syncNode2SimpleStr(const SSyncNode* pSyncNode);
cJSON* voteGranted2Json(SVotesGranted* pVotesGranted);
char* voteGranted2Str(SVotesGranted* pVotesGranted);
@@ -99,8 +125,359 @@ char* snapshotSender2Str(SSyncSnapshotSender* pSender);
cJSON* snapshotReceiver2Json(SSyncSnapshotReceiver* pReceiver);
char* snapshotReceiver2Str(SSyncSnapshotReceiver* pReceiver);
+cJSON* syncIndexMgr2Json(SSyncIndexMgr* pSyncIndexMgr);
+char* syncIndexMgr2Str(SSyncIndexMgr* pSyncIndexMgr);
+void syncIndexMgrPrint(SSyncIndexMgr* pObj);
+void syncIndexMgrPrint2(char* s, SSyncIndexMgr* pObj);
+void syncIndexMgrLog(SSyncIndexMgr* pObj);
+void syncIndexMgrLog2(char* s, SSyncIndexMgr* pObj);
+
+cJSON* syncRpcMsg2Json(SRpcMsg* pRpcMsg);
+cJSON* syncRpcUnknownMsg2Json();
+char* syncRpcMsg2Str(SRpcMsg* pRpcMsg);
+void syncRpcMsgPrint(SRpcMsg* pMsg);
+void syncRpcMsgPrint2(char* s, SRpcMsg* pMsg);
+void syncRpcMsgLog(SRpcMsg* pMsg);
+void syncRpcMsgLog2(char* s, SRpcMsg* pMsg);
+
+
+// origin syncMessage
+typedef struct SyncPing {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+ // private data
+ uint32_t dataLen;
+ char data[];
+} SyncPing;
+
+
+SyncPing* syncPingBuild(uint32_t dataLen);
+SyncPing* syncPingBuild2(const SRaftId* srcId, const SRaftId* destId, int32_t vgId, const char* str);
+SyncPing* syncPingBuild3(const SRaftId* srcId, const SRaftId* destId, int32_t vgId);
+char* syncPingSerialize2(const SyncPing* pMsg, uint32_t* len);
+int32_t syncPingSerialize3(const SyncPing* pMsg, char* buf, int32_t bufLen);
+SyncPing* syncPingDeserialize3(void* buf, int32_t bufLen);
+void syncPing2RpcMsg(const SyncPing* pMsg, SRpcMsg* pRpcMsg);
+void syncPingFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPing* pMsg);
+cJSON* syncPing2Json(const SyncPing* pMsg);
+char* syncPing2Str(const SyncPing* pMsg);
+void syncPingPrint(const SyncPing* pMsg);
+void syncPingPrint2(char* s, const SyncPing* pMsg);
+void syncPingLog(const SyncPing* pMsg);
+void syncPingLog2(char* s, const SyncPing* pMsg);
+void syncPingDestroy(SyncPing* pMsg);
+void syncPingSerialize(const SyncPing* pMsg, char* buf, uint32_t bufLen);
+void syncPingDeserialize(const char* buf, uint32_t len, SyncPing* pMsg);
+SyncPing* syncPingDeserialize2(const char* buf, uint32_t len);
+SyncPing* syncPingFromRpcMsg2(const SRpcMsg* pRpcMsg);
+
+typedef struct SyncPingReply {
+ uint32_t bytes;
+ int32_t vgId;
+ uint32_t msgType;
+ SRaftId srcId;
+ SRaftId destId;
+ // private data
+ uint32_t dataLen;
+ char data[];
+} SyncPingReply;
+
+SyncPingReply* syncPingReplyBuild(uint32_t dataLen);
+SyncPingReply* syncPingReplyBuild2(const SRaftId* srcId, const SRaftId* destId, int32_t vgId, const char* str);
+SyncPingReply* syncPingReplyBuild3(const SRaftId* srcId, const SRaftId* destId, int32_t vgId);
+void syncPingReplyDestroy(SyncPingReply* pMsg);
+void syncPingReplySerialize(const SyncPingReply* pMsg, char* buf, uint32_t bufLen);
+void syncPingReplyDeserialize(const char* buf, uint32_t len, SyncPingReply* pMsg);
+char* syncPingReplySerialize2(const SyncPingReply* pMsg, uint32_t* len);
+SyncPingReply* syncPingReplyDeserialize2(const char* buf, uint32_t len);
+int32_t syncPingReplySerialize3(const SyncPingReply* pMsg, char* buf, int32_t bufLen);
+SyncPingReply* syncPingReplyDeserialize3(void* buf, int32_t bufLen);
+void syncPingReply2RpcMsg(const SyncPingReply* pMsg, SRpcMsg* pRpcMsg);
+void syncPingReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPingReply* pMsg);
+SyncPingReply* syncPingReplyFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncPingReply2Json(const SyncPingReply* pMsg);
+char* syncPingReply2Str(const SyncPingReply* pMsg);
+
+// for debug ----------------------
+void syncPingReplyPrint(const SyncPingReply* pMsg);
+void syncPingReplyPrint2(char* s, const SyncPingReply* pMsg);
+void syncPingReplyLog(const SyncPingReply* pMsg);
+void syncPingReplyLog2(char* s, const SyncPingReply* pMsg);
+
+int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg);
+int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg);
+int32_t syncNodePing(SSyncNode* pSyncNode, const SRaftId* destRaftId, SyncPing* pMsg);
+int32_t syncNodePingSelf(SSyncNode* pSyncNode);
+int32_t syncNodePingPeers(SSyncNode* pSyncNode);
+int32_t syncNodePingAll(SSyncNode* pSyncNode);
+
+SyncTimeout* syncTimeoutBuildX();
+SyncTimeout* syncTimeoutBuild2(ESyncTimeoutType timeoutType, uint64_t logicClock, int32_t timerMS, int32_t vgId,
+ void* data);
+void syncTimeoutDestroy(SyncTimeout* pMsg);
+void syncTimeoutSerialize(const SyncTimeout* pMsg, char* buf, uint32_t bufLen);
+void syncTimeoutDeserialize(const char* buf, uint32_t len, SyncTimeout* pMsg);
+char* syncTimeoutSerialize2(const SyncTimeout* pMsg, uint32_t* len);
+SyncTimeout* syncTimeoutDeserialize2(const char* buf, uint32_t len);
+void syncTimeout2RpcMsg(const SyncTimeout* pMsg, SRpcMsg* pRpcMsg);
+void syncTimeoutFromRpcMsg(const SRpcMsg* pRpcMsg, SyncTimeout* pMsg);
+SyncTimeout* syncTimeoutFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncTimeout2Json(const SyncTimeout* pMsg);
+char* syncTimeout2Str(const SyncTimeout* pMsg);
+void syncTimeoutPrint(const SyncTimeout* pMsg);
+void syncTimeoutPrint2(char* s, const SyncTimeout* pMsg);
+void syncTimeoutLog(const SyncTimeout* pMsg);
+void syncTimeoutLog2(char* s, const SyncTimeout* pMsg);
+
+SyncClientRequest* syncClientRequestAlloc(uint32_t dataLen);
+void syncClientRequest2RpcMsg(const SyncClientRequest* pMsg, SRpcMsg* pRpcMsg); // step 2
+void syncClientRequestFromRpcMsg(const SRpcMsg* pRpcMsg, SyncClientRequest* pMsg);
+cJSON* syncClientRequest2Json(const SyncClientRequest* pMsg);
+char* syncClientRequest2Str(const SyncClientRequest* pMsg);
+void syncClientRequestPrint(const SyncClientRequest* pMsg);
+void syncClientRequestPrint2(char* s, const SyncClientRequest* pMsg);
+void syncClientRequestLog(const SyncClientRequest* pMsg);
+void syncClientRequestLog2(char* s, const SyncClientRequest* pMsg);
+
+SyncRequestVote* syncRequestVoteBuild(int32_t vgId);
+void syncRequestVoteDestroy(SyncRequestVote* pMsg);
+void syncRequestVoteSerialize(const SyncRequestVote* pMsg, char* buf, uint32_t bufLen);
+void syncRequestVoteDeserialize(const char* buf, uint32_t len, SyncRequestVote* pMsg);
+char* syncRequestVoteSerialize2(const SyncRequestVote* pMsg, uint32_t* len);
+SyncRequestVote* syncRequestVoteDeserialize2(const char* buf, uint32_t len);
+void syncRequestVote2RpcMsg(const SyncRequestVote* pMsg, SRpcMsg* pRpcMsg);
+void syncRequestVoteFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVote* pMsg);
+SyncRequestVote* syncRequestVoteFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncRequestVote2Json(const SyncRequestVote* pMsg);
+char* syncRequestVote2Str(const SyncRequestVote* pMsg);
+
+// for debug ----------------------
+void syncRequestVotePrint(const SyncRequestVote* pMsg);
+void syncRequestVotePrint2(char* s, const SyncRequestVote* pMsg);
+void syncRequestVoteLog(const SyncRequestVote* pMsg);
+void syncRequestVoteLog2(char* s, const SyncRequestVote* pMsg);
+
+SyncRequestVoteReply* syncRequestVoteReplyBuild(int32_t vgId);
+void syncRequestVoteReplyDestroy(SyncRequestVoteReply* pMsg);
+void syncRequestVoteReplySerialize(const SyncRequestVoteReply* pMsg, char* buf, uint32_t bufLen);
+void syncRequestVoteReplyDeserialize(const char* buf, uint32_t len, SyncRequestVoteReply* pMsg);
+char* syncRequestVoteReplySerialize2(const SyncRequestVoteReply* pMsg, uint32_t* len);
+SyncRequestVoteReply* syncRequestVoteReplyDeserialize2(const char* buf, uint32_t len);
+void syncRequestVoteReply2RpcMsg(const SyncRequestVoteReply* pMsg, SRpcMsg* pRpcMsg);
+void syncRequestVoteReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVoteReply* pMsg);
+SyncRequestVoteReply* syncRequestVoteReplyFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncRequestVoteReply2Json(const SyncRequestVoteReply* pMsg);
+char* syncRequestVoteReply2Str(const SyncRequestVoteReply* pMsg);
+
+// for debug ----------------------
+void syncRequestVoteReplyPrint(const SyncRequestVoteReply* pMsg);
+void syncRequestVoteReplyPrint2(char* s, const SyncRequestVoteReply* pMsg);
+void syncRequestVoteReplyLog(const SyncRequestVoteReply* pMsg);
+void syncRequestVoteReplyLog2(char* s, const SyncRequestVoteReply* pMsg);
+
+SyncAppendEntries* syncAppendEntriesBuild(uint32_t dataLen, int32_t vgId);
+void syncAppendEntriesDestroy(SyncAppendEntries* pMsg);
+void syncAppendEntriesSerialize(const SyncAppendEntries* pMsg, char* buf, uint32_t bufLen);
+void syncAppendEntriesDeserialize(const char* buf, uint32_t len, SyncAppendEntries* pMsg);
+char* syncAppendEntriesSerialize2(const SyncAppendEntries* pMsg, uint32_t* len);
+SyncAppendEntries* syncAppendEntriesDeserialize2(const char* buf, uint32_t len);
+void syncAppendEntries2RpcMsg(const SyncAppendEntries* pMsg, SRpcMsg* pRpcMsg);
+void syncAppendEntriesFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntries* pMsg);
+SyncAppendEntries* syncAppendEntriesFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncAppendEntries2Json(const SyncAppendEntries* pMsg);
+char* syncAppendEntries2Str(const SyncAppendEntries* pMsg);
+
+// for debug ----------------------
+void syncAppendEntriesPrint(const SyncAppendEntries* pMsg);
+void syncAppendEntriesPrint2(char* s, const SyncAppendEntries* pMsg);
+void syncAppendEntriesLog(const SyncAppendEntries* pMsg);
+void syncAppendEntriesLog2(char* s, const SyncAppendEntries* pMsg);
+
+SyncAppendEntriesReply* syncAppendEntriesReplyBuild(int32_t vgId);
+void syncAppendEntriesReplyDestroy(SyncAppendEntriesReply* pMsg);
+void syncAppendEntriesReplySerialize(const SyncAppendEntriesReply* pMsg, char* buf, uint32_t bufLen);
+void syncAppendEntriesReplyDeserialize(const char* buf, uint32_t len, SyncAppendEntriesReply* pMsg);
+char* syncAppendEntriesReplySerialize2(const SyncAppendEntriesReply* pMsg, uint32_t* len);
+SyncAppendEntriesReply* syncAppendEntriesReplyDeserialize2(const char* buf, uint32_t len);
+void syncAppendEntriesReply2RpcMsg(const SyncAppendEntriesReply* pMsg, SRpcMsg* pRpcMsg);
+void syncAppendEntriesReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntriesReply* pMsg);
+SyncAppendEntriesReply* syncAppendEntriesReplyFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncAppendEntriesReply2Json(const SyncAppendEntriesReply* pMsg);
+char* syncAppendEntriesReply2Str(const SyncAppendEntriesReply* pMsg);
+
+// for debug ----------------------
+void syncAppendEntriesReplyPrint(const SyncAppendEntriesReply* pMsg);
+void syncAppendEntriesReplyPrint2(char* s, const SyncAppendEntriesReply* pMsg);
+void syncAppendEntriesReplyLog(const SyncAppendEntriesReply* pMsg);
+void syncAppendEntriesReplyLog2(char* s, const SyncAppendEntriesReply* pMsg);
+
+SyncHeartbeat* syncHeartbeatBuild(int32_t vgId);
+void syncHeartbeatDestroy(SyncHeartbeat* pMsg);
+void syncHeartbeatSerialize(const SyncHeartbeat* pMsg, char* buf, uint32_t bufLen);
+void syncHeartbeatDeserialize(const char* buf, uint32_t len, SyncHeartbeat* pMsg);
+char* syncHeartbeatSerialize2(const SyncHeartbeat* pMsg, uint32_t* len);
+SyncHeartbeat* syncHeartbeatDeserialize2(const char* buf, uint32_t len);
+void syncHeartbeat2RpcMsg(const SyncHeartbeat* pMsg, SRpcMsg* pRpcMsg);
+void syncHeartbeatFromRpcMsg(const SRpcMsg* pRpcMsg, SyncHeartbeat* pMsg);
+SyncHeartbeat* syncHeartbeatFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncHeartbeat2Json(const SyncHeartbeat* pMsg);
+char* syncHeartbeat2Str(const SyncHeartbeat* pMsg);
+
+// for debug ----------------------
+void syncHeartbeatPrint(const SyncHeartbeat* pMsg);
+void syncHeartbeatPrint2(char* s, const SyncHeartbeat* pMsg);
+void syncHeartbeatLog(const SyncHeartbeat* pMsg);
+void syncHeartbeatLog2(char* s, const SyncHeartbeat* pMsg);
+
+SyncHeartbeatReply* syncHeartbeatReplyBuild(int32_t vgId);
+void syncHeartbeatReplyDestroy(SyncHeartbeatReply* pMsg);
+void syncHeartbeatReplySerialize(const SyncHeartbeatReply* pMsg, char* buf, uint32_t bufLen);
+void syncHeartbeatReplyDeserialize(const char* buf, uint32_t len, SyncHeartbeatReply* pMsg);
+char* syncHeartbeatReplySerialize2(const SyncHeartbeatReply* pMsg, uint32_t* len);
+SyncHeartbeatReply* syncHeartbeatReplyDeserialize2(const char* buf, uint32_t len);
+void syncHeartbeatReply2RpcMsg(const SyncHeartbeatReply* pMsg, SRpcMsg* pRpcMsg);
+void syncHeartbeatReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncHeartbeatReply* pMsg);
+SyncHeartbeatReply* syncHeartbeatReplyFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncHeartbeatReply2Json(const SyncHeartbeatReply* pMsg);
+char* syncHeartbeatReply2Str(const SyncHeartbeatReply* pMsg);
+
+// for debug ----------------------
+void syncHeartbeatReplyPrint(const SyncHeartbeatReply* pMsg);
+void syncHeartbeatReplyPrint2(char* s, const SyncHeartbeatReply* pMsg);
+void syncHeartbeatReplyLog(const SyncHeartbeatReply* pMsg);
+void syncHeartbeatReplyLog2(char* s, const SyncHeartbeatReply* pMsg);
+
+SyncPreSnapshot* syncPreSnapshotBuild(int32_t vgId);
+void syncPreSnapshotDestroy(SyncPreSnapshot* pMsg);
+void syncPreSnapshotSerialize(const SyncPreSnapshot* pMsg, char* buf, uint32_t bufLen);
+void syncPreSnapshotDeserialize(const char* buf, uint32_t len, SyncPreSnapshot* pMsg);
+char* syncPreSnapshotSerialize2(const SyncPreSnapshot* pMsg, uint32_t* len);
+SyncPreSnapshot* syncPreSnapshotDeserialize2(const char* buf, uint32_t len);
+void syncPreSnapshot2RpcMsg(const SyncPreSnapshot* pMsg, SRpcMsg* pRpcMsg);
+void syncPreSnapshotFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPreSnapshot* pMsg);
+SyncPreSnapshot* syncPreSnapshotFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncPreSnapshot2Json(const SyncPreSnapshot* pMsg);
+char* syncPreSnapshot2Str(const SyncPreSnapshot* pMsg);
+
+// for debug ----------------------
+void syncPreSnapshotPrint(const SyncPreSnapshot* pMsg);
+void syncPreSnapshotPrint2(char* s, const SyncPreSnapshot* pMsg);
+void syncPreSnapshotLog(const SyncPreSnapshot* pMsg);
+void syncPreSnapshotLog2(char* s, const SyncPreSnapshot* pMsg);
+
+SyncPreSnapshotReply* syncPreSnapshotReplyBuild(int32_t vgId);
+void syncPreSnapshotReplyDestroy(SyncPreSnapshotReply* pMsg);
+void syncPreSnapshotReplySerialize(const SyncPreSnapshotReply* pMsg, char* buf, uint32_t bufLen);
+void syncPreSnapshotReplyDeserialize(const char* buf, uint32_t len, SyncPreSnapshotReply* pMsg);
+char* syncPreSnapshotReplySerialize2(const SyncPreSnapshotReply* pMsg, uint32_t* len);
+SyncPreSnapshotReply* syncPreSnapshotReplyDeserialize2(const char* buf, uint32_t len);
+void syncPreSnapshotReply2RpcMsg(const SyncPreSnapshotReply* pMsg, SRpcMsg* pRpcMsg);
+void syncPreSnapshotReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPreSnapshotReply* pMsg);
+SyncPreSnapshotReply* syncPreSnapshotReplyFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncPreSnapshotReply2Json(const SyncPreSnapshotReply* pMsg);
+char* syncPreSnapshotReply2Str(const SyncPreSnapshotReply* pMsg);
+
+// for debug ----------------------
+void syncPreSnapshotReplyPrint(const SyncPreSnapshotReply* pMsg);
+void syncPreSnapshotReplyPrint2(char* s, const SyncPreSnapshotReply* pMsg);
+void syncPreSnapshotReplyLog(const SyncPreSnapshotReply* pMsg);
+void syncPreSnapshotReplyLog2(char* s, const SyncPreSnapshotReply* pMsg);
+
+// ---------------------------------------------
+int32_t syncNodeOnPreSnapshot(SSyncNode* ths, SyncPreSnapshot* pMsg);
+int32_t syncNodeOnPreSnapshotReply(SSyncNode* ths, SyncPreSnapshotReply* pMsg);
+
+SyncApplyMsg* syncApplyMsgBuild(uint32_t dataLen);
+SyncApplyMsg* syncApplyMsgBuild2(const SRpcMsg* pOriginalRpcMsg, int32_t vgId, SFsmCbMeta* pMeta);
+void syncApplyMsgDestroy(SyncApplyMsg* pMsg);
+void syncApplyMsgSerialize(const SyncApplyMsg* pMsg, char* buf, uint32_t bufLen);
+void syncApplyMsgDeserialize(const char* buf, uint32_t len, SyncApplyMsg* pMsg);
+char* syncApplyMsgSerialize2(const SyncApplyMsg* pMsg, uint32_t* len);
+SyncApplyMsg* syncApplyMsgDeserialize2(const char* buf, uint32_t len);
+void syncApplyMsg2RpcMsg(const SyncApplyMsg* pMsg, SRpcMsg* pRpcMsg); // SyncApplyMsg to SRpcMsg, put it into ApplyQ
+void syncApplyMsgFromRpcMsg(const SRpcMsg* pRpcMsg, SyncApplyMsg* pMsg); // get SRpcMsg from ApplyQ, to SyncApplyMsg
+SyncApplyMsg* syncApplyMsgFromRpcMsg2(const SRpcMsg* pRpcMsg);
+void syncApplyMsg2OriginalRpcMsg(const SyncApplyMsg* pMsg, SRpcMsg* pOriginalRpcMsg); // SyncApplyMsg to OriginalRpcMsg
+cJSON* syncApplyMsg2Json(const SyncApplyMsg* pMsg);
+char* syncApplyMsg2Str(const SyncApplyMsg* pMsg);
+
+// for debug ----------------------
+void syncApplyMsgPrint(const SyncApplyMsg* pMsg);
+void syncApplyMsgPrint2(char* s, const SyncApplyMsg* pMsg);
+void syncApplyMsgLog(const SyncApplyMsg* pMsg);
+void syncApplyMsgLog2(char* s, const SyncApplyMsg* pMsg);
+
+SyncSnapshotSend* syncSnapshotSendBuild(uint32_t dataLen, int32_t vgId);
+void syncSnapshotSendDestroy(SyncSnapshotSend* pMsg);
+void syncSnapshotSendSerialize(const SyncSnapshotSend* pMsg, char* buf, uint32_t bufLen);
+void syncSnapshotSendDeserialize(const char* buf, uint32_t len, SyncSnapshotSend* pMsg);
+char* syncSnapshotSendSerialize2(const SyncSnapshotSend* pMsg, uint32_t* len);
+SyncSnapshotSend* syncSnapshotSendDeserialize2(const char* buf, uint32_t len);
+void syncSnapshotSend2RpcMsg(const SyncSnapshotSend* pMsg, SRpcMsg* pRpcMsg);
+void syncSnapshotSendFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotSend* pMsg);
+SyncSnapshotSend* syncSnapshotSendFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncSnapshotSend2Json(const SyncSnapshotSend* pMsg);
+char* syncSnapshotSend2Str(const SyncSnapshotSend* pMsg);
+
+// for debug ----------------------
+void syncSnapshotSendPrint(const SyncSnapshotSend* pMsg);
+void syncSnapshotSendPrint2(char* s, const SyncSnapshotSend* pMsg);
+void syncSnapshotSendLog(const SyncSnapshotSend* pMsg);
+void syncSnapshotSendLog2(char* s, const SyncSnapshotSend* pMsg);
+
+SyncSnapshotRsp* syncSnapshotRspBuild(int32_t vgId);
+void syncSnapshotRspDestroy(SyncSnapshotRsp* pMsg);
+void syncSnapshotRspSerialize(const SyncSnapshotRsp* pMsg, char* buf, uint32_t bufLen);
+void syncSnapshotRspDeserialize(const char* buf, uint32_t len, SyncSnapshotRsp* pMsg);
+char* syncSnapshotRspSerialize2(const SyncSnapshotRsp* pMsg, uint32_t* len);
+SyncSnapshotRsp* syncSnapshotRspDeserialize2(const char* buf, uint32_t len);
+void syncSnapshotRsp2RpcMsg(const SyncSnapshotRsp* pMsg, SRpcMsg* pRpcMsg);
+void syncSnapshotRspFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotRsp* pMsg);
+SyncSnapshotRsp* syncSnapshotRspFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncSnapshotRsp2Json(const SyncSnapshotRsp* pMsg);
+char* syncSnapshotRsp2Str(const SyncSnapshotRsp* pMsg);
+
+// for debug ----------------------
+void syncSnapshotRspPrint(const SyncSnapshotRsp* pMsg);
+void syncSnapshotRspPrint2(char* s, const SyncSnapshotRsp* pMsg);
+void syncSnapshotRspLog(const SyncSnapshotRsp* pMsg);
+void syncSnapshotRspLog2(char* s, const SyncSnapshotRsp* pMsg);
+
+SyncLeaderTransfer* syncLeaderTransferBuild(int32_t vgId);
+void syncLeaderTransferDestroy(SyncLeaderTransfer* pMsg);
+void syncLeaderTransferSerialize(const SyncLeaderTransfer* pMsg, char* buf, uint32_t bufLen);
+void syncLeaderTransferDeserialize(const char* buf, uint32_t len, SyncLeaderTransfer* pMsg);
+char* syncLeaderTransferSerialize2(const SyncLeaderTransfer* pMsg, uint32_t* len);
+SyncLeaderTransfer* syncLeaderTransferDeserialize2(const char* buf, uint32_t len);
+void syncLeaderTransfer2RpcMsg(const SyncLeaderTransfer* pMsg, SRpcMsg* pRpcMsg);
+void syncLeaderTransferFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLeaderTransfer* pMsg);
+SyncLeaderTransfer* syncLeaderTransferFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncLeaderTransfer2Json(const SyncLeaderTransfer* pMsg);
+char* syncLeaderTransfer2Str(const SyncLeaderTransfer* pMsg);
+
+SyncLocalCmd* syncLocalCmdBuild(int32_t vgId);
+void syncLocalCmdDestroy(SyncLocalCmd* pMsg);
+void syncLocalCmdSerialize(const SyncLocalCmd* pMsg, char* buf, uint32_t bufLen);
+void syncLocalCmdDeserialize(const char* buf, uint32_t len, SyncLocalCmd* pMsg);
+char* syncLocalCmdSerialize2(const SyncLocalCmd* pMsg, uint32_t* len);
+SyncLocalCmd* syncLocalCmdDeserialize2(const char* buf, uint32_t len);
+void syncLocalCmd2RpcMsg(const SyncLocalCmd* pMsg, SRpcMsg* pRpcMsg);
+void syncLocalCmdFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLocalCmd* pMsg);
+SyncLocalCmd* syncLocalCmdFromRpcMsg2(const SRpcMsg* pRpcMsg);
+cJSON* syncLocalCmd2Json(const SyncLocalCmd* pMsg);
+char* syncLocalCmd2Str(const SyncLocalCmd* pMsg);
+
+// for debug ----------------------
+void syncLocalCmdPrint(const SyncLocalCmd* pMsg);
+void syncLocalCmdPrint2(char* s, const SyncLocalCmd* pMsg);
+void syncLocalCmdLog(const SyncLocalCmd* pMsg);
+void syncLocalCmdLog2(char* s, const SyncLocalCmd* pMsg);
+
#ifdef __cplusplus
}
#endif
-#endif /*_TD_LIBS_SYNC_RAFT_ENTRY_H*/
+#endif /*_TD_LIBS_SYNC_TEST_H*/
diff --git a/source/libs/sync/test/sync_test_lib/src/syncBatch.c b/source/libs/sync/test/sync_test_lib/src/syncBatch.c
new file mode 100644
index 0000000000..b2db1e084a
--- /dev/null
+++ b/source/libs/sync/test/sync_test_lib/src/syncBatch.c
@@ -0,0 +1,451 @@
+/*
+ * Copyright (c) 2019 TAOS Data, Inc.
+ *
+ * This program is free software: you can use, redistribute, and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3
+ * or later ("AGPL"), as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+#define _DEFAULT_SOURCE
+#include "syncTest.h"
+#include "syncBatch.h"
+
+// ---- message process SyncClientRequestBatch----
+
+// block1:
+// block2: SRaftMeta array
+// block3: rpc msg array (with pCont)
+
+SyncClientRequestBatch* syncClientRequestBatchBuild(SRpcMsg** rpcMsgPArr, SRaftMeta* raftArr, int32_t arrSize,
+ int32_t vgId) {
+ ASSERT(rpcMsgPArr != NULL);
+ ASSERT(arrSize > 0);
+
+ int32_t dataLen = 0;
+ int32_t raftMetaArrayLen = sizeof(SRaftMeta) * arrSize;
+ int32_t rpcArrayLen = sizeof(SRpcMsg) * arrSize;
+ dataLen += (raftMetaArrayLen + rpcArrayLen);
+
+ uint32_t bytes = sizeof(SyncClientRequestBatch) + dataLen;
+ SyncClientRequestBatch* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_CLIENT_REQUEST_BATCH;
+ pMsg->dataCount = arrSize;
+ pMsg->dataLen = dataLen;
+
+ SRaftMeta* raftMetaArr = (SRaftMeta*)(pMsg->data);
+ SRpcMsg* msgArr = (SRpcMsg*)((char*)(pMsg->data) + raftMetaArrayLen);
+
+ for (int i = 0; i < arrSize; ++i) {
+ // init raftMetaArr
+ raftMetaArr[i].isWeak = raftArr[i].isWeak;
+ raftMetaArr[i].seqNum = raftArr[i].seqNum;
+
+ // init msgArr
+ msgArr[i] = *(rpcMsgPArr[i]);
+ }
+
+ return pMsg;
+}
+
+void syncClientRequestBatch2RpcMsg(const SyncClientRequestBatch* pSyncMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pSyncMsg->msgType;
+ pRpcMsg->contLen = pSyncMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ memcpy(pRpcMsg->pCont, pSyncMsg, pRpcMsg->contLen);
+}
+
+void syncClientRequestBatchDestroy(SyncClientRequestBatch* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncClientRequestBatchDestroyDeep(SyncClientRequestBatch* pMsg) {
+ if (pMsg != NULL) {
+ int32_t arrSize = pMsg->dataCount;
+ int32_t raftMetaArrayLen = sizeof(SRaftMeta) * arrSize;
+ SRpcMsg* msgArr = (SRpcMsg*)((char*)(pMsg->data) + raftMetaArrayLen);
+ for (int i = 0; i < arrSize; ++i) {
+ if (msgArr[i].pCont != NULL) {
+ rpcFreeCont(msgArr[i].pCont);
+ }
+ }
+
+ taosMemoryFree(pMsg);
+ }
+}
+
+SRaftMeta* syncClientRequestBatchMetaArr(const SyncClientRequestBatch* pSyncMsg) {
+ SRaftMeta* raftMetaArr = (SRaftMeta*)(pSyncMsg->data);
+ return raftMetaArr;
+}
+
+SRpcMsg* syncClientRequestBatchRpcMsgArr(const SyncClientRequestBatch* pSyncMsg) {
+ int32_t arrSize = pSyncMsg->dataCount;
+ int32_t raftMetaArrayLen = sizeof(SRaftMeta) * arrSize;
+ SRpcMsg* msgArr = (SRpcMsg*)((char*)(pSyncMsg->data) + raftMetaArrayLen);
+ return msgArr;
+}
+
+SyncClientRequestBatch* syncClientRequestBatchFromRpcMsg(const SRpcMsg* pRpcMsg) {
+ SyncClientRequestBatch* pSyncMsg = taosMemoryMalloc(pRpcMsg->contLen);
+ ASSERT(pSyncMsg != NULL);
+ memcpy(pSyncMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pRpcMsg->contLen == pSyncMsg->bytes);
+
+ return pSyncMsg;
+}
+
+cJSON* syncClientRequestBatch2Json(const SyncClientRequestBatch* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+ cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
+ cJSON_AddNumberToObject(pRoot, "dataCount", pMsg->dataCount);
+
+ SRaftMeta* metaArr = syncClientRequestBatchMetaArr(pMsg);
+ SRpcMsg* msgArr = syncClientRequestBatchRpcMsgArr(pMsg);
+
+ cJSON* pMetaArr = cJSON_CreateArray();
+ cJSON_AddItemToObject(pRoot, "metaArr", pMetaArr);
+ for (int i = 0; i < pMsg->dataCount; ++i) {
+ cJSON* pMeta = cJSON_CreateObject();
+ cJSON_AddNumberToObject(pMeta, "seqNum", metaArr[i].seqNum);
+ cJSON_AddNumberToObject(pMeta, "isWeak", metaArr[i].isWeak);
+ cJSON_AddItemToArray(pMetaArr, pMeta);
+ }
+
+ cJSON* pMsgArr = cJSON_CreateArray();
+ cJSON_AddItemToObject(pRoot, "msgArr", pMsgArr);
+ for (int i = 0; i < pMsg->dataCount; ++i) {
+ cJSON* pRpcMsgJson = syncRpcMsg2Json(&msgArr[i]);
+ cJSON_AddItemToArray(pMsgArr, pRpcMsgJson);
+ }
+
+ char* s;
+ s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data", s);
+ taosMemoryFree(s);
+ s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data2", s);
+ taosMemoryFree(s);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncClientRequestBatch", pRoot);
+ return pJson;
+}
+
+char* syncClientRequestBatch2Str(const SyncClientRequestBatch* pMsg) {
+ cJSON* pJson = syncClientRequestBatch2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncClientRequestBatchPrint(const SyncClientRequestBatch* pMsg) {
+ char* serialized = syncClientRequestBatch2Str(pMsg);
+ printf("syncClientRequestBatchPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncClientRequestBatchPrint2(char* s, const SyncClientRequestBatch* pMsg) {
+ char* serialized = syncClientRequestBatch2Str(pMsg);
+ printf("syncClientRequestBatchPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncClientRequestBatchLog(const SyncClientRequestBatch* pMsg) {
+ char* serialized = syncClientRequestBatch2Str(pMsg);
+ sTrace("syncClientRequestBatchLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncClientRequestBatchLog2(char* s, const SyncClientRequestBatch* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncClientRequestBatch2Str(pMsg);
+ sLTrace("syncClientRequestBatchLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---- message process SyncAppendEntriesBatch----
+
+// block1: SOffsetAndContLen
+// block2: SOffsetAndContLen Array
+// block3: entry Array
+
+SyncAppendEntriesBatch* syncAppendEntriesBatchBuild(SSyncRaftEntry** entryPArr, int32_t arrSize, int32_t vgId) {
+ ASSERT(entryPArr != NULL);
+ ASSERT(arrSize >= 0);
+
+ int32_t dataLen = 0;
+ int32_t metaArrayLen = sizeof(SOffsetAndContLen) * arrSize; //
+ int32_t entryArrayLen = 0;
+ for (int i = 0; i < arrSize; ++i) { // SRpcMsg pCont
+ SSyncRaftEntry* pEntry = entryPArr[i];
+ entryArrayLen += pEntry->bytes;
+ }
+ dataLen += (metaArrayLen + entryArrayLen);
+
+ uint32_t bytes = sizeof(SyncAppendEntriesBatch) + dataLen;
+ SyncAppendEntriesBatch* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_APPEND_ENTRIES_BATCH;
+ pMsg->dataCount = arrSize;
+ pMsg->dataLen = dataLen;
+
+ SOffsetAndContLen* metaArr = (SOffsetAndContLen*)(pMsg->data);
+ char* pData = pMsg->data;
+
+ for (int i = 0; i < arrSize; ++i) {
+ // init meta
+ if (i == 0) {
+ metaArr[i].offset = metaArrayLen;
+ metaArr[i].contLen = entryPArr[i]->bytes;
+ } else {
+ metaArr[i].offset = metaArr[i - 1].offset + metaArr[i - 1].contLen;
+ metaArr[i].contLen = entryPArr[i]->bytes;
+ }
+
+ // init entry array
+ ASSERT(metaArr[i].contLen == entryPArr[i]->bytes);
+ memcpy(pData + metaArr[i].offset, entryPArr[i], metaArr[i].contLen);
+ }
+
+ return pMsg;
+}
+
+SOffsetAndContLen* syncAppendEntriesBatchMetaTableArray(SyncAppendEntriesBatch* pMsg) {
+ return (SOffsetAndContLen*)(pMsg->data);
+}
+
+void syncAppendEntriesBatchDestroy(SyncAppendEntriesBatch* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncAppendEntriesBatchSerialize(const SyncAppendEntriesBatch* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncAppendEntriesBatchDeserialize(const char* buf, uint32_t len, SyncAppendEntriesBatch* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+ ASSERT(pMsg->bytes == sizeof(SyncAppendEntriesBatch) + pMsg->dataLen);
+}
+
+char* syncAppendEntriesBatchSerialize2(const SyncAppendEntriesBatch* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncAppendEntriesBatchSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncAppendEntriesBatch* syncAppendEntriesBatchDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncAppendEntriesBatch* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncAppendEntriesBatchDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncAppendEntriesBatch2RpcMsg(const SyncAppendEntriesBatch* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncAppendEntriesBatchSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncAppendEntriesBatchFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntriesBatch* pMsg) {
+ syncAppendEntriesBatchDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncAppendEntriesBatch* syncAppendEntriesBatchFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncAppendEntriesBatch* pMsg = syncAppendEntriesBatchDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncAppendEntriesBatch2Json(const SyncAppendEntriesBatch* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
+ cJSON_AddStringToObject(pRoot, "term", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->prevLogIndex);
+ cJSON_AddStringToObject(pRoot, "prevLogIndex", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->prevLogTerm);
+ cJSON_AddStringToObject(pRoot, "prevLogTerm", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->commitIndex);
+ cJSON_AddStringToObject(pRoot, "commitIndex", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->privateTerm);
+ cJSON_AddStringToObject(pRoot, "privateTerm", u64buf);
+
+ cJSON_AddNumberToObject(pRoot, "dataCount", pMsg->dataCount);
+ cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
+
+ int32_t metaArrayLen = sizeof(SOffsetAndContLen) * pMsg->dataCount; //
+ int32_t entryArrayLen = pMsg->dataLen - metaArrayLen;
+
+ cJSON_AddNumberToObject(pRoot, "metaArrayLen", metaArrayLen);
+ cJSON_AddNumberToObject(pRoot, "entryArrayLen", entryArrayLen);
+
+ SOffsetAndContLen* metaArr = (SOffsetAndContLen*)(pMsg->data);
+
+ cJSON* pMetaArr = cJSON_CreateArray();
+ cJSON_AddItemToObject(pRoot, "metaArr", pMetaArr);
+ for (int i = 0; i < pMsg->dataCount; ++i) {
+ cJSON* pMeta = cJSON_CreateObject();
+ cJSON_AddNumberToObject(pMeta, "offset", metaArr[i].offset);
+ cJSON_AddNumberToObject(pMeta, "contLen", metaArr[i].contLen);
+ cJSON_AddItemToArray(pMetaArr, pMeta);
+ }
+
+ cJSON* pEntryArr = cJSON_CreateArray();
+ cJSON_AddItemToObject(pRoot, "entryArr", pEntryArr);
+ for (int i = 0; i < pMsg->dataCount; ++i) {
+ SSyncRaftEntry* pEntry = (SSyncRaftEntry*)(pMsg->data + metaArr[i].offset);
+ cJSON* pEntryJson = syncEntry2Json(pEntry);
+ cJSON_AddItemToArray(pEntryArr, pEntryJson);
+ }
+
+ char* s;
+ s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data", s);
+ taosMemoryFree(s);
+ s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data2", s);
+ taosMemoryFree(s);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncAppendEntriesBatch", pRoot);
+ return pJson;
+}
+
+char* syncAppendEntriesBatch2Str(const SyncAppendEntriesBatch* pMsg) {
+ cJSON* pJson = syncAppendEntriesBatch2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncAppendEntriesBatchPrint(const SyncAppendEntriesBatch* pMsg) {
+ char* serialized = syncAppendEntriesBatch2Str(pMsg);
+ printf("syncAppendEntriesBatchPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncAppendEntriesBatchPrint2(char* s, const SyncAppendEntriesBatch* pMsg) {
+ char* serialized = syncAppendEntriesBatch2Str(pMsg);
+ printf("syncAppendEntriesBatchPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncAppendEntriesBatchLog(const SyncAppendEntriesBatch* pMsg) {
+ char* serialized = syncAppendEntriesBatch2Str(pMsg);
+ sTrace("syncAppendEntriesBatchLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncAppendEntriesBatchLog2(char* s, const SyncAppendEntriesBatch* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncAppendEntriesBatch2Str(pMsg);
+ sLTrace("syncAppendEntriesBatchLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+void syncLogSendAppendEntriesBatch(SSyncNode* pSyncNode, const SyncAppendEntriesBatch* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->destId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "send sync-append-entries-batch to %s:%d, {term:%" PRId64 ", pre-index:%" PRId64 ", pre-term:%" PRId64
+ ", pterm:%" PRId64 ", cmt:%" PRId64 ", datalen:%d, count:%d}, %s",
+ host, port, pMsg->term, pMsg->prevLogIndex, pMsg->prevLogTerm, pMsg->privateTerm, pMsg->commitIndex,
+ pMsg->dataLen, pMsg->dataCount, s);
+}
+
+void syncLogRecvAppendEntriesBatch(SSyncNode* pSyncNode, const SyncAppendEntriesBatch* pMsg, const char* s) {
+ char host[64];
+ uint16_t port;
+ syncUtilU642Addr(pMsg->srcId.addr, host, sizeof(host), &port);
+
+ sNTrace(pSyncNode,
+ "recv sync-append-entries-batch from %s:%d, {term:%" PRId64 ", pre-index:%" PRId64 ", pre-term:%" PRId64
+ ", pterm:%" PRId64 ", cmt:%" PRId64 ", datalen:%d, count:%d}, %s",
+ host, port, pMsg->term, pMsg->prevLogIndex, pMsg->prevLogTerm, pMsg->privateTerm, pMsg->commitIndex,
+ pMsg->dataLen, pMsg->dataCount, s);
+}
\ No newline at end of file
diff --git a/source/libs/sync/test/sync_test_lib/src/syncIO.c b/source/libs/sync/test/sync_test_lib/src/syncIO.c
index 14adc18c66..2c24451713 100644
--- a/source/libs/sync/test/sync_test_lib/src/syncIO.c
+++ b/source/libs/sync/test/sync_test_lib/src/syncIO.c
@@ -22,6 +22,7 @@
#include "ttimer.h"
#include "tutil.h"
+bool gRaftDetailLog = false;
SSyncIO *gSyncIO = NULL;
// local function ------------
diff --git a/source/libs/sync/test/sync_test_lib/src/syncIndexMgrDebug.c b/source/libs/sync/test/sync_test_lib/src/syncIndexMgrDebug.c
new file mode 100644
index 0000000000..1d3198c51d
--- /dev/null
+++ b/source/libs/sync/test/sync_test_lib/src/syncIndexMgrDebug.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2019 TAOS Data, Inc.
+ *
+ * This program is free software: you can use, redistribute, and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3
+ * or later ("AGPL"), as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+#define _DEFAULT_SOURCE
+#include "syncTest.h"
+
+void syncIndexMgrPrint(SSyncIndexMgr *pObj) {
+ char *serialized = syncIndexMgr2Str(pObj);
+ printf("syncIndexMgrPrint | len:%" PRIu64 " | %s \n", (uint64_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncIndexMgrPrint2(char *s, SSyncIndexMgr *pObj) {
+ char *serialized = syncIndexMgr2Str(pObj);
+ printf("syncIndexMgrPrint2 | len:%" PRIu64 " | %s | %s \n", (uint64_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncIndexMgrLog(SSyncIndexMgr *pObj) {
+ char *serialized = syncIndexMgr2Str(pObj);
+ sTrace("syncIndexMgrLog | len:%" PRIu64 " | %s", (uint64_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncIndexMgrLog2(char *s, SSyncIndexMgr *pObj) {
+ if (gRaftDetailLog) {
+ char *serialized = syncIndexMgr2Str(pObj);
+ sTrace("syncIndexMgrLog2 | len:%" PRIu64 " | %s | %s", (uint64_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+cJSON *syncIndexMgr2Json(SSyncIndexMgr *pSyncIndexMgr) {
+ char u64buf[128] = {0};
+ cJSON *pRoot = cJSON_CreateObject();
+
+ if (pSyncIndexMgr != NULL) {
+ cJSON_AddNumberToObject(pRoot, "replicaNum", pSyncIndexMgr->replicaNum);
+ cJSON *pReplicas = cJSON_CreateArray();
+ cJSON_AddItemToObject(pRoot, "replicas", pReplicas);
+ for (int i = 0; i < pSyncIndexMgr->replicaNum; ++i) {
+ cJSON_AddItemToArray(pReplicas, syncUtilRaftId2Json(&(*(pSyncIndexMgr->replicas))[i]));
+ }
+
+ {
+ int *arr = (int *)taosMemoryMalloc(sizeof(int) * pSyncIndexMgr->replicaNum);
+ for (int i = 0; i < pSyncIndexMgr->replicaNum; ++i) {
+ arr[i] = pSyncIndexMgr->index[i];
+ }
+ cJSON *pIndex = cJSON_CreateIntArray(arr, pSyncIndexMgr->replicaNum);
+ taosMemoryFree(arr);
+ cJSON_AddItemToObject(pRoot, "index", pIndex);
+ }
+
+ {
+ int *arr = (int *)taosMemoryMalloc(sizeof(int) * pSyncIndexMgr->replicaNum);
+ for (int i = 0; i < pSyncIndexMgr->replicaNum; ++i) {
+ arr[i] = pSyncIndexMgr->privateTerm[i];
+ }
+ cJSON *pIndex = cJSON_CreateIntArray(arr, pSyncIndexMgr->replicaNum);
+ taosMemoryFree(arr);
+ cJSON_AddItemToObject(pRoot, "privateTerm", pIndex);
+ }
+
+ snprintf(u64buf, sizeof(u64buf), "%p", pSyncIndexMgr->pSyncNode);
+ cJSON_AddStringToObject(pRoot, "pSyncNode", u64buf);
+ }
+
+ cJSON *pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "pSyncIndexMgr", pRoot);
+ return pJson;
+}
+
+char *syncIndexMgr2Str(SSyncIndexMgr *pSyncIndexMgr) {
+ cJSON *pJson = syncIndexMgr2Json(pSyncIndexMgr);
+ char *serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
diff --git a/source/libs/sync/test/sync_test_lib/src/syncMainDebug.c b/source/libs/sync/test/sync_test_lib/src/syncMainDebug.c
index 5e1a9be164..6b461da0e5 100644
--- a/source/libs/sync/test/sync_test_lib/src/syncMainDebug.c
+++ b/source/libs/sync/test/sync_test_lib/src/syncMainDebug.c
@@ -138,20 +138,20 @@ cJSON* syncNode2Json(const SSyncNode* pSyncNode) {
cJSON_AddStringToObject(pRoot, "heartbeatTimerCounter", u64buf);
// callback
- snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnPing);
- cJSON_AddStringToObject(pRoot, "FpOnPing", u64buf);
- snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnPingReply);
- cJSON_AddStringToObject(pRoot, "FpOnPingReply", u64buf);
- snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnRequestVote);
- cJSON_AddStringToObject(pRoot, "FpOnRequestVote", u64buf);
- snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnRequestVoteReply);
- cJSON_AddStringToObject(pRoot, "FpOnRequestVoteReply", u64buf);
- snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnAppendEntries);
- cJSON_AddStringToObject(pRoot, "FpOnAppendEntries", u64buf);
- snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnAppendEntriesReply);
- cJSON_AddStringToObject(pRoot, "FpOnAppendEntriesReply", u64buf);
- snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnTimeout);
- cJSON_AddStringToObject(pRoot, "FpOnTimeout", u64buf);
+ // snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnPing);
+ // cJSON_AddStringToObject(pRoot, "FpOnPing", u64buf);
+ // snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnPingReply);
+ // cJSON_AddStringToObject(pRoot, "FpOnPingReply", u64buf);
+ // snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnRequestVote);
+ // cJSON_AddStringToObject(pRoot, "FpOnRequestVote", u64buf);
+ // snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnRequestVoteReply);
+ // cJSON_AddStringToObject(pRoot, "FpOnRequestVoteReply", u64buf);
+ // snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnAppendEntries);
+ // cJSON_AddStringToObject(pRoot, "FpOnAppendEntries", u64buf);
+ // snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnAppendEntriesReply);
+ // cJSON_AddStringToObject(pRoot, "FpOnAppendEntriesReply", u64buf);
+ // snprintf(u64buf, sizeof(u64buf), "%p", pSyncNode->FpOnTimeout);
+ // cJSON_AddStringToObject(pRoot, "FpOnTimeout", u64buf);
// restoreFinish
cJSON_AddNumberToObject(pRoot, "restoreFinish", pSyncNode->restoreFinish);
@@ -253,3 +253,29 @@ int32_t syncNodePingAll(SSyncNode* pSyncNode) {
return ret;
}
+// on message ----
+int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg) {
+ sTrace("vgId:%d, recv sync-ping", ths->vgId);
+
+ SyncPingReply* pMsgReply = syncPingReplyBuild3(&ths->myRaftId, &pMsg->srcId, ths->vgId);
+ SRpcMsg rpcMsg;
+ syncPingReply2RpcMsg(pMsgReply, &rpcMsg);
+
+ /*
+ // htonl
+ SMsgHead* pHead = rpcMsg.pCont;
+ pHead->contLen = htonl(pHead->contLen);
+ pHead->vgId = htonl(pHead->vgId);
+ */
+
+ syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg);
+ syncPingReplyDestroy(pMsgReply);
+
+ return 0;
+}
+
+int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg) {
+ int32_t ret = 0;
+ sTrace("vgId:%d, recv sync-ping-reply", ths->vgId);
+ return ret;
+}
diff --git a/source/libs/sync/test/sync_test_lib/src/syncMessageDebug.c b/source/libs/sync/test/sync_test_lib/src/syncMessageDebug.c
index 012382d69d..1ea7629601 100644
--- a/source/libs/sync/test/sync_test_lib/src/syncMessageDebug.c
+++ b/source/libs/sync/test/sync_test_lib/src/syncMessageDebug.c
@@ -16,6 +16,546 @@
#define _DEFAULT_SOURCE
#include "syncTest.h"
+// ---- message process SyncPing----
+SyncPing* syncPingBuild(uint32_t dataLen) {
+ uint32_t bytes = sizeof(SyncPing) + dataLen;
+ SyncPing* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->msgType = TDMT_SYNC_PING;
+ pMsg->dataLen = dataLen;
+ return pMsg;
+}
+
+SyncPing* syncPingBuild2(const SRaftId* srcId, const SRaftId* destId, int32_t vgId, const char* str) {
+ uint32_t dataLen = strlen(str) + 1;
+ SyncPing* pMsg = syncPingBuild(dataLen);
+ pMsg->vgId = vgId;
+ pMsg->srcId = *srcId;
+ pMsg->destId = *destId;
+ snprintf(pMsg->data, pMsg->dataLen, "%s", str);
+ return pMsg;
+}
+
+SyncPing* syncPingBuild3(const SRaftId* srcId, const SRaftId* destId, int32_t vgId) {
+ SyncPing* pMsg = syncPingBuild2(srcId, destId, vgId, "ping");
+ return pMsg;
+}
+
+char* syncPingSerialize2(const SyncPing* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncPingSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+void syncPing2RpcMsg(const SyncPing* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncPingSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncPingFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPing* pMsg) {
+ syncPingDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncPing* syncPingDeserialize3(void* buf, int32_t bufLen) {
+ SDecoder decoder = {0};
+ tDecoderInit(&decoder, buf, bufLen);
+ if (tStartDecode(&decoder) < 0) {
+ return NULL;
+ }
+
+ SyncPing* pMsg = NULL;
+ uint32_t bytes;
+ if (tDecodeU32(&decoder, &bytes) < 0) {
+ return NULL;
+ }
+
+ pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ pMsg->bytes = bytes;
+
+ if (tDecodeI32(&decoder, &pMsg->vgId) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeU32(&decoder, &pMsg->msgType) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeU64(&decoder, &pMsg->srcId.addr) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeI32(&decoder, &pMsg->srcId.vgId) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeU64(&decoder, &pMsg->destId.addr) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeI32(&decoder, &pMsg->destId.vgId) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeU32(&decoder, &pMsg->dataLen) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ uint32_t len;
+ char* data = NULL;
+ if (tDecodeBinary(&decoder, (uint8_t**)(&data), &len) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ ASSERT(len == pMsg->dataLen);
+ memcpy(pMsg->data, data, len);
+
+ tEndDecode(&decoder);
+ tDecoderClear(&decoder);
+ return pMsg;
+}
+
+int32_t syncPingSerialize3(const SyncPing* pMsg, char* buf, int32_t bufLen) {
+ SEncoder encoder = {0};
+ tEncoderInit(&encoder, buf, bufLen);
+ if (tStartEncode(&encoder) < 0) {
+ return -1;
+ }
+
+ if (tEncodeU32(&encoder, pMsg->bytes) < 0) {
+ return -1;
+ }
+ if (tEncodeI32(&encoder, pMsg->vgId) < 0) {
+ return -1;
+ }
+ if (tEncodeU32(&encoder, pMsg->msgType) < 0) {
+ return -1;
+ }
+ if (tEncodeU64(&encoder, pMsg->srcId.addr) < 0) {
+ return -1;
+ }
+ if (tEncodeI32(&encoder, pMsg->srcId.vgId) < 0) {
+ return -1;
+ }
+ if (tEncodeU64(&encoder, pMsg->destId.addr) < 0) {
+ return -1;
+ }
+ if (tEncodeI32(&encoder, pMsg->destId.vgId) < 0) {
+ return -1;
+ }
+ if (tEncodeU32(&encoder, pMsg->dataLen) < 0) {
+ return -1;
+ }
+ if (tEncodeBinary(&encoder, pMsg->data, pMsg->dataLen)) {
+ return -1;
+ }
+
+ tEndEncode(&encoder);
+ int32_t tlen = encoder.pos;
+ tEncoderClear(&encoder);
+ return tlen;
+}
+
+cJSON* syncPing2Json(const SyncPing* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
+ char* s;
+ s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data", s);
+ taosMemoryFree(s);
+ s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data2", s);
+ taosMemoryFree(s);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncPing", pRoot);
+ return pJson;
+}
+
+char* syncPing2Str(const SyncPing* pMsg) {
+ cJSON* pJson = syncPing2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncPingPrint(const SyncPing* pMsg) {
+ char* serialized = syncPing2Str(pMsg);
+ printf("syncPingPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncPingPrint2(char* s, const SyncPing* pMsg) {
+ char* serialized = syncPing2Str(pMsg);
+ printf("syncPingPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncPingLog(const SyncPing* pMsg) {
+ char* serialized = syncPing2Str(pMsg);
+ sTrace("syncPingLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncPingLog2(char* s, const SyncPing* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncPing2Str(pMsg);
+ sTrace("syncPingLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+void syncPingDestroy(SyncPing* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncPingSerialize(const SyncPing* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncPingDeserialize(const char* buf, uint32_t len, SyncPing* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+ ASSERT(pMsg->bytes == sizeof(SyncPing) + pMsg->dataLen);
+}
+
+SyncPing* syncPingDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncPing* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncPingDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+SyncPing* syncPingFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncPing* pMsg = syncPingDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+// ---- message process SyncPingReply----
+SyncPingReply* syncPingReplyBuild(uint32_t dataLen) {
+ uint32_t bytes = sizeof(SyncPingReply) + dataLen;
+ SyncPingReply* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->msgType = TDMT_SYNC_PING_REPLY;
+ pMsg->dataLen = dataLen;
+ return pMsg;
+}
+
+SyncPingReply* syncPingReplyBuild2(const SRaftId* srcId, const SRaftId* destId, int32_t vgId, const char* str) {
+ uint32_t dataLen = strlen(str) + 1;
+ SyncPingReply* pMsg = syncPingReplyBuild(dataLen);
+ pMsg->vgId = vgId;
+ pMsg->srcId = *srcId;
+ pMsg->destId = *destId;
+ snprintf(pMsg->data, pMsg->dataLen, "%s", str);
+ return pMsg;
+}
+
+SyncPingReply* syncPingReplyBuild3(const SRaftId* srcId, const SRaftId* destId, int32_t vgId) {
+ SyncPingReply* pMsg = syncPingReplyBuild2(srcId, destId, vgId, "pang");
+ return pMsg;
+}
+
+void syncPingReplyDestroy(SyncPingReply* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncPingReplySerialize(const SyncPingReply* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncPingReplyDeserialize(const char* buf, uint32_t len, SyncPingReply* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+ ASSERT(pMsg->bytes == sizeof(SyncPingReply) + pMsg->dataLen);
+}
+
+char* syncPingReplySerialize2(const SyncPingReply* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncPingReplySerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncPingReply* syncPingReplyDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncPingReply* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncPingReplyDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+int32_t syncPingReplySerialize3(const SyncPingReply* pMsg, char* buf, int32_t bufLen) {
+ SEncoder encoder = {0};
+ tEncoderInit(&encoder, buf, bufLen);
+ if (tStartEncode(&encoder) < 0) {
+ return -1;
+ }
+
+ if (tEncodeU32(&encoder, pMsg->bytes) < 0) {
+ return -1;
+ }
+ if (tEncodeI32(&encoder, pMsg->vgId) < 0) {
+ return -1;
+ }
+ if (tEncodeU32(&encoder, pMsg->msgType) < 0) {
+ return -1;
+ }
+ if (tEncodeU64(&encoder, pMsg->srcId.addr) < 0) {
+ return -1;
+ }
+ if (tEncodeI32(&encoder, pMsg->srcId.vgId) < 0) {
+ return -1;
+ }
+ if (tEncodeU64(&encoder, pMsg->destId.addr) < 0) {
+ return -1;
+ }
+ if (tEncodeI32(&encoder, pMsg->destId.vgId) < 0) {
+ return -1;
+ }
+ if (tEncodeU32(&encoder, pMsg->dataLen) < 0) {
+ return -1;
+ }
+ if (tEncodeBinary(&encoder, pMsg->data, pMsg->dataLen)) {
+ return -1;
+ }
+
+ tEndEncode(&encoder);
+ int32_t tlen = encoder.pos;
+ tEncoderClear(&encoder);
+ return tlen;
+}
+
+SyncPingReply* syncPingReplyDeserialize3(void* buf, int32_t bufLen) {
+ SDecoder decoder = {0};
+ tDecoderInit(&decoder, buf, bufLen);
+ if (tStartDecode(&decoder) < 0) {
+ return NULL;
+ }
+
+ SyncPingReply* pMsg = NULL;
+ uint32_t bytes;
+ if (tDecodeU32(&decoder, &bytes) < 0) {
+ return NULL;
+ }
+
+ pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ pMsg->bytes = bytes;
+
+ if (tDecodeI32(&decoder, &pMsg->vgId) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeU32(&decoder, &pMsg->msgType) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeU64(&decoder, &pMsg->srcId.addr) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeI32(&decoder, &pMsg->srcId.vgId) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeU64(&decoder, &pMsg->destId.addr) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeI32(&decoder, &pMsg->destId.vgId) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ if (tDecodeU32(&decoder, &pMsg->dataLen) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ uint32_t len;
+ char* data = NULL;
+ if (tDecodeBinary(&decoder, (uint8_t**)(&data), &len) < 0) {
+ taosMemoryFree(pMsg);
+ return NULL;
+ }
+ ASSERT(len == pMsg->dataLen);
+ memcpy(pMsg->data, data, len);
+
+ tEndDecode(&decoder);
+ tDecoderClear(&decoder);
+ return pMsg;
+}
+
+void syncPingReply2RpcMsg(const SyncPingReply* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncPingReplySerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncPingReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPingReply* pMsg) {
+ syncPingReplyDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncPingReply* syncPingReplyFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncPingReply* pMsg = syncPingReplyDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncPingReply2Json(const SyncPingReply* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
+ char* s;
+ s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data", s);
+ taosMemoryFree(s);
+ s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data2", s);
+ taosMemoryFree(s);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncPingReply", pRoot);
+ return pJson;
+}
+
+char* syncPingReply2Str(const SyncPingReply* pMsg) {
+ cJSON* pJson = syncPingReply2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncPingReplyPrint(const SyncPingReply* pMsg) {
+ char* serialized = syncPingReply2Str(pMsg);
+ printf("syncPingReplyPrint | len:%zu | %s \n", strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncPingReplyPrint2(char* s, const SyncPingReply* pMsg) {
+ char* serialized = syncPingReply2Str(pMsg);
+ printf("syncPingReplyPrint2 | len:%zu | %s | %s \n", strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncPingReplyLog(const SyncPingReply* pMsg) {
+ char* serialized = syncPingReply2Str(pMsg);
+ sTrace("syncPingReplyLog | len:%zu | %s", strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncPingReplyLog2(char* s, const SyncPingReply* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncPingReply2Str(pMsg);
+ sTrace("syncPingReplyLog2 | len:%zu | %s | %s", strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
// ---------------------------------------------
cJSON* syncRpcMsg2Json(SRpcMsg* pRpcMsg) {
cJSON* pRoot;
@@ -155,138 +695,6 @@ void syncRpcMsgLog2(char* s, SRpcMsg* pMsg) {
}
}
-cJSON* syncAppendEntriesBatch2Json(const SyncAppendEntriesBatch* pMsg) {
- char u64buf[128] = {0};
- cJSON* pRoot = cJSON_CreateObject();
-
- if (pMsg != NULL) {
- cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
- cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
- cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
-
- cJSON* pSrcId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
- cJSON_AddStringToObject(pSrcId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->srcId.addr;
- cJSON* pTmp = pSrcId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
- cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
-
- cJSON* pDestId = cJSON_CreateObject();
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
- cJSON_AddStringToObject(pDestId, "addr", u64buf);
- {
- uint64_t u64 = pMsg->destId.addr;
- cJSON* pTmp = pDestId;
- char host[128] = {0};
- uint16_t port;
- syncUtilU642Addr(u64, host, sizeof(host), &port);
- cJSON_AddStringToObject(pTmp, "addr_host", host);
- cJSON_AddNumberToObject(pTmp, "addr_port", port);
- }
- cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
- cJSON_AddItemToObject(pRoot, "destId", pDestId);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
- cJSON_AddStringToObject(pRoot, "term", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->prevLogIndex);
- cJSON_AddStringToObject(pRoot, "prevLogIndex", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->prevLogTerm);
- cJSON_AddStringToObject(pRoot, "prevLogTerm", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->commitIndex);
- cJSON_AddStringToObject(pRoot, "commitIndex", u64buf);
-
- snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->privateTerm);
- cJSON_AddStringToObject(pRoot, "privateTerm", u64buf);
-
- cJSON_AddNumberToObject(pRoot, "dataCount", pMsg->dataCount);
- cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
-
- int32_t metaArrayLen = sizeof(SOffsetAndContLen) * pMsg->dataCount; //
- int32_t entryArrayLen = pMsg->dataLen - metaArrayLen;
-
- cJSON_AddNumberToObject(pRoot, "metaArrayLen", metaArrayLen);
- cJSON_AddNumberToObject(pRoot, "entryArrayLen", entryArrayLen);
-
- SOffsetAndContLen* metaArr = (SOffsetAndContLen*)(pMsg->data);
-
- cJSON* pMetaArr = cJSON_CreateArray();
- cJSON_AddItemToObject(pRoot, "metaArr", pMetaArr);
- for (int i = 0; i < pMsg->dataCount; ++i) {
- cJSON* pMeta = cJSON_CreateObject();
- cJSON_AddNumberToObject(pMeta, "offset", metaArr[i].offset);
- cJSON_AddNumberToObject(pMeta, "contLen", metaArr[i].contLen);
- cJSON_AddItemToArray(pMetaArr, pMeta);
- }
-
- cJSON* pEntryArr = cJSON_CreateArray();
- cJSON_AddItemToObject(pRoot, "entryArr", pEntryArr);
- for (int i = 0; i < pMsg->dataCount; ++i) {
- SSyncRaftEntry* pEntry = (SSyncRaftEntry*)(pMsg->data + metaArr[i].offset);
- cJSON* pEntryJson = syncEntry2Json(pEntry);
- cJSON_AddItemToArray(pEntryArr, pEntryJson);
- }
-
- char* s;
- s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data", s);
- taosMemoryFree(s);
- s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
- cJSON_AddStringToObject(pRoot, "data2", s);
- taosMemoryFree(s);
- }
-
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncAppendEntriesBatch", pRoot);
- return pJson;
-}
-
-char* syncAppendEntriesBatch2Str(const SyncAppendEntriesBatch* pMsg) {
- cJSON* pJson = syncAppendEntriesBatch2Json(pMsg);
- char* serialized = cJSON_Print(pJson);
- cJSON_Delete(pJson);
- return serialized;
-}
-
-// for debug ----------------------
-void syncAppendEntriesBatchPrint(const SyncAppendEntriesBatch* pMsg) {
- char* serialized = syncAppendEntriesBatch2Str(pMsg);
- printf("syncAppendEntriesBatchPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncAppendEntriesBatchPrint2(char* s, const SyncAppendEntriesBatch* pMsg) {
- char* serialized = syncAppendEntriesBatch2Str(pMsg);
- printf("syncAppendEntriesBatchPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncAppendEntriesBatchLog(const SyncAppendEntriesBatch* pMsg) {
- char* serialized = syncAppendEntriesBatch2Str(pMsg);
- sTrace("syncAppendEntriesBatchLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncAppendEntriesBatchLog2(char* s, const SyncAppendEntriesBatch* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncAppendEntriesBatch2Str(pMsg);
- sLTrace("syncAppendEntriesBatchLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
cJSON* syncSnapshotSend2Json(const SyncSnapshotSend* pMsg) {
char u64buf[128];
cJSON* pRoot = cJSON_CreateObject();
@@ -398,7 +806,16 @@ void syncSnapshotSendLog2(char* s, const SyncSnapshotSend* pMsg) {
}
}
-cJSON* syncClientRequestBatch2Json(const SyncClientRequestBatch* pMsg) {
+SyncClientRequest* syncClientRequestAlloc(uint32_t dataLen) {
+ uint32_t bytes = sizeof(SyncClientRequest) + dataLen;
+ SyncClientRequest* pMsg = taosMemoryCalloc(1, bytes);
+ pMsg->bytes = bytes;
+ pMsg->msgType = TDMT_SYNC_CLIENT_REQUEST;
+ pMsg->dataLen = dataLen;
+ return pMsg;
+}
+
+cJSON* syncClientRequest2Json(const SyncClientRequest* pMsg) {
char u64buf[128] = {0};
cJSON* pRoot = cJSON_CreateObject();
@@ -406,27 +823,11 @@ cJSON* syncClientRequestBatch2Json(const SyncClientRequestBatch* pMsg) {
cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+ cJSON_AddNumberToObject(pRoot, "originalRpcType", pMsg->originalRpcType);
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->seqNum);
+ cJSON_AddStringToObject(pRoot, "seqNum", u64buf);
+ cJSON_AddNumberToObject(pRoot, "isWeak", pMsg->isWeak);
cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
- cJSON_AddNumberToObject(pRoot, "dataCount", pMsg->dataCount);
-
- SRaftMeta* metaArr = syncClientRequestBatchMetaArr(pMsg);
- SRpcMsg* msgArr = syncClientRequestBatchRpcMsgArr(pMsg);
-
- cJSON* pMetaArr = cJSON_CreateArray();
- cJSON_AddItemToObject(pRoot, "metaArr", pMetaArr);
- for (int i = 0; i < pMsg->dataCount; ++i) {
- cJSON* pMeta = cJSON_CreateObject();
- cJSON_AddNumberToObject(pMeta, "seqNum", metaArr[i].seqNum);
- cJSON_AddNumberToObject(pMeta, "isWeak", metaArr[i].isWeak);
- cJSON_AddItemToArray(pMetaArr, pMeta);
- }
-
- cJSON* pMsgArr = cJSON_CreateArray();
- cJSON_AddItemToObject(pRoot, "msgArr", pMsgArr);
- for (int i = 0; i < pMsg->dataCount; ++i) {
- cJSON* pRpcMsgJson = syncRpcMsg2Json(&msgArr[i]);
- cJSON_AddItemToArray(pMsgArr, pRpcMsgJson);
- }
char* s;
s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
@@ -438,46 +839,17 @@ cJSON* syncClientRequestBatch2Json(const SyncClientRequestBatch* pMsg) {
}
cJSON* pJson = cJSON_CreateObject();
- cJSON_AddItemToObject(pJson, "SyncClientRequestBatch", pRoot);
+ cJSON_AddItemToObject(pJson, "SyncClientRequest", pRoot);
return pJson;
}
-char* syncClientRequestBatch2Str(const SyncClientRequestBatch* pMsg) {
- cJSON* pJson = syncClientRequestBatch2Json(pMsg);
+char* syncClientRequest2Str(const SyncClientRequest* pMsg) {
+ cJSON* pJson = syncClientRequest2Json(pMsg);
char* serialized = cJSON_Print(pJson);
cJSON_Delete(pJson);
return serialized;
}
-// for debug ----------------------
-void syncClientRequestBatchPrint(const SyncClientRequestBatch* pMsg) {
- char* serialized = syncClientRequestBatch2Str(pMsg);
- printf("syncClientRequestBatchPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncClientRequestBatchPrint2(char* s, const SyncClientRequestBatch* pMsg) {
- char* serialized = syncClientRequestBatch2Str(pMsg);
- printf("syncClientRequestBatchPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
- fflush(NULL);
- taosMemoryFree(serialized);
-}
-
-void syncClientRequestBatchLog(const SyncClientRequestBatch* pMsg) {
- char* serialized = syncClientRequestBatch2Str(pMsg);
- sTrace("syncClientRequestBatchLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
- taosMemoryFree(serialized);
-}
-
-void syncClientRequestBatchLog2(char* s, const SyncClientRequestBatch* pMsg) {
- if (gRaftDetailLog) {
- char* serialized = syncClientRequestBatch2Str(pMsg);
- sLTrace("syncClientRequestBatchLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
- taosMemoryFree(serialized);
- }
-}
-
// for debug ----------------------
void syncClientRequestPrint(const SyncClientRequest* pMsg) {
char* serialized = syncClientRequest2Str(pMsg);
@@ -506,3 +878,2030 @@ void syncClientRequestLog2(char* s, const SyncClientRequest* pMsg) {
taosMemoryFree(serialized);
}
}
+
+// ---- message process SyncTimeout----
+SyncTimeout* syncTimeoutBuildX() {
+ uint32_t bytes = sizeof(SyncTimeout);
+ SyncTimeout* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->msgType = TDMT_SYNC_TIMEOUT;
+ return pMsg;
+}
+
+SyncTimeout* syncTimeoutBuild2(ESyncTimeoutType timeoutType, uint64_t logicClock, int32_t timerMS, int32_t vgId,
+ void* data) {
+ SyncTimeout* pMsg = syncTimeoutBuildX();
+ pMsg->vgId = vgId;
+ pMsg->timeoutType = timeoutType;
+ pMsg->logicClock = logicClock;
+ pMsg->timerMS = timerMS;
+ pMsg->data = data;
+ return pMsg;
+}
+
+char* syncTimeoutSerialize2(const SyncTimeout* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncTimeoutSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+void syncTimeoutDestroy(SyncTimeout* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncTimeoutSerialize(const SyncTimeout* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncTimeoutDeserialize(const char* buf, uint32_t len, SyncTimeout* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+SyncTimeout* syncTimeoutDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncTimeout* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncTimeoutDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncTimeout2RpcMsg(const SyncTimeout* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncTimeoutSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncTimeoutFromRpcMsg(const SRpcMsg* pRpcMsg, SyncTimeout* pMsg) {
+ syncTimeoutDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncTimeout* syncTimeoutFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncTimeout* pMsg = syncTimeoutDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncTimeout2Json(const SyncTimeout* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+ cJSON_AddNumberToObject(pRoot, "timeoutType", pMsg->timeoutType);
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->logicClock);
+ cJSON_AddStringToObject(pRoot, "logicClock", u64buf);
+ cJSON_AddNumberToObject(pRoot, "timerMS", pMsg->timerMS);
+ snprintf(u64buf, sizeof(u64buf), "%p", pMsg->data);
+ cJSON_AddStringToObject(pRoot, "data", u64buf);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncTimeout", pRoot);
+ return pJson;
+}
+
+char* syncTimeout2Str(const SyncTimeout* pMsg) {
+ cJSON* pJson = syncTimeout2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncTimeoutPrint(const SyncTimeout* pMsg) {
+ char* serialized = syncTimeout2Str(pMsg);
+ printf("syncTimeoutPrint | len:%zu | %s \n", strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncTimeoutPrint2(char* s, const SyncTimeout* pMsg) {
+ char* serialized = syncTimeout2Str(pMsg);
+ printf("syncTimeoutPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncTimeoutLog(const SyncTimeout* pMsg) {
+ char* serialized = syncTimeout2Str(pMsg);
+ sTrace("syncTimeoutLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncTimeoutLog2(char* s, const SyncTimeout* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncTimeout2Str(pMsg);
+ sTrace("syncTimeoutLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---- message process SyncRequestVote----
+SyncRequestVote* syncRequestVoteBuild(int32_t vgId) {
+ uint32_t bytes = sizeof(SyncRequestVote);
+ SyncRequestVote* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_REQUEST_VOTE;
+ return pMsg;
+}
+
+void syncRequestVoteDestroy(SyncRequestVote* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncRequestVoteSerialize(const SyncRequestVote* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncRequestVoteDeserialize(const char* buf, uint32_t len, SyncRequestVote* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncRequestVoteSerialize2(const SyncRequestVote* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncRequestVoteSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncRequestVote* syncRequestVoteDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncRequestVote* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncRequestVoteDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncRequestVote2RpcMsg(const SyncRequestVote* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncRequestVoteSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncRequestVoteFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVote* pMsg) {
+ syncRequestVoteDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncRequestVote* syncRequestVoteFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncRequestVote* pMsg = syncRequestVoteDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncRequestVote2Json(const SyncRequestVote* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ cJSON_AddNumberToObject(pDestId, "addr", pMsg->destId.addr);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
+ cJSON_AddStringToObject(pRoot, "term", u64buf);
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->lastLogIndex);
+ cJSON_AddStringToObject(pRoot, "lastLogIndex", u64buf);
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->lastLogTerm);
+ cJSON_AddStringToObject(pRoot, "lastLogTerm", u64buf);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncRequestVote", pRoot);
+ return pJson;
+}
+
+char* syncRequestVote2Str(const SyncRequestVote* pMsg) {
+ cJSON* pJson = syncRequestVote2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncRequestVotePrint(const SyncRequestVote* pMsg) {
+ char* serialized = syncRequestVote2Str(pMsg);
+ printf("syncRequestVotePrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncRequestVotePrint2(char* s, const SyncRequestVote* pMsg) {
+ char* serialized = syncRequestVote2Str(pMsg);
+ printf("syncRequestVotePrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncRequestVoteLog(const SyncRequestVote* pMsg) {
+ char* serialized = syncRequestVote2Str(pMsg);
+ sTrace("syncRequestVoteLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncRequestVoteLog2(char* s, const SyncRequestVote* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncRequestVote2Str(pMsg);
+ sTrace("syncRequestVoteLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---- message process SyncRequestVoteReply----
+SyncRequestVoteReply* syncRequestVoteReplyBuild(int32_t vgId) {
+ uint32_t bytes = sizeof(SyncRequestVoteReply);
+ SyncRequestVoteReply* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_REQUEST_VOTE_REPLY;
+ return pMsg;
+}
+
+void syncRequestVoteReplyDestroy(SyncRequestVoteReply* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncRequestVoteReplySerialize(const SyncRequestVoteReply* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncRequestVoteReplyDeserialize(const char* buf, uint32_t len, SyncRequestVoteReply* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncRequestVoteReplySerialize2(const SyncRequestVoteReply* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncRequestVoteReplySerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncRequestVoteReply* syncRequestVoteReplyDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncRequestVoteReply* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncRequestVoteReplyDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncRequestVoteReply2RpcMsg(const SyncRequestVoteReply* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncRequestVoteReplySerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncRequestVoteReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVoteReply* pMsg) {
+ syncRequestVoteReplyDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncRequestVoteReply* syncRequestVoteReplyFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncRequestVoteReply* pMsg = syncRequestVoteReplyDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncRequestVoteReply2Json(const SyncRequestVoteReply* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ cJSON_AddNumberToObject(pDestId, "addr", pMsg->destId.addr);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
+ cJSON_AddStringToObject(pRoot, "term", u64buf);
+ cJSON_AddNumberToObject(pRoot, "vote_granted", pMsg->voteGranted);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncRequestVoteReply", pRoot);
+ return pJson;
+}
+
+char* syncRequestVoteReply2Str(const SyncRequestVoteReply* pMsg) {
+ cJSON* pJson = syncRequestVoteReply2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncRequestVoteReplyPrint(const SyncRequestVoteReply* pMsg) {
+ char* serialized = syncRequestVoteReply2Str(pMsg);
+ printf("syncRequestVoteReplyPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncRequestVoteReplyPrint2(char* s, const SyncRequestVoteReply* pMsg) {
+ char* serialized = syncRequestVoteReply2Str(pMsg);
+ printf("syncRequestVoteReplyPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncRequestVoteReplyLog(const SyncRequestVoteReply* pMsg) {
+ char* serialized = syncRequestVoteReply2Str(pMsg);
+ sTrace("syncRequestVoteReplyLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncRequestVoteReplyLog2(char* s, const SyncRequestVoteReply* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncRequestVoteReply2Str(pMsg);
+ sTrace("syncRequestVoteReplyLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---- message process SyncAppendEntries----
+SyncAppendEntries* syncAppendEntriesBuild(uint32_t dataLen, int32_t vgId) {
+ uint32_t bytes = sizeof(SyncAppendEntries) + dataLen;
+ SyncAppendEntries* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_APPEND_ENTRIES;
+ pMsg->dataLen = dataLen;
+ return pMsg;
+}
+
+void syncAppendEntriesDestroy(SyncAppendEntries* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncAppendEntriesSerialize(const SyncAppendEntries* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncAppendEntriesDeserialize(const char* buf, uint32_t len, SyncAppendEntries* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+ ASSERT(pMsg->bytes == sizeof(SyncAppendEntries) + pMsg->dataLen);
+}
+
+char* syncAppendEntriesSerialize2(const SyncAppendEntries* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncAppendEntriesSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncAppendEntries* syncAppendEntriesDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncAppendEntries* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncAppendEntriesDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncAppendEntries2RpcMsg(const SyncAppendEntries* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncAppendEntriesSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncAppendEntriesFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntries* pMsg) {
+ syncAppendEntriesDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncAppendEntries* syncAppendEntriesFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncAppendEntries* pMsg = syncAppendEntriesDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncAppendEntries2Json(const SyncAppendEntries* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
+ cJSON_AddStringToObject(pRoot, "term", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->privateTerm);
+ cJSON_AddStringToObject(pRoot, "privateTerm", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->prevLogIndex);
+ cJSON_AddStringToObject(pRoot, "prevLogIndex", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->prevLogTerm);
+ cJSON_AddStringToObject(pRoot, "pre_log_term", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->commitIndex);
+ cJSON_AddStringToObject(pRoot, "commitIndex", u64buf);
+
+ cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
+ char* s;
+ s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data", s);
+ taosMemoryFree(s);
+ s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data2", s);
+ taosMemoryFree(s);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncAppendEntries", pRoot);
+ return pJson;
+}
+
+char* syncAppendEntries2Str(const SyncAppendEntries* pMsg) {
+ cJSON* pJson = syncAppendEntries2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncAppendEntriesPrint(const SyncAppendEntries* pMsg) {
+ char* serialized = syncAppendEntries2Str(pMsg);
+ printf("syncAppendEntriesPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncAppendEntriesPrint2(char* s, const SyncAppendEntries* pMsg) {
+ char* serialized = syncAppendEntries2Str(pMsg);
+ printf("syncAppendEntriesPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncAppendEntriesLog(const SyncAppendEntries* pMsg) {
+ char* serialized = syncAppendEntries2Str(pMsg);
+ sTrace("syncAppendEntriesLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncAppendEntriesLog2(char* s, const SyncAppendEntries* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncAppendEntries2Str(pMsg);
+ sTrace("syncAppendEntriesLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---- message process SyncAppendEntriesReply----
+SyncAppendEntriesReply* syncAppendEntriesReplyBuild(int32_t vgId) {
+ uint32_t bytes = sizeof(SyncAppendEntriesReply);
+ SyncAppendEntriesReply* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_APPEND_ENTRIES_REPLY;
+ return pMsg;
+}
+
+void syncAppendEntriesReplyDestroy(SyncAppendEntriesReply* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncAppendEntriesReplySerialize(const SyncAppendEntriesReply* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncAppendEntriesReplyDeserialize(const char* buf, uint32_t len, SyncAppendEntriesReply* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncAppendEntriesReplySerialize2(const SyncAppendEntriesReply* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncAppendEntriesReplySerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncAppendEntriesReply* syncAppendEntriesReplyDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncAppendEntriesReply* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncAppendEntriesReplyDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncAppendEntriesReply2RpcMsg(const SyncAppendEntriesReply* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncAppendEntriesReplySerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncAppendEntriesReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntriesReply* pMsg) {
+ syncAppendEntriesReplyDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncAppendEntriesReply* syncAppendEntriesReplyFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncAppendEntriesReply* pMsg = syncAppendEntriesReplyDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncAppendEntriesReply2Json(const SyncAppendEntriesReply* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->privateTerm);
+ cJSON_AddStringToObject(pRoot, "privateTerm", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
+ cJSON_AddStringToObject(pRoot, "term", u64buf);
+ cJSON_AddNumberToObject(pRoot, "success", pMsg->success);
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->matchIndex);
+ cJSON_AddStringToObject(pRoot, "matchIndex", u64buf);
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->startTime);
+ cJSON_AddStringToObject(pRoot, "startTime", u64buf);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncAppendEntriesReply", pRoot);
+ return pJson;
+}
+
+char* syncAppendEntriesReply2Str(const SyncAppendEntriesReply* pMsg) {
+ cJSON* pJson = syncAppendEntriesReply2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncAppendEntriesReplyPrint(const SyncAppendEntriesReply* pMsg) {
+ char* serialized = syncAppendEntriesReply2Str(pMsg);
+ printf("syncAppendEntriesReplyPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncAppendEntriesReplyPrint2(char* s, const SyncAppendEntriesReply* pMsg) {
+ char* serialized = syncAppendEntriesReply2Str(pMsg);
+ printf("syncAppendEntriesReplyPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncAppendEntriesReplyLog(const SyncAppendEntriesReply* pMsg) {
+ char* serialized = syncAppendEntriesReply2Str(pMsg);
+ sTrace("syncAppendEntriesReplyLog | len:%d| %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncAppendEntriesReplyLog2(char* s, const SyncAppendEntriesReply* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncAppendEntriesReply2Str(pMsg);
+ sTrace("syncAppendEntriesReplyLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---- message process SyncHeartbeat----
+SyncHeartbeat* syncHeartbeatBuild(int32_t vgId) {
+ uint32_t bytes = sizeof(SyncHeartbeat);
+ SyncHeartbeat* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_HEARTBEAT;
+ return pMsg;
+}
+
+void syncHeartbeatDestroy(SyncHeartbeat* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncHeartbeatSerialize(const SyncHeartbeat* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncHeartbeatDeserialize(const char* buf, uint32_t len, SyncHeartbeat* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncHeartbeatSerialize2(const SyncHeartbeat* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncHeartbeatSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncHeartbeat* syncHeartbeatDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncHeartbeat* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncHeartbeatDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncHeartbeat2RpcMsg(const SyncHeartbeat* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncHeartbeatSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncHeartbeatFromRpcMsg(const SRpcMsg* pRpcMsg, SyncHeartbeat* pMsg) {
+ syncHeartbeatDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncHeartbeat* syncHeartbeatFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncHeartbeat* pMsg = syncHeartbeatDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncHeartbeat2Json(const SyncHeartbeat* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
+ cJSON_AddStringToObject(pRoot, "term", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->privateTerm);
+ cJSON_AddStringToObject(pRoot, "privateTerm", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->commitIndex);
+ cJSON_AddStringToObject(pRoot, "commitIndex", u64buf);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncHeartbeat", pRoot);
+ return pJson;
+}
+
+char* syncHeartbeat2Str(const SyncHeartbeat* pMsg) {
+ cJSON* pJson = syncHeartbeat2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+void syncHeartbeatPrint(const SyncHeartbeat* pMsg) {
+ char* serialized = syncHeartbeat2Str(pMsg);
+ printf("syncHeartbeatPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncHeartbeatPrint2(char* s, const SyncHeartbeat* pMsg) {
+ char* serialized = syncHeartbeat2Str(pMsg);
+ printf("syncHeartbeatPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncHeartbeatLog(const SyncHeartbeat* pMsg) {
+ char* serialized = syncHeartbeat2Str(pMsg);
+ sTrace("syncHeartbeatLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncHeartbeatLog2(char* s, const SyncHeartbeat* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncHeartbeat2Str(pMsg);
+ sTrace("syncHeartbeatLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---- message process SyncHeartbeatReply----
+SyncHeartbeatReply* syncHeartbeatReplyBuild(int32_t vgId) {
+ uint32_t bytes = sizeof(SyncHeartbeatReply);
+ SyncHeartbeatReply* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_HEARTBEAT_REPLY;
+ return pMsg;
+}
+
+void syncHeartbeatReplyDestroy(SyncHeartbeatReply* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncHeartbeatReplySerialize(const SyncHeartbeatReply* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncHeartbeatReplyDeserialize(const char* buf, uint32_t len, SyncHeartbeatReply* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncHeartbeatReplySerialize2(const SyncHeartbeatReply* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncHeartbeatReplySerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncHeartbeatReply* syncHeartbeatReplyDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncHeartbeatReply* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncHeartbeatReplyDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncHeartbeatReply2RpcMsg(const SyncHeartbeatReply* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncHeartbeatReplySerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncHeartbeatReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncHeartbeatReply* pMsg) {
+ syncHeartbeatReplyDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncHeartbeatReply* syncHeartbeatReplyFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncHeartbeatReply* pMsg = syncHeartbeatReplyDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncHeartbeatReply2Json(const SyncHeartbeatReply* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->privateTerm);
+ cJSON_AddStringToObject(pRoot, "privateTerm", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
+ cJSON_AddStringToObject(pRoot, "term", u64buf);
+
+ cJSON_AddStringToObject(pRoot, "matchIndex", u64buf);
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->startTime);
+ cJSON_AddStringToObject(pRoot, "startTime", u64buf);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncHeartbeatReply", pRoot);
+ return pJson;
+}
+
+char* syncHeartbeatReply2Str(const SyncHeartbeatReply* pMsg) {
+ cJSON* pJson = syncHeartbeatReply2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+void syncHeartbeatReplyPrint(const SyncHeartbeatReply* pMsg) {
+ char* serialized = syncHeartbeatReply2Str(pMsg);
+ printf("syncHeartbeatReplyPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncHeartbeatReplyPrint2(char* s, const SyncHeartbeatReply* pMsg) {
+ char* serialized = syncHeartbeatReply2Str(pMsg);
+ printf("syncHeartbeatReplyPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncHeartbeatReplyLog(const SyncHeartbeatReply* pMsg) {
+ char* serialized = syncHeartbeatReply2Str(pMsg);
+ sTrace("syncHeartbeatReplyLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncHeartbeatReplyLog2(char* s, const SyncHeartbeatReply* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncHeartbeatReply2Str(pMsg);
+ sTrace("syncHeartbeatReplyLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---- message process SyncPreSnapshot----
+SyncPreSnapshot* syncPreSnapshotBuild(int32_t vgId) {
+ uint32_t bytes = sizeof(SyncPreSnapshot);
+ SyncPreSnapshot* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_PRE_SNAPSHOT;
+ return pMsg;
+}
+
+void syncPreSnapshotDestroy(SyncPreSnapshot* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncPreSnapshotSerialize(const SyncPreSnapshot* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncPreSnapshotDeserialize(const char* buf, uint32_t len, SyncPreSnapshot* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncPreSnapshotSerialize2(const SyncPreSnapshot* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncPreSnapshotSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncPreSnapshot* syncPreSnapshotDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncPreSnapshot* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncPreSnapshotDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncPreSnapshot2RpcMsg(const SyncPreSnapshot* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncPreSnapshotSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncPreSnapshotFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPreSnapshot* pMsg) {
+ syncPreSnapshotDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncPreSnapshot* syncPreSnapshotFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncPreSnapshot* pMsg = syncPreSnapshotDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncPreSnapshot2Json(const SyncPreSnapshot* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
+ cJSON_AddStringToObject(pRoot, "term", u64buf);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncPreSnapshot", pRoot);
+ return pJson;
+}
+
+char* syncPreSnapshot2Str(const SyncPreSnapshot* pMsg) {
+ cJSON* pJson = syncPreSnapshot2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+void syncPreSnapshotPrint(const SyncPreSnapshot* pMsg) {
+ char* serialized = syncPreSnapshot2Str(pMsg);
+ printf("syncPreSnapshotPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncPreSnapshotPrint2(char* s, const SyncPreSnapshot* pMsg) {
+ char* serialized = syncPreSnapshot2Str(pMsg);
+ printf("syncPreSnapshotPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncPreSnapshotLog(const SyncPreSnapshot* pMsg) {
+ char* serialized = syncPreSnapshot2Str(pMsg);
+ sTrace("syncPreSnapshotLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncPreSnapshotLog2(char* s, const SyncPreSnapshot* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncPreSnapshot2Str(pMsg);
+ sTrace("syncPreSnapshotLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---- message process SyncPreSnapshotReply----
+SyncPreSnapshotReply* syncPreSnapshotReplyBuild(int32_t vgId) {
+ uint32_t bytes = sizeof(SyncPreSnapshotReply);
+ SyncPreSnapshotReply* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_PRE_SNAPSHOT_REPLY;
+ return pMsg;
+}
+
+void syncPreSnapshotReplyDestroy(SyncPreSnapshotReply* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncPreSnapshotReplySerialize(const SyncPreSnapshotReply* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncPreSnapshotReplyDeserialize(const char* buf, uint32_t len, SyncPreSnapshotReply* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncPreSnapshotReplySerialize2(const SyncPreSnapshotReply* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncPreSnapshotReplySerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncPreSnapshotReply* syncPreSnapshotReplyDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncPreSnapshotReply* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncPreSnapshotReplyDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncPreSnapshotReply2RpcMsg(const SyncPreSnapshotReply* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncPreSnapshotReplySerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncPreSnapshotReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPreSnapshotReply* pMsg) {
+ syncPreSnapshotReplyDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncPreSnapshotReply* syncPreSnapshotReplyFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncPreSnapshotReply* pMsg = syncPreSnapshotReplyDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncPreSnapshotReply2Json(const SyncPreSnapshotReply* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
+ cJSON_AddStringToObject(pRoot, "term", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->snapStart);
+ cJSON_AddStringToObject(pRoot, "snap-start", u64buf);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncPreSnapshotReply", pRoot);
+ return pJson;
+}
+
+char* syncPreSnapshotReply2Str(const SyncPreSnapshotReply* pMsg) {
+ cJSON* pJson = syncPreSnapshotReply2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+void syncPreSnapshotReplyPrint(const SyncPreSnapshotReply* pMsg) {
+ char* serialized = syncPreSnapshotReply2Str(pMsg);
+ printf("syncPreSnapshotReplyPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncPreSnapshotReplyPrint2(char* s, const SyncPreSnapshotReply* pMsg) {
+ char* serialized = syncPreSnapshotReply2Str(pMsg);
+ printf("syncPreSnapshotReplyPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncPreSnapshotReplyLog(const SyncPreSnapshotReply* pMsg) {
+ char* serialized = syncPreSnapshotReply2Str(pMsg);
+ sTrace("syncPreSnapshotReplyLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncPreSnapshotReplyLog2(char* s, const SyncPreSnapshotReply* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncPreSnapshotReply2Str(pMsg);
+ sTrace("syncPreSnapshotReplyLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---- message process SyncApplyMsg----
+SyncApplyMsg* syncApplyMsgBuild(uint32_t dataLen) {
+ uint32_t bytes = sizeof(SyncApplyMsg) + dataLen;
+ SyncApplyMsg* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->msgType = TDMT_SYNC_APPLY_MSG;
+ pMsg->dataLen = dataLen;
+ return pMsg;
+}
+
+SyncApplyMsg* syncApplyMsgBuild2(const SRpcMsg* pOriginalRpcMsg, int32_t vgId, SFsmCbMeta* pMeta) {
+ SyncApplyMsg* pMsg = syncApplyMsgBuild(pOriginalRpcMsg->contLen);
+ pMsg->vgId = vgId;
+ pMsg->originalRpcType = pOriginalRpcMsg->msgType;
+ pMsg->fsmMeta = *pMeta;
+ memcpy(pMsg->data, pOriginalRpcMsg->pCont, pOriginalRpcMsg->contLen);
+ return pMsg;
+}
+
+void syncApplyMsgDestroy(SyncApplyMsg* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncApplyMsgSerialize(const SyncApplyMsg* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncApplyMsgDeserialize(const char* buf, uint32_t len, SyncApplyMsg* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncApplyMsgSerialize2(const SyncApplyMsg* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncApplyMsgSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncApplyMsg* syncApplyMsgDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncApplyMsg* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncApplyMsgDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+// SyncApplyMsg to SRpcMsg, put it into ApplyQ
+void syncApplyMsg2RpcMsg(const SyncApplyMsg* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncApplyMsgSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+// get SRpcMsg from ApplyQ, to SyncApplyMsg
+void syncApplyMsgFromRpcMsg(const SRpcMsg* pRpcMsg, SyncApplyMsg* pMsg) {
+ syncApplyMsgDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncApplyMsg* syncApplyMsgFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncApplyMsg* pMsg = syncApplyMsgDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ return pMsg;
+}
+
+// SyncApplyMsg to OriginalRpcMsg
+void syncApplyMsg2OriginalRpcMsg(const SyncApplyMsg* pMsg, SRpcMsg* pOriginalRpcMsg) {
+ memset(pOriginalRpcMsg, 0, sizeof(*pOriginalRpcMsg));
+ pOriginalRpcMsg->msgType = pMsg->originalRpcType;
+ pOriginalRpcMsg->contLen = pMsg->dataLen;
+ pOriginalRpcMsg->pCont = rpcMallocCont(pOriginalRpcMsg->contLen);
+ memcpy(pOriginalRpcMsg->pCont, pMsg->data, pOriginalRpcMsg->contLen);
+}
+
+cJSON* syncApplyMsg2Json(const SyncApplyMsg* pMsg) {
+ char u64buf[128] = {0};
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+ cJSON_AddNumberToObject(pRoot, "originalRpcType", pMsg->originalRpcType);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->fsmMeta.index);
+ cJSON_AddStringToObject(pRoot, "fsmMeta.index", u64buf);
+ cJSON_AddNumberToObject(pRoot, "fsmMeta.isWeak", pMsg->fsmMeta.isWeak);
+ cJSON_AddNumberToObject(pRoot, "fsmMeta.code", pMsg->fsmMeta.code);
+ cJSON_AddNumberToObject(pRoot, "fsmMeta.state", pMsg->fsmMeta.state);
+ cJSON_AddStringToObject(pRoot, "fsmMeta.state.str", syncStr(pMsg->fsmMeta.state));
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->fsmMeta.seqNum);
+ cJSON_AddStringToObject(pRoot, "fsmMeta.seqNum", u64buf);
+
+ cJSON_AddNumberToObject(pRoot, "dataLen", pMsg->dataLen);
+ char* s;
+ s = syncUtilPrintBin((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data", s);
+ taosMemoryFree(s);
+ s = syncUtilPrintBin2((char*)(pMsg->data), pMsg->dataLen);
+ cJSON_AddStringToObject(pRoot, "data2", s);
+ taosMemoryFree(s);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncApplyMsg", pRoot);
+ return pJson;
+}
+
+char* syncApplyMsg2Str(const SyncApplyMsg* pMsg) {
+ cJSON* pJson = syncApplyMsg2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncApplyMsgPrint(const SyncApplyMsg* pMsg) {
+ char* serialized = syncApplyMsg2Str(pMsg);
+ printf("syncApplyMsgPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncApplyMsgPrint2(char* s, const SyncApplyMsg* pMsg) {
+ char* serialized = syncApplyMsg2Str(pMsg);
+ printf("syncApplyMsgPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncApplyMsgLog(const SyncApplyMsg* pMsg) {
+ char* serialized = syncApplyMsg2Str(pMsg);
+ sTrace("ssyncApplyMsgLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncApplyMsgLog2(char* s, const SyncApplyMsg* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncApplyMsg2Str(pMsg);
+ sTrace("syncApplyMsgLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---------------------------------------------
+SyncSnapshotSend* syncSnapshotSendBuild(uint32_t dataLen, int32_t vgId) {
+ uint32_t bytes = sizeof(SyncSnapshotSend) + dataLen;
+ SyncSnapshotSend* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_SNAPSHOT_SEND;
+ pMsg->dataLen = dataLen;
+ return pMsg;
+}
+
+void syncSnapshotSendDestroy(SyncSnapshotSend* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncSnapshotSendSerialize(const SyncSnapshotSend* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncSnapshotSendDeserialize(const char* buf, uint32_t len, SyncSnapshotSend* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+ ASSERT(pMsg->bytes == sizeof(SyncSnapshotSend) + pMsg->dataLen);
+}
+
+char* syncSnapshotSendSerialize2(const SyncSnapshotSend* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncSnapshotSendSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncSnapshotSend* syncSnapshotSendDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncSnapshotSend* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncSnapshotSendDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncSnapshotSend2RpcMsg(const SyncSnapshotSend* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncSnapshotSendSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncSnapshotSendFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotSend* pMsg) {
+ syncSnapshotSendDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncSnapshotSend* syncSnapshotSendFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncSnapshotSend* pMsg = syncSnapshotSendDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+SyncSnapshotRsp* syncSnapshotRspBuild(int32_t vgId) {
+ uint32_t bytes = sizeof(SyncSnapshotRsp);
+ SyncSnapshotRsp* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_SNAPSHOT_RSP;
+ return pMsg;
+}
+
+void syncSnapshotRspDestroy(SyncSnapshotRsp* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncSnapshotRspSerialize(const SyncSnapshotRsp* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncSnapshotRspDeserialize(const char* buf, uint32_t len, SyncSnapshotRsp* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncSnapshotRspSerialize2(const SyncSnapshotRsp* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncSnapshotRspSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncSnapshotRsp* syncSnapshotRspDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncSnapshotRsp* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncSnapshotRspDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncSnapshotRsp2RpcMsg(const SyncSnapshotRsp* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncSnapshotRspSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncSnapshotRspFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotRsp* pMsg) {
+ syncSnapshotRspDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncSnapshotRsp* syncSnapshotRspFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncSnapshotRsp* pMsg = syncSnapshotRspDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncSnapshotRsp2Json(const SyncSnapshotRsp* pMsg) {
+ char u64buf[128];
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128];
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128];
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->term);
+ cJSON_AddStringToObject(pRoot, "term", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->startTime);
+ cJSON_AddStringToObject(pRoot, "startTime", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->lastIndex);
+ cJSON_AddStringToObject(pRoot, "lastIndex", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->lastTerm);
+ cJSON_AddStringToObject(pRoot, "lastTerm", u64buf);
+
+ cJSON_AddNumberToObject(pRoot, "ack", pMsg->ack);
+ cJSON_AddNumberToObject(pRoot, "code", pMsg->code);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->snapBeginIndex);
+ cJSON_AddStringToObject(pRoot, "snap-begin", u64buf);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncSnapshotRsp", pRoot);
+ return pJson;
+}
+
+char* syncSnapshotRsp2Str(const SyncSnapshotRsp* pMsg) {
+ cJSON* pJson = syncSnapshotRsp2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncSnapshotRspPrint(const SyncSnapshotRsp* pMsg) {
+ char* serialized = syncSnapshotRsp2Str(pMsg);
+ printf("syncSnapshotRspPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncSnapshotRspPrint2(char* s, const SyncSnapshotRsp* pMsg) {
+ char* serialized = syncSnapshotRsp2Str(pMsg);
+ printf("syncSnapshotRspPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncSnapshotRspLog(const SyncSnapshotRsp* pMsg) {
+ char* serialized = syncSnapshotRsp2Str(pMsg);
+ sTrace("syncSnapshotRspLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncSnapshotRspLog2(char* s, const SyncSnapshotRsp* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncSnapshotRsp2Str(pMsg);
+ sTrace("syncSnapshotRspLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
+
+// ---------------------------------------------
+SyncLeaderTransfer* syncLeaderTransferBuild(int32_t vgId) {
+ uint32_t bytes = sizeof(SyncLeaderTransfer);
+ SyncLeaderTransfer* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_LEADER_TRANSFER;
+ return pMsg;
+}
+
+void syncLeaderTransferDestroy(SyncLeaderTransfer* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncLeaderTransferSerialize(const SyncLeaderTransfer* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncLeaderTransferDeserialize(const char* buf, uint32_t len, SyncLeaderTransfer* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncLeaderTransferSerialize2(const SyncLeaderTransfer* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncLeaderTransferSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncLeaderTransfer* syncLeaderTransferDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncLeaderTransfer* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncLeaderTransferDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncLeaderTransfer2RpcMsg(const SyncLeaderTransfer* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncLeaderTransferSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncLeaderTransferFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLeaderTransfer* pMsg) {
+ syncLeaderTransferDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncLeaderTransfer* syncLeaderTransferFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncLeaderTransfer* pMsg = syncLeaderTransferDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncLeaderTransfer2Json(const SyncLeaderTransfer* pMsg) {
+ char u64buf[128];
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ /*
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128];
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128];
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+ */
+
+ cJSON* pNewerId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->newLeaderId.addr);
+ cJSON_AddStringToObject(pNewerId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->newLeaderId.addr;
+ cJSON* pTmp = pNewerId;
+ char host[128];
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pNewerId, "vgId", pMsg->newLeaderId.vgId);
+ cJSON_AddItemToObject(pRoot, "newLeaderId", pNewerId);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncLeaderTransfer", pRoot);
+ return pJson;
+}
+
+char* syncLeaderTransfer2Str(const SyncLeaderTransfer* pMsg) {
+ cJSON* pJson = syncLeaderTransfer2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+SyncLocalCmd* syncLocalCmdBuild(int32_t vgId) {
+ uint32_t bytes = sizeof(SyncLocalCmd);
+ SyncLocalCmd* pMsg = taosMemoryMalloc(bytes);
+ memset(pMsg, 0, bytes);
+ pMsg->bytes = bytes;
+ pMsg->vgId = vgId;
+ pMsg->msgType = TDMT_SYNC_LOCAL_CMD;
+ return pMsg;
+}
+
+void syncLocalCmdDestroy(SyncLocalCmd* pMsg) {
+ if (pMsg != NULL) {
+ taosMemoryFree(pMsg);
+ }
+}
+
+void syncLocalCmdSerialize(const SyncLocalCmd* pMsg, char* buf, uint32_t bufLen) {
+ ASSERT(pMsg->bytes <= bufLen);
+ memcpy(buf, pMsg, pMsg->bytes);
+}
+
+void syncLocalCmdDeserialize(const char* buf, uint32_t len, SyncLocalCmd* pMsg) {
+ memcpy(pMsg, buf, len);
+ ASSERT(len == pMsg->bytes);
+}
+
+char* syncLocalCmdSerialize2(const SyncLocalCmd* pMsg, uint32_t* len) {
+ char* buf = taosMemoryMalloc(pMsg->bytes);
+ ASSERT(buf != NULL);
+ syncLocalCmdSerialize(pMsg, buf, pMsg->bytes);
+ if (len != NULL) {
+ *len = pMsg->bytes;
+ }
+ return buf;
+}
+
+SyncLocalCmd* syncLocalCmdDeserialize2(const char* buf, uint32_t len) {
+ uint32_t bytes = *((uint32_t*)buf);
+ SyncLocalCmd* pMsg = taosMemoryMalloc(bytes);
+ ASSERT(pMsg != NULL);
+ syncLocalCmdDeserialize(buf, len, pMsg);
+ ASSERT(len == pMsg->bytes);
+ return pMsg;
+}
+
+void syncLocalCmd2RpcMsg(const SyncLocalCmd* pMsg, SRpcMsg* pRpcMsg) {
+ memset(pRpcMsg, 0, sizeof(*pRpcMsg));
+ pRpcMsg->msgType = pMsg->msgType;
+ pRpcMsg->contLen = pMsg->bytes;
+ pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
+ syncLocalCmdSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen);
+}
+
+void syncLocalCmdFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLocalCmd* pMsg) {
+ syncLocalCmdDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg);
+}
+
+SyncLocalCmd* syncLocalCmdFromRpcMsg2(const SRpcMsg* pRpcMsg) {
+ SyncLocalCmd* pMsg = syncLocalCmdDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen);
+ ASSERT(pMsg != NULL);
+ return pMsg;
+}
+
+cJSON* syncLocalCmd2Json(const SyncLocalCmd* pMsg) {
+ char u64buf[128];
+ cJSON* pRoot = cJSON_CreateObject();
+
+ if (pMsg != NULL) {
+ cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes);
+ cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId);
+ cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType);
+
+ cJSON* pSrcId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr);
+ cJSON_AddStringToObject(pSrcId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->srcId.addr;
+ cJSON* pTmp = pSrcId;
+ char host[128];
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId);
+ cJSON_AddItemToObject(pRoot, "srcId", pSrcId);
+
+ cJSON* pDestId = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr);
+ cJSON_AddStringToObject(pDestId, "addr", u64buf);
+ {
+ uint64_t u64 = pMsg->destId.addr;
+ cJSON* pTmp = pDestId;
+ char host[128];
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pTmp, "addr_host", host);
+ cJSON_AddNumberToObject(pTmp, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId);
+ cJSON_AddItemToObject(pRoot, "destId", pDestId);
+
+ cJSON_AddNumberToObject(pRoot, "cmd", pMsg->cmd);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->sdNewTerm);
+ cJSON_AddStringToObject(pRoot, "sd-new-term", u64buf);
+
+ snprintf(u64buf, sizeof(u64buf), "%" PRId64, pMsg->fcIndex);
+ cJSON_AddStringToObject(pRoot, "fc-index", u64buf);
+ }
+
+ cJSON* pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SyncLocalCmd2Json", pRoot);
+ return pJson;
+}
+
+char* syncLocalCmd2Str(const SyncLocalCmd* pMsg) {
+ cJSON* pJson = syncLocalCmd2Json(pMsg);
+ char* serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug ----------------------
+void syncLocalCmdPrint(const SyncLocalCmd* pMsg) {
+ char* serialized = syncLocalCmd2Str(pMsg);
+ printf("syncLocalCmdPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncLocalCmdPrint2(char* s, const SyncLocalCmd* pMsg) {
+ char* serialized = syncLocalCmd2Str(pMsg);
+ printf("syncLocalCmdPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void syncLocalCmdLog(const SyncLocalCmd* pMsg) {
+ char* serialized = syncLocalCmd2Str(pMsg);
+ sTrace("syncLocalCmdLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void syncLocalCmdLog2(char* s, const SyncLocalCmd* pMsg) {
+ if (gRaftDetailLog) {
+ char* serialized = syncLocalCmd2Str(pMsg);
+ sTrace("syncLocalCmdLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+ }
+}
\ No newline at end of file
diff --git a/source/libs/sync/test/sync_test_lib/src/syncRaftCfgDebug.c b/source/libs/sync/test/sync_test_lib/src/syncRaftCfgDebug.c
index 88b697fbf1..50ecc5d478 100644
--- a/source/libs/sync/test/sync_test_lib/src/syncRaftCfgDebug.c
+++ b/source/libs/sync/test/sync_test_lib/src/syncRaftCfgDebug.c
@@ -16,4 +16,20 @@
#define _DEFAULT_SOURCE
#include "syncTest.h"
+char *syncCfg2Str(SSyncCfg *pSyncCfg) {
+ cJSON *pJson = syncCfg2Json(pSyncCfg);
+ char *serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+int32_t syncCfgFromStr(const char *s, SSyncCfg *pSyncCfg) {
+ cJSON *pRoot = cJSON_Parse(s);
+ ASSERT(pRoot != NULL);
+
+ int32_t ret = syncCfgFromJson(pRoot, pSyncCfg);
+ ASSERT(ret == 0);
+
+ cJSON_Delete(pRoot);
+ return 0;
+}
diff --git a/source/libs/sync/test/sync_test_lib/src/syncRaftStoreDebug.c b/source/libs/sync/test/sync_test_lib/src/syncRaftStoreDebug.c
new file mode 100644
index 0000000000..0c4dd95e48
--- /dev/null
+++ b/source/libs/sync/test/sync_test_lib/src/syncRaftStoreDebug.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2019 TAOS Data, Inc.
+ *
+ * This program is free software: you can use, redistribute, and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3
+ * or later ("AGPL"), as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+#define _DEFAULT_SOURCE
+#include "syncTest.h"
+#include "cJSON.h"
+
+int32_t raftStoreFromJson(SRaftStore *pRaftStore, cJSON *pJson) { return 0; }
+
+cJSON *raftStore2Json(SRaftStore *pRaftStore) {
+ char u64buf[128] = {0};
+ cJSON *pRoot = cJSON_CreateObject();
+
+ if (pRaftStore != NULL) {
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64 "", pRaftStore->currentTerm);
+ cJSON_AddStringToObject(pRoot, "currentTerm", u64buf);
+
+ cJSON *pVoteFor = cJSON_CreateObject();
+ snprintf(u64buf, sizeof(u64buf), "%" PRIu64 "", pRaftStore->voteFor.addr);
+ cJSON_AddStringToObject(pVoteFor, "addr", u64buf);
+ {
+ uint64_t u64 = pRaftStore->voteFor.addr;
+ char host[128] = {0};
+ uint16_t port;
+ syncUtilU642Addr(u64, host, sizeof(host), &port);
+ cJSON_AddStringToObject(pVoteFor, "addr_host", host);
+ cJSON_AddNumberToObject(pVoteFor, "addr_port", port);
+ }
+ cJSON_AddNumberToObject(pVoteFor, "vgId", pRaftStore->voteFor.vgId);
+ cJSON_AddItemToObject(pRoot, "voteFor", pVoteFor);
+
+ int hasVoted = raftStoreHasVoted(pRaftStore);
+ cJSON_AddNumberToObject(pRoot, "hasVoted", hasVoted);
+ }
+
+ cJSON *pJson = cJSON_CreateObject();
+ cJSON_AddItemToObject(pJson, "SRaftStore", pRoot);
+ return pJson;
+}
+
+char *raftStore2Str(SRaftStore *pRaftStore) {
+ cJSON *pJson = raftStore2Json(pRaftStore);
+ char *serialized = cJSON_Print(pJson);
+ cJSON_Delete(pJson);
+ return serialized;
+}
+
+// for debug -------------------
+void raftStorePrint(SRaftStore *pObj) {
+ char *serialized = raftStore2Str(pObj);
+ printf("raftStorePrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+
+void raftStorePrint2(char *s, SRaftStore *pObj) {
+ char *serialized = raftStore2Str(pObj);
+ printf("raftStorePrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized);
+ fflush(NULL);
+ taosMemoryFree(serialized);
+}
+void raftStoreLog(SRaftStore *pObj) {
+ char *serialized = raftStore2Str(pObj);
+ sTrace("raftStoreLog | len:%d | %s", (int32_t)strlen(serialized), serialized);
+ taosMemoryFree(serialized);
+}
+
+void raftStoreLog2(char *s, SRaftStore *pObj) {
+ char *serialized = raftStore2Str(pObj);
+ sTrace("raftStoreLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized);
+ taosMemoryFree(serialized);
+}
\ No newline at end of file
diff --git a/source/libs/sync/test/sync_test_lib/src/syncSnapshotDebug.c b/source/libs/sync/test/sync_test_lib/src/syncSnapshotDebug.c
index fdaf4b8b34..82e23b2885 100644
--- a/source/libs/sync/test/sync_test_lib/src/syncSnapshotDebug.c
+++ b/source/libs/sync/test/sync_test_lib/src/syncSnapshotDebug.c
@@ -130,3 +130,60 @@ char *snapshotReceiver2Str(SSyncSnapshotReceiver *pReceiver) {
cJSON_Delete(pJson);
return serialized;
}
+
+int32_t syncNodeOnPreSnapshot(SSyncNode *ths, SyncPreSnapshot *pMsg) {
+ syncLogRecvSyncPreSnapshot(ths, pMsg, "");
+
+ SyncPreSnapshotReply *pMsgReply = syncPreSnapshotReplyBuild(ths->vgId);
+ pMsgReply->srcId = ths->myRaftId;
+ pMsgReply->destId = pMsg->srcId;
+ pMsgReply->term = ths->pRaftStore->currentTerm;
+
+ SSyncLogStoreData *pData = ths->pLogStore->data;
+ SWal *pWal = pData->pWal;
+
+ if (syncNodeIsMnode(ths)) {
+ pMsgReply->snapStart = SYNC_INDEX_BEGIN;
+
+ } else {
+ bool isEmpty = ths->pLogStore->syncLogIsEmpty(ths->pLogStore);
+ int64_t walCommitVer = walGetCommittedVer(pWal);
+
+ if (!isEmpty && ths->commitIndex != walCommitVer) {
+ sNError(ths, "commit not same, wal-commit:%" PRId64 ", commit:%" PRId64 ", ignore", walCommitVer,
+ ths->commitIndex);
+ goto _IGNORE;
+ }
+
+ pMsgReply->snapStart = ths->commitIndex + 1;
+
+ // make local log clean
+ int32_t code = ths->pLogStore->syncLogTruncate(ths->pLogStore, pMsgReply->snapStart);
+ if (code != 0) {
+ sNError(ths, "truncate wal error");
+ goto _IGNORE;
+ }
+ }
+
+ // can not write behind _RESPONSE
+ SRpcMsg rpcMsg;
+
+_RESPONSE:
+ syncPreSnapshotReply2RpcMsg(pMsgReply, &rpcMsg);
+ syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg);
+
+ syncPreSnapshotReplyDestroy(pMsgReply);
+ return 0;
+
+_IGNORE:
+ syncPreSnapshotReplyDestroy(pMsgReply);
+ return 0;
+}
+
+int32_t syncNodeOnPreSnapshotReply(SSyncNode *ths, SyncPreSnapshotReply *pMsg) {
+ syncLogRecvSyncPreSnapshotReply(ths, pMsg, "");
+
+ // start snapshot
+
+ return 0;
+}
\ No newline at end of file
diff --git a/source/libs/transport/inc/transComm.h b/source/libs/transport/inc/transComm.h
index 5e76e6bd83..ac54749ae1 100644
--- a/source/libs/transport/inc/transComm.h
+++ b/source/libs/transport/inc/transComm.h
@@ -96,7 +96,7 @@ typedef void* queue[2];
//#define TRANS_RETRY_COUNT_LIMIT 100 // retry count limit
//#define TRANS_RETRY_INTERVAL 15 // retry interval (ms)
-#define TRANS_CONN_TIMEOUT 3 // connect timeout (s)
+#define TRANS_CONN_TIMEOUT 3000 // connect timeout (ms)
#define TRANS_READ_TIMEOUT 3000 // read timeout (ms)
#define TRANS_PACKET_LIMIT 1024 * 1024 * 512
diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c
index fd42c14101..4fb00b1a6d 100644
--- a/source/libs/transport/src/transCli.c
+++ b/source/libs/transport/src/transCli.c
@@ -25,7 +25,8 @@ typedef struct SCliConn {
uv_connect_t connReq;
uv_stream_t* stream;
queue wreqQueue;
- uv_timer_t* timer;
+
+ uv_timer_t* timer; // read timer, forbidden
void* hostThrd;
@@ -79,6 +80,7 @@ typedef struct SCliThrd {
uint64_t nextTimeout; // next timeout
void* pTransInst; //
+ void (*destroyAhandleFp)(void* ahandle);
SHashObj* fqdn2ipCache;
SCvtAddr cvtAddr;
@@ -102,6 +104,8 @@ static SCliConn* getConnFromPool(void* pool, char* ip, uint32_t port);
static void addConnToPool(void* pool, SCliConn* conn);
static void doCloseIdleConn(void* param);
+// register conn timer
+static void cliConnTimeout(uv_timer_t* handle);
// register timer for read
static void cliReadTimeoutCb(uv_timer_t* handle);
// register timer in each thread to clear expire conn
@@ -155,6 +159,7 @@ static void (*cliAsyncHandle[])(SCliMsg* pMsg, SCliThrd* pThrd) = {cliHandleReq,
static FORCE_INLINE void destroyUserdata(STransMsg* userdata);
static FORCE_INLINE void destroyCmsg(void* cmsg);
+static FORCE_INLINE void destroyCmsgAndAhandle(void* cmsg);
static FORCE_INLINE int cliRBChoseIdx(STrans* pTransInst);
static FORCE_INLINE void transDestroyConnCtx(STransConnCtx* ctx);
@@ -258,16 +263,15 @@ static void* cliWorkThread(void* arg);
static void cliReleaseUnfinishedMsg(SCliConn* conn) {
SCliThrd* pThrd = conn->hostThrd;
- STrans* pTransInst = pThrd->pTransInst;
for (int i = 0; i < transQueueSize(&conn->cliMsgs); i++) {
SCliMsg* msg = transQueueGet(&conn->cliMsgs, i);
if (msg != NULL && msg->ctx != NULL && msg->ctx->ahandle != (void*)0x9527) {
if (conn->ctx.freeFunc != NULL && msg->ctx->ahandle != NULL) {
conn->ctx.freeFunc(msg->ctx->ahandle);
- } else if (msg->ctx->ahandle != NULL && pTransInst->destroyFp != NULL) {
+ } else if (msg->ctx->ahandle != NULL && pThrd->destroyAhandleFp != NULL) {
tDebug("%s conn %p destroy unfinished ahandle %p", CONN_GET_INST_LABEL(conn), conn, msg->ctx->ahandle);
- pTransInst->destroyFp(msg->ctx->ahandle);
+ pThrd->destroyAhandleFp(msg->ctx->ahandle);
}
}
destroyCmsg(msg);
@@ -407,9 +411,16 @@ void cliHandleExceptImpl(SCliConn* pConn, int32_t code) {
bool once = false;
do {
SCliMsg* pMsg = transQueuePop(&pConn->cliMsgs);
+
if (pMsg == NULL && once) {
break;
}
+
+ if (pMsg != NULL && REQUEST_NO_RESP(&pMsg->msg)) {
+ destroyCmsg(pMsg);
+ break;
+ }
+
STransConnCtx* pCtx = pMsg ? pMsg->ctx : NULL;
STransMsg transMsg = {0};
@@ -439,6 +450,7 @@ void cliHandleExceptImpl(SCliConn* pConn, int32_t code) {
continue;
}
}
+
if (pMsg == NULL || (pMsg && pMsg->type != Release)) {
if (cliAppCb(pConn, &transMsg, pMsg) != 0) {
return;
@@ -454,6 +466,19 @@ void cliHandleExcept(SCliConn* conn) {
cliHandleExceptImpl(conn, -1);
}
+void cliConnTimeout(uv_timer_t* handle) {
+ SCliConn* conn = handle->data;
+ SCliThrd* pThrd = conn->hostThrd;
+
+ tTrace("%s conn %p conn timeout, ref:%d", CONN_GET_INST_LABEL(conn), conn, T_REF_VAL_GET(conn));
+
+ uv_timer_stop(handle);
+ handle->data = NULL;
+ taosArrayPush(pThrd->timerList, &conn->timer);
+
+ conn->timer = NULL;
+ cliHandleExceptImpl(conn, -1);
+}
void cliReadTimeoutCb(uv_timer_t* handle) {
// set up timeout cb
SCliConn* conn = handle->data;
@@ -545,7 +570,7 @@ static void addConnToPool(void* pool, SCliConn* conn) {
if (conn->list->size >= 50) {
STaskArg* arg = taosMemoryCalloc(1, sizeof(STaskArg));
arg->param1 = conn;
- arg->param2 = NULL;
+ arg->param2 = thrd;
STrans* pTransInst = thrd->pTransInst;
conn->task = transDQSched(thrd->timeoutQueue, doCloseIdleConn, arg, CONN_PERSIST_TIME(pTransInst->idleTime));
@@ -630,8 +655,16 @@ static SCliConn* cliCreateConn(SCliThrd* pThrd) {
uv_tcp_init(pThrd->loop, (uv_tcp_t*)(conn->stream));
conn->stream->data = conn;
- conn->connReq.data = conn;
+ uv_timer_t* timer = taosArrayGetSize(pThrd->timerList) > 0 ? *(uv_timer_t**)taosArrayPop(pThrd->timerList) : NULL;
+ if (timer == NULL) {
+ timer = taosMemoryCalloc(1, sizeof(uv_timer_t));
+ tDebug("no available timer, create a timer %p", timer);
+ uv_timer_init(pThrd->loop, timer);
+ }
+ timer->data = conn;
+ conn->timer = timer;
+ conn->connReq.data = conn;
transReqQueueInit(&conn->wreqQueue);
transQueueInit(&conn->cliMsgs, NULL);
@@ -661,8 +694,8 @@ static void cliDestroyConn(SCliConn* conn, bool clear) {
}
if (conn->timer != NULL) {
uv_timer_stop(conn->timer);
- taosArrayPush(pThrd->timerList, &conn->timer);
conn->timer->data = NULL;
+ taosArrayPush(pThrd->timerList, &conn->timer);
conn->timer = NULL;
}
@@ -811,6 +844,15 @@ _RETURN:
void cliConnCb(uv_connect_t* req, int status) {
// impl later
SCliConn* pConn = req->data;
+ SCliThrd* pThrd = pConn->hostThrd;
+
+ if (pConn->timer != NULL) {
+ uv_timer_stop(pConn->timer);
+ pConn->timer->data = NULL;
+ taosArrayPush(pThrd->timerList, &pConn->timer);
+ pConn->timer = NULL;
+ }
+
if (status != 0) {
tError("%s conn %p failed to connect server:%s", CONN_GET_INST_LABEL(pConn), pConn, uv_strerror(status));
cliHandleExcept(pConn);
@@ -989,31 +1031,26 @@ void cliHandleReq(SCliMsg* pMsg, SCliThrd* pThrd) {
conn->ip = strdup(EPSET_GET_INUSE_IP(&pCtx->epSet));
conn->port = EPSET_GET_INUSE_PORT(&pCtx->epSet);
- int ret = transSetConnOption((uv_tcp_t*)conn->stream);
- if (ret) {
- tError("%s conn %p failed to set conn option, errmsg %s", transLabel(pTransInst), conn, uv_err_name(ret));
- }
- int32_t fd = taosCreateSocketWithTimeout(TRANS_CONN_TIMEOUT);
- if (fd == -1) {
- tTrace("%s conn %p failed to create socket", transLabel(pTransInst), conn);
- cliHandleExcept(conn);
- return;
- }
- uv_tcp_open((uv_tcp_t*)conn->stream, fd);
-
struct sockaddr_in addr;
addr.sin_family = AF_INET;
-
addr.sin_addr.s_addr = cliGetIpFromFqdnCache(pThrd->fqdn2ipCache, conn->ip);
addr.sin_port = (uint16_t)htons((uint16_t)conn->port);
tTrace("%s conn %p try to connect to %s:%d", pTransInst->label, conn, conn->ip, conn->port);
- ret = uv_tcp_connect(&conn->connReq, (uv_tcp_t*)(conn->stream), (const struct sockaddr*)&addr, cliConnCb);
+
+ int ret = uv_tcp_connect(&conn->connReq, (uv_tcp_t*)(conn->stream), (const struct sockaddr*)&addr, cliConnCb);
if (ret != 0) {
tTrace("%s conn %p failed to connect to %s:%d, reason:%s", pTransInst->label, conn, conn->ip, conn->port,
uv_err_name(ret));
+
+ uv_timer_stop(conn->timer);
+ conn->timer->data = NULL;
+ taosArrayPush(pThrd->timerList, &conn->timer);
+ conn->timer = NULL;
+
cliHandleExcept(conn);
return;
}
+ uv_timer_start(conn->timer, cliConnTimeout, TRANS_CONN_TIMEOUT, 0);
}
STraceId* trace = &pMsg->msg.info.traceId;
tGTrace("%s conn %p ready", pTransInst->label, conn);
@@ -1136,6 +1173,8 @@ static void* cliWorkThread(void* arg) {
pThrd->pid = taosGetSelfPthreadId();
setThreadName("trans-cli-work");
uv_run(pThrd->loop, UV_RUN_DEFAULT);
+
+ tDebug("thread quit-thread:%08" PRId64, pThrd->pid);
return NULL;
}
@@ -1177,6 +1216,25 @@ static FORCE_INLINE void destroyCmsg(void* arg) {
taosMemoryFree(pMsg);
}
+static FORCE_INLINE void destroyCmsgAndAhandle(void* param) {
+ if (param == NULL) return;
+
+ STaskArg* arg = param;
+ SCliMsg* pMsg = arg->param1;
+ SCliThrd* pThrd = arg->param2;
+
+ tDebug("destroy Ahandle A");
+ if (pThrd != NULL && pThrd->destroyAhandleFp != NULL) {
+ tDebug("destroy Ahandle B");
+ pThrd->destroyAhandleFp(pMsg->ctx->ahandle);
+ }
+ tDebug("destroy Ahandle C");
+
+ transDestroyConnCtx(pMsg->ctx);
+ destroyUserdata(&pMsg->msg);
+ taosMemoryFree(pMsg);
+}
+
static SCliThrd* createThrdObj(void* trans) {
STrans* pTransInst = trans;
@@ -1195,7 +1253,7 @@ static SCliThrd* createThrdObj(void* trans) {
pThrd->prepare->data = pThrd;
// uv_prepare_start(pThrd->prepare, cliPrepareCb);
- int32_t timerSize = 512;
+ int32_t timerSize = 64;
pThrd->timerList = taosArrayInit(timerSize, sizeof(void*));
for (int i = 0; i < timerSize; i++) {
uv_timer_t* timer = taosMemoryCalloc(1, sizeof(uv_timer_t));
@@ -1211,6 +1269,7 @@ static SCliThrd* createThrdObj(void* trans) {
pThrd->nextTimeout = taosGetTimestampMs() + CONN_PERSIST_TIME(pTransInst->idleTime);
pThrd->pTransInst = trans;
+ pThrd->destroyAhandleFp = pTransInst->destroyFp;
pThrd->fqdn2ipCache = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
pThrd->quit = false;
return pThrd;
@@ -1226,9 +1285,10 @@ static void destroyThrdObj(SCliThrd* pThrd) {
TRANS_DESTROY_ASYNC_POOL_MSG(pThrd->asyncPool, SCliMsg, destroyCmsg);
transAsyncPoolDestroy(pThrd->asyncPool);
- transDQDestroy(pThrd->delayQueue, destroyCmsg);
+ transDQDestroy(pThrd->delayQueue, destroyCmsgAndAhandle);
transDQDestroy(pThrd->timeoutQueue, NULL);
+ tDebug("thread destroy %" PRId64, pThrd->pid);
for (int i = 0; i < taosArrayGetSize(pThrd->timerList); i++) {
uv_timer_t* timer = taosArrayGetP(pThrd->timerList, i);
taosMemoryFree(timer);
@@ -1254,7 +1314,18 @@ void cliSendQuit(SCliThrd* thrd) {
}
void cliWalkCb(uv_handle_t* handle, void* arg) {
if (!uv_is_closing(handle)) {
- uv_read_stop((uv_stream_t*)handle);
+ if (uv_handle_get_type(handle) == UV_TIMER) {
+ // SCliConn* pConn = handle->data;
+ // if (pConn != NULL && pConn->timer != NULL) {
+ // SCliThrd* pThrd = pConn->hostThrd;
+ // uv_timer_stop((uv_timer_t*)handle);
+ // handle->data = NULL;
+ // taosArrayPush(pThrd->timerList, &pConn->timer);
+ // pConn->timer = NULL;
+ // }
+ } else {
+ uv_read_stop((uv_stream_t*)handle);
+ }
uv_close(handle, cliDestroy);
}
}
diff --git a/source/libs/transport/src/transComm.c b/source/libs/transport/src/transComm.c
index 18b812f314..7710abcaa1 100644
--- a/source/libs/transport/src/transComm.c
+++ b/source/libs/transport/src/transComm.c
@@ -497,7 +497,7 @@ void transDQDestroy(SDelayQueue* queue, void (*freeFunc)(void* arg)) {
SDelayTask* task = container_of(minNode, SDelayTask, node);
STaskArg* arg = task->arg;
- if (freeFunc) freeFunc(arg->param1);
+ if (freeFunc) freeFunc(arg);
taosMemoryFree(arg);
taosMemoryFree(task);
diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c
index e5ca9faacb..5e5d6656b4 100644
--- a/source/os/src/osSysinfo.c
+++ b/source/os/src/osSysinfo.c
@@ -902,9 +902,11 @@ void taosSetCoreDump(bool enable) {
old_len = sizeof(old_usespid);
+#ifndef __loongarch64
if (syscall(SYS__sysctl, &args) == -1) {
// printf("_sysctl(kern_core_uses_pid) set fail: %s", strerror(errno));
}
+#endif
// printf("The old core_uses_pid[%" PRIu64 "]: %d", old_len, old_usespid);
@@ -918,9 +920,11 @@ void taosSetCoreDump(bool enable) {
old_len = sizeof(old_usespid);
+#ifndef __loongarch64
if (syscall(SYS__sysctl, &args) == -1) {
// printf("_sysctl(kern_core_uses_pid) get fail: %s", strerror(errno));
}
+#endif
// printf("The new core_uses_pid[%" PRIu64 "]: %d", old_len, old_usespid);
#endif
@@ -989,4 +993,4 @@ bool taosCheckCurrentInDll() {
#else
return false;
#endif
-}
\ No newline at end of file
+}
diff --git a/source/util/src/tcrc32c.c b/source/util/src/tcrc32c.c
index bd662fa02c..fc9db5a3ff 100644
--- a/source/util/src/tcrc32c.c
+++ b/source/util/src/tcrc32c.c
@@ -19,7 +19,7 @@
*/
#define _DEFAULT_SOURCE
-#if !defined(_TD_ARM_) && !defined(_TD_MIPS_)
+#if !defined(_TD_ARM_) && !defined(_TD_MIPS_) && !defined(_TD_LOONGARCH_)
#include
#endif
@@ -512,7 +512,7 @@ static uint32_t table[16][256] = {
0x9c221d09, 0x6e2e10f7, 0x7dd67004, 0x8fda7dfa}
};
-#if !defined(_TD_ARM_) && !defined(_TD_MIPS_)
+#if !defined(_TD_ARM_) && !defined(_TD_MIPS_) && !defined(_TD_LOONGARCH_)
static uint32_t long_shifts[4][256] = {
{0x00000000, 0xe040e0ac, 0xc56db7a9, 0x252d5705, 0x8f3719a3, 0x6f77f90f, 0x4a5aae0a, 0xaa1a4ea6, 0x1b8245b7,
0xfbc2a51b, 0xdeeff21e, 0x3eaf12b2, 0x94b55c14, 0x74f5bcb8, 0x51d8ebbd, 0xb1980b11, 0x37048b6e, 0xd7446bc2,
@@ -846,7 +846,7 @@ uint32_t crc32c_sf(uint32_t crci, crc_stream input, size_t length) {
}
return (uint32_t)crc ^ 0xffffffff;
}
-#if !defined(_TD_ARM_) && !defined(_TD_MIPS_)
+#if !defined(_TD_ARM_) && !defined(_TD_MIPS_) && !defined(_TD_LOONGARCH_)
/* Apply the zeros operator table to crc. */
static uint32_t shift_crc(uint32_t shift_table[][256], uint32_t crc) {
return shift_table[0][crc & 0xff] ^ shift_table[1][(crc >> 8) & 0xff] ^ shift_table[2][(crc >> 16) & 0xff] ^
@@ -857,7 +857,7 @@ static uint32_t shift_crc(uint32_t shift_table[][256], uint32_t crc) {
version. Otherwise, use the software version. */
uint32_t (*crc32c)(uint32_t crci, crc_stream bytes, size_t len) = crc32c_sf;
-#if !defined(_TD_ARM_) && !defined(_TD_MIPS_)
+#if !defined(_TD_ARM_) && !defined(_TD_MIPS_) && !defined(_TD_LOONGARCH_)
/* Compute CRC-32C using the Intel hardware instruction. */
uint32_t crc32c_hw(uint32_t crc, crc_stream buf, size_t len) {
crc_stream next = buf;
@@ -1012,7 +1012,7 @@ uint32_t crc32c_hw(uint32_t crc, crc_stream buf, size_t len) {
#endif // #ifndef _TD_ARM_
void taosResolveCRC() {
-#if defined _TD_ARM_ || defined _TD_MIPS_ || defined WINDOWS
+#if defined _TD_ARM_ || defined _TD_MIPS_ || defined WINDOWS || defined _TD_LOONGARCH_
crc32c = crc32c_sf;
#else
int32_t sse42;
diff --git a/source/util/src/terror.c b/source/util/src/terror.c
index 0e6568d692..b406432616 100644
--- a/source/util/src/terror.c
+++ b/source/util/src/terror.c
@@ -377,6 +377,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_QRY_JSON_IN_ERROR, "Json not support in i
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_JSON_NOT_SUPPORT_ERROR, "Json not support in this place")
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_JSON_IN_GROUP_ERROR, "Json not support in group/partition by")
TAOS_DEFINE_ERROR(TSDB_CODE_QRY_JOB_NOT_EXIST, "Job not exist")
+TAOS_DEFINE_ERROR(TSDB_CODE_QRY_QWORKER_QUIT, "Vnode/Qnode is quitting")
// grant
TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_EXPIRED, "License expired")
@@ -521,7 +522,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_TIMELINE_FUNC, "Invalid timeline fu
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_PASSWD, "Invalid password")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_ALTER_TABLE, "Invalid alter table statement")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_CANNOT_DROP_PRIMARY_KEY, "Primary timestamp column cannot be dropped")
-TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_MODIFY_COL, "Only binary/nchar column length could be modified")
+TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_MODIFY_COL, "Only binary/nchar column length could be modified, and the length can only be increased, not decreased")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_TBNAME, "Invalid tbname pseudo column")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_FUNCTION_NAME, "Invalid function name")
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_COMMENT_TOO_LONG, "Comment too long")
diff --git a/source/util/src/tlog.c b/source/util/src/tlog.c
index f7949048ca..a2ce5ac08c 100644
--- a/source/util/src/tlog.c
+++ b/source/util/src/tlog.c
@@ -435,7 +435,7 @@ static inline int32_t taosBuildLogHead(char *buffer, const char *flags) {
taosGetTimeOfDay(&timeSecs);
time_t curTime = timeSecs.tv_sec;
- ptm = taosLocalTimeNolock(&Tm, &curTime, taosGetDaylight());
+ ptm = taosLocalTime(&curTime, &Tm);
return sprintf(buffer, "%02d/%02d %02d:%02d:%02d.%06d %08" PRId64 " %s", ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour,
ptm->tm_min, ptm->tm_sec, (int32_t)timeSecs.tv_usec, taosGetSelfPthreadId(), flags);
diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/json/sml_telnet_tcp.json b/tests/develop-test/5-taos-tools/taosbenchmark/json/sml_telnet_tcp.json
index 29cd677038..9e1241397f 100644
--- a/tests/develop-test/5-taos-tools/taosbenchmark/json/sml_telnet_tcp.json
+++ b/tests/develop-test/5-taos-tools/taosbenchmark/json/sml_telnet_tcp.json
@@ -17,13 +17,7 @@
"databases": [{
"dbinfo": {
"name": "db",
- "drop": "yes",
- "replica": 1,
- "precision": "ms",
- "keep": 36500,
- "minRows": 100,
- "maxRows": 4096,
- "comp":2
+ "drop": "yes"
},
"super_tables": [{
"name": "stb1",
diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py b/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py
index 78cb49846e..23e788916f 100644
--- a/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py
+++ b/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py
@@ -16,36 +16,40 @@ from util.log import *
from util.cases import *
from util.sql import *
from util.dnodes import *
-from util.taosadapter import *
+
class TDTestCase:
def caseDescription(self):
- '''
+ """
[TD-11510] taosBenchmark test cases
- '''
- return
+ """
def init(self, conn, logSql, replicaVar=1):
- self.replicaVar = int(replicaVar)
tdLog.debug("start to execute %s" % __file__)
tdSql.init(conn.cursor(), logSql)
def getPath(self, tool="taosBenchmark"):
selfPath = os.path.dirname(os.path.realpath(__file__))
- if ("community" in selfPath):
- projPath = selfPath[:selfPath.find("community")]
+ if "community" in selfPath:
+ projPath = selfPath[: selfPath.find("community")]
+ elif "src" in selfPath:
+ projPath = selfPath[: selfPath.find("src")]
+ elif "/tools/" in selfPath:
+ projPath = selfPath[: selfPath.find("/tools/")]
+ elif "/tests/" in selfPath:
+ projPath = selfPath[: selfPath.find("/tests/")]
else:
- projPath = selfPath[:selfPath.find("tests")]
+ tdLog.exit("cannot found %s in path: %s, use system's" % (tool, selfPath))
paths = []
for root, dirs, files in os.walk(projPath):
- if ((tool) in files):
+ if (tool) in files:
rootRealPath = os.path.dirname(os.path.realpath(root))
- if ("packaging" not in rootRealPath):
+ if "packaging" not in rootRealPath:
paths.append(os.path.join(root, tool))
break
- if (len(paths) == 0):
+ if len(paths) == 0:
tdLog.exit("taosBenchmark not found!")
return
else:
@@ -53,38 +57,30 @@ class TDTestCase:
return paths[0]
def run(self):
- tAdapter.init("")
- adapter_cfg = {
- "influxdb": {
- "enable": True
- },
- "opentsdb": {
- "enable": True
- },
- "opentsdb_telnet": {
- "enable": True,
- "maxTCPConnection": 250,
- "tcpKeepAlive": True,
- "dbs": ["opentsdb_telnet", "collectd", "icinga2", "tcollector"],
- "ports": [6046, 6047, 6048, 6049],
- "user": "root",
- "password": "taosdata"
- }
- }
- tAdapter.update_cfg(adapter_cfg)
- tAdapter.deploy()
- tAdapter.start()
binPath = self.getPath()
- cmd = "%s -f ./5-taos-tools/taosbenchmark/json/sml_telnet_tcp.json" %binPath
+ cmd = "%s -f ./5-taos-tools/taosbenchmark/json/sml_telnet_tcp.json" % binPath
tdLog.info("%s" % cmd)
os.system("%s" % cmd)
time.sleep(5)
tdSql.execute("reset query cache")
- tdSql.query("select count(*) from (select distinct(tbname) from opentsdb_telnet.stb1)")
+ tdSql.query("select client_version()")
+ client_ver = "".join(tdSql.queryResult[0])
+ major_ver = client_ver.split(".")[0]
+ if major_ver == "3":
+ tdSql.query(
+ "select count(*) from (select distinct(tbname) from opentsdb_telnet.stb1)"
+ )
+ else:
+ tdSql.query("select count(tbname) from opentsdb_telnet.stb1")
tdSql.checkData(0, 0, 8)
tdSql.query("select count(*) from opentsdb_telnet.stb1")
tdSql.checkData(0, 0, 160)
- tdSql.query("select count(*) from (select distinct(tbname) from opentsdb_telnet.stb2)")
+ if major_ver == "3":
+ tdSql.query(
+ "select count(*) from (select distinct(tbname) from opentsdb_telnet.stb2)"
+ )
+ else:
+ tdSql.query("select count(tbname) from opentsdb_telnet.stb2")
tdSql.checkData(0, 0, 8)
tdSql.query("select count(*) from opentsdb_telnet.stb2")
tdSql.checkData(0, 0, 160)
diff --git a/tests/develop-test/test.py b/tests/develop-test/test.py
index 062e48b94b..1b0f0d0aed 100644
--- a/tests/develop-test/test.py
+++ b/tests/develop-test/test.py
@@ -238,7 +238,7 @@ if __name__ == "__main__":
time.sleep(2)
if restful:
- toBeKilled = "taosadapt"
+ toBeKilled = "taosadapter"
# killCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}' | xargs kill -TERM > /dev/null 2>&1" % toBeKilled
killCmd = f"pkill {toBeKilled}"
diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task
index 6775760ee4..5baa442231 100644
--- a/tests/parallel_test/cases.task
+++ b/tests/parallel_test/cases.task
@@ -6,42 +6,42 @@
,,y,unit-test,bash test.sh
#tsim test
-,,,script,./test.sh -f tsim/user/basic.sim
-,,,script,./test.sh -f tsim/user/password.sim
-,,,script,./test.sh -f tsim/user/privilege_db.sim
+,,y,script,./test.sh -f tsim/user/basic.sim
+,,y,script,./test.sh -f tsim/user/password.sim
+,,y,script,./test.sh -f tsim/user/privilege_db.sim
,,,script,./test.sh -f tsim/user/privilege_sysinfo.sim
,,,script,./test.sh -f tsim/db/alter_option.sim
,,,script,./test.sh -f tsim/db/alter_replica_13.sim
,,,script,./test.sh -f tsim/db/alter_replica_31.sim
-,,,script,./test.sh -f tsim/db/basic1.sim
-,,,script,./test.sh -f tsim/db/basic2.sim
-,,,script,./test.sh -f tsim/db/basic3.sim
-,,,script,./test.sh -f tsim/db/basic4.sim
-,,,script,./test.sh -f tsim/db/basic5.sim
-,,,script,./test.sh -f tsim/db/basic6.sim
-,,,script,./test.sh -f tsim/db/commit.sim
+,,y,script,./test.sh -f tsim/db/basic1.sim
+,,y,script,./test.sh -f tsim/db/basic2.sim
+,,y,script,./test.sh -f tsim/db/basic3.sim
+,,y,script,./test.sh -f tsim/db/basic4.sim
+,,y,script,./test.sh -f tsim/db/basic5.sim
+,,y,script,./test.sh -f tsim/db/basic6.sim
+,,y,script,./test.sh -f tsim/db/commit.sim
,,,script,./test.sh -f tsim/db/create_all_options.sim
-,,,script,./test.sh -f tsim/db/delete_reuse1.sim
-,,,script,./test.sh -f tsim/db/delete_reuse2.sim
+,,y,script,./test.sh -f tsim/db/delete_reuse1.sim
+,,y,script,./test.sh -f tsim/db/delete_reuse2.sim
,,,script,./test.sh -f tsim/db/delete_reusevnode.sim
-,,,script,./test.sh -f tsim/db/delete_reusevnode2.sim
+,,y,script,./test.sh -f tsim/db/delete_reusevnode2.sim
,,,script,./test.sh -f tsim/db/delete_writing1.sim
,,,script,./test.sh -f tsim/db/delete_writing2.sim
-,,,script,./test.sh -f tsim/db/error1.sim
-,,,script,./test.sh -f tsim/db/keep.sim
-,,,script,./test.sh -f tsim/db/len.sim
-,,,script,./test.sh -f tsim/db/repeat.sim
-,,,script,./test.sh -f tsim/db/show_create_db.sim
+,,y,script,./test.sh -f tsim/db/error1.sim
+,,y,script,./test.sh -f tsim/db/keep.sim
+,,y,script,./test.sh -f tsim/db/len.sim
+,,y,script,./test.sh -f tsim/db/repeat.sim
+,,y,script,./test.sh -f tsim/db/show_create_db.sim
,,,script,./test.sh -f tsim/db/show_create_table.sim
-,,,script,./test.sh -f tsim/db/tables.sim
-,,,script,./test.sh -f tsim/db/taosdlog.sim
+,,y,script,./test.sh -f tsim/db/tables.sim
+,,y,script,./test.sh -f tsim/db/taosdlog.sim
,,,script,./test.sh -f tsim/dnode/balance_replica1.sim
,,,script,./test.sh -f tsim/dnode/balance_replica3.sim
,,,script,./test.sh -f tsim/dnode/balance1.sim
,,,script,./test.sh -f tsim/dnode/balance2.sim
,,,script,./test.sh -f tsim/dnode/balance3.sim
,,,script,./test.sh -f tsim/dnode/balancex.sim
-,,,script,./test.sh -f tsim/dnode/create_dnode.sim
+,,y,script,./test.sh -f tsim/dnode/create_dnode.sim
,,,script,./test.sh -f tsim/dnode/drop_dnode_has_mnode.sim
,,,script,./test.sh -f tsim/dnode/drop_dnode_has_qnode_snode.sim
,,,script,./test.sh -f tsim/dnode/drop_dnode_has_vnode_replica1.sim
@@ -49,7 +49,7 @@
,,,script,./test.sh -f tsim/dnode/drop_dnode_has_multi_vnode_replica1.sim
,,,script,./test.sh -f tsim/dnode/drop_dnode_has_multi_vnode_replica3.sim
,,,script,./test.sh -f tsim/dnode/drop_dnode_force.sim
-,,,script,./test.sh -f tsim/dnode/offline_reason.sim
+,,y,script,./test.sh -f tsim/dnode/offline_reason.sim
,,,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica1.sim
,,,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v1_leader.sim
,,,script,./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v1_follower.sim
@@ -59,119 +59,119 @@
,,,script,./test.sh -f tsim/dnode/use_dropped_dnode.sim
,,,script,./test.sh -f tsim/dnode/split_vgroup_replica1.sim
,,,script,./test.sh -f tsim/dnode/split_vgroup_replica3.sim
-,,,script,./test.sh -f tsim/import/basic.sim
-,,,script,./test.sh -f tsim/import/commit.sim
-,,,script,./test.sh -f tsim/import/large.sim
-,,,script,./test.sh -f tsim/import/replica1.sim
-,,,script,./test.sh -f tsim/insert/backquote.sim
-,,,script,./test.sh -f tsim/insert/basic.sim
-,,,script,./test.sh -f tsim/insert/basic0.sim
-,,,script,./test.sh -f tsim/insert/basic1.sim
-,,,script,./test.sh -f tsim/insert/basic2.sim
+,,y,script,./test.sh -f tsim/import/basic.sim
+,,y,script,./test.sh -f tsim/import/commit.sim
+,,y,script,./test.sh -f tsim/import/large.sim
+,,y,script,./test.sh -f tsim/import/replica1.sim
+,,y,script,./test.sh -f tsim/insert/backquote.sim
+,,y,script,./test.sh -f tsim/insert/basic.sim
+,,y,script,./test.sh -f tsim/insert/basic0.sim
+,,y,script,./test.sh -f tsim/insert/basic1.sim
+,,y,script,./test.sh -f tsim/insert/basic2.sim
,,,script,./test.sh -f tsim/insert/commit-merge0.sim
-,,,script,./test.sh -f tsim/insert/insert_drop.sim
-,,,script,./test.sh -f tsim/insert/insert_select.sim
-,,,script,./test.sh -f tsim/insert/null.sim
-,,,script,./test.sh -f tsim/insert/query_block1_file.sim
-,,,script,./test.sh -f tsim/insert/query_block1_memory.sim
-,,,script,./test.sh -f tsim/insert/query_block2_file.sim
-,,,script,./test.sh -f tsim/insert/query_block2_memory.sim
-,,,script,./test.sh -f tsim/insert/query_file_memory.sim
-,,,script,./test.sh -f tsim/insert/query_multi_file.sim
-,,,script,./test.sh -f tsim/insert/tcp.sim
-,,,script,./test.sh -f tsim/insert/update0.sim
+,,y,script,./test.sh -f tsim/insert/insert_drop.sim
+,,y,script,./test.sh -f tsim/insert/insert_select.sim
+,,y,script,./test.sh -f tsim/insert/null.sim
+,,y,script,./test.sh -f tsim/insert/query_block1_file.sim
+,,y,script,./test.sh -f tsim/insert/query_block1_memory.sim
+,,y,script,./test.sh -f tsim/insert/query_block2_file.sim
+,,y,script,./test.sh -f tsim/insert/query_block2_memory.sim
+,,y,script,./test.sh -f tsim/insert/query_file_memory.sim
+,,y,script,./test.sh -f tsim/insert/query_multi_file.sim
+,,y,script,./test.sh -f tsim/insert/tcp.sim
+,,y,script,./test.sh -f tsim/insert/update0.sim
,,,script,./test.sh -f tsim/insert/update1_sort_merge.sim
,,,script,./test.sh -f tsim/parser/alter__for_community_version.sim
-,,,script,./test.sh -f tsim/parser/alter_column.sim
-,,,script,./test.sh -f tsim/parser/alter_stable.sim
-,,,script,./test.sh -f tsim/parser/alter.sim
-,,,script,./test.sh -f tsim/parser/alter1.sim
-,,,script,./test.sh -f tsim/parser/auto_create_tb_drop_tb.sim
-,,,script,./test.sh -f tsim/parser/auto_create_tb.sim
-,,,script,./test.sh -f tsim/parser/between_and.sim
-,,,script,./test.sh -f tsim/parser/binary_escapeCharacter.sim
+,,y,script,./test.sh -f tsim/parser/alter_column.sim
+,,y,script,./test.sh -f tsim/parser/alter_stable.sim
+,,y,script,./test.sh -f tsim/parser/alter.sim
+,,y,script,./test.sh -f tsim/parser/alter1.sim
+,,y,script,./test.sh -f tsim/parser/auto_create_tb_drop_tb.sim
+,,y,script,./test.sh -f tsim/parser/auto_create_tb.sim
+,,y,script,./test.sh -f tsim/parser/between_and.sim
+,,y,script,./test.sh -f tsim/parser/binary_escapeCharacter.sim
,,,script,./test.sh -f tsim/parser/col_arithmetic_operation.sim
-,,,script,./test.sh -f tsim/parser/columnValue_bigint.sim
+,,y,script,./test.sh -f tsim/parser/columnValue_bigint.sim
,,,script,./test.sh -f tsim/parser/columnValue_bool.sim
-,,,script,./test.sh -f tsim/parser/columnValue_double.sim
-,,,script,./test.sh -f tsim/parser/columnValue_float.sim
-,,,script,./test.sh -f tsim/parser/columnValue_int.sim
-,,,script,./test.sh -f tsim/parser/columnValue_smallint.sim
-,,,script,./test.sh -f tsim/parser/columnValue_tinyint.sim
+,,y,script,./test.sh -f tsim/parser/columnValue_double.sim
+,,y,script,./test.sh -f tsim/parser/columnValue_float.sim
+,,y,script,./test.sh -f tsim/parser/columnValue_int.sim
+,,y,script,./test.sh -f tsim/parser/columnValue_smallint.sim
+,,y,script,./test.sh -f tsim/parser/columnValue_tinyint.sim
,,,script,./test.sh -f tsim/parser/columnValue_unsign.sim
,,,script,./test.sh -f tsim/parser/commit.sim
,,,script,./test.sh -f tsim/parser/condition.sim
-,,,script,./test.sh -f tsim/parser/constCol.sim
+,,y,script,./test.sh -f tsim/parser/constCol.sim
,,,script,./test.sh -f tsim/parser/create_db.sim
,,,script,./test.sh -f tsim/parser/create_mt.sim
-,,,script,./test.sh -f tsim/parser/create_tb_with_tag_name.sim
-,,,script,./test.sh -f tsim/parser/create_tb.sim
+,,y,script,./test.sh -f tsim/parser/create_tb_with_tag_name.sim
+,,y,script,./test.sh -f tsim/parser/create_tb.sim
,,,script,./test.sh -f tsim/parser/dbtbnameValidate.sim
-,,,script,./test.sh -f tsim/parser/distinct.sim
-,,,script,./test.sh -f tsim/parser/fill_us.sim
+,,y,script,./test.sh -f tsim/parser/distinct.sim
+,,y,script,./test.sh -f tsim/parser/fill_us.sim
,,,script,./test.sh -f tsim/parser/fill.sim
-,,,script,./test.sh -f tsim/parser/first_last.sim
-,,,script,./test.sh -f tsim/parser/fourArithmetic-basic.sim
+,,y,script,./test.sh -f tsim/parser/first_last.sim
+,,y,script,./test.sh -f tsim/parser/fourArithmetic-basic.sim
,,,script,./test.sh -f tsim/parser/function.sim
-,,,script,./test.sh -f tsim/parser/groupby-basic.sim
+,,y,script,./test.sh -f tsim/parser/groupby-basic.sim
,,,script,./test.sh -f tsim/parser/groupby.sim
,,,script,./test.sh -f tsim/parser/having_child.sim
,,,script,./test.sh -f tsim/parser/having.sim
-,,,script,./test.sh -f tsim/parser/import_commit1.sim
-,,,script,./test.sh -f tsim/parser/import_commit2.sim
-,,,script,./test.sh -f tsim/parser/import_commit3.sim
+,,y,script,./test.sh -f tsim/parser/import_commit1.sim
+,,y,script,./test.sh -f tsim/parser/import_commit2.sim
+,,y,script,./test.sh -f tsim/parser/import_commit3.sim
,,,script,./test.sh -f tsim/parser/import_file.sim
-,,,script,./test.sh -f tsim/parser/import.sim
+,,y,script,./test.sh -f tsim/parser/import.sim
,,,script,./test.sh -f tsim/parser/insert_multiTbl.sim
-,,,script,./test.sh -f tsim/parser/insert_tb.sim
+,,y,script,./test.sh -f tsim/parser/insert_tb.sim
,,,script,./test.sh -f tsim/parser/join_manyblocks.sim
-,,,script,./test.sh -f tsim/parser/join_multitables.sim
-,,,script,./test.sh -f tsim/parser/join_multivnode.sim
-,,,script,./test.sh -f tsim/parser/join.sim
-,,,script,./test.sh -f tsim/parser/last_cache.sim
-,,,script,./test.sh -f tsim/parser/last_groupby.sim
-,,,script,./test.sh -f tsim/parser/lastrow.sim
+,,y,script,./test.sh -f tsim/parser/join_multitables.sim
+,,y,script,./test.sh -f tsim/parser/join_multivnode.sim
+,,y,script,./test.sh -f tsim/parser/join.sim
+,,y,script,./test.sh -f tsim/parser/last_cache.sim
+,,y,script,./test.sh -f tsim/parser/last_groupby.sim
+,,y,script,./test.sh -f tsim/parser/lastrow.sim
,,,script,./test.sh -f tsim/parser/lastrow2.sim
-,,,script,./test.sh -f tsim/parser/like.sim
+,,y,script,./test.sh -f tsim/parser/like.sim
,,,script,./test.sh -f tsim/parser/limit.sim
,,,script,./test.sh -f tsim/parser/limit1.sim
-,,,script,./test.sh -f tsim/parser/mixed_blocks.sim
+,,y,script,./test.sh -f tsim/parser/mixed_blocks.sim
,,,script,./test.sh -f tsim/parser/nchar.sim
,,,script,./test.sh -f tsim/parser/nestquery.sim
,,,script,./test.sh -f tsim/parser/null_char.sim
-,,,script,./test.sh -f tsim/parser/precision_ns.sim
+,,y,script,./test.sh -f tsim/parser/precision_ns.sim
,,,script,./test.sh -f tsim/parser/projection_limit_offset.sim
-,,,script,./test.sh -f tsim/parser/regex.sim
-,,,script,./test.sh -f tsim/parser/select_across_vnodes.sim
-,,,script,./test.sh -f tsim/parser/select_distinct_tag.sim
-,,,script,./test.sh -f tsim/parser/select_from_cache_disk.sim
-,,,script,./test.sh -f tsim/parser/select_with_tags.sim
+,,y,script,./test.sh -f tsim/parser/regex.sim
+,,y,script,./test.sh -f tsim/parser/select_across_vnodes.sim
+,,y,script,./test.sh -f tsim/parser/select_distinct_tag.sim
+,,y,script,./test.sh -f tsim/parser/select_from_cache_disk.sim
+,,y,script,./test.sh -f tsim/parser/select_with_tags.sim
,,,script,./test.sh -f tsim/parser/selectResNum.sim
,,,script,./test.sh -f tsim/parser/set_tag_vals.sim
-,,,script,./test.sh -f tsim/parser/single_row_in_tb.sim
+,,y,script,./test.sh -f tsim/parser/single_row_in_tb.sim
,,,script,./test.sh -f tsim/parser/sliding.sim
-,,,script,./test.sh -f tsim/parser/slimit_alter_tags.sim
-,,,script,./test.sh -f tsim/parser/slimit.sim
-,,,script,./test.sh -f tsim/parser/slimit1.sim
-,,,script,./test.sh -f tsim/parser/stableOp.sim
-,,,script,./test.sh -f tsim/parser/tags_dynamically_specifiy.sim
+,,y,script,./test.sh -f tsim/parser/slimit_alter_tags.sim
+,,y,script,./test.sh -f tsim/parser/slimit.sim
+,,y,script,./test.sh -f tsim/parser/slimit1.sim
+,,y,script,./test.sh -f tsim/parser/stableOp.sim
+,,y,script,./test.sh -f tsim/parser/tags_dynamically_specifiy.sim
,,,script,./test.sh -f tsim/parser/tags_filter.sim
,,,script,./test.sh -f tsim/parser/tbnameIn.sim
-,,,script,./test.sh -f tsim/parser/timestamp.sim
-,,,script,./test.sh -f tsim/parser/top_groupby.sim
-,,,script,./test.sh -f tsim/parser/topbot.sim
+,,y,script,./test.sh -f tsim/parser/timestamp.sim
+,,y,script,./test.sh -f tsim/parser/top_groupby.sim
+,,y,script,./test.sh -f tsim/parser/topbot.sim
,,,script,./test.sh -f tsim/parser/union.sim
-,,,script,./test.sh -f tsim/parser/union_sysinfo.sim
+,,y,script,./test.sh -f tsim/parser/union_sysinfo.sim
,,,script,./test.sh -f tsim/parser/where.sim
-,,,script,./test.sh -f tsim/query/charScalarFunction.sim
-,,,script,./test.sh -f tsim/query/explain.sim
-,,,script,./test.sh -f tsim/query/interval-offset.sim
-,,,script,./test.sh -f tsim/query/interval.sim
-,,,script,./test.sh -f tsim/query/scalarFunction.sim
-,,,script,./test.sh -f tsim/query/scalarNull.sim
+,,y,script,./test.sh -f tsim/query/charScalarFunction.sim
+,,y,script,./test.sh -f tsim/query/explain.sim
+,,y,script,./test.sh -f tsim/query/interval-offset.sim
+,,y,script,./test.sh -f tsim/query/interval.sim
+,,y,script,./test.sh -f tsim/query/scalarFunction.sim
+,,y,script,./test.sh -f tsim/query/scalarNull.sim
,,,script,./test.sh -f tsim/query/session.sim
,,,script,./test.sh -f tsim/query/udf.sim
-,,,script,./test.sh -f tsim/qnode/basic1.sim
+,,y,script,./test.sh -f tsim/qnode/basic1.sim
,,,script,./test.sh -f tsim/snode/basic1.sim
,,,script,./test.sh -f tsim/mnode/basic1.sim
,,,script,./test.sh -f tsim/mnode/basic2.sim
@@ -179,41 +179,41 @@
,,,script,./test.sh -f tsim/mnode/basic4.sim
,,,script,./test.sh -f tsim/mnode/basic5.sim
,,,script,./test.sh -f tsim/show/basic.sim
-,,,script,./test.sh -f tsim/table/autocreate.sim
-,,,script,./test.sh -f tsim/table/basic1.sim
+,,y,script,./test.sh -f tsim/table/autocreate.sim
+,,y,script,./test.sh -f tsim/table/basic1.sim
,,,script,./test.sh -f tsim/table/basic2.sim
-,,,script,./test.sh -f tsim/table/basic3.sim
-,,,script,./test.sh -f tsim/table/bigint.sim
-,,,script,./test.sh -f tsim/table/binary.sim
-,,,script,./test.sh -f tsim/table/bool.sim
+,,y,script,./test.sh -f tsim/table/basic3.sim
+,,y,script,./test.sh -f tsim/table/bigint.sim
+,,y,script,./test.sh -f tsim/table/binary.sim
+,,y,script,./test.sh -f tsim/table/bool.sim
,,,script,./test.sh -f tsim/table/column_name.sim
-,,,script,./test.sh -f tsim/table/column_num.sim
-,,,script,./test.sh -f tsim/table/column_value.sim
-,,,script,./test.sh -f tsim/table/column2.sim
-,,,script,./test.sh -f tsim/table/createmulti.sim
-,,,script,./test.sh -f tsim/table/date.sim
-,,,script,./test.sh -f tsim/table/db.table.sim
+,,y,script,./test.sh -f tsim/table/column_num.sim
+,,y,script,./test.sh -f tsim/table/column_value.sim
+,,y,script,./test.sh -f tsim/table/column2.sim
+,,y,script,./test.sh -f tsim/table/createmulti.sim
+,,y,script,./test.sh -f tsim/table/date.sim
+,,y,script,./test.sh -f tsim/table/db.table.sim
,,,script,./test.sh -f tsim/table/delete_reuse1.sim
,,,script,./test.sh -f tsim/table/delete_reuse2.sim
,,,script,./test.sh -f tsim/table/delete_writing.sim
-,,,script,./test.sh -f tsim/table/describe.sim
-,,,script,./test.sh -f tsim/table/double.sim
-,,,script,./test.sh -f tsim/table/float.sim
-,,,script,./test.sh -f tsim/table/hash.sim
-,,,script,./test.sh -f tsim/table/int.sim
-,,,script,./test.sh -f tsim/table/limit.sim
-,,,script,./test.sh -f tsim/table/smallint.sim
+,,y,script,./test.sh -f tsim/table/describe.sim
+,,y,script,./test.sh -f tsim/table/double.sim
+,,y,script,./test.sh -f tsim/table/float.sim
+,,y,script,./test.sh -f tsim/table/hash.sim
+,,y,script,./test.sh -f tsim/table/int.sim
+,,y,script,./test.sh -f tsim/table/limit.sim
+,,y,script,./test.sh -f tsim/table/smallint.sim
,,,script,./test.sh -f tsim/table/table_len.sim
-,,,script,./test.sh -f tsim/table/table.sim
-,,,script,./test.sh -f tsim/table/tinyint.sim
-,,,script,./test.sh -f tsim/table/vgroup.sim
+,,y,script,./test.sh -f tsim/table/table.sim
+,,y,script,./test.sh -f tsim/table/tinyint.sim
+,,y,script,./test.sh -f tsim/table/vgroup.sim
,,,script,./test.sh -f tsim/stream/basic0.sim -g
-,,,script,./test.sh -f tsim/stream/basic2.sim
+,,y,script,./test.sh -f tsim/stream/basic2.sim
,,,script,./test.sh -f tsim/stream/drop_stream.sim
-,,,script,./test.sh -f tsim/stream/fillHistoryBasic1.sim
-,,,script,./test.sh -f tsim/stream/fillHistoryBasic2.sim
+,,y,script,./test.sh -f tsim/stream/fillHistoryBasic1.sim
+,,y,script,./test.sh -f tsim/stream/fillHistoryBasic2.sim
,,,script,./test.sh -f tsim/stream/fillHistoryBasic3.sim
-,,,script,./test.sh -f tsim/stream/distributeInterval0.sim
+,,y,script,./test.sh -f tsim/stream/distributeInterval0.sim
,,,script,./test.sh -f tsim/stream/distributeIntervalRetrive0.sim
,,,script,./test.sh -f tsim/stream/distributeSession0.sim
,,,script,./test.sh -f tsim/stream/session0.sim
@@ -223,24 +223,24 @@
,,,script,./test.sh -f tsim/stream/triggerSession0.sim
,,,script,./test.sh -f tsim/stream/partitionby.sim
,,,script,./test.sh -f tsim/stream/partitionby1.sim
-,,,script,./test.sh -f tsim/stream/schedSnode.sim
+,,y,script,./test.sh -f tsim/stream/schedSnode.sim
,,,script,./test.sh -f tsim/stream/windowClose.sim
,,,script,./test.sh -f tsim/stream/ignoreExpiredData.sim
-,,,script,./test.sh -f tsim/stream/sliding.sim
+,,y,script,./test.sh -f tsim/stream/sliding.sim
,,,script,./test.sh -f tsim/stream/partitionbyColumnInterval.sim
,,,script,./test.sh -f tsim/stream/partitionbyColumnSession.sim
,,,script,./test.sh -f tsim/stream/partitionbyColumnState.sim
,,,script,./test.sh -f tsim/stream/deleteInterval.sim
,,,script,./test.sh -f tsim/stream/deleteSession.sim
,,,script,./test.sh -f tsim/stream/deleteState.sim
-,,,script,./test.sh -f tsim/stream/fillIntervalDelete0.sim
+,,y,script,./test.sh -f tsim/stream/fillIntervalDelete0.sim
,,,script,./test.sh -f tsim/stream/fillIntervalDelete1.sim
-,,,script,./test.sh -f tsim/stream/fillIntervalLinear.sim
-,,,script,./test.sh -f tsim/stream/fillIntervalPartitionBy.sim
-,,,script,./test.sh -f tsim/stream/fillIntervalPrevNext.sim
-,,,script,./test.sh -f tsim/stream/fillIntervalValue.sim
-,,,script,./test.sh -f tsim/trans/lossdata1.sim
-,,,script,./test.sh -f tsim/trans/create_db.sim
+,,y,script,./test.sh -f tsim/stream/fillIntervalLinear.sim
+,,y,script,./test.sh -f tsim/stream/fillIntervalPartitionBy.sim
+,,y,script,./test.sh -f tsim/stream/fillIntervalPrevNext.sim
+,,y,script,./test.sh -f tsim/stream/fillIntervalValue.sim
+,,y,script,./test.sh -f tsim/trans/lossdata1.sim
+,,y,script,./test.sh -f tsim/trans/create_db.sim
,,,script,./test.sh -f tsim/tmq/basic1.sim
,,,script,./test.sh -f tsim/tmq/basic2.sim
,,,script,./test.sh -f tsim/tmq/basic3.sim
@@ -253,30 +253,30 @@
,,,script,./test.sh -f tsim/tmq/topic.sim
,,,script,./test.sh -f tsim/tmq/snapshot.sim
,,,script,./test.sh -f tsim/tmq/snapshot1.sim
-,,,script,./test.sh -f tsim/stable/alter_comment.sim
-,,,script,./test.sh -f tsim/stable/alter_count.sim
-,,,script,./test.sh -f tsim/stable/alter_import.sim
-,,,script,./test.sh -f tsim/stable/alter_insert1.sim
-,,,script,./test.sh -f tsim/stable/alter_insert2.sim
-,,,script,./test.sh -f tsim/stable/alter_metrics.sim
-,,,script,./test.sh -f tsim/stable/column_add.sim
-,,,script,./test.sh -f tsim/stable/column_drop.sim
-,,,script,./test.sh -f tsim/stable/column_modify.sim
-,,,script,./test.sh -f tsim/stable/disk.sim
-,,,script,./test.sh -f tsim/stable/dnode3.sim
-,,,script,./test.sh -f tsim/stable/metrics.sim
-,,,script,./test.sh -f tsim/stable/refcount.sim
-,,,script,./test.sh -f tsim/stable/tag_add.sim
-,,,script,./test.sh -f tsim/stable/tag_drop.sim
-,,,script,./test.sh -f tsim/stable/tag_filter.sim
-,,,script,./test.sh -f tsim/stable/tag_modify.sim
-,,,script,./test.sh -f tsim/stable/tag_rename.sim
+,,y,script,./test.sh -f tsim/stable/alter_comment.sim
+,,y,script,./test.sh -f tsim/stable/alter_count.sim
+,,y,script,./test.sh -f tsim/stable/alter_import.sim
+,,y,script,./test.sh -f tsim/stable/alter_insert1.sim
+,,y,script,./test.sh -f tsim/stable/alter_insert2.sim
+,,y,script,./test.sh -f tsim/stable/alter_metrics.sim
+,,y,script,./test.sh -f tsim/stable/column_add.sim
+,,y,script,./test.sh -f tsim/stable/column_drop.sim
+,,y,script,./test.sh -f tsim/stable/column_modify.sim
+,,y,script,./test.sh -f tsim/stable/disk.sim
+,,y,script,./test.sh -f tsim/stable/dnode3.sim
+,,y,script,./test.sh -f tsim/stable/metrics.sim
+,,y,script,./test.sh -f tsim/stable/refcount.sim
+,,y,script,./test.sh -f tsim/stable/tag_add.sim
+,,y,script,./test.sh -f tsim/stable/tag_drop.sim
+,,y,script,./test.sh -f tsim/stable/tag_filter.sim
+,,y,script,./test.sh -f tsim/stable/tag_modify.sim
+,,y,script,./test.sh -f tsim/stable/tag_rename.sim
,,,script,./test.sh -f tsim/stable/values.sim
-,,,script,./test.sh -f tsim/stable/vnode3.sim
-,,,script,./test.sh -f tsim/stable/metrics_idx.sim
+,,y,script,./test.sh -f tsim/stable/vnode3.sim
+,,y,script,./test.sh -f tsim/stable/metrics_idx.sim
,,,script,./test.sh -f tsim/sma/drop_sma.sim
,,,script,./test.sh -f tsim/sma/tsmaCreateInsertQuery.sim
-,,,script,./test.sh -f tsim/sma/rsmaCreateInsertQuery.sim
+,,y,script,./test.sh -f tsim/sma/rsmaCreateInsertQuery.sim
,,,script,./test.sh -f tsim/sma/rsmaPersistenceRecovery.sim
,,,script,./test.sh -f tsim/valgrind/checkError1.sim
,,,script,./test.sh -f tsim/valgrind/checkError2.sim
@@ -293,105 +293,105 @@
,,,script,./test.sh -f tsim/vnode/replica3_many.sim
,,,script,./test.sh -f tsim/vnode/replica3_import.sim
,,,script,./test.sh -f tsim/vnode/stable_balance_replica1.sim
-,,,script,./test.sh -f tsim/vnode/stable_dnode2_stop.sim
-,,,script,./test.sh -f tsim/vnode/stable_dnode2.sim
-,,,script,./test.sh -f tsim/vnode/stable_dnode3.sim
+,,y,script,./test.sh -f tsim/vnode/stable_dnode2_stop.sim
+,,y,script,./test.sh -f tsim/vnode/stable_dnode2.sim
+,,y,script,./test.sh -f tsim/vnode/stable_dnode3.sim
,,,script,./test.sh -f tsim/vnode/stable_replica3_dnode6.sim
,,,script,./test.sh -f tsim/vnode/stable_replica3_vnode3.sim
,,,script,./test.sh -f tsim/sync/3Replica1VgElect.sim
,,,script,./test.sh -f tsim/sync/3Replica5VgElect.sim
,,,script,./test.sh -f tsim/sync/oneReplica1VgElect.sim
,,,script,./test.sh -f tsim/sync/oneReplica5VgElect.sim
-,,,script,./test.sh -f tsim/catalog/alterInCurrent.sim
-,,,script,./test.sh -f tsim/scalar/in.sim
-,,,script,./test.sh -f tsim/scalar/scalar.sim
-,,,script,./test.sh -f tsim/scalar/filter.sim
+,,y,script,./test.sh -f tsim/catalog/alterInCurrent.sim
+,,y,script,./test.sh -f tsim/scalar/in.sim
+,,y,script,./test.sh -f tsim/scalar/scalar.sim
+,,y,script,./test.sh -f tsim/scalar/filter.sim
,,,script,./test.sh -f tsim/scalar/caseWhen.sim
-,,,script,./test.sh -f tsim/alter/cached_schema_after_alter.sim
-,,,script,./test.sh -f tsim/alter/dnode.sim
-,,,script,./test.sh -f tsim/alter/table.sim
-,,,script,./test.sh -f tsim/cache/new_metrics.sim
-,,,script,./test.sh -f tsim/cache/restart_table.sim
-,,,script,./test.sh -f tsim/cache/restart_metrics.sim
-,,,script,./test.sh -f tsim/column/commit.sim
-,,,script,./test.sh -f tsim/column/metrics.sim
-,,,script,./test.sh -f tsim/column/table.sim
-,,,script,./test.sh -f tsim/compress/commitlog.sim
-,,,script,./test.sh -f tsim/compress/compress2.sim
-,,,script,./test.sh -f tsim/compress/compress.sim
-,,,script,./test.sh -f tsim/compress/uncompress.sim
-,,,script,./test.sh -f tsim/compute/avg.sim
-,,,script,./test.sh -f tsim/compute/block_dist.sim
-,,,script,./test.sh -f tsim/compute/bottom.sim
-,,,script,./test.sh -f tsim/compute/count.sim
-,,,script,./test.sh -f tsim/compute/diff.sim
+,,y,script,./test.sh -f tsim/alter/cached_schema_after_alter.sim
+,,y,script,./test.sh -f tsim/alter/dnode.sim
+,,y,script,./test.sh -f tsim/alter/table.sim
+,,y,script,./test.sh -f tsim/cache/new_metrics.sim
+,,y,script,./test.sh -f tsim/cache/restart_table.sim
+,,y,script,./test.sh -f tsim/cache/restart_metrics.sim
+,,y,script,./test.sh -f tsim/column/commit.sim
+,,y,script,./test.sh -f tsim/column/metrics.sim
+,,y,script,./test.sh -f tsim/column/table.sim
+,,y,script,./test.sh -f tsim/compress/commitlog.sim
+,,y,script,./test.sh -f tsim/compress/compress2.sim
+,,y,script,./test.sh -f tsim/compress/compress.sim
+,,y,script,./test.sh -f tsim/compress/uncompress.sim
+,,y,script,./test.sh -f tsim/compute/avg.sim
+,,y,script,./test.sh -f tsim/compute/block_dist.sim
+,,y,script,./test.sh -f tsim/compute/bottom.sim
+,,y,script,./test.sh -f tsim/compute/count.sim
+,,y,script,./test.sh -f tsim/compute/diff.sim
,,,script,./test.sh -f tsim/compute/diff2.sim
-,,,script,./test.sh -f tsim/compute/first.sim
-,,,script,./test.sh -f tsim/compute/interval.sim
-,,,script,./test.sh -f tsim/compute/last_row.sim
-,,,script,./test.sh -f tsim/compute/last.sim
-,,,script,./test.sh -f tsim/compute/leastsquare.sim
-,,,script,./test.sh -f tsim/compute/max.sim
-,,,script,./test.sh -f tsim/compute/min.sim
-,,,script,./test.sh -f tsim/compute/null.sim
-,,,script,./test.sh -f tsim/compute/percentile.sim
-,,,script,./test.sh -f tsim/compute/stddev.sim
-,,,script,./test.sh -f tsim/compute/sum.sim
-,,,script,./test.sh -f tsim/compute/top.sim
-,,,script,./test.sh -f tsim/field/2.sim
-,,,script,./test.sh -f tsim/field/3.sim
-,,,script,./test.sh -f tsim/field/4.sim
-,,,script,./test.sh -f tsim/field/5.sim
-,,,script,./test.sh -f tsim/field/6.sim
-,,,script,./test.sh -f tsim/field/binary.sim
-,,,script,./test.sh -f tsim/field/bigint.sim
-,,,script,./test.sh -f tsim/field/bool.sim
-,,,script,./test.sh -f tsim/field/double.sim
-,,,script,./test.sh -f tsim/field/float.sim
-,,,script,./test.sh -f tsim/field/int.sim
-,,,script,./test.sh -f tsim/field/single.sim
-,,,script,./test.sh -f tsim/field/smallint.sim
-,,,script,./test.sh -f tsim/field/tinyint.sim
-,,,script,./test.sh -f tsim/field/unsigined_bigint.sim
-,,,script,./test.sh -f tsim/vector/metrics_field.sim
-,,,script,./test.sh -f tsim/vector/metrics_mix.sim
-,,,script,./test.sh -f tsim/vector/metrics_query.sim
-,,,script,./test.sh -f tsim/vector/metrics_tag.sim
-,,,script,./test.sh -f tsim/vector/metrics_time.sim
+,,y,script,./test.sh -f tsim/compute/first.sim
+,,y,script,./test.sh -f tsim/compute/interval.sim
+,,y,script,./test.sh -f tsim/compute/last_row.sim
+,,y,script,./test.sh -f tsim/compute/last.sim
+,,y,script,./test.sh -f tsim/compute/leastsquare.sim
+,,y,script,./test.sh -f tsim/compute/max.sim
+,,y,script,./test.sh -f tsim/compute/min.sim
+,,y,script,./test.sh -f tsim/compute/null.sim
+,,y,script,./test.sh -f tsim/compute/percentile.sim
+,,y,script,./test.sh -f tsim/compute/stddev.sim
+,,y,script,./test.sh -f tsim/compute/sum.sim
+,,y,script,./test.sh -f tsim/compute/top.sim
+,,y,script,./test.sh -f tsim/field/2.sim
+,,y,script,./test.sh -f tsim/field/3.sim
+,,y,script,./test.sh -f tsim/field/4.sim
+,,y,script,./test.sh -f tsim/field/5.sim
+,,y,script,./test.sh -f tsim/field/6.sim
+,,y,script,./test.sh -f tsim/field/binary.sim
+,,y,script,./test.sh -f tsim/field/bigint.sim
+,,y,script,./test.sh -f tsim/field/bool.sim
+,,y,script,./test.sh -f tsim/field/double.sim
+,,y,script,./test.sh -f tsim/field/float.sim
+,,y,script,./test.sh -f tsim/field/int.sim
+,,y,script,./test.sh -f tsim/field/single.sim
+,,y,script,./test.sh -f tsim/field/smallint.sim
+,,y,script,./test.sh -f tsim/field/tinyint.sim
+,,y,script,./test.sh -f tsim/field/unsigined_bigint.sim
+,,y,script,./test.sh -f tsim/vector/metrics_field.sim
+,,y,script,./test.sh -f tsim/vector/metrics_mix.sim
+,,y,script,./test.sh -f tsim/vector/metrics_query.sim
+,,y,script,./test.sh -f tsim/vector/metrics_tag.sim
+,,y,script,./test.sh -f tsim/vector/metrics_time.sim
,,,script,./test.sh -f tsim/vector/multi.sim
-,,,script,./test.sh -f tsim/vector/single.sim
-,,,script,./test.sh -f tsim/vector/table_field.sim
-,,,script,./test.sh -f tsim/vector/table_mix.sim
-,,,script,./test.sh -f tsim/vector/table_query.sim
-,,,script,./test.sh -f tsim/vector/table_time.sim
-,,,script,./test.sh -f tsim/wal/kill.sim
-,,,script,./test.sh -f tsim/tag/3.sim
-,,,script,./test.sh -f tsim/tag/4.sim
-,,,script,./test.sh -f tsim/tag/5.sim
-,,,script,./test.sh -f tsim/tag/6.sim
-,,,script,./test.sh -f tsim/tag/add.sim
-,,,script,./test.sh -f tsim/tag/bigint.sim
-,,,script,./test.sh -f tsim/tag/binary_binary.sim
-,,,script,./test.sh -f tsim/tag/binary.sim
-,,,script,./test.sh -f tsim/tag/bool_binary.sim
-,,,script,./test.sh -f tsim/tag/bool_int.sim
-,,,script,./test.sh -f tsim/tag/bool.sim
-,,,script,./test.sh -f tsim/tag/change.sim
-,,,script,./test.sh -f tsim/tag/column.sim
-,,,script,./test.sh -f tsim/tag/commit.sim
-,,,script,./test.sh -f tsim/tag/create.sim
+,,y,script,./test.sh -f tsim/vector/single.sim
+,,y,script,./test.sh -f tsim/vector/table_field.sim
+,,y,script,./test.sh -f tsim/vector/table_mix.sim
+,,y,script,./test.sh -f tsim/vector/table_query.sim
+,,y,script,./test.sh -f tsim/vector/table_time.sim
+,,y,script,./test.sh -f tsim/wal/kill.sim
+,,y,script,./test.sh -f tsim/tag/3.sim
+,,y,script,./test.sh -f tsim/tag/4.sim
+,,y,script,./test.sh -f tsim/tag/5.sim
+,,y,script,./test.sh -f tsim/tag/6.sim
+,,y,script,./test.sh -f tsim/tag/add.sim
+,,y,script,./test.sh -f tsim/tag/bigint.sim
+,,y,script,./test.sh -f tsim/tag/binary_binary.sim
+,,y,script,./test.sh -f tsim/tag/binary.sim
+,,y,script,./test.sh -f tsim/tag/bool_binary.sim
+,,y,script,./test.sh -f tsim/tag/bool_int.sim
+,,y,script,./test.sh -f tsim/tag/bool.sim
+,,y,script,./test.sh -f tsim/tag/change.sim
+,,y,script,./test.sh -f tsim/tag/column.sim
+,,y,script,./test.sh -f tsim/tag/commit.sim
+,,y,script,./test.sh -f tsim/tag/create.sim
,,,script,./test.sh -f tsim/tag/delete.sim
-,,,script,./test.sh -f tsim/tag/double.sim
-,,,script,./test.sh -f tsim/tag/filter.sim
-,,,script,./test.sh -f tsim/tag/float.sim
-,,,script,./test.sh -f tsim/tag/int_binary.sim
-,,,script,./test.sh -f tsim/tag/int_float.sim
-,,,script,./test.sh -f tsim/tag/int.sim
-,,,script,./test.sh -f tsim/tag/set.sim
-,,,script,./test.sh -f tsim/tag/smallint.sim
-,,,script,./test.sh -f tsim/tag/tinyint.sim
-,,,script,./test.sh -f tsim/tag/drop_tag.sim
-,,,script,./test.sh -f tsim/tag/tbNameIn.sim
+,,y,script,./test.sh -f tsim/tag/double.sim
+,,y,script,./test.sh -f tsim/tag/filter.sim
+,,y,script,./test.sh -f tsim/tag/float.sim
+,,y,script,./test.sh -f tsim/tag/int_binary.sim
+,,y,script,./test.sh -f tsim/tag/int_float.sim
+,,y,script,./test.sh -f tsim/tag/int.sim
+,,y,script,./test.sh -f tsim/tag/set.sim
+,,y,script,./test.sh -f tsim/tag/smallint.sim
+,,y,script,./test.sh -f tsim/tag/tinyint.sim
+,,y,script,./test.sh -f tsim/tag/drop_tag.sim
+,,y,script,./test.sh -f tsim/tag/tbNameIn.sim
,,,script,./test.sh -f tmp/monitor.sim
#system test
@@ -714,6 +714,7 @@
,,,system-test,python3 ./test.py -f 7-tmq/tmq_taosx.py
,,,system-test,python3 ./test.py -f 7-tmq/stbTagFilter-multiCtb.py
,,,system-test,python3 ./test.py -f 99-TDcase/TD-19201.py
+,,,system-test,python3 ./test.py -f 7-tmq/tmqSubscribeStb-r3.py -N 5
,,,system-test,python3 ./test.py -f 2-query/between.py -Q 2
,,,system-test,python3 ./test.py -f 2-query/distinct.py -Q 2
,,,system-test,python3 ./test.py -f 2-query/varchar.py -Q 2
@@ -1005,6 +1006,7 @@
,,,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/sample_csv_json.py
,,,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/sml_json_alltypes.py
,,,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/taosdemoTestQueryWithJson.py -R
+,,,develop-test,python3 ./test.py -f 5-taos-tools/taosbenchmark/telnet_tcp.py -R
#docs-examples test
,,,docs-examples-test,bash python.sh
diff --git a/tests/parallel_test/container_build.sh b/tests/parallel_test/container_build.sh
index 7c18f5cab5..5059630a3f 100755
--- a/tests/parallel_test/container_build.sh
+++ b/tests/parallel_test/container_build.sh
@@ -1,4 +1,5 @@
#!/bin/bash
+set -e
function usage() {
echo "$0"
@@ -69,7 +70,7 @@ mv ${REP_REAL_PATH}/debug ${WORKDIR}/debugNoSan
date
docker run \
-v $REP_MOUNT_PARAM \
- --rm --ulimit core=-1 taos_test:v1.0 sh -c "cd $REP_DIR;rm -rf debug;mkdir -p debug;cd debug;cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true -DBUILD_TEST=true -DWEBSOCKET=true -DSANITIZER=true;make -j $THREAD_COUNT || exit 1 "
+ --rm --ulimit core=-1 taos_test:v1.0 sh -c "cd $REP_DIR;rm -rf debug;mkdir -p debug;cd debug;cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true -DBUILD_TEST=true -DWEBSOCKET=true -DBUILD_SANITIZER=1 -DTOOLS_SANITIZE=true -DTOOLS_BUILD_TYPE=Debug;make -j $THREAD_COUNT || exit 1 "
mv ${REP_REAL_PATH}/debug ${WORKDIR}/debugSan
diff --git a/tests/pytest/util/taosadapter.py b/tests/pytest/util/taosadapter.py
index 0307675dfb..440c23dc65 100644
--- a/tests/pytest/util/taosadapter.py
+++ b/tests/pytest/util/taosadapter.py
@@ -13,7 +13,7 @@ class TAdapter:
"debug" : True,
"taosConfigDir" : "",
"port" : 6041,
- "logLevel" : "debug",
+ "logLevel" : "error",
"cors" : {
"allowAllOrigins" : True,
},
@@ -49,25 +49,25 @@ class TAdapter:
"writeInterval" : "30s"
},
"opentsdb" : {
- "enable" : False
+ "enable" : True
},
"influxdb" : {
- "enable" : False
+ "enable" : True
},
"statsd" : {
- "enable" : False
+ "enable" : True
},
"collectd" : {
- "enable" : False
+ "enable" : True
},
"opentsdb_telnet" : {
- "enable" : False
+ "enable" : True
},
"node_exporter" : {
- "enable" : False
+ "enable" : True
},
"prometheus" : {
- "enable" : False
+ "enable" : True
},
}
# TODO: add taosadapter env:
@@ -164,7 +164,7 @@ class TAdapter:
if platform.system().lower() == 'windows':
cmd = f"mintty -h never {bin_path} -c {self.cfg_dir}"
else:
- cmd = f"nohup {bin_path} -c {self.cfg_path} > /dev/null 2>&1 & "
+ cmd = f"nohup {bin_path} -c {self.cfg_path} > /dev/null & "
if self.remoteIP:
self.remote_exec(self.taosadapter_cfg_dict, f"tAdapter.deployed=1\ntAdapter.log_dir={self.log_dir}\ntAdapter.cfg_dir={self.cfg_dir}\ntAdapter.start()")
@@ -213,7 +213,7 @@ class TAdapter:
if platform.system().lower() == 'windows':
cmd = f"mintty -h never {bin_path} -c {self.cfg_dir}"
else:
- cmd = f"nohup {bin_path} -c {self.cfg_path} > /dev/null 2>&1 & "
+ cmd = f"nohup {bin_path} -c {self.cfg_path} > /dev/null & "
if self.remoteIP:
self.remote_exec(self.taosadapter_cfg_dict, f"tAdapter.deployed=1\ntAdapter.log_dir={self.log_dir}\ntAdapter.cfg_dir={self.cfg_dir}\ntAdapter.start()")
@@ -243,7 +243,7 @@ class TAdapter:
psCmd, shell=True)
while(processID):
- killCmd = f"pkill {signal} {processID} > /dev/null 2>&1"
+ killCmd = f"pkill {signal} {processID} > /dev/null "
os.system(killCmd)
time.sleep(1)
processID = subprocess.check_output(
@@ -256,9 +256,9 @@ class TAdapter:
# fuserCmd = f"fuser -k -n tcp {port} > /dev/null"
# os.system(fuserCmd)
- self.running = 0
- tdLog.debug(f"taosadapter is stopped by kill {signal}")
+ self.running = 0
+ tdLog.debug(f"taosadapter is stopped by kill {signal}")
-tAdapter = TAdapter()
\ No newline at end of file
+tAdapter = TAdapter()
diff --git a/tests/script/sh/checkAsan.sh b/tests/script/sh/checkAsan.sh
index d4801891ed..4d1b0a3d6b 100755
--- a/tests/script/sh/checkAsan.sh
+++ b/tests/script/sh/checkAsan.sh
@@ -17,10 +17,10 @@ fi
TAOS_DIR=`pwd`
LOG_DIR=$TAOS_DIR/sim/tsim/asan
-error_num=`cat ${LOG_DIR}/tsim.asan | grep "ERROR" | wc -l`
-memory_leak=`cat ${LOG_DIR}/tsim.asan | grep "Direct leak" | wc -l`
-indirect_leak=`cat ${LOG_DIR}/tsim.asan | grep "Indirect leak" | wc -l`
-runtime_error=`cat ${LOG_DIR}/tsim.asan | grep "runtime error" | wc -l`
+error_num=`cat ${LOG_DIR}/*.asan | grep "ERROR" | wc -l`
+memory_leak=`cat ${LOG_DIR}/*.asan | grep "Direct leak" | wc -l`
+indirect_leak=`cat ${LOG_DIR}/*.asan | grep "Indirect leak" | wc -l`
+runtime_error=`cat ${LOG_DIR}/*.asan | grep "runtime error" | wc -l`
echo -e "\033[44;32;1m"asan error_num: $error_num"\033[0m"
echo -e "\033[44;32;1m"asan memory_leak: $memory_leak"\033[0m"
@@ -34,6 +34,6 @@ if [ $errors -eq 0 ]; then
exit 0
else
echo -e "\033[44;31;1m"asan total errors: $errors"\033[0m"
- cat ${LOG_DIR}/tsim.asan
+ cat ${LOG_DIR}/*.asan
exit 1
fi
\ No newline at end of file
diff --git a/tests/script/tsim/stream/drop_stream.sim b/tests/script/tsim/stream/drop_stream.sim
index b25e002140..817780ca59 100644
--- a/tests/script/tsim/stream/drop_stream.sim
+++ b/tests/script/tsim/stream/drop_stream.sim
@@ -216,6 +216,60 @@ sql insert into scalar_tb values (1656668180503+1s, -50, 50.1, "beiJing", "TDeng
print ========== step6 repeat
sql drop database test;
+
+print ========== interval\session\state window
+
+sql CREATE DATABASE test1 BUFFER 96 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 14400m WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 KEEP 5256000m,5256000m,5256000m PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 STRICT 'off' WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0;
+sql use test1;
+sql CREATE STABLE st (time TIMESTAMP, ca DOUBLE, cb DOUBLE, cc int) TAGS (ta VARCHAR(10) );
+
+print ========== create table before stream
+
+sql CREATE TABLE t1 using st TAGS ('aaa');
+sql CREATE TABLE t2 using st TAGS ('bbb');
+sql CREATE TABLE t3 using st TAGS ('ccc');
+sql CREATE TABLE t4 using st TAGS ('ddd');
+
+print ========== stable
+
+sql create stream streamd1 into streamt1 as select ca, _wstart,_wend, count(*) as total from st where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ca interval(60m) fill(null);
+sql create stream streamd2 into streamt2 as select ca, _wstart,_wend, count(*), max(ca), max(cb) from st where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ca interval(60m) fill(linear);
+sql create stream streamd3 into streamt3 as select ca, _wstart,_wend, count(*) as total from st where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ca session(time, 60m);
+sql create stream streamd4 into streamt4 as select ta, _wstart,_wend, count(*) as total from st where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ta session(time, 60m);
+sql_error create stream streamd5 into streamt5 as select ca, _wstart,_wend, count(*) as total from st where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ca state_window(cc);
+sql_error create stream streamd6 into streamt6 as select ta, _wstart,_wend, count(*) as total from st where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ta state_window(cc);
+
+print ========== table
+
+sql create stream streamd7 into streamt7 as select ca, _wstart,_wend, count(*) as total from t1 where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ca interval(60m) fill(null);
+sql create stream streamd8 into streamt8 as select ca, _wstart,_wend, count(*), max(ca), max(cb) from t1 where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ca interval(60m) fill(linear);
+sql create stream streamd9 into streamt9 as select ca, _wstart,_wend, count(*) as total from t1 where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ca session(time, 60m);
+sql create stream streamd10 into streamt10 as select ta, _wstart,_wend, count(*) as total from t1 where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ta session(time, 60m);
+sql create stream streamd11 into streamt11 as select ca, _wstart,_wend, count(*) as total from t1 where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ca state_window(cc);
+sql create stream streamd12 into streamt12 as select ta, _wstart,_wend, count(*) as total from t1 where time > "2022-01-01 00:00:00" and time < "2032-01-01 00:00:00" partition by ta state_window(cc);
+
+print ========== create table after stream
+sql CREATE TABLE t5 using st TAGS ('eee');
+sql CREATE TABLE t6 using st TAGS ('fff');
+sql CREATE TABLE t7 using st TAGS ('ggg');
+sql CREATE TABLE t8 using st TAGS ('fff');
+
+sleep 1000
+print ========== drop stream
+sql drop stream if exists streamd1;
+sql drop stream if exists streamd2;
+sql drop stream if exists streamd3;
+sql drop stream if exists streamd4;
+#sql drop stream if exists streamd5;
+#sql drop stream if exists streamd6;
+sql drop stream if exists streamd7;
+sql drop stream if exists streamd8;
+sql drop stream if exists streamd9;
+sql drop stream if exists streamd10;
+sql drop stream if exists streamd11;
+sql drop stream if exists streamd12;
+print ========== step7
+
system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode2 -s stop -x SIGINT
system sh/exec.sh -n dnode3 -s stop -x SIGINT
diff --git a/tests/script/tsim/stream/state0.sim b/tests/script/tsim/stream/state0.sim
index dc7d9bc407..87d7d4b7fc 100644
--- a/tests/script/tsim/stream/state0.sim
+++ b/tests/script/tsim/stream/state0.sim
@@ -544,4 +544,192 @@ if $rows != 10 then
endi
+sql drop stream if exists streams4;
+sql drop database if exists test4;
+sql drop stable if exists streamt4;
+sql create database if not exists test4 vgroups 10 precision "ms" ;
+sql use test4;
+sql create table st (ts timestamp, c1 tinyint, c2 smallint) tags (t1 tinyint) ;
+sql create table t1 using st tags (-81) ;
+sql create table t2 using st tags (-81) ;
+sql create stream if not exists streams4 trigger window_close into streamt4 as select _wstart AS start, min(c1),count(c1) from t1 state_window(c1);
+
+sql insert into t1 (ts, c1) values (1668073288209, 11);
+sql insert into t1 (ts, c1) values (1668073288210, 11);
+sql insert into t1 (ts, c1) values (1668073288211, 11);
+sql insert into t1 (ts, c1) values (1668073288212, 11);
+sql insert into t1 (ts, c1) values (1668073288213, 11);
+sql insert into t1 (ts, c1) values (1668073288214, 11);
+sql insert into t1 (ts, c1) values (1668073288215, 29);
+
+$loop_count = 0
+loop7:
+
+sleep 200
+
+sql select * from streamt4 order by start;
+
+$loop_count = $loop_count + 1
+if $loop_count == 20 then
+ return -1
+endi
+
+if $rows != 1 then
+ print =====rows=$rows
+ goto loop7
+endi
+
+if $data01 != 11 then
+ print =====data01=$data01
+ goto loop7
+endi
+
+if $data02 != 6 then
+ print =====data02=$data02
+ goto loop7
+endi
+
+sql delete from t1 where ts = cast(1668073288214 as timestamp);
+sql insert into t1 (ts, c1) values (1668073288216, 29);
+sql delete from t1 where ts = cast(1668073288215 as timestamp);
+sql insert into t1 (ts, c1) values (1668073288217, 29);
+sql delete from t1 where ts = cast(1668073288216 as timestamp);
+sql insert into t1 (ts, c1) values (1668073288218, 29);
+sql delete from t1 where ts = cast(1668073288217 as timestamp);
+sql insert into t1 (ts, c1) values (1668073288219, 29);
+sql delete from t1 where ts = cast(1668073288218 as timestamp);
+sql insert into t1 (ts, c1) values (1668073288220, 29);
+sql delete from t1 where ts = cast(1668073288219 as timestamp);
+
+$loop_count = 0
+loop8:
+
+sleep 200
+
+sql select * from streamt4 order by start;
+
+$loop_count = $loop_count + 1
+if $loop_count == 20 then
+ return -1
+endi
+
+if $rows != 1 then
+ print =====rows=$rows
+ goto loop8
+endi
+
+if $data01 != 11 then
+ print =====data01=$data01
+ goto loop8
+endi
+
+if $data02 != 5 then
+ print =====data02=$data02
+ goto loop8
+endi
+
+sql insert into t1 (ts, c1) values (1668073288221, 65);
+sql insert into t1 (ts, c1) values (1668073288222, 65);
+sql insert into t1 (ts, c1) values (1668073288223, 65);
+sql insert into t1 (ts, c1) values (1668073288224, 65);
+sql insert into t1 (ts, c1) values (1668073288225, 65);
+sql insert into t1 (ts, c1) values (1668073288226, 65);
+
+$loop_count = 0
+loop8:
+
+sleep 200
+
+sql select * from streamt4 order by start;
+
+$loop_count = $loop_count + 1
+if $loop_count == 20 then
+ return -1
+endi
+
+if $rows != 2 then
+ print =====rows=$rows
+ goto loop8
+endi
+
+if $data01 != 11 then
+ print =====data01=$data01
+ goto loop8
+endi
+
+if $data02 != 5 then
+ print =====data02=$data02
+ goto loop8
+endi
+
+if $data11 != 29 then
+ print =====data11=$data11
+ goto loop8
+endi
+
+if $data12 != 1 then
+ print =====data12=$data12
+ goto loop8
+endi
+
+sql insert into t1 (ts, c1) values (1668073288224, 64);
+
+$loop_count = 0
+loop9:
+
+sleep 200
+
+sql select * from streamt4 order by start;
+
+$loop_count = $loop_count + 1
+if $loop_count == 20 then
+ return -1
+endi
+
+if $rows != 4 then
+ print =====rows=$rows
+ goto loop9
+endi
+
+if $data01 != 11 then
+ print =====data01=$data01
+ goto loop9
+endi
+
+if $data02 != 5 then
+ print =====data02=$data02
+ goto loop9
+endi
+
+if $data11 != 29 then
+ print =====data11=$data11
+ goto loop9
+endi
+
+if $data12 != 1 then
+ print =====data12=$data12
+ goto loop9
+endi
+
+if $data21 != 65 then
+ print =====data21=$data21
+ goto loop9
+endi
+
+if $data22 != 3 then
+ print =====data22=$data22
+ goto loop9
+endi
+
+if $data31 != 64 then
+ print =====data31=$data31
+ goto loop9
+endi
+
+if $data32 != 1 then
+ print =====data32=$data32
+ goto loop9
+endi
+
+
system sh/exec.sh -n dnode1 -s stop -x SIGINT
diff --git a/tests/system-test/7-tmq/tmqShow.py b/tests/system-test/7-tmq/tmqShow.py
index 406fd9f7f3..5e79f17459 100644
--- a/tests/system-test/7-tmq/tmqShow.py
+++ b/tests/system-test/7-tmq/tmqShow.py
@@ -137,7 +137,7 @@ class TDTestCase:
tdLog.info("check show subscriptions")
tdSql.query("show subscriptions")
- # tdLog.debug(tdSql.queryResult)
+ tdLog.debug(tdSql.queryResult)
rows = tdSql.getRows()
expectSubscriptions = paraDict['vgroups'] * len(topicNameList)
tdLog.info("show subscriptions rows: %d, expect Subscriptions: %d"%(rows,expectSubscriptions))
diff --git a/tests/system-test/7-tmq/tmqSubscribeStb-r3.py b/tests/system-test/7-tmq/tmqSubscribeStb-r3.py
index 01f1ca5b15..85222a941b 100644
--- a/tests/system-test/7-tmq/tmqSubscribeStb-r3.py
+++ b/tests/system-test/7-tmq/tmqSubscribeStb-r3.py
@@ -1,26 +1,27 @@
-from distutils.log import error
-import taos
-import sys
-import time
-import socket
import os
-import threading
-import subprocess
import platform
+import socket
+import subprocess
+import sys
+import threading
+import time
+from distutils.log import error
-from util.log import *
-from util.sql import *
+import taos
from util.cases import *
-from util.dnodes import *
-from util.dnodes import TDDnodes
-from util.dnodes import TDDnode
from util.cluster import *
from util.common import *
+from util.dnodes import *
+from util.dnodes import TDDnode, TDDnodes
+from util.log import *
+from util.sql import *
+
sys.path.append("./6-cluster")
sys.path.append("./7-tmq")
-from tmqCommon import *
-from clusterCommonCreate import *
from clusterCommonCheck import clusterComCheck
+from clusterCommonCreate import *
+from tmqCommon import *
+
class TDTestCase:
def __init__(self):
@@ -265,6 +266,7 @@ class TDTestCase:
tdLog.info("start consume processor")
tmqCom.startTmqSimProcess(pollDelay=paraDict['pollDelay'],dbName=paraDict["dbName"],showMsg=paraDict['showMsg'], showRow=paraDict['showRow'],snapshot=paraDict['snapshot'])
+ tmqCom.getStartConsumeNotifyFromTmqsim()
tdLog.info("================= restart dnode 2===========================")
cluster.dnodes[1].stoptaosd()
cluster.dnodes[1].starttaosd()
diff --git a/tests/system-test/test.py b/tests/system-test/test.py
index e171baa656..d942147c03 100644
--- a/tests/system-test/test.py
+++ b/tests/system-test/test.py
@@ -215,7 +215,7 @@ if __name__ == "__main__":
time.sleep(2)
if restful:
- toBeKilled = "taosadapt"
+ toBeKilled = "taosadapter"
# killCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}' | xargs kill -TERM > /dev/null 2>&1" % toBeKilled
killCmd = f"pkill {toBeKilled}"
diff --git a/tools/shell/src/shellEngine.c b/tools/shell/src/shellEngine.c
index 9bb02159f0..8402a5a589 100644
--- a/tools/shell/src/shellEngine.c
+++ b/tools/shell/src/shellEngine.c
@@ -540,11 +540,20 @@ void shellPrintField(const char *val, TAOS_FIELD *field, int32_t width, int32_t
}
}
-bool shellIsLimitQuery(const char *sql) {
- // todo refactor
+// show whole result for this query return true, like limit or describe
+bool shellIsShowWhole(const char *sql) {
+ // limit
if (taosStrCaseStr(sql, " limit ") != NULL) {
return true;
}
+ // describe
+ if (taosStrCaseStr(sql, "describe ") != NULL) {
+ return true;
+ }
+ // show
+ if (taosStrCaseStr(sql, "show ") != NULL) {
+ return true;
+ }
return false;
}
@@ -578,7 +587,7 @@ int32_t shellVerticalPrintResult(TAOS_RES *tres, const char *sql) {
uint64_t resShowMaxNum = UINT64_MAX;
- if (shell.args.commands == NULL && shell.args.file[0] == 0 && !shellIsLimitQuery(sql)) {
+ if (shell.args.commands == NULL && shell.args.file[0] == 0 && !shellIsShowWhole(sql)) {
resShowMaxNum = SHELL_DEFAULT_RES_SHOW_NUM;
}
@@ -723,7 +732,7 @@ int32_t shellHorizontalPrintResult(TAOS_RES *tres, const char *sql) {
uint64_t resShowMaxNum = UINT64_MAX;
- if (shell.args.commands == NULL && shell.args.file[0] == 0 && !shellIsLimitQuery(sql)) {
+ if (shell.args.commands == NULL && shell.args.file[0] == 0 && !shellIsShowWhole(sql)) {
resShowMaxNum = SHELL_DEFAULT_RES_SHOW_NUM;
}
diff --git a/utils/test/c/sml_test.c b/utils/test/c/sml_test.c
index 83dfa1fc57..40d5bb12d2 100644
--- a/utils/test/c/sml_test.c
+++ b/utils/test/c/sml_test.c
@@ -1097,18 +1097,12 @@ int sml_time_Test() {
pRes = taos_query(taos, "use sml_db");
taos_free_result(pRes);
- char* tmp = (char*)taosMemoryCalloc(1024, 1);
- memcpy(tmp, sql[0], strlen(sql[0]));
- *(char*)(tmp+44) = 0;
- int32_t totalRows = 0;
- pRes = taos_schemaless_insert_raw(taos, tmp, strlen(sql[0]), &totalRows, TSDB_SML_LINE_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS);
+ pRes = taos_schemaless_insert(taos, (char **)sql, sizeof(sql) / sizeof(sql[0]), TSDB_SML_LINE_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS);
- ASSERT(totalRows == 3);
printf("%s result:%s\n", __FUNCTION__, taos_errstr(pRes));
int code = taos_errno(pRes);
taos_free_result(pRes);
taos_close(taos);
- taosMemoryFree(tmp);
return code;
}