Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
919dd4e9
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看板
未验证
提交
919dd4e9
编写于
9月 15, 2022
作者:
S
Shengliang Guan
提交者:
GitHub
9月 15, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #16872 from taosdata/3.0
enh(tsc): handle deadlock
上级
024b2ca1
ef5c9cfc
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
30 addition
and
6 deletion
+30
-6
source/client/src/clientHb.c
source/client/src/clientHb.c
+30
-6
未找到文件。
source/client/src/clientHb.c
浏览文件 @
919dd4e9
...
...
@@ -173,7 +173,8 @@ static int32_t hbQueryHbRspHandle(SAppHbMgr *pAppHbMgr, SClientHbRsp *pRsp) {
pTscObj
->
pAppInfo
->
totalDnodes
=
pRsp
->
query
->
totalDnodes
;
pTscObj
->
pAppInfo
->
onlineDnodes
=
pRsp
->
query
->
onlineDnodes
;
pTscObj
->
connId
=
pRsp
->
query
->
connId
;
tscTrace
(
"conn %p hb rsp, dnodes %d/%d"
,
pTscObj
->
connId
,
pTscObj
->
pAppInfo
->
onlineDnodes
,
pTscObj
->
pAppInfo
->
totalDnodes
);
tscTrace
(
"conn %p hb rsp, dnodes %d/%d"
,
pTscObj
->
connId
,
pTscObj
->
pAppInfo
->
onlineDnodes
,
pTscObj
->
pAppInfo
->
totalDnodes
);
if
(
pRsp
->
query
->
killRid
)
{
tscDebug
(
"request rid %"
PRIx64
" need to be killed now"
,
pRsp
->
query
->
killRid
);
...
...
@@ -297,7 +298,8 @@ static int32_t hbAsyncCallBack(void *param, SDataBuf *pMsg, int32_t code) {
if
(
code
!=
0
)
{
(
*
pInst
)
->
onlineDnodes
=
((
*
pInst
)
->
totalDnodes
?
0
:
-
1
);
tscDebug
(
"hb rsp error %s, update server status %d/%d"
,
tstrerror
(
code
),
(
*
pInst
)
->
onlineDnodes
,
(
*
pInst
)
->
totalDnodes
);
tscDebug
(
"hb rsp error %s, update server status %d/%d"
,
tstrerror
(
code
),
(
*
pInst
)
->
onlineDnodes
,
(
*
pInst
)
->
totalDnodes
);
}
if
(
rspNum
)
{
...
...
@@ -657,6 +659,8 @@ int32_t hbGatherAppInfo(void) {
for
(
int32_t
i
=
0
;
i
<
sz
;
++
i
)
{
SAppHbMgr
*
pAppHbMgr
=
taosArrayGetP
(
clientHbMgr
.
appHbMgrs
,
i
);
if
(
pAppHbMgr
==
NULL
)
continue
;
uint64_t
clusterId
=
pAppHbMgr
->
pAppInstInfo
->
clusterId
;
SAppHbReq
*
pApp
=
taosHashGet
(
clientHbMgr
.
appSummary
,
&
clusterId
,
sizeof
(
clusterId
));
if
(
NULL
==
pApp
)
{
...
...
@@ -694,15 +698,21 @@ static void *hbThreadFunc(void *param) {
hbGatherAppInfo
();
}
SArray
*
mgr
=
taosArrayInit
(
sz
,
sizeof
(
void
*
));
for
(
int
i
=
0
;
i
<
sz
;
i
++
)
{
SAppHbMgr
*
pAppHbMgr
=
taosArrayGetP
(
clientHbMgr
.
appHbMgrs
,
i
);
if
(
pAppHbMgr
==
NULL
)
{
continue
;
}
int32_t
connCnt
=
atomic_load_32
(
&
pAppHbMgr
->
connKeyCnt
);
if
(
connCnt
==
0
)
{
taosArrayPush
(
mgr
,
&
pAppHbMgr
);
continue
;
}
SClientHbBatchReq
*
pReq
=
hbGatherAllInfo
(
pAppHbMgr
);
if
(
pReq
==
NULL
)
{
if
(
pReq
==
NULL
||
taosArrayGetP
(
clientHbMgr
.
appHbMgrs
,
i
)
==
NULL
)
{
tFreeClientHbBatchReq
(
pReq
);
continue
;
}
int
tlen
=
tSerializeSClientHbBatchReq
(
NULL
,
0
,
pReq
);
...
...
@@ -711,6 +721,7 @@ static void *hbThreadFunc(void *param) {
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
tFreeClientHbBatchReq
(
pReq
);
// hbClearReqInfo(pAppHbMgr);
taosArrayPush
(
mgr
,
&
pAppHbMgr
);
break
;
}
...
...
@@ -722,6 +733,7 @@ static void *hbThreadFunc(void *param) {
tFreeClientHbBatchReq
(
pReq
);
// hbClearReqInfo(pAppHbMgr);
taosMemoryFree
(
buf
);
taosArrayPush
(
mgr
,
&
pAppHbMgr
);
break
;
}
pInfo
->
fp
=
hbAsyncCallBack
;
...
...
@@ -729,7 +741,7 @@ static void *hbThreadFunc(void *param) {
pInfo
->
msgInfo
.
len
=
tlen
;
pInfo
->
msgType
=
TDMT_MND_HEARTBEAT
;
pInfo
->
param
=
strdup
(
pAppHbMgr
->
key
);
pInfo
->
paramFreeFp
=
taosMemoryFree
;
pInfo
->
paramFreeFp
=
taosMemoryFree
;
pInfo
->
requestId
=
generateRequestId
();
pInfo
->
requestObjRefId
=
0
;
...
...
@@ -741,8 +753,12 @@ static void *hbThreadFunc(void *param) {
// hbClearReqInfo(pAppHbMgr);
atomic_add_fetch_32
(
&
pAppHbMgr
->
reportCnt
,
1
);
taosArrayPush
(
mgr
,
&
pAppHbMgr
);
}
taosArrayDestroy
(
clientHbMgr
.
appHbMgrs
);
clientHbMgr
.
appHbMgrs
=
mgr
;
taosThreadMutexUnlock
(
&
clientHbMgr
.
lock
);
taosMsleep
(
HEARTBEAT_INTERVAL
);
...
...
@@ -834,7 +850,7 @@ void hbRemoveAppHbMrg(SAppHbMgr **pAppHbMgr) {
if
(
pItem
==
*
pAppHbMgr
)
{
hbFreeAppHbMgr
(
*
pAppHbMgr
);
*
pAppHbMgr
=
NULL
;
taosArray
Remove
(
clientHbMgr
.
appHbMgrs
,
i
);
taosArray
Set
(
clientHbMgr
.
appHbMgrs
,
i
,
pAppHbMgr
);
break
;
}
}
...
...
@@ -845,6 +861,7 @@ void appHbMgrCleanup(void) {
int
sz
=
taosArrayGetSize
(
clientHbMgr
.
appHbMgrs
);
for
(
int
i
=
0
;
i
<
sz
;
i
++
)
{
SAppHbMgr
*
pTarget
=
taosArrayGetP
(
clientHbMgr
.
appHbMgrs
,
i
);
if
(
pTarget
==
NULL
)
continue
;
hbFreeAppHbMgr
(
pTarget
);
}
}
...
...
@@ -859,7 +876,14 @@ int hbMgrInit() {
clientHbMgr
.
appSummary
=
taosHashInit
(
10
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BIGINT
),
false
,
HASH_NO_LOCK
);
clientHbMgr
.
appHbMgrs
=
taosArrayInit
(
0
,
sizeof
(
void
*
));
taosThreadMutexInit
(
&
clientHbMgr
.
lock
,
NULL
);
TdThreadMutexAttr
attr
=
{
0
};
taosThreadMutexAttrSetType
(
&
attr
,
PTHREAD_MUTEX_RECURSIVE
);
int
ret
=
taosThreadMutexAttrInit
(
&
attr
);
assert
(
ret
==
0
);
taosThreadMutexInit
(
&
clientHbMgr
.
lock
,
&
attr
);
taosThreadMutexAttrDestroy
(
&
attr
);
// init handle funcs
hbMgrInitHandle
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录