Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
8fe672fe
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8fe672fe
编写于
10月 17, 2022
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: crash whle reconfig mnode will cause taosd reboot failure
上级
eb26fbea
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
32 addition
and
12 deletion
+32
-12
source/dnode/mnode/impl/src/mndMnode.c
source/dnode/mnode/impl/src/mndMnode.c
+14
-12
source/libs/sync/src/syncMain.c
source/libs/sync/src/syncMain.c
+18
-0
未找到文件。
source/dnode/mnode/impl/src/mndMnode.c
浏览文件 @
8fe672fe
...
...
@@ -394,7 +394,6 @@ static int32_t mndCreateMnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode,
if
(
mndSetCreateMnodeRedoActions
(
pMnode
,
pTrans
,
pDnode
,
&
mnodeObj
)
!=
0
)
goto
_OVER
;
if
(
mndSetCreateMnodeRedoLogs
(
pMnode
,
pTrans
,
&
mnodeObj
)
!=
0
)
goto
_OVER
;
if
(
mndSetCreateMnodeCommitLogs
(
pMnode
,
pTrans
,
&
mnodeObj
)
!=
0
)
goto
_OVER
;
if
(
mndTransAppendNullLog
(
pTrans
)
!=
0
)
goto
_OVER
;
if
(
mndTransPrepare
(
pMnode
,
pTrans
)
!=
0
)
goto
_OVER
;
code
=
0
;
...
...
@@ -478,7 +477,6 @@ static int32_t mndSetDropMnodeCommitLogs(SMnode *pMnode, STrans *pTrans, SMnodeO
static
int32_t
mndSetDropMnodeRedoActions
(
SMnode
*
pMnode
,
STrans
*
pTrans
,
SDnodeObj
*
pDnode
,
SMnodeObj
*
pObj
)
{
SSdb
*
pSdb
=
pMnode
->
pSdb
;
void
*
pIter
=
NULL
;
int32_t
numOfReplicas
=
0
;
SDDropMnodeReq
dropReq
=
{
0
};
SEpSet
dropEpSet
=
{
0
};
...
...
@@ -505,9 +503,8 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode
int32_t
mndSetDropMnodeInfoToTrans
(
SMnode
*
pMnode
,
STrans
*
pTrans
,
SMnodeObj
*
pObj
)
{
if
(
pObj
==
NULL
)
return
0
;
if
(
mndSetDropMnodeCommitLogs
(
pMnode
,
pTrans
,
pObj
)
!=
0
)
return
-
1
;
if
(
mndSetDropMnodeRedoActions
(
pMnode
,
pTrans
,
pObj
->
pDnode
,
pObj
)
!=
0
)
return
-
1
;
if
(
mnd
TransAppendNullLog
(
pTrans
)
!=
0
)
return
-
1
;
if
(
mnd
SetDropMnodeCommitLogs
(
pMnode
,
pTrans
,
pObj
)
!=
0
)
return
-
1
;
return
0
;
}
...
...
@@ -715,7 +712,8 @@ static void mndReloadSyncConfig(SMnode *pMnode) {
SMnodeObj
*
pObj
=
NULL
;
ESdbStatus
objStatus
=
0
;
void
*
pIter
=
NULL
;
bool
hasUpdatingMnode
=
false
;
int32_t
updatingMnodes
=
0
;
int32_t
readyMnodes
=
0
;
SSyncCfg
cfg
=
{.
myIndex
=
-
1
};
while
(
1
)
{
...
...
@@ -723,7 +721,11 @@ static void mndReloadSyncConfig(SMnode *pMnode) {
if
(
pIter
==
NULL
)
break
;
if
(
objStatus
==
SDB_STATUS_CREATING
||
objStatus
==
SDB_STATUS_DROPPING
)
{
mInfo
(
"vgId:1, has updating mnode:%d, status:%s"
,
pObj
->
id
,
sdbStatusName
(
objStatus
));
hasUpdatingMnode
=
true
;
updatingMnodes
++
;
}
if
(
objStatus
==
SDB_STATUS_READY
)
{
mInfo
(
"vgId:1, has ready mnode:%d, status:%s"
,
pObj
->
id
,
sdbStatusName
(
objStatus
));
readyMnodes
++
;
}
if
(
objStatus
==
SDB_STATUS_READY
||
objStatus
==
SDB_STATUS_CREATING
)
{
...
...
@@ -739,18 +741,18 @@ static void mndReloadSyncConfig(SMnode *pMnode) {
sdbReleaseLock
(
pSdb
,
pObj
,
false
);
}
if
(
cfg
.
myIndex
==
-
1
)
{
mInfo
(
"vgId:1, mnode
not reload since selfIndex is -1"
);
if
(
readyMnodes
<=
0
||
updatingMnodes
<=
0
)
{
mInfo
(
"vgId:1, mnode
sync not reconfig since readyMnodes:%d updatingMnodes:%d"
,
readyMnodes
,
updatingMnodes
);
return
;
}
if
(
!
mndGetRestored
(
pMnode
)
)
{
mInfo
(
"vgId:1, mnode
not reload since restore not finished
"
);
if
(
cfg
.
myIndex
==
-
1
)
{
mInfo
(
"vgId:1, mnode
sync not reconfig since selfIndex is -1
"
);
return
;
}
if
(
hasUpdatingMnode
)
{
mInfo
(
"vgId:1,
start to reload mnode sync
, replica:%d myIndex:%d"
,
cfg
.
replicaNum
,
cfg
.
myIndex
);
if
(
updatingMnodes
>
0
)
{
mInfo
(
"vgId:1,
mnode sync reconfig
, replica:%d myIndex:%d"
,
cfg
.
replicaNum
,
cfg
.
myIndex
);
for
(
int32_t
i
=
0
;
i
<
cfg
.
replicaNum
;
++
i
)
{
SNodeInfo
*
pNode
=
&
cfg
.
nodeInfo
[
i
];
mInfo
(
"vgId:1, index:%d, fqdn:%s port:%d"
,
i
,
pNode
->
nodeFqdn
,
pNode
->
nodePort
);
...
...
source/libs/sync/src/syncMain.c
浏览文件 @
8fe672fe
...
...
@@ -1891,8 +1891,26 @@ inline bool syncNodeInConfig(SSyncNode* pSyncNode, const SSyncCfg* config) {
return
b1
;
}
static
bool
syncIsConfigChanged
(
const
SSyncCfg
*
pOldCfg
,
const
SSyncCfg
*
pNewCfg
)
{
if
(
pOldCfg
->
replicaNum
!=
pNewCfg
->
replicaNum
)
return
true
;
if
(
pOldCfg
->
myIndex
!=
pNewCfg
->
myIndex
)
return
true
;
for
(
int32_t
i
=
0
;
i
<
pOldCfg
->
replicaNum
;
++
i
)
{
const
SNodeInfo
*
pOldInfo
=
&
pOldCfg
->
nodeInfo
[
i
];
const
SNodeInfo
*
pNewInfo
=
&
pNewCfg
->
nodeInfo
[
i
];
if
(
strcmp
(
pOldInfo
->
nodeFqdn
,
pNewInfo
->
nodeFqdn
)
!=
0
)
return
true
;
if
(
pOldInfo
->
nodePort
!=
pNewInfo
->
nodePort
)
return
true
;
}
return
false
;
}
void
syncNodeDoConfigChange
(
SSyncNode
*
pSyncNode
,
SSyncCfg
*
pNewConfig
,
SyncIndex
lastConfigChangeIndex
)
{
SSyncCfg
oldConfig
=
pSyncNode
->
pRaftCfg
->
cfg
;
if
(
!
syncIsConfigChanged
(
&
oldConfig
,
pNewConfig
))
{
sInfo
(
"vgId:1, sync not reconfig since not changed"
);
return
;
}
pSyncNode
->
pRaftCfg
->
cfg
=
*
pNewConfig
;
pSyncNode
->
pRaftCfg
->
lastConfigIndex
=
lastConfigChangeIndex
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录