Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
4d789b08
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
4d789b08
编写于
11月 24, 2020
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
TD-2211
上级
99815378
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
56 addition
and
21 deletion
+56
-21
src/sync/inc/syncInt.h
src/sync/inc/syncInt.h
+12
-7
src/sync/src/syncMain.c
src/sync/src/syncMain.c
+7
-6
src/sync/src/syncRestore.c
src/sync/src/syncRestore.c
+15
-5
src/sync/src/syncRetrieve.c
src/sync/src/syncRetrieve.c
+19
-3
src/sync/src/taosTcpPool.c
src/sync/src/taosTcpPool.c
+3
-0
未找到文件。
src/sync/inc/syncInt.h
浏览文件 @
4d789b08
...
...
@@ -28,13 +28,14 @@ extern "C" {
#define sTrace(...) { if (sDebugFlag & DEBUG_TRACE) { taosPrintLog("SYN ", sDebugFlag, __VA_ARGS__); }}
typedef
enum
{
TAOS_SMSG_SYNC_DATA
=
1
,
TAOS_SMSG_FORWARD
=
2
,
TAOS_SMSG_FORWARD_RSP
=
3
,
TAOS_SMSG_SYNC_REQ
=
4
,
TAOS_SMSG_SYNC_RSP
=
5
,
TAOS_SMSG_SYNC_MUST
=
6
,
TAOS_SMSG_STATUS
=
7
TAOS_SMSG_SYNC_DATA
=
1
,
TAOS_SMSG_FORWARD
=
2
,
TAOS_SMSG_FORWARD_RSP
=
3
,
TAOS_SMSG_SYNC_REQ
=
4
,
TAOS_SMSG_SYNC_RSP
=
5
,
TAOS_SMSG_SYNC_MUST
=
6
,
TAOS_SMSG_STATUS
=
7
,
TAOS_SMSG_SYNC_DATA_RSP
=
8
,
}
ESyncMsgType
;
#define SYNC_MAX_SIZE (TSDB_MAX_WAL_SIZE + sizeof(SWalHead) + sizeof(SSyncHead) + 16)
...
...
@@ -65,6 +66,10 @@ typedef struct {
int32_t
sourceId
;
// only for arbitrator
}
SFirstPkt
;
typedef
struct
{
int8_t
sync
;
}
SFirstPktRsp
;
typedef
struct
{
int8_t
role
;
uint64_t
version
;
...
...
src/sync/src/syncMain.c
浏览文件 @
4d789b08
...
...
@@ -1313,6 +1313,8 @@ static int32_t syncForwardToPeerImpl(SSyncNode *pNode, void *data, void *mhandle
}
// always update version
sTrace
(
"vgId:%d, forward to peer, replica:%d role:%s qtype:%s hver:%"
PRIu64
,
pNode
->
vgId
,
pNode
->
replica
,
syncRole
[
nodeRole
],
qtypeStr
[
qtype
],
pWalHead
->
version
);
nodeVersion
=
pWalHead
->
version
;
if
(
pNode
->
replica
==
1
||
nodeRole
!=
TAOS_SYNC_ROLE_MASTER
)
return
0
;
...
...
@@ -1320,10 +1322,7 @@ static int32_t syncForwardToPeerImpl(SSyncNode *pNode, void *data, void *mhandle
// only pkt from RPC or CQ can be forwarded
if
(
qtype
!=
TAOS_QTYPE_RPC
&&
qtype
!=
TAOS_QTYPE_CQ
)
return
0
;
sTrace
(
"vgId:%d, forward to peer, replica:%d role:%s qtype:%s hver:%"
PRIu64
,
pNode
->
vgId
,
pNode
->
replica
,
syncRole
[
nodeRole
],
qtypeStr
[
qtype
],
pWalHead
->
version
);
// a hacker way to improve the performance
// a hacker way to improve the performance
pSyncHead
=
(
SSyncHead
*
)(((
char
*
)
pWalHead
)
-
sizeof
(
SSyncHead
));
pSyncHead
->
type
=
TAOS_SMSG_FORWARD
;
pSyncHead
->
pversion
=
0
;
...
...
@@ -1344,9 +1343,11 @@ static int32_t syncForwardToPeerImpl(SSyncNode *pNode, void *data, void *mhandle
int32_t
retLen
=
taosWriteMsg
(
pPeer
->
peerFd
,
pSyncHead
,
fwdLen
);
if
(
retLen
==
fwdLen
)
{
sTrace
(
"%s, forward is sent, hver:%"
PRIu64
" contLen:%d"
,
pPeer
->
id
,
pWalHead
->
version
,
pWalHead
->
len
);
sTrace
(
"%s, forward is sent, role:%s sstatus:%s hver:%"
PRIu64
" contLen:%d"
,
pPeer
->
id
,
pPeer
->
role
,
syncStatus
[
pPeer
->
sstatus
],
pWalHead
->
version
,
pWalHead
->
len
);
}
else
{
sError
(
"%s, failed to forward, hver:%"
PRIu64
" retLen:%d"
,
pPeer
->
id
,
pWalHead
->
version
,
retLen
);
sError
(
"%s, failed to forward, role:%s sstatus:%s hver:%"
PRIu64
" retLen:%d"
,
pPeer
->
id
,
pPeer
->
role
,
syncStatus
[
pPeer
->
sstatus
],
pWalHead
->
version
,
retLen
);
syncRestartConnection
(
pPeer
);
}
}
...
...
src/sync/src/syncRestore.c
浏览文件 @
4d789b08
...
...
@@ -231,10 +231,13 @@ static int32_t syncProcessBufferedFwd(SSyncPeer *pPeer) {
int32_t
syncSaveIntoBuffer
(
SSyncPeer
*
pPeer
,
SWalHead
*
pHead
)
{
SSyncNode
*
pNode
=
pPeer
->
pSyncNode
;
SRecvBuffer
*
pRecv
=
pNode
->
pRecv
;
if
(
pRecv
==
NULL
)
return
-
1
;
int32_t
len
=
pHead
->
len
+
sizeof
(
SWalHead
);
if
(
pRecv
==
NULL
)
{
sError
(
"%s, recv buffer is not create yet"
,
pPeer
->
id
);
return
-
1
;
}
if
(
pRecv
->
bufferSize
-
(
pRecv
->
offset
-
pRecv
->
buffer
)
>=
len
)
{
memcpy
(
pRecv
->
offset
,
pHead
,
len
);
pRecv
->
offset
+=
len
;
...
...
@@ -282,7 +285,14 @@ static int32_t syncRestoreDataStepByStep(SSyncPeer *pPeer) {
nodeSStatus
=
TAOS_SYNC_STATUS_FILE
;
uint64_t
fversion
=
0
;
sDebug
(
"%s, start to restore file, set sstatus:%s"
,
pPeer
->
id
,
syncStatus
[
nodeSStatus
]);
sInfo
(
"%s, start to restore, sstatus:%s"
,
pPeer
->
id
,
syncStatus
[
pPeer
->
sstatus
]);
SFirstPktRsp
firstPktRsp
=
{.
sync
=
1
};
if
(
taosWriteMsg
(
pPeer
->
syncFd
,
&
firstPktRsp
,
sizeof
(
SFirstPktRsp
))
<
0
)
{
sError
(
"%s, failed to send sync firstPkt rsp since %s"
,
pPeer
->
id
,
strerror
(
errno
));
return
-
1
;
}
sInfo
(
"%s, start to restore file, set sstatus:%s"
,
pPeer
->
id
,
syncStatus
[
nodeSStatus
]);
int32_t
code
=
syncRestoreFile
(
pPeer
,
&
fversion
);
if
(
code
<
0
)
{
sError
(
"%s, failed to restore file"
,
pPeer
->
id
);
...
...
@@ -299,14 +309,14 @@ static int32_t syncRestoreDataStepByStep(SSyncPeer *pPeer) {
nodeVersion
=
fversion
;
s
Debug
(
"%s, start to restore wal"
,
pPeer
->
id
);
s
Info
(
"%s, start to restore wal"
,
pPeer
->
id
);
if
(
syncRestoreWal
(
pPeer
)
<
0
)
{
sError
(
"%s, failed to restore wal"
,
pPeer
->
id
);
return
-
1
;
}
nodeSStatus
=
TAOS_SYNC_STATUS_CACHE
;
s
Debug
(
"%s, start to insert buffered points, set sstatus:%s"
,
pPeer
->
id
,
syncStatus
[
nodeSStatus
]);
s
Info
(
"%s, start to insert buffered points, set sstatus:%s"
,
pPeer
->
id
,
syncStatus
[
nodeSStatus
]);
if
(
syncProcessBufferedFwd
(
pPeer
)
<
0
)
{
sError
(
"%s, failed to insert buffered points"
,
pPeer
->
id
);
return
-
1
;
...
...
src/sync/src/syncRetrieve.c
浏览文件 @
4d789b08
...
...
@@ -448,7 +448,7 @@ static int32_t syncRetrieveWal(SSyncPeer *pPeer) {
return
code
;
}
static
int32_t
syncRetrieve
DataStepByStep
(
SSyncPeer
*
pPeer
)
{
static
int32_t
syncRetrieve
FirstPkt
(
SSyncPeer
*
pPeer
)
{
SSyncNode
*
pNode
=
pPeer
->
pSyncNode
;
SFirstPkt
firstPkt
;
...
...
@@ -458,8 +458,24 @@ static int32_t syncRetrieveDataStepByStep(SSyncPeer *pPeer) {
tstrncpy
(
firstPkt
.
fqdn
,
tsNodeFqdn
,
sizeof
(
firstPkt
.
fqdn
));
firstPkt
.
port
=
tsSyncPort
;
if
(
taosWriteMsg
(
pPeer
->
syncFd
,
(
char
*
)
&
firstPkt
,
sizeof
(
firstPkt
))
<
0
)
{
sError
(
"%s, failed to send syncCmd"
,
pPeer
->
id
);
if
(
taosWriteMsg
(
pPeer
->
syncFd
,
&
firstPkt
,
sizeof
(
firstPkt
))
<
0
)
{
sError
(
"%s, failed to send sync firstPkt since %s"
,
pPeer
->
id
,
strerror
(
errno
));
return
-
1
;
}
SFirstPktRsp
firstPktRsp
;
if
(
taosReadMsg
(
pPeer
->
syncFd
,
&
firstPktRsp
,
sizeof
(
SFirstPktRsp
))
<
0
)
{
sError
(
"%s, failed to read sync firstPkt rsp since %s"
,
pPeer
->
id
,
strerror
(
errno
));
return
-
1
;
}
return
0
;
}
static
int32_t
syncRetrieveDataStepByStep
(
SSyncPeer
*
pPeer
)
{
sInfo
(
"%s, start to retrieve, sstatus:%s"
,
pPeer
->
id
,
syncStatus
[
pPeer
->
sstatus
]);
if
(
syncRetrieveFirstPkt
(
pPeer
)
<
0
)
{
sError
(
"%s, failed to start retrieve"
,
pPeer
->
id
);
return
-
1
;
}
...
...
src/sync/src/taosTcpPool.c
浏览文件 @
4d789b08
...
...
@@ -203,16 +203,19 @@ static void *taosProcessTcpData(void *param) {
assert
(
pConn
);
if
(
events
[
i
].
events
&
EPOLLERR
)
{
sDebug
(
"conn is broken since EPOLLERR"
);
taosProcessBrokenLink
(
pConn
);
continue
;
}
if
(
events
[
i
].
events
&
EPOLLHUP
)
{
sDebug
(
"conn is broken since EPOLLHUP"
);
taosProcessBrokenLink
(
pConn
);
continue
;
}
if
(
events
[
i
].
events
&
EPOLLRDHUP
)
{
sDebug
(
"conn is broken since EPOLLRDHUP"
);
taosProcessBrokenLink
(
pConn
);
continue
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录