Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
8b877865
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看板
提交
8b877865
编写于
4月 14, 2022
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(cluster): create qnode in multi-process mode may crash
上级
6958f3ab
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
24 addition
and
16 deletion
+24
-16
source/dnode/mgmt/implement/src/dmExec.c
source/dnode/mgmt/implement/src/dmExec.c
+6
-1
source/dnode/mgmt/implement/src/dmHandle.c
source/dnode/mgmt/implement/src/dmHandle.c
+8
-7
source/dnode/mgmt/implement/src/dmObj.c
source/dnode/mgmt/implement/src/dmObj.c
+3
-1
source/dnode/mgmt/interface/inc/dmDef.h
source/dnode/mgmt/interface/inc/dmDef.h
+1
-1
source/libs/transport/src/transSrv.c
source/libs/transport/src/transSrv.c
+6
-6
未找到文件。
source/dnode/mgmt/implement/src/dmExec.c
浏览文件 @
8b877865
...
...
@@ -275,19 +275,24 @@ static void dmProcessProcHandle(void *handle) {
}
static
void
dmWatchNodes
(
SDnode
*
pDnode
)
{
taosThreadMutexLock
(
&
pDnode
->
mutex
);
if
(
pDnode
->
ptype
==
DND_PROC_PARENT
)
{
for
(
EDndNodeType
n
=
DNODE
+
1
;
n
<
NODE_END
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
if
(
!
pWrapper
->
required
)
continue
;
if
(
pWrapper
->
procType
!=
DND_PROC_PARENT
)
continue
;
if
(
pDnode
->
ntype
==
NODE_END
)
continue
;
if
(
pWrapper
->
procId
<=
0
||
!
taosProcExist
(
pWrapper
->
procId
))
{
dWarn
(
"node:%s, process:%d is killed and needs to be restarted"
,
pWrapper
->
name
,
pWrapper
->
procId
);
taosProcCloseHandles
(
pWrapper
->
procObj
,
dmProcessProcHandle
);
if
(
pWrapper
->
procObj
)
{
taosProcCloseHandles
(
pWrapper
->
procObj
,
dmProcessProcHandle
);
}
dmNewNodeProc
(
pWrapper
,
n
);
}
}
}
taosThreadMutexUnlock
(
&
pDnode
->
mutex
);
}
int32_t
dmRun
(
SDnode
*
pDnode
)
{
...
...
source/dnode/mgmt/implement/src/dmHandle.c
浏览文件 @
8b877865
...
...
@@ -116,7 +116,7 @@ int32_t dmProcessCreateNodeReq(SDnode *pDnode, EDndNodeType ntype, SNodeMsg *pMs
return
-
1
;
}
taos
WLockLatch
(
&
pDnode
->
wrapperLock
);
taos
ThreadMutexLock
(
&
pDnode
->
mutex
);
pWrapper
=
&
pDnode
->
wrappers
[
ntype
];
if
(
taosMkDir
(
pWrapper
->
path
)
!=
0
)
{
...
...
@@ -132,10 +132,11 @@ int32_t dmProcessCreateNodeReq(SDnode *pDnode, EDndNodeType ntype, SNodeMsg *pMs
dDebug
(
"node:%s, has been created"
,
pWrapper
->
name
);
pWrapper
->
required
=
true
;
pWrapper
->
deployed
=
true
;
pWrapper
->
procType
=
pDnode
->
ptype
;
(
void
)
dmOpenNode
(
pWrapper
);
}
taos
WUnLockLatch
(
&
pDnode
->
wrapperLock
);
taos
ThreadMutexUnlock
(
&
pDnode
->
mutex
);
return
code
;
}
...
...
@@ -147,24 +148,24 @@ int32_t dmProcessDropNodeReq(SDnode *pDnode, EDndNodeType ntype, SNodeMsg *pMsg)
return
-
1
;
}
taos
WLockLatch
(
&
pWrapper
->
latch
);
taos
ThreadMutexLock
(
&
pDnode
->
mutex
);
int32_t
code
=
(
*
pWrapper
->
fp
.
dropFp
)(
pWrapper
,
pMsg
);
if
(
code
!=
0
)
{
dError
(
"node:%s, failed to drop since %s"
,
pWrapper
->
name
,
terrstr
());
}
else
{
dDebug
(
"node:%s, has been dropped"
,
pWrapper
->
name
);
pWrapper
->
required
=
false
;
pWrapper
->
deployed
=
false
;
taosRemoveDir
(
pWrapper
->
path
);
}
taosWUnLockLatch
(
&
pWrapper
->
latch
);
dmReleaseWrapper
(
pWrapper
);
if
(
code
==
0
)
{
dmCloseNode
(
pWrapper
);
pWrapper
->
required
=
false
;
pWrapper
->
deployed
=
false
;
taosRemoveDir
(
pWrapper
->
path
);
}
taosThreadMutexUnlock
(
&
pDnode
->
mutex
);
return
code
;
}
...
...
source/dnode/mgmt/implement/src/dmObj.c
浏览文件 @
8b877865
...
...
@@ -48,7 +48,7 @@ static int32_t dmInitVars(SDnode *pDnode, const SDnodeOpt *pOption) {
}
taosInitRWLatch
(
&
pDnode
->
data
.
latch
);
taos
InitRWLatch
(
&
pDnode
->
wrapperLock
);
taos
ThreadMutexInit
(
&
pDnode
->
mutex
,
NULL
);
return
0
;
}
...
...
@@ -67,6 +67,8 @@ static void dmClearVars(SDnode *pDnode) {
taosMemoryFreeClear
(
pDnode
->
data
.
firstEp
);
taosMemoryFreeClear
(
pDnode
->
data
.
secondEp
);
taosMemoryFreeClear
(
pDnode
->
data
.
dataDir
);
taosThreadMutexDestroy
(
&
pDnode
->
mutex
);
memset
(
&
pDnode
->
mutex
,
0
,
sizeof
(
pDnode
->
mutex
));
taosMemoryFree
(
pDnode
);
dDebug
(
"dnode memory is cleared, data:%p"
,
pDnode
);
}
...
...
source/dnode/mgmt/interface/inc/dmDef.h
浏览文件 @
8b877865
...
...
@@ -140,7 +140,7 @@ typedef struct SDnode {
SStartupReq
startup
;
SDnodeTrans
trans
;
SDnodeData
data
;
SRWLatch
wrapperLock
;
TdThreadMutex
mutex
;
SMgmtWrapper
wrappers
[
NODE_END
];
}
SDnode
;
...
...
source/libs/transport/src/transSrv.c
浏览文件 @
8b877865
...
...
@@ -147,8 +147,8 @@ static void (*transAsyncHandle[])(SSrvMsg* msg, SWorkThrdObj* thrd) = {uvHandleR
static
void
uvDestroyConn
(
uv_handle_t
*
handle
);
// server and worker thread
static
void
*
w
orkerThread
(
void
*
arg
);
static
void
*
a
cceptThread
(
void
*
arg
);
static
void
*
transW
orkerThread
(
void
*
arg
);
static
void
*
transA
cceptThread
(
void
*
arg
);
// add handle loop
static
bool
addHandleToWorkloop
(
void
*
arg
);
...
...
@@ -538,7 +538,7 @@ void uvOnConnectionCb(uv_stream_t* q, ssize_t nread, const uv_buf_t* buf) {
}
}
void
*
a
cceptThread
(
void
*
arg
)
{
void
*
transA
cceptThread
(
void
*
arg
)
{
// opt
setThreadName
(
"trans-accept"
);
SServerObj
*
srv
=
(
SServerObj
*
)
arg
;
...
...
@@ -596,7 +596,7 @@ static bool addHandleToAcceptloop(void* arg) {
}
return
true
;
}
void
*
w
orkerThread
(
void
*
arg
)
{
void
*
transW
orkerThread
(
void
*
arg
)
{
setThreadName
(
"trans-worker"
);
SWorkThrdObj
*
pThrd
=
(
SWorkThrdObj
*
)
arg
;
uv_run
(
pThrd
->
loop
,
UV_RUN_DEFAULT
);
...
...
@@ -686,7 +686,7 @@ void* transInitServer(uint32_t ip, uint32_t port, char* label, int numOfThreads,
if
(
false
==
addHandleToWorkloop
(
thrd
))
{
goto
End
;
}
int
err
=
taosThreadCreate
(
&
(
thrd
->
thread
),
NULL
,
w
orkerThread
,
(
void
*
)(
thrd
));
int
err
=
taosThreadCreate
(
&
(
thrd
->
thread
),
NULL
,
transW
orkerThread
,
(
void
*
)(
thrd
));
if
(
err
==
0
)
{
tDebug
(
"sucess to create worker-thread %d"
,
i
);
// printf("thread %d create\n", i);
...
...
@@ -698,7 +698,7 @@ void* transInitServer(uint32_t ip, uint32_t port, char* label, int numOfThreads,
if
(
false
==
addHandleToAcceptloop
(
srv
))
{
goto
End
;
}
int
err
=
taosThreadCreate
(
&
srv
->
thread
,
NULL
,
a
cceptThread
,
(
void
*
)
srv
);
int
err
=
taosThreadCreate
(
&
srv
->
thread
,
NULL
,
transA
cceptThread
,
(
void
*
)
srv
);
if
(
err
==
0
)
{
tDebug
(
"success to create accept-thread"
);
}
else
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录