Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
980cf46b
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
980cf46b
编写于
6月 21, 2022
作者:
P
plum-lihui
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' into test3.0/lihui
上级
dc0afb22
f880d006
变更
55
隐藏空白更改
内联
并排
Showing
55 changed file
with
1372 addition
and
687 deletion
+1372
-687
include/libs/nodes/querynodes.h
include/libs/nodes/querynodes.h
+1
-1
include/libs/sync/sync.h
include/libs/sync/sync.h
+1
-1
source/client/src/clientSml.c
source/client/src/clientSml.c
+5
-3
source/client/test/smlTest.cpp
source/client/test/smlTest.cpp
+4
-4
source/common/src/tmsg.c
source/common/src/tmsg.c
+2
-2
source/common/src/tname.c
source/common/src/tname.c
+11
-4
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
+7
-5
source/dnode/mgmt/mgmt_mnode/src/mmWorker.c
source/dnode/mgmt/mgmt_mnode/src/mmWorker.c
+14
-12
source/dnode/mgmt/node_mgmt/src/dmTransport.c
source/dnode/mgmt/node_mgmt/src/dmTransport.c
+84
-79
source/dnode/mgmt/node_util/inc/dmUtil.h
source/dnode/mgmt/node_util/inc/dmUtil.h
+17
-9
source/dnode/mgmt/test/sut/src/sut.cpp
source/dnode/mgmt/test/sut/src/sut.cpp
+1
-0
source/dnode/mnode/impl/inc/mndInt.h
source/dnode/mnode/impl/inc/mndInt.h
+14
-7
source/dnode/mnode/impl/src/mndMain.c
source/dnode/mnode/impl/src/mndMain.c
+44
-34
source/dnode/mnode/impl/src/mndProfile.c
source/dnode/mnode/impl/src/mndProfile.c
+49
-50
source/dnode/vnode/src/inc/vnd.h
source/dnode/vnode/src/inc/vnd.h
+15
-7
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+5
-7
source/libs/executor/src/timewindowoperator.c
source/libs/executor/src/timewindowoperator.c
+7
-3
source/libs/function/src/builtinsimpl.c
source/libs/function/src/builtinsimpl.c
+21
-20
source/libs/nodes/src/nodesCloneFuncs.c
source/libs/nodes/src/nodesCloneFuncs.c
+10
-0
source/libs/parser/src/parInsert.c
source/libs/parser/src/parInsert.c
+5
-16
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+6
-2
source/libs/planner/src/planOptimizer.c
source/libs/planner/src/planOptimizer.c
+38
-5
source/libs/planner/src/planSpliter.c
source/libs/planner/src/planSpliter.c
+51
-2
source/libs/planner/test/planOtherTest.cpp
source/libs/planner/test/planOtherTest.cpp
+3
-1
source/libs/sync/inc/syncInt.h
source/libs/sync/inc/syncInt.h
+1
-0
source/libs/sync/src/syncAppendEntries.c
source/libs/sync/src/syncAppendEntries.c
+33
-10
source/libs/sync/src/syncAppendEntriesReply.c
source/libs/sync/src/syncAppendEntriesReply.c
+1
-1
source/libs/sync/src/syncCommit.c
source/libs/sync/src/syncCommit.c
+1
-1
source/libs/sync/src/syncElection.c
source/libs/sync/src/syncElection.c
+5
-5
source/libs/sync/src/syncEnv.c
source/libs/sync/src/syncEnv.c
+4
-4
source/libs/sync/src/syncIO.c
source/libs/sync/src/syncIO.c
+24
-24
source/libs/sync/src/syncIndexMgr.c
source/libs/sync/src/syncIndexMgr.c
+4
-4
source/libs/sync/src/syncMain.c
source/libs/sync/src/syncMain.c
+166
-70
source/libs/sync/src/syncMessage.c
source/libs/sync/src/syncMessage.c
+85
-85
source/libs/sync/src/syncRaftCfg.c
source/libs/sync/src/syncRaftCfg.c
+24
-24
source/libs/sync/src/syncRaftEntry.c
source/libs/sync/src/syncRaftEntry.c
+8
-8
source/libs/sync/src/syncRaftLog.c
source/libs/sync/src/syncRaftLog.c
+61
-13
source/libs/sync/src/syncRaftStore.c
source/libs/sync/src/syncRaftStore.c
+19
-19
source/libs/sync/src/syncReplication.c
source/libs/sync/src/syncReplication.c
+19
-12
source/libs/sync/src/syncRequestVote.c
source/libs/sync/src/syncRequestVote.c
+1
-1
source/libs/sync/src/syncRequestVoteReply.c
source/libs/sync/src/syncRequestVoteReply.c
+3
-3
source/libs/sync/src/syncRespMgr.c
source/libs/sync/src/syncRespMgr.c
+1
-1
source/libs/sync/src/syncSnapshot.c
source/libs/sync/src/syncSnapshot.c
+32
-24
source/libs/sync/src/syncUtil.c
source/libs/sync/src/syncUtil.c
+4
-4
source/libs/sync/src/syncVoteMgr.c
source/libs/sync/src/syncVoteMgr.c
+13
-13
source/libs/sync/test/CMakeLists.txt
source/libs/sync/test/CMakeLists.txt
+14
-0
source/libs/sync/test/syncLogStoreCheck2.cpp
source/libs/sync/test/syncLogStoreCheck2.cpp
+76
-0
source/libs/sync/test/syncRaftLogTest2.cpp
source/libs/sync/test/syncRaftLogTest2.cpp
+12
-0
source/libs/transport/inc/transLog.h
source/libs/transport/inc/transLog.h
+8
-8
source/libs/wal/src/walRead.c
source/libs/wal/src/walRead.c
+6
-0
source/util/src/thash.c
source/util/src/thash.c
+13
-13
tests/pytest/util/sqlset.py
tests/pytest/util/sqlset.py
+46
-0
tests/system-test/2-query/top.py
tests/system-test/2-query/top.py
+122
-66
tests/system-test/2-query/twa.py
tests/system-test/2-query/twa.py
+150
-0
tests/system-test/fulltest.sh
tests/system-test/fulltest.sh
+1
-0
未找到文件。
include/libs/nodes/querynodes.h
浏览文件 @
980cf46b
...
@@ -52,7 +52,7 @@ typedef struct SExprNode {
...
@@ -52,7 +52,7 @@ typedef struct SExprNode {
SArray
*
pAssociation
;
SArray
*
pAssociation
;
}
SExprNode
;
}
SExprNode
;
typedef
enum
EColumnType
{
COLUMN_TYPE_COLUMN
=
1
,
COLUMN_TYPE_TAG
}
EColumnType
;
typedef
enum
EColumnType
{
COLUMN_TYPE_COLUMN
=
1
,
COLUMN_TYPE_TAG
,
COLUMN_TYPE_TBNAME
}
EColumnType
;
typedef
struct
SColumnNode
{
typedef
struct
SColumnNode
{
SExprNode
node
;
// QUERY_NODE_COLUMN
SExprNode
node
;
// QUERY_NODE_COLUMN
...
...
include/libs/sync/sync.h
浏览文件 @
980cf46b
...
@@ -162,7 +162,7 @@ typedef struct SSyncLogStore {
...
@@ -162,7 +162,7 @@ typedef struct SSyncLogStore {
SyncIndex
(
*
syncLogEndIndex
)(
struct
SSyncLogStore
*
pLogStore
);
SyncIndex
(
*
syncLogEndIndex
)(
struct
SSyncLogStore
*
pLogStore
);
bool
(
*
syncLogIsEmpty
)(
struct
SSyncLogStore
*
pLogStore
);
bool
(
*
syncLogIsEmpty
)(
struct
SSyncLogStore
*
pLogStore
);
int32_t
(
*
syncLogEntryCount
)(
struct
SSyncLogStore
*
pLogStore
);
int32_t
(
*
syncLogEntryCount
)(
struct
SSyncLogStore
*
pLogStore
);
bool
(
*
syncLogInRange
)(
struct
SSyncLogStore
*
pLogStore
,
SyncIndex
index
);
//
bool (*syncLogInRange)(struct SSyncLogStore* pLogStore, SyncIndex index);
SyncIndex
(
*
syncLogWriteIndex
)(
struct
SSyncLogStore
*
pLogStore
);
SyncIndex
(
*
syncLogWriteIndex
)(
struct
SSyncLogStore
*
pLogStore
);
SyncIndex
(
*
syncLogLastIndex
)(
struct
SSyncLogStore
*
pLogStore
);
SyncIndex
(
*
syncLogLastIndex
)(
struct
SSyncLogStore
*
pLogStore
);
...
...
source/client/src/clientSml.c
浏览文件 @
980cf46b
...
@@ -2389,17 +2389,19 @@ static int32_t isSchemalessDb(STscObj *taos, SRequestObj *request) {
...
@@ -2389,17 +2389,19 @@ static int32_t isSchemalessDb(STscObj *taos, SRequestObj *request) {
static
void
smlInsertCallback
(
void
*
param
,
void
*
res
,
int32_t
code
)
{
static
void
smlInsertCallback
(
void
*
param
,
void
*
res
,
int32_t
code
)
{
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
SSmlHandle
*
info
=
(
SSmlHandle
*
)
param
;
SSmlHandle
*
info
=
(
SSmlHandle
*
)
param
;
int32_t
rows
=
taos_affected_rows
(
pRequest
);
uDebug
(
"SML:0x%"
PRIx64
" result. code:%d, msg:%s"
,
info
->
id
,
pRequest
->
code
,
pRequest
->
msgBuf
);
uDebug
(
"SML:0x%"
PRIx64
" result. code:%d, msg:%s"
,
info
->
id
,
pRequest
->
code
,
pRequest
->
msgBuf
);
// lock
// lock
taosThreadSpinLock
(
&
info
->
params
->
lock
);
info
->
params
->
request
->
body
.
resInfo
.
numOfRows
+=
rows
;
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
taosThreadSpinLock
(
&
info
->
params
->
lock
);
info
->
params
->
request
->
code
=
code
;
info
->
params
->
request
->
code
=
code
;
taosThreadSpinUnlock
(
&
info
->
params
->
lock
);
}
}
taosThreadSpinUnlock
(
&
info
->
params
->
lock
);
// unlock
// unlock
printf
(
"SML:0x%"
PRIx64
" insert finished, code: %d, total: %d
\n
"
,
info
->
id
,
code
,
info
->
affectedRows
);
uDebug
(
"SML:0x%"
PRIx64
" insert finished, code: %d, rows: %d, total: %d"
,
info
->
id
,
code
,
rows
,
info
->
affectedRows
);
Params
*
pParam
=
info
->
params
;
Params
*
pParam
=
info
->
params
;
bool
isLast
=
info
->
isLast
;
bool
isLast
=
info
->
isLast
;
info
->
cost
.
endTime
=
taosGetTimestampUs
();
info
->
cost
.
endTime
=
taosGetTimestampUs
();
...
...
source/client/test/smlTest.cpp
浏览文件 @
980cf46b
...
@@ -1272,10 +1272,10 @@ TEST(testCase, sml_dup_time_Test) {
...
@@ -1272,10 +1272,10 @@ TEST(testCase, sml_dup_time_Test) {
const char *sql[] = {
const char *sql[] = {
//"test_ms,t0=t c0=f 1626006833641",
//"test_ms,t0=t c0=f 1626006833641",
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=false,c1=1i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"xcxvwjvf\",c8=L\"ncharColValue\",c9=7u64 1626006833639000000",
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=false,c1=1i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"xcxvwjvf\",c8=L\"ncharColValue\",c9=7u64 1626006833639000000",
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=T,c1=2i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"fixrzcuq\",c8=L\"ncharColValue\",c9=7u64 162600683
3
639000000",
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=T,c1=2i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"fixrzcuq\",c8=L\"ncharColValue\",c9=7u64 162600683
4
639000000",
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=t,c1=3i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"iupzdqub\",c8=L\"ncharColValue\",c9=7u64 162600683
3
639000000",
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=t,c1=3i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"iupzdqub\",c8=L\"ncharColValue\",c9=7u64 162600683
5
639000000",
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=t,c1=4i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"yvvtzzof\",c8=L\"ncharColValue\",c9=7u64 162600683
3
639000000",
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=t,c1=4i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"yvvtzzof\",c8=L\"ncharColValue\",c9=7u64 162600683
6
639000000",
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=t,c1=5i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"vbxpilkj\",c8=L\"ncharColValue\",c9=7u64 162600683
3
639000000"
"ubzlsr,id=qmtcvgd,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0=t,c1=5i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"vbxpilkj\",c8=L\"ncharColValue\",c9=7u64 162600683
7
639000000"
};
};
pRes = taos_query(taos, "use dup_time");
pRes = taos_query(taos, "use dup_time");
taos_free_result(pRes);
taos_free_result(pRes);
...
...
source/common/src/tmsg.c
浏览文件 @
980cf46b
...
@@ -127,7 +127,7 @@ int32_t tEncodeSEpSet(SEncoder *pEncoder, const SEpSet *pEp) {
...
@@ -127,7 +127,7 @@ int32_t tEncodeSEpSet(SEncoder *pEncoder, const SEpSet *pEp) {
if
(
tEncodeI8
(
pEncoder
,
pEp
->
numOfEps
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
pEncoder
,
pEp
->
numOfEps
)
<
0
)
return
-
1
;
for
(
int32_t
i
=
0
;
i
<
TSDB_MAX_REPLICA
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
TSDB_MAX_REPLICA
;
i
++
)
{
if
(
tEncodeU16
(
pEncoder
,
pEp
->
eps
[
i
].
port
)
<
0
)
return
-
1
;
if
(
tEncodeU16
(
pEncoder
,
pEp
->
eps
[
i
].
port
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
pEncoder
,
pEp
->
eps
[
i
].
fqdn
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
WithLen
(
pEncoder
,
pEp
->
eps
[
i
].
fqdn
,
TSDB_FQDN_LEN
)
<
0
)
return
-
1
;
}
}
return
0
;
return
0
;
}
}
...
@@ -3054,7 +3054,7 @@ int32_t tSerializeSConnectReq(void *buf, int32_t bufLen, SConnectReq *pReq) {
...
@@ -3054,7 +3054,7 @@ int32_t tSerializeSConnectReq(void *buf, int32_t bufLen, SConnectReq *pReq) {
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
app
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
app
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
db
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
db
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
user
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
user
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
passwd
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
WithLen
(
&
encoder
,
pReq
->
passwd
,
TSDB_PASSWORD_LEN
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
&
encoder
,
pReq
->
startTime
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
&
encoder
,
pReq
->
startTime
)
<
0
)
return
-
1
;
tEndEncode
(
&
encoder
);
tEndEncode
(
&
encoder
);
...
...
source/common/src/tname.c
浏览文件 @
980cf46b
...
@@ -312,8 +312,10 @@ void buildChildTableName(RandTableName* rName) {
...
@@ -312,8 +312,10 @@ void buildChildTableName(RandTableName* rName) {
taosStringBuilderAppendStringLen
(
&
sb
,
rName
->
sTableName
,
rName
->
sTableNameLen
);
taosStringBuilderAppendStringLen
(
&
sb
,
rName
->
sTableName
,
rName
->
sTableNameLen
);
taosArraySort
(
rName
->
tags
,
compareKv
);
taosArraySort
(
rName
->
tags
,
compareKv
);
for
(
int
j
=
0
;
j
<
taosArrayGetSize
(
rName
->
tags
);
++
j
)
{
for
(
int
j
=
0
;
j
<
taosArrayGetSize
(
rName
->
tags
);
++
j
)
{
taosStringBuilderAppendChar
(
&
sb
,
','
);
SSmlKv
*
tagKv
=
taosArrayGetP
(
rName
->
tags
,
j
);
SSmlKv
*
tagKv
=
taosArrayGetP
(
rName
->
tags
,
j
);
taosStringBuilderAppendStringLen
(
&
sb
,
tagKv
->
key
,
tagKv
->
keyLen
);
taosStringBuilderAppendStringLen
(
&
sb
,
tagKv
->
key
,
tagKv
->
keyLen
);
taosStringBuilderAppendChar
(
&
sb
,
'='
);
if
(
IS_VAR_DATA_TYPE
(
tagKv
->
type
))
{
if
(
IS_VAR_DATA_TYPE
(
tagKv
->
type
))
{
taosStringBuilderAppendStringLen
(
&
sb
,
tagKv
->
value
,
tagKv
->
length
);
taosStringBuilderAppendStringLen
(
&
sb
,
tagKv
->
value
,
tagKv
->
length
);
}
else
{
}
else
{
...
@@ -326,9 +328,14 @@ void buildChildTableName(RandTableName* rName) {
...
@@ -326,9 +328,14 @@ void buildChildTableName(RandTableName* rName) {
tMD5Init
(
&
context
);
tMD5Init
(
&
context
);
tMD5Update
(
&
context
,
(
uint8_t
*
)
keyJoined
,
(
uint32_t
)
len
);
tMD5Update
(
&
context
,
(
uint8_t
*
)
keyJoined
,
(
uint32_t
)
len
);
tMD5Final
(
&
context
);
tMD5Final
(
&
context
);
uint64_t
digest1
=
*
(
uint64_t
*
)(
context
.
digest
);
uint64_t
digest2
=
*
(
uint64_t
*
)(
context
.
digest
+
8
);
char
temp
[
8
]
=
{
0
};
snprintf
(
rName
->
childTableName
,
TSDB_TABLE_NAME_LEN
,
"t_%016"
PRIx64
"%016"
PRIx64
,
digest1
,
digest2
);
rName
->
childTableName
[
0
]
=
't'
;
rName
->
childTableName
[
1
]
=
'_'
;
for
(
int
i
=
0
;
i
<
16
;
i
++
){
sprintf
(
temp
,
"%02x"
,
context
.
digest
[
i
]);
strcat
(
rName
->
childTableName
,
temp
);
}
taosStringBuilderDestroy
(
&
sb
);
taosStringBuilderDestroy
(
&
sb
);
rName
->
uid
=
digest1
;
rName
->
uid
=
*
(
uint64_t
*
)(
context
.
digest
)
;
}
}
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
浏览文件 @
980cf46b
...
@@ -73,6 +73,7 @@ int32_t mmProcessGetLoadsReq(SMnodeMgmt *pMgmt, SRpcMsg *pMsg) {
...
@@ -73,6 +73,7 @@ int32_t mmProcessGetLoadsReq(SMnodeMgmt *pMgmt, SRpcMsg *pMsg) {
}
}
int32_t
mmProcessCreateReq
(
const
SMgmtInputOpt
*
pInput
,
SRpcMsg
*
pMsg
)
{
int32_t
mmProcessCreateReq
(
const
SMgmtInputOpt
*
pInput
,
SRpcMsg
*
pMsg
)
{
const
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
SDCreateMnodeReq
createReq
=
{
0
};
SDCreateMnodeReq
createReq
=
{
0
};
if
(
tDeserializeSDCreateMnodeReq
(
pMsg
->
pCont
,
pMsg
->
contLen
,
&
createReq
)
!=
0
)
{
if
(
tDeserializeSDCreateMnodeReq
(
pMsg
->
pCont
,
pMsg
->
contLen
,
&
createReq
)
!=
0
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
terrno
=
TSDB_CODE_INVALID_MSG
;
...
@@ -81,7 +82,7 @@ int32_t mmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
...
@@ -81,7 +82,7 @@ int32_t mmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
if
(
createReq
.
replica
!=
1
)
{
if
(
createReq
.
replica
!=
1
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to create mnode since %s"
,
terrstr
());
d
G
Error
(
"failed to create mnode since %s"
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
...
@@ -91,7 +92,7 @@ int32_t mmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
...
@@ -91,7 +92,7 @@ int32_t mmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
mgmt
.
path
=
pInput
->
path
;
mgmt
.
path
=
pInput
->
path
;
mgmt
.
name
=
pInput
->
name
;
mgmt
.
name
=
pInput
->
name
;
if
(
mmWriteFile
(
&
mgmt
,
&
createReq
.
replicas
[
0
],
deployed
)
!=
0
)
{
if
(
mmWriteFile
(
&
mgmt
,
&
createReq
.
replicas
[
0
],
deployed
)
!=
0
)
{
dError
(
"failed to write mnode file since %s"
,
terrstr
());
d
G
Error
(
"failed to write mnode file since %s"
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
...
@@ -99,7 +100,8 @@ int32_t mmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
...
@@ -99,7 +100,8 @@ int32_t mmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
}
}
int32_t
mmProcessDropReq
(
const
SMgmtInputOpt
*
pInput
,
SRpcMsg
*
pMsg
)
{
int32_t
mmProcessDropReq
(
const
SMgmtInputOpt
*
pInput
,
SRpcMsg
*
pMsg
)
{
SDDropMnodeReq
dropReq
=
{
0
};
const
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
SDDropMnodeReq
dropReq
=
{
0
};
if
(
tDeserializeSCreateDropMQSBNodeReq
(
pMsg
->
pCont
,
pMsg
->
contLen
,
&
dropReq
)
!=
0
)
{
if
(
tDeserializeSCreateDropMQSBNodeReq
(
pMsg
->
pCont
,
pMsg
->
contLen
,
&
dropReq
)
!=
0
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
terrno
=
TSDB_CODE_INVALID_MSG
;
return
-
1
;
return
-
1
;
...
@@ -107,7 +109,7 @@ int32_t mmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
...
@@ -107,7 +109,7 @@ int32_t mmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
if
(
pInput
->
pData
->
dnodeId
!=
0
&&
dropReq
.
dnodeId
!=
pInput
->
pData
->
dnodeId
)
{
if
(
pInput
->
pData
->
dnodeId
!=
0
&&
dropReq
.
dnodeId
!=
pInput
->
pData
->
dnodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to drop mnode since %s"
,
terrstr
());
d
G
Error
(
"failed to drop mnode since %s"
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
...
@@ -117,7 +119,7 @@ int32_t mmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
...
@@ -117,7 +119,7 @@ int32_t mmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) {
mgmt
.
path
=
pInput
->
path
;
mgmt
.
path
=
pInput
->
path
;
mgmt
.
name
=
pInput
->
name
;
mgmt
.
name
=
pInput
->
name
;
if
(
mmWriteFile
(
&
mgmt
,
NULL
,
deployed
)
!=
0
)
{
if
(
mmWriteFile
(
&
mgmt
,
NULL
,
deployed
)
!=
0
)
{
dError
(
"failed to write mnode file since %s"
,
terrstr
());
d
G
Error
(
"failed to write mnode file since %s"
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
...
...
source/dnode/mgmt/mgmt_mnode/src/mmWorker.c
浏览文件 @
980cf46b
...
@@ -18,7 +18,6 @@
...
@@ -18,7 +18,6 @@
static
inline
int32_t
mmAcquire
(
SMnodeMgmt
*
pMgmt
)
{
static
inline
int32_t
mmAcquire
(
SMnodeMgmt
*
pMgmt
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
taosThreadRwlockRdlock
(
&
pMgmt
->
lock
);
taosThreadRwlockRdlock
(
&
pMgmt
->
lock
);
if
(
pMgmt
->
stopped
)
{
if
(
pMgmt
->
stopped
)
{
code
=
-
1
;
code
=
-
1
;
...
@@ -48,7 +47,8 @@ static inline void mmSendRsp(SRpcMsg *pMsg, int32_t code) {
...
@@ -48,7 +47,8 @@ static inline void mmSendRsp(SRpcMsg *pMsg, int32_t code) {
static
void
mmProcessRpcMsg
(
SQueueInfo
*
pInfo
,
SRpcMsg
*
pMsg
)
{
static
void
mmProcessRpcMsg
(
SQueueInfo
*
pInfo
,
SRpcMsg
*
pMsg
)
{
SMnodeMgmt
*
pMgmt
=
pInfo
->
ahandle
;
SMnodeMgmt
*
pMgmt
=
pInfo
->
ahandle
;
int32_t
code
=
-
1
;
int32_t
code
=
-
1
;
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
const
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
dGTrace
(
"msg:%p, get from mnode queue"
,
pMsg
);
dGTrace
(
"msg:%p, get from mnode queue"
,
pMsg
);
switch
(
pMsg
->
msgType
)
{
switch
(
pMsg
->
msgType
)
{
...
@@ -72,7 +72,7 @@ static void mmProcessRpcMsg(SQueueInfo *pInfo, SRpcMsg *pMsg) {
...
@@ -72,7 +72,7 @@ static void mmProcessRpcMsg(SQueueInfo *pInfo, SRpcMsg *pMsg) {
mndPostProcessQueryMsg
(
pMsg
);
mndPostProcessQueryMsg
(
pMsg
);
}
}
dTrace
(
"msg:%p, is freed, code:0x%x"
,
pMsg
,
code
);
d
G
Trace
(
"msg:%p, is freed, code:0x%x"
,
pMsg
,
code
);
rpcFreeCont
(
pMsg
->
pCont
);
rpcFreeCont
(
pMsg
->
pCont
);
taosFreeQitem
(
pMsg
);
taosFreeQitem
(
pMsg
);
}
}
...
@@ -80,7 +80,9 @@ static void mmProcessRpcMsg(SQueueInfo *pInfo, SRpcMsg *pMsg) {
...
@@ -80,7 +80,9 @@ static void mmProcessRpcMsg(SQueueInfo *pInfo, SRpcMsg *pMsg) {
static
void
mmProcessSyncMsg
(
SQueueInfo
*
pInfo
,
SRpcMsg
*
pMsg
)
{
static
void
mmProcessSyncMsg
(
SQueueInfo
*
pInfo
,
SRpcMsg
*
pMsg
)
{
SMnodeMgmt
*
pMgmt
=
pInfo
->
ahandle
;
SMnodeMgmt
*
pMgmt
=
pInfo
->
ahandle
;
pMsg
->
info
.
node
=
pMgmt
->
pMnode
;
pMsg
->
info
.
node
=
pMgmt
->
pMnode
;
dTrace
(
"msg:%p, get from mnode-sync queue"
,
pMsg
);
const
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
dGTrace
(
"msg:%p, get from mnode-sync queue"
,
pMsg
);
SMsgHead
*
pHead
=
pMsg
->
pCont
;
SMsgHead
*
pHead
=
pMsg
->
pCont
;
pHead
->
contLen
=
ntohl
(
pHead
->
contLen
);
pHead
->
contLen
=
ntohl
(
pHead
->
contLen
);
...
@@ -88,20 +90,22 @@ static void mmProcessSyncMsg(SQueueInfo *pInfo, SRpcMsg *pMsg) {
...
@@ -88,20 +90,22 @@ static void mmProcessSyncMsg(SQueueInfo *pInfo, SRpcMsg *pMsg) {
int32_t
code
=
mndProcessSyncMsg
(
pMsg
);
int32_t
code
=
mndProcessSyncMsg
(
pMsg
);
dTrace
(
"msg:%p, is freed, code:0x%x"
,
pMsg
,
code
);
d
G
Trace
(
"msg:%p, is freed, code:0x%x"
,
pMsg
,
code
);
rpcFreeCont
(
pMsg
->
pCont
);
rpcFreeCont
(
pMsg
->
pCont
);
taosFreeQitem
(
pMsg
);
taosFreeQitem
(
pMsg
);
}
}
static
inline
int32_t
mmPutMsgToWorker
(
SMnodeMgmt
*
pMgmt
,
SSingleWorker
*
pWorker
,
SRpcMsg
*
pMsg
)
{
static
inline
int32_t
mmPutMsgToWorker
(
SMnodeMgmt
*
pMgmt
,
SSingleWorker
*
pWorker
,
SRpcMsg
*
pMsg
)
{
const
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
if
(
mmAcquire
(
pMgmt
)
==
0
)
{
if
(
mmAcquire
(
pMgmt
)
==
0
)
{
dTrace
(
"msg:%p, put into %s queue, type:%s"
,
pMsg
,
pWorker
->
name
,
TMSG_INFO
(
pMsg
->
msgType
));
d
G
Trace
(
"msg:%p, put into %s queue, type:%s"
,
pMsg
,
pWorker
->
name
,
TMSG_INFO
(
pMsg
->
msgType
));
taosWriteQitem
(
pWorker
->
queue
,
pMsg
);
taosWriteQitem
(
pWorker
->
queue
,
pMsg
);
mmRelease
(
pMgmt
);
mmRelease
(
pMgmt
);
return
0
;
return
0
;
}
else
{
}
else
{
dTrace
(
"msg:%p, failed to put into %s queue since %s, type:%s"
,
pMsg
,
pWorker
->
name
,
terrstr
(),
d
G
Trace
(
"msg:%p, failed to put into %s queue since %s, type:%s"
,
pMsg
,
pWorker
->
name
,
terrstr
(),
TMSG_INFO
(
pMsg
->
msgType
));
TMSG_INFO
(
pMsg
->
msgType
));
return
-
1
;
return
-
1
;
}
}
}
}
...
@@ -121,19 +125,17 @@ int32_t mmPutMsgToReadQueue(SMnodeMgmt *pMgmt, SRpcMsg *pMsg) {
...
@@ -121,19 +125,17 @@ int32_t mmPutMsgToReadQueue(SMnodeMgmt *pMgmt, SRpcMsg *pMsg) {
int32_t
mmPutMsgToQueryQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
)
{
int32_t
mmPutMsgToQueryQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
)
{
pMsg
->
info
.
node
=
pMgmt
->
pMnode
;
pMsg
->
info
.
node
=
pMgmt
->
pMnode
;
if
(
mndPreProcessQueryMsg
(
pMsg
)
!=
0
)
{
if
(
mndPreProcessQueryMsg
(
pMsg
)
!=
0
)
{
dError
(
"msg:%p, failed to pre-process in mnode since %s, type:%s"
,
pMsg
,
terrstr
(),
TMSG_INFO
(
pMsg
->
msgType
));
const
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
dGError
(
"msg:%p, failed to pre-process in mnode since %s, type:%s"
,
pMsg
,
terrstr
(),
TMSG_INFO
(
pMsg
->
msgType
));
return
-
1
;
return
-
1
;
}
}
return
mmPutMsgToWorker
(
pMgmt
,
&
pMgmt
->
queryWorker
,
pMsg
);
return
mmPutMsgToWorker
(
pMgmt
,
&
pMgmt
->
queryWorker
,
pMsg
);
}
}
int32_t
mmPutMsgToFetchQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
)
{
int32_t
mmPutMsgToFetchQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
)
{
pMsg
->
info
.
node
=
pMgmt
->
pMnode
;
return
mmPutMsgToWorker
(
pMgmt
,
&
pMgmt
->
fetchWorker
,
pMsg
);
return
mmPutMsgToWorker
(
pMgmt
,
&
pMgmt
->
fetchWorker
,
pMsg
);
}
}
int32_t
mmPutMsgToMonitorQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
)
{
int32_t
mmPutMsgToMonitorQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
)
{
return
mmPutMsgToWorker
(
pMgmt
,
&
pMgmt
->
monitorWorker
,
pMsg
);
return
mmPutMsgToWorker
(
pMgmt
,
&
pMgmt
->
monitorWorker
,
pMsg
);
}
}
...
...
source/dnode/mgmt/node_mgmt/src/dmTransport.c
浏览文件 @
980cf46b
...
@@ -17,9 +17,44 @@
...
@@ -17,9 +17,44 @@
#include "dmMgmt.h"
#include "dmMgmt.h"
#include "qworker.h"
#include "qworker.h"
static
void
dmSendRedirectRsp
(
SRpcMsg
*
pMsg
,
const
SEpSet
*
pNewEpSet
);
static
inline
void
dmSendRsp
(
SRpcMsg
*
pMsg
)
{
static
void
dmSendRsp
(
SRpcMsg
*
pMsg
);
SMgmtWrapper
*
pWrapper
=
pMsg
->
info
.
wrapper
;
static
void
dmBuildMnodeRedirectRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
);
if
(
InChildProc
(
pWrapper
))
{
dmPutToProcPQueue
(
&
pWrapper
->
proc
,
pMsg
,
DND_FUNC_RSP
);
}
else
{
rpcSendResponse
(
pMsg
);
}
}
static
inline
void
dmBuildMnodeRedirectRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
)
{
SEpSet
epSet
=
{
0
};
dmGetMnodeEpSetForRedirect
(
&
pDnode
->
data
,
pMsg
,
&
epSet
);
const
int32_t
contLen
=
tSerializeSEpSet
(
NULL
,
0
,
&
epSet
);
pMsg
->
pCont
=
rpcMallocCont
(
contLen
);
if
(
pMsg
->
pCont
==
NULL
)
{
pMsg
->
code
=
TSDB_CODE_OUT_OF_MEMORY
;
}
else
{
tSerializeSEpSet
(
pMsg
->
pCont
,
contLen
,
&
epSet
);
pMsg
->
contLen
=
contLen
;
}
}
static
inline
void
dmSendRedirectRsp
(
SRpcMsg
*
pMsg
,
const
SEpSet
*
pNewEpSet
)
{
SRpcMsg
rsp
=
{.
code
=
TSDB_CODE_RPC_REDIRECT
,
.
info
=
pMsg
->
info
};
int32_t
contLen
=
tSerializeSEpSet
(
NULL
,
0
,
pNewEpSet
);
rsp
.
pCont
=
rpcMallocCont
(
contLen
);
if
(
rsp
.
pCont
==
NULL
)
{
pMsg
->
code
=
TSDB_CODE_OUT_OF_MEMORY
;
}
else
{
tSerializeSEpSet
(
rsp
.
pCont
,
contLen
,
pNewEpSet
);
rsp
.
contLen
=
contLen
;
}
dmSendRsp
(
&
rsp
);
rpcFreeCont
(
pMsg
->
pCont
);
pMsg
->
pCont
=
NULL
;
}
int32_t
dmProcessNodeMsg
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
)
{
int32_t
dmProcessNodeMsg
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
)
{
NodeMsgFp
msgFp
=
pWrapper
->
msgFps
[
TMSG_INDEX
(
pMsg
->
msgType
)];
NodeMsgFp
msgFp
=
pWrapper
->
msgFps
[
TMSG_INDEX
(
pMsg
->
msgType
)];
...
@@ -28,31 +63,38 @@ int32_t dmProcessNodeMsg(SMgmtWrapper *pWrapper, SRpcMsg *pMsg) {
...
@@ -28,31 +63,38 @@ int32_t dmProcessNodeMsg(SMgmtWrapper *pWrapper, SRpcMsg *pMsg) {
return
-
1
;
return
-
1
;
}
}
dTrace
(
"msg:%p, will be processed by %s"
,
pMsg
,
pWrapper
->
name
);
const
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
dGTrace
(
"msg:%p, will be processed by %s"
,
pMsg
,
pWrapper
->
name
);
pMsg
->
info
.
wrapper
=
pWrapper
;
pMsg
->
info
.
wrapper
=
pWrapper
;
return
(
*
msgFp
)(
pWrapper
->
pMgmt
,
pMsg
);
return
(
*
msgFp
)(
pWrapper
->
pMgmt
,
pMsg
);
}
}
static
void
dmProcessRpcMsg
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpc
,
SEpSet
*
pEpSet
)
{
static
void
dmProcessRpcMsg
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpc
,
SEpSet
*
pEpSet
)
{
SDnodeTrans
*
pTrans
=
&
pDnode
->
trans
;
SDnodeTrans
*
pTrans
=
&
pDnode
->
trans
;
int32_t
code
=
-
1
;
int32_t
code
=
-
1
;
SRpcMsg
*
pMsg
=
NULL
;
SRpcMsg
*
pMsg
=
NULL
;
SMgmtWrapper
*
pWrapper
=
NULL
;
SMgmtWrapper
*
pWrapper
=
NULL
;
SDnodeHandle
*
pHandle
=
&
pTrans
->
msgHandles
[
TMSG_INDEX
(
pRpc
->
msgType
)];
SDnodeHandle
*
pHandle
=
&
pTrans
->
msgHandles
[
TMSG_INDEX
(
pRpc
->
msgType
)];
STraceId
*
trace
=
&
pRpc
->
info
.
traceId
;
const
STraceId
*
trace
=
&
pRpc
->
info
.
traceId
;
dGTrace
(
"msg:%s is received, handle:%p len:%d code:0x%x app:%p refId:%"
PRId64
,
TMSG_INFO
(
pRpc
->
msgType
),
dGTrace
(
"msg:%s is received, handle:%p len:%d code:0x%x app:%p refId:%"
PRId64
,
TMSG_INFO
(
pRpc
->
msgType
),
pRpc
->
info
.
handle
,
pRpc
->
contLen
,
pRpc
->
code
,
pRpc
->
info
.
ahandle
,
pRpc
->
info
.
refId
);
pRpc
->
info
.
handle
,
pRpc
->
contLen
,
pRpc
->
code
,
pRpc
->
info
.
ahandle
,
pRpc
->
info
.
refId
);
if
(
pRpc
->
msgType
==
TDMT_DND_NET_TEST
)
{
switch
(
pRpc
->
msgType
)
{
dmProcessNetTestReq
(
pDnode
,
pRpc
);
case
TDMT_DND_NET_TEST
:
return
;
dmProcessNetTestReq
(
pDnode
,
pRpc
);
}
else
if
(
pRpc
->
msgType
==
TDMT_MND_SYSTABLE_RETRIEVE_RSP
||
pRpc
->
msgType
==
TDMT_VND_FETCH_RSP
)
{
return
;
qWorkerProcessFetchRsp
(
NULL
,
NULL
,
pRpc
,
0
);
case
TDMT_MND_SYSTABLE_RETRIEVE_RSP
:
return
;
case
TDMT_VND_FETCH_RSP
:
}
else
if
(
pRpc
->
msgType
==
TDMT_MND_STATUS_RSP
&&
pEpSet
!=
NULL
)
{
qWorkerProcessFetchRsp
(
NULL
,
NULL
,
pRpc
,
0
);
dmSetMnodeEpSet
(
&
pDnode
->
data
,
pEpSet
);
return
;
}
else
{
case
TDMT_MND_STATUS_RSP
:
if
(
pEpSet
!=
NULL
)
{
dmSetMnodeEpSet
(
&
pDnode
->
data
,
pEpSet
);
}
break
;
default:
break
;
}
}
if
(
pDnode
->
status
!=
DND_STAT_RUNNING
)
{
if
(
pDnode
->
status
!=
DND_STAT_RUNNING
)
{
...
@@ -73,39 +115,43 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
...
@@ -73,39 +115,43 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
if
(
pHandle
->
defaultNtype
==
NODE_END
)
{
if
(
pHandle
->
defaultNtype
==
NODE_END
)
{
terrno
=
TSDB_CODE_MSG_NOT_PROCESSED
;
terrno
=
TSDB_CODE_MSG_NOT_PROCESSED
;
goto
_OVER
;
goto
_OVER
;
}
else
{
}
pWrapper
=
&
pDnode
->
wrappers
[
pHandle
->
defaultNtype
];
if
(
pHandle
->
needCheckVgId
)
{
pWrapper
=
&
pDnode
->
wrappers
[
pHandle
->
defaultNtype
];
if
(
pRpc
->
contLen
>
0
)
{
if
(
pHandle
->
needCheckVgId
)
{
SMsgHead
*
pHead
=
pRpc
->
pCont
;
if
(
pRpc
->
contLen
>
0
)
{
int32_t
vgId
=
ntohl
(
pHead
->
vgId
);
const
SMsgHead
*
pHead
=
pRpc
->
pCont
;
if
(
vgId
==
QNODE_HANDLE
)
{
const
int32_t
vgId
=
ntohl
(
pHead
->
vgId
);
switch
(
vgId
)
{
case
QNODE_HANDLE
:
pWrapper
=
&
pDnode
->
wrappers
[
QNODE
];
pWrapper
=
&
pDnode
->
wrappers
[
QNODE
];
}
else
if
(
vgId
==
SNODE_HANDLE
)
{
break
;
case
SNODE_HANDLE
:
pWrapper
=
&
pDnode
->
wrappers
[
SNODE
];
pWrapper
=
&
pDnode
->
wrappers
[
SNODE
];
}
else
if
(
vgId
==
MNODE_HANDLE
)
{
break
;
case
MNODE_HANDLE
:
pWrapper
=
&
pDnode
->
wrappers
[
MNODE
];
pWrapper
=
&
pDnode
->
wrappers
[
MNODE
];
}
else
{
break
;
}
default:
}
else
{
break
;
terrno
=
TSDB_CODE_INVALID_MSG_LEN
;
goto
_OVER
;
}
}
}
else
{
terrno
=
TSDB_CODE_INVALID_MSG_LEN
;
goto
_OVER
;
}
}
}
}
if
(
dmMarkWrapper
(
pWrapper
)
!=
0
)
{
if
(
dmMarkWrapper
(
pWrapper
)
!=
0
)
{
pWrapper
=
NULL
;
pWrapper
=
NULL
;
goto
_OVER
;
goto
_OVER
;
}
else
{
pRpc
->
info
.
wrapper
=
pWrapper
;
}
}
pRpc
->
info
.
wrapper
=
pWrapper
;
pMsg
=
taosAllocateQitem
(
sizeof
(
SRpcMsg
),
RPC_QITEM
);
pMsg
=
taosAllocateQitem
(
sizeof
(
SRpcMsg
),
RPC_QITEM
);
if
(
pMsg
==
NULL
)
goto
_OVER
;
if
(
pMsg
==
NULL
)
goto
_OVER
;
memcpy
(
pMsg
,
pRpc
,
sizeof
(
SRpcMsg
));
dTrace
(
"msg:%p, is created, type:%s handle:%p"
,
pMsg
,
TMSG_INFO
(
pRpc
->
msgType
),
pMsg
->
info
.
handle
);
memcpy
(
pMsg
,
pRpc
,
sizeof
(
SRpcMsg
));
dGTrace
(
"msg:%p, is created, type:%s handle:%p"
,
pMsg
,
TMSG_INFO
(
pRpc
->
msgType
),
pMsg
->
info
.
handle
);
if
(
InParentProc
(
pWrapper
))
{
if
(
InParentProc
(
pWrapper
))
{
code
=
dmPutToProcCQueue
(
&
pWrapper
->
proc
,
pMsg
,
DND_FUNC_REQ
);
code
=
dmPutToProcCQueue
(
&
pWrapper
->
proc
,
pMsg
,
DND_FUNC_REQ
);
...
@@ -115,13 +161,11 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
...
@@ -115,13 +161,11 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
_OVER:
_OVER:
if
(
code
!=
0
)
{
if
(
code
!=
0
)
{
dTrace
(
"failed to process msg:%p since %s, handle:%p"
,
pMsg
,
terrstr
(),
pRpc
->
info
.
handle
);
if
(
terrno
!=
0
)
code
=
terrno
;
if
(
terrno
!=
0
)
code
=
terrno
;
dGTrace
(
"msg:%p, failed to process since %s"
,
pMsg
,
terrstr
());
if
(
IsReq
(
pRpc
))
{
if
(
IsReq
(
pRpc
))
{
SRpcMsg
rsp
=
{.
code
=
code
,
.
info
=
pRpc
->
info
};
SRpcMsg
rsp
=
{.
code
=
code
,
.
info
=
pRpc
->
info
};
if
((
code
==
TSDB_CODE_NODE_NOT_DEPLOYED
||
code
==
TSDB_CODE_APP_NOT_READY
)
&&
pRpc
->
msgType
>
TDMT_MND_MSG
&&
if
((
code
==
TSDB_CODE_NODE_NOT_DEPLOYED
||
code
==
TSDB_CODE_APP_NOT_READY
)
&&
pRpc
->
msgType
>
TDMT_MND_MSG
&&
pRpc
->
msgType
<
TDMT_VND_MSG
)
{
pRpc
->
msgType
<
TDMT_VND_MSG
)
{
dmBuildMnodeRedirectRsp
(
pDnode
,
&
rsp
);
dmBuildMnodeRedirectRsp
(
pDnode
,
&
rsp
);
...
@@ -135,7 +179,7 @@ _OVER:
...
@@ -135,7 +179,7 @@ _OVER:
}
}
if
(
pMsg
!=
NULL
)
{
if
(
pMsg
!=
NULL
)
{
dTrace
(
"msg:%p, is freed"
,
pMsg
);
d
G
Trace
(
"msg:%p, is freed"
,
pMsg
);
taosFreeQitem
(
pMsg
);
taosFreeQitem
(
pMsg
);
}
}
rpcFreeCont
(
pRpc
->
pCont
);
rpcFreeCont
(
pRpc
->
pCont
);
...
@@ -149,11 +193,11 @@ int32_t dmInitMsgHandle(SDnode *pDnode) {
...
@@ -149,11 +193,11 @@ int32_t dmInitMsgHandle(SDnode *pDnode) {
for
(
EDndNodeType
ntype
=
DNODE
;
ntype
<
NODE_END
;
++
ntype
)
{
for
(
EDndNodeType
ntype
=
DNODE
;
ntype
<
NODE_END
;
++
ntype
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
ntype
];
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
ntype
];
SArray
*
pArray
=
(
*
pWrapper
->
func
.
getHandlesFp
)();
SArray
*
pArray
=
(
*
pWrapper
->
func
.
getHandlesFp
)();
if
(
pArray
==
NULL
)
return
-
1
;
if
(
pArray
==
NULL
)
return
-
1
;
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
pArray
);
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
pArray
);
++
i
)
{
SMgmtHandle
*
pMgmt
=
taosArrayGet
(
pArray
,
i
);
SMgmtHandle
*
pMgmt
=
taosArrayGet
(
pArray
,
i
);
SDnodeHandle
*
pHandle
=
&
pTrans
->
msgHandles
[
TMSG_INDEX
(
pMgmt
->
msgType
)];
SDnodeHandle
*
pHandle
=
&
pTrans
->
msgHandles
[
TMSG_INDEX
(
pMgmt
->
msgType
)];
if
(
pMgmt
->
needCheckVgId
)
{
if
(
pMgmt
->
needCheckVgId
)
{
pHandle
->
needCheckVgId
=
pMgmt
->
needCheckVgId
;
pHandle
->
needCheckVgId
=
pMgmt
->
needCheckVgId
;
...
@@ -184,45 +228,6 @@ static inline int32_t dmSendReq(const SEpSet *pEpSet, SRpcMsg *pMsg) {
...
@@ -184,45 +228,6 @@ static inline int32_t dmSendReq(const SEpSet *pEpSet, SRpcMsg *pMsg) {
}
}
}
}
static
inline
void
dmSendRsp
(
SRpcMsg
*
pMsg
)
{
SMgmtWrapper
*
pWrapper
=
pMsg
->
info
.
wrapper
;
if
(
InChildProc
(
pWrapper
))
{
dmPutToProcPQueue
(
&
pWrapper
->
proc
,
pMsg
,
DND_FUNC_RSP
);
}
else
{
rpcSendResponse
(
pMsg
);
}
}
static
void
dmBuildMnodeRedirectRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
)
{
SEpSet
epSet
=
{
0
};
dmGetMnodeEpSetForRedirect
(
&
pDnode
->
data
,
pMsg
,
&
epSet
);
int32_t
contLen
=
tSerializeSEpSet
(
NULL
,
0
,
&
epSet
);
pMsg
->
pCont
=
rpcMallocCont
(
contLen
);
if
(
pMsg
->
pCont
==
NULL
)
{
pMsg
->
code
=
TSDB_CODE_OUT_OF_MEMORY
;
}
else
{
tSerializeSEpSet
(
pMsg
->
pCont
,
contLen
,
&
epSet
);
pMsg
->
contLen
=
contLen
;
}
}
static
inline
void
dmSendRedirectRsp
(
SRpcMsg
*
pMsg
,
const
SEpSet
*
pNewEpSet
)
{
SRpcMsg
rsp
=
{.
code
=
TSDB_CODE_RPC_REDIRECT
,
.
info
=
pMsg
->
info
};
int32_t
contLen
=
tSerializeSEpSet
(
NULL
,
0
,
pNewEpSet
);
rsp
.
pCont
=
rpcMallocCont
(
contLen
);
if
(
rsp
.
pCont
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
}
else
{
tSerializeSEpSet
(
rsp
.
pCont
,
contLen
,
pNewEpSet
);
rsp
.
contLen
=
contLen
;
}
dmSendRsp
(
&
rsp
);
rpcFreeCont
(
pMsg
->
pCont
);
pMsg
->
pCont
=
NULL
;
}
static
inline
void
dmRegisterBrokenLinkArg
(
SRpcMsg
*
pMsg
)
{
static
inline
void
dmRegisterBrokenLinkArg
(
SRpcMsg
*
pMsg
)
{
SMgmtWrapper
*
pWrapper
=
pMsg
->
info
.
wrapper
;
SMgmtWrapper
*
pWrapper
=
pMsg
->
info
.
wrapper
;
if
(
InChildProc
(
pWrapper
))
{
if
(
InChildProc
(
pWrapper
))
{
...
...
source/dnode/mgmt/node_util/inc/dmUtil.h
浏览文件 @
980cf46b
...
@@ -40,18 +40,27 @@
...
@@ -40,18 +40,27 @@
#include "wal.h"
#include "wal.h"
#include "libs/function/function.h"
#include "libs/function/function.h"
// clang-format off
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
{
extern
"C"
{
#endif
#endif
#define dFatal(...) { if (dDebugFlag & DEBUG_FATAL) { taosPrintLog("DND FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }}
// clang-format off
#define dError(...) { if (dDebugFlag & DEBUG_ERROR) { taosPrintLog("DND ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }}
#define dWarn(...) { if (dDebugFlag & DEBUG_WARN) { taosPrintLog("DND WARN ", DEBUG_WARN, 255, __VA_ARGS__); }}
#define dFatal(...) { if (dDebugFlag & DEBUG_FATAL) { taosPrintLog("DND FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }}
#define dInfo(...) { if (dDebugFlag & DEBUG_INFO) { taosPrintLog("DND ", DEBUG_INFO, 255, __VA_ARGS__); }}
#define dError(...) { if (dDebugFlag & DEBUG_ERROR) { taosPrintLog("DND ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }}
#define dDebug(...) { if (dDebugFlag & DEBUG_DEBUG) { taosPrintLog("DND ", DEBUG_DEBUG, dDebugFlag, __VA_ARGS__); }}
#define dWarn(...) { if (dDebugFlag & DEBUG_WARN) { taosPrintLog("DND WARN ", DEBUG_WARN, 255, __VA_ARGS__); }}
#define dTrace(...) { if (dDebugFlag & DEBUG_TRACE) { taosPrintLog("DND ", DEBUG_TRACE, dDebugFlag, __VA_ARGS__); }}
#define dInfo(...) { if (dDebugFlag & DEBUG_INFO) { taosPrintLog("DND ", DEBUG_INFO, 255, __VA_ARGS__); }}
#define dGTrace(param, ...) do { char buf[40] = {0}; TRACE_TO_STR(trace, buf); dTrace(param ",GTID: %s", __VA_ARGS__, buf);} while(0)
#define dDebug(...) { if (dDebugFlag & DEBUG_DEBUG) { taosPrintLog("DND ", DEBUG_DEBUG, dDebugFlag, __VA_ARGS__); }}
#define dTrace(...) { if (dDebugFlag & DEBUG_TRACE) { taosPrintLog("DND ", DEBUG_TRACE, dDebugFlag, __VA_ARGS__); }}
#define dGFatal(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); dFatal(param ", gtid:%s", __VA_ARGS__, buf);}
#define dGError(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); dError(param ", gtid:%s", __VA_ARGS__, buf);}
#define dGWarn(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); dWarn (param ", gtid:%s", __VA_ARGS__, buf);}
#define dGInfo(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); dInfo (param ", gtid:%s", __VA_ARGS__, buf);}
#define dGDebug(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); dDebug(param ", gtid:%s", __VA_ARGS__, buf);}
#define dGTrace(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); dTrace(param ", gtid:%s", __VA_ARGS__, buf);}
// clang-format on
typedef
enum
{
typedef
enum
{
DNODE
=
0
,
DNODE
=
0
,
...
@@ -185,4 +194,3 @@ void dmSetMnodeEpSet(SDnodeData *pData, SEpSet *pEpSet);
...
@@ -185,4 +194,3 @@ void dmSetMnodeEpSet(SDnodeData *pData, SEpSet *pEpSet);
#endif
#endif
#endif
/*_TD_DM_INT_H_*/
#endif
/*_TD_DM_INT_H_*/
// clang-format on
source/dnode/mgmt/test/sut/src/sut.cpp
浏览文件 @
980cf46b
...
@@ -102,6 +102,7 @@ int32_t Testbase::SendShowReq(int8_t showType, const char* tb, const char* db) {
...
@@ -102,6 +102,7 @@ int32_t Testbase::SendShowReq(int8_t showType, const char* tb, const char* db) {
ASSERT
(
pRsp
->
pCont
!=
nullptr
);
ASSERT
(
pRsp
->
pCont
!=
nullptr
);
if
(
pRsp
->
contLen
==
0
)
return
-
1
;
if
(
pRsp
->
contLen
==
0
)
return
-
1
;
if
(
pRsp
->
code
!=
0
)
return
-
1
;
showRsp
=
(
SRetrieveMetaTableRsp
*
)
pRsp
->
pCont
;
showRsp
=
(
SRetrieveMetaTableRsp
*
)
pRsp
->
pCont
;
showRsp
->
handle
=
htobe64
(
showRsp
->
handle
);
// show Id
showRsp
->
handle
=
htobe64
(
showRsp
->
handle
);
// show Id
...
...
source/dnode/mnode/impl/inc/mndInt.h
浏览文件 @
980cf46b
...
@@ -34,13 +34,20 @@ extern "C" {
...
@@ -34,13 +34,20 @@ extern "C" {
#endif
#endif
// clang-format off
// clang-format off
#define mFatal(...) { if (mDebugFlag & DEBUG_FATAL) { taosPrintLog("MND FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }}
#define mError(...) { if (mDebugFlag & DEBUG_ERROR) { taosPrintLog("MND ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }}
#define mFatal(...) { if (mDebugFlag & DEBUG_FATAL) { taosPrintLog("MND FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }}
#define mWarn(...) { if (mDebugFlag & DEBUG_WARN) { taosPrintLog("MND WARN ", DEBUG_WARN, 255, __VA_ARGS__); }}
#define mError(...) { if (mDebugFlag & DEBUG_ERROR) { taosPrintLog("MND ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }}
#define mInfo(...) { if (mDebugFlag & DEBUG_INFO) { taosPrintLog("MND ", DEBUG_INFO, 255, __VA_ARGS__); }}
#define mWarn(...) { if (mDebugFlag & DEBUG_WARN) { taosPrintLog("MND WARN ", DEBUG_WARN, 255, __VA_ARGS__); }}
#define mDebug(...) { if (mDebugFlag & DEBUG_DEBUG) { taosPrintLog("MND ", DEBUG_DEBUG, mDebugFlag, __VA_ARGS__); }}
#define mInfo(...) { if (mDebugFlag & DEBUG_INFO) { taosPrintLog("MND ", DEBUG_INFO, 255, __VA_ARGS__); }}
#define mTrace(...) { if (mDebugFlag & DEBUG_TRACE) { taosPrintLog("MND ", DEBUG_TRACE, mDebugFlag, __VA_ARGS__); }}
#define mDebug(...) { if (mDebugFlag & DEBUG_DEBUG) { taosPrintLog("MND ", DEBUG_DEBUG, mDebugFlag, __VA_ARGS__); }}
#define mGTrace(param, ...) do { char buf[40] = {0}; TRACE_TO_STR(trace, buf); mTrace(param ", GTID: %s", __VA_ARGS__, buf);} while(0)
#define mTrace(...) { if (mDebugFlag & DEBUG_TRACE) { taosPrintLog("MND ", DEBUG_TRACE, mDebugFlag, __VA_ARGS__); }}
#define mGFatal(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); mFatal(param ", gtid:%s", __VA_ARGS__, buf);}
#define mGError(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); mError(param ", gtid:%s", __VA_ARGS__, buf);}
#define mGWarn(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); mWarn (param ", gtid:%s", __VA_ARGS__, buf);}
#define mGInfo(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); mInfo (param ", gtid:%s", __VA_ARGS__, buf);}
#define mGDebug(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); mDebug(param ", gtid:%s", __VA_ARGS__, buf);}
#define mGTrace(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); mTrace(param ", gtid:%s", __VA_ARGS__, buf);}
// clang-format on
// clang-format on
...
...
source/dnode/mnode/impl/src/mndMain.c
浏览文件 @
980cf46b
...
@@ -59,22 +59,28 @@ static void *mndBuildTimerMsg(int32_t *pContLen) {
...
@@ -59,22 +59,28 @@ static void *mndBuildTimerMsg(int32_t *pContLen) {
static
void
mndPullupTrans
(
SMnode
*
pMnode
)
{
static
void
mndPullupTrans
(
SMnode
*
pMnode
)
{
int32_t
contLen
=
0
;
int32_t
contLen
=
0
;
void
*
pReq
=
mndBuildTimerMsg
(
&
contLen
);
void
*
pReq
=
mndBuildTimerMsg
(
&
contLen
);
SRpcMsg
rpcMsg
=
{.
msgType
=
TDMT_MND_TRANS_TIMER
,
.
pCont
=
pReq
,
.
contLen
=
contLen
};
if
(
pReq
!=
NULL
)
{
tmsgPutToQueue
(
&
pMnode
->
msgCb
,
WRITE_QUEUE
,
&
rpcMsg
);
SRpcMsg
rpcMsg
=
{.
msgType
=
TDMT_MND_TRANS_TIMER
,
.
pCont
=
pReq
,
.
contLen
=
contLen
};
tmsgPutToQueue
(
&
pMnode
->
msgCb
,
WRITE_QUEUE
,
&
rpcMsg
);
}
}
}
static
void
mndCalMqRebalance
(
SMnode
*
pMnode
)
{
static
void
mndCalMqRebalance
(
SMnode
*
pMnode
)
{
int32_t
contLen
=
0
;
int32_t
contLen
=
0
;
void
*
pReq
=
mndBuildTimerMsg
(
&
contLen
);
void
*
pReq
=
mndBuildTimerMsg
(
&
contLen
);
SRpcMsg
rpcMsg
=
{.
msgType
=
TDMT_MND_MQ_TIMER
,
.
pCont
=
pReq
,
.
contLen
=
contLen
};
if
(
pReq
!=
NULL
)
{
tmsgPutToQueue
(
&
pMnode
->
msgCb
,
READ_QUEUE
,
&
rpcMsg
);
SRpcMsg
rpcMsg
=
{.
msgType
=
TDMT_MND_MQ_TIMER
,
.
pCont
=
pReq
,
.
contLen
=
contLen
};
tmsgPutToQueue
(
&
pMnode
->
msgCb
,
READ_QUEUE
,
&
rpcMsg
);
}
}
}
static
void
mndPullupTelem
(
SMnode
*
pMnode
)
{
static
void
mndPullupTelem
(
SMnode
*
pMnode
)
{
int32_t
contLen
=
0
;
int32_t
contLen
=
0
;
void
*
pReq
=
mndBuildTimerMsg
(
&
contLen
);
void
*
pReq
=
mndBuildTimerMsg
(
&
contLen
);
SRpcMsg
rpcMsg
=
{.
msgType
=
TDMT_MND_TELEM_TIMER
,
.
pCont
=
pReq
,
.
contLen
=
contLen
};
if
(
pReq
!=
NULL
)
{
tmsgPutToQueue
(
&
pMnode
->
msgCb
,
READ_QUEUE
,
&
rpcMsg
);
SRpcMsg
rpcMsg
=
{.
msgType
=
TDMT_MND_TELEM_TIMER
,
.
pCont
=
pReq
,
.
contLen
=
contLen
};
tmsgPutToQueue
(
&
pMnode
->
msgCb
,
READ_QUEUE
,
&
rpcMsg
);
}
}
}
static
void
mndPushTtlTime
(
SMnode
*
pMnode
)
{
static
void
mndPushTtlTime
(
SMnode
*
pMnode
)
{
...
@@ -89,10 +95,11 @@ static void mndPushTtlTime(SMnode *pMnode) {
...
@@ -89,10 +95,11 @@ static void mndPushTtlTime(SMnode *pMnode) {
int32_t
contLen
=
sizeof
(
SMsgHead
)
+
sizeof
(
int32_t
);
int32_t
contLen
=
sizeof
(
SMsgHead
)
+
sizeof
(
int32_t
);
SMsgHead
*
pHead
=
rpcMallocCont
(
contLen
);
SMsgHead
*
pHead
=
rpcMallocCont
(
contLen
);
if
(
pHead
==
NULL
)
{
if
(
pHead
==
NULL
)
{
mError
(
"ttl time malloc err. contLen:%d"
,
contLen
);
sdbCancelFetch
(
pSdb
,
pIter
);
sdbRelease
(
pSdb
,
pVgroup
);
sdbRelease
(
pSdb
,
pVgroup
);
continue
;
continue
;
}
}
pHead
->
contLen
=
htonl
(
contLen
);
pHead
->
contLen
=
htonl
(
contLen
);
pHead
->
vgId
=
htonl
(
pVgroup
->
vgId
);
pHead
->
vgId
=
htonl
(
pVgroup
->
vgId
);
...
@@ -100,13 +107,13 @@ static void mndPushTtlTime(SMnode *pMnode) {
...
@@ -100,13 +107,13 @@ static void mndPushTtlTime(SMnode *pMnode) {
*
(
int32_t
*
)(
POINTER_SHIFT
(
pHead
,
sizeof
(
SMsgHead
)))
=
htonl
(
t
);
*
(
int32_t
*
)(
POINTER_SHIFT
(
pHead
,
sizeof
(
SMsgHead
)))
=
htonl
(
t
);
SRpcMsg
rpcMsg
=
{.
msgType
=
TDMT_VND_DROP_TTL_TABLE
,
.
pCont
=
pHead
,
.
contLen
=
contLen
};
SRpcMsg
rpcMsg
=
{.
msgType
=
TDMT_VND_DROP_TTL_TABLE
,
.
pCont
=
pHead
,
.
contLen
=
contLen
};
SEpSet
epSet
=
mndGetVgroupEpset
(
pMnode
,
pVgroup
);
SEpSet
epSet
=
mndGetVgroupEpset
(
pMnode
,
pVgroup
);
int32_t
code
=
tmsgSendReq
(
&
epSet
,
&
rpcMsg
);
int32_t
code
=
tmsgSendReq
(
&
epSet
,
&
rpcMsg
);
if
(
code
!=
0
)
{
if
(
code
!=
0
)
{
mError
(
"ttl time seed err. code:%d"
,
code
);
mError
(
"failed to send ttl time seed msg, code:0x%x"
,
code
);
}
else
{
mInfo
(
"send ttl time seed msg, time:%d"
,
t
);
}
}
mError
(
"ttl time seed succ. time:%d"
,
t
);
sdbRelease
(
pSdb
,
pVgroup
);
sdbRelease
(
pSdb
,
pVgroup
);
}
}
}
}
...
@@ -117,7 +124,7 @@ static void *mndThreadFp(void *param) {
...
@@ -117,7 +124,7 @@ static void *mndThreadFp(void *param) {
setThreadName
(
"mnode-timer"
);
setThreadName
(
"mnode-timer"
);
while
(
1
)
{
while
(
1
)
{
if
(
lastTime
%
(
864000
)
==
0
)
{
// sleep 1 day for ttl
if
(
lastTime
%
864000
==
0
)
{
mndPushTtlTime
(
pMnode
);
mndPushTtlTime
(
pMnode
);
}
}
...
@@ -549,23 +556,25 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) {
...
@@ -549,23 +556,25 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) {
static
int32_t
mndCheckMnodeState
(
SRpcMsg
*
pMsg
)
{
static
int32_t
mndCheckMnodeState
(
SRpcMsg
*
pMsg
)
{
if
(
!
IsReq
(
pMsg
))
return
0
;
if
(
!
IsReq
(
pMsg
))
return
0
;
if
(
mndAcquireRpcRef
(
pMsg
->
info
.
node
)
==
0
)
return
0
;
if
(
mndAcquireRpcRef
(
pMsg
->
info
.
node
)
==
0
)
return
0
;
if
(
pMsg
->
msgType
==
TDMT_MND_MQ_TIMER
||
pMsg
->
msgType
==
TDMT_MND_TELEM_TIMER
||
pMsg
->
msgType
==
TDMT_MND_TRANS_TIMER
)
{
return
-
1
;
}
if
(
pMsg
->
msgType
!=
TDMT_MND_MQ_TIMER
&&
pMsg
->
msgType
!=
TDMT_MND_TELEM_TIMER
&&
const
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
pMsg
->
msgType
!=
TDMT_MND_TRANS_TIMER
)
{
mGError
(
"msg:%p, failed to check mnode state since %s, type:%s"
,
pMsg
,
terrstr
(),
TMSG_INFO
(
pMsg
->
msgType
));
mError
(
"msg:%p, failed to check mnode state since %s, type:%s"
,
pMsg
,
terrstr
(),
TMSG_INFO
(
pMsg
->
msgType
));
SEpSet
epSet
=
{
0
};
SEpSet
epSet
=
{
0
};
mndGetMnodeEpSet
(
pMsg
->
info
.
node
,
&
epSet
);
mndGetMnodeEpSet
(
pMsg
->
info
.
node
,
&
epSet
);
int32_t
contLen
=
tSerializeSEpSet
(
NULL
,
0
,
&
epSet
);
int32_t
contLen
=
tSerializeSEpSet
(
NULL
,
0
,
&
epSet
);
pMsg
->
info
.
rsp
=
rpcMallocCont
(
contLen
);
pMsg
->
info
.
rsp
=
rpcMallocCont
(
contLen
);
if
(
pMsg
->
info
.
rsp
!=
NULL
)
{
if
(
pMsg
->
info
.
rsp
!=
NULL
)
{
tSerializeSEpSet
(
pMsg
->
info
.
rsp
,
contLen
,
&
epSet
);
tSerializeSEpSet
(
pMsg
->
info
.
rsp
,
contLen
,
&
epSet
);
pMsg
->
info
.
rspLen
=
contLen
;
pMsg
->
info
.
rspLen
=
contLen
;
terrno
=
TSDB_CODE_RPC_REDIRECT
;
terrno
=
TSDB_CODE_RPC_REDIRECT
;
}
else
{
}
else
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
}
}
}
return
-
1
;
return
-
1
;
...
@@ -575,17 +584,20 @@ static int32_t mndCheckMsgContent(SRpcMsg *pMsg) {
...
@@ -575,17 +584,20 @@ static int32_t mndCheckMsgContent(SRpcMsg *pMsg) {
if
(
!
IsReq
(
pMsg
))
return
0
;
if
(
!
IsReq
(
pMsg
))
return
0
;
if
(
pMsg
->
contLen
!=
0
&&
pMsg
->
pCont
!=
NULL
)
return
0
;
if
(
pMsg
->
contLen
!=
0
&&
pMsg
->
pCont
!=
NULL
)
return
0
;
mError
(
"msg:%p, failed to check msg, cont:%p contLen:%d, app:%p type:%s"
,
pMsg
,
pMsg
->
pCont
,
pMsg
->
contLen
,
const
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
mGError
(
"msg:%p, failed to check msg, cont:%p contLen:%d, app:%p type:%s"
,
pMsg
,
pMsg
->
pCont
,
pMsg
->
contLen
,
pMsg
->
info
.
ahandle
,
TMSG_INFO
(
pMsg
->
msgType
));
pMsg
->
info
.
ahandle
,
TMSG_INFO
(
pMsg
->
msgType
));
terrno
=
TSDB_CODE_INVALID_MSG_LEN
;
terrno
=
TSDB_CODE_INVALID_MSG_LEN
;
return
-
1
;
return
-
1
;
}
}
int32_t
mndProcessRpcMsg
(
SRpcMsg
*
pMsg
)
{
int32_t
mndProcessRpcMsg
(
SRpcMsg
*
pMsg
)
{
SMnode
*
pMnode
=
pMsg
->
info
.
node
;
SMnode
*
pMnode
=
pMsg
->
info
.
node
;
const
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
MndMsgFp
fp
=
pMnode
->
msgFp
[
TMSG_INDEX
(
pMsg
->
msgType
)];
MndMsgFp
fp
=
pMnode
->
msgFp
[
TMSG_INDEX
(
pMsg
->
msgType
)];
if
(
fp
==
NULL
)
{
if
(
fp
==
NULL
)
{
mError
(
"msg:%p, failed to get msg handle, app:%p type:%s"
,
pMsg
,
pMsg
->
info
.
ahandle
,
TMSG_INFO
(
pMsg
->
msgType
));
m
G
Error
(
"msg:%p, failed to get msg handle, app:%p type:%s"
,
pMsg
,
pMsg
->
info
.
ahandle
,
TMSG_INFO
(
pMsg
->
msgType
));
terrno
=
TSDB_CODE_MSG_NOT_PROCESSED
;
terrno
=
TSDB_CODE_MSG_NOT_PROCESSED
;
return
-
1
;
return
-
1
;
}
}
...
@@ -593,18 +605,17 @@ int32_t mndProcessRpcMsg(SRpcMsg *pMsg) {
...
@@ -593,18 +605,17 @@ int32_t mndProcessRpcMsg(SRpcMsg *pMsg) {
if
(
mndCheckMsgContent
(
pMsg
)
!=
0
)
return
-
1
;
if
(
mndCheckMsgContent
(
pMsg
)
!=
0
)
return
-
1
;
if
(
mndCheckMnodeState
(
pMsg
)
!=
0
)
return
-
1
;
if
(
mndCheckMnodeState
(
pMsg
)
!=
0
)
return
-
1
;
STraceId
*
trace
=
&
pMsg
->
info
.
traceId
;
mGTrace
(
"msg:%p, start to process in mnode, app:%p type:%s"
,
pMsg
,
pMsg
->
info
.
ahandle
,
TMSG_INFO
(
pMsg
->
msgType
));
mGTrace
(
"msg:%p, start to process in mnode, app:%p type:%s"
,
pMsg
,
pMsg
->
info
.
ahandle
,
TMSG_INFO
(
pMsg
->
msgType
));
int32_t
code
=
(
*
fp
)(
pMsg
);
int32_t
code
=
(
*
fp
)(
pMsg
);
mndReleaseRpcRef
(
pMnode
);
mndReleaseRpcRef
(
pMnode
);
if
(
code
==
TSDB_CODE_ACTION_IN_PROGRESS
)
{
if
(
code
==
TSDB_CODE_ACTION_IN_PROGRESS
)
{
mTrace
(
"msg:%p, won't response immediately since in progress"
,
pMsg
);
m
G
Trace
(
"msg:%p, won't response immediately since in progress"
,
pMsg
);
}
else
if
(
code
==
0
)
{
}
else
if
(
code
==
0
)
{
mTrace
(
"msg:%p, successfully processed"
,
pMsg
);
m
G
Trace
(
"msg:%p, successfully processed"
,
pMsg
);
}
else
{
}
else
{
mError
(
"msg:%p, failed to process since %s, app:%p type:%s"
,
pMsg
,
terrstr
(),
pMsg
->
info
.
ahandle
,
m
G
Error
(
"msg:%p, failed to process since %s, app:%p type:%s"
,
pMsg
,
terrstr
(),
pMsg
->
info
.
ahandle
,
TMSG_INFO
(
pMsg
->
msgType
));
TMSG_INFO
(
pMsg
->
msgType
));
}
}
return
code
;
return
code
;
...
@@ -620,7 +631,6 @@ void mndSetMsgHandle(SMnode *pMnode, tmsg_t msgType, MndMsgFp fp) {
...
@@ -620,7 +631,6 @@ void mndSetMsgHandle(SMnode *pMnode, tmsg_t msgType, MndMsgFp fp) {
// Note: uid 0 is reserved
// Note: uid 0 is reserved
int64_t
mndGenerateUid
(
char
*
name
,
int32_t
len
)
{
int64_t
mndGenerateUid
(
char
*
name
,
int32_t
len
)
{
int32_t
hashval
=
MurmurHash3_32
(
name
,
len
);
int32_t
hashval
=
MurmurHash3_32
(
name
,
len
);
do
{
do
{
int64_t
us
=
taosGetTimestampUs
();
int64_t
us
=
taosGetTimestampUs
();
int64_t
x
=
(
us
&
0x000000FFFFFFFFFF
)
<<
24
;
int64_t
x
=
(
us
&
0x000000FFFFFFFFFF
)
<<
24
;
...
...
source/dnode/mnode/impl/src/mndProfile.c
浏览文件 @
980cf46b
...
@@ -122,30 +122,33 @@ static SConnObj *mndCreateConn(SMnode *pMnode, const char *user, int8_t connType
...
@@ -122,30 +122,33 @@ static SConnObj *mndCreateConn(SMnode *pMnode, const char *user, int8_t connType
int32_t
pid
,
const
char
*
app
,
int64_t
startTime
)
{
int32_t
pid
,
const
char
*
app
,
int64_t
startTime
)
{
SProfileMgmt
*
pMgmt
=
&
pMnode
->
profileMgmt
;
SProfileMgmt
*
pMgmt
=
&
pMnode
->
profileMgmt
;
char
connStr
[
255
]
=
{
0
};
char
connStr
[
255
]
=
{
0
};
int32_t
len
=
snprintf
(
connStr
,
sizeof
(
connStr
),
"%s%d%d%d%s"
,
user
,
ip
,
port
,
pid
,
app
);
int32_t
len
=
snprintf
(
connStr
,
sizeof
(
connStr
),
"%s%d%d%d%s"
,
user
,
ip
,
port
,
pid
,
app
);
uint32_t
connId
=
mndGenerateUid
(
connStr
,
len
);
uint32_t
connId
=
mndGenerateUid
(
connStr
,
len
);
if
(
startTime
==
0
)
startTime
=
taosGetTimestampMs
();
if
(
startTime
==
0
)
startTime
=
taosGetTimestampMs
();
SConnObj
connObj
=
{.
id
=
connId
,
SConnObj
connObj
=
{
.
connType
=
connType
,
.
id
=
connId
,
.
appStartTimeMs
=
startTime
,
.
connType
=
connType
,
.
pid
=
pid
,
.
appStartTimeMs
=
startTime
,
.
ip
=
ip
,
.
pid
=
pid
,
.
port
=
port
,
.
ip
=
ip
,
.
killed
=
0
,
.
port
=
port
,
.
loginTimeMs
=
taosGetTimestampMs
(),
.
killed
=
0
,
.
lastAccessTimeMs
=
0
,
.
loginTimeMs
=
taosGetTimestampMs
(),
.
killId
=
0
,
.
lastAccessTimeMs
=
0
,
.
numOfQueries
=
0
,
.
killId
=
0
,
.
pQueries
=
NULL
};
.
numOfQueries
=
0
,
.
pQueries
=
NULL
,
};
connObj
.
lastAccessTimeMs
=
connObj
.
loginTimeMs
;
connObj
.
lastAccessTimeMs
=
connObj
.
loginTimeMs
;
tstrncpy
(
connObj
.
user
,
user
,
TSDB_USER_LEN
);
tstrncpy
(
connObj
.
user
,
user
,
TSDB_USER_LEN
);
tstrncpy
(
connObj
.
app
,
app
,
TSDB_APP_NAME_LEN
);
tstrncpy
(
connObj
.
app
,
app
,
TSDB_APP_NAME_LEN
);
int32_t
keepTime
=
tsShellActivityTimer
*
3
;
int32_t
keepTime
=
tsShellActivityTimer
*
3
;
SConnObj
*
pConn
=
taosCachePut
(
pMgmt
->
connCache
,
&
connId
,
sizeof
(
uint32_t
),
&
connObj
,
sizeof
(
connObj
),
keepTime
*
1000
);
SConnObj
*
pConn
=
taosCachePut
(
pMgmt
->
connCache
,
&
connId
,
sizeof
(
uint32_t
),
&
connObj
,
sizeof
(
connObj
),
keepTime
*
1000
);
if
(
pConn
==
NULL
)
{
if
(
pConn
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
mError
(
"conn:%d, failed to put into cache since %s, user:%s"
,
connId
,
user
,
terrstr
());
mError
(
"conn:%d, failed to put into cache since %s, user:%s"
,
connId
,
user
,
terrstr
());
...
@@ -174,7 +177,6 @@ static SConnObj *mndAcquireConn(SMnode *pMnode, uint32_t connId) {
...
@@ -174,7 +177,6 @@ static SConnObj *mndAcquireConn(SMnode *pMnode, uint32_t connId) {
}
}
pConn
->
lastAccessTimeMs
=
taosGetTimestampMs
();
pConn
->
lastAccessTimeMs
=
taosGetTimestampMs
();
mTrace
(
"conn:%u, acquired from cache, data:%p"
,
pConn
->
id
,
pConn
);
mTrace
(
"conn:%u, acquired from cache, data:%p"
,
pConn
->
id
,
pConn
);
return
pConn
;
return
pConn
;
}
}
...
@@ -207,13 +209,14 @@ static void mndCancelGetNextConn(SMnode *pMnode, void *pIter) {
...
@@ -207,13 +209,14 @@ static void mndCancelGetNextConn(SMnode *pMnode, void *pIter) {
}
}
static
int32_t
mndProcessConnectReq
(
SRpcMsg
*
pReq
)
{
static
int32_t
mndProcessConnectReq
(
SRpcMsg
*
pReq
)
{
SMnode
*
pMnode
=
pReq
->
info
.
node
;
SMnode
*
pMnode
=
pReq
->
info
.
node
;
SUserObj
*
pUser
=
NULL
;
SUserObj
*
pUser
=
NULL
;
SDbObj
*
pDb
=
NULL
;
SDbObj
*
pDb
=
NULL
;
SConnObj
*
pConn
=
NULL
;
SConnObj
*
pConn
=
NULL
;
int32_t
code
=
-
1
;
int32_t
code
=
-
1
;
SConnectReq
connReq
=
{
0
};
SConnectReq
connReq
=
{
0
};
char
ip
[
30
]
=
{
0
};
char
ip
[
30
]
=
{
0
};
const
STraceId
*
trace
=
&
pReq
->
info
.
traceId
;
if
(
tDeserializeSConnectReq
(
pReq
->
pCont
,
pReq
->
contLen
,
&
connReq
)
!=
0
)
{
if
(
tDeserializeSConnectReq
(
pReq
->
pCont
,
pReq
->
contLen
,
&
connReq
)
!=
0
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
terrno
=
TSDB_CODE_INVALID_MSG
;
...
@@ -224,11 +227,11 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) {
...
@@ -224,11 +227,11 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) {
pUser
=
mndAcquireUser
(
pMnode
,
pReq
->
info
.
conn
.
user
);
pUser
=
mndAcquireUser
(
pMnode
,
pReq
->
info
.
conn
.
user
);
if
(
pUser
==
NULL
)
{
if
(
pUser
==
NULL
)
{
mError
(
"user:%s, failed to login while acquire user since %s"
,
pReq
->
info
.
conn
.
user
,
terrstr
());
m
G
Error
(
"user:%s, failed to login while acquire user since %s"
,
pReq
->
info
.
conn
.
user
,
terrstr
());
goto
CONN_OVER
;
goto
CONN_OVER
;
}
}
if
(
0
!=
strncmp
(
connReq
.
passwd
,
pUser
->
pass
,
TSDB_PASSWORD_LEN
-
1
))
{
if
(
0
!=
strncmp
(
connReq
.
passwd
,
pUser
->
pass
,
TSDB_PASSWORD_LEN
-
1
))
{
mError
(
"user:%s, failed to auth while acquire user, input:%s"
,
pReq
->
info
.
conn
.
user
,
connReq
.
passwd
);
m
G
Error
(
"user:%s, failed to auth while acquire user, input:%s"
,
pReq
->
info
.
conn
.
user
,
connReq
.
passwd
);
code
=
TSDB_CODE_RPC_AUTH_FAILURE
;
code
=
TSDB_CODE_RPC_AUTH_FAILURE
;
goto
CONN_OVER
;
goto
CONN_OVER
;
}
}
...
@@ -239,8 +242,8 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) {
...
@@ -239,8 +242,8 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) {
pDb
=
mndAcquireDb
(
pMnode
,
db
);
pDb
=
mndAcquireDb
(
pMnode
,
db
);
if
(
pDb
==
NULL
)
{
if
(
pDb
==
NULL
)
{
terrno
=
TSDB_CODE_MND_INVALID_DB
;
terrno
=
TSDB_CODE_MND_INVALID_DB
;
mError
(
"user:%s, failed to login from %s while use db:%s since %s"
,
pReq
->
info
.
conn
.
user
,
ip
,
connReq
.
db
,
m
G
Error
(
"user:%s, failed to login from %s while use db:%s since %s"
,
pReq
->
info
.
conn
.
user
,
ip
,
connReq
.
db
,
terrstr
());
terrstr
());
goto
CONN_OVER
;
goto
CONN_OVER
;
}
}
}
}
...
@@ -248,7 +251,7 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) {
...
@@ -248,7 +251,7 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) {
pConn
=
mndCreateConn
(
pMnode
,
pReq
->
info
.
conn
.
user
,
connReq
.
connType
,
pReq
->
info
.
conn
.
clientIp
,
pConn
=
mndCreateConn
(
pMnode
,
pReq
->
info
.
conn
.
user
,
connReq
.
connType
,
pReq
->
info
.
conn
.
clientIp
,
pReq
->
info
.
conn
.
clientPort
,
connReq
.
pid
,
connReq
.
app
,
connReq
.
startTime
);
pReq
->
info
.
conn
.
clientPort
,
connReq
.
pid
,
connReq
.
app
,
connReq
.
startTime
);
if
(
pConn
==
NULL
)
{
if
(
pConn
==
NULL
)
{
mError
(
"user:%s, failed to login from %s while create connection since %s"
,
pReq
->
info
.
conn
.
user
,
ip
,
terrstr
());
m
G
Error
(
"user:%s, failed to login from %s while create connection since %s"
,
pReq
->
info
.
conn
.
user
,
ip
,
terrstr
());
goto
CONN_OVER
;
goto
CONN_OVER
;
}
}
...
@@ -273,7 +276,7 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) {
...
@@ -273,7 +276,7 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) {
pReq
->
info
.
rspLen
=
contLen
;
pReq
->
info
.
rspLen
=
contLen
;
pReq
->
info
.
rsp
=
pRsp
;
pReq
->
info
.
rsp
=
pRsp
;
mDebug
(
"user:%s, login from %s:%d, conn:%u, app:%s"
,
pReq
->
info
.
conn
.
user
,
ip
,
pConn
->
port
,
pConn
->
id
,
connReq
.
app
);
m
G
Debug
(
"user:%s, login from %s:%d, conn:%u, app:%s"
,
pReq
->
info
.
conn
.
user
,
ip
,
pConn
->
port
,
pConn
->
id
,
connReq
.
app
);
code
=
0
;
code
=
0
;
...
@@ -302,7 +305,7 @@ static int32_t mndSaveQueryList(SConnObj *pConn, SQueryHbReqBasic *pBasic) {
...
@@ -302,7 +305,7 @@ static int32_t mndSaveQueryList(SConnObj *pConn, SQueryHbReqBasic *pBasic) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
SAppObj
*
mndCreateApp
(
SMnode
*
pMnode
,
uint32_t
clientIp
,
SAppHbReq
*
pReq
)
{
static
SAppObj
*
mndCreateApp
(
SMnode
*
pMnode
,
uint32_t
clientIp
,
SAppHbReq
*
pReq
)
{
SProfileMgmt
*
pMgmt
=
&
pMnode
->
profileMgmt
;
SProfileMgmt
*
pMgmt
=
&
pMnode
->
profileMgmt
;
SAppObj
app
;
SAppObj
app
;
...
@@ -314,22 +317,19 @@ static SAppObj *mndCreateApp(SMnode *pMnode, uint32_t clientIp, SAppHbReq* pReq)
...
@@ -314,22 +317,19 @@ static SAppObj *mndCreateApp(SMnode *pMnode, uint32_t clientIp, SAppHbReq* pReq)
memcpy
(
&
app
.
summary
,
&
pReq
->
summary
,
sizeof
(
pReq
->
summary
));
memcpy
(
&
app
.
summary
,
&
pReq
->
summary
,
sizeof
(
pReq
->
summary
));
app
.
lastAccessTimeMs
=
taosGetTimestampMs
();
app
.
lastAccessTimeMs
=
taosGetTimestampMs
();
int32_t
keepTime
=
tsShellActivityTimer
*
3
;
const
int32_t
keepTime
=
tsShellActivityTimer
*
3
;
SAppObj
*
pApp
=
taosCachePut
(
pMgmt
->
appCache
,
&
pReq
->
appId
,
sizeof
(
pReq
->
appId
),
&
app
,
sizeof
(
app
),
keepTime
*
1000
);
SAppObj
*
pApp
=
taosCachePut
(
pMgmt
->
appCache
,
&
pReq
->
appId
,
sizeof
(
pReq
->
appId
),
&
app
,
sizeof
(
app
),
keepTime
*
1000
);
if
(
pApp
==
NULL
)
{
if
(
pApp
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
mError
(
"failed to app %"
PRIx64
" into cache since %s"
,
pReq
->
appId
,
terrstr
());
mError
(
"failed to app %"
PRIx64
" into cache since %s"
,
pReq
->
appId
,
terrstr
());
return
NULL
;
return
NULL
;
}
}
mTrace
(
"app %"
PRIx64
" is put into cache"
,
pReq
->
appId
);
mTrace
(
"app %"
PRIx64
" is put into cache"
,
pReq
->
appId
);
return
pApp
;
return
pApp
;
}
}
static
void
mndFreeApp
(
SAppObj
*
pApp
)
{
static
void
mndFreeApp
(
SAppObj
*
pApp
)
{
mTrace
(
"app %"
PRIx64
" is destroyed"
,
pApp
->
appId
);
}
mTrace
(
"app %"
PRIx64
" is destroyed"
,
pApp
->
appId
);
}
static
SAppObj
*
mndAcquireApp
(
SMnode
*
pMnode
,
int64_t
appId
)
{
static
SAppObj
*
mndAcquireApp
(
SMnode
*
pMnode
,
int64_t
appId
)
{
SProfileMgmt
*
pMgmt
=
&
pMnode
->
profileMgmt
;
SProfileMgmt
*
pMgmt
=
&
pMnode
->
profileMgmt
;
...
@@ -356,7 +356,7 @@ static void mndReleaseApp(SMnode *pMnode, SAppObj *pApp) {
...
@@ -356,7 +356,7 @@ static void mndReleaseApp(SMnode *pMnode, SAppObj *pApp) {
void
*
mndGetNextApp
(
SMnode
*
pMnode
,
SCacheIter
*
pIter
)
{
void
*
mndGetNextApp
(
SMnode
*
pMnode
,
SCacheIter
*
pIter
)
{
SAppObj
*
pApp
=
NULL
;
SAppObj
*
pApp
=
NULL
;
bool
hasNext
=
taosCacheIterNext
(
pIter
);
bool
hasNext
=
taosCacheIterNext
(
pIter
);
if
(
hasNext
)
{
if
(
hasNext
)
{
size_t
dataLen
=
0
;
size_t
dataLen
=
0
;
pApp
=
taosCacheIterGetData
(
pIter
,
&
dataLen
);
pApp
=
taosCacheIterGetData
(
pIter
,
&
dataLen
);
...
@@ -439,8 +439,8 @@ static SClientHbRsp *mndMqHbBuildRsp(SMnode *pMnode, SClientHbReq *pReq) {
...
@@ -439,8 +439,8 @@ static SClientHbRsp *mndMqHbBuildRsp(SMnode *pMnode, SClientHbReq *pReq) {
}
}
static
int32_t
mndUpdateAppInfo
(
SMnode
*
pMnode
,
SClientHbReq
*
pHbReq
,
SRpcConnInfo
*
connInfo
)
{
static
int32_t
mndUpdateAppInfo
(
SMnode
*
pMnode
,
SClientHbReq
*
pHbReq
,
SRpcConnInfo
*
connInfo
)
{
SAppHbReq
*
pReq
=
&
pHbReq
->
app
;
SAppHbReq
*
pReq
=
&
pHbReq
->
app
;
SAppObj
*
pApp
=
mndAcquireApp
(
pMnode
,
pReq
->
appId
);
SAppObj
*
pApp
=
mndAcquireApp
(
pMnode
,
pReq
->
appId
);
if
(
pApp
==
NULL
)
{
if
(
pApp
==
NULL
)
{
pApp
=
mndCreateApp
(
pMnode
,
connInfo
->
clientIp
,
pReq
);
pApp
=
mndCreateApp
(
pMnode
,
connInfo
->
clientIp
,
pReq
);
if
(
pApp
==
NULL
)
{
if
(
pApp
==
NULL
)
{
...
@@ -448,7 +448,7 @@ static int32_t mndUpdateAppInfo(SMnode *pMnode, SClientHbReq *pHbReq, SRpcConnIn
...
@@ -448,7 +448,7 @@ static int32_t mndUpdateAppInfo(SMnode *pMnode, SClientHbReq *pHbReq, SRpcConnIn
return
-
1
;
return
-
1
;
}
else
{
}
else
{
mDebug
(
"a new app %"
PRIx64
"created"
,
pReq
->
appId
);
mDebug
(
"a new app %"
PRIx64
"created"
,
pReq
->
appId
);
mndReleaseApp
(
pMnode
,
pApp
);
mndReleaseApp
(
pMnode
,
pApp
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
}
}
...
@@ -464,7 +464,7 @@ static int32_t mndProcessQueryHeartBeat(SMnode *pMnode, SRpcMsg *pMsg, SClientHb
...
@@ -464,7 +464,7 @@ static int32_t mndProcessQueryHeartBeat(SMnode *pMnode, SRpcMsg *pMsg, SClientHb
SClientHbBatchRsp
*
pBatchRsp
)
{
SClientHbBatchRsp
*
pBatchRsp
)
{
SProfileMgmt
*
pMgmt
=
&
pMnode
->
profileMgmt
;
SProfileMgmt
*
pMgmt
=
&
pMnode
->
profileMgmt
;
SClientHbRsp
hbRsp
=
{.
connKey
=
pHbReq
->
connKey
,
.
status
=
0
,
.
info
=
NULL
,
.
query
=
NULL
};
SClientHbRsp
hbRsp
=
{.
connKey
=
pHbReq
->
connKey
,
.
status
=
0
,
.
info
=
NULL
,
.
query
=
NULL
};
SRpcConnInfo
connInfo
=
pMsg
->
info
.
conn
;
SRpcConnInfo
connInfo
=
pMsg
->
info
.
conn
;
mndUpdateAppInfo
(
pMnode
,
pHbReq
,
&
connInfo
);
mndUpdateAppInfo
(
pMnode
,
pHbReq
,
&
connInfo
);
...
@@ -637,9 +637,9 @@ static int32_t mndProcessKillQueryReq(SRpcMsg *pReq) {
...
@@ -637,9 +637,9 @@ static int32_t mndProcessKillQueryReq(SRpcMsg *pReq) {
}
}
mInfo
(
"kill query msg is received, queryId:%s"
,
killReq
.
queryStrId
);
mInfo
(
"kill query msg is received, queryId:%s"
,
killReq
.
queryStrId
);
int32_t
connId
=
0
;
int32_t
connId
=
0
;
uint64_t
queryId
=
0
;
uint64_t
queryId
=
0
;
char
*
p
=
strchr
(
killReq
.
queryStrId
,
':'
);
char
*
p
=
strchr
(
killReq
.
queryStrId
,
':'
);
if
(
NULL
==
p
)
{
if
(
NULL
==
p
)
{
mError
(
"invalid query id %s"
,
killReq
.
queryStrId
);
mError
(
"invalid query id %s"
,
killReq
.
queryStrId
);
terrno
=
TSDB_CODE_MND_INVALID_QUERY_ID
;
terrno
=
TSDB_CODE_MND_INVALID_QUERY_ID
;
...
@@ -853,12 +853,12 @@ static int32_t mndRetrieveQueries(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *p
...
@@ -853,12 +853,12 @@ static int32_t mndRetrieveQueries(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *p
}
}
static
int32_t
mndRetrieveApps
(
SRpcMsg
*
pReq
,
SShowObj
*
pShow
,
SSDataBlock
*
pBlock
,
int32_t
rows
)
{
static
int32_t
mndRetrieveApps
(
SRpcMsg
*
pReq
,
SShowObj
*
pShow
,
SSDataBlock
*
pBlock
,
int32_t
rows
)
{
SMnode
*
pMnode
=
pReq
->
info
.
node
;
SMnode
*
pMnode
=
pReq
->
info
.
node
;
SSdb
*
pSdb
=
pMnode
->
pSdb
;
SSdb
*
pSdb
=
pMnode
->
pSdb
;
int32_t
numOfRows
=
0
;
int32_t
numOfRows
=
0
;
int32_t
cols
=
0
;
int32_t
cols
=
0
;
SAppObj
*
pApp
=
NULL
;
SAppObj
*
pApp
=
NULL
;
if
(
pShow
->
pIter
==
NULL
)
{
if
(
pShow
->
pIter
==
NULL
)
{
SProfileMgmt
*
pMgmt
=
&
pMnode
->
profileMgmt
;
SProfileMgmt
*
pMgmt
=
&
pMnode
->
profileMgmt
;
pShow
->
pIter
=
taosCacheCreateIter
(
pMgmt
->
appCache
);
pShow
->
pIter
=
taosCacheCreateIter
(
pMgmt
->
appCache
);
...
@@ -931,7 +931,6 @@ static int32_t mndRetrieveApps(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlo
...
@@ -931,7 +931,6 @@ static int32_t mndRetrieveApps(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlo
return
numOfRows
;
return
numOfRows
;
}
}
static
void
mndCancelGetNextQuery
(
SMnode
*
pMnode
,
void
*
pIter
)
{
static
void
mndCancelGetNextQuery
(
SMnode
*
pMnode
,
void
*
pIter
)
{
if
(
pIter
!=
NULL
)
{
if
(
pIter
!=
NULL
)
{
taosCacheDestroyIter
(
pIter
);
taosCacheDestroyIter
(
pIter
);
...
...
source/dnode/vnode/src/inc/vnd.h
浏览文件 @
980cf46b
...
@@ -26,13 +26,21 @@ extern "C" {
...
@@ -26,13 +26,21 @@ extern "C" {
#endif
#endif
// clang-format off
// clang-format off
#define vFatal(...) do { if (vDebugFlag & DEBUG_FATAL) { taosPrintLog("VND FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }} while(0)
#define vError(...) do { if (vDebugFlag & DEBUG_ERROR) { taosPrintLog("VND ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }} while(0)
#define vFatal(...) { if (vDebugFlag & DEBUG_FATAL) { taosPrintLog("VND FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }}
#define vWarn(...) do { if (vDebugFlag & DEBUG_WARN) { taosPrintLog("VND WARN ", DEBUG_WARN, 255, __VA_ARGS__); }} while(0)
#define vError(...) { if (vDebugFlag & DEBUG_ERROR) { taosPrintLog("VND ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }}
#define vInfo(...) do { if (vDebugFlag & DEBUG_INFO) { taosPrintLog("VND ", DEBUG_INFO, 255, __VA_ARGS__); }} while(0)
#define vWarn(...) { if (vDebugFlag & DEBUG_WARN) { taosPrintLog("VND WARN ", DEBUG_WARN, 255, __VA_ARGS__); }}
#define vDebug(...) do { if (vDebugFlag & DEBUG_DEBUG) { taosPrintLog("VND ", DEBUG_DEBUG, vDebugFlag, __VA_ARGS__); }} while(0)
#define vInfo(...) { if (vDebugFlag & DEBUG_INFO) { taosPrintLog("VND ", DEBUG_INFO, 255, __VA_ARGS__); }}
#define vTrace(...) do { if (vDebugFlag & DEBUG_TRACE) { taosPrintLog("VND ", DEBUG_TRACE, vDebugFlag, __VA_ARGS__); }} while(0)
#define vDebug(...) { if (vDebugFlag & DEBUG_DEBUG) { taosPrintLog("VND ", DEBUG_DEBUG, vDebugFlag, __VA_ARGS__); }}
#define vGTrace(param, ...) do { char buf[40] = {0}; TRACE_TO_STR(trace, buf); vTrace(param " GTID: %s", __VA_ARGS__, buf);} while(0)//#define vDye(...) do
#define vTrace(...) { if (vDebugFlag & DEBUG_TRACE) { taosPrintLog("VND ", DEBUG_TRACE, vDebugFlag, __VA_ARGS__); }}
#define vGFatal(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); vFatal(param ", gtid:%s", __VA_ARGS__, buf);}
#define vGError(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); vError(param ", gtid:%s", __VA_ARGS__, buf);}
#define vGWarn(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); vWarn (param ", gtid:%s", __VA_ARGS__, buf);}
#define vGInfo(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); vInfo (param ", gtid:%s", __VA_ARGS__, buf);}
#define vGDebug(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); vDebug(param ", gtid:%s", __VA_ARGS__, buf);}
#define vGTrace(param, ...) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); vTrace(param ", gtid:%s", __VA_ARGS__, buf);}
// clang-format on
// clang-format on
// vnodeCfg.c
// vnodeCfg.c
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
980cf46b
...
@@ -903,7 +903,6 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator) {
...
@@ -903,7 +903,6 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator) {
// NOTE: this operator does never check if current status is done or not
// NOTE: this operator does never check if current status is done or not
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
SStreamBlockScanInfo
*
pInfo
=
pOperator
->
info
;
SStreamBlockScanInfo
*
pInfo
=
pOperator
->
info
;
int32_t
rows
=
0
;
pTaskInfo
->
code
=
pOperator
->
fpSet
.
_openFn
(
pOperator
);
pTaskInfo
->
code
=
pOperator
->
fpSet
.
_openFn
(
pOperator
);
if
(
pTaskInfo
->
code
!=
TSDB_CODE_SUCCESS
||
pOperator
->
status
==
OP_EXEC_DONE
)
{
if
(
pTaskInfo
->
code
!=
TSDB_CODE_SUCCESS
||
pOperator
->
status
==
OP_EXEC_DONE
)
{
...
@@ -1023,9 +1022,6 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator) {
...
@@ -1023,9 +1022,6 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator) {
pTaskInfo
->
code
=
terrno
;
pTaskInfo
->
code
=
terrno
;
return
NULL
;
return
NULL
;
}
}
rows
=
pBlockInfo
->
rows
;
// currently only the tbname pseudo column
// currently only the tbname pseudo column
if
(
pInfo
->
numOfPseudoExpr
>
0
)
{
if
(
pInfo
->
numOfPseudoExpr
>
0
)
{
addTagPseudoColumnData
(
&
pInfo
->
readHandle
,
pInfo
->
pPseudoExpr
,
pInfo
->
numOfPseudoExpr
,
pInfo
->
pRes
);
addTagPseudoColumnData
(
&
pInfo
->
readHandle
,
pInfo
->
pPseudoExpr
,
pInfo
->
numOfPseudoExpr
,
pInfo
->
pRes
);
...
@@ -1033,14 +1029,16 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator) {
...
@@ -1033,14 +1029,16 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator) {
doFilter
(
pInfo
->
pCondition
,
pInfo
->
pRes
);
doFilter
(
pInfo
->
pCondition
,
pInfo
->
pRes
);
blockDataUpdateTsWindow
(
pInfo
->
pRes
,
pInfo
->
primaryTsIndex
);
blockDataUpdateTsWindow
(
pInfo
->
pRes
,
pInfo
->
primaryTsIndex
);
break
;
if
(
pBlockInfo
->
rows
>
0
)
{
break
;
}
}
}
// record the scan action.
// record the scan action.
pInfo
->
numOfExec
++
;
pInfo
->
numOfExec
++
;
pOperator
->
resultInfo
.
totalRows
+=
pBlockInfo
->
rows
;
pOperator
->
resultInfo
.
totalRows
+=
pBlockInfo
->
rows
;
if
(
rows
==
0
)
{
if
(
pBlockInfo
->
rows
==
0
)
{
pOperator
->
status
=
OP_EXEC_DONE
;
pOperator
->
status
=
OP_EXEC_DONE
;
}
else
if
(
pInfo
->
pUpdateInfo
)
{
}
else
if
(
pInfo
->
pUpdateInfo
)
{
pInfo
->
tsArrayIndex
=
0
;
pInfo
->
tsArrayIndex
=
0
;
...
@@ -1056,7 +1054,7 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator) {
...
@@ -1056,7 +1054,7 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator) {
}
}
}
}
return
(
rows
==
0
)
?
NULL
:
pInfo
->
pRes
;
return
(
pBlockInfo
->
rows
==
0
)
?
NULL
:
pInfo
->
pRes
;
}
}
}
}
...
...
source/libs/executor/src/timewindowoperator.c
浏览文件 @
980cf46b
...
@@ -1270,7 +1270,8 @@ static int32_t getAllIntervalWindow(SHashObj* pHashMap, SArray* resWins) {
...
@@ -1270,7 +1270,8 @@ static int32_t getAllIntervalWindow(SHashObj* pHashMap, SArray* resWins) {
}
}
bool
isCloseWindow
(
STimeWindow
*
pWin
,
STimeWindowAggSupp
*
pSup
)
{
bool
isCloseWindow
(
STimeWindow
*
pWin
,
STimeWindowAggSupp
*
pSup
)
{
return
pWin
->
ekey
<
pSup
->
maxTs
-
pSup
->
waterMark
;
ASSERT
(
pSup
->
maxTs
==
INT64_MIN
||
pSup
->
maxTs
>
0
);
return
pSup
->
maxTs
!=
INT64_MIN
&&
pWin
->
ekey
<
pSup
->
maxTs
-
pSup
->
waterMark
;
}
}
static
int32_t
closeIntervalWindow
(
SHashObj
*
pHashMap
,
STimeWindowAggSupp
*
pSup
,
SInterval
*
pInterval
,
static
int32_t
closeIntervalWindow
(
SHashObj
*
pHashMap
,
STimeWindowAggSupp
*
pSup
,
SInterval
*
pInterval
,
...
@@ -2141,7 +2142,9 @@ void compactFunctions(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx, int3
...
@@ -2141,7 +2142,9 @@ void compactFunctions(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx, int3
static
void
rebuildIntervalWindow
(
SStreamFinalIntervalOperatorInfo
*
pInfo
,
SExprSupp
*
pSup
,
SArray
*
pWinArray
,
int32_t
groupId
,
static
void
rebuildIntervalWindow
(
SStreamFinalIntervalOperatorInfo
*
pInfo
,
SExprSupp
*
pSup
,
SArray
*
pWinArray
,
int32_t
groupId
,
int32_t
numOfOutput
,
SExecTaskInfo
*
pTaskInfo
)
{
int32_t
numOfOutput
,
SExecTaskInfo
*
pTaskInfo
)
{
int32_t
size
=
taosArrayGetSize
(
pWinArray
);
int32_t
size
=
taosArrayGetSize
(
pWinArray
);
ASSERT
(
pInfo
->
pChildren
);
if
(
!
pInfo
->
pChildren
)
{
return
;
}
for
(
int32_t
i
=
0
;
i
<
size
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
i
++
)
{
STimeWindow
*
pParentWin
=
taosArrayGet
(
pWinArray
,
i
);
STimeWindow
*
pParentWin
=
taosArrayGet
(
pWinArray
,
i
);
SResultRow
*
pCurResult
=
NULL
;
SResultRow
*
pCurResult
=
NULL
;
...
@@ -2339,6 +2342,7 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) {
...
@@ -2339,6 +2342,7 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) {
SStreamFinalIntervalOperatorInfo
*
pChInfo
=
pChildOp
->
info
;
SStreamFinalIntervalOperatorInfo
*
pChInfo
=
pChildOp
->
info
;
setInputDataBlock
(
pChildOp
,
pChildOp
->
exprSupp
.
pCtx
,
pBlock
,
pChInfo
->
order
,
MAIN_SCAN
,
true
);
setInputDataBlock
(
pChildOp
,
pChildOp
->
exprSupp
.
pCtx
,
pBlock
,
pChInfo
->
order
,
MAIN_SCAN
,
true
);
doHashInterval
(
pChildOp
,
pBlock
,
pBlock
->
info
.
groupId
,
NULL
);
doHashInterval
(
pChildOp
,
pBlock
,
pBlock
->
info
.
groupId
,
NULL
);
pChInfo
->
twAggSup
.
maxTs
=
TMAX
(
pChInfo
->
twAggSup
.
maxTs
,
pBlock
->
info
.
window
.
ekey
);
}
}
maxTs
=
TMAX
(
maxTs
,
pBlock
->
info
.
window
.
ekey
);
maxTs
=
TMAX
(
maxTs
,
pBlock
->
info
.
window
.
ekey
);
}
}
...
@@ -2406,7 +2410,7 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream,
...
@@ -2406,7 +2410,7 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream,
initResultRowInfo
(
&
pInfo
->
binfo
.
resultRowInfo
);
initResultRowInfo
(
&
pInfo
->
binfo
.
resultRowInfo
);
pInfo
->
pChildren
=
NULL
;
pInfo
->
pChildren
=
NULL
;
if
(
numOfChild
>
0
)
{
if
(
numOfChild
>
0
)
{
pInfo
->
pChildren
=
taosArrayInit
(
numOfChild
,
sizeof
(
SOperatorInfo
));
pInfo
->
pChildren
=
taosArrayInit
(
numOfChild
,
sizeof
(
void
*
));
for
(
int32_t
i
=
0
;
i
<
numOfChild
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
numOfChild
;
i
++
)
{
SOperatorInfo
*
pChildOp
=
createStreamFinalIntervalOperatorInfo
(
NULL
,
pPhyNode
,
pTaskInfo
,
0
);
SOperatorInfo
*
pChildOp
=
createStreamFinalIntervalOperatorInfo
(
NULL
,
pPhyNode
,
pTaskInfo
,
0
);
if
(
pChildOp
)
{
if
(
pChildOp
)
{
...
...
source/libs/function/src/builtinsimpl.c
浏览文件 @
980cf46b
...
@@ -195,13 +195,13 @@ typedef struct SMavgInfo {
...
@@ -195,13 +195,13 @@ typedef struct SMavgInfo {
}
SMavgInfo
;
}
SMavgInfo
;
typedef
struct
SSampleInfo
{
typedef
struct
SSampleInfo
{
int32_t
samples
;
int32_t
samples
;
int32_t
totalPoints
;
int32_t
totalPoints
;
int32_t
numSampled
;
int32_t
numSampled
;
uint8_t
colType
;
uint8_t
colType
;
int16_t
colBytes
;
int16_t
colBytes
;
char
*
data
;
char
*
data
;
int64_t
*
timestamp
;
STuplePos
*
tuplePos
;
}
SSampleInfo
;
}
SSampleInfo
;
typedef
struct
STailItem
{
typedef
struct
STailItem
{
...
@@ -4350,7 +4350,7 @@ bool getSampleFuncEnv(SFunctionNode* pFunc, SFuncExecEnv* pEnv) {
...
@@ -4350,7 +4350,7 @@ bool getSampleFuncEnv(SFunctionNode* pFunc, SFuncExecEnv* pEnv) {
SColumnNode
*
pCol
=
(
SColumnNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
0
);
SColumnNode
*
pCol
=
(
SColumnNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
0
);
SValueNode
*
pVal
=
(
SValueNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
1
);
SValueNode
*
pVal
=
(
SValueNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
1
);
int32_t
numOfSamples
=
pVal
->
datum
.
i
;
int32_t
numOfSamples
=
pVal
->
datum
.
i
;
pEnv
->
calcMemSize
=
sizeof
(
SSampleInfo
)
+
numOfSamples
*
(
pCol
->
node
.
resType
.
bytes
+
sizeof
(
int64_t
));
pEnv
->
calcMemSize
=
sizeof
(
SSampleInfo
)
+
numOfSamples
*
(
pCol
->
node
.
resType
.
bytes
+
sizeof
(
STuplePos
));
return
true
;
return
true
;
}
}
...
@@ -4371,25 +4371,30 @@ bool sampleFunctionSetup(SqlFunctionCtx* pCtx, SResultRowEntryInfo* pResultInfo)
...
@@ -4371,25 +4371,30 @@ bool sampleFunctionSetup(SqlFunctionCtx* pCtx, SResultRowEntryInfo* pResultInfo)
return
false
;
return
false
;
}
}
pInfo
->
data
=
(
char
*
)
pInfo
+
sizeof
(
SSampleInfo
);
pInfo
->
data
=
(
char
*
)
pInfo
+
sizeof
(
SSampleInfo
);
pInfo
->
t
imestamp
=
(
int64_t
*
)((
char
*
)
pInfo
+
sizeof
(
SSampleInfo
)
+
pInfo
->
samples
*
pInfo
->
colBytes
);
pInfo
->
t
uplePos
=
(
STuplePos
*
)((
char
*
)
pInfo
+
sizeof
(
SSampleInfo
)
+
pInfo
->
samples
*
pInfo
->
colBytes
);
return
true
;
return
true
;
}
}
static
void
sampleAssignResult
(
SSampleInfo
*
pInfo
,
char
*
data
,
TSKEY
ts
,
int32_t
index
)
{
static
void
sampleAssignResult
(
SSampleInfo
*
pInfo
,
char
*
data
,
int32_t
index
)
{
assignVal
(
pInfo
->
data
+
index
*
pInfo
->
colBytes
,
data
,
pInfo
->
colBytes
,
pInfo
->
colType
);
assignVal
(
pInfo
->
data
+
index
*
pInfo
->
colBytes
,
data
,
pInfo
->
colBytes
,
pInfo
->
colType
);
*
(
pInfo
->
timestamp
+
index
)
=
ts
;
}
}
static
void
doReservoirSample
(
S
SampleInfo
*
pInfo
,
char
*
data
,
TSKEY
ts
,
int32_t
index
)
{
static
void
doReservoirSample
(
S
qlFunctionCtx
*
pCtx
,
SSampleInfo
*
pInfo
,
char
*
data
,
int32_t
index
)
{
pInfo
->
totalPoints
++
;
pInfo
->
totalPoints
++
;
if
(
pInfo
->
numSampled
<
pInfo
->
samples
)
{
if
(
pInfo
->
numSampled
<
pInfo
->
samples
)
{
sampleAssignResult
(
pInfo
,
data
,
ts
,
pInfo
->
numSampled
);
sampleAssignResult
(
pInfo
,
data
,
pInfo
->
numSampled
);
if
(
pCtx
->
subsidiaries
.
num
>
0
)
{
saveTupleData
(
pCtx
,
index
,
pCtx
->
pSrcBlock
,
pInfo
->
tuplePos
+
pInfo
->
numSampled
*
sizeof
(
STuplePos
));
}
pInfo
->
numSampled
++
;
pInfo
->
numSampled
++
;
}
else
{
}
else
{
int32_t
j
=
taosRand
()
%
(
pInfo
->
totalPoints
);
int32_t
j
=
taosRand
()
%
(
pInfo
->
totalPoints
);
if
(
j
<
pInfo
->
samples
)
{
if
(
j
<
pInfo
->
samples
)
{
sampleAssignResult
(
pInfo
,
data
,
ts
,
j
);
sampleAssignResult
(
pInfo
,
data
,
j
);
if
(
pCtx
->
subsidiaries
.
num
>
0
)
{
copyTupleData
(
pCtx
,
index
,
pCtx
->
pSrcBlock
,
pInfo
->
tuplePos
+
j
*
sizeof
(
STuplePos
));
}
}
}
}
}
}
}
...
@@ -4400,11 +4405,6 @@ int32_t sampleFunction(SqlFunctionCtx* pCtx) {
...
@@ -4400,11 +4405,6 @@ int32_t sampleFunction(SqlFunctionCtx* pCtx) {
SInputColumnInfoData
*
pInput
=
&
pCtx
->
input
;
SInputColumnInfoData
*
pInput
=
&
pCtx
->
input
;
TSKEY
*
tsList
=
NULL
;
if
(
pInput
->
pPTS
!=
NULL
)
{
tsList
=
(
int64_t
*
)
pInput
->
pPTS
->
pData
;
}
SColumnInfoData
*
pInputCol
=
pInput
->
pData
[
0
];
SColumnInfoData
*
pInputCol
=
pInput
->
pData
[
0
];
for
(
int32_t
i
=
pInput
->
startRowIndex
;
i
<
pInput
->
numOfRows
+
pInput
->
startRowIndex
;
i
+=
1
)
{
for
(
int32_t
i
=
pInput
->
startRowIndex
;
i
<
pInput
->
numOfRows
+
pInput
->
startRowIndex
;
i
+=
1
)
{
if
(
colDataIsNull_s
(
pInputCol
,
i
))
{
if
(
colDataIsNull_s
(
pInputCol
,
i
))
{
...
@@ -4412,7 +4412,7 @@ int32_t sampleFunction(SqlFunctionCtx* pCtx) {
...
@@ -4412,7 +4412,7 @@ int32_t sampleFunction(SqlFunctionCtx* pCtx) {
}
}
char
*
data
=
colDataGetData
(
pInputCol
,
i
);
char
*
data
=
colDataGetData
(
pInputCol
,
i
);
doReservoirSample
(
p
Info
,
data
,
/*tsList[i]*/
0
,
i
);
doReservoirSample
(
p
Ctx
,
pInfo
,
data
,
i
);
}
}
SET_VAL
(
pResInfo
,
pInfo
->
numSampled
,
pInfo
->
numSampled
);
SET_VAL
(
pResInfo
,
pInfo
->
numSampled
,
pInfo
->
numSampled
);
...
@@ -4431,6 +4431,7 @@ int32_t sampleFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
...
@@ -4431,6 +4431,7 @@ int32_t sampleFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
int32_t
currentRow
=
pBlock
->
info
.
rows
;
int32_t
currentRow
=
pBlock
->
info
.
rows
;
for
(
int32_t
i
=
0
;
i
<
pInfo
->
numSampled
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pInfo
->
numSampled
;
++
i
)
{
colDataAppend
(
pCol
,
currentRow
+
i
,
pInfo
->
data
+
i
*
pInfo
->
colBytes
,
false
);
colDataAppend
(
pCol
,
currentRow
+
i
,
pInfo
->
data
+
i
*
pInfo
->
colBytes
,
false
);
setSelectivityValue
(
pCtx
,
pBlock
,
pInfo
->
tuplePos
+
i
*
sizeof
(
STuplePos
),
currentRow
+
i
);
}
}
return
pInfo
->
numSampled
;
return
pInfo
->
numSampled
;
...
...
source/libs/nodes/src/nodesCloneFuncs.c
浏览文件 @
980cf46b
...
@@ -557,6 +557,14 @@ static SNode* physiSessionCopy(const SSessionWinodwPhysiNode* pSrc, SSessionWino
...
@@ -557,6 +557,14 @@ static SNode* physiSessionCopy(const SSessionWinodwPhysiNode* pSrc, SSessionWino
return
(
SNode
*
)
pDst
;
return
(
SNode
*
)
pDst
;
}
}
static
SNode
*
physiPartitionCopy
(
const
SPartitionPhysiNode
*
pSrc
,
SPartitionPhysiNode
*
pDst
)
{
COPY_BASE_OBJECT_FIELD
(
node
,
physiNodeCopy
);
CLONE_NODE_LIST_FIELD
(
pExprs
);
CLONE_NODE_LIST_FIELD
(
pPartitionKeys
);
CLONE_NODE_LIST_FIELD
(
pTargets
);
return
(
SNode
*
)
pDst
;
}
static
SNode
*
dataBlockDescCopy
(
const
SDataBlockDescNode
*
pSrc
,
SDataBlockDescNode
*
pDst
)
{
static
SNode
*
dataBlockDescCopy
(
const
SDataBlockDescNode
*
pSrc
,
SDataBlockDescNode
*
pDst
)
{
COPY_SCALAR_FIELD
(
dataBlockId
);
COPY_SCALAR_FIELD
(
dataBlockId
);
CLONE_NODE_LIST_FIELD
(
pSlots
);
CLONE_NODE_LIST_FIELD
(
pSlots
);
...
@@ -702,6 +710,8 @@ SNode* nodesCloneNode(const SNode* pNode) {
...
@@ -702,6 +710,8 @@ SNode* nodesCloneNode(const SNode* pNode) {
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION
:
return
physiSessionCopy
((
const
SSessionWinodwPhysiNode
*
)
pNode
,
(
SSessionWinodwPhysiNode
*
)
pDst
);
return
physiSessionCopy
((
const
SSessionWinodwPhysiNode
*
)
pNode
,
(
SSessionWinodwPhysiNode
*
)
pDst
);
case
QUERY_NODE_PHYSICAL_PLAN_PARTITION
:
return
physiPartitionCopy
((
const
SPartitionPhysiNode
*
)
pNode
,
(
SPartitionPhysiNode
*
)
pDst
);
default:
default:
break
;
break
;
}
}
...
...
source/libs/parser/src/parInsert.c
浏览文件 @
980cf46b
...
@@ -257,7 +257,7 @@ static int32_t checkAuth(SInsertParseContext* pCxt, char* pDbFname, bool* pPass)
...
@@ -257,7 +257,7 @@ static int32_t checkAuth(SInsertParseContext* pCxt, char* pDbFname, bool* pPass)
if
(
pBasicCtx
->
async
)
{
if
(
pBasicCtx
->
async
)
{
return
getUserAuthFromCache
(
pCxt
->
pMetaCache
,
pBasicCtx
->
pUser
,
pDbFname
,
AUTH_TYPE_WRITE
,
pPass
);
return
getUserAuthFromCache
(
pCxt
->
pMetaCache
,
pBasicCtx
->
pUser
,
pDbFname
,
AUTH_TYPE_WRITE
,
pPass
);
}
}
SRequestConnInfo
conn
=
{.
pTrans
=
pBasicCtx
->
pTransporter
,
SRequestConnInfo
conn
=
{.
pTrans
=
pBasicCtx
->
pTransporter
,
.
requestId
=
pBasicCtx
->
requestId
,
.
requestId
=
pBasicCtx
->
requestId
,
.
requestObjRefId
=
pBasicCtx
->
requestRid
,
.
requestObjRefId
=
pBasicCtx
->
requestRid
,
.
mgmtEps
=
pBasicCtx
->
mgmtEpSet
};
.
mgmtEps
=
pBasicCtx
->
mgmtEpSet
};
...
@@ -270,11 +270,11 @@ static int32_t getTableSchema(SInsertParseContext* pCxt, SName* pTbName, bool is
...
@@ -270,11 +270,11 @@ static int32_t getTableSchema(SInsertParseContext* pCxt, SName* pTbName, bool is
if
(
pBasicCtx
->
async
)
{
if
(
pBasicCtx
->
async
)
{
return
getTableMetaFromCache
(
pCxt
->
pMetaCache
,
pTbName
,
pTableMeta
);
return
getTableMetaFromCache
(
pCxt
->
pMetaCache
,
pTbName
,
pTableMeta
);
}
}
SRequestConnInfo
conn
=
{.
pTrans
=
pBasicCtx
->
pTransporter
,
SRequestConnInfo
conn
=
{.
pTrans
=
pBasicCtx
->
pTransporter
,
.
requestId
=
pBasicCtx
->
requestId
,
.
requestId
=
pBasicCtx
->
requestId
,
.
requestObjRefId
=
pBasicCtx
->
requestRid
,
.
requestObjRefId
=
pBasicCtx
->
requestRid
,
.
mgmtEps
=
pBasicCtx
->
mgmtEpSet
};
.
mgmtEps
=
pBasicCtx
->
mgmtEpSet
};
if
(
isStb
)
{
if
(
isStb
)
{
return
catalogGetSTableMeta
(
pBasicCtx
->
pCatalog
,
&
conn
,
pTbName
,
pTableMeta
);
return
catalogGetSTableMeta
(
pBasicCtx
->
pCatalog
,
&
conn
,
pTbName
,
pTableMeta
);
}
}
...
@@ -286,7 +286,7 @@ static int32_t getTableVgroup(SInsertParseContext* pCxt, SName* pTbName, SVgroup
...
@@ -286,7 +286,7 @@ static int32_t getTableVgroup(SInsertParseContext* pCxt, SName* pTbName, SVgroup
if
(
pBasicCtx
->
async
)
{
if
(
pBasicCtx
->
async
)
{
return
getTableVgroupFromCache
(
pCxt
->
pMetaCache
,
pTbName
,
pVg
);
return
getTableVgroupFromCache
(
pCxt
->
pMetaCache
,
pTbName
,
pVg
);
}
}
SRequestConnInfo
conn
=
{.
pTrans
=
pBasicCtx
->
pTransporter
,
SRequestConnInfo
conn
=
{.
pTrans
=
pBasicCtx
->
pTransporter
,
.
requestId
=
pBasicCtx
->
requestId
,
.
requestId
=
pBasicCtx
->
requestId
,
.
requestObjRefId
=
pBasicCtx
->
requestRid
,
.
requestObjRefId
=
pBasicCtx
->
requestRid
,
.
mgmtEps
=
pBasicCtx
->
mgmtEpSet
};
.
mgmtEps
=
pBasicCtx
->
mgmtEpSet
};
...
@@ -322,7 +322,7 @@ static int32_t getDBCfg(SInsertParseContext* pCxt, const char* pDbFName, SDbCfgI
...
@@ -322,7 +322,7 @@ static int32_t getDBCfg(SInsertParseContext* pCxt, const char* pDbFName, SDbCfgI
if
(
pBasicCtx
->
async
)
{
if
(
pBasicCtx
->
async
)
{
CHECK_CODE
(
getDbCfgFromCache
(
pCxt
->
pMetaCache
,
pDbFName
,
pInfo
));
CHECK_CODE
(
getDbCfgFromCache
(
pCxt
->
pMetaCache
,
pDbFName
,
pInfo
));
}
else
{
}
else
{
SRequestConnInfo
conn
=
{.
pTrans
=
pBasicCtx
->
pTransporter
,
SRequestConnInfo
conn
=
{.
pTrans
=
pBasicCtx
->
pTransporter
,
.
requestId
=
pBasicCtx
->
requestId
,
.
requestId
=
pBasicCtx
->
requestId
,
.
requestObjRefId
=
pBasicCtx
->
requestRid
,
.
requestObjRefId
=
pBasicCtx
->
requestRid
,
.
mgmtEps
=
pBasicCtx
->
mgmtEpSet
};
.
mgmtEps
=
pBasicCtx
->
mgmtEpSet
};
...
@@ -1315,15 +1315,6 @@ static void destroyInsertParseContext(SInsertParseContext* pCxt) {
...
@@ -1315,15 +1315,6 @@ static void destroyInsertParseContext(SInsertParseContext* pCxt) {
destroyBlockArrayList
(
pCxt
->
pVgDataBlocks
);
destroyBlockArrayList
(
pCxt
->
pVgDataBlocks
);
}
}
static
int32_t
checkSchemalessDb
(
SInsertParseContext
*
pCxt
,
char
*
pDbName
)
{
// SDbCfgInfo pInfo = {0};
// char fullName[TSDB_TABLE_FNAME_LEN];
// snprintf(fullName, sizeof(fullName), "%d.%s", pCxt->pComCxt->acctId, pDbName);
// CHECK_CODE(getDBCfg(pCxt, fullName, &pInfo));
// return pInfo.schemaless ? TSDB_CODE_SML_INVALID_DB_CONF : TSDB_CODE_SUCCESS;
return
TSDB_CODE_SUCCESS
;
}
// tb_name
// tb_name
// [USING stb_name [(tag1_name, ...)] TAGS (tag1_value, ...)]
// [USING stb_name [(tag1_name, ...)] TAGS (tag1_value, ...)]
// [(field1_name, ...)]
// [(field1_name, ...)]
...
@@ -1377,8 +1368,6 @@ static int32_t parseInsertBody(SInsertParseContext* pCxt) {
...
@@ -1377,8 +1368,6 @@ static int32_t parseInsertBody(SInsertParseContext* pCxt) {
SName
name
;
SName
name
;
CHECK_CODE
(
createSName
(
&
name
,
&
tbnameToken
,
pCxt
->
pComCxt
->
acctId
,
pCxt
->
pComCxt
->
db
,
&
pCxt
->
msg
));
CHECK_CODE
(
createSName
(
&
name
,
&
tbnameToken
,
pCxt
->
pComCxt
->
acctId
,
pCxt
->
pComCxt
->
db
,
&
pCxt
->
msg
));
CHECK_CODE
(
checkSchemalessDb
(
pCxt
,
name
.
dbname
));
tNameExtractFullName
(
&
name
,
tbFName
);
tNameExtractFullName
(
&
name
,
tbFName
);
CHECK_CODE
(
taosHashPut
(
pCxt
->
pTableNameHashObj
,
tbFName
,
strlen
(
tbFName
),
&
name
,
sizeof
(
SName
)));
CHECK_CODE
(
taosHashPut
(
pCxt
->
pTableNameHashObj
,
tbFName
,
strlen
(
tbFName
),
&
name
,
sizeof
(
SName
)));
char
dbFName
[
TSDB_DB_FNAME_LEN
];
char
dbFName
[
TSDB_DB_FNAME_LEN
];
...
...
source/libs/planner/src/planLogicCreater.c
浏览文件 @
980cf46b
...
@@ -56,8 +56,12 @@ static EDealRes doRewriteExpr(SNode** pNode, void* pContext) {
...
@@ -56,8 +56,12 @@ static EDealRes doRewriteExpr(SNode** pNode, void* pContext) {
pCol
->
node
.
resType
=
pToBeRewrittenExpr
->
resType
;
pCol
->
node
.
resType
=
pToBeRewrittenExpr
->
resType
;
strcpy
(
pCol
->
node
.
aliasName
,
pToBeRewrittenExpr
->
aliasName
);
strcpy
(
pCol
->
node
.
aliasName
,
pToBeRewrittenExpr
->
aliasName
);
strcpy
(
pCol
->
colName
,
((
SExprNode
*
)
pExpr
)
->
aliasName
);
strcpy
(
pCol
->
colName
,
((
SExprNode
*
)
pExpr
)
->
aliasName
);
if
(
QUERY_NODE_FUNCTION
==
nodeType
(
pExpr
)
&&
FUNCTION_TYPE_WSTARTTS
==
((
SFunctionNode
*
)
pExpr
)
->
funcType
)
{
if
(
QUERY_NODE_FUNCTION
==
nodeType
(
pExpr
))
{
pCol
->
colId
=
PRIMARYKEY_TIMESTAMP_COL_ID
;
if
(
FUNCTION_TYPE_WSTARTTS
==
((
SFunctionNode
*
)
pExpr
)
->
funcType
)
{
pCol
->
colId
=
PRIMARYKEY_TIMESTAMP_COL_ID
;
}
else
if
(
FUNCTION_TYPE_TBNAME
==
((
SFunctionNode
*
)
pExpr
)
->
funcType
)
{
pCol
->
colType
=
COLUMN_TYPE_TBNAME
;
}
}
}
nodesDestroyNode
(
*
pNode
);
nodesDestroyNode
(
*
pNode
);
*
pNode
=
(
SNode
*
)
pCol
;
*
pNode
=
(
SNode
*
)
pCol
;
...
...
source/libs/planner/src/planOptimizer.c
浏览文件 @
980cf46b
...
@@ -1042,7 +1042,7 @@ static int32_t smaOptimize(SOptimizeContext* pCxt, SLogicSubplan* pLogicSubplan)
...
@@ -1042,7 +1042,7 @@ static int32_t smaOptimize(SOptimizeContext* pCxt, SLogicSubplan* pLogicSubplan)
static
EDealRes
partTagsOptHasColImpl
(
SNode
*
pNode
,
void
*
pContext
)
{
static
EDealRes
partTagsOptHasColImpl
(
SNode
*
pNode
,
void
*
pContext
)
{
if
(
QUERY_NODE_COLUMN
==
nodeType
(
pNode
))
{
if
(
QUERY_NODE_COLUMN
==
nodeType
(
pNode
))
{
if
(
COLUMN_TYPE_TAG
!=
((
SColumnNode
*
)
pNode
)
->
colType
)
{
if
(
COLUMN_TYPE_TAG
!=
((
SColumnNode
*
)
pNode
)
->
colType
&&
COLUMN_TYPE_TBNAME
!=
((
SColumnNode
*
)
pNode
)
->
colType
)
{
*
(
bool
*
)
pContext
=
true
;
*
(
bool
*
)
pContext
=
true
;
return
DEAL_RES_END
;
return
DEAL_RES_END
;
}
}
...
@@ -1057,9 +1057,9 @@ static bool partTagsOptHasCol(SNodeList* pPartKeys) {
...
@@ -1057,9 +1057,9 @@ static bool partTagsOptHasCol(SNodeList* pPartKeys) {
}
}
static
bool
partTagsIsOptimizableNode
(
SLogicNode
*
pNode
)
{
static
bool
partTagsIsOptimizableNode
(
SLogicNode
*
pNode
)
{
return
((
QUERY_NODE_LOGIC_PLAN_PARTITION
==
nodeType
(
pNode
)
/*
||
return
((
QUERY_NODE_LOGIC_PLAN_PARTITION
==
nodeType
(
pNode
)
||
(
QUERY_NODE_LOGIC_PLAN_AGG
==
nodeType
(
pNode
)
&&
NULL
!=
((
SAggLogicNode
*
)
pNode
)
->
pGroupKeys
&&
(
QUERY_NODE_LOGIC_PLAN_AGG
==
nodeType
(
pNode
)
&&
NULL
!=
((
SAggLogicNode
*
)
pNode
)
->
pGroupKeys
&&
NULL != ((SAggLogicNode*)pNode)->pAggFuncs)
*/
)
&&
NULL
!=
((
SAggLogicNode
*
)
pNode
)
->
pAggFuncs
))
&&
1
==
LIST_LENGTH
(
pNode
->
pChildren
)
&&
1
==
LIST_LENGTH
(
pNode
->
pChildren
)
&&
QUERY_NODE_LOGIC_PLAN_SCAN
==
nodeType
(
nodesListGetNode
(
pNode
->
pChildren
,
0
)));
QUERY_NODE_LOGIC_PLAN_SCAN
==
nodeType
(
nodesListGetNode
(
pNode
->
pChildren
,
0
)));
}
}
...
@@ -1080,6 +1080,28 @@ static bool partTagsOptMayBeOptimized(SLogicNode* pNode) {
...
@@ -1080,6 +1080,28 @@ static bool partTagsOptMayBeOptimized(SLogicNode* pNode) {
return
!
partTagsOptHasCol
(
partTagsGetPartKeys
(
pNode
));
return
!
partTagsOptHasCol
(
partTagsGetPartKeys
(
pNode
));
}
}
static
EDealRes
partTagsOptRebuildTbanmeImpl
(
SNode
**
pNode
,
void
*
pContext
)
{
if
(
QUERY_NODE_COLUMN
==
nodeType
(
*
pNode
)
&&
COLUMN_TYPE_TBNAME
==
((
SColumnNode
*
)
*
pNode
)
->
colType
)
{
SFunctionNode
*
pFunc
=
(
SFunctionNode
*
)
nodesMakeNode
(
QUERY_NODE_FUNCTION
);
if
(
NULL
==
pFunc
)
{
*
(
int32_t
*
)
pContext
=
TSDB_CODE_OUT_OF_MEMORY
;
return
DEAL_RES_ERROR
;
}
strcpy
(
pFunc
->
functionName
,
"tbname"
);
pFunc
->
funcType
=
FUNCTION_TYPE_TBNAME
;
nodesDestroyNode
(
*
pNode
);
*
pNode
=
(
SNode
*
)
pFunc
;
return
DEAL_RES_IGNORE_CHILD
;
}
return
DEAL_RES_CONTINUE
;
}
static
int32_t
partTagsOptRebuildTbanme
(
SNodeList
*
pPartKeys
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
nodesRewriteExprs
(
pPartKeys
,
partTagsOptRebuildTbanmeImpl
,
&
code
);
return
code
;
}
static
int32_t
partTagsOptimize
(
SOptimizeContext
*
pCxt
,
SLogicSubplan
*
pLogicSubplan
)
{
static
int32_t
partTagsOptimize
(
SOptimizeContext
*
pCxt
,
SLogicSubplan
*
pLogicSubplan
)
{
SLogicNode
*
pNode
=
optFindPossibleNode
(
pLogicSubplan
->
pNode
,
partTagsOptMayBeOptimized
);
SLogicNode
*
pNode
=
optFindPossibleNode
(
pLogicSubplan
->
pNode
,
partTagsOptMayBeOptimized
);
if
(
NULL
==
pNode
)
{
if
(
NULL
==
pNode
)
{
...
@@ -1096,7 +1118,18 @@ static int32_t partTagsOptimize(SOptimizeContext* pCxt, SLogicSubplan* pLogicSub
...
@@ -1096,7 +1118,18 @@ static int32_t partTagsOptimize(SOptimizeContext* pCxt, SLogicSubplan* pLogicSub
nodesDestroyNode
((
SNode
*
)
pNode
);
nodesDestroyNode
((
SNode
*
)
pNode
);
}
}
}
else
{
}
else
{
TSWAP
(((
SAggLogicNode
*
)
pNode
)
->
pGroupKeys
,
pScan
->
pPartTags
);
SNode
*
pGroupKey
=
NULL
;
FOREACH
(
pGroupKey
,
((
SAggLogicNode
*
)
pNode
)
->
pGroupKeys
)
{
code
=
nodesListMakeStrictAppend
(
&
pScan
->
pPartTags
,
nodesCloneNode
(
nodesListGetNode
(((
SGroupingSetNode
*
)
pGroupKey
)
->
pParameterList
,
0
)));
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
break
;
}
}
DESTORY_LIST
(((
SAggLogicNode
*
)
pNode
)
->
pGroupKeys
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
partTagsOptRebuildTbanme
(
pScan
->
pPartTags
);
}
}
return
code
;
return
code
;
}
}
...
@@ -1184,7 +1217,7 @@ static const SOptimizeRule optimizeRuleSet[] = {
...
@@ -1184,7 +1217,7 @@ static const SOptimizeRule optimizeRuleSet[] = {
{.
pName
=
"ConditionPushDown"
,
.
optimizeFunc
=
cpdOptimize
},
{.
pName
=
"ConditionPushDown"
,
.
optimizeFunc
=
cpdOptimize
},
{.
pName
=
"OrderByPrimaryKey"
,
.
optimizeFunc
=
opkOptimize
},
{.
pName
=
"OrderByPrimaryKey"
,
.
optimizeFunc
=
opkOptimize
},
{.
pName
=
"SmaIndex"
,
.
optimizeFunc
=
smaOptimize
},
{.
pName
=
"SmaIndex"
,
.
optimizeFunc
=
smaOptimize
},
{.
pName
=
"PartitionByTags"
,
.
optimizeFunc
=
partTagsOptimize
},
// {.pName = "PartitionTags",
.optimizeFunc = partTagsOptimize},
{.
pName
=
"EliminateProject"
,
.
optimizeFunc
=
eliminateProjOptimize
}
{.
pName
=
"EliminateProject"
,
.
optimizeFunc
=
eliminateProjOptimize
}
};
};
// clang-format on
// clang-format on
...
...
source/libs/planner/src/planSpliter.c
浏览文件 @
980cf46b
...
@@ -176,7 +176,7 @@ static bool stbSplNeedSplit(bool streamQuery, SLogicNode* pNode) {
...
@@ -176,7 +176,7 @@ static bool stbSplNeedSplit(bool streamQuery, SLogicNode* pNode) {
return
!
stbSplHasGatherExecFunc
(((
SAggLogicNode
*
)
pNode
)
->
pAggFuncs
)
&&
stbSplHasMultiTbScan
(
streamQuery
,
pNode
);
return
!
stbSplHasGatherExecFunc
(((
SAggLogicNode
*
)
pNode
)
->
pAggFuncs
)
&&
stbSplHasMultiTbScan
(
streamQuery
,
pNode
);
case
QUERY_NODE_LOGIC_PLAN_WINDOW
:
{
case
QUERY_NODE_LOGIC_PLAN_WINDOW
:
{
SWindowLogicNode
*
pWindow
=
(
SWindowLogicNode
*
)
pNode
;
SWindowLogicNode
*
pWindow
=
(
SWindowLogicNode
*
)
pNode
;
if
(
WINDOW_TYPE_STATE
==
pWindow
->
winType
||
(
!
streamQuery
&&
WINDOW_TYPE_SESSION
==
pWindow
->
winType
)
)
{
if
(
WINDOW_TYPE_STATE
==
pWindow
->
winType
||
(
!
streamQuery
&&
WINDOW_TYPE_SESSION
==
pWindow
->
winType
))
{
return
false
;
return
false
;
}
}
return
!
stbSplHasGatherExecFunc
(
pWindow
->
pFuncs
)
&&
stbSplHasMultiTbScan
(
streamQuery
,
pNode
);
return
!
stbSplHasGatherExecFunc
(
pWindow
->
pFuncs
)
&&
stbSplHasMultiTbScan
(
streamQuery
,
pNode
);
...
@@ -380,6 +380,7 @@ static int32_t stbSplCreateExchangeNode(SSplitContext* pCxt, SLogicNode* pParent
...
@@ -380,6 +380,7 @@ static int32_t stbSplCreateExchangeNode(SSplitContext* pCxt, SLogicNode* pParent
SExchangeLogicNode
*
pExchange
=
NULL
;
SExchangeLogicNode
*
pExchange
=
NULL
;
int32_t
code
=
splCreateExchangeNode
(
pCxt
,
pPartChild
,
&
pExchange
);
int32_t
code
=
splCreateExchangeNode
(
pCxt
,
pPartChild
,
&
pExchange
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
TSDB_CODE_SUCCESS
==
code
)
{
pExchange
->
node
.
pParent
=
pParent
;
code
=
nodesListMakeAppend
(
&
pParent
->
pChildren
,
(
SNode
*
)
pExchange
);
code
=
nodesListMakeAppend
(
&
pParent
->
pChildren
,
(
SNode
*
)
pExchange
);
}
}
return
code
;
return
code
;
...
@@ -484,7 +485,27 @@ static int32_t stbSplSplitSession(SSplitContext* pCxt, SStableSplitInfo* pInfo)
...
@@ -484,7 +485,27 @@ static int32_t stbSplSplitSession(SSplitContext* pCxt, SStableSplitInfo* pInfo)
}
}
}
}
static
int32_t
stbSplSplitWindowNode
(
SSplitContext
*
pCxt
,
SStableSplitInfo
*
pInfo
)
{
static
SNodeList
*
stbSplGetPartKeys
(
SLogicNode
*
pNode
)
{
if
(
QUERY_NODE_LOGIC_PLAN_SCAN
==
nodeType
(
pNode
))
{
return
((
SScanLogicNode
*
)
pNode
)
->
pPartTags
;
}
else
{
return
NULL
;
}
}
static
bool
stbSplIsPartTbanme
(
SNodeList
*
pPartKeys
)
{
if
(
NULL
==
pPartKeys
||
1
!=
LIST_LENGTH
(
pPartKeys
))
{
return
false
;
}
SNode
*
pPartKey
=
nodesListGetNode
(
pPartKeys
,
0
);
return
QUERY_NODE_FUNCTION
==
nodeType
(
pPartKey
)
&&
FUNCTION_TYPE_TBNAME
==
((
SFunctionNode
*
)
pPartKey
)
->
funcType
;
}
static
bool
stbSplIsMultiTableWinodw
(
SWindowLogicNode
*
pWindow
)
{
return
stbSplIsPartTbanme
(
stbSplGetPartKeys
((
SLogicNode
*
)
nodesListGetNode
(
pWindow
->
node
.
pChildren
,
0
)));
}
static
int32_t
stbSplSplitWindowForMergeTable
(
SSplitContext
*
pCxt
,
SStableSplitInfo
*
pInfo
)
{
switch
(((
SWindowLogicNode
*
)
pInfo
->
pSplitNode
)
->
winType
)
{
switch
(((
SWindowLogicNode
*
)
pInfo
->
pSplitNode
)
->
winType
)
{
case
WINDOW_TYPE_INTERVAL
:
case
WINDOW_TYPE_INTERVAL
:
return
stbSplSplitInterval
(
pCxt
,
pInfo
);
return
stbSplSplitInterval
(
pCxt
,
pInfo
);
...
@@ -496,6 +517,34 @@ static int32_t stbSplSplitWindowNode(SSplitContext* pCxt, SStableSplitInfo* pInf
...
@@ -496,6 +517,34 @@ static int32_t stbSplSplitWindowNode(SSplitContext* pCxt, SStableSplitInfo* pInf
return
TSDB_CODE_PLAN_INTERNAL_ERROR
;
return
TSDB_CODE_PLAN_INTERNAL_ERROR
;
}
}
static
int32_t
stbSplSplitWindowForMultiTable
(
SSplitContext
*
pCxt
,
SStableSplitInfo
*
pInfo
)
{
if
(
pCxt
->
pPlanCxt
->
streamQuery
)
{
SPLIT_FLAG_SET_MASK
(
pInfo
->
pSubplan
->
splitFlag
,
SPLIT_FLAG_STABLE_SPLIT
);
return
TSDB_CODE_SUCCESS
;
}
SExchangeLogicNode
*
pExchange
=
NULL
;
int32_t
code
=
splCreateExchangeNode
(
pCxt
,
pInfo
->
pSplitNode
,
&
pExchange
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
replaceLogicNode
(
pInfo
->
pSubplan
,
pInfo
->
pSplitNode
,
(
SLogicNode
*
)
pExchange
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
nodesListMakeStrictAppend
(
&
pInfo
->
pSubplan
->
pChildren
,
(
SNode
*
)
splCreateScanSubplan
(
pCxt
,
pInfo
->
pSplitNode
,
SPLIT_FLAG_STABLE_SPLIT
));
}
pInfo
->
pSubplan
->
subplanType
=
SUBPLAN_TYPE_MERGE
;
++
(
pCxt
->
groupId
);
return
code
;
}
static
int32_t
stbSplSplitWindowNode
(
SSplitContext
*
pCxt
,
SStableSplitInfo
*
pInfo
)
{
if
(
stbSplIsMultiTableWinodw
((
SWindowLogicNode
*
)
pInfo
->
pSplitNode
))
{
return
stbSplSplitWindowForMultiTable
(
pCxt
,
pInfo
);
}
else
{
return
stbSplSplitWindowForMergeTable
(
pCxt
,
pInfo
);
}
}
static
int32_t
stbSplCreatePartAggNode
(
SAggLogicNode
*
pMergeAgg
,
SLogicNode
**
pOutput
)
{
static
int32_t
stbSplCreatePartAggNode
(
SAggLogicNode
*
pMergeAgg
,
SLogicNode
**
pOutput
)
{
SNodeList
*
pFunc
=
pMergeAgg
->
pAggFuncs
;
SNodeList
*
pFunc
=
pMergeAgg
->
pAggFuncs
;
pMergeAgg
->
pAggFuncs
=
NULL
;
pMergeAgg
->
pAggFuncs
=
NULL
;
...
...
source/libs/planner/test/planOtherTest.cpp
浏览文件 @
980cf46b
...
@@ -37,7 +37,9 @@ TEST_F(PlanOtherTest, createStream) {
...
@@ -37,7 +37,9 @@ TEST_F(PlanOtherTest, createStream) {
TEST_F
(
PlanOtherTest
,
createStreamUseSTable
)
{
TEST_F
(
PlanOtherTest
,
createStreamUseSTable
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"create stream if not exists s1 as select count(*) from st1 interval(10s)"
);
run
(
"CREATE STREAM IF NOT EXISTS s1 as SELECT COUNT(*) FROM st1 INTERVAL(10s)"
);
run
(
"CREATE STREAM IF NOT EXISTS s1 as SELECT COUNT(*) FROM st1 PARTITION BY TBNAME INTERVAL(10s)"
);
}
}
TEST_F
(
PlanOtherTest
,
createSmaIndex
)
{
TEST_F
(
PlanOtherTest
,
createSmaIndex
)
{
...
...
source/libs/sync/inc/syncInt.h
浏览文件 @
980cf46b
...
@@ -197,6 +197,7 @@ int32_t syncNodeSendMsgByInfo(const SNodeInfo* nodeInfo, SSyncNode* pSyncNode, S
...
@@ -197,6 +197,7 @@ int32_t syncNodeSendMsgByInfo(const SNodeInfo* nodeInfo, SSyncNode* pSyncNode, S
cJSON
*
syncNode2Json
(
const
SSyncNode
*
pSyncNode
);
cJSON
*
syncNode2Json
(
const
SSyncNode
*
pSyncNode
);
char
*
syncNode2Str
(
const
SSyncNode
*
pSyncNode
);
char
*
syncNode2Str
(
const
SSyncNode
*
pSyncNode
);
void
syncNodeEventLog
(
const
SSyncNode
*
pSyncNode
,
char
*
str
);
void
syncNodeEventLog
(
const
SSyncNode
*
pSyncNode
,
char
*
str
);
void
syncNodeErrorLog
(
const
SSyncNode
*
pSyncNode
,
char
*
str
);
char
*
syncNode2SimpleStr
(
const
SSyncNode
*
pSyncNode
);
char
*
syncNode2SimpleStr
(
const
SSyncNode
*
pSyncNode
);
bool
syncNodeInConfig
(
SSyncNode
*
pSyncNode
,
const
SSyncCfg
*
config
);
bool
syncNodeInConfig
(
SSyncNode
*
pSyncNode
,
const
SSyncCfg
*
config
);
void
syncNodeDoConfigChange
(
SSyncNode
*
pSyncNode
,
SSyncCfg
*
newConfig
,
SyncIndex
lastConfigChangeIndex
);
void
syncNodeDoConfigChange
(
SSyncNode
*
pSyncNode
,
SSyncCfg
*
newConfig
,
SyncIndex
lastConfigChangeIndex
);
...
...
source/libs/sync/src/syncAppendEntries.c
浏览文件 @
980cf46b
...
@@ -99,19 +99,25 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -99,19 +99,25 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
if
(
pMsg
->
term
>
ths
->
pRaftStore
->
currentTerm
)
{
if
(
pMsg
->
term
>
ths
->
pRaftStore
->
currentTerm
)
{
syncNodeUpdateTerm
(
ths
,
pMsg
->
term
);
syncNodeUpdateTerm
(
ths
,
pMsg
->
term
);
}
}
assert
(
pMsg
->
term
<=
ths
->
pRaftStore
->
currentTerm
);
ASSERT
(
pMsg
->
term
<=
ths
->
pRaftStore
->
currentTerm
);
// reset elect timer
// reset elect timer
if
(
pMsg
->
term
==
ths
->
pRaftStore
->
currentTerm
)
{
if
(
pMsg
->
term
==
ths
->
pRaftStore
->
currentTerm
)
{
ths
->
leaderCache
=
pMsg
->
srcId
;
ths
->
leaderCache
=
pMsg
->
srcId
;
syncNodeResetElectTimer
(
ths
);
syncNodeResetElectTimer
(
ths
);
}
}
assert
(
pMsg
->
dataLen
>=
0
);
ASSERT
(
pMsg
->
dataLen
>=
0
);
SyncTerm
localPreLogTerm
=
0
;
SyncTerm
localPreLogTerm
=
0
;
if
(
pMsg
->
prevLogIndex
>=
SYNC_INDEX_BEGIN
&&
pMsg
->
prevLogIndex
<=
ths
->
pLogStore
->
getLastIndex
(
ths
->
pLogStore
))
{
if
(
pMsg
->
prevLogIndex
>=
SYNC_INDEX_BEGIN
&&
pMsg
->
prevLogIndex
<=
ths
->
pLogStore
->
getLastIndex
(
ths
->
pLogStore
))
{
SSyncRaftEntry
*
pEntry
=
ths
->
pLogStore
->
getEntry
(
ths
->
pLogStore
,
pMsg
->
prevLogIndex
);
SSyncRaftEntry
*
pEntry
=
ths
->
pLogStore
->
getEntry
(
ths
->
pLogStore
,
pMsg
->
prevLogIndex
);
assert
(
pEntry
!=
NULL
);
if
(
pEntry
==
NULL
)
{
char
logBuf
[
128
];
snprintf
(
logBuf
,
sizeof
(
logBuf
),
"getEntry error, index:%ld, since %s"
,
pMsg
->
prevLogIndex
,
terrstr
());
syncNodeErrorLog
(
ths
,
logBuf
);
return
-
1
;
}
localPreLogTerm
=
pEntry
->
term
;
localPreLogTerm
=
pEntry
->
term
;
syncEntryDestory
(
pEntry
);
syncEntryDestory
(
pEntry
);
}
}
...
@@ -160,7 +166,7 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -160,7 +166,7 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
// accept request
// accept request
if
(
pMsg
->
term
==
ths
->
pRaftStore
->
currentTerm
&&
ths
->
state
==
TAOS_SYNC_STATE_FOLLOWER
&&
logOK
)
{
if
(
pMsg
->
term
==
ths
->
pRaftStore
->
currentTerm
&&
ths
->
state
==
TAOS_SYNC_STATE_FOLLOWER
&&
logOK
)
{
// preIndex = -1, or has preIndex entry in local log
// preIndex = -1, or has preIndex entry in local log
assert
(
pMsg
->
prevLogIndex
<=
ths
->
pLogStore
->
getLastIndex
(
ths
->
pLogStore
));
ASSERT
(
pMsg
->
prevLogIndex
<=
ths
->
pLogStore
->
getLastIndex
(
ths
->
pLogStore
));
// has extra entries (> preIndex) in local log
// has extra entries (> preIndex) in local log
bool
hasExtraEntries
=
pMsg
->
prevLogIndex
<
ths
->
pLogStore
->
getLastIndex
(
ths
->
pLogStore
);
bool
hasExtraEntries
=
pMsg
->
prevLogIndex
<
ths
->
pLogStore
->
getLastIndex
(
ths
->
pLogStore
);
...
@@ -179,13 +185,21 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -179,13 +185,21 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
SyncIndex
extraIndex
=
pMsg
->
prevLogIndex
+
1
;
SyncIndex
extraIndex
=
pMsg
->
prevLogIndex
+
1
;
SSyncRaftEntry
*
pExtraEntry
=
ths
->
pLogStore
->
getEntry
(
ths
->
pLogStore
,
extraIndex
);
SSyncRaftEntry
*
pExtraEntry
=
ths
->
pLogStore
->
getEntry
(
ths
->
pLogStore
,
extraIndex
);
assert
(
pExtraEntry
!=
NULL
);
if
(
pExtraEntry
==
NULL
)
{
char
logBuf
[
128
];
snprintf
(
logBuf
,
sizeof
(
logBuf
),
"getEntry error2, index:%ld, since %s"
,
extraIndex
,
terrstr
());
syncNodeErrorLog
(
ths
,
logBuf
);
return
-
1
;
}
SSyncRaftEntry
*
pAppendEntry
=
syncEntryDeserialize
(
pMsg
->
data
,
pMsg
->
dataLen
);
SSyncRaftEntry
*
pAppendEntry
=
syncEntryDeserialize
(
pMsg
->
data
,
pMsg
->
dataLen
);
assert
(
pAppendEntry
!=
NULL
);
if
(
pAppendEntry
==
NULL
)
{
syncNodeErrorLog
(
ths
,
"syncEntryDeserialize pAppendEntry error"
);
return
-
1
;
}
// log not match, conflict
// log not match, conflict
assert
(
extraIndex
==
pAppendEntry
->
index
);
ASSERT
(
extraIndex
==
pAppendEntry
->
index
);
if
(
pExtraEntry
->
term
!=
pAppendEntry
->
term
)
{
if
(
pExtraEntry
->
term
!=
pAppendEntry
->
term
)
{
conflict
=
true
;
conflict
=
true
;
}
}
...
@@ -201,7 +215,12 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -201,7 +215,12 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
for
(
SyncIndex
index
=
delEnd
;
index
>=
delBegin
;
--
index
)
{
for
(
SyncIndex
index
=
delEnd
;
index
>=
delBegin
;
--
index
)
{
if
(
ths
->
pFsm
->
FpRollBackCb
!=
NULL
)
{
if
(
ths
->
pFsm
->
FpRollBackCb
!=
NULL
)
{
SSyncRaftEntry
*
pRollBackEntry
=
ths
->
pLogStore
->
getEntry
(
ths
->
pLogStore
,
index
);
SSyncRaftEntry
*
pRollBackEntry
=
ths
->
pLogStore
->
getEntry
(
ths
->
pLogStore
,
index
);
assert
(
pRollBackEntry
!=
NULL
);
if
(
pRollBackEntry
==
NULL
)
{
char
logBuf
[
128
];
snprintf
(
logBuf
,
sizeof
(
logBuf
),
"getEntry error3, index:%ld, since %s"
,
index
,
terrstr
());
syncNodeErrorLog
(
ths
,
logBuf
);
return
-
1
;
}
// if (pRollBackEntry->msgType != TDMT_SYNC_NOOP) {
// if (pRollBackEntry->msgType != TDMT_SYNC_NOOP) {
if
(
syncUtilUserRollback
(
pRollBackEntry
->
msgType
))
{
if
(
syncUtilUserRollback
(
pRollBackEntry
->
msgType
))
{
...
@@ -257,7 +276,10 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -257,7 +276,10 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
}
else
if
(
!
hasExtraEntries
&&
hasAppendEntries
)
{
}
else
if
(
!
hasExtraEntries
&&
hasAppendEntries
)
{
SSyncRaftEntry
*
pAppendEntry
=
syncEntryDeserialize
(
pMsg
->
data
,
pMsg
->
dataLen
);
SSyncRaftEntry
*
pAppendEntry
=
syncEntryDeserialize
(
pMsg
->
data
,
pMsg
->
dataLen
);
assert
(
pAppendEntry
!=
NULL
);
if
(
pAppendEntry
==
NULL
)
{
syncNodeErrorLog
(
ths
,
"syncEntryDeserialize pAppendEntry2 error"
);
return
-
1
;
}
// append new entries
// append new entries
ths
->
pLogStore
->
appendEntry
(
ths
->
pLogStore
,
pAppendEntry
);
ths
->
pLogStore
->
appendEntry
(
ths
->
pLogStore
,
pAppendEntry
);
...
@@ -287,7 +309,8 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
...
@@ -287,7 +309,8 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
// do nothing
// do nothing
}
else
{
}
else
{
assert
(
0
);
syncNodeLog3
(
""
,
ths
);
ASSERT
(
0
);
}
}
SyncAppendEntriesReply
*
pReply
=
syncAppendEntriesReplyBuild
(
ths
->
vgId
);
SyncAppendEntriesReply
*
pReply
=
syncAppendEntriesReplyBuild
(
ths
->
vgId
);
...
...
source/libs/sync/src/syncAppendEntriesReply.c
浏览文件 @
980cf46b
...
@@ -67,7 +67,7 @@ int32_t syncNodeOnAppendEntriesReplyCb(SSyncNode* ths, SyncAppendEntriesReply* p
...
@@ -67,7 +67,7 @@ int32_t syncNodeOnAppendEntriesReplyCb(SSyncNode* ths, SyncAppendEntriesReply* p
return
ret
;
return
ret
;
}
}
assert
(
pMsg
->
term
==
ths
->
pRaftStore
->
currentTerm
);
ASSERT
(
pMsg
->
term
==
ths
->
pRaftStore
->
currentTerm
);
if
(
pMsg
->
success
)
{
if
(
pMsg
->
success
)
{
// nextIndex' = [nextIndex EXCEPT ![i][j] = m.mmatchIndex + 1]
// nextIndex' = [nextIndex EXCEPT ![i][j] = m.mmatchIndex + 1]
...
...
source/libs/sync/src/syncCommit.c
浏览文件 @
980cf46b
...
@@ -75,7 +75,7 @@ void syncMaybeAdvanceCommitIndex(SSyncNode* pSyncNode) {
...
@@ -75,7 +75,7 @@ void syncMaybeAdvanceCommitIndex(SSyncNode* pSyncNode) {
if
(
agree
)
{
if
(
agree
)
{
// term
// term
SSyncRaftEntry
*
pEntry
=
pSyncNode
->
pLogStore
->
getEntry
(
pSyncNode
->
pLogStore
,
index
);
SSyncRaftEntry
*
pEntry
=
pSyncNode
->
pLogStore
->
getEntry
(
pSyncNode
->
pLogStore
,
index
);
assert
(
pEntry
!=
NULL
);
ASSERT
(
pEntry
!=
NULL
);
// cannot commit, even if quorum agree. need check term!
// cannot commit, even if quorum agree. need check term!
if
(
pEntry
->
term
==
pSyncNode
->
pRaftStore
->
currentTerm
)
{
if
(
pEntry
->
term
==
pSyncNode
->
pRaftStore
->
currentTerm
)
{
...
...
source/libs/sync/src/syncElection.c
浏览文件 @
980cf46b
...
@@ -32,7 +32,7 @@
...
@@ -32,7 +32,7 @@
// /\ UNCHANGED <<serverVars, candidateVars, leaderVars, logVars>>
// /\ UNCHANGED <<serverVars, candidateVars, leaderVars, logVars>>
//
//
int32_t
syncNodeRequestVotePeers
(
SSyncNode
*
pSyncNode
)
{
int32_t
syncNodeRequestVotePeers
(
SSyncNode
*
pSyncNode
)
{
assert
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_CANDIDATE
);
ASSERT
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_CANDIDATE
);
int32_t
ret
=
0
;
int32_t
ret
=
0
;
for
(
int
i
=
0
;
i
<
pSyncNode
->
peersNum
;
++
i
)
{
for
(
int
i
=
0
;
i
<
pSyncNode
->
peersNum
;
++
i
)
{
...
@@ -44,7 +44,7 @@ int32_t syncNodeRequestVotePeers(SSyncNode* pSyncNode) {
...
@@ -44,7 +44,7 @@ int32_t syncNodeRequestVotePeers(SSyncNode* pSyncNode) {
pMsg
->
lastLogTerm
=
pSyncNode
->
pLogStore
->
getLastTerm
(
pSyncNode
->
pLogStore
);
pMsg
->
lastLogTerm
=
pSyncNode
->
pLogStore
->
getLastTerm
(
pSyncNode
->
pLogStore
);
ret
=
syncNodeRequestVote
(
pSyncNode
,
&
pSyncNode
->
peersId
[
i
],
pMsg
);
ret
=
syncNodeRequestVote
(
pSyncNode
,
&
pSyncNode
->
peersId
[
i
],
pMsg
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
syncRequestVoteDestroy
(
pMsg
);
syncRequestVoteDestroy
(
pMsg
);
}
}
return
ret
;
return
ret
;
...
@@ -75,7 +75,7 @@ int32_t syncNodeElect(SSyncNode* pSyncNode) {
...
@@ -75,7 +75,7 @@ int32_t syncNodeElect(SSyncNode* pSyncNode) {
if
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_FOLLOWER
)
{
if
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_FOLLOWER
)
{
syncNodeFollower2Candidate
(
pSyncNode
);
syncNodeFollower2Candidate
(
pSyncNode
);
}
}
assert
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_CANDIDATE
);
ASSERT
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_CANDIDATE
);
// start election
// start election
raftStoreNextTerm
(
pSyncNode
->
pRaftStore
);
raftStoreNextTerm
(
pSyncNode
->
pRaftStore
);
...
@@ -86,7 +86,7 @@ int32_t syncNodeElect(SSyncNode* pSyncNode) {
...
@@ -86,7 +86,7 @@ int32_t syncNodeElect(SSyncNode* pSyncNode) {
syncNodeVoteForSelf
(
pSyncNode
);
syncNodeVoteForSelf
(
pSyncNode
);
if
(
voteGrantedMajority
(
pSyncNode
->
pVotesGranted
))
{
if
(
voteGrantedMajority
(
pSyncNode
->
pVotesGranted
))
{
// only myself, to leader
// only myself, to leader
assert
(
!
pSyncNode
->
pVotesGranted
->
toLeader
);
ASSERT
(
!
pSyncNode
->
pVotesGranted
->
toLeader
);
syncNodeCandidate2Leader
(
pSyncNode
);
syncNodeCandidate2Leader
(
pSyncNode
);
pSyncNode
->
pVotesGranted
->
toLeader
=
true
;
pSyncNode
->
pVotesGranted
->
toLeader
=
true
;
return
ret
;
return
ret
;
...
@@ -98,7 +98,7 @@ int32_t syncNodeElect(SSyncNode* pSyncNode) {
...
@@ -98,7 +98,7 @@ int32_t syncNodeElect(SSyncNode* pSyncNode) {
ret
=
syncNodeRequestVotePeers
(
pSyncNode
);
ret
=
syncNodeRequestVotePeers
(
pSyncNode
);
}
}
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
syncNodeResetElectTimer
(
pSyncNode
);
syncNodeResetElectTimer
(
pSyncNode
);
return
ret
;
return
ret
;
...
...
source/libs/sync/src/syncEnv.c
浏览文件 @
980cf46b
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
*/
*/
#include "syncEnv.h"
#include "syncEnv.h"
// #include <
assert
.h>
// #include <
ASSERT
.h>
SSyncEnv
*
gSyncEnv
=
NULL
;
SSyncEnv
*
gSyncEnv
=
NULL
;
...
@@ -40,7 +40,7 @@ int32_t syncEnvStart() {
...
@@ -40,7 +40,7 @@ int32_t syncEnvStart() {
taosSeedRand
(
seed
);
taosSeedRand
(
seed
);
// gSyncEnv = doSyncEnvStart(gSyncEnv);
// gSyncEnv = doSyncEnvStart(gSyncEnv);
gSyncEnv
=
doSyncEnvStart
();
gSyncEnv
=
doSyncEnvStart
();
assert
(
gSyncEnv
!=
NULL
);
ASSERT
(
gSyncEnv
!=
NULL
);
sTrace
(
"sync env start ok"
);
sTrace
(
"sync env start ok"
);
return
ret
;
return
ret
;
}
}
...
@@ -86,7 +86,7 @@ static void syncEnvTick(void *param, void *tmrId) {
...
@@ -86,7 +86,7 @@ static void syncEnvTick(void *param, void *tmrId) {
static
SSyncEnv
*
doSyncEnvStart
()
{
static
SSyncEnv
*
doSyncEnvStart
()
{
SSyncEnv
*
pSyncEnv
=
(
SSyncEnv
*
)
taosMemoryMalloc
(
sizeof
(
SSyncEnv
));
SSyncEnv
*
pSyncEnv
=
(
SSyncEnv
*
)
taosMemoryMalloc
(
sizeof
(
SSyncEnv
));
assert
(
pSyncEnv
!=
NULL
);
ASSERT
(
pSyncEnv
!=
NULL
);
memset
(
pSyncEnv
,
0
,
sizeof
(
SSyncEnv
));
memset
(
pSyncEnv
,
0
,
sizeof
(
SSyncEnv
));
pSyncEnv
->
envTickTimerCounter
=
0
;
pSyncEnv
->
envTickTimerCounter
=
0
;
...
@@ -103,7 +103,7 @@ static SSyncEnv *doSyncEnvStart() {
...
@@ -103,7 +103,7 @@ static SSyncEnv *doSyncEnvStart() {
}
}
static
int32_t
doSyncEnvStop
(
SSyncEnv
*
pSyncEnv
)
{
static
int32_t
doSyncEnvStop
(
SSyncEnv
*
pSyncEnv
)
{
assert
(
pSyncEnv
==
gSyncEnv
);
ASSERT
(
pSyncEnv
==
gSyncEnv
);
if
(
pSyncEnv
!=
NULL
)
{
if
(
pSyncEnv
!=
NULL
)
{
atomic_store_8
(
&
(
pSyncEnv
->
isStart
),
0
);
atomic_store_8
(
&
(
pSyncEnv
->
isStart
),
0
);
taosTmrCleanUp
(
pSyncEnv
->
pTimerManager
);
taosTmrCleanUp
(
pSyncEnv
->
pTimerManager
);
...
...
source/libs/sync/src/syncIO.c
浏览文件 @
980cf46b
...
@@ -30,7 +30,7 @@ static int32_t syncIODestroy(SSyncIO *io);
...
@@ -30,7 +30,7 @@ static int32_t syncIODestroy(SSyncIO *io);
static
int32_t
syncIOStartInternal
(
SSyncIO
*
io
);
static
int32_t
syncIOStartInternal
(
SSyncIO
*
io
);
static
int32_t
syncIOStopInternal
(
SSyncIO
*
io
);
static
int32_t
syncIOStopInternal
(
SSyncIO
*
io
);
static
void
*
syncIOConsumerFunc
(
void
*
param
);
static
void
*
syncIOConsumerFunc
(
void
*
param
);
static
void
syncIOProcessRequest
(
void
*
pParent
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
static
void
syncIOProcessRequest
(
void
*
pParent
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
static
void
syncIOProcessReply
(
void
*
pParent
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
static
void
syncIOProcessReply
(
void
*
pParent
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
static
int32_t
syncIOAuth
(
void
*
parent
,
char
*
meterId
,
char
*
spi
,
char
*
encrypt
,
char
*
secret
,
char
*
ckey
);
static
int32_t
syncIOAuth
(
void
*
parent
,
char
*
meterId
,
char
*
spi
,
char
*
encrypt
,
char
*
secret
,
char
*
ckey
);
...
@@ -47,11 +47,11 @@ static void syncIOTickPing(void *param, void *tmrId);
...
@@ -47,11 +47,11 @@ static void syncIOTickPing(void *param, void *tmrId);
int32_t
syncIOStart
(
char
*
host
,
uint16_t
port
)
{
int32_t
syncIOStart
(
char
*
host
,
uint16_t
port
)
{
int32_t
ret
=
0
;
int32_t
ret
=
0
;
gSyncIO
=
syncIOCreate
(
host
,
port
);
gSyncIO
=
syncIOCreate
(
host
,
port
);
assert
(
gSyncIO
!=
NULL
);
ASSERT
(
gSyncIO
!=
NULL
);
taosSeedRand
(
taosGetTimestampSec
());
taosSeedRand
(
taosGetTimestampSec
());
ret
=
syncIOStartInternal
(
gSyncIO
);
ret
=
syncIOStartInternal
(
gSyncIO
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
sTrace
(
"syncIOStart ok, gSyncIO:%p"
,
gSyncIO
);
sTrace
(
"syncIOStart ok, gSyncIO:%p"
,
gSyncIO
);
return
ret
;
return
ret
;
...
@@ -59,16 +59,16 @@ int32_t syncIOStart(char *host, uint16_t port) {
...
@@ -59,16 +59,16 @@ int32_t syncIOStart(char *host, uint16_t port) {
int32_t
syncIOStop
()
{
int32_t
syncIOStop
()
{
int32_t
ret
=
syncIOStopInternal
(
gSyncIO
);
int32_t
ret
=
syncIOStopInternal
(
gSyncIO
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
ret
=
syncIODestroy
(
gSyncIO
);
ret
=
syncIODestroy
(
gSyncIO
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
return
ret
;
return
ret
;
}
}
int32_t
syncIOSendMsg
(
const
SEpSet
*
pEpSet
,
SRpcMsg
*
pMsg
)
{
int32_t
syncIOSendMsg
(
const
SEpSet
*
pEpSet
,
SRpcMsg
*
pMsg
)
{
assert
(
pEpSet
->
inUse
==
0
);
ASSERT
(
pEpSet
->
inUse
==
0
);
assert
(
pEpSet
->
numOfEps
==
1
);
ASSERT
(
pEpSet
->
numOfEps
==
1
);
int32_t
ret
=
0
;
int32_t
ret
=
0
;
{
{
...
@@ -107,25 +107,25 @@ int32_t syncIOEqMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) {
...
@@ -107,25 +107,25 @@ int32_t syncIOEqMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) {
int32_t
syncIOQTimerStart
()
{
int32_t
syncIOQTimerStart
()
{
int32_t
ret
=
syncIOStartQ
(
gSyncIO
);
int32_t
ret
=
syncIOStartQ
(
gSyncIO
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
return
ret
;
return
ret
;
}
}
int32_t
syncIOQTimerStop
()
{
int32_t
syncIOQTimerStop
()
{
int32_t
ret
=
syncIOStopQ
(
gSyncIO
);
int32_t
ret
=
syncIOStopQ
(
gSyncIO
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
return
ret
;
return
ret
;
}
}
int32_t
syncIOPingTimerStart
()
{
int32_t
syncIOPingTimerStart
()
{
int32_t
ret
=
syncIOStartPing
(
gSyncIO
);
int32_t
ret
=
syncIOStartPing
(
gSyncIO
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
return
ret
;
return
ret
;
}
}
int32_t
syncIOPingTimerStop
()
{
int32_t
syncIOPingTimerStop
()
{
int32_t
ret
=
syncIOStopPing
(
gSyncIO
);
int32_t
ret
=
syncIOStopPing
(
gSyncIO
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
return
ret
;
return
ret
;
}
}
...
@@ -151,7 +151,7 @@ static SSyncIO *syncIOCreate(char *host, uint16_t port) {
...
@@ -151,7 +151,7 @@ static SSyncIO *syncIOCreate(char *host, uint16_t port) {
static
int32_t
syncIODestroy
(
SSyncIO
*
io
)
{
static
int32_t
syncIODestroy
(
SSyncIO
*
io
)
{
int32_t
ret
=
0
;
int32_t
ret
=
0
;
int8_t
start
=
atomic_load_8
(
&
io
->
isStart
);
int8_t
start
=
atomic_load_8
(
&
io
->
isStart
);
assert
(
start
==
0
);
ASSERT
(
start
==
0
);
if
(
io
->
serverRpc
!=
NULL
)
{
if
(
io
->
serverRpc
!=
NULL
)
{
rpcClose
(
io
->
serverRpc
);
rpcClose
(
io
->
serverRpc
);
...
@@ -242,9 +242,9 @@ static int32_t syncIOStopInternal(SSyncIO *io) {
...
@@ -242,9 +242,9 @@ static int32_t syncIOStopInternal(SSyncIO *io) {
}
}
static
void
*
syncIOConsumerFunc
(
void
*
param
)
{
static
void
*
syncIOConsumerFunc
(
void
*
param
)
{
SSyncIO
*
io
=
param
;
SSyncIO
*
io
=
param
;
STaosQall
*
qall
;
STaosQall
*
qall
;
SRpcMsg
*
pRpcMsg
,
rpcMsg
;
SRpcMsg
*
pRpcMsg
,
rpcMsg
;
qall
=
taosAllocateQall
();
qall
=
taosAllocateQall
();
while
(
1
)
{
while
(
1
)
{
...
@@ -264,7 +264,7 @@ static void *syncIOConsumerFunc(void *param) {
...
@@ -264,7 +264,7 @@ static void *syncIOConsumerFunc(void *param) {
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_PING
)
{
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_PING
)
{
if
(
io
->
FpOnSyncPing
!=
NULL
)
{
if
(
io
->
FpOnSyncPing
!=
NULL
)
{
SyncPing
*
pSyncMsg
=
syncPingFromRpcMsg2
(
pRpcMsg
);
SyncPing
*
pSyncMsg
=
syncPingFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
ASSERT
(
pSyncMsg
!=
NULL
);
io
->
FpOnSyncPing
(
io
->
pSyncNode
,
pSyncMsg
);
io
->
FpOnSyncPing
(
io
->
pSyncNode
,
pSyncMsg
);
syncPingDestroy
(
pSyncMsg
);
syncPingDestroy
(
pSyncMsg
);
}
}
...
@@ -272,7 +272,7 @@ static void *syncIOConsumerFunc(void *param) {
...
@@ -272,7 +272,7 @@ static void *syncIOConsumerFunc(void *param) {
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_PING_REPLY
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_PING_REPLY
)
{
if
(
io
->
FpOnSyncPingReply
!=
NULL
)
{
if
(
io
->
FpOnSyncPingReply
!=
NULL
)
{
SyncPingReply
*
pSyncMsg
=
syncPingReplyFromRpcMsg2
(
pRpcMsg
);
SyncPingReply
*
pSyncMsg
=
syncPingReplyFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
ASSERT
(
pSyncMsg
!=
NULL
);
io
->
FpOnSyncPingReply
(
io
->
pSyncNode
,
pSyncMsg
);
io
->
FpOnSyncPingReply
(
io
->
pSyncNode
,
pSyncMsg
);
syncPingReplyDestroy
(
pSyncMsg
);
syncPingReplyDestroy
(
pSyncMsg
);
}
}
...
@@ -280,7 +280,7 @@ static void *syncIOConsumerFunc(void *param) {
...
@@ -280,7 +280,7 @@ static void *syncIOConsumerFunc(void *param) {
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_CLIENT_REQUEST
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_CLIENT_REQUEST
)
{
if
(
io
->
FpOnSyncClientRequest
!=
NULL
)
{
if
(
io
->
FpOnSyncClientRequest
!=
NULL
)
{
SyncClientRequest
*
pSyncMsg
=
syncClientRequestFromRpcMsg2
(
pRpcMsg
);
SyncClientRequest
*
pSyncMsg
=
syncClientRequestFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
ASSERT
(
pSyncMsg
!=
NULL
);
io
->
FpOnSyncClientRequest
(
io
->
pSyncNode
,
pSyncMsg
);
io
->
FpOnSyncClientRequest
(
io
->
pSyncNode
,
pSyncMsg
);
syncClientRequestDestroy
(
pSyncMsg
);
syncClientRequestDestroy
(
pSyncMsg
);
}
}
...
@@ -288,7 +288,7 @@ static void *syncIOConsumerFunc(void *param) {
...
@@ -288,7 +288,7 @@ static void *syncIOConsumerFunc(void *param) {
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_REQUEST_VOTE
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_REQUEST_VOTE
)
{
if
(
io
->
FpOnSyncRequestVote
!=
NULL
)
{
if
(
io
->
FpOnSyncRequestVote
!=
NULL
)
{
SyncRequestVote
*
pSyncMsg
=
syncRequestVoteFromRpcMsg2
(
pRpcMsg
);
SyncRequestVote
*
pSyncMsg
=
syncRequestVoteFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
ASSERT
(
pSyncMsg
!=
NULL
);
io
->
FpOnSyncRequestVote
(
io
->
pSyncNode
,
pSyncMsg
);
io
->
FpOnSyncRequestVote
(
io
->
pSyncNode
,
pSyncMsg
);
syncRequestVoteDestroy
(
pSyncMsg
);
syncRequestVoteDestroy
(
pSyncMsg
);
}
}
...
@@ -296,7 +296,7 @@ static void *syncIOConsumerFunc(void *param) {
...
@@ -296,7 +296,7 @@ static void *syncIOConsumerFunc(void *param) {
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_REQUEST_VOTE_REPLY
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_REQUEST_VOTE_REPLY
)
{
if
(
io
->
FpOnSyncRequestVoteReply
!=
NULL
)
{
if
(
io
->
FpOnSyncRequestVoteReply
!=
NULL
)
{
SyncRequestVoteReply
*
pSyncMsg
=
syncRequestVoteReplyFromRpcMsg2
(
pRpcMsg
);
SyncRequestVoteReply
*
pSyncMsg
=
syncRequestVoteReplyFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
ASSERT
(
pSyncMsg
!=
NULL
);
io
->
FpOnSyncRequestVoteReply
(
io
->
pSyncNode
,
pSyncMsg
);
io
->
FpOnSyncRequestVoteReply
(
io
->
pSyncNode
,
pSyncMsg
);
syncRequestVoteReplyDestroy
(
pSyncMsg
);
syncRequestVoteReplyDestroy
(
pSyncMsg
);
}
}
...
@@ -304,7 +304,7 @@ static void *syncIOConsumerFunc(void *param) {
...
@@ -304,7 +304,7 @@ static void *syncIOConsumerFunc(void *param) {
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_APPEND_ENTRIES
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_APPEND_ENTRIES
)
{
if
(
io
->
FpOnSyncAppendEntries
!=
NULL
)
{
if
(
io
->
FpOnSyncAppendEntries
!=
NULL
)
{
SyncAppendEntries
*
pSyncMsg
=
syncAppendEntriesFromRpcMsg2
(
pRpcMsg
);
SyncAppendEntries
*
pSyncMsg
=
syncAppendEntriesFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
ASSERT
(
pSyncMsg
!=
NULL
);
io
->
FpOnSyncAppendEntries
(
io
->
pSyncNode
,
pSyncMsg
);
io
->
FpOnSyncAppendEntries
(
io
->
pSyncNode
,
pSyncMsg
);
syncAppendEntriesDestroy
(
pSyncMsg
);
syncAppendEntriesDestroy
(
pSyncMsg
);
}
}
...
@@ -312,7 +312,7 @@ static void *syncIOConsumerFunc(void *param) {
...
@@ -312,7 +312,7 @@ static void *syncIOConsumerFunc(void *param) {
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_APPEND_ENTRIES_REPLY
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_APPEND_ENTRIES_REPLY
)
{
if
(
io
->
FpOnSyncAppendEntriesReply
!=
NULL
)
{
if
(
io
->
FpOnSyncAppendEntriesReply
!=
NULL
)
{
SyncAppendEntriesReply
*
pSyncMsg
=
syncAppendEntriesReplyFromRpcMsg2
(
pRpcMsg
);
SyncAppendEntriesReply
*
pSyncMsg
=
syncAppendEntriesReplyFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
ASSERT
(
pSyncMsg
!=
NULL
);
io
->
FpOnSyncAppendEntriesReply
(
io
->
pSyncNode
,
pSyncMsg
);
io
->
FpOnSyncAppendEntriesReply
(
io
->
pSyncNode
,
pSyncMsg
);
syncAppendEntriesReplyDestroy
(
pSyncMsg
);
syncAppendEntriesReplyDestroy
(
pSyncMsg
);
}
}
...
@@ -320,7 +320,7 @@ static void *syncIOConsumerFunc(void *param) {
...
@@ -320,7 +320,7 @@ static void *syncIOConsumerFunc(void *param) {
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_TIMEOUT
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_TIMEOUT
)
{
if
(
io
->
FpOnSyncTimeout
!=
NULL
)
{
if
(
io
->
FpOnSyncTimeout
!=
NULL
)
{
SyncTimeout
*
pSyncMsg
=
syncTimeoutFromRpcMsg2
(
pRpcMsg
);
SyncTimeout
*
pSyncMsg
=
syncTimeoutFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
ASSERT
(
pSyncMsg
!=
NULL
);
io
->
FpOnSyncTimeout
(
io
->
pSyncNode
,
pSyncMsg
);
io
->
FpOnSyncTimeout
(
io
->
pSyncNode
,
pSyncMsg
);
syncTimeoutDestroy
(
pSyncMsg
);
syncTimeoutDestroy
(
pSyncMsg
);
}
}
...
@@ -328,7 +328,7 @@ static void *syncIOConsumerFunc(void *param) {
...
@@ -328,7 +328,7 @@ static void *syncIOConsumerFunc(void *param) {
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_SNAPSHOT_SEND
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_SNAPSHOT_SEND
)
{
if
(
io
->
FpOnSyncSnapshotSend
!=
NULL
)
{
if
(
io
->
FpOnSyncSnapshotSend
!=
NULL
)
{
SyncSnapshotSend
*
pSyncMsg
=
syncSnapshotSendFromRpcMsg2
(
pRpcMsg
);
SyncSnapshotSend
*
pSyncMsg
=
syncSnapshotSendFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
ASSERT
(
pSyncMsg
!=
NULL
);
io
->
FpOnSyncSnapshotSend
(
io
->
pSyncNode
,
pSyncMsg
);
io
->
FpOnSyncSnapshotSend
(
io
->
pSyncNode
,
pSyncMsg
);
syncSnapshotSendDestroy
(
pSyncMsg
);
syncSnapshotSendDestroy
(
pSyncMsg
);
}
}
...
@@ -336,7 +336,7 @@ static void *syncIOConsumerFunc(void *param) {
...
@@ -336,7 +336,7 @@ static void *syncIOConsumerFunc(void *param) {
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_SNAPSHOT_RSP
)
{
}
else
if
(
pRpcMsg
->
msgType
==
TDMT_SYNC_SNAPSHOT_RSP
)
{
if
(
io
->
FpOnSyncSnapshotRsp
!=
NULL
)
{
if
(
io
->
FpOnSyncSnapshotRsp
!=
NULL
)
{
SyncSnapshotRsp
*
pSyncMsg
=
syncSnapshotRspFromRpcMsg2
(
pRpcMsg
);
SyncSnapshotRsp
*
pSyncMsg
=
syncSnapshotRspFromRpcMsg2
(
pRpcMsg
);
assert
(
pSyncMsg
!=
NULL
);
ASSERT
(
pSyncMsg
!=
NULL
);
io
->
FpOnSyncSnapshotRsp
(
io
->
pSyncNode
,
pSyncMsg
);
io
->
FpOnSyncSnapshotRsp
(
io
->
pSyncNode
,
pSyncMsg
);
syncSnapshotRspDestroy
(
pSyncMsg
);
syncSnapshotRspDestroy
(
pSyncMsg
);
}
}
...
...
source/libs/sync/src/syncIndexMgr.c
浏览文件 @
980cf46b
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
SSyncIndexMgr
*
syncIndexMgrCreate
(
SSyncNode
*
pSyncNode
)
{
SSyncIndexMgr
*
syncIndexMgrCreate
(
SSyncNode
*
pSyncNode
)
{
SSyncIndexMgr
*
pSyncIndexMgr
=
taosMemoryMalloc
(
sizeof
(
SSyncIndexMgr
));
SSyncIndexMgr
*
pSyncIndexMgr
=
taosMemoryMalloc
(
sizeof
(
SSyncIndexMgr
));
assert
(
pSyncIndexMgr
!=
NULL
);
ASSERT
(
pSyncIndexMgr
!=
NULL
);
memset
(
pSyncIndexMgr
,
0
,
sizeof
(
SSyncIndexMgr
));
memset
(
pSyncIndexMgr
,
0
,
sizeof
(
SSyncIndexMgr
));
pSyncIndexMgr
->
replicas
=
&
(
pSyncNode
->
replicasId
);
pSyncIndexMgr
->
replicas
=
&
(
pSyncNode
->
replicasId
);
...
@@ -63,7 +63,7 @@ void syncIndexMgrSetIndex(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId,
...
@@ -63,7 +63,7 @@ void syncIndexMgrSetIndex(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId,
}
}
// maybe config change
// maybe config change
//
assert
(0);
//
ASSERT
(0);
char
host
[
128
];
char
host
[
128
];
uint16_t
port
;
uint16_t
port
;
...
@@ -169,7 +169,7 @@ void syncIndexMgrSetTerm(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, S
...
@@ -169,7 +169,7 @@ void syncIndexMgrSetTerm(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId, S
}
}
// maybe config change
// maybe config change
//
assert
(0);
//
ASSERT
(0);
char
host
[
128
];
char
host
[
128
];
uint16_t
port
;
uint16_t
port
;
syncUtilU642Addr
(
pRaftId
->
addr
,
host
,
sizeof
(
host
),
&
port
);
syncUtilU642Addr
(
pRaftId
->
addr
,
host
,
sizeof
(
host
),
&
port
);
...
@@ -183,5 +183,5 @@ SyncTerm syncIndexMgrGetTerm(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftI
...
@@ -183,5 +183,5 @@ SyncTerm syncIndexMgrGetTerm(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftI
return
term
;
return
term
;
}
}
}
}
assert
(
0
);
ASSERT
(
0
);
}
}
\ No newline at end of file
source/libs/sync/src/syncMain.c
浏览文件 @
980cf46b
...
@@ -75,7 +75,7 @@ int32_t syncInit() {
...
@@ -75,7 +75,7 @@ int32_t syncInit() {
void
syncCleanUp
()
{
void
syncCleanUp
()
{
int32_t
ret
=
syncEnvStop
();
int32_t
ret
=
syncEnvStop
();
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
if
(
tsNodeRefId
!=
-
1
)
{
if
(
tsNodeRefId
!=
-
1
)
{
taosCloseRef
(
tsNodeRefId
);
taosCloseRef
(
tsNodeRefId
);
...
@@ -85,7 +85,7 @@ void syncCleanUp() {
...
@@ -85,7 +85,7 @@ void syncCleanUp() {
int64_t
syncOpen
(
const
SSyncInfo
*
pSyncInfo
)
{
int64_t
syncOpen
(
const
SSyncInfo
*
pSyncInfo
)
{
SSyncNode
*
pSyncNode
=
syncNodeOpen
(
pSyncInfo
);
SSyncNode
*
pSyncNode
=
syncNodeOpen
(
pSyncInfo
);
assert
(
pSyncNode
!=
NULL
);
ASSERT
(
pSyncNode
!=
NULL
);
if
(
gRaftDetailLog
)
{
if
(
gRaftDetailLog
)
{
syncNodeLog2
(
"syncNodeOpen open success"
,
pSyncNode
);
syncNodeLog2
(
"syncNodeOpen open success"
,
pSyncNode
);
...
@@ -318,7 +318,7 @@ bool syncCanLeaderTransfer(int64_t rid) {
...
@@ -318,7 +318,7 @@ bool syncCanLeaderTransfer(int64_t rid) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
false
;
return
false
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
if
(
pSyncNode
->
replicaNum
==
1
)
{
if
(
pSyncNode
->
replicaNum
==
1
)
{
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
...
@@ -355,7 +355,7 @@ ESyncState syncGetMyRole(int64_t rid) {
...
@@ -355,7 +355,7 @@ ESyncState syncGetMyRole(int64_t rid) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
TAOS_SYNC_STATE_ERROR
;
return
TAOS_SYNC_STATE_ERROR
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
ESyncState
state
=
pSyncNode
->
state
;
ESyncState
state
=
pSyncNode
->
state
;
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
...
@@ -367,7 +367,7 @@ bool syncIsReady(int64_t rid) {
...
@@ -367,7 +367,7 @@ bool syncIsReady(int64_t rid) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
false
;
return
false
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
bool
b
=
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_LEADER
)
&&
pSyncNode
->
restoreFinish
;
bool
b
=
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_LEADER
)
&&
pSyncNode
->
restoreFinish
;
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
return
b
;
return
b
;
...
@@ -378,7 +378,7 @@ bool syncIsRestoreFinish(int64_t rid) {
...
@@ -378,7 +378,7 @@ bool syncIsRestoreFinish(int64_t rid) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
false
;
return
false
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
bool
b
=
pSyncNode
->
restoreFinish
;
bool
b
=
pSyncNode
->
restoreFinish
;
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
...
@@ -390,7 +390,7 @@ int32_t syncGetSnapshotMeta(int64_t rid, struct SSnapshotMeta* sMeta) {
...
@@ -390,7 +390,7 @@ int32_t syncGetSnapshotMeta(int64_t rid, struct SSnapshotMeta* sMeta) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
-
1
;
return
-
1
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
sMeta
->
lastConfigIndex
=
pSyncNode
->
pRaftCfg
->
lastConfigIndex
;
sMeta
->
lastConfigIndex
=
pSyncNode
->
pRaftCfg
->
lastConfigIndex
;
sTrace
(
"vgId:%d, get snapshot meta, lastConfigIndex:%"
PRId64
,
pSyncNode
->
vgId
,
pSyncNode
->
pRaftCfg
->
lastConfigIndex
);
sTrace
(
"vgId:%d, get snapshot meta, lastConfigIndex:%"
PRId64
,
pSyncNode
->
vgId
,
pSyncNode
->
pRaftCfg
->
lastConfigIndex
);
...
@@ -404,7 +404,7 @@ int32_t syncGetSnapshotMetaByIndex(int64_t rid, SyncIndex snapshotIndex, struct
...
@@ -404,7 +404,7 @@ int32_t syncGetSnapshotMetaByIndex(int64_t rid, SyncIndex snapshotIndex, struct
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
-
1
;
return
-
1
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
pSyncNode
->
pRaftCfg
->
configIndexCount
>=
1
);
ASSERT
(
pSyncNode
->
pRaftCfg
->
configIndexCount
>=
1
);
SyncIndex
lastIndex
=
(
pSyncNode
->
pRaftCfg
->
configIndexArr
)[
0
];
SyncIndex
lastIndex
=
(
pSyncNode
->
pRaftCfg
->
configIndexArr
)[
0
];
...
@@ -448,7 +448,7 @@ SyncTerm syncGetMyTerm(int64_t rid) {
...
@@ -448,7 +448,7 @@ SyncTerm syncGetMyTerm(int64_t rid) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
TAOS_SYNC_STATE_ERROR
;
return
TAOS_SYNC_STATE_ERROR
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
SyncTerm
term
=
pSyncNode
->
pRaftStore
->
currentTerm
;
SyncTerm
term
=
pSyncNode
->
pRaftStore
->
currentTerm
;
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
...
@@ -460,7 +460,7 @@ SyncGroupId syncGetVgId(int64_t rid) {
...
@@ -460,7 +460,7 @@ SyncGroupId syncGetVgId(int64_t rid) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
TAOS_SYNC_STATE_ERROR
;
return
TAOS_SYNC_STATE_ERROR
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
SyncGroupId
vgId
=
pSyncNode
->
vgId
;
SyncGroupId
vgId
=
pSyncNode
->
vgId
;
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
...
@@ -473,7 +473,7 @@ void syncGetEpSet(int64_t rid, SEpSet* pEpSet) {
...
@@ -473,7 +473,7 @@ void syncGetEpSet(int64_t rid, SEpSet* pEpSet) {
memset
(
pEpSet
,
0
,
sizeof
(
*
pEpSet
));
memset
(
pEpSet
,
0
,
sizeof
(
*
pEpSet
));
return
;
return
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
pEpSet
->
numOfEps
=
0
;
pEpSet
->
numOfEps
=
0
;
for
(
int
i
=
0
;
i
<
pSyncNode
->
pRaftCfg
->
cfg
.
replicaNum
;
++
i
)
{
for
(
int
i
=
0
;
i
<
pSyncNode
->
pRaftCfg
->
cfg
.
replicaNum
;
++
i
)
{
snprintf
(
pEpSet
->
eps
[
i
].
fqdn
,
sizeof
(
pEpSet
->
eps
[
i
].
fqdn
),
"%s"
,
(
pSyncNode
->
pRaftCfg
->
cfg
.
nodeInfo
)[
i
].
nodeFqdn
);
snprintf
(
pEpSet
->
eps
[
i
].
fqdn
,
sizeof
(
pEpSet
->
eps
[
i
].
fqdn
),
"%s"
,
(
pSyncNode
->
pRaftCfg
->
cfg
.
nodeInfo
)[
i
].
nodeFqdn
);
...
@@ -494,7 +494,7 @@ int32_t syncGetRespRpc(int64_t rid, uint64_t index, SRpcMsg* msg) {
...
@@ -494,7 +494,7 @@ int32_t syncGetRespRpc(int64_t rid, uint64_t index, SRpcMsg* msg) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
TAOS_SYNC_STATE_ERROR
;
return
TAOS_SYNC_STATE_ERROR
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
SRespStub
stub
;
SRespStub
stub
;
int32_t
ret
=
syncRespMgrGet
(
pSyncNode
->
pSyncRespMgr
,
index
,
&
stub
);
int32_t
ret
=
syncRespMgrGet
(
pSyncNode
->
pSyncRespMgr
,
index
,
&
stub
);
...
@@ -511,7 +511,7 @@ int32_t syncGetAndDelRespRpc(int64_t rid, uint64_t index, SRpcHandleInfo* pInfo)
...
@@ -511,7 +511,7 @@ int32_t syncGetAndDelRespRpc(int64_t rid, uint64_t index, SRpcHandleInfo* pInfo)
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
TAOS_SYNC_STATE_ERROR
;
return
TAOS_SYNC_STATE_ERROR
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
SRespStub
stub
;
SRespStub
stub
;
int32_t
ret
=
syncRespMgrGetAndDel
(
pSyncNode
->
pSyncRespMgr
,
index
,
&
stub
);
int32_t
ret
=
syncRespMgrGetAndDel
(
pSyncNode
->
pSyncRespMgr
,
index
,
&
stub
);
...
@@ -530,7 +530,7 @@ void syncSetMsgCb(int64_t rid, const SMsgCb* msgcb) {
...
@@ -530,7 +530,7 @@ void syncSetMsgCb(int64_t rid, const SMsgCb* msgcb) {
sTrace
(
"syncSetQ get pSyncNode is NULL, rid:%ld"
,
rid
);
sTrace
(
"syncSetQ get pSyncNode is NULL, rid:%ld"
,
rid
);
return
;
return
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
pSyncNode
->
msgcb
=
msgcb
;
pSyncNode
->
msgcb
=
msgcb
;
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
...
@@ -542,7 +542,7 @@ char* sync2SimpleStr(int64_t rid) {
...
@@ -542,7 +542,7 @@ char* sync2SimpleStr(int64_t rid) {
sTrace
(
"syncSetRpc get pSyncNode is NULL, rid:%ld"
,
rid
);
sTrace
(
"syncSetRpc get pSyncNode is NULL, rid:%ld"
,
rid
);
return
NULL
;
return
NULL
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
char
*
s
=
syncNode2SimpleStr
(
pSyncNode
);
char
*
s
=
syncNode2SimpleStr
(
pSyncNode
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
...
@@ -554,7 +554,7 @@ void setPingTimerMS(int64_t rid, int32_t pingTimerMS) {
...
@@ -554,7 +554,7 @@ void setPingTimerMS(int64_t rid, int32_t pingTimerMS) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
;
return
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
pSyncNode
->
pingBaseLine
=
pingTimerMS
;
pSyncNode
->
pingBaseLine
=
pingTimerMS
;
pSyncNode
->
pingTimerMS
=
pingTimerMS
;
pSyncNode
->
pingTimerMS
=
pingTimerMS
;
...
@@ -566,7 +566,7 @@ void setElectTimerMS(int64_t rid, int32_t electTimerMS) {
...
@@ -566,7 +566,7 @@ void setElectTimerMS(int64_t rid, int32_t electTimerMS) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
;
return
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
pSyncNode
->
electBaseLine
=
electTimerMS
;
pSyncNode
->
electBaseLine
=
electTimerMS
;
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
...
@@ -577,7 +577,7 @@ void setHeartbeatTimerMS(int64_t rid, int32_t hbTimerMS) {
...
@@ -577,7 +577,7 @@ void setHeartbeatTimerMS(int64_t rid, int32_t hbTimerMS) {
if
(
pSyncNode
==
NULL
)
{
if
(
pSyncNode
==
NULL
)
{
return
;
return
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
pSyncNode
->
hbBaseLine
=
hbTimerMS
;
pSyncNode
->
hbBaseLine
=
hbTimerMS
;
pSyncNode
->
heartbeatTimerMS
=
hbTimerMS
;
pSyncNode
->
heartbeatTimerMS
=
hbTimerMS
;
...
@@ -592,7 +592,7 @@ int32_t syncPropose(int64_t rid, const SRpcMsg* pMsg, bool isWeak) {
...
@@ -592,7 +592,7 @@ int32_t syncPropose(int64_t rid, const SRpcMsg* pMsg, bool isWeak) {
terrno
=
TSDB_CODE_SYN_INTERNAL_ERROR
;
terrno
=
TSDB_CODE_SYN_INTERNAL_ERROR
;
return
-
1
;
return
-
1
;
}
}
assert
(
rid
==
pSyncNode
->
rid
);
ASSERT
(
rid
==
pSyncNode
->
rid
);
ret
=
syncNodePropose
(
pSyncNode
,
pMsg
,
isWeak
);
ret
=
syncNodePropose
(
pSyncNode
,
pMsg
,
isWeak
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
taosReleaseRef
(
tsNodeRefId
,
pSyncNode
->
rid
);
...
@@ -662,7 +662,7 @@ SSyncNode* syncNodeOpen(const SSyncInfo* pOldSyncInfo) {
...
@@ -662,7 +662,7 @@ SSyncNode* syncNodeOpen(const SSyncInfo* pOldSyncInfo) {
SSyncInfo
*
pSyncInfo
=
(
SSyncInfo
*
)
pOldSyncInfo
;
SSyncInfo
*
pSyncInfo
=
(
SSyncInfo
*
)
pOldSyncInfo
;
SSyncNode
*
pSyncNode
=
(
SSyncNode
*
)
taosMemoryMalloc
(
sizeof
(
SSyncNode
));
SSyncNode
*
pSyncNode
=
(
SSyncNode
*
)
taosMemoryMalloc
(
sizeof
(
SSyncNode
));
assert
(
pSyncNode
!=
NULL
);
ASSERT
(
pSyncNode
!=
NULL
);
memset
(
pSyncNode
,
0
,
sizeof
(
SSyncNode
));
memset
(
pSyncNode
,
0
,
sizeof
(
SSyncNode
));
int32_t
ret
=
0
;
int32_t
ret
=
0
;
...
@@ -682,12 +682,12 @@ SSyncNode* syncNodeOpen(const SSyncInfo* pOldSyncInfo) {
...
@@ -682,12 +682,12 @@ SSyncNode* syncNodeOpen(const SSyncInfo* pOldSyncInfo) {
meta
.
snapshotEnable
=
pSyncInfo
->
snapshotEnable
;
meta
.
snapshotEnable
=
pSyncInfo
->
snapshotEnable
;
meta
.
lastConfigIndex
=
SYNC_INDEX_INVALID
;
meta
.
lastConfigIndex
=
SYNC_INDEX_INVALID
;
ret
=
raftCfgCreateFile
((
SSyncCfg
*
)
&
(
pSyncInfo
->
syncCfg
),
meta
,
pSyncNode
->
configPath
);
ret
=
raftCfgCreateFile
((
SSyncCfg
*
)
&
(
pSyncInfo
->
syncCfg
),
meta
,
pSyncNode
->
configPath
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
}
else
{
}
else
{
// update syncCfg by raft_config.json
// update syncCfg by raft_config.json
pSyncNode
->
pRaftCfg
=
raftCfgOpen
(
pSyncNode
->
configPath
);
pSyncNode
->
pRaftCfg
=
raftCfgOpen
(
pSyncNode
->
configPath
);
assert
(
pSyncNode
->
pRaftCfg
!=
NULL
);
ASSERT
(
pSyncNode
->
pRaftCfg
!=
NULL
);
pSyncInfo
->
syncCfg
=
pSyncNode
->
pRaftCfg
->
cfg
;
pSyncInfo
->
syncCfg
=
pSyncNode
->
pRaftCfg
->
cfg
;
if
(
gRaftDetailLog
)
{
if
(
gRaftDetailLog
)
{
...
@@ -712,7 +712,7 @@ SSyncNode* syncNodeOpen(const SSyncInfo* pOldSyncInfo) {
...
@@ -712,7 +712,7 @@ SSyncNode* syncNodeOpen(const SSyncInfo* pOldSyncInfo) {
// init raft config
// init raft config
pSyncNode
->
pRaftCfg
=
raftCfgOpen
(
pSyncNode
->
configPath
);
pSyncNode
->
pRaftCfg
=
raftCfgOpen
(
pSyncNode
->
configPath
);
assert
(
pSyncNode
->
pRaftCfg
!=
NULL
);
ASSERT
(
pSyncNode
->
pRaftCfg
!=
NULL
);
// init internal
// init internal
pSyncNode
->
myNodeInfo
=
pSyncNode
->
pRaftCfg
->
cfg
.
nodeInfo
[
pSyncNode
->
pRaftCfg
->
cfg
.
myIndex
];
pSyncNode
->
myNodeInfo
=
pSyncNode
->
pRaftCfg
->
cfg
.
nodeInfo
[
pSyncNode
->
pRaftCfg
->
cfg
.
myIndex
];
...
@@ -771,23 +771,23 @@ SSyncNode* syncNodeOpen(const SSyncInfo* pOldSyncInfo) {
...
@@ -771,23 +771,23 @@ SSyncNode* syncNodeOpen(const SSyncInfo* pOldSyncInfo) {
// init TLA+ server vars
// init TLA+ server vars
pSyncNode
->
state
=
TAOS_SYNC_STATE_FOLLOWER
;
pSyncNode
->
state
=
TAOS_SYNC_STATE_FOLLOWER
;
pSyncNode
->
pRaftStore
=
raftStoreOpen
(
pSyncNode
->
raftStorePath
);
pSyncNode
->
pRaftStore
=
raftStoreOpen
(
pSyncNode
->
raftStorePath
);
assert
(
pSyncNode
->
pRaftStore
!=
NULL
);
ASSERT
(
pSyncNode
->
pRaftStore
!=
NULL
);
// init TLA+ candidate vars
// init TLA+ candidate vars
pSyncNode
->
pVotesGranted
=
voteGrantedCreate
(
pSyncNode
);
pSyncNode
->
pVotesGranted
=
voteGrantedCreate
(
pSyncNode
);
assert
(
pSyncNode
->
pVotesGranted
!=
NULL
);
ASSERT
(
pSyncNode
->
pVotesGranted
!=
NULL
);
pSyncNode
->
pVotesRespond
=
votesRespondCreate
(
pSyncNode
);
pSyncNode
->
pVotesRespond
=
votesRespondCreate
(
pSyncNode
);
assert
(
pSyncNode
->
pVotesRespond
!=
NULL
);
ASSERT
(
pSyncNode
->
pVotesRespond
!=
NULL
);
// init TLA+ leader vars
// init TLA+ leader vars
pSyncNode
->
pNextIndex
=
syncIndexMgrCreate
(
pSyncNode
);
pSyncNode
->
pNextIndex
=
syncIndexMgrCreate
(
pSyncNode
);
assert
(
pSyncNode
->
pNextIndex
!=
NULL
);
ASSERT
(
pSyncNode
->
pNextIndex
!=
NULL
);
pSyncNode
->
pMatchIndex
=
syncIndexMgrCreate
(
pSyncNode
);
pSyncNode
->
pMatchIndex
=
syncIndexMgrCreate
(
pSyncNode
);
assert
(
pSyncNode
->
pMatchIndex
!=
NULL
);
ASSERT
(
pSyncNode
->
pMatchIndex
!=
NULL
);
// init TLA+ log vars
// init TLA+ log vars
pSyncNode
->
pLogStore
=
logStoreCreate
(
pSyncNode
);
pSyncNode
->
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pSyncNode
->
pLogStore
!=
NULL
);
ASSERT
(
pSyncNode
->
pLogStore
!=
NULL
);
pSyncNode
->
commitIndex
=
SYNC_INDEX_INVALID
;
pSyncNode
->
commitIndex
=
SYNC_INDEX_INVALID
;
// timer ms init
// timer ms init
...
@@ -845,7 +845,7 @@ SSyncNode* syncNodeOpen(const SSyncInfo* pOldSyncInfo) {
...
@@ -845,7 +845,7 @@ SSyncNode* syncNodeOpen(const SSyncInfo* pOldSyncInfo) {
// tools
// tools
pSyncNode
->
pSyncRespMgr
=
syncRespMgrCreate
(
pSyncNode
,
0
);
pSyncNode
->
pSyncRespMgr
=
syncRespMgrCreate
(
pSyncNode
,
0
);
assert
(
pSyncNode
->
pSyncRespMgr
!=
NULL
);
ASSERT
(
pSyncNode
->
pSyncRespMgr
!=
NULL
);
// restore state
// restore state
pSyncNode
->
restoreFinish
=
false
;
pSyncNode
->
restoreFinish
=
false
;
...
@@ -893,7 +893,7 @@ void syncNodeStart(SSyncNode* pSyncNode) {
...
@@ -893,7 +893,7 @@ void syncNodeStart(SSyncNode* pSyncNode) {
// int32_t ret = 0;
// int32_t ret = 0;
// ret = syncNodeStartPingTimer(pSyncNode);
// ret = syncNodeStartPingTimer(pSyncNode);
//
assert
(ret == 0);
//
ASSERT
(ret == 0);
if
(
gRaftDetailLog
)
{
if
(
gRaftDetailLog
)
{
syncNodeLog2
(
"==state change become leader immediately=="
,
pSyncNode
);
syncNodeLog2
(
"==state change become leader immediately=="
,
pSyncNode
);
...
@@ -915,10 +915,10 @@ void syncNodeClose(SSyncNode* pSyncNode) {
...
@@ -915,10 +915,10 @@ void syncNodeClose(SSyncNode* pSyncNode) {
syncNodeEventLog
(
pSyncNode
,
"sync close"
);
syncNodeEventLog
(
pSyncNode
,
"sync close"
);
int32_t
ret
;
int32_t
ret
;
assert
(
pSyncNode
!=
NULL
);
ASSERT
(
pSyncNode
!=
NULL
);
ret
=
raftStoreClose
(
pSyncNode
->
pRaftStore
);
ret
=
raftStoreClose
(
pSyncNode
->
pRaftStore
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
syncRespMgrDestroy
(
pSyncNode
->
pSyncRespMgr
);
syncRespMgrDestroy
(
pSyncNode
->
pSyncRespMgr
);
voteGrantedDestroy
(
pSyncNode
->
pVotesGranted
);
voteGrantedDestroy
(
pSyncNode
->
pVotesGranted
);
...
@@ -980,7 +980,7 @@ int32_t syncNodePingSelf(SSyncNode* pSyncNode) {
...
@@ -980,7 +980,7 @@ int32_t syncNodePingSelf(SSyncNode* pSyncNode) {
int32_t
ret
=
0
;
int32_t
ret
=
0
;
SyncPing
*
pMsg
=
syncPingBuild3
(
&
pSyncNode
->
myRaftId
,
&
pSyncNode
->
myRaftId
,
pSyncNode
->
vgId
);
SyncPing
*
pMsg
=
syncPingBuild3
(
&
pSyncNode
->
myRaftId
,
&
pSyncNode
->
myRaftId
,
pSyncNode
->
vgId
);
ret
=
syncNodePing
(
pSyncNode
,
&
pMsg
->
destId
,
pMsg
);
ret
=
syncNodePing
(
pSyncNode
,
&
pMsg
->
destId
,
pMsg
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
syncPingDestroy
(
pMsg
);
syncPingDestroy
(
pMsg
);
return
ret
;
return
ret
;
...
@@ -992,7 +992,7 @@ int32_t syncNodePingPeers(SSyncNode* pSyncNode) {
...
@@ -992,7 +992,7 @@ int32_t syncNodePingPeers(SSyncNode* pSyncNode) {
SRaftId
*
destId
=
&
(
pSyncNode
->
peersId
[
i
]);
SRaftId
*
destId
=
&
(
pSyncNode
->
peersId
[
i
]);
SyncPing
*
pMsg
=
syncPingBuild3
(
&
pSyncNode
->
myRaftId
,
destId
,
pSyncNode
->
vgId
);
SyncPing
*
pMsg
=
syncPingBuild3
(
&
pSyncNode
->
myRaftId
,
destId
,
pSyncNode
->
vgId
);
ret
=
syncNodePing
(
pSyncNode
,
destId
,
pMsg
);
ret
=
syncNodePing
(
pSyncNode
,
destId
,
pMsg
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
syncPingDestroy
(
pMsg
);
syncPingDestroy
(
pMsg
);
}
}
return
ret
;
return
ret
;
...
@@ -1004,7 +1004,7 @@ int32_t syncNodePingAll(SSyncNode* pSyncNode) {
...
@@ -1004,7 +1004,7 @@ int32_t syncNodePingAll(SSyncNode* pSyncNode) {
SRaftId
*
destId
=
&
(
pSyncNode
->
replicasId
[
i
]);
SRaftId
*
destId
=
&
(
pSyncNode
->
replicasId
[
i
]);
SyncPing
*
pMsg
=
syncPingBuild3
(
&
pSyncNode
->
myRaftId
,
destId
,
pSyncNode
->
vgId
);
SyncPing
*
pMsg
=
syncPingBuild3
(
&
pSyncNode
->
myRaftId
,
destId
,
pSyncNode
->
vgId
);
ret
=
syncNodePing
(
pSyncNode
,
destId
,
pMsg
);
ret
=
syncNodePing
(
pSyncNode
,
destId
,
pMsg
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
syncPingDestroy
(
pMsg
);
syncPingDestroy
(
pMsg
);
}
}
return
ret
;
return
ret
;
...
@@ -1311,32 +1311,86 @@ void syncNodeEventLog(const SSyncNode* pSyncNode, char* str) {
...
@@ -1311,32 +1311,86 @@ void syncNodeEventLog(const SSyncNode* pSyncNode, char* str) {
if
(
userStrLen
<
256
)
{
if
(
userStrLen
<
256
)
{
char
logBuf
[
128
+
256
];
char
logBuf
[
128
+
256
];
snprintf
(
logBuf
,
sizeof
(
logBuf
),
if
(
pSyncNode
!=
NULL
&&
pSyncNode
->
pRaftCfg
!=
NULL
&&
pSyncNode
->
pRaftStore
!=
NULL
)
{
"vgId:%d, sync %s %s, term:%lu, commit:%ld, beginlog:%ld, lastlog:%ld, lastsnapshot:%ld, standby:%d, "
snprintf
(
logBuf
,
sizeof
(
logBuf
),
"replica-num:%d, "
"vgId:%d, sync %s %s, term:%lu, commit:%ld, beginlog:%ld, lastlog:%ld, lastsnapshot:%ld, standby:%d, "
"lconfig:%ld, changing:%d"
,
"replica-num:%d, "
pSyncNode
->
vgId
,
syncUtilState2String
(
pSyncNode
->
state
),
str
,
pSyncNode
->
pRaftStore
->
currentTerm
,
"lconfig:%ld, changing:%d"
,
pSyncNode
->
commitIndex
,
logBeginIndex
,
logLastIndex
,
snapshot
.
lastApplyIndex
,
pSyncNode
->
vgId
,
syncUtilState2String
(
pSyncNode
->
state
),
str
,
pSyncNode
->
pRaftStore
->
currentTerm
,
pSyncNode
->
pRaftCfg
->
isStandBy
,
pSyncNode
->
replicaNum
,
pSyncNode
->
pRaftCfg
->
lastConfigIndex
,
pSyncNode
->
commitIndex
,
logBeginIndex
,
logLastIndex
,
snapshot
.
lastApplyIndex
,
pSyncNode
->
changing
);
pSyncNode
->
pRaftCfg
->
isStandBy
,
pSyncNode
->
replicaNum
,
pSyncNode
->
pRaftCfg
->
lastConfigIndex
,
pSyncNode
->
changing
);
}
else
{
snprintf
(
logBuf
,
sizeof
(
logBuf
),
"%s"
,
str
);
}
sDebug
(
"%s"
,
logBuf
);
sDebug
(
"%s"
,
logBuf
);
}
else
{
}
else
{
int
len
=
128
+
userStrLen
;
int
len
=
128
+
userStrLen
;
char
*
s
=
(
char
*
)
taosMemoryMalloc
(
len
);
char
*
s
=
(
char
*
)
taosMemoryMalloc
(
len
);
snprintf
(
s
,
len
,
if
(
pSyncNode
!=
NULL
&&
pSyncNode
->
pRaftCfg
!=
NULL
&&
pSyncNode
->
pRaftStore
!=
NULL
)
{
"vgId:%d, sync %s %s, term:%lu, commit:%ld, beginlog:%ld, lastlog:%ld, lastsnapshot:%ld, standby:%d, "
snprintf
(
s
,
len
,
"replica-num:%d, "
"vgId:%d, sync %s %s, term:%lu, commit:%ld, beginlog:%ld, lastlog:%ld, lastsnapshot:%ld, standby:%d, "
"lconfig:%ld, changing:%d"
,
"replica-num:%d, "
pSyncNode
->
vgId
,
syncUtilState2String
(
pSyncNode
->
state
),
str
,
pSyncNode
->
pRaftStore
->
currentTerm
,
"lconfig:%ld, changing:%d"
,
pSyncNode
->
commitIndex
,
logBeginIndex
,
logLastIndex
,
snapshot
.
lastApplyIndex
,
pSyncNode
->
vgId
,
syncUtilState2String
(
pSyncNode
->
state
),
str
,
pSyncNode
->
pRaftStore
->
currentTerm
,
pSyncNode
->
pRaftCfg
->
isStandBy
,
pSyncNode
->
replicaNum
,
pSyncNode
->
pRaftCfg
->
lastConfigIndex
,
pSyncNode
->
commitIndex
,
logBeginIndex
,
logLastIndex
,
snapshot
.
lastApplyIndex
,
pSyncNode
->
changing
);
pSyncNode
->
pRaftCfg
->
isStandBy
,
pSyncNode
->
replicaNum
,
pSyncNode
->
pRaftCfg
->
lastConfigIndex
,
pSyncNode
->
changing
);
}
else
{
snprintf
(
s
,
len
,
"%s"
,
str
);
}
sDebug
(
"%s"
,
s
);
sDebug
(
"%s"
,
s
);
taosMemoryFree
(
s
);
taosMemoryFree
(
s
);
}
}
}
}
void
syncNodeErrorLog
(
const
SSyncNode
*
pSyncNode
,
char
*
str
)
{
int32_t
userStrLen
=
strlen
(
str
);
SSnapshot
snapshot
=
{.
data
=
NULL
,
.
lastApplyIndex
=
-
1
,
.
lastApplyTerm
=
0
};
if
(
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
!=
NULL
)
{
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
(
pSyncNode
->
pFsm
,
&
snapshot
);
}
SyncIndex
logLastIndex
=
pSyncNode
->
pLogStore
->
syncLogLastIndex
(
pSyncNode
->
pLogStore
);
SyncIndex
logBeginIndex
=
pSyncNode
->
pLogStore
->
syncLogBeginIndex
(
pSyncNode
->
pLogStore
);
if
(
userStrLen
<
256
)
{
char
logBuf
[
128
+
256
];
if
(
pSyncNode
!=
NULL
&&
pSyncNode
->
pRaftCfg
!=
NULL
&&
pSyncNode
->
pRaftStore
!=
NULL
)
{
snprintf
(
logBuf
,
sizeof
(
logBuf
),
"vgId:%d, sync %s %s, term:%lu, commit:%ld, beginlog:%ld, lastlog:%ld, lastsnapshot:%ld, standby:%d, "
"replica-num:%d, "
"lconfig:%ld, changing:%d"
,
pSyncNode
->
vgId
,
syncUtilState2String
(
pSyncNode
->
state
),
str
,
pSyncNode
->
pRaftStore
->
currentTerm
,
pSyncNode
->
commitIndex
,
logBeginIndex
,
logLastIndex
,
snapshot
.
lastApplyIndex
,
pSyncNode
->
pRaftCfg
->
isStandBy
,
pSyncNode
->
replicaNum
,
pSyncNode
->
pRaftCfg
->
lastConfigIndex
,
pSyncNode
->
changing
);
}
else
{
snprintf
(
logBuf
,
sizeof
(
logBuf
),
"%s"
,
str
);
}
sError
(
"%s"
,
logBuf
);
}
else
{
int
len
=
128
+
userStrLen
;
char
*
s
=
(
char
*
)
taosMemoryMalloc
(
len
);
if
(
pSyncNode
!=
NULL
&&
pSyncNode
->
pRaftCfg
!=
NULL
&&
pSyncNode
->
pRaftStore
!=
NULL
)
{
snprintf
(
s
,
len
,
"vgId:%d, sync %s %s, term:%lu, commit:%ld, beginlog:%ld, lastlog:%ld, lastsnapshot:%ld, standby:%d, "
"replica-num:%d, "
"lconfig:%ld, changing:%d"
,
pSyncNode
->
vgId
,
syncUtilState2String
(
pSyncNode
->
state
),
str
,
pSyncNode
->
pRaftStore
->
currentTerm
,
pSyncNode
->
commitIndex
,
logBeginIndex
,
logLastIndex
,
snapshot
.
lastApplyIndex
,
pSyncNode
->
pRaftCfg
->
isStandBy
,
pSyncNode
->
replicaNum
,
pSyncNode
->
pRaftCfg
->
lastConfigIndex
,
pSyncNode
->
changing
);
}
else
{
snprintf
(
s
,
len
,
"%s"
,
str
);
}
sError
(
"%s"
,
s
);
taosMemoryFree
(
s
);
}
}
char
*
syncNode2SimpleStr
(
const
SSyncNode
*
pSyncNode
)
{
char
*
syncNode2SimpleStr
(
const
SSyncNode
*
pSyncNode
)
{
int
len
=
256
;
int
len
=
256
;
char
*
s
=
(
char
*
)
taosMemoryMalloc
(
len
);
char
*
s
=
(
char
*
)
taosMemoryMalloc
(
len
);
...
@@ -1702,8 +1756,8 @@ void syncNodeBecomeLeader(SSyncNode* pSyncNode, const char* debugStr) {
...
@@ -1702,8 +1756,8 @@ void syncNodeBecomeLeader(SSyncNode* pSyncNode, const char* debugStr) {
}
}
void
syncNodeCandidate2Leader
(
SSyncNode
*
pSyncNode
)
{
void
syncNodeCandidate2Leader
(
SSyncNode
*
pSyncNode
)
{
assert
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_CANDIDATE
);
ASSERT
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_CANDIDATE
);
assert
(
voteGrantedMajority
(
pSyncNode
->
pVotesGranted
));
ASSERT
(
voteGrantedMajority
(
pSyncNode
->
pVotesGranted
));
syncNodeBecomeLeader
(
pSyncNode
,
"candidate to leader"
);
syncNodeBecomeLeader
(
pSyncNode
,
"candidate to leader"
);
syncNodeLog2
(
"==state change syncNodeCandidate2Leader=="
,
pSyncNode
);
syncNodeLog2
(
"==state change syncNodeCandidate2Leader=="
,
pSyncNode
);
...
@@ -1715,21 +1769,21 @@ void syncNodeCandidate2Leader(SSyncNode* pSyncNode) {
...
@@ -1715,21 +1769,21 @@ void syncNodeCandidate2Leader(SSyncNode* pSyncNode) {
}
}
void
syncNodeFollower2Candidate
(
SSyncNode
*
pSyncNode
)
{
void
syncNodeFollower2Candidate
(
SSyncNode
*
pSyncNode
)
{
assert
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_FOLLOWER
);
ASSERT
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_FOLLOWER
);
pSyncNode
->
state
=
TAOS_SYNC_STATE_CANDIDATE
;
pSyncNode
->
state
=
TAOS_SYNC_STATE_CANDIDATE
;
syncNodeLog2
(
"==state change syncNodeFollower2Candidate=="
,
pSyncNode
);
syncNodeLog2
(
"==state change syncNodeFollower2Candidate=="
,
pSyncNode
);
}
}
void
syncNodeLeader2Follower
(
SSyncNode
*
pSyncNode
)
{
void
syncNodeLeader2Follower
(
SSyncNode
*
pSyncNode
)
{
assert
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_LEADER
);
ASSERT
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_LEADER
);
syncNodeBecomeFollower
(
pSyncNode
,
"leader to follower"
);
syncNodeBecomeFollower
(
pSyncNode
,
"leader to follower"
);
syncNodeLog2
(
"==state change syncNodeLeader2Follower=="
,
pSyncNode
);
syncNodeLog2
(
"==state change syncNodeLeader2Follower=="
,
pSyncNode
);
}
}
void
syncNodeCandidate2Follower
(
SSyncNode
*
pSyncNode
)
{
void
syncNodeCandidate2Follower
(
SSyncNode
*
pSyncNode
)
{
assert
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_CANDIDATE
);
ASSERT
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_CANDIDATE
);
syncNodeBecomeFollower
(
pSyncNode
,
"candidate to follower"
);
syncNodeBecomeFollower
(
pSyncNode
,
"candidate to follower"
);
syncNodeLog2
(
"==state change syncNodeCandidate2Follower=="
,
pSyncNode
);
syncNodeLog2
(
"==state change syncNodeCandidate2Follower=="
,
pSyncNode
);
...
@@ -1740,8 +1794,8 @@ void syncNodeCandidate2Follower(SSyncNode* pSyncNode) {
...
@@ -1740,8 +1794,8 @@ void syncNodeCandidate2Follower(SSyncNode* pSyncNode) {
// just called by syncNodeVoteForSelf
// just called by syncNodeVoteForSelf
// need assert
// need assert
void
syncNodeVoteForTerm
(
SSyncNode
*
pSyncNode
,
SyncTerm
term
,
SRaftId
*
pRaftId
)
{
void
syncNodeVoteForTerm
(
SSyncNode
*
pSyncNode
,
SyncTerm
term
,
SRaftId
*
pRaftId
)
{
assert
(
term
==
pSyncNode
->
pRaftStore
->
currentTerm
);
ASSERT
(
term
==
pSyncNode
->
pRaftStore
->
currentTerm
);
assert
(
!
raftStoreHasVoted
(
pSyncNode
->
pRaftStore
));
ASSERT
(
!
raftStoreHasVoted
(
pSyncNode
->
pRaftStore
));
raftStoreVote
(
pSyncNode
->
pRaftStore
,
pRaftId
);
raftStoreVote
(
pSyncNode
->
pRaftStore
,
pRaftId
);
}
}
...
@@ -1764,7 +1818,7 @@ void syncNodeVoteForSelf(SSyncNode* pSyncNode) {
...
@@ -1764,7 +1818,7 @@ void syncNodeVoteForSelf(SSyncNode* pSyncNode) {
// snapshot --------------
// snapshot --------------
bool
syncNodeHasSnapshot
(
SSyncNode
*
pSyncNode
)
{
bool
syncNodeHasSnapshot
(
SSyncNode
*
pSyncNode
)
{
bool
ret
=
false
;
bool
ret
=
false
;
SSnapshot
snapshot
=
{.
data
=
NULL
,
.
lastApplyIndex
=
-
1
,
.
lastApplyTerm
=
0
};
SSnapshot
snapshot
=
{.
data
=
NULL
,
.
lastApplyIndex
=
-
1
,
.
lastApplyTerm
=
0
,
.
lastConfigIndex
=
-
1
};
if
(
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
!=
NULL
)
{
if
(
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
!=
NULL
)
{
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
(
pSyncNode
->
pFsm
,
&
snapshot
);
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
(
pSyncNode
->
pFsm
,
&
snapshot
);
if
(
snapshot
.
lastApplyIndex
>=
SYNC_INDEX_BEGIN
)
{
if
(
snapshot
.
lastApplyIndex
>=
SYNC_INDEX_BEGIN
)
{
...
@@ -1774,6 +1828,7 @@ bool syncNodeHasSnapshot(SSyncNode* pSyncNode) {
...
@@ -1774,6 +1828,7 @@ bool syncNodeHasSnapshot(SSyncNode* pSyncNode) {
return
ret
;
return
ret
;
}
}
#if 0
bool syncNodeIsIndexInSnapshot(SSyncNode* pSyncNode, SyncIndex index) {
bool syncNodeIsIndexInSnapshot(SSyncNode* pSyncNode, SyncIndex index) {
ASSERT(syncNodeHasSnapshot(pSyncNode));
ASSERT(syncNodeHasSnapshot(pSyncNode));
ASSERT(pSyncNode->pFsm->FpGetSnapshotInfo != NULL);
ASSERT(pSyncNode->pFsm->FpGetSnapshotInfo != NULL);
...
@@ -1784,6 +1839,7 @@ bool syncNodeIsIndexInSnapshot(SSyncNode* pSyncNode, SyncIndex index) {
...
@@ -1784,6 +1839,7 @@ bool syncNodeIsIndexInSnapshot(SSyncNode* pSyncNode, SyncIndex index) {
bool b = (index <= snapshot.lastApplyIndex);
bool b = (index <= snapshot.lastApplyIndex);
return b;
return b;
}
}
#endif
SyncIndex
syncNodeGetLastIndex
(
SSyncNode
*
pSyncNode
)
{
SyncIndex
syncNodeGetLastIndex
(
SSyncNode
*
pSyncNode
)
{
SSnapshot
snapshot
=
{.
data
=
NULL
,
.
lastApplyIndex
=
-
1
,
.
lastApplyTerm
=
0
};
SSnapshot
snapshot
=
{.
data
=
NULL
,
.
lastApplyIndex
=
-
1
,
.
lastApplyTerm
=
0
};
...
@@ -1800,7 +1856,7 @@ SyncTerm syncNodeGetLastTerm(SSyncNode* pSyncNode) {
...
@@ -1800,7 +1856,7 @@ SyncTerm syncNodeGetLastTerm(SSyncNode* pSyncNode) {
SyncTerm
lastTerm
=
0
;
SyncTerm
lastTerm
=
0
;
if
(
syncNodeHasSnapshot
(
pSyncNode
))
{
if
(
syncNodeHasSnapshot
(
pSyncNode
))
{
// has snapshot
// has snapshot
SSnapshot
snapshot
=
{.
data
=
NULL
,
.
lastApplyIndex
=
-
1
,
.
lastApplyTerm
=
0
};
SSnapshot
snapshot
=
{.
data
=
NULL
,
.
lastApplyIndex
=
-
1
,
.
lastApplyTerm
=
0
,
.
lastConfigIndex
=
-
1
};
if
(
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
!=
NULL
)
{
if
(
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
!=
NULL
)
{
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
(
pSyncNode
->
pFsm
,
&
snapshot
);
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
(
pSyncNode
->
pFsm
,
&
snapshot
);
}
}
...
@@ -1834,8 +1890,8 @@ SyncIndex syncNodeSyncStartIndex(SSyncNode* pSyncNode) {
...
@@ -1834,8 +1890,8 @@ SyncIndex syncNodeSyncStartIndex(SSyncNode* pSyncNode) {
SyncIndex
syncNodeGetPreIndex
(
SSyncNode
*
pSyncNode
,
SyncIndex
index
)
{
SyncIndex
syncNodeGetPreIndex
(
SSyncNode
*
pSyncNode
,
SyncIndex
index
)
{
ASSERT
(
index
>=
SYNC_INDEX_BEGIN
);
ASSERT
(
index
>=
SYNC_INDEX_BEGIN
);
SyncIndex
syncStartIndex
=
syncNodeSyncStartIndex
(
pSyncNode
);
SyncIndex
syncStartIndex
=
syncNodeSyncStartIndex
(
pSyncNode
);
if
(
index
>
syncStartIndex
)
{
if
(
index
>
syncStartIndex
)
{
syncNodeLog3
(
"syncNodeGetPreIndex"
,
pSyncNode
);
syncNodeLog3
(
"syncNodeGetPreIndex"
,
pSyncNode
);
ASSERT
(
0
);
ASSERT
(
0
);
...
@@ -1847,8 +1903,47 @@ SyncIndex syncNodeGetPreIndex(SSyncNode* pSyncNode, SyncIndex index) {
...
@@ -1847,8 +1903,47 @@ SyncIndex syncNodeGetPreIndex(SSyncNode* pSyncNode, SyncIndex index) {
SyncTerm
syncNodeGetPreTerm
(
SSyncNode
*
pSyncNode
,
SyncIndex
index
)
{
SyncTerm
syncNodeGetPreTerm
(
SSyncNode
*
pSyncNode
,
SyncIndex
index
)
{
ASSERT
(
index
>=
SYNC_INDEX_BEGIN
);
ASSERT
(
index
>=
SYNC_INDEX_BEGIN
);
SyncIndex
syncStartIndex
=
syncNodeSyncStartIndex
(
pSyncNode
);
SyncIndex
syncStartIndex
=
syncNodeSyncStartIndex
(
pSyncNode
);
if
(
index
>
syncStartIndex
)
{
syncNodeLog3
(
"syncNodeGetPreTerm"
,
pSyncNode
);
ASSERT
(
0
);
}
if
(
index
==
SYNC_INDEX_BEGIN
)
{
return
0
;
}
SyncTerm
preTerm
=
0
;
SyncIndex
preIndex
=
index
-
1
;
SSyncRaftEntry
*
pPreEntry
=
NULL
;
int32_t
code
=
pSyncNode
->
pLogStore
->
syncLogGetEntry
(
pSyncNode
->
pLogStore
,
preIndex
,
&
pPreEntry
);
if
(
code
==
0
)
{
ASSERT
(
pPreEntry
!=
NULL
);
preTerm
=
pPreEntry
->
term
;
taosMemoryFree
(
pPreEntry
);
return
preTerm
;
}
else
{
if
(
terrno
==
TSDB_CODE_WAL_LOG_NOT_EXIST
)
{
SSnapshot
snapshot
=
{.
data
=
NULL
,
.
lastApplyIndex
=
-
1
,
.
lastApplyTerm
=
0
,
.
lastConfigIndex
=
-
1
};
if
(
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
!=
NULL
)
{
pSyncNode
->
pFsm
->
FpGetSnapshotInfo
(
pSyncNode
->
pFsm
,
&
snapshot
);
if
(
snapshot
.
lastApplyIndex
==
preIndex
)
{
return
snapshot
.
lastApplyTerm
;
}
}
}
}
ASSERT
(
0
);
return
-
1
;
}
#if 0
SyncTerm syncNodeGetPreTerm(SSyncNode* pSyncNode, SyncIndex index) {
ASSERT(index >= SYNC_INDEX_BEGIN);
SyncIndex syncStartIndex = syncNodeSyncStartIndex(pSyncNode);
if (index > syncStartIndex) {
if (index > syncStartIndex) {
syncNodeLog3("syncNodeGetPreTerm", pSyncNode);
syncNodeLog3("syncNodeGetPreTerm", pSyncNode);
ASSERT(0);
ASSERT(0);
...
@@ -1861,7 +1956,7 @@ SyncTerm syncNodeGetPreTerm(SSyncNode* pSyncNode, SyncIndex index) {
...
@@ -1861,7 +1956,7 @@ SyncTerm syncNodeGetPreTerm(SSyncNode* pSyncNode, SyncIndex index) {
SyncTerm preTerm = 0;
SyncTerm preTerm = 0;
if (syncNodeHasSnapshot(pSyncNode)) {
if (syncNodeHasSnapshot(pSyncNode)) {
// has snapshot
// has snapshot
SSnapshot
snapshot
=
{.
data
=
NULL
,
.
lastApplyIndex
=
-
1
,
.
lastApplyTerm
=
0
};
SSnapshot snapshot = {.data = NULL, .lastApplyIndex = -1, .lastApplyTerm = 0
, .lastConfigIndex = -1
};
if (pSyncNode->pFsm->FpGetSnapshotInfo != NULL) {
if (pSyncNode->pFsm->FpGetSnapshotInfo != NULL) {
pSyncNode->pFsm->FpGetSnapshotInfo(pSyncNode->pFsm, &snapshot);
pSyncNode->pFsm->FpGetSnapshotInfo(pSyncNode->pFsm, &snapshot);
}
}
...
@@ -1908,6 +2003,7 @@ SyncTerm syncNodeGetPreTerm(SSyncNode* pSyncNode, SyncIndex index) {
...
@@ -1908,6 +2003,7 @@ SyncTerm syncNodeGetPreTerm(SSyncNode* pSyncNode, SyncIndex index) {
return preTerm;
return preTerm;
}
}
#endif
// get pre index and term of "index"
// get pre index and term of "index"
int32_t
syncNodeGetPreIndexTerm
(
SSyncNode
*
pSyncNode
,
SyncIndex
index
,
SyncIndex
*
pPreIndex
,
SyncTerm
*
pPreTerm
)
{
int32_t
syncNodeGetPreIndexTerm
(
SSyncNode
*
pSyncNode
,
SyncIndex
index
,
SyncIndex
*
pPreIndex
,
SyncTerm
*
pPreTerm
)
{
...
@@ -2062,17 +2158,17 @@ static void syncNodeEqHeartbeatTimer(void* param, void* tmrId) {
...
@@ -2062,17 +2158,17 @@ static void syncNodeEqHeartbeatTimer(void* param, void* tmrId) {
static
int32_t
syncNodeEqNoop
(
SSyncNode
*
ths
)
{
static
int32_t
syncNodeEqNoop
(
SSyncNode
*
ths
)
{
int32_t
ret
=
0
;
int32_t
ret
=
0
;
assert
(
ths
->
state
==
TAOS_SYNC_STATE_LEADER
);
ASSERT
(
ths
->
state
==
TAOS_SYNC_STATE_LEADER
);
SyncIndex
index
=
ths
->
pLogStore
->
getLastIndex
(
ths
->
pLogStore
)
+
1
;
SyncIndex
index
=
ths
->
pLogStore
->
syncLogWriteIndex
(
ths
->
pLogStore
)
;
SyncTerm
term
=
ths
->
pRaftStore
->
currentTerm
;
SyncTerm
term
=
ths
->
pRaftStore
->
currentTerm
;
SSyncRaftEntry
*
pEntry
=
syncEntryBuildNoop
(
term
,
index
,
ths
->
vgId
);
SSyncRaftEntry
*
pEntry
=
syncEntryBuildNoop
(
term
,
index
,
ths
->
vgId
);
assert
(
pEntry
!=
NULL
);
ASSERT
(
pEntry
!=
NULL
);
uint32_t
entryLen
;
uint32_t
entryLen
;
char
*
serialized
=
syncEntrySerialize
(
pEntry
,
&
entryLen
);
char
*
serialized
=
syncEntrySerialize
(
pEntry
,
&
entryLen
);
SyncClientRequest
*
pSyncMsg
=
syncClientRequestBuild
(
entryLen
);
SyncClientRequest
*
pSyncMsg
=
syncClientRequestBuild
(
entryLen
);
assert
(
pSyncMsg
->
dataLen
==
entryLen
);
ASSERT
(
pSyncMsg
->
dataLen
==
entryLen
);
memcpy
(
pSyncMsg
->
data
,
serialized
,
entryLen
);
memcpy
(
pSyncMsg
->
data
,
serialized
,
entryLen
);
SRpcMsg
rpcMsg
=
{
0
};
SRpcMsg
rpcMsg
=
{
0
};
...
@@ -2092,10 +2188,10 @@ static int32_t syncNodeEqNoop(SSyncNode* ths) {
...
@@ -2092,10 +2188,10 @@ static int32_t syncNodeEqNoop(SSyncNode* ths) {
static
int32_t
syncNodeAppendNoop
(
SSyncNode
*
ths
)
{
static
int32_t
syncNodeAppendNoop
(
SSyncNode
*
ths
)
{
int32_t
ret
=
0
;
int32_t
ret
=
0
;
SyncIndex
index
=
ths
->
pLogStore
->
getLastIndex
(
ths
->
pLogStore
)
+
1
;
SyncIndex
index
=
ths
->
pLogStore
->
syncLogWriteIndex
(
ths
->
pLogStore
)
;
SyncTerm
term
=
ths
->
pRaftStore
->
currentTerm
;
SyncTerm
term
=
ths
->
pRaftStore
->
currentTerm
;
SSyncRaftEntry
*
pEntry
=
syncEntryBuildNoop
(
term
,
index
,
ths
->
vgId
);
SSyncRaftEntry
*
pEntry
=
syncEntryBuildNoop
(
term
,
index
,
ths
->
vgId
);
assert
(
pEntry
!=
NULL
);
ASSERT
(
pEntry
!=
NULL
);
if
(
ths
->
state
==
TAOS_SYNC_STATE_LEADER
)
{
if
(
ths
->
state
==
TAOS_SYNC_STATE_LEADER
)
{
// ths->pLogStore->appendEntry(ths->pLogStore, pEntry);
// ths->pLogStore->appendEntry(ths->pLogStore, pEntry);
...
@@ -2158,7 +2254,7 @@ int32_t syncNodeOnClientRequestCb(SSyncNode* ths, SyncClientRequest* pMsg) {
...
@@ -2158,7 +2254,7 @@ int32_t syncNodeOnClientRequestCb(SSyncNode* ths, SyncClientRequest* pMsg) {
SyncIndex
index
=
ths
->
pLogStore
->
syncLogWriteIndex
(
ths
->
pLogStore
);
SyncIndex
index
=
ths
->
pLogStore
->
syncLogWriteIndex
(
ths
->
pLogStore
);
SyncTerm
term
=
ths
->
pRaftStore
->
currentTerm
;
SyncTerm
term
=
ths
->
pRaftStore
->
currentTerm
;
SSyncRaftEntry
*
pEntry
=
syncEntryBuild2
((
SyncClientRequest
*
)
pMsg
,
term
,
index
);
SSyncRaftEntry
*
pEntry
=
syncEntryBuild2
((
SyncClientRequest
*
)
pMsg
,
term
,
index
);
assert
(
pEntry
!=
NULL
);
ASSERT
(
pEntry
!=
NULL
);
if
(
ths
->
state
==
TAOS_SYNC_STATE_LEADER
)
{
if
(
ths
->
state
==
TAOS_SYNC_STATE_LEADER
)
{
// ths->pLogStore->appendEntry(ths->pLogStore, pEntry);
// ths->pLogStore->appendEntry(ths->pLogStore, pEntry);
...
...
source/libs/sync/src/syncMessage.c
浏览文件 @
980cf46b
...
@@ -186,18 +186,18 @@ void syncTimeoutDestroy(SyncTimeout* pMsg) {
...
@@ -186,18 +186,18 @@ void syncTimeoutDestroy(SyncTimeout* pMsg) {
}
}
void
syncTimeoutSerialize
(
const
SyncTimeout
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncTimeoutSerialize
(
const
SyncTimeout
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncTimeoutDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncTimeout
*
pMsg
)
{
void
syncTimeoutDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncTimeout
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
}
}
char
*
syncTimeoutSerialize2
(
const
SyncTimeout
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncTimeoutSerialize2
(
const
SyncTimeout
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncTimeoutSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncTimeoutSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -208,9 +208,9 @@ char* syncTimeoutSerialize2(const SyncTimeout* pMsg, uint32_t* len) {
...
@@ -208,9 +208,9 @@ char* syncTimeoutSerialize2(const SyncTimeout* pMsg, uint32_t* len) {
SyncTimeout
*
syncTimeoutDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncTimeout
*
syncTimeoutDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncTimeout
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncTimeout
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncTimeoutDeserialize
(
buf
,
len
,
pMsg
);
syncTimeoutDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -228,7 +228,7 @@ void syncTimeoutFromRpcMsg(const SRpcMsg* pRpcMsg, SyncTimeout* pMsg) {
...
@@ -228,7 +228,7 @@ void syncTimeoutFromRpcMsg(const SRpcMsg* pRpcMsg, SyncTimeout* pMsg) {
SyncTimeout
*
syncTimeoutFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncTimeout
*
syncTimeoutFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncTimeout
*
pMsg
=
syncTimeoutDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncTimeout
*
pMsg
=
syncTimeoutDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -322,19 +322,19 @@ void syncPingDestroy(SyncPing* pMsg) {
...
@@ -322,19 +322,19 @@ void syncPingDestroy(SyncPing* pMsg) {
}
}
void
syncPingSerialize
(
const
SyncPing
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncPingSerialize
(
const
SyncPing
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncPingDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncPing
*
pMsg
)
{
void
syncPingDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncPing
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
assert
(
pMsg
->
bytes
==
sizeof
(
SyncPing
)
+
pMsg
->
dataLen
);
ASSERT
(
pMsg
->
bytes
==
sizeof
(
SyncPing
)
+
pMsg
->
dataLen
);
}
}
char
*
syncPingSerialize2
(
const
SyncPing
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncPingSerialize2
(
const
SyncPing
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncPingSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncPingSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -345,9 +345,9 @@ char* syncPingSerialize2(const SyncPing* pMsg, uint32_t* len) {
...
@@ -345,9 +345,9 @@ char* syncPingSerialize2(const SyncPing* pMsg, uint32_t* len) {
SyncPing
*
syncPingDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncPing
*
syncPingDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncPing
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncPing
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncPingDeserialize
(
buf
,
len
,
pMsg
);
syncPingDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -406,7 +406,7 @@ SyncPing* syncPingDeserialize3(void* buf, int32_t bufLen) {
...
@@ -406,7 +406,7 @@ SyncPing* syncPingDeserialize3(void* buf, int32_t bufLen) {
}
}
pMsg
=
taosMemoryMalloc
(
bytes
);
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
pMsg
->
bytes
=
bytes
;
pMsg
->
bytes
=
bytes
;
if
(
tDecodeI32
(
&
decoder
,
&
pMsg
->
vgId
)
<
0
)
{
if
(
tDecodeI32
(
&
decoder
,
&
pMsg
->
vgId
)
<
0
)
{
...
@@ -435,7 +435,7 @@ SyncPing* syncPingDeserialize3(void* buf, int32_t bufLen) {
...
@@ -435,7 +435,7 @@ SyncPing* syncPingDeserialize3(void* buf, int32_t bufLen) {
if
(
tDecodeBinary
(
&
decoder
,
(
uint8_t
**
)(
&
data
),
&
len
)
<
0
)
{
if
(
tDecodeBinary
(
&
decoder
,
(
uint8_t
**
)(
&
data
),
&
len
)
<
0
)
{
return
NULL
;
return
NULL
;
}
}
assert
(
len
=
pMsg
->
dataLen
);
ASSERT
(
len
=
pMsg
->
dataLen
);
memcpy
(
pMsg
->
data
,
data
,
len
);
memcpy
(
pMsg
->
data
,
data
,
len
);
tEndDecode
(
&
decoder
);
tEndDecode
(
&
decoder
);
...
@@ -457,7 +457,7 @@ void syncPingFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPing* pMsg) {
...
@@ -457,7 +457,7 @@ void syncPingFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPing* pMsg) {
SyncPing
*
syncPingFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncPing
*
syncPingFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncPing
*
pMsg
=
syncPingDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncPing
*
pMsg
=
syncPingDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -584,19 +584,19 @@ void syncPingReplyDestroy(SyncPingReply* pMsg) {
...
@@ -584,19 +584,19 @@ void syncPingReplyDestroy(SyncPingReply* pMsg) {
}
}
void
syncPingReplySerialize
(
const
SyncPingReply
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncPingReplySerialize
(
const
SyncPingReply
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncPingReplyDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncPingReply
*
pMsg
)
{
void
syncPingReplyDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncPingReply
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
assert
(
pMsg
->
bytes
==
sizeof
(
SyncPing
)
+
pMsg
->
dataLen
);
ASSERT
(
pMsg
->
bytes
==
sizeof
(
SyncPing
)
+
pMsg
->
dataLen
);
}
}
char
*
syncPingReplySerialize2
(
const
SyncPingReply
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncPingReplySerialize2
(
const
SyncPingReply
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncPingReplySerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncPingReplySerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -607,9 +607,9 @@ char* syncPingReplySerialize2(const SyncPingReply* pMsg, uint32_t* len) {
...
@@ -607,9 +607,9 @@ char* syncPingReplySerialize2(const SyncPingReply* pMsg, uint32_t* len) {
SyncPingReply
*
syncPingReplyDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncPingReply
*
syncPingReplyDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncPingReply
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncPingReply
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncPingReplyDeserialize
(
buf
,
len
,
pMsg
);
syncPingReplyDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -668,7 +668,7 @@ SyncPingReply* syncPingReplyDeserialize3(void* buf, int32_t bufLen) {
...
@@ -668,7 +668,7 @@ SyncPingReply* syncPingReplyDeserialize3(void* buf, int32_t bufLen) {
}
}
pMsg
=
taosMemoryMalloc
(
bytes
);
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
pMsg
->
bytes
=
bytes
;
pMsg
->
bytes
=
bytes
;
if
(
tDecodeI32
(
&
decoder
,
&
pMsg
->
vgId
)
<
0
)
{
if
(
tDecodeI32
(
&
decoder
,
&
pMsg
->
vgId
)
<
0
)
{
...
@@ -697,7 +697,7 @@ SyncPingReply* syncPingReplyDeserialize3(void* buf, int32_t bufLen) {
...
@@ -697,7 +697,7 @@ SyncPingReply* syncPingReplyDeserialize3(void* buf, int32_t bufLen) {
if
(
tDecodeBinary
(
&
decoder
,
(
uint8_t
**
)(
&
data
),
&
len
)
<
0
)
{
if
(
tDecodeBinary
(
&
decoder
,
(
uint8_t
**
)(
&
data
),
&
len
)
<
0
)
{
return
NULL
;
return
NULL
;
}
}
assert
(
len
=
pMsg
->
dataLen
);
ASSERT
(
len
=
pMsg
->
dataLen
);
memcpy
(
pMsg
->
data
,
data
,
len
);
memcpy
(
pMsg
->
data
,
data
,
len
);
tEndDecode
(
&
decoder
);
tEndDecode
(
&
decoder
);
...
@@ -719,7 +719,7 @@ void syncPingReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPingReply* pMsg) {
...
@@ -719,7 +719,7 @@ void syncPingReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncPingReply* pMsg) {
SyncPingReply
*
syncPingReplyFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncPingReply
*
syncPingReplyFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncPingReply
*
pMsg
=
syncPingReplyDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncPingReply
*
pMsg
=
syncPingReplyDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -844,18 +844,18 @@ void syncClientRequestDestroy(SyncClientRequest* pMsg) {
...
@@ -844,18 +844,18 @@ void syncClientRequestDestroy(SyncClientRequest* pMsg) {
}
}
void
syncClientRequestSerialize
(
const
SyncClientRequest
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncClientRequestSerialize
(
const
SyncClientRequest
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncClientRequestDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncClientRequest
*
pMsg
)
{
void
syncClientRequestDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncClientRequest
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
}
}
char
*
syncClientRequestSerialize2
(
const
SyncClientRequest
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncClientRequestSerialize2
(
const
SyncClientRequest
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncClientRequestSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncClientRequestSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -866,9 +866,9 @@ char* syncClientRequestSerialize2(const SyncClientRequest* pMsg, uint32_t* len)
...
@@ -866,9 +866,9 @@ char* syncClientRequestSerialize2(const SyncClientRequest* pMsg, uint32_t* len)
SyncClientRequest
*
syncClientRequestDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncClientRequest
*
syncClientRequestDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncClientRequest
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncClientRequest
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncClientRequestDeserialize
(
buf
,
len
,
pMsg
);
syncClientRequestDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -888,7 +888,7 @@ void syncClientRequestFromRpcMsg(const SRpcMsg* pRpcMsg, SyncClientRequest* pMsg
...
@@ -888,7 +888,7 @@ void syncClientRequestFromRpcMsg(const SRpcMsg* pRpcMsg, SyncClientRequest* pMsg
// step 3. RpcMsg => SyncClientRequest, from queue
// step 3. RpcMsg => SyncClientRequest, from queue
SyncClientRequest
*
syncClientRequestFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncClientRequest
*
syncClientRequestFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncClientRequest
*
pMsg
=
syncClientRequestDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncClientRequest
*
pMsg
=
syncClientRequestDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -974,18 +974,18 @@ void syncRequestVoteDestroy(SyncRequestVote* pMsg) {
...
@@ -974,18 +974,18 @@ void syncRequestVoteDestroy(SyncRequestVote* pMsg) {
}
}
void
syncRequestVoteSerialize
(
const
SyncRequestVote
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncRequestVoteSerialize
(
const
SyncRequestVote
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncRequestVoteDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncRequestVote
*
pMsg
)
{
void
syncRequestVoteDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncRequestVote
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
}
}
char
*
syncRequestVoteSerialize2
(
const
SyncRequestVote
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncRequestVoteSerialize2
(
const
SyncRequestVote
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncRequestVoteSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncRequestVoteSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -996,9 +996,9 @@ char* syncRequestVoteSerialize2(const SyncRequestVote* pMsg, uint32_t* len) {
...
@@ -996,9 +996,9 @@ char* syncRequestVoteSerialize2(const SyncRequestVote* pMsg, uint32_t* len) {
SyncRequestVote
*
syncRequestVoteDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncRequestVote
*
syncRequestVoteDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncRequestVote
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncRequestVote
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncRequestVoteDeserialize
(
buf
,
len
,
pMsg
);
syncRequestVoteDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1016,7 +1016,7 @@ void syncRequestVoteFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVote* pMsg) {
...
@@ -1016,7 +1016,7 @@ void syncRequestVoteFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVote* pMsg) {
SyncRequestVote
*
syncRequestVoteFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncRequestVote
*
syncRequestVoteFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncRequestVote
*
pMsg
=
syncRequestVoteDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncRequestVote
*
pMsg
=
syncRequestVoteDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1125,18 +1125,18 @@ void syncRequestVoteReplyDestroy(SyncRequestVoteReply* pMsg) {
...
@@ -1125,18 +1125,18 @@ void syncRequestVoteReplyDestroy(SyncRequestVoteReply* pMsg) {
}
}
void
syncRequestVoteReplySerialize
(
const
SyncRequestVoteReply
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncRequestVoteReplySerialize
(
const
SyncRequestVoteReply
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncRequestVoteReplyDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncRequestVoteReply
*
pMsg
)
{
void
syncRequestVoteReplyDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncRequestVoteReply
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
}
}
char
*
syncRequestVoteReplySerialize2
(
const
SyncRequestVoteReply
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncRequestVoteReplySerialize2
(
const
SyncRequestVoteReply
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncRequestVoteReplySerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncRequestVoteReplySerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -1147,9 +1147,9 @@ char* syncRequestVoteReplySerialize2(const SyncRequestVoteReply* pMsg, uint32_t*
...
@@ -1147,9 +1147,9 @@ char* syncRequestVoteReplySerialize2(const SyncRequestVoteReply* pMsg, uint32_t*
SyncRequestVoteReply
*
syncRequestVoteReplyDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncRequestVoteReply
*
syncRequestVoteReplyDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncRequestVoteReply
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncRequestVoteReply
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncRequestVoteReplyDeserialize
(
buf
,
len
,
pMsg
);
syncRequestVoteReplyDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1167,7 +1167,7 @@ void syncRequestVoteReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVoteReply
...
@@ -1167,7 +1167,7 @@ void syncRequestVoteReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncRequestVoteReply
SyncRequestVoteReply
*
syncRequestVoteReplyFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncRequestVoteReply
*
syncRequestVoteReplyFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncRequestVoteReply
*
pMsg
=
syncRequestVoteReplyDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncRequestVoteReply
*
pMsg
=
syncRequestVoteReplyDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1274,19 +1274,19 @@ void syncAppendEntriesDestroy(SyncAppendEntries* pMsg) {
...
@@ -1274,19 +1274,19 @@ void syncAppendEntriesDestroy(SyncAppendEntries* pMsg) {
}
}
void
syncAppendEntriesSerialize
(
const
SyncAppendEntries
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncAppendEntriesSerialize
(
const
SyncAppendEntries
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncAppendEntriesDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncAppendEntries
*
pMsg
)
{
void
syncAppendEntriesDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncAppendEntries
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
assert
(
pMsg
->
bytes
==
sizeof
(
SyncAppendEntries
)
+
pMsg
->
dataLen
);
ASSERT
(
pMsg
->
bytes
==
sizeof
(
SyncAppendEntries
)
+
pMsg
->
dataLen
);
}
}
char
*
syncAppendEntriesSerialize2
(
const
SyncAppendEntries
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncAppendEntriesSerialize2
(
const
SyncAppendEntries
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncAppendEntriesSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncAppendEntriesSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -1297,9 +1297,9 @@ char* syncAppendEntriesSerialize2(const SyncAppendEntries* pMsg, uint32_t* len)
...
@@ -1297,9 +1297,9 @@ char* syncAppendEntriesSerialize2(const SyncAppendEntries* pMsg, uint32_t* len)
SyncAppendEntries
*
syncAppendEntriesDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncAppendEntries
*
syncAppendEntriesDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncAppendEntries
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncAppendEntries
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncAppendEntriesDeserialize
(
buf
,
len
,
pMsg
);
syncAppendEntriesDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1317,7 +1317,7 @@ void syncAppendEntriesFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntries* pMsg
...
@@ -1317,7 +1317,7 @@ void syncAppendEntriesFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntries* pMsg
SyncAppendEntries
*
syncAppendEntriesFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncAppendEntries
*
syncAppendEntriesFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncAppendEntries
*
pMsg
=
syncAppendEntriesDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncAppendEntries
*
pMsg
=
syncAppendEntriesDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1444,18 +1444,18 @@ void syncAppendEntriesReplyDestroy(SyncAppendEntriesReply* pMsg) {
...
@@ -1444,18 +1444,18 @@ void syncAppendEntriesReplyDestroy(SyncAppendEntriesReply* pMsg) {
}
}
void
syncAppendEntriesReplySerialize
(
const
SyncAppendEntriesReply
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncAppendEntriesReplySerialize
(
const
SyncAppendEntriesReply
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncAppendEntriesReplyDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncAppendEntriesReply
*
pMsg
)
{
void
syncAppendEntriesReplyDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncAppendEntriesReply
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
}
}
char
*
syncAppendEntriesReplySerialize2
(
const
SyncAppendEntriesReply
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncAppendEntriesReplySerialize2
(
const
SyncAppendEntriesReply
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncAppendEntriesReplySerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncAppendEntriesReplySerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -1466,9 +1466,9 @@ char* syncAppendEntriesReplySerialize2(const SyncAppendEntriesReply* pMsg, uint3
...
@@ -1466,9 +1466,9 @@ char* syncAppendEntriesReplySerialize2(const SyncAppendEntriesReply* pMsg, uint3
SyncAppendEntriesReply
*
syncAppendEntriesReplyDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncAppendEntriesReply
*
syncAppendEntriesReplyDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncAppendEntriesReply
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncAppendEntriesReply
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncAppendEntriesReplyDeserialize
(
buf
,
len
,
pMsg
);
syncAppendEntriesReplyDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1486,7 +1486,7 @@ void syncAppendEntriesReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntriesR
...
@@ -1486,7 +1486,7 @@ void syncAppendEntriesReplyFromRpcMsg(const SRpcMsg* pRpcMsg, SyncAppendEntriesR
SyncAppendEntriesReply
*
syncAppendEntriesReplyFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncAppendEntriesReply
*
syncAppendEntriesReplyFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncAppendEntriesReply
*
pMsg
=
syncAppendEntriesReplyDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncAppendEntriesReply
*
pMsg
=
syncAppendEntriesReplyDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1607,18 +1607,18 @@ void syncApplyMsgDestroy(SyncApplyMsg* pMsg) {
...
@@ -1607,18 +1607,18 @@ void syncApplyMsgDestroy(SyncApplyMsg* pMsg) {
}
}
void
syncApplyMsgSerialize
(
const
SyncApplyMsg
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncApplyMsgSerialize
(
const
SyncApplyMsg
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncApplyMsgDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncApplyMsg
*
pMsg
)
{
void
syncApplyMsgDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncApplyMsg
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
}
}
char
*
syncApplyMsgSerialize2
(
const
SyncApplyMsg
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncApplyMsgSerialize2
(
const
SyncApplyMsg
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncApplyMsgSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncApplyMsgSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -1629,9 +1629,9 @@ char* syncApplyMsgSerialize2(const SyncApplyMsg* pMsg, uint32_t* len) {
...
@@ -1629,9 +1629,9 @@ char* syncApplyMsgSerialize2(const SyncApplyMsg* pMsg, uint32_t* len) {
SyncApplyMsg
*
syncApplyMsgDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncApplyMsg
*
syncApplyMsgDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncApplyMsg
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncApplyMsg
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncApplyMsgDeserialize
(
buf
,
len
,
pMsg
);
syncApplyMsgDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1752,19 +1752,19 @@ void syncSnapshotSendDestroy(SyncSnapshotSend* pMsg) {
...
@@ -1752,19 +1752,19 @@ void syncSnapshotSendDestroy(SyncSnapshotSend* pMsg) {
}
}
void
syncSnapshotSendSerialize
(
const
SyncSnapshotSend
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncSnapshotSendSerialize
(
const
SyncSnapshotSend
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncSnapshotSendDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncSnapshotSend
*
pMsg
)
{
void
syncSnapshotSendDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncSnapshotSend
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
assert
(
pMsg
->
bytes
==
sizeof
(
SyncSnapshotSend
)
+
pMsg
->
dataLen
);
ASSERT
(
pMsg
->
bytes
==
sizeof
(
SyncSnapshotSend
)
+
pMsg
->
dataLen
);
}
}
char
*
syncSnapshotSendSerialize2
(
const
SyncSnapshotSend
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncSnapshotSendSerialize2
(
const
SyncSnapshotSend
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncSnapshotSendSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncSnapshotSendSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -1775,9 +1775,9 @@ char* syncSnapshotSendSerialize2(const SyncSnapshotSend* pMsg, uint32_t* len) {
...
@@ -1775,9 +1775,9 @@ char* syncSnapshotSendSerialize2(const SyncSnapshotSend* pMsg, uint32_t* len) {
SyncSnapshotSend
*
syncSnapshotSendDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncSnapshotSend
*
syncSnapshotSendDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncSnapshotSend
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncSnapshotSend
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncSnapshotSendDeserialize
(
buf
,
len
,
pMsg
);
syncSnapshotSendDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1795,7 +1795,7 @@ void syncSnapshotSendFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotSend* pMsg)
...
@@ -1795,7 +1795,7 @@ void syncSnapshotSendFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotSend* pMsg)
SyncSnapshotSend
*
syncSnapshotSendFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncSnapshotSend
*
syncSnapshotSendFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncSnapshotSend
*
pMsg
=
syncSnapshotSendDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncSnapshotSend
*
pMsg
=
syncSnapshotSendDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1925,18 +1925,18 @@ void syncSnapshotRspDestroy(SyncSnapshotRsp* pMsg) {
...
@@ -1925,18 +1925,18 @@ void syncSnapshotRspDestroy(SyncSnapshotRsp* pMsg) {
}
}
void
syncSnapshotRspSerialize
(
const
SyncSnapshotRsp
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncSnapshotRspSerialize
(
const
SyncSnapshotRsp
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncSnapshotRspDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncSnapshotRsp
*
pMsg
)
{
void
syncSnapshotRspDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncSnapshotRsp
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
}
}
char
*
syncSnapshotRspSerialize2
(
const
SyncSnapshotRsp
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncSnapshotRspSerialize2
(
const
SyncSnapshotRsp
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncSnapshotRspSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncSnapshotRspSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -1947,9 +1947,9 @@ char* syncSnapshotRspSerialize2(const SyncSnapshotRsp* pMsg, uint32_t* len) {
...
@@ -1947,9 +1947,9 @@ char* syncSnapshotRspSerialize2(const SyncSnapshotRsp* pMsg, uint32_t* len) {
SyncSnapshotRsp
*
syncSnapshotRspDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncSnapshotRsp
*
syncSnapshotRspDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncSnapshotRsp
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncSnapshotRsp
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncSnapshotRspDeserialize
(
buf
,
len
,
pMsg
);
syncSnapshotRspDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -1967,7 +1967,7 @@ void syncSnapshotRspFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotRsp* pMsg) {
...
@@ -1967,7 +1967,7 @@ void syncSnapshotRspFromRpcMsg(const SRpcMsg* pRpcMsg, SyncSnapshotRsp* pMsg) {
SyncSnapshotRsp
*
syncSnapshotRspFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncSnapshotRsp
*
syncSnapshotRspFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncSnapshotRsp
*
pMsg
=
syncSnapshotRspDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncSnapshotRsp
*
pMsg
=
syncSnapshotRspDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -2085,18 +2085,18 @@ void syncLeaderTransferDestroy(SyncLeaderTransfer* pMsg) {
...
@@ -2085,18 +2085,18 @@ void syncLeaderTransferDestroy(SyncLeaderTransfer* pMsg) {
}
}
void
syncLeaderTransferSerialize
(
const
SyncLeaderTransfer
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncLeaderTransferSerialize
(
const
SyncLeaderTransfer
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncLeaderTransferDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncLeaderTransfer
*
pMsg
)
{
void
syncLeaderTransferDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncLeaderTransfer
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
}
}
char
*
syncLeaderTransferSerialize2
(
const
SyncLeaderTransfer
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncLeaderTransferSerialize2
(
const
SyncLeaderTransfer
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncLeaderTransferSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncLeaderTransferSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -2107,9 +2107,9 @@ char* syncLeaderTransferSerialize2(const SyncLeaderTransfer* pMsg, uint32_t* len
...
@@ -2107,9 +2107,9 @@ char* syncLeaderTransferSerialize2(const SyncLeaderTransfer* pMsg, uint32_t* len
SyncLeaderTransfer
*
syncLeaderTransferDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncLeaderTransfer
*
syncLeaderTransferDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncLeaderTransfer
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncLeaderTransfer
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncLeaderTransferDeserialize
(
buf
,
len
,
pMsg
);
syncLeaderTransferDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -2127,7 +2127,7 @@ void syncLeaderTransferFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLeaderTransfer* pM
...
@@ -2127,7 +2127,7 @@ void syncLeaderTransferFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLeaderTransfer* pM
SyncLeaderTransfer
*
syncLeaderTransferFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncLeaderTransfer
*
syncLeaderTransferFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncLeaderTransfer
*
pMsg
=
syncLeaderTransferDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncLeaderTransfer
*
pMsg
=
syncLeaderTransferDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -2247,18 +2247,18 @@ void syncReconfigFinishDestroy(SyncReconfigFinish* pMsg) {
...
@@ -2247,18 +2247,18 @@ void syncReconfigFinishDestroy(SyncReconfigFinish* pMsg) {
}
}
void
syncReconfigFinishSerialize
(
const
SyncReconfigFinish
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
void
syncReconfigFinishSerialize
(
const
SyncReconfigFinish
*
pMsg
,
char
*
buf
,
uint32_t
bufLen
)
{
assert
(
pMsg
->
bytes
<=
bufLen
);
ASSERT
(
pMsg
->
bytes
<=
bufLen
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
memcpy
(
buf
,
pMsg
,
pMsg
->
bytes
);
}
}
void
syncReconfigFinishDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncReconfigFinish
*
pMsg
)
{
void
syncReconfigFinishDeserialize
(
const
char
*
buf
,
uint32_t
len
,
SyncReconfigFinish
*
pMsg
)
{
memcpy
(
pMsg
,
buf
,
len
);
memcpy
(
pMsg
,
buf
,
len
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
}
}
char
*
syncReconfigFinishSerialize2
(
const
SyncReconfigFinish
*
pMsg
,
uint32_t
*
len
)
{
char
*
syncReconfigFinishSerialize2
(
const
SyncReconfigFinish
*
pMsg
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pMsg
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
syncReconfigFinishSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
syncReconfigFinishSerialize
(
pMsg
,
buf
,
pMsg
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pMsg
->
bytes
;
*
len
=
pMsg
->
bytes
;
...
@@ -2269,9 +2269,9 @@ char* syncReconfigFinishSerialize2(const SyncReconfigFinish* pMsg, uint32_t* len
...
@@ -2269,9 +2269,9 @@ char* syncReconfigFinishSerialize2(const SyncReconfigFinish* pMsg, uint32_t* len
SyncReconfigFinish
*
syncReconfigFinishDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
SyncReconfigFinish
*
syncReconfigFinishDeserialize2
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SyncReconfigFinish
*
pMsg
=
taosMemoryMalloc
(
bytes
);
SyncReconfigFinish
*
pMsg
=
taosMemoryMalloc
(
bytes
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
syncReconfigFinishDeserialize
(
buf
,
len
,
pMsg
);
syncReconfigFinishDeserialize
(
buf
,
len
,
pMsg
);
assert
(
len
==
pMsg
->
bytes
);
ASSERT
(
len
==
pMsg
->
bytes
);
return
pMsg
;
return
pMsg
;
}
}
...
@@ -2289,7 +2289,7 @@ void syncReconfigFinishFromRpcMsg(const SRpcMsg* pRpcMsg, SyncReconfigFinish* pM
...
@@ -2289,7 +2289,7 @@ void syncReconfigFinishFromRpcMsg(const SRpcMsg* pRpcMsg, SyncReconfigFinish* pM
SyncReconfigFinish
*
syncReconfigFinishFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncReconfigFinish
*
syncReconfigFinishFromRpcMsg2
(
const
SRpcMsg
*
pRpcMsg
)
{
SyncReconfigFinish
*
pMsg
=
syncReconfigFinishDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
SyncReconfigFinish
*
pMsg
=
syncReconfigFinishDeserialize2
(
pRpcMsg
->
pCont
,
pRpcMsg
->
contLen
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
return
pMsg
;
return
pMsg
;
}
}
...
...
source/libs/sync/src/syncRaftCfg.c
浏览文件 @
980cf46b
...
@@ -24,29 +24,29 @@ SRaftCfg *raftCfgOpen(const char *path) {
...
@@ -24,29 +24,29 @@ SRaftCfg *raftCfgOpen(const char *path) {
snprintf
(
pCfg
->
path
,
sizeof
(
pCfg
->
path
),
"%s"
,
path
);
snprintf
(
pCfg
->
path
,
sizeof
(
pCfg
->
path
),
"%s"
,
path
);
pCfg
->
pFile
=
taosOpenFile
(
pCfg
->
path
,
TD_FILE_READ
|
TD_FILE_WRITE
);
pCfg
->
pFile
=
taosOpenFile
(
pCfg
->
path
,
TD_FILE_READ
|
TD_FILE_WRITE
);
assert
(
pCfg
->
pFile
!=
NULL
);
ASSERT
(
pCfg
->
pFile
!=
NULL
);
taosLSeekFile
(
pCfg
->
pFile
,
0
,
SEEK_SET
);
taosLSeekFile
(
pCfg
->
pFile
,
0
,
SEEK_SET
);
char
buf
[
1024
]
=
{
0
};
char
buf
[
1024
]
=
{
0
};
int
len
=
taosReadFile
(
pCfg
->
pFile
,
buf
,
sizeof
(
buf
));
int
len
=
taosReadFile
(
pCfg
->
pFile
,
buf
,
sizeof
(
buf
));
assert
(
len
>
0
);
ASSERT
(
len
>
0
);
int32_t
ret
=
raftCfgFromStr
(
buf
,
pCfg
);
int32_t
ret
=
raftCfgFromStr
(
buf
,
pCfg
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
return
pCfg
;
return
pCfg
;
}
}
int32_t
raftCfgClose
(
SRaftCfg
*
pRaftCfg
)
{
int32_t
raftCfgClose
(
SRaftCfg
*
pRaftCfg
)
{
int64_t
ret
=
taosCloseFile
(
&
(
pRaftCfg
->
pFile
));
int64_t
ret
=
taosCloseFile
(
&
(
pRaftCfg
->
pFile
));
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
taosMemoryFree
(
pRaftCfg
);
taosMemoryFree
(
pRaftCfg
);
return
0
;
return
0
;
}
}
int32_t
raftCfgPersist
(
SRaftCfg
*
pRaftCfg
)
{
int32_t
raftCfgPersist
(
SRaftCfg
*
pRaftCfg
)
{
assert
(
pRaftCfg
!=
NULL
);
ASSERT
(
pRaftCfg
!=
NULL
);
char
*
s
=
raftCfg2Str
(
pRaftCfg
);
char
*
s
=
raftCfg2Str
(
pRaftCfg
);
taosLSeekFile
(
pRaftCfg
->
pFile
,
0
,
SEEK_SET
);
taosLSeekFile
(
pRaftCfg
->
pFile
,
0
,
SEEK_SET
);
...
@@ -61,10 +61,10 @@ int32_t raftCfgPersist(SRaftCfg *pRaftCfg) {
...
@@ -61,10 +61,10 @@ int32_t raftCfgPersist(SRaftCfg *pRaftCfg) {
snprintf
(
buf
,
sizeof
(
buf
),
"%s"
,
s
);
snprintf
(
buf
,
sizeof
(
buf
),
"%s"
,
s
);
int64_t
ret
=
taosWriteFile
(
pRaftCfg
->
pFile
,
buf
,
sizeof
(
buf
));
int64_t
ret
=
taosWriteFile
(
pRaftCfg
->
pFile
,
buf
,
sizeof
(
buf
));
assert
(
ret
==
sizeof
(
buf
));
ASSERT
(
ret
==
sizeof
(
buf
));
// int64_t ret = taosWriteFile(pRaftCfg->pFile, s, strlen(s) + 1);
// int64_t ret = taosWriteFile(pRaftCfg->pFile, s, strlen(s) + 1);
//
assert
(ret == strlen(s) + 1);
//
ASSERT
(ret == strlen(s) + 1);
taosMemoryFree
(
s
);
taosMemoryFree
(
s
);
taosFsyncFile
(
pRaftCfg
->
pFile
);
taosFsyncFile
(
pRaftCfg
->
pFile
);
...
@@ -135,27 +135,27 @@ int32_t syncCfgFromJson(const cJSON *pRoot, SSyncCfg *pSyncCfg) {
...
@@ -135,27 +135,27 @@ int32_t syncCfgFromJson(const cJSON *pRoot, SSyncCfg *pSyncCfg) {
const
cJSON
*
pJson
=
pRoot
;
const
cJSON
*
pJson
=
pRoot
;
cJSON
*
pReplicaNum
=
cJSON_GetObjectItem
(
pJson
,
"replicaNum"
);
cJSON
*
pReplicaNum
=
cJSON_GetObjectItem
(
pJson
,
"replicaNum"
);
assert
(
cJSON_IsNumber
(
pReplicaNum
));
ASSERT
(
cJSON_IsNumber
(
pReplicaNum
));
pSyncCfg
->
replicaNum
=
cJSON_GetNumberValue
(
pReplicaNum
);
pSyncCfg
->
replicaNum
=
cJSON_GetNumberValue
(
pReplicaNum
);
cJSON
*
pMyIndex
=
cJSON_GetObjectItem
(
pJson
,
"myIndex"
);
cJSON
*
pMyIndex
=
cJSON_GetObjectItem
(
pJson
,
"myIndex"
);
assert
(
cJSON_IsNumber
(
pMyIndex
));
ASSERT
(
cJSON_IsNumber
(
pMyIndex
));
pSyncCfg
->
myIndex
=
cJSON_GetNumberValue
(
pMyIndex
);
pSyncCfg
->
myIndex
=
cJSON_GetNumberValue
(
pMyIndex
);
cJSON
*
pNodeInfoArr
=
cJSON_GetObjectItem
(
pJson
,
"nodeInfo"
);
cJSON
*
pNodeInfoArr
=
cJSON_GetObjectItem
(
pJson
,
"nodeInfo"
);
int
arraySize
=
cJSON_GetArraySize
(
pNodeInfoArr
);
int
arraySize
=
cJSON_GetArraySize
(
pNodeInfoArr
);
assert
(
arraySize
==
pSyncCfg
->
replicaNum
);
ASSERT
(
arraySize
==
pSyncCfg
->
replicaNum
);
for
(
int
i
=
0
;
i
<
arraySize
;
++
i
)
{
for
(
int
i
=
0
;
i
<
arraySize
;
++
i
)
{
cJSON
*
pNodeInfo
=
cJSON_GetArrayItem
(
pNodeInfoArr
,
i
);
cJSON
*
pNodeInfo
=
cJSON_GetArrayItem
(
pNodeInfoArr
,
i
);
assert
(
pNodeInfo
!=
NULL
);
ASSERT
(
pNodeInfo
!=
NULL
);
cJSON
*
pNodePort
=
cJSON_GetObjectItem
(
pNodeInfo
,
"nodePort"
);
cJSON
*
pNodePort
=
cJSON_GetObjectItem
(
pNodeInfo
,
"nodePort"
);
assert
(
cJSON_IsNumber
(
pNodePort
));
ASSERT
(
cJSON_IsNumber
(
pNodePort
));
((
pSyncCfg
->
nodeInfo
)[
i
]).
nodePort
=
cJSON_GetNumberValue
(
pNodePort
);
((
pSyncCfg
->
nodeInfo
)[
i
]).
nodePort
=
cJSON_GetNumberValue
(
pNodePort
);
cJSON
*
pNodeFqdn
=
cJSON_GetObjectItem
(
pNodeInfo
,
"nodeFqdn"
);
cJSON
*
pNodeFqdn
=
cJSON_GetObjectItem
(
pNodeInfo
,
"nodeFqdn"
);
assert
(
cJSON_IsString
(
pNodeFqdn
));
ASSERT
(
cJSON_IsString
(
pNodeFqdn
));
snprintf
(((
pSyncCfg
->
nodeInfo
)[
i
]).
nodeFqdn
,
sizeof
(((
pSyncCfg
->
nodeInfo
)[
i
]).
nodeFqdn
),
"%s"
,
snprintf
(((
pSyncCfg
->
nodeInfo
)[
i
]).
nodeFqdn
,
sizeof
(((
pSyncCfg
->
nodeInfo
)[
i
]).
nodeFqdn
),
"%s"
,
pNodeFqdn
->
valuestring
);
pNodeFqdn
->
valuestring
);
}
}
...
@@ -165,10 +165,10 @@ int32_t syncCfgFromJson(const cJSON *pRoot, SSyncCfg *pSyncCfg) {
...
@@ -165,10 +165,10 @@ int32_t syncCfgFromJson(const cJSON *pRoot, SSyncCfg *pSyncCfg) {
int32_t
syncCfgFromStr
(
const
char
*
s
,
SSyncCfg
*
pSyncCfg
)
{
int32_t
syncCfgFromStr
(
const
char
*
s
,
SSyncCfg
*
pSyncCfg
)
{
cJSON
*
pRoot
=
cJSON_Parse
(
s
);
cJSON
*
pRoot
=
cJSON_Parse
(
s
);
assert
(
pRoot
!=
NULL
);
ASSERT
(
pRoot
!=
NULL
);
int32_t
ret
=
syncCfgFromJson
(
pRoot
,
pSyncCfg
);
int32_t
ret
=
syncCfgFromJson
(
pRoot
,
pSyncCfg
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
cJSON_Delete
(
pRoot
);
cJSON_Delete
(
pRoot
);
return
0
;
return
0
;
...
@@ -207,10 +207,10 @@ char *raftCfg2Str(SRaftCfg *pRaftCfg) {
...
@@ -207,10 +207,10 @@ char *raftCfg2Str(SRaftCfg *pRaftCfg) {
}
}
int32_t
raftCfgCreateFile
(
SSyncCfg
*
pCfg
,
SRaftCfgMeta
meta
,
const
char
*
path
)
{
int32_t
raftCfgCreateFile
(
SSyncCfg
*
pCfg
,
SRaftCfgMeta
meta
,
const
char
*
path
)
{
assert
(
pCfg
!=
NULL
);
ASSERT
(
pCfg
!=
NULL
);
TdFilePtr
pFile
=
taosOpenFile
(
path
,
TD_FILE_CREATE
|
TD_FILE_WRITE
);
TdFilePtr
pFile
=
taosOpenFile
(
path
,
TD_FILE_CREATE
|
TD_FILE_WRITE
);
assert
(
pFile
!=
NULL
);
ASSERT
(
pFile
!=
NULL
);
SRaftCfg
raftCfg
;
SRaftCfg
raftCfg
;
raftCfg
.
cfg
=
*
pCfg
;
raftCfg
.
cfg
=
*
pCfg
;
...
@@ -227,10 +227,10 @@ int32_t raftCfgCreateFile(SSyncCfg *pCfg, SRaftCfgMeta meta, const char *path) {
...
@@ -227,10 +227,10 @@ int32_t raftCfgCreateFile(SSyncCfg *pCfg, SRaftCfgMeta meta, const char *path) {
ASSERT
(
strlen
(
s
)
+
1
<=
CONFIG_FILE_LEN
);
ASSERT
(
strlen
(
s
)
+
1
<=
CONFIG_FILE_LEN
);
snprintf
(
buf
,
sizeof
(
buf
),
"%s"
,
s
);
snprintf
(
buf
,
sizeof
(
buf
),
"%s"
,
s
);
int64_t
ret
=
taosWriteFile
(
pFile
,
buf
,
sizeof
(
buf
));
int64_t
ret
=
taosWriteFile
(
pFile
,
buf
,
sizeof
(
buf
));
assert
(
ret
==
sizeof
(
buf
));
ASSERT
(
ret
==
sizeof
(
buf
));
// int64_t ret = taosWriteFile(pFile, s, strlen(s) + 1);
// int64_t ret = taosWriteFile(pFile, s, strlen(s) + 1);
//
assert
(ret == strlen(s) + 1);
//
ASSERT
(ret == strlen(s) + 1);
taosMemoryFree
(
s
);
taosMemoryFree
(
s
);
taosCloseFile
(
&
pFile
);
taosCloseFile
(
&
pFile
);
...
@@ -255,15 +255,15 @@ int32_t raftCfgFromJson(const cJSON *pRoot, SRaftCfg *pRaftCfg) {
...
@@ -255,15 +255,15 @@ int32_t raftCfgFromJson(const cJSON *pRoot, SRaftCfg *pRaftCfg) {
cJSON
*
pIndexArr
=
cJSON_GetObjectItem
(
pJson
,
"configIndexArr"
);
cJSON
*
pIndexArr
=
cJSON_GetObjectItem
(
pJson
,
"configIndexArr"
);
int
arraySize
=
cJSON_GetArraySize
(
pIndexArr
);
int
arraySize
=
cJSON_GetArraySize
(
pIndexArr
);
assert
(
arraySize
==
pRaftCfg
->
configIndexCount
);
ASSERT
(
arraySize
==
pRaftCfg
->
configIndexCount
);
memset
(
pRaftCfg
->
configIndexArr
,
0
,
sizeof
(
pRaftCfg
->
configIndexArr
));
memset
(
pRaftCfg
->
configIndexArr
,
0
,
sizeof
(
pRaftCfg
->
configIndexArr
));
for
(
int
i
=
0
;
i
<
arraySize
;
++
i
)
{
for
(
int
i
=
0
;
i
<
arraySize
;
++
i
)
{
cJSON
*
pIndexObj
=
cJSON_GetArrayItem
(
pIndexArr
,
i
);
cJSON
*
pIndexObj
=
cJSON_GetArrayItem
(
pIndexArr
,
i
);
assert
(
pIndexObj
!=
NULL
);
ASSERT
(
pIndexObj
!=
NULL
);
cJSON
*
pIndex
=
cJSON_GetObjectItem
(
pIndexObj
,
"index"
);
cJSON
*
pIndex
=
cJSON_GetObjectItem
(
pIndexObj
,
"index"
);
assert
(
cJSON_IsString
(
pIndex
));
ASSERT
(
cJSON_IsString
(
pIndex
));
(
pRaftCfg
->
configIndexArr
)[
i
]
=
atoll
(
pIndex
->
valuestring
);
(
pRaftCfg
->
configIndexArr
)[
i
]
=
atoll
(
pIndex
->
valuestring
);
}
}
...
@@ -276,10 +276,10 @@ int32_t raftCfgFromJson(const cJSON *pRoot, SRaftCfg *pRaftCfg) {
...
@@ -276,10 +276,10 @@ int32_t raftCfgFromJson(const cJSON *pRoot, SRaftCfg *pRaftCfg) {
int32_t
raftCfgFromStr
(
const
char
*
s
,
SRaftCfg
*
pRaftCfg
)
{
int32_t
raftCfgFromStr
(
const
char
*
s
,
SRaftCfg
*
pRaftCfg
)
{
cJSON
*
pRoot
=
cJSON_Parse
(
s
);
cJSON
*
pRoot
=
cJSON_Parse
(
s
);
assert
(
pRoot
!=
NULL
);
ASSERT
(
pRoot
!=
NULL
);
int32_t
ret
=
raftCfgFromJson
(
pRoot
,
pRaftCfg
);
int32_t
ret
=
raftCfgFromJson
(
pRoot
,
pRaftCfg
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
cJSON_Delete
(
pRoot
);
cJSON_Delete
(
pRoot
);
return
0
;
return
0
;
...
...
source/libs/sync/src/syncRaftEntry.c
浏览文件 @
980cf46b
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
SSyncRaftEntry
*
syncEntryBuild
(
uint32_t
dataLen
)
{
SSyncRaftEntry
*
syncEntryBuild
(
uint32_t
dataLen
)
{
uint32_t
bytes
=
sizeof
(
SSyncRaftEntry
)
+
dataLen
;
uint32_t
bytes
=
sizeof
(
SSyncRaftEntry
)
+
dataLen
;
SSyncRaftEntry
*
pEntry
=
taosMemoryMalloc
(
bytes
);
SSyncRaftEntry
*
pEntry
=
taosMemoryMalloc
(
bytes
);
assert
(
pEntry
!=
NULL
);
ASSERT
(
pEntry
!=
NULL
);
memset
(
pEntry
,
0
,
bytes
);
memset
(
pEntry
,
0
,
bytes
);
pEntry
->
bytes
=
bytes
;
pEntry
->
bytes
=
bytes
;
pEntry
->
dataLen
=
dataLen
;
pEntry
->
dataLen
=
dataLen
;
...
@@ -29,14 +29,14 @@ SSyncRaftEntry* syncEntryBuild(uint32_t dataLen) {
...
@@ -29,14 +29,14 @@ SSyncRaftEntry* syncEntryBuild(uint32_t dataLen) {
// step 4. SyncClientRequest => SSyncRaftEntry, add term, index
// step 4. SyncClientRequest => SSyncRaftEntry, add term, index
SSyncRaftEntry
*
syncEntryBuild2
(
SyncClientRequest
*
pMsg
,
SyncTerm
term
,
SyncIndex
index
)
{
SSyncRaftEntry
*
syncEntryBuild2
(
SyncClientRequest
*
pMsg
,
SyncTerm
term
,
SyncIndex
index
)
{
SSyncRaftEntry
*
pEntry
=
syncEntryBuild3
(
pMsg
,
term
,
index
);
SSyncRaftEntry
*
pEntry
=
syncEntryBuild3
(
pMsg
,
term
,
index
);
assert
(
pEntry
!=
NULL
);
ASSERT
(
pEntry
!=
NULL
);
return
pEntry
;
return
pEntry
;
}
}
SSyncRaftEntry
*
syncEntryBuild3
(
SyncClientRequest
*
pMsg
,
SyncTerm
term
,
SyncIndex
index
)
{
SSyncRaftEntry
*
syncEntryBuild3
(
SyncClientRequest
*
pMsg
,
SyncTerm
term
,
SyncIndex
index
)
{
SSyncRaftEntry
*
pEntry
=
syncEntryBuild
(
pMsg
->
dataLen
);
SSyncRaftEntry
*
pEntry
=
syncEntryBuild
(
pMsg
->
dataLen
);
assert
(
pEntry
!=
NULL
);
ASSERT
(
pEntry
!=
NULL
);
pEntry
->
msgType
=
pMsg
->
msgType
;
pEntry
->
msgType
=
pMsg
->
msgType
;
pEntry
->
originalRpcType
=
pMsg
->
originalRpcType
;
pEntry
->
originalRpcType
=
pMsg
->
originalRpcType
;
...
@@ -63,7 +63,7 @@ SSyncRaftEntry* syncEntryBuildNoop(SyncTerm term, SyncIndex index, int32_t vgId)
...
@@ -63,7 +63,7 @@ SSyncRaftEntry* syncEntryBuildNoop(SyncTerm term, SyncIndex index, int32_t vgId)
memcpy
(
rpcMsg
.
pCont
,
&
head
,
sizeof
(
head
));
memcpy
(
rpcMsg
.
pCont
,
&
head
,
sizeof
(
head
));
SSyncRaftEntry
*
pEntry
=
syncEntryBuild
(
rpcMsg
.
contLen
);
SSyncRaftEntry
*
pEntry
=
syncEntryBuild
(
rpcMsg
.
contLen
);
assert
(
pEntry
!=
NULL
);
ASSERT
(
pEntry
!=
NULL
);
pEntry
->
msgType
=
TDMT_SYNC_CLIENT_REQUEST
;
pEntry
->
msgType
=
TDMT_SYNC_CLIENT_REQUEST
;
pEntry
->
originalRpcType
=
TDMT_SYNC_NOOP
;
pEntry
->
originalRpcType
=
TDMT_SYNC_NOOP
;
...
@@ -72,7 +72,7 @@ SSyncRaftEntry* syncEntryBuildNoop(SyncTerm term, SyncIndex index, int32_t vgId)
...
@@ -72,7 +72,7 @@ SSyncRaftEntry* syncEntryBuildNoop(SyncTerm term, SyncIndex index, int32_t vgId)
pEntry
->
term
=
term
;
pEntry
->
term
=
term
;
pEntry
->
index
=
index
;
pEntry
->
index
=
index
;
assert
(
pEntry
->
dataLen
==
rpcMsg
.
contLen
);
ASSERT
(
pEntry
->
dataLen
==
rpcMsg
.
contLen
);
memcpy
(
pEntry
->
data
,
rpcMsg
.
pCont
,
rpcMsg
.
contLen
);
memcpy
(
pEntry
->
data
,
rpcMsg
.
pCont
,
rpcMsg
.
contLen
);
rpcFreeCont
(
rpcMsg
.
pCont
);
rpcFreeCont
(
rpcMsg
.
pCont
);
...
@@ -88,7 +88,7 @@ void syncEntryDestory(SSyncRaftEntry* pEntry) {
...
@@ -88,7 +88,7 @@ void syncEntryDestory(SSyncRaftEntry* pEntry) {
// step 5. SSyncRaftEntry => bin, to raft log
// step 5. SSyncRaftEntry => bin, to raft log
char
*
syncEntrySerialize
(
const
SSyncRaftEntry
*
pEntry
,
uint32_t
*
len
)
{
char
*
syncEntrySerialize
(
const
SSyncRaftEntry
*
pEntry
,
uint32_t
*
len
)
{
char
*
buf
=
taosMemoryMalloc
(
pEntry
->
bytes
);
char
*
buf
=
taosMemoryMalloc
(
pEntry
->
bytes
);
assert
(
buf
!=
NULL
);
ASSERT
(
buf
!=
NULL
);
memcpy
(
buf
,
pEntry
,
pEntry
->
bytes
);
memcpy
(
buf
,
pEntry
,
pEntry
->
bytes
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
pEntry
->
bytes
;
*
len
=
pEntry
->
bytes
;
...
@@ -100,9 +100,9 @@ char* syncEntrySerialize(const SSyncRaftEntry* pEntry, uint32_t* len) {
...
@@ -100,9 +100,9 @@ char* syncEntrySerialize(const SSyncRaftEntry* pEntry, uint32_t* len) {
SSyncRaftEntry
*
syncEntryDeserialize
(
const
char
*
buf
,
uint32_t
len
)
{
SSyncRaftEntry
*
syncEntryDeserialize
(
const
char
*
buf
,
uint32_t
len
)
{
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
uint32_t
bytes
=
*
((
uint32_t
*
)
buf
);
SSyncRaftEntry
*
pEntry
=
taosMemoryMalloc
(
bytes
);
SSyncRaftEntry
*
pEntry
=
taosMemoryMalloc
(
bytes
);
assert
(
pEntry
!=
NULL
);
ASSERT
(
pEntry
!=
NULL
);
memcpy
(
pEntry
,
buf
,
len
);
memcpy
(
pEntry
,
buf
,
len
);
assert
(
len
==
pEntry
->
bytes
);
ASSERT
(
len
==
pEntry
->
bytes
);
return
pEntry
;
return
pEntry
;
}
}
...
...
source/libs/sync/src/syncRaftLog.c
浏览文件 @
980cf46b
...
@@ -25,7 +25,7 @@ static SyncIndex raftLogEndIndex(struct SSyncLogStore* pLogStore);
...
@@ -25,7 +25,7 @@ static SyncIndex raftLogEndIndex(struct SSyncLogStore* pLogStore);
static
SyncIndex
raftLogWriteIndex
(
struct
SSyncLogStore
*
pLogStore
);
static
SyncIndex
raftLogWriteIndex
(
struct
SSyncLogStore
*
pLogStore
);
static
bool
raftLogIsEmpty
(
struct
SSyncLogStore
*
pLogStore
);
static
bool
raftLogIsEmpty
(
struct
SSyncLogStore
*
pLogStore
);
static
int32_t
raftLogEntryCount
(
struct
SSyncLogStore
*
pLogStore
);
static
int32_t
raftLogEntryCount
(
struct
SSyncLogStore
*
pLogStore
);
static
bool
raftLogInRange
(
struct
SSyncLogStore
*
pLogStore
,
SyncIndex
index
);
static
SyncIndex
raftLogLastIndex
(
struct
SSyncLogStore
*
pLogStore
);
static
SyncIndex
raftLogLastIndex
(
struct
SSyncLogStore
*
pLogStore
);
static
SyncTerm
raftLogLastTerm
(
struct
SSyncLogStore
*
pLogStore
);
static
SyncTerm
raftLogLastTerm
(
struct
SSyncLogStore
*
pLogStore
);
static
int32_t
raftLogAppendEntry
(
struct
SSyncLogStore
*
pLogStore
,
SSyncRaftEntry
*
pEntry
);
static
int32_t
raftLogAppendEntry
(
struct
SSyncLogStore
*
pLogStore
,
SSyncRaftEntry
*
pEntry
);
...
@@ -58,8 +58,6 @@ static int32_t raftLogSetBeginIndex(struct SSyncLogStore* pLogStore, SyncIndex b
...
@@ -58,8 +58,6 @@ static int32_t raftLogSetBeginIndex(struct SSyncLogStore* pLogStore, SyncIndex b
return
0
;
return
0
;
}
}
int32_t
raftLogResetBeginIndex
(
struct
SSyncLogStore
*
pLogStore
)
{
return
0
;
}
static
SyncIndex
raftLogBeginIndex
(
struct
SSyncLogStore
*
pLogStore
)
{
static
SyncIndex
raftLogBeginIndex
(
struct
SSyncLogStore
*
pLogStore
)
{
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SWal
*
pWal
=
pData
->
pWal
;
SWal
*
pWal
=
pData
->
pWal
;
...
@@ -81,6 +79,7 @@ static int32_t raftLogEntryCount(struct SSyncLogStore* pLogStore) {
...
@@ -81,6 +79,7 @@ static int32_t raftLogEntryCount(struct SSyncLogStore* pLogStore) {
return
count
>
0
?
count
:
0
;
return
count
>
0
?
count
:
0
;
}
}
#if 0
static bool raftLogInRange(struct SSyncLogStore* pLogStore, SyncIndex index) {
static bool raftLogInRange(struct SSyncLogStore* pLogStore, SyncIndex index) {
SyncIndex beginIndex = raftLogBeginIndex(pLogStore);
SyncIndex beginIndex = raftLogBeginIndex(pLogStore);
SyncIndex endIndex = raftLogEndIndex(pLogStore);
SyncIndex endIndex = raftLogEndIndex(pLogStore);
...
@@ -90,6 +89,7 @@ static bool raftLogInRange(struct SSyncLogStore* pLogStore, SyncIndex index) {
...
@@ -90,6 +89,7 @@ static bool raftLogInRange(struct SSyncLogStore* pLogStore, SyncIndex index) {
return false;
return false;
}
}
}
}
#endif
static
SyncIndex
raftLogLastIndex
(
struct
SSyncLogStore
*
pLogStore
)
{
static
SyncIndex
raftLogLastIndex
(
struct
SSyncLogStore
*
pLogStore
)
{
SyncIndex
lastIndex
;
SyncIndex
lastIndex
;
...
@@ -143,7 +143,10 @@ static int32_t raftLogAppendEntry(struct SSyncLogStore* pLogStore, SSyncRaftEntr
...
@@ -143,7 +143,10 @@ static int32_t raftLogAppendEntry(struct SSyncLogStore* pLogStore, SSyncRaftEntr
SWal
*
pWal
=
pData
->
pWal
;
SWal
*
pWal
=
pData
->
pWal
;
SyncIndex
writeIndex
=
raftLogWriteIndex
(
pLogStore
);
SyncIndex
writeIndex
=
raftLogWriteIndex
(
pLogStore
);
ASSERT
(
pEntry
->
index
==
writeIndex
);
if
(
pEntry
->
index
!=
writeIndex
)
{
sError
(
"raftLogAppendEntry error, pEntry->index:%ld update to writeIndex:%ld"
,
pEntry
->
index
,
writeIndex
);
pEntry
->
index
=
writeIndex
;
}
int
code
=
0
;
int
code
=
0
;
SSyncLogMeta
syncMeta
;
SSyncLogMeta
syncMeta
;
...
@@ -171,6 +174,7 @@ static int32_t raftLogAppendEntry(struct SSyncLogStore* pLogStore, SSyncRaftEntr
...
@@ -171,6 +174,7 @@ static int32_t raftLogAppendEntry(struct SSyncLogStore* pLogStore, SSyncRaftEntr
return
code
;
return
code
;
}
}
#if 0
static int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncRaftEntry** ppEntry) {
static int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncRaftEntry** ppEntry) {
SSyncLogStoreData* pData = pLogStore->data;
SSyncLogStoreData* pData = pLogStore->data;
SWal* pWal = pData->pWal;
SWal* pWal = pData->pWal;
...
@@ -215,6 +219,49 @@ static int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index,
...
@@ -215,6 +219,49 @@ static int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index,
return code;
return code;
}
}
#endif
static
int32_t
raftLogGetEntry
(
struct
SSyncLogStore
*
pLogStore
,
SyncIndex
index
,
SSyncRaftEntry
**
ppEntry
)
{
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SWal
*
pWal
=
pData
->
pWal
;
int32_t
code
;
*
ppEntry
=
NULL
;
SWalReadHandle
*
pWalHandle
=
walOpenReadHandle
(
pWal
);
if
(
pWalHandle
==
NULL
)
{
return
-
1
;
}
code
=
walReadWithHandle
(
pWalHandle
,
index
);
if
(
code
!=
0
)
{
int32_t
err
=
terrno
;
const
char
*
errStr
=
tstrerror
(
err
);
int32_t
linuxErr
=
errno
;
const
char
*
linuxErrMsg
=
strerror
(
errno
);
sError
(
"raftLogGetEntry error, err:%d %X, msg:%s, linuxErr:%d, linuxErrMsg:%s"
,
err
,
err
,
errStr
,
linuxErr
,
linuxErrMsg
);
walCloseReadHandle
(
pWalHandle
);
return
code
;
}
*
ppEntry
=
syncEntryBuild
(
pWalHandle
->
pHead
->
head
.
bodyLen
);
ASSERT
(
*
ppEntry
!=
NULL
);
(
*
ppEntry
)
->
msgType
=
TDMT_SYNC_CLIENT_REQUEST
;
(
*
ppEntry
)
->
originalRpcType
=
pWalHandle
->
pHead
->
head
.
msgType
;
(
*
ppEntry
)
->
seqNum
=
pWalHandle
->
pHead
->
head
.
syncMeta
.
seqNum
;
(
*
ppEntry
)
->
isWeak
=
pWalHandle
->
pHead
->
head
.
syncMeta
.
isWeek
;
(
*
ppEntry
)
->
term
=
pWalHandle
->
pHead
->
head
.
syncMeta
.
term
;
(
*
ppEntry
)
->
index
=
index
;
ASSERT
((
*
ppEntry
)
->
dataLen
==
pWalHandle
->
pHead
->
head
.
bodyLen
);
memcpy
((
*
ppEntry
)
->
data
,
pWalHandle
->
pHead
->
head
.
body
,
pWalHandle
->
pHead
->
head
.
bodyLen
);
// need to hold, do not new every time!!
walCloseReadHandle
(
pWalHandle
);
return
code
;
}
static
int32_t
raftLogTruncate
(
struct
SSyncLogStore
*
pLogStore
,
SyncIndex
fromIndex
)
{
static
int32_t
raftLogTruncate
(
struct
SSyncLogStore
*
pLogStore
,
SyncIndex
fromIndex
)
{
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
...
@@ -245,10 +292,10 @@ static int32_t raftLogGetLastEntry(SSyncLogStore* pLogStore, SSyncRaftEntry** pp
...
@@ -245,10 +292,10 @@ static int32_t raftLogGetLastEntry(SSyncLogStore* pLogStore, SSyncRaftEntry** pp
//-------------------------------
//-------------------------------
SSyncLogStore
*
logStoreCreate
(
SSyncNode
*
pSyncNode
)
{
SSyncLogStore
*
logStoreCreate
(
SSyncNode
*
pSyncNode
)
{
SSyncLogStore
*
pLogStore
=
taosMemoryMalloc
(
sizeof
(
SSyncLogStore
));
SSyncLogStore
*
pLogStore
=
taosMemoryMalloc
(
sizeof
(
SSyncLogStore
));
assert
(
pLogStore
!=
NULL
);
ASSERT
(
pLogStore
!=
NULL
);
pLogStore
->
data
=
taosMemoryMalloc
(
sizeof
(
SSyncLogStoreData
));
pLogStore
->
data
=
taosMemoryMalloc
(
sizeof
(
SSyncLogStoreData
));
assert
(
pLogStore
->
data
!=
NULL
);
ASSERT
(
pLogStore
->
data
!=
NULL
);
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
pData
->
pSyncNode
=
pSyncNode
;
pData
->
pSyncNode
=
pSyncNode
;
...
@@ -277,7 +324,6 @@ SSyncLogStore* logStoreCreate(SSyncNode* pSyncNode) {
...
@@ -277,7 +324,6 @@ SSyncLogStore* logStoreCreate(SSyncNode* pSyncNode) {
pLogStore
->
syncLogEndIndex
=
raftLogEndIndex
;
pLogStore
->
syncLogEndIndex
=
raftLogEndIndex
;
pLogStore
->
syncLogIsEmpty
=
raftLogIsEmpty
;
pLogStore
->
syncLogIsEmpty
=
raftLogIsEmpty
;
pLogStore
->
syncLogEntryCount
=
raftLogEntryCount
;
pLogStore
->
syncLogEntryCount
=
raftLogEntryCount
;
pLogStore
->
syncLogInRange
=
raftLogInRange
;
pLogStore
->
syncLogLastIndex
=
raftLogLastIndex
;
pLogStore
->
syncLogLastIndex
=
raftLogLastIndex
;
pLogStore
->
syncLogLastTerm
=
raftLogLastTerm
;
pLogStore
->
syncLogLastTerm
=
raftLogLastTerm
;
pLogStore
->
syncLogAppendEntry
=
raftLogAppendEntry
;
pLogStore
->
syncLogAppendEntry
=
raftLogAppendEntry
;
...
@@ -285,6 +331,8 @@ SSyncLogStore* logStoreCreate(SSyncNode* pSyncNode) {
...
@@ -285,6 +331,8 @@ SSyncLogStore* logStoreCreate(SSyncNode* pSyncNode) {
pLogStore
->
syncLogTruncate
=
raftLogTruncate
;
pLogStore
->
syncLogTruncate
=
raftLogTruncate
;
pLogStore
->
syncLogWriteIndex
=
raftLogWriteIndex
;
pLogStore
->
syncLogWriteIndex
=
raftLogWriteIndex
;
// pLogStore->syncLogInRange = raftLogInRange;
return
pLogStore
;
return
pLogStore
;
}
}
...
@@ -301,7 +349,7 @@ int32_t logStoreAppendEntry(SSyncLogStore* pLogStore, SSyncRaftEntry* pEntry) {
...
@@ -301,7 +349,7 @@ int32_t logStoreAppendEntry(SSyncLogStore* pLogStore, SSyncRaftEntry* pEntry) {
SWal
*
pWal
=
pData
->
pWal
;
SWal
*
pWal
=
pData
->
pWal
;
SyncIndex
lastIndex
=
logStoreLastIndex
(
pLogStore
);
SyncIndex
lastIndex
=
logStoreLastIndex
(
pLogStore
);
assert
(
pEntry
->
index
==
lastIndex
+
1
);
ASSERT
(
pEntry
->
index
==
lastIndex
+
1
);
int
code
=
0
;
int
code
=
0
;
SSyncLogMeta
syncMeta
;
SSyncLogMeta
syncMeta
;
...
@@ -347,10 +395,10 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
...
@@ -347,10 +395,10 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
linuxErrMsg
);
linuxErrMsg
);
ASSERT
(
0
);
ASSERT
(
0
);
}
}
//
assert
(walReadWithHandle(pWalHandle, index) == 0);
//
ASSERT
(walReadWithHandle(pWalHandle, index) == 0);
SSyncRaftEntry
*
pEntry
=
syncEntryBuild
(
pWalHandle
->
pHead
->
head
.
bodyLen
);
SSyncRaftEntry
*
pEntry
=
syncEntryBuild
(
pWalHandle
->
pHead
->
head
.
bodyLen
);
assert
(
pEntry
!=
NULL
);
ASSERT
(
pEntry
!=
NULL
);
pEntry
->
msgType
=
TDMT_SYNC_CLIENT_REQUEST
;
pEntry
->
msgType
=
TDMT_SYNC_CLIENT_REQUEST
;
pEntry
->
originalRpcType
=
pWalHandle
->
pHead
->
head
.
msgType
;
pEntry
->
originalRpcType
=
pWalHandle
->
pHead
->
head
.
msgType
;
...
@@ -358,7 +406,7 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
...
@@ -358,7 +406,7 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
pEntry
->
isWeak
=
pWalHandle
->
pHead
->
head
.
syncMeta
.
isWeek
;
pEntry
->
isWeak
=
pWalHandle
->
pHead
->
head
.
syncMeta
.
isWeek
;
pEntry
->
term
=
pWalHandle
->
pHead
->
head
.
syncMeta
.
term
;
pEntry
->
term
=
pWalHandle
->
pHead
->
head
.
syncMeta
.
term
;
pEntry
->
index
=
index
;
pEntry
->
index
=
index
;
assert
(
pEntry
->
dataLen
==
pWalHandle
->
pHead
->
head
.
bodyLen
);
ASSERT
(
pEntry
->
dataLen
==
pWalHandle
->
pHead
->
head
.
bodyLen
);
memcpy
(
pEntry
->
data
,
pWalHandle
->
pHead
->
head
.
body
,
pWalHandle
->
pHead
->
head
.
bodyLen
);
memcpy
(
pEntry
->
data
,
pWalHandle
->
pHead
->
head
.
body
,
pWalHandle
->
pHead
->
head
.
bodyLen
);
// need to hold, do not new every time!!
// need to hold, do not new every time!!
...
@@ -373,7 +421,7 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
...
@@ -373,7 +421,7 @@ SSyncRaftEntry* logStoreGetEntry(SSyncLogStore* pLogStore, SyncIndex index) {
int32_t
logStoreTruncate
(
SSyncLogStore
*
pLogStore
,
SyncIndex
fromIndex
)
{
int32_t
logStoreTruncate
(
SSyncLogStore
*
pLogStore
,
SyncIndex
fromIndex
)
{
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SWal
*
pWal
=
pData
->
pWal
;
SWal
*
pWal
=
pData
->
pWal
;
//
assert
(walRollback(pWal, fromIndex) == 0);
//
ASSERT
(walRollback(pWal, fromIndex) == 0);
int32_t
code
=
walRollback
(
pWal
,
fromIndex
);
int32_t
code
=
walRollback
(
pWal
,
fromIndex
);
if
(
code
!=
0
)
{
if
(
code
!=
0
)
{
int32_t
err
=
terrno
;
int32_t
err
=
terrno
;
...
@@ -407,7 +455,7 @@ SyncTerm logStoreLastTerm(SSyncLogStore* pLogStore) {
...
@@ -407,7 +455,7 @@ SyncTerm logStoreLastTerm(SSyncLogStore* pLogStore) {
int32_t
logStoreUpdateCommitIndex
(
SSyncLogStore
*
pLogStore
,
SyncIndex
index
)
{
int32_t
logStoreUpdateCommitIndex
(
SSyncLogStore
*
pLogStore
,
SyncIndex
index
)
{
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SSyncLogStoreData
*
pData
=
pLogStore
->
data
;
SWal
*
pWal
=
pData
->
pWal
;
SWal
*
pWal
=
pData
->
pWal
;
//
assert
(walCommit(pWal, index) == 0);
//
ASSERT
(walCommit(pWal, index) == 0);
int32_t
code
=
walCommit
(
pWal
,
index
);
int32_t
code
=
walCommit
(
pWal
,
index
);
if
(
code
!=
0
)
{
if
(
code
!=
0
)
{
int32_t
err
=
terrno
;
int32_t
err
=
terrno
;
...
...
source/libs/sync/src/syncRaftStore.c
浏览文件 @
980cf46b
...
@@ -39,40 +39,40 @@ SRaftStore *raftStoreOpen(const char *path) {
...
@@ -39,40 +39,40 @@ SRaftStore *raftStoreOpen(const char *path) {
if
(
!
raftStoreFileExist
(
pRaftStore
->
path
))
{
if
(
!
raftStoreFileExist
(
pRaftStore
->
path
))
{
ret
=
raftStoreInit
(
pRaftStore
);
ret
=
raftStoreInit
(
pRaftStore
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
}
}
pRaftStore
->
pFile
=
taosOpenFile
(
path
,
TD_FILE_READ
|
TD_FILE_WRITE
);
pRaftStore
->
pFile
=
taosOpenFile
(
path
,
TD_FILE_READ
|
TD_FILE_WRITE
);
assert
(
pRaftStore
->
pFile
!=
NULL
);
ASSERT
(
pRaftStore
->
pFile
!=
NULL
);
int
len
=
taosReadFile
(
pRaftStore
->
pFile
,
storeBuf
,
RAFT_STORE_BLOCK_SIZE
);
int
len
=
taosReadFile
(
pRaftStore
->
pFile
,
storeBuf
,
RAFT_STORE_BLOCK_SIZE
);
assert
(
len
==
RAFT_STORE_BLOCK_SIZE
);
ASSERT
(
len
==
RAFT_STORE_BLOCK_SIZE
);
ret
=
raftStoreDeserialize
(
pRaftStore
,
storeBuf
,
len
);
ret
=
raftStoreDeserialize
(
pRaftStore
,
storeBuf
,
len
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
return
pRaftStore
;
return
pRaftStore
;
}
}
static
int32_t
raftStoreInit
(
SRaftStore
*
pRaftStore
)
{
static
int32_t
raftStoreInit
(
SRaftStore
*
pRaftStore
)
{
assert
(
pRaftStore
!=
NULL
);
ASSERT
(
pRaftStore
!=
NULL
);
pRaftStore
->
pFile
=
taosOpenFile
(
pRaftStore
->
path
,
TD_FILE_CREATE
|
TD_FILE_WRITE
);
pRaftStore
->
pFile
=
taosOpenFile
(
pRaftStore
->
path
,
TD_FILE_CREATE
|
TD_FILE_WRITE
);
assert
(
pRaftStore
->
pFile
!=
NULL
);
ASSERT
(
pRaftStore
->
pFile
!=
NULL
);
pRaftStore
->
currentTerm
=
0
;
pRaftStore
->
currentTerm
=
0
;
pRaftStore
->
voteFor
.
addr
=
0
;
pRaftStore
->
voteFor
.
addr
=
0
;
pRaftStore
->
voteFor
.
vgId
=
0
;
pRaftStore
->
voteFor
.
vgId
=
0
;
int32_t
ret
=
raftStorePersist
(
pRaftStore
);
int32_t
ret
=
raftStorePersist
(
pRaftStore
);
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
taosCloseFile
(
&
pRaftStore
->
pFile
);
taosCloseFile
(
&
pRaftStore
->
pFile
);
return
0
;
return
0
;
}
}
int32_t
raftStoreClose
(
SRaftStore
*
pRaftStore
)
{
int32_t
raftStoreClose
(
SRaftStore
*
pRaftStore
)
{
assert
(
pRaftStore
!=
NULL
);
ASSERT
(
pRaftStore
!=
NULL
);
taosCloseFile
(
&
pRaftStore
->
pFile
);
taosCloseFile
(
&
pRaftStore
->
pFile
);
taosMemoryFree
(
pRaftStore
);
taosMemoryFree
(
pRaftStore
);
...
@@ -81,17 +81,17 @@ int32_t raftStoreClose(SRaftStore *pRaftStore) {
...
@@ -81,17 +81,17 @@ int32_t raftStoreClose(SRaftStore *pRaftStore) {
}
}
int32_t
raftStorePersist
(
SRaftStore
*
pRaftStore
)
{
int32_t
raftStorePersist
(
SRaftStore
*
pRaftStore
)
{
assert
(
pRaftStore
!=
NULL
);
ASSERT
(
pRaftStore
!=
NULL
);
int32_t
ret
;
int32_t
ret
;
char
storeBuf
[
RAFT_STORE_BLOCK_SIZE
]
=
{
0
};
char
storeBuf
[
RAFT_STORE_BLOCK_SIZE
]
=
{
0
};
ret
=
raftStoreSerialize
(
pRaftStore
,
storeBuf
,
sizeof
(
storeBuf
));
ret
=
raftStoreSerialize
(
pRaftStore
,
storeBuf
,
sizeof
(
storeBuf
));
assert
(
ret
==
0
);
ASSERT
(
ret
==
0
);
taosLSeekFile
(
pRaftStore
->
pFile
,
0
,
SEEK_SET
);
taosLSeekFile
(
pRaftStore
->
pFile
,
0
,
SEEK_SET
);
ret
=
taosWriteFile
(
pRaftStore
->
pFile
,
storeBuf
,
sizeof
(
storeBuf
));
ret
=
taosWriteFile
(
pRaftStore
->
pFile
,
storeBuf
,
sizeof
(
storeBuf
));
assert
(
ret
==
RAFT_STORE_BLOCK_SIZE
);
ASSERT
(
ret
==
RAFT_STORE_BLOCK_SIZE
);
taosFsyncFile
(
pRaftStore
->
pFile
);
taosFsyncFile
(
pRaftStore
->
pFile
);
return
0
;
return
0
;
...
@@ -103,7 +103,7 @@ static bool raftStoreFileExist(char *path) {
...
@@ -103,7 +103,7 @@ static bool raftStoreFileExist(char *path) {
}
}
int32_t
raftStoreSerialize
(
SRaftStore
*
pRaftStore
,
char
*
buf
,
size_t
len
)
{
int32_t
raftStoreSerialize
(
SRaftStore
*
pRaftStore
,
char
*
buf
,
size_t
len
)
{
assert
(
pRaftStore
!=
NULL
);
ASSERT
(
pRaftStore
!=
NULL
);
cJSON
*
pRoot
=
cJSON_CreateObject
();
cJSON
*
pRoot
=
cJSON_CreateObject
();
...
@@ -125,7 +125,7 @@ int32_t raftStoreSerialize(SRaftStore *pRaftStore, char *buf, size_t len) {
...
@@ -125,7 +125,7 @@ int32_t raftStoreSerialize(SRaftStore *pRaftStore, char *buf, size_t len) {
char
*
serialized
=
cJSON_Print
(
pRoot
);
char
*
serialized
=
cJSON_Print
(
pRoot
);
int
len2
=
strlen
(
serialized
);
int
len2
=
strlen
(
serialized
);
assert
(
len2
<
len
);
ASSERT
(
len2
<
len
);
memset
(
buf
,
0
,
len
);
memset
(
buf
,
0
,
len
);
snprintf
(
buf
,
len
,
"%s"
,
serialized
);
snprintf
(
buf
,
len
,
"%s"
,
serialized
);
taosMemoryFree
(
serialized
);
taosMemoryFree
(
serialized
);
...
@@ -135,17 +135,17 @@ int32_t raftStoreSerialize(SRaftStore *pRaftStore, char *buf, size_t len) {
...
@@ -135,17 +135,17 @@ int32_t raftStoreSerialize(SRaftStore *pRaftStore, char *buf, size_t len) {
}
}
int32_t
raftStoreDeserialize
(
SRaftStore
*
pRaftStore
,
char
*
buf
,
size_t
len
)
{
int32_t
raftStoreDeserialize
(
SRaftStore
*
pRaftStore
,
char
*
buf
,
size_t
len
)
{
assert
(
pRaftStore
!=
NULL
);
ASSERT
(
pRaftStore
!=
NULL
);
assert
(
len
>
0
&&
len
<=
RAFT_STORE_BLOCK_SIZE
);
ASSERT
(
len
>
0
&&
len
<=
RAFT_STORE_BLOCK_SIZE
);
cJSON
*
pRoot
=
cJSON_Parse
(
buf
);
cJSON
*
pRoot
=
cJSON_Parse
(
buf
);
cJSON
*
pCurrentTerm
=
cJSON_GetObjectItem
(
pRoot
,
"current_term"
);
cJSON
*
pCurrentTerm
=
cJSON_GetObjectItem
(
pRoot
,
"current_term"
);
assert
(
cJSON_IsString
(
pCurrentTerm
));
ASSERT
(
cJSON_IsString
(
pCurrentTerm
));
sscanf
(
pCurrentTerm
->
valuestring
,
"%lu"
,
&
(
pRaftStore
->
currentTerm
));
sscanf
(
pCurrentTerm
->
valuestring
,
"%lu"
,
&
(
pRaftStore
->
currentTerm
));
cJSON
*
pVoteForAddr
=
cJSON_GetObjectItem
(
pRoot
,
"vote_for_addr"
);
cJSON
*
pVoteForAddr
=
cJSON_GetObjectItem
(
pRoot
,
"vote_for_addr"
);
assert
(
cJSON_IsString
(
pVoteForAddr
));
ASSERT
(
cJSON_IsString
(
pVoteForAddr
));
sscanf
(
pVoteForAddr
->
valuestring
,
"%lu"
,
&
(
pRaftStore
->
voteFor
.
addr
));
sscanf
(
pVoteForAddr
->
valuestring
,
"%lu"
,
&
(
pRaftStore
->
voteFor
.
addr
));
cJSON
*
pVoteForVgid
=
cJSON_GetObjectItem
(
pRoot
,
"vote_for_vgid"
);
cJSON
*
pVoteForVgid
=
cJSON_GetObjectItem
(
pRoot
,
"vote_for_vgid"
);
...
@@ -161,7 +161,7 @@ bool raftStoreHasVoted(SRaftStore *pRaftStore) {
...
@@ -161,7 +161,7 @@ bool raftStoreHasVoted(SRaftStore *pRaftStore) {
}
}
void
raftStoreVote
(
SRaftStore
*
pRaftStore
,
SRaftId
*
pRaftId
)
{
void
raftStoreVote
(
SRaftStore
*
pRaftStore
,
SRaftId
*
pRaftId
)
{
assert
(
!
syncUtilEmptyId
(
pRaftId
));
ASSERT
(
!
syncUtilEmptyId
(
pRaftId
));
pRaftStore
->
voteFor
=
*
pRaftId
;
pRaftStore
->
voteFor
=
*
pRaftId
;
raftStorePersist
(
pRaftStore
);
raftStorePersist
(
pRaftStore
);
}
}
...
@@ -216,7 +216,7 @@ cJSON *raftStore2Json(SRaftStore *pRaftStore) {
...
@@ -216,7 +216,7 @@ cJSON *raftStore2Json(SRaftStore *pRaftStore) {
char
*
raftStore2Str
(
SRaftStore
*
pRaftStore
)
{
char
*
raftStore2Str
(
SRaftStore
*
pRaftStore
)
{
cJSON
*
pJson
=
raftStore2Json
(
pRaftStore
);
cJSON
*
pJson
=
raftStore2Json
(
pRaftStore
);
char
*
serialized
=
cJSON_Print
(
pJson
);
char
*
serialized
=
cJSON_Print
(
pJson
);
cJSON_Delete
(
pJson
);
cJSON_Delete
(
pJson
);
return
serialized
;
return
serialized
;
}
}
...
...
source/libs/sync/src/syncReplication.c
浏览文件 @
980cf46b
...
@@ -49,7 +49,7 @@
...
@@ -49,7 +49,7 @@
// /\ UNCHANGED <<serverVars, candidateVars, leaderVars, logVars>>
// /\ UNCHANGED <<serverVars, candidateVars, leaderVars, logVars>>
//
//
int32_t
syncNodeAppendEntriesPeers
(
SSyncNode
*
pSyncNode
)
{
int32_t
syncNodeAppendEntriesPeers
(
SSyncNode
*
pSyncNode
)
{
assert
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_LEADER
);
ASSERT
(
pSyncNode
->
state
==
TAOS_SYNC_STATE_LEADER
);
syncIndexMgrLog2
(
"==syncNodeAppendEntriesPeers== pNextIndex"
,
pSyncNode
->
pNextIndex
);
syncIndexMgrLog2
(
"==syncNodeAppendEntriesPeers== pNextIndex"
,
pSyncNode
->
pNextIndex
);
syncIndexMgrLog2
(
"==syncNodeAppendEntriesPeers== pMatchIndex"
,
pSyncNode
->
pMatchIndex
);
syncIndexMgrLog2
(
"==syncNodeAppendEntriesPeers== pMatchIndex"
,
pSyncNode
->
pMatchIndex
);
...
@@ -68,7 +68,7 @@ int32_t syncNodeAppendEntriesPeers(SSyncNode* pSyncNode) {
...
@@ -68,7 +68,7 @@ int32_t syncNodeAppendEntriesPeers(SSyncNode* pSyncNode) {
SyncTerm
preLogTerm
=
0
;
SyncTerm
preLogTerm
=
0
;
if
(
preLogIndex
>=
SYNC_INDEX_BEGIN
)
{
if
(
preLogIndex
>=
SYNC_INDEX_BEGIN
)
{
SSyncRaftEntry
*
pPreEntry
=
pSyncNode
->
pLogStore
->
getEntry
(
pSyncNode
->
pLogStore
,
preLogIndex
);
SSyncRaftEntry
*
pPreEntry
=
pSyncNode
->
pLogStore
->
getEntry
(
pSyncNode
->
pLogStore
,
preLogIndex
);
assert
(
pPreEntry
!=
NULL
);
ASSERT
(
pPreEntry
!=
NULL
);
preLogTerm
=
pPreEntry
->
term
;
preLogTerm
=
pPreEntry
->
term
;
syncEntryDestory
(
pPreEntry
);
syncEntryDestory
(
pPreEntry
);
...
@@ -81,12 +81,12 @@ int32_t syncNodeAppendEntriesPeers(SSyncNode* pSyncNode) {
...
@@ -81,12 +81,12 @@ int32_t syncNodeAppendEntriesPeers(SSyncNode* pSyncNode) {
SSyncRaftEntry
*
pEntry
=
pSyncNode
->
pLogStore
->
getEntry
(
pSyncNode
->
pLogStore
,
nextIndex
);
SSyncRaftEntry
*
pEntry
=
pSyncNode
->
pLogStore
->
getEntry
(
pSyncNode
->
pLogStore
,
nextIndex
);
if
(
pEntry
!=
NULL
)
{
if
(
pEntry
!=
NULL
)
{
pMsg
=
syncAppendEntriesBuild
(
pEntry
->
bytes
,
pSyncNode
->
vgId
);
pMsg
=
syncAppendEntriesBuild
(
pEntry
->
bytes
,
pSyncNode
->
vgId
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
// add pEntry into msg
// add pEntry into msg
uint32_t
len
;
uint32_t
len
;
char
*
serialized
=
syncEntrySerialize
(
pEntry
,
&
len
);
char
*
serialized
=
syncEntrySerialize
(
pEntry
,
&
len
);
assert
(
len
==
pEntry
->
bytes
);
ASSERT
(
len
==
pEntry
->
bytes
);
memcpy
(
pMsg
->
data
,
serialized
,
len
);
memcpy
(
pMsg
->
data
,
serialized
,
len
);
taosMemoryFree
(
serialized
);
taosMemoryFree
(
serialized
);
...
@@ -95,10 +95,10 @@ int32_t syncNodeAppendEntriesPeers(SSyncNode* pSyncNode) {
...
@@ -95,10 +95,10 @@ int32_t syncNodeAppendEntriesPeers(SSyncNode* pSyncNode) {
}
else
{
}
else
{
// maybe overflow, send empty record
// maybe overflow, send empty record
pMsg
=
syncAppendEntriesBuild
(
0
,
pSyncNode
->
vgId
);
pMsg
=
syncAppendEntriesBuild
(
0
,
pSyncNode
->
vgId
);
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
}
}
assert
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
pMsg
->
srcId
=
pSyncNode
->
myRaftId
;
pMsg
->
srcId
=
pSyncNode
->
myRaftId
;
pMsg
->
destId
=
*
pDestId
;
pMsg
->
destId
=
*
pDestId
;
pMsg
->
term
=
pSyncNode
->
pRaftStore
->
currentTerm
;
pMsg
->
term
=
pSyncNode
->
pRaftStore
->
currentTerm
;
...
@@ -148,25 +148,32 @@ int32_t syncNodeAppendEntriesPeersSnapshot(SSyncNode* pSyncNode) {
...
@@ -148,25 +148,32 @@ int32_t syncNodeAppendEntriesPeersSnapshot(SSyncNode* pSyncNode) {
SSyncRaftEntry
*
pEntry
;
SSyncRaftEntry
*
pEntry
;
int32_t
code
=
pSyncNode
->
pLogStore
->
syncLogGetEntry
(
pSyncNode
->
pLogStore
,
nextIndex
,
&
pEntry
);
int32_t
code
=
pSyncNode
->
pLogStore
->
syncLogGetEntry
(
pSyncNode
->
pLogStore
,
nextIndex
,
&
pEntry
);
ASSERT
(
code
==
0
);
if
(
pEntry
!=
NULL
)
{
if
(
code
==
0
)
{
ASSERT
(
pEntry
!=
NULL
);
pMsg
=
syncAppendEntriesBuild
(
pEntry
->
bytes
,
pSyncNode
->
vgId
);
pMsg
=
syncAppendEntriesBuild
(
pEntry
->
bytes
,
pSyncNode
->
vgId
);
ASSERT
(
pMsg
!=
NULL
);
ASSERT
(
pMsg
!=
NULL
);
// add pEntry into msg
// add pEntry into msg
uint32_t
len
;
uint32_t
len
;
char
*
serialized
=
syncEntrySerialize
(
pEntry
,
&
len
);
char
*
serialized
=
syncEntrySerialize
(
pEntry
,
&
len
);
assert
(
len
==
pEntry
->
bytes
);
ASSERT
(
len
==
pEntry
->
bytes
);
memcpy
(
pMsg
->
data
,
serialized
,
len
);
memcpy
(
pMsg
->
data
,
serialized
,
len
);
taosMemoryFree
(
serialized
);
taosMemoryFree
(
serialized
);
syncEntryDestory
(
pEntry
);
syncEntryDestory
(
pEntry
);
}
else
{
}
else
{
// no entry in log
if
(
terrno
==
TSDB_CODE_WAL_LOG_NOT_EXIST
)
{
pMsg
=
syncAppendEntriesBuild
(
0
,
pSyncNode
->
vgId
);
// no entry in log
ASSERT
(
pMsg
!=
NULL
);
pMsg
=
syncAppendEntriesBuild
(
0
,
pSyncNode
->
vgId
);
ASSERT
(
pMsg
!=
NULL
);
}
else
{
syncNodeLog3
(
""
,
pSyncNode
);
ASSERT
(
0
);
}
}
}
// prepare msg
// prepare msg
...
...
source/libs/sync/src/syncRequestVote.c
浏览文件 @
980cf46b
...
@@ -52,7 +52,7 @@ int32_t syncNodeOnRequestVoteCb(SSyncNode* ths, SyncRequestVote* pMsg) {
...
@@ -52,7 +52,7 @@ int32_t syncNodeOnRequestVoteCb(SSyncNode* ths, SyncRequestVote* pMsg) {
if
(
pMsg
->
term
>
ths
->
pRaftStore
->
currentTerm
)
{
if
(
pMsg
->
term
>
ths
->
pRaftStore
->
currentTerm
)
{
syncNodeUpdateTerm
(
ths
,
pMsg
->
term
);
syncNodeUpdateTerm
(
ths
,
pMsg
->
term
);
}
}
assert
(
pMsg
->
term
<=
ths
->
pRaftStore
->
currentTerm
);
ASSERT
(
pMsg
->
term
<=
ths
->
pRaftStore
->
currentTerm
);
bool
logOK
=
(
pMsg
->
lastLogTerm
>
ths
->
pLogStore
->
getLastTerm
(
ths
->
pLogStore
))
||
bool
logOK
=
(
pMsg
->
lastLogTerm
>
ths
->
pLogStore
->
getLastTerm
(
ths
->
pLogStore
))
||
((
pMsg
->
lastLogTerm
==
ths
->
pLogStore
->
getLastTerm
(
ths
->
pLogStore
))
&&
((
pMsg
->
lastLogTerm
==
ths
->
pLogStore
->
getLastTerm
(
ths
->
pLogStore
))
&&
...
...
source/libs/sync/src/syncRequestVoteReply.c
浏览文件 @
980cf46b
...
@@ -50,7 +50,7 @@ int32_t syncNodeOnRequestVoteReplyCb(SSyncNode* ths, SyncRequestVoteReply* pMsg)
...
@@ -50,7 +50,7 @@ int32_t syncNodeOnRequestVoteReplyCb(SSyncNode* ths, SyncRequestVoteReply* pMsg)
return
ret
;
return
ret
;
}
}
//
assert
(!(pMsg->term > ths->pRaftStore->currentTerm));
//
ASSERT
(!(pMsg->term > ths->pRaftStore->currentTerm));
// no need this code, because if I receive reply.term, then I must have sent for that term.
// no need this code, because if I receive reply.term, then I must have sent for that term.
// if (pMsg->term > ths->pRaftStore->currentTerm) {
// if (pMsg->term > ths->pRaftStore->currentTerm) {
// syncNodeUpdateTerm(ths, pMsg->term);
// syncNodeUpdateTerm(ths, pMsg->term);
...
@@ -65,7 +65,7 @@ int32_t syncNodeOnRequestVoteReplyCb(SSyncNode* ths, SyncRequestVoteReply* pMsg)
...
@@ -65,7 +65,7 @@ int32_t syncNodeOnRequestVoteReplyCb(SSyncNode* ths, SyncRequestVoteReply* pMsg)
return
ret
;
return
ret
;
}
}
assert
(
pMsg
->
term
==
ths
->
pRaftStore
->
currentTerm
);
ASSERT
(
pMsg
->
term
==
ths
->
pRaftStore
->
currentTerm
);
// This tallies votes even when the current state is not Candidate,
// This tallies votes even when the current state is not Candidate,
// but they won't be looked at, so it doesn't matter.
// but they won't be looked at, so it doesn't matter.
...
@@ -115,7 +115,7 @@ int32_t syncNodeOnRequestVoteReplySnapshotCb(SSyncNode* ths, SyncRequestVoteRepl
...
@@ -115,7 +115,7 @@ int32_t syncNodeOnRequestVoteReplySnapshotCb(SSyncNode* ths, SyncRequestVoteRepl
return
ret
;
return
ret
;
}
}
//
assert
(!(pMsg->term > ths->pRaftStore->currentTerm));
//
ASSERT
(!(pMsg->term > ths->pRaftStore->currentTerm));
// no need this code, because if I receive reply.term, then I must have sent for that term.
// no need this code, because if I receive reply.term, then I must have sent for that term.
// if (pMsg->term > ths->pRaftStore->currentTerm) {
// if (pMsg->term > ths->pRaftStore->currentTerm) {
// syncNodeUpdateTerm(ths, pMsg->term);
// syncNodeUpdateTerm(ths, pMsg->term);
...
...
source/libs/sync/src/syncRespMgr.c
浏览文件 @
980cf46b
...
@@ -22,7 +22,7 @@ SSyncRespMgr *syncRespMgrCreate(void *data, int64_t ttl) {
...
@@ -22,7 +22,7 @@ SSyncRespMgr *syncRespMgrCreate(void *data, int64_t ttl) {
pObj
->
pRespHash
=
pObj
->
pRespHash
=
taosHashInit
(
sizeof
(
uint64_t
),
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_NO_LOCK
);
taosHashInit
(
sizeof
(
uint64_t
),
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_NO_LOCK
);
assert
(
pObj
->
pRespHash
!=
NULL
);
ASSERT
(
pObj
->
pRespHash
!=
NULL
);
pObj
->
ttl
=
ttl
;
pObj
->
ttl
=
ttl
;
pObj
->
data
=
data
;
pObj
->
data
=
data
;
pObj
->
seqNum
=
0
;
pObj
->
seqNum
=
0
;
...
...
source/libs/sync/src/syncSnapshot.c
浏览文件 @
980cf46b
...
@@ -73,41 +73,49 @@ void snapshotSenderStart(SSyncSnapshotSender *pSender, SSnapshot snapshot, void
...
@@ -73,41 +73,49 @@ void snapshotSenderStart(SSyncSnapshotSender *pSender, SSnapshot snapshot, void
pSender
->
seq
=
SYNC_SNAPSHOT_SEQ_BEGIN
;
pSender
->
seq
=
SYNC_SNAPSHOT_SEQ_BEGIN
;
pSender
->
ack
=
SYNC_SNAPSHOT_SEQ_INVALID
;
pSender
->
ack
=
SYNC_SNAPSHOT_SEQ_INVALID
;
//
open snapshot
reader
//
init snapshot and
reader
ASSERT
(
pSender
->
pReader
==
NULL
);
ASSERT
(
pSender
->
pReader
==
NULL
);
pSender
->
pReader
=
pReader
;
pSender
->
pReader
=
pReader
;
pSender
->
snapshot
=
snapshot
;
pSender
->
snapshot
=
snapshot
;
/*
// open snapshot reader
ASSERT(pSender->pReader == NULL);
int32_t ret = pSender->pSyncNode->pFsm->FpSnapshotStartRead(pSender->pSyncNode->pFsm, &(pSender->pReader));
ASSERT(ret == 0);
// get current snapshot info
pSender->pSyncNode->pFsm->FpGetSnapshotInfo(pSender->pSyncNode->pFsm, &(pSender->snapshot));
*/
if
(
pSender
->
pCurrentBlock
!=
NULL
)
{
if
(
pSender
->
pCurrentBlock
!=
NULL
)
{
taosMemoryFree
(
pSender
->
pCurrentBlock
);
taosMemoryFree
(
pSender
->
pCurrentBlock
);
}
}
pSender
->
blockLen
=
0
;
pSender
->
blockLen
=
0
;
if
(
pSender
->
snapshot
.
lastConfigIndex
!=
SYNC_INDEX_INVALID
)
{
if
(
pSender
->
snapshot
.
lastConfigIndex
!=
SYNC_INDEX_INVALID
)
{
SSyncRaftEntry
*
pEntry
=
int32_t
code
=
0
;
pSender
->
pSyncNode
->
pLogStore
->
getEntry
(
pSender
->
pSyncNode
->
pLogStore
,
pSender
->
snapshot
.
lastConfigIndex
);
SSyncRaftEntry
*
pEntry
=
NULL
;
ASSERT
(
pEntry
!=
NULL
);
code
=
pSender
->
pSyncNode
->
pLogStore
->
syncLogGetEntry
(
pSender
->
pSyncNode
->
pLogStore
,
pSender
->
snapshot
.
lastConfigIndex
,
&
pEntry
);
SRpcMsg
rpcMsg
;
syncEntry2OriginalRpc
(
pEntry
,
&
rpcMsg
);
bool
getLastConfig
=
false
;
SSyncCfg
lastConfig
;
if
(
code
==
0
)
{
int32_t
ret
=
syncCfgFromStr
(
rpcMsg
.
pCont
,
&
lastConfig
);
ASSERT
(
pEntry
!=
NULL
);
ASSERT
(
ret
==
0
);
pSender
->
lastConfig
=
lastConfig
;
SRpcMsg
rpcMsg
;
syncEntry2OriginalRpc
(
pEntry
,
&
rpcMsg
);
SSyncCfg
lastConfig
;
int32_t
ret
=
syncCfgFromStr
(
rpcMsg
.
pCont
,
&
lastConfig
);
ASSERT
(
ret
==
0
);
pSender
->
lastConfig
=
lastConfig
;
getLastConfig
=
true
;
rpcFreeCont
(
rpcMsg
.
pCont
);
syncEntryDestory
(
pEntry
);
}
else
{
if
(
pSender
->
snapshot
.
lastConfigIndex
==
pSender
->
pSyncNode
->
pRaftCfg
->
lastConfigIndex
)
{
sTrace
(
"vgId:%d sync sender get cfg from local"
,
pSender
->
pSyncNode
->
vgId
);
pSender
->
lastConfig
=
pSender
->
pSyncNode
->
pRaftCfg
->
cfg
;
getLastConfig
=
true
;
}
}
rpcFreeCont
(
rpcMsg
.
pCont
);
if
(
!
getLastConfig
)
{
syncEntryDestory
(
pEntry
);
syncNodeLog3
(
""
,
pSender
->
pSyncNode
);
ASSERT
(
0
);
}
}
else
{
}
else
{
memset
(
&
(
pSender
->
lastConfig
),
0
,
sizeof
(
SSyncCfg
));
memset
(
&
(
pSender
->
lastConfig
),
0
,
sizeof
(
SSyncCfg
));
...
...
source/libs/sync/src/syncUtil.c
浏览文件 @
980cf46b
...
@@ -86,7 +86,7 @@ void syncUtilraftId2EpSet(const SRaftId* raftId, SEpSet* pEpSet) {
...
@@ -86,7 +86,7 @@ void syncUtilraftId2EpSet(const SRaftId* raftId, SEpSet* pEpSet) {
void
syncUtilnodeInfo2raftId
(
const
SNodeInfo
*
pNodeInfo
,
SyncGroupId
vgId
,
SRaftId
*
raftId
)
{
void
syncUtilnodeInfo2raftId
(
const
SNodeInfo
*
pNodeInfo
,
SyncGroupId
vgId
,
SRaftId
*
raftId
)
{
uint32_t
ipv4
=
taosGetIpv4FromFqdn
(
pNodeInfo
->
nodeFqdn
);
uint32_t
ipv4
=
taosGetIpv4FromFqdn
(
pNodeInfo
->
nodeFqdn
);
assert
(
ipv4
!=
0xFFFFFFFF
);
ASSERT
(
ipv4
!=
0xFFFFFFFF
);
char
ipbuf
[
128
]
=
{
0
};
char
ipbuf
[
128
]
=
{
0
};
tinet_ntoa
(
ipbuf
,
ipv4
);
tinet_ntoa
(
ipbuf
,
ipv4
);
raftId
->
addr
=
syncUtilAddr2U64
(
ipbuf
,
pNodeInfo
->
nodePort
);
raftId
->
addr
=
syncUtilAddr2U64
(
ipbuf
,
pNodeInfo
->
nodePort
);
...
@@ -124,7 +124,7 @@ void syncUtilbufCopyDeep(const SSyncBuffer* src, SSyncBuffer* dest) {
...
@@ -124,7 +124,7 @@ void syncUtilbufCopyDeep(const SSyncBuffer* src, SSyncBuffer* dest) {
int32_t
syncUtilRand
(
int32_t
max
)
{
return
taosRand
()
%
max
;
}
int32_t
syncUtilRand
(
int32_t
max
)
{
return
taosRand
()
%
max
;
}
int32_t
syncUtilElectRandomMS
(
int32_t
min
,
int32_t
max
)
{
int32_t
syncUtilElectRandomMS
(
int32_t
min
,
int32_t
max
)
{
assert
(
min
>
0
&&
max
>
0
&&
max
>=
min
);
ASSERT
(
min
>
0
&&
max
>
0
&&
max
>=
min
);
return
min
+
syncUtilRand
(
max
-
min
);
return
min
+
syncUtilRand
(
max
-
min
);
}
}
...
@@ -201,7 +201,7 @@ bool syncUtilCanPrint(char c) {
...
@@ -201,7 +201,7 @@ bool syncUtilCanPrint(char c) {
char
*
syncUtilprintBin
(
char
*
ptr
,
uint32_t
len
)
{
char
*
syncUtilprintBin
(
char
*
ptr
,
uint32_t
len
)
{
char
*
s
=
taosMemoryMalloc
(
len
+
1
);
char
*
s
=
taosMemoryMalloc
(
len
+
1
);
assert
(
s
!=
NULL
);
ASSERT
(
s
!=
NULL
);
memset
(
s
,
0
,
len
+
1
);
memset
(
s
,
0
,
len
+
1
);
memcpy
(
s
,
ptr
,
len
);
memcpy
(
s
,
ptr
,
len
);
...
@@ -216,7 +216,7 @@ char* syncUtilprintBin(char* ptr, uint32_t len) {
...
@@ -216,7 +216,7 @@ char* syncUtilprintBin(char* ptr, uint32_t len) {
char
*
syncUtilprintBin2
(
char
*
ptr
,
uint32_t
len
)
{
char
*
syncUtilprintBin2
(
char
*
ptr
,
uint32_t
len
)
{
uint32_t
len2
=
len
*
4
+
1
;
uint32_t
len2
=
len
*
4
+
1
;
char
*
s
=
taosMemoryMalloc
(
len2
);
char
*
s
=
taosMemoryMalloc
(
len2
);
assert
(
s
!=
NULL
);
ASSERT
(
s
!=
NULL
);
memset
(
s
,
0
,
len2
);
memset
(
s
,
0
,
len2
);
char
*
p
=
s
;
char
*
p
=
s
;
...
...
source/libs/sync/src/syncVoteMgr.c
浏览文件 @
980cf46b
...
@@ -24,7 +24,7 @@ static void voteGrantedClearVotes(SVotesGranted *pVotesGranted) {
...
@@ -24,7 +24,7 @@ static void voteGrantedClearVotes(SVotesGranted *pVotesGranted) {
SVotesGranted
*
voteGrantedCreate
(
SSyncNode
*
pSyncNode
)
{
SVotesGranted
*
voteGrantedCreate
(
SSyncNode
*
pSyncNode
)
{
SVotesGranted
*
pVotesGranted
=
taosMemoryMalloc
(
sizeof
(
SVotesGranted
));
SVotesGranted
*
pVotesGranted
=
taosMemoryMalloc
(
sizeof
(
SVotesGranted
));
assert
(
pVotesGranted
!=
NULL
);
ASSERT
(
pVotesGranted
!=
NULL
);
memset
(
pVotesGranted
,
0
,
sizeof
(
SVotesGranted
));
memset
(
pVotesGranted
,
0
,
sizeof
(
SVotesGranted
));
pVotesGranted
->
replicas
=
&
(
pSyncNode
->
replicasId
);
pVotesGranted
->
replicas
=
&
(
pSyncNode
->
replicasId
);
...
@@ -62,9 +62,9 @@ bool voteGrantedMajority(SVotesGranted *pVotesGranted) {
...
@@ -62,9 +62,9 @@ bool voteGrantedMajority(SVotesGranted *pVotesGranted) {
}
}
void
voteGrantedVote
(
SVotesGranted
*
pVotesGranted
,
SyncRequestVoteReply
*
pMsg
)
{
void
voteGrantedVote
(
SVotesGranted
*
pVotesGranted
,
SyncRequestVoteReply
*
pMsg
)
{
assert
(
pMsg
->
voteGranted
==
true
);
ASSERT
(
pMsg
->
voteGranted
==
true
);
assert
(
pMsg
->
term
==
pVotesGranted
->
term
);
ASSERT
(
pMsg
->
term
==
pVotesGranted
->
term
);
assert
(
syncUtilSameId
(
&
pVotesGranted
->
pSyncNode
->
myRaftId
,
&
pMsg
->
destId
));
ASSERT
(
syncUtilSameId
(
&
pVotesGranted
->
pSyncNode
->
myRaftId
,
&
pMsg
->
destId
));
int
j
=
-
1
;
int
j
=
-
1
;
for
(
int
i
=
0
;
i
<
pVotesGranted
->
replicaNum
;
++
i
)
{
for
(
int
i
=
0
;
i
<
pVotesGranted
->
replicaNum
;
++
i
)
{
...
@@ -73,14 +73,14 @@ void voteGrantedVote(SVotesGranted *pVotesGranted, SyncRequestVoteReply *pMsg) {
...
@@ -73,14 +73,14 @@ void voteGrantedVote(SVotesGranted *pVotesGranted, SyncRequestVoteReply *pMsg) {
break
;
break
;
}
}
}
}
assert
(
j
!=
-
1
);
ASSERT
(
j
!=
-
1
);
assert
(
j
>=
0
&&
j
<
pVotesGranted
->
replicaNum
);
ASSERT
(
j
>=
0
&&
j
<
pVotesGranted
->
replicaNum
);
if
(
pVotesGranted
->
isGranted
[
j
]
!=
true
)
{
if
(
pVotesGranted
->
isGranted
[
j
]
!=
true
)
{
++
(
pVotesGranted
->
votes
);
++
(
pVotesGranted
->
votes
);
pVotesGranted
->
isGranted
[
j
]
=
true
;
pVotesGranted
->
isGranted
[
j
]
=
true
;
}
}
assert
(
pVotesGranted
->
votes
<=
pVotesGranted
->
replicaNum
);
ASSERT
(
pVotesGranted
->
votes
<=
pVotesGranted
->
replicaNum
);
}
}
void
voteGrantedReset
(
SVotesGranted
*
pVotesGranted
,
SyncTerm
term
)
{
void
voteGrantedReset
(
SVotesGranted
*
pVotesGranted
,
SyncTerm
term
)
{
...
@@ -127,7 +127,7 @@ cJSON *voteGranted2Json(SVotesGranted *pVotesGranted) {
...
@@ -127,7 +127,7 @@ cJSON *voteGranted2Json(SVotesGranted *pVotesGranted) {
char
*
voteGranted2Str
(
SVotesGranted
*
pVotesGranted
)
{
char
*
voteGranted2Str
(
SVotesGranted
*
pVotesGranted
)
{
cJSON
*
pJson
=
voteGranted2Json
(
pVotesGranted
);
cJSON
*
pJson
=
voteGranted2Json
(
pVotesGranted
);
char
*
serialized
=
cJSON_Print
(
pJson
);
char
*
serialized
=
cJSON_Print
(
pJson
);
cJSON_Delete
(
pJson
);
cJSON_Delete
(
pJson
);
return
serialized
;
return
serialized
;
}
}
...
@@ -162,7 +162,7 @@ void voteGrantedLog2(char *s, SVotesGranted *pObj) {
...
@@ -162,7 +162,7 @@ void voteGrantedLog2(char *s, SVotesGranted *pObj) {
// SVotesRespond -----------------------------
// SVotesRespond -----------------------------
SVotesRespond
*
votesRespondCreate
(
SSyncNode
*
pSyncNode
)
{
SVotesRespond
*
votesRespondCreate
(
SSyncNode
*
pSyncNode
)
{
SVotesRespond
*
pVotesRespond
=
taosMemoryMalloc
(
sizeof
(
SVotesRespond
));
SVotesRespond
*
pVotesRespond
=
taosMemoryMalloc
(
sizeof
(
SVotesRespond
));
assert
(
pVotesRespond
!=
NULL
);
ASSERT
(
pVotesRespond
!=
NULL
);
memset
(
pVotesRespond
,
0
,
sizeof
(
SVotesRespond
));
memset
(
pVotesRespond
,
0
,
sizeof
(
SVotesRespond
));
pVotesRespond
->
replicas
=
&
(
pSyncNode
->
replicasId
);
pVotesRespond
->
replicas
=
&
(
pSyncNode
->
replicasId
);
...
@@ -198,15 +198,15 @@ bool votesResponded(SVotesRespond *pVotesRespond, const SRaftId *pRaftId) {
...
@@ -198,15 +198,15 @@ bool votesResponded(SVotesRespond *pVotesRespond, const SRaftId *pRaftId) {
}
}
void
votesRespondAdd
(
SVotesRespond
*
pVotesRespond
,
const
SyncRequestVoteReply
*
pMsg
)
{
void
votesRespondAdd
(
SVotesRespond
*
pVotesRespond
,
const
SyncRequestVoteReply
*
pMsg
)
{
assert
(
pVotesRespond
->
term
==
pMsg
->
term
);
ASSERT
(
pVotesRespond
->
term
==
pMsg
->
term
);
for
(
int
i
=
0
;
i
<
pVotesRespond
->
replicaNum
;
++
i
)
{
for
(
int
i
=
0
;
i
<
pVotesRespond
->
replicaNum
;
++
i
)
{
if
(
syncUtilSameId
(
&
((
*
(
pVotesRespond
->
replicas
))[
i
]),
&
pMsg
->
srcId
))
{
if
(
syncUtilSameId
(
&
((
*
(
pVotesRespond
->
replicas
))[
i
]),
&
pMsg
->
srcId
))
{
//
assert
(pVotesRespond->isRespond[i] == false);
//
ASSERT
(pVotesRespond->isRespond[i] == false);
pVotesRespond
->
isRespond
[
i
]
=
true
;
pVotesRespond
->
isRespond
[
i
]
=
true
;
return
;
return
;
}
}
}
}
assert
(
0
);
ASSERT
(
0
);
}
}
void
votesRespondReset
(
SVotesRespond
*
pVotesRespond
,
SyncTerm
term
)
{
void
votesRespondReset
(
SVotesRespond
*
pVotesRespond
,
SyncTerm
term
)
{
...
@@ -256,7 +256,7 @@ cJSON *votesRespond2Json(SVotesRespond *pVotesRespond) {
...
@@ -256,7 +256,7 @@ cJSON *votesRespond2Json(SVotesRespond *pVotesRespond) {
char
*
votesRespond2Str
(
SVotesRespond
*
pVotesRespond
)
{
char
*
votesRespond2Str
(
SVotesRespond
*
pVotesRespond
)
{
cJSON
*
pJson
=
votesRespond2Json
(
pVotesRespond
);
cJSON
*
pJson
=
votesRespond2Json
(
pVotesRespond
);
char
*
serialized
=
cJSON_Print
(
pJson
);
char
*
serialized
=
cJSON_Print
(
pJson
);
cJSON_Delete
(
pJson
);
cJSON_Delete
(
pJson
);
return
serialized
;
return
serialized
;
}
}
...
...
source/libs/sync/test/CMakeLists.txt
浏览文件 @
980cf46b
...
@@ -34,6 +34,7 @@ add_executable(syncWriteTest "")
...
@@ -34,6 +34,7 @@ add_executable(syncWriteTest "")
add_executable
(
syncReplicateTest
""
)
add_executable
(
syncReplicateTest
""
)
add_executable
(
syncRefTest
""
)
add_executable
(
syncRefTest
""
)
add_executable
(
syncLogStoreCheck
""
)
add_executable
(
syncLogStoreCheck
""
)
add_executable
(
syncLogStoreCheck2
""
)
add_executable
(
syncRaftCfgTest
""
)
add_executable
(
syncRaftCfgTest
""
)
add_executable
(
syncRespMgrTest
""
)
add_executable
(
syncRespMgrTest
""
)
add_executable
(
syncSnapshotTest
""
)
add_executable
(
syncSnapshotTest
""
)
...
@@ -196,6 +197,10 @@ target_sources(syncLogStoreCheck
...
@@ -196,6 +197,10 @@ target_sources(syncLogStoreCheck
PRIVATE
PRIVATE
"syncLogStoreCheck.cpp"
"syncLogStoreCheck.cpp"
)
)
target_sources
(
syncLogStoreCheck2
PRIVATE
"syncLogStoreCheck2.cpp"
)
target_sources
(
syncRaftCfgTest
target_sources
(
syncRaftCfgTest
PRIVATE
PRIVATE
"syncRaftCfgTest.cpp"
"syncRaftCfgTest.cpp"
...
@@ -442,6 +447,11 @@ target_include_directories(syncLogStoreCheck
...
@@ -442,6 +447,11 @@ target_include_directories(syncLogStoreCheck
"
${
TD_SOURCE_DIR
}
/include/libs/sync"
"
${
TD_SOURCE_DIR
}
/include/libs/sync"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/../inc"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/../inc"
)
)
target_include_directories
(
syncLogStoreCheck2
PUBLIC
"
${
TD_SOURCE_DIR
}
/include/libs/sync"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/../inc"
)
target_include_directories
(
syncRaftCfgTest
target_include_directories
(
syncRaftCfgTest
PUBLIC
PUBLIC
"
${
TD_SOURCE_DIR
}
/include/libs/sync"
"
${
TD_SOURCE_DIR
}
/include/libs/sync"
...
@@ -668,6 +678,10 @@ target_link_libraries(syncLogStoreCheck
...
@@ -668,6 +678,10 @@ target_link_libraries(syncLogStoreCheck
sync
sync
gtest_main
gtest_main
)
)
target_link_libraries
(
syncLogStoreCheck2
sync
gtest_main
)
target_link_libraries
(
syncRaftCfgTest
target_link_libraries
(
syncRaftCfgTest
sync
sync
gtest_main
gtest_main
...
...
source/libs/sync/test/syncLogStoreCheck2.cpp
0 → 100644
浏览文件 @
980cf46b
#include <gtest/gtest.h>
#include <stdio.h>
#include "syncEnv.h"
#include "syncIO.h"
#include "syncInt.h"
#include "syncRaftLog.h"
#include "syncRaftStore.h"
#include "syncUtil.h"
#include "wal.h"
void
logTest
()
{
sTrace
(
"--- sync log test: trace"
);
sDebug
(
"--- sync log test: debug"
);
sInfo
(
"--- sync log test: info"
);
sWarn
(
"--- sync log test: warn"
);
sError
(
"--- sync log test: error"
);
sFatal
(
"--- sync log test: fatal"
);
}
void
init
()
{
int
code
=
walInit
();
assert
(
code
==
0
);
}
void
cleanup
()
{
walCleanUp
();
}
SWal
*
createWal
(
char
*
path
,
int32_t
vgId
)
{
SWalCfg
walCfg
;
memset
(
&
walCfg
,
0
,
sizeof
(
SWalCfg
));
walCfg
.
vgId
=
vgId
;
walCfg
.
fsyncPeriod
=
1000
;
walCfg
.
retentionPeriod
=
1000
;
walCfg
.
rollPeriod
=
1000
;
walCfg
.
retentionSize
=
1000
;
walCfg
.
segSize
=
1000
;
walCfg
.
level
=
TAOS_WAL_FSYNC
;
SWal
*
pWal
=
walOpen
(
path
,
&
walCfg
);
assert
(
pWal
!=
NULL
);
return
pWal
;
}
SSyncNode
*
createSyncNode
(
SWal
*
pWal
)
{
SSyncNode
*
pSyncNode
=
(
SSyncNode
*
)
taosMemoryMalloc
(
sizeof
(
SSyncNode
));
memset
(
pSyncNode
,
0
,
sizeof
(
SSyncNode
));
pSyncNode
->
pWal
=
pWal
;
return
pSyncNode
;
}
void
usage
(
char
*
exe
)
{
printf
(
"usage: %s path vgId
\n
"
,
exe
);
}
int
main
(
int
argc
,
char
**
argv
)
{
if
(
argc
!=
3
)
{
usage
(
argv
[
0
]);
exit
(
-
1
);
}
char
*
path
=
argv
[
1
];
int32_t
vgId
=
atoi
(
argv
[
2
]);
init
();
SWal
*
pWal
=
createWal
(
path
,
vgId
);
assert
(
pWal
!=
NULL
);
SSyncNode
*
pSyncNode
=
createSyncNode
(
pWal
);
assert
(
pSyncNode
!=
NULL
);
SSyncLogStore
*
pLog
=
logStoreCreate
(
pSyncNode
);
assert
(
pLog
!=
NULL
);
logStorePrint2
((
char
*
)
"==syncLogStoreCheck=="
,
pLog
);
walClose
(
pWal
);
logStoreDestory
(
pLog
);
taosMemoryFree
(
pSyncNode
);
cleanup
();
return
0
;
}
source/libs/sync/test/syncRaftLogTest2.cpp
浏览文件 @
980cf46b
...
@@ -69,6 +69,7 @@ void test1() {
...
@@ -69,6 +69,7 @@ void test1() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test1 ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test1 ----- "
,
pLogStore
);
if
(
gAssert
)
{
if
(
gAssert
)
{
...
@@ -88,6 +89,7 @@ void test1() {
...
@@ -88,6 +89,7 @@ void test1() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test1 restart ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test1 restart ----- "
,
pLogStore
);
if
(
gAssert
)
{
if
(
gAssert
)
{
...
@@ -110,6 +112,7 @@ void test2() {
...
@@ -110,6 +112,7 @@ void test2() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
pLogStore
->
syncLogSetBeginIndex
(
pLogStore
,
5
);
pLogStore
->
syncLogSetBeginIndex
(
pLogStore
,
5
);
logStoreLog2
((
char
*
)
"
\n\n\n
test2 ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test2 ----- "
,
pLogStore
);
...
@@ -130,6 +133,7 @@ void test2() {
...
@@ -130,6 +133,7 @@ void test2() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test2 restart ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test2 restart ----- "
,
pLogStore
);
if
(
gAssert
)
{
if
(
gAssert
)
{
...
@@ -152,6 +156,7 @@ void test3() {
...
@@ -152,6 +156,7 @@ void test3() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test3 ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test3 ----- "
,
pLogStore
);
if
(
gAssert
)
{
if
(
gAssert
)
{
...
@@ -198,6 +203,7 @@ void test3() {
...
@@ -198,6 +203,7 @@ void test3() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test3 restart ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test3 restart ----- "
,
pLogStore
);
if
(
gAssert
)
{
if
(
gAssert
)
{
...
@@ -220,6 +226,7 @@ void test4() {
...
@@ -220,6 +226,7 @@ void test4() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test4 ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test4 ----- "
,
pLogStore
);
pLogStore
->
syncLogSetBeginIndex
(
pLogStore
,
5
);
pLogStore
->
syncLogSetBeginIndex
(
pLogStore
,
5
);
...
@@ -257,6 +264,7 @@ void test4() {
...
@@ -257,6 +264,7 @@ void test4() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test4 restart ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test4 restart ----- "
,
pLogStore
);
if
(
gAssert
)
{
if
(
gAssert
)
{
...
@@ -279,6 +287,7 @@ void test5() {
...
@@ -279,6 +287,7 @@ void test5() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test5 ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test5 ----- "
,
pLogStore
);
pLogStore
->
syncLogSetBeginIndex
(
pLogStore
,
5
);
pLogStore
->
syncLogSetBeginIndex
(
pLogStore
,
5
);
...
@@ -329,6 +338,7 @@ void test5() {
...
@@ -329,6 +338,7 @@ void test5() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test5 restart ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test5 restart ----- "
,
pLogStore
);
if
(
gAssert
)
{
if
(
gAssert
)
{
...
@@ -351,6 +361,7 @@ void test6() {
...
@@ -351,6 +361,7 @@ void test6() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test6 ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test6 ----- "
,
pLogStore
);
pLogStore
->
syncLogSetBeginIndex
(
pLogStore
,
5
);
pLogStore
->
syncLogSetBeginIndex
(
pLogStore
,
5
);
...
@@ -401,6 +412,7 @@ void test6() {
...
@@ -401,6 +412,7 @@ void test6() {
init
();
init
();
pLogStore
=
logStoreCreate
(
pSyncNode
);
pLogStore
=
logStoreCreate
(
pSyncNode
);
assert
(
pLogStore
);
assert
(
pLogStore
);
pSyncNode
->
pLogStore
=
pLogStore
;
logStoreLog2
((
char
*
)
"
\n\n\n
test6 restart ----- "
,
pLogStore
);
logStoreLog2
((
char
*
)
"
\n\n\n
test6 restart ----- "
,
pLogStore
);
if
(
gAssert
)
{
if
(
gAssert
)
{
...
...
source/libs/transport/inc/transLog.h
浏览文件 @
980cf46b
...
@@ -24,16 +24,16 @@ extern "C" {
...
@@ -24,16 +24,16 @@ extern "C" {
#include "tlog.h"
#include "tlog.h"
#include "ttrace.h"
#include "ttrace.h"
#define tFatal(...)
do {if (rpcDebugFlag & DEBUG_FATAL){ taosPrintLog("RPC FATAL ", DEBUG_FATAL, rpcDebugFlag, __VA_ARGS__); }} while (0)
#define tFatal(...)
{ if (rpcDebugFlag & DEBUG_FATAL) { taosPrintLog("RPC FATAL ", DEBUG_FATAL, rpcDebugFlag, __VA_ARGS__); }}
#define tError(...)
do { if (rpcDebugFlag & DEBUG_ERROR){ taosPrintLog("RPC ERROR ", DEBUG_ERROR, rpcDebugFlag, __VA_ARGS__); } } while(0)
#define tError(...)
{ if (rpcDebugFlag & DEBUG_ERROR ){ taosPrintLog("RPC ERROR ", DEBUG_ERROR, rpcDebugFlag, __VA_ARGS__); }}
#define tWarn(...)
do { if (rpcDebugFlag & DEBUG_WARN) { taosPrintLog("RPC WARN ", DEBUG_WARN, rpcDebugFlag, __VA_ARGS__); }} while(0)
#define tWarn(...)
{ if (rpcDebugFlag & DEBUG_WARN) { taosPrintLog("RPC WARN ", DEBUG_WARN, rpcDebugFlag, __VA_ARGS__); }}
#define tInfo(...)
do { if (rpcDebugFlag & DEBUG_INFO) { taosPrintLog("RPC ", DEBUG_INFO, rpcDebugFlag, __VA_ARGS__); }} while(0)
#define tInfo(...)
{ if (rpcDebugFlag & DEBUG_INFO) { taosPrintLog("RPC ", DEBUG_INFO, rpcDebugFlag, __VA_ARGS__); }}
#define tDebug(...)
do {if (rpcDebugFlag & DEBUG_DEBUG){ taosPrintLog("RPC ", DEBUG_DEBUG, rpcDebugFlag, __VA_ARGS__); }} while(0)
#define tDebug(...)
{ if (rpcDebugFlag & DEBUG_DEBUG) { taosPrintLog("RPC ", DEBUG_DEBUG, rpcDebugFlag, __VA_ARGS__); }}
#define tTrace(...)
do {if (rpcDebugFlag & DEBUG_TRACE){ taosPrintLog("RPC ", DEBUG_TRACE, rpcDebugFlag, __VA_ARGS__); }} while(0)
#define tTrace(...)
{ if (rpcDebugFlag & DEBUG_TRACE) { taosPrintLog("RPC ", DEBUG_TRACE, rpcDebugFlag, __VA_ARGS__); }}
#define tDump(x, y)
do {if (rpcDebugFlag & DEBUG_DUMP) { taosDumpData((unsigned char *)x, y); } } while(0)
#define tDump(x, y)
{ if (rpcDebugFlag & DEBUG_DUMP) { taosDumpData((unsigned char *)x, y); } }
//#define tTR(param, ...) do { char buf[40] = {0};TRACE_TO_STR(trace, buf);tTrace("TRID: %s "param, buf, __VA_ARGS__);} while(0)
//#define tTR(param, ...) do { char buf[40] = {0};TRACE_TO_STR(trace, buf);tTrace("TRID: %s "param, buf, __VA_ARGS__);} while(0)
#define tGTrace(param, ...)
do { char buf[40] = {0}; TRACE_TO_STR(trace, buf); tTrace(param ", GTID: %s", __VA_ARGS__, buf);} while(0)
#define tGTrace(param, ...)
{ char buf[40] = {0}; TRACE_TO_STR(trace, buf); tTrace(param ", gtid:%s", __VA_ARGS__, buf);}
// clang-format on
// clang-format on
#ifdef __cplusplus
#ifdef __cplusplus
...
...
source/libs/wal/src/walRead.c
浏览文件 @
980cf46b
...
@@ -259,6 +259,12 @@ int32_t walReadWithHandle_s(SWalReadHandle *pRead, int64_t ver, SWalReadHead **p
...
@@ -259,6 +259,12 @@ int32_t walReadWithHandle_s(SWalReadHandle *pRead, int64_t ver, SWalReadHead **p
int32_t
walReadWithHandle
(
SWalReadHandle
*
pRead
,
int64_t
ver
)
{
int32_t
walReadWithHandle
(
SWalReadHandle
*
pRead
,
int64_t
ver
)
{
int64_t
code
;
int64_t
code
;
if
(
pRead
->
pWal
->
vers
.
firstVer
==
-
1
)
{
terrno
=
TSDB_CODE_WAL_LOG_NOT_EXIST
;
return
-
1
;
}
// TODO: check wal life
// TODO: check wal life
if
(
pRead
->
curVersion
!=
ver
)
{
if
(
pRead
->
curVersion
!=
ver
)
{
if
(
walReadSeekVer
(
pRead
,
ver
)
<
0
)
{
if
(
walReadSeekVer
(
pRead
,
ver
)
<
0
)
{
...
...
source/util/src/thash.c
浏览文件 @
980cf46b
...
@@ -31,12 +31,12 @@
...
@@ -31,12 +31,12 @@
#define GET_HASH_NODE_DATA(_n) ((char *)(_n) + sizeof(SHashNode))
#define GET_HASH_NODE_DATA(_n) ((char *)(_n) + sizeof(SHashNode))
#define GET_HASH_PNODE(_n) ((SHashNode *)((char *)(_n) - sizeof(SHashNode)))
#define GET_HASH_PNODE(_n) ((SHashNode *)((char *)(_n) - sizeof(SHashNode)))
#define FREE_HASH_NODE(_fp, _n) \
#define FREE_HASH_NODE(_fp, _n)
\
do { \
do {
\
if (_fp != NULL) { \
if (_fp != NULL) {
\
(_fp)(
_n);
\
(_fp)(
GET_HASH_NODE_DATA(_n));
\
} \
}
\
taosMemoryFreeClear(_n); \
taosMemoryFreeClear(_n);
\
} while (0);
} while (0);
struct
SHashNode
{
struct
SHashNode
{
...
@@ -56,7 +56,7 @@ typedef struct SHashEntry {
...
@@ -56,7 +56,7 @@ typedef struct SHashEntry {
}
SHashEntry
;
}
SHashEntry
;
struct
SHashObj
{
struct
SHashObj
{
SHashEntry
**
hashList
;
SHashEntry
**
hashList
;
size_t
capacity
;
// number of slots
size_t
capacity
;
// number of slots
int64_t
size
;
// number of elements in hash table
int64_t
size
;
// number of elements in hash table
_hash_fn_t
hashFp
;
// hash function
_hash_fn_t
hashFp
;
// hash function
...
@@ -65,7 +65,7 @@ struct SHashObj {
...
@@ -65,7 +65,7 @@ struct SHashObj {
SRWLatch
lock
;
// read-write spin lock
SRWLatch
lock
;
// read-write spin lock
SHashLockTypeE
type
;
// lock type
SHashLockTypeE
type
;
// lock type
bool
enableUpdate
;
// enable update
bool
enableUpdate
;
// enable update
SArray
*
pMemBlock
;
// memory block allocated for SHashEntry
SArray
*
pMemBlock
;
// memory block allocated for SHashEntry
_hash_before_fn_t
callbackFp
;
// function invoked before return the value to caller
_hash_before_fn_t
callbackFp
;
// function invoked before return the value to caller
};
};
...
@@ -633,7 +633,7 @@ void taosHashTableResize(SHashObj *pHashObj) {
...
@@ -633,7 +633,7 @@ void taosHashTableResize(SHashObj *pHashObj) {
}
}
int64_t
st
=
taosGetTimestampUs
();
int64_t
st
=
taosGetTimestampUs
();
void
*
pNewEntryList
=
taosMemoryRealloc
(
pHashObj
->
hashList
,
sizeof
(
void
*
)
*
newCapacity
);
void
*
pNewEntryList
=
taosMemoryRealloc
(
pHashObj
->
hashList
,
sizeof
(
void
*
)
*
newCapacity
);
if
(
pNewEntryList
==
NULL
)
{
if
(
pNewEntryList
==
NULL
)
{
// uDebug("cache resize failed due to out of memory, capacity remain:%zu", pHashObj->capacity);
// uDebug("cache resize failed due to out of memory, capacity remain:%zu", pHashObj->capacity);
return
;
return
;
...
@@ -642,7 +642,7 @@ void taosHashTableResize(SHashObj *pHashObj) {
...
@@ -642,7 +642,7 @@ void taosHashTableResize(SHashObj *pHashObj) {
pHashObj
->
hashList
=
pNewEntryList
;
pHashObj
->
hashList
=
pNewEntryList
;
size_t
inc
=
newCapacity
-
pHashObj
->
capacity
;
size_t
inc
=
newCapacity
-
pHashObj
->
capacity
;
void
*
p
=
taosMemoryCalloc
(
inc
,
sizeof
(
SHashEntry
));
void
*
p
=
taosMemoryCalloc
(
inc
,
sizeof
(
SHashEntry
));
for
(
int32_t
i
=
0
;
i
<
inc
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
inc
;
++
i
)
{
pHashObj
->
hashList
[
i
+
pHashObj
->
capacity
]
=
(
void
*
)((
char
*
)
p
+
i
*
sizeof
(
SHashEntry
));
pHashObj
->
hashList
[
i
+
pHashObj
->
capacity
]
=
(
void
*
)((
char
*
)
p
+
i
*
sizeof
(
SHashEntry
));
...
@@ -653,9 +653,9 @@ void taosHashTableResize(SHashObj *pHashObj) {
...
@@ -653,9 +653,9 @@ void taosHashTableResize(SHashObj *pHashObj) {
pHashObj
->
capacity
=
newCapacity
;
pHashObj
->
capacity
=
newCapacity
;
for
(
int32_t
idx
=
0
;
idx
<
pHashObj
->
capacity
;
++
idx
)
{
for
(
int32_t
idx
=
0
;
idx
<
pHashObj
->
capacity
;
++
idx
)
{
SHashEntry
*
pe
=
pHashObj
->
hashList
[
idx
];
SHashEntry
*
pe
=
pHashObj
->
hashList
[
idx
];
SHashNode
*
pNode
;
SHashNode
*
pNode
;
SHashNode
*
pNext
;
SHashNode
*
pNext
;
SHashNode
*
pPrev
=
NULL
;
SHashNode
*
pPrev
=
NULL
;
if
(
pe
->
num
==
0
)
{
if
(
pe
->
num
==
0
)
{
assert
(
pe
->
next
==
NULL
);
assert
(
pe
->
next
==
NULL
);
...
...
tests/pytest/util/sqlset.py
0 → 100644
浏览文件 @
980cf46b
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
from
util.sql
import
tdSql
class
TDSetSql
:
def
init
(
self
,
conn
,
logSql
):
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
self
.
stbname
=
'stb'
def
set_create_normaltable_sql
(
self
,
ntbname
=
'ntb'
,
column_dict
=
{
'ts'
:
'timestamp'
,
'col1'
:
'tinyint'
,
'col2'
:
'smallint'
,
'col3'
:
'int'
,
'col4'
:
'bigint'
,
'col5'
:
'unsigned int'
,
'col6'
:
'unsigned tinyint'
,
'col7'
:
'unsigned smallint'
,
'col8'
:
'unsigned int'
,
'col9'
:
'unsigned bigint'
,
'col10'
:
'float'
,
'col11'
:
'double'
,
'col12'
:
'bool'
,
'col13'
:
'binary(20)'
,
'col14'
:
'nchar(20)'
}):
column_sql
=
''
for
k
,
v
in
column_dict
.
items
():
column_sql
+=
f
"
{
k
}
{
v
}
,"
create_ntb_sql
=
f
'create table
{
ntbname
}
(
{
column_sql
[:
-
1
]
}
)'
return
create_ntb_sql
def
set_create_stable_sql
(
self
,
stbname
=
'stb'
,
column_dict
=
{
'ts'
:
'timestamp'
,
'col1'
:
'tinyint'
,
'col2'
:
'smallint'
,
'col3'
:
'int'
,
'col4'
:
'bigint'
,
'col5'
:
'unsigned int'
,
'col6'
:
'unsigned tinyint'
,
'col7'
:
'unsigned smallint'
,
'col8'
:
'unsigned int'
,
'col9'
:
'unsigned bigint'
,
'col10'
:
'float'
,
'col11'
:
'double'
,
'col12'
:
'bool'
,
'col13'
:
'binary(20)'
,
'col14'
:
'nchar(20)'
},
tag_dict
=
{
'ts_tag'
:
'timestamp'
,
't1'
:
'tinyint'
,
't2'
:
'smallint'
,
't3'
:
'int'
,
't4'
:
'bigint'
,
't5'
:
'unsigned int'
,
't6'
:
'unsigned tinyint'
,
't7'
:
'unsigned smallint'
,
't8'
:
'unsigned int'
,
't9'
:
'unsigned bigint'
,
't10'
:
'float'
,
't11'
:
'double'
,
't12'
:
'bool'
,
't13'
:
'binary(20)'
,
't14'
:
'nchar(20)'
}):
column_sql
=
''
tag_sql
=
''
for
k
,
v
in
column_dict
.
items
():
column_sql
+=
f
"
{
k
}
{
v
}
,"
for
k
,
v
in
tag_dict
.
items
():
tag_sql
+=
f
"
{
k
}
{
v
}
,"
create_stb_sql
=
f
'create table
{
stbname
}
(
{
column_sql
[:
-
1
]
}
) tags(
{
tag_sql
[:
-
1
]
}
)'
return
create_stb_sql
\ No newline at end of file
tests/system-test/2-query/top.py
浏览文件 @
980cf46b
...
@@ -11,103 +11,159 @@
...
@@ -11,103 +11,159 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import
random
import
string
import
string
from
util.common
import
*
from
util.common
import
*
from
util.log
import
*
from
util.log
import
*
from
util.cases
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.sql
import
*
from
util.sqlset
import
*
class
TDTestCase
:
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
tdSql
.
init
(
conn
.
cursor
())
self
.
setsql
=
TDSetSql
()
self
.
ntbname
=
'ntb'
self
.
rowNum
=
10
self
.
rowNum
=
10
self
.
tbnum
=
20
self
.
tbnum
=
20
self
.
ts
=
1537146000000
self
.
ts
=
1537146000000
self
.
binary_str
=
'taosdata'
self
.
binary_str
=
'taosdata'
self
.
nchar_str
=
'涛思数据'
self
.
nchar_str
=
'涛思数据'
def
top_check_base
(
self
):
self
.
column_dict
=
{
tdSql
.
prepare
()
'ts'
:
'timestamp'
,
tdSql
.
execute
(
'''create table stb(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 tinyint unsigned, col6 smallint unsigned,
'col1'
:
'tinyint'
,
col7 int unsigned, col8 bigint unsigned, col9 float, col10 double, col11 bool, col12 binary(20), col13 nchar(20)) tags(loc nchar(20))'''
)
'col2'
:
'smallint'
,
tdSql
.
execute
(
"create table stb_1 using stb tags('beijing')"
)
'col3'
:
'int'
,
for
i
in
range
(
self
.
rowNum
):
'col4'
:
'bigint'
,
tdSql
.
execute
(
f
"insert into stb_1 values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '
{
self
.
binary_str
}
%d', '
{
self
.
nchar_str
}
%d')"
'col5'
:
'tinyint unsigned'
,
%
(
self
.
ts
+
i
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
0.1
,
i
+
0.1
,
i
%
2
,
i
+
1
,
i
+
1
))
'col6'
:
'smallint unsigned'
,
column_list
=
[
'col1'
,
'col2'
,
'col3'
,
'col4'
,
'col5'
,
'col6'
,
'col7'
,
'col8'
]
'col7'
:
'int unsigned'
,
error_column_list
=
[
'col11'
,
'col12'
,
'col13'
]
'col8'
:
'bigint unsigned'
,
error_param_list
=
[
0
,
101
]
'col9'
:
'float'
,
for
i
in
column_list
:
'col10'
:
'double'
,
tdSql
.
query
(
f
'select top(
{
i
}
,2) from stb_1'
)
'col11'
:
'bool'
,
tdSql
.
checkRows
(
2
)
'col12'
:
'binary(20)'
,
tdSql
.
checkEqual
(
tdSql
.
queryResult
,[(
9
,),(
10
,)])
'col13'
:
'nchar(20)'
for
j
in
error_param_list
:
}
tdSql
.
error
(
f
'select top(
{
i
}
,
{
j
}
) from stb_1'
)
for
i
in
error_column_list
:
self
.
param_list
=
[
1
,
100
]
tdSql
.
error
(
f
'select top(
{
i
}
,10) from stb_1'
)
tdSql
.
query
(
"select ts,top(col1, 2),ts from stb_1 group by tbname"
)
def
insert_data
(
self
,
column_dict
,
tbname
,
row_num
):
tdSql
.
checkRows
(
2
)
sql
=
''
tdSql
.
query
(
'select top(col2,1) from stb_1 interval(1y) order by col2'
)
for
k
,
v
in
column_dict
.
items
():
tdSql
.
checkData
(
0
,
0
,
10
)
if
v
.
lower
()
==
'timestamp'
or
v
.
lower
()
==
'tinyint'
or
v
.
lower
()
==
'smallint'
or
v
.
lower
()
==
'int'
or
v
.
lower
()
==
'bigint'
or
\
tdSql
.
error
(
"select * from stb_1 where top(col2,1)=1"
)
v
.
lower
()
==
'tinyint unsigned'
or
v
.
lower
()
==
'smallint unsigned'
or
v
.
lower
()
==
'int unsigned'
or
v
.
lower
()
==
'bigint unsigned'
or
v
.
lower
()
==
'bool'
:
tdSql
.
execute
(
'drop database db'
)
sql
+=
'%d,'
def
top_check_stb_distribute
(
self
):
elif
v
.
lower
()
==
'float'
or
v
.
lower
()
==
'double'
:
# prepare data for vgroup 4
sql
+=
'%f,'
elif
'binary'
in
v
.
lower
():
sql
+=
f
'"
{
self
.
binary_str
}
%d",'
elif
'nchar'
in
v
.
lower
():
sql
+=
f
'"
{
self
.
nchar_str
}
%d",'
insert_sql
=
f
'insert into
{
tbname
}
values(
{
sql
[:
-
1
]
}
)'
for
i
in
range
(
row_num
):
insert_list
=
[]
for
k
,
v
in
column_dict
.
items
():
if
v
.
lower
()
in
[
'tinyint'
,
'smallint'
,
'int'
,
'bigint'
,
'tinyint unsigned'
,
'smallint unsigned'
,
'int unsigned'
,
'bigint unsigned'
]
or
\
'binary'
in
v
.
lower
()
or
'nchar'
in
v
.
lower
():
insert_list
.
append
(
1
+
i
)
elif
v
.
lower
()
==
'float'
or
v
.
lower
()
==
'double'
:
insert_list
.
append
(
0.1
+
i
)
elif
v
.
lower
()
==
'bool'
:
insert_list
.
append
(
i
%
2
)
elif
v
.
lower
()
==
'timestamp'
:
insert_list
.
append
(
self
.
ts
+
i
)
tdSql
.
execute
(
insert_sql
%
(
tuple
(
insert_list
)))
pass
def
top_check_data
(
self
,
tbname
,
tb_type
):
new_column_dict
=
{}
for
param
in
self
.
param_list
:
for
k
,
v
in
self
.
column_dict
.
items
():
if
v
.
lower
()
in
[
'tinyint'
,
'smallint'
,
'int'
,
'bigint'
,
'tinyint unsigned'
,
'smallint unsigned'
,
'int unsigned'
,
'bigint unsigned'
]:
tdSql
.
query
(
f
'select top(
{
k
}
,
{
param
}
) from
{
tbname
}
'
)
if
param
>=
self
.
rowNum
:
if
tb_type
in
[
'normal_table'
,
'child_table'
]:
tdSql
.
checkRows
(
self
.
rowNum
)
values_list
=
[]
for
i
in
range
(
self
.
rowNum
):
tp
=
(
self
.
rowNum
-
i
,)
values_list
.
insert
(
0
,
tp
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
,
values_list
)
elif
tb_type
==
'stable'
:
tdSql
.
checkRows
(
param
)
elif
param
<
self
.
rowNum
:
if
tb_type
in
[
'normal_table'
,
'child_table'
]:
tdSql
.
checkRows
(
param
)
values_list
=
[]
for
i
in
range
(
param
):
tp
=
(
self
.
rowNum
-
i
,)
values_list
.
insert
(
0
,
tp
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
,
values_list
)
elif
tb_type
==
'stable'
:
tdSql
.
checkRows
(
param
)
for
i
in
[
self
.
param_list
[
0
]
-
1
,
self
.
param_list
[
-
1
]
+
1
]:
tdSql
.
error
(
f
'select top(
{
k
}
,
{
i
}
) from
{
tbname
}
'
)
new_column_dict
.
update
({
k
:
v
})
elif
v
.
lower
()
==
'bool'
or
'binary'
in
v
.
lower
()
or
'nchar'
in
v
.
lower
():
tdSql
.
error
(
f
'select top(
{
k
}
,
{
param
}
) from
{
tbname
}
'
)
tdSql
.
error
(
f
'select * from
{
tbname
}
where top(
{
k
}
,
{
param
}
)=1'
)
for
key
in
new_column_dict
.
keys
():
for
k
in
self
.
column_dict
.
keys
():
if
key
==
k
:
continue
else
:
tdSql
.
query
(
f
'select top(
{
key
}
,2),
{
k
}
from
{
tbname
}
group by tbname'
)
if
tb_type
==
'normal_table'
or
tb_type
==
'child_table'
:
tdSql
.
checkRows
(
2
)
else
:
tdSql
.
checkRows
(
2
*
self
.
tbnum
)
def
top_check_stb
(
self
):
dbname
=
tdCom
.
getLongName
(
10
,
"letters"
)
dbname
=
tdCom
.
getLongName
(
10
,
"letters"
)
stbname
=
tdCom
.
getLongName
(
5
,
"letters"
)
stbname
=
tdCom
.
getLongName
(
5
,
"letters"
)
tag_dict
=
{
't0'
:
'int'
}
tag_values
=
[
f
'1'
]
tdSql
.
execute
(
f
"create database if not exists
{
dbname
}
vgroups 2"
)
tdSql
.
execute
(
f
"create database if not exists
{
dbname
}
vgroups 2"
)
tdSql
.
execute
(
f
'use
{
dbname
}
'
)
tdSql
.
execute
(
f
'use
{
dbname
}
'
)
# build 20 child tables,every table insert 10 rows
tdSql
.
execute
(
self
.
setsql
.
set_create_stable_sql
(
stbname
,
self
.
column_dict
,
tag_dict
))
tdSql
.
execute
(
f
'''create table
{
stbname
}
(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 tinyint unsigned, col6 smallint unsigned,
col7 int unsigned, col8 bigint unsigned, col9 float, col10 double, col11 bool, col12 binary(20), col13 nchar(20)) tags(loc nchar(20))'''
)
for
i
in
range
(
self
.
tbnum
):
for
i
in
range
(
self
.
tbnum
):
tdSql
.
execute
(
f
"create table
{
stbname
}
_
{
i
}
using
{
stbname
}
tags('beijing')"
)
tdSql
.
execute
(
f
"create table
{
stbname
}
_
{
i
}
using
{
stbname
}
tags(
{
tag_values
[
0
]
}
)"
)
tdSql
.
execute
(
f
"insert into
{
stbname
}
_
{
i
}
(ts) values(%d)"
%
(
self
.
ts
-
1
-
i
))
tdSql
.
execute
(
self
.
insert_data
(
self
.
column_dict
,
f
'
{
stbname
}
_
{
i
}
'
,
self
.
rowNum
))
column_list
=
[
'col1'
,
'col2'
,
'col3'
,
'col4'
,
'col5'
,
'col6'
,
'col7'
,
'col8'
]
for
i
in
[
f
'
{
stbname
}
'
,
f
'
{
dbname
}
.
{
stbname
}
'
]:
for
j
in
column_list
:
tdSql
.
query
(
f
"select top(
{
j
}
,1) from
{
i
}
"
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
'show tables'
)
tdSql
.
query
(
'show tables'
)
vgroup_list
=
[]
vgroup_list
=
[]
for
i
in
range
(
len
(
tdSql
.
queryResult
)):
for
i
in
range
(
len
(
tdSql
.
queryResult
)):
vgroup_list
.
append
(
tdSql
.
queryResult
[
i
][
6
])
vgroup_list
.
append
(
tdSql
.
queryResult
[
i
][
6
])
vgroup_list_set
=
set
(
vgroup_list
)
vgroup_list_set
=
set
(
vgroup_list
)
for
i
in
vgroup_list_set
:
for
i
in
vgroup_list_set
:
vgroups_num
=
vgroup_list
.
count
(
i
)
vgroups_num
=
vgroup_list
.
count
(
i
)
if
vgroups_num
>=
2
:
if
vgroups_num
>=
2
:
tdLog
.
info
(
f
'This scene with
{
vgroups_num
}
vgroups is ok!'
)
tdLog
.
info
(
f
'This scene with
{
vgroups_num
}
vgroups is ok!'
)
continue
else
:
else
:
tdLog
.
exit
(
f
'This scene does not meet the requirements with
{
vgroups_num
}
vgroup!
\n
'
)
tdLog
.
exit
(
for
i
in
range
(
self
.
rowNum
):
'This scene does not meet the requirements with {vgroups_num} vgroup!
\n
'
)
for
j
in
range
(
self
.
tbnum
):
for
i
in
range
(
self
.
tbnum
):
tdSql
.
execute
(
f
"insert into
{
stbname
}
_
{
j
}
values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '
{
self
.
binary_str
}
%d', '
{
self
.
nchar_str
}
%d')"
self
.
top_check_data
(
f
'
{
stbname
}
_
{
i
}
'
,
'child_table'
)
%
(
self
.
ts
+
i
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
1
,
i
+
0.1
,
i
+
0.1
,
i
%
2
,
i
+
1
,
i
+
1
))
self
.
top_check_data
(
stbname
,
'stable'
)
tdSql
.
execute
(
f
'drop database
{
dbname
}
'
)
error_column_list
=
[
'col11'
,
'col12'
,
'col13'
]
error_param_list
=
[
0
,
101
]
def
top_check_ntb
(
self
):
for
i
in
column_list
:
tdSql
.
prepare
()
tdSql
.
query
(
f
'select top(
{
i
}
,2) from
{
stbname
}
'
)
tdSql
.
execute
(
self
.
setsql
.
set_create_normaltable_sql
(
self
.
ntbname
,
self
.
column_dict
))
tdSql
.
checkRows
(
2
)
self
.
insert_data
(
self
.
column_dict
,
self
.
ntbname
,
self
.
rowNum
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
,[(
10
,),(
10
,)])
self
.
top_check_data
(
self
.
ntbname
,
'normal_table'
)
for
j
in
error_param_list
:
tdSql
.
execute
(
'drop database db'
)
tdSql
.
error
(
f
'select top(
{
i
}
,
{
j
}
) from
{
stbname
}
'
)
for
i
in
error_column_list
:
tdSql
.
error
(
f
'select top(
{
i
}
,10) from
{
stbname
}
'
)
tdSql
.
query
(
f
"select ts,top(col1, 2),ts from
{
stbname
}
group by tbname"
)
tdSql
.
checkRows
(
2
*
self
.
tbnum
)
tdSql
.
query
(
f
'select top(col2,1) from
{
stbname
}
interval(1y) order by col2'
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
error
(
f
"select * from
{
stbname
}
where top(col2,1)=1"
)
def
run
(
self
):
def
run
(
self
):
self
.
top_check_base
()
self
.
top_check_ntb
()
self
.
top_check_stb_distribute
()
self
.
top_check_stb
()
def
stop
(
self
):
def
stop
(
self
):
tdSql
.
close
()
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
...
...
tests/system-test/2-query/twa.py
0 → 100644
浏览文件 @
980cf46b
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
import
numpy
as
np
import
random
,
os
,
sys
import
platform
import
math
class
TDTestCase
:
updatecfgDict
=
{
'debugFlag'
:
143
,
"cDebugFlag"
:
143
,
"uDebugFlag"
:
143
,
"rpcDebugFlag"
:
143
,
"tmrDebugFlag"
:
143
,
"jniDebugFlag"
:
143
,
"simDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"dDebugFlag"
:
143
,
"vDebugFlag"
:
143
,
"mDebugFlag"
:
143
,
"qDebugFlag"
:
143
,
"wDebugFlag"
:
143
,
"sDebugFlag"
:
143
,
"tsdbDebugFlag"
:
143
,
"tqDebugFlag"
:
143
,
"fsDebugFlag"
:
143
,
"fnDebugFlag"
:
143
,
"maxTablesPerVnode"
:
2
,
"minTablesPerVnode"
:
2
,
"tableIncStepPerVnode"
:
2
}
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
self
.
vnode_disbutes
=
None
self
.
ts
=
1537146000000
self
.
tb_nums
=
20
self
.
row_nums
=
100
self
.
time_step
=
1000
def
prepare_datas_of_distribute
(
self
):
# prepate datas for 20 tables distributed at different vgroups
tdSql
.
execute
(
"create database if not exists testdb keep 3650 duration 1000 vgroups 5"
)
tdSql
.
execute
(
" use testdb "
)
tdSql
.
execute
(
'''create table stb1
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
'''
)
for
i
in
range
(
self
.
tb_nums
):
tdSql
.
execute
(
f
'create table ct
{
i
+
1
}
using stb1 tags ( now(),
{
1
*
i
}
,
{
11111
*
i
}
,
{
111
*
i
}
,
{
11
*
i
}
,
{
1.11
*
i
}
,
{
11.11
*
i
}
,
{
i
%
2
}
, "binary
{
i
}
", "nchar
{
i
}
" )'
)
ts
=
self
.
ts
for
j
in
range
(
self
.
row_nums
):
ts
+=
j
*
self
.
time_step
tdSql
.
execute
(
f
"insert into ct
{
i
+
1
}
values(
{
ts
}
, 1, 11111, 111, 1, 1.11, 11.11, 2, 'binary
{
j
}
', 'nchar
{
j
}
', now()+
{
1
*
j
}
a )"
)
tdSql
.
execute
(
"insert into ct1 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct1 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdSql
.
execute
(
"insert into ct1 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) "
)
tdLog
.
info
(
" prepare data for distributed_aggregate done! "
)
def
twa_support_types
(
self
):
tdSql
.
query
(
"desc stb1 "
)
schema_list
=
tdSql
.
queryResult
for
col_type
in
schema_list
:
if
col_type
[
1
]
in
[
"TINYINT"
,
"SMALLINT"
,
"BIGINT"
,
"INT"
,
"FLOAT"
,
"DOUBLE"
]:
tdSql
.
query
(
f
" select twa(
{
col_type
[
0
]
}
) from stb1 partition by tbname "
)
else
:
tdSql
.
error
(
f
" select twa(
{
col_type
[
0
]
}
) from stb1 partition by tbname "
)
def
check_distribute_datas
(
self
):
# get vgroup_ids of all
tdSql
.
query
(
"show vgroups "
)
vgroups
=
tdSql
.
queryResult
vnode_tables
=
{}
for
vgroup_id
in
vgroups
:
vnode_tables
[
vgroup_id
[
0
]]
=
[]
# check sub_table of per vnode ,make sure sub_table has been distributed
tdSql
.
query
(
"show tables like 'ct%'"
)
table_names
=
tdSql
.
queryResult
tablenames
=
[]
for
table_name
in
table_names
:
vnode_tables
[
table_name
[
6
]].
append
(
table_name
[
0
])
self
.
vnode_disbutes
=
vnode_tables
count
=
0
for
k
,
v
in
vnode_tables
.
items
():
if
len
(
v
)
>=
2
:
count
+=
1
if
count
<
2
:
tdLog
.
exit
(
" the datas of all not satisfy sub_table has been distributed "
)
def
distribute_twa_query
(
self
):
# basic filter
tdSql
.
query
(
" select twa(c1) from ct1 "
)
tdSql
.
checkData
(
0
,
0
,
1.000000000
)
tdSql
.
query
(
" select twa(c1) from stb1 partition by tbname "
)
tdSql
.
checkRows
(
self
.
tb_nums
)
tdSql
.
checkData
(
0
,
0
,
1.000000000
)
tdSql
.
query
(
" select twa(c2) from stb1 group by tbname "
)
tdSql
.
checkRows
(
self
.
tb_nums
)
tdSql
.
checkData
(
0
,
0
,
11111.000000000
)
tdSql
.
query
(
"select twa(c1+c2) from stb1 partition by tbname "
)
tdSql
.
checkData
(
0
,
0
,
11112.000000000
)
tdSql
.
query
(
"select twa(c1) from stb1 partition by t1"
)
tdSql
.
checkRows
(
self
.
tb_nums
)
tdSql
.
checkData
(
0
,
0
,
1.000000000
)
# union all
tdSql
.
query
(
" select twa(c1) from stb1 partition by tbname union all select twa(c1) from stb1 partition by tbname "
)
tdSql
.
checkRows
(
40
)
tdSql
.
checkData
(
0
,
0
,
1.000000000
)
# join
tdSql
.
execute
(
" create database if not exists db "
)
tdSql
.
execute
(
" use db "
)
tdSql
.
execute
(
" create stable st (ts timestamp , c1 int ,c2 float) tags(t1 int) "
)
tdSql
.
execute
(
" create table tb1 using st tags(1) "
)
tdSql
.
execute
(
" create table tb2 using st tags(2) "
)
for
i
in
range
(
10
):
ts
=
i
*
10
+
self
.
ts
tdSql
.
execute
(
f
" insert into tb1 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
execute
(
f
" insert into tb2 values(
{
ts
}
,
{
i
}
,
{
i
}
.0)"
)
tdSql
.
query
(
" select twa(tb1.c1), twa(tb2.c2) from tb1, tb2 where tb1.ts=tb2.ts "
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
4.500000000
)
tdSql
.
checkData
(
0
,
1
,
4.500000000
)
# group by
tdSql
.
execute
(
" use testdb "
)
# mixup with other functions
tdSql
.
query
(
" select twa(c1),twa(c2),max(c1),elapsed(ts) from stb1 "
)
tdSql
.
checkData
(
0
,
0
,
1.000000000
)
tdSql
.
checkData
(
0
,
1
,
11111.000000000
)
tdSql
.
checkData
(
0
,
2
,
1
)
def
run
(
self
):
self
.
prepare_datas_of_distribute
()
self
.
check_distribute_datas
()
self
.
twa_support_types
()
self
.
distribute_twa_query
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/system-test/fulltest.sh
浏览文件 @
980cf46b
...
@@ -108,6 +108,7 @@ python3 ./test.py -f 2-query/distribute_agg_spread.py
...
@@ -108,6 +108,7 @@ python3 ./test.py -f 2-query/distribute_agg_spread.py
python3 ./test.py
-f
2-query/distribute_agg_apercentile.py
python3 ./test.py
-f
2-query/distribute_agg_apercentile.py
python3 ./test.py
-f
2-query/distribute_agg_avg.py
python3 ./test.py
-f
2-query/distribute_agg_avg.py
python3 ./test.py
-f
2-query/distribute_agg_stddev.py
python3 ./test.py
-f
2-query/distribute_agg_stddev.py
python3 ./test.py
-f
2-query/twa.py
python3 ./test.py
-f
6-cluster/5dnode1mnode.py
python3 ./test.py
-f
6-cluster/5dnode1mnode.py
python3 ./test.py
-f
6-cluster/5dnode2mnode.py
python3 ./test.py
-f
6-cluster/5dnode2mnode.py
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录