Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
3bf28e18
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
3bf28e18
编写于
2月 25, 2023
作者:
dengyihao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: limit session num
上级
be17aa82
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
28 addition
and
27 deletion
+28
-27
source/libs/transport/src/transCli.c
source/libs/transport/src/transCli.c
+28
-27
未找到文件。
source/libs/transport/src/transCli.c
浏览文件 @
3bf28e18
...
...
@@ -23,7 +23,6 @@ typedef struct SConnList {
queue
conns
;
int32_t
size
;
SMsgList
*
list
;
void
*
pThrd
;
}
SConnList
;
typedef
struct
{
...
...
@@ -142,7 +141,7 @@ typedef struct {
// conn pool
// add expire timeout and capacity limit
static
void
*
createConnPool
(
int
size
);
static
void
*
destroyConnPool
(
void
*
pool
);
static
void
*
destroyConnPool
(
SCliThrd
*
thread
);
static
SCliConn
*
getConnFromPool
(
SCliThrd
*
thread
,
char
*
key
,
bool
*
exceed
);
static
void
addConnToPool
(
void
*
pool
,
SCliConn
*
conn
);
static
void
doCloseIdleConn
(
void
*
param
);
...
...
@@ -547,9 +546,9 @@ void* createConnPool(int size) {
// thread local, no lock
return
taosHashInit
(
size
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_NO_LOCK
);
}
void
*
destroyConnPool
(
void
*
pool
)
{
void
*
destroyConnPool
(
SCliThrd
*
pThrd
)
{
void
*
pool
=
pThrd
->
pool
;
SConnList
*
connList
=
taosHashIterate
((
SHashObj
*
)
pool
,
NULL
);
SCliThrd
*
pThrd
=
connList
->
pThrd
;
while
(
connList
!=
NULL
)
{
while
(
!
QUEUE_IS_EMPTY
(
&
connList
->
conns
))
{
queue
*
h
=
QUEUE_HEAD
(
&
connList
->
conns
);
...
...
@@ -582,29 +581,31 @@ static SCliConn* getConnFromPool(SCliThrd* pThrd, char* key, bool* exceed) {
SConnList
*
plist
=
taosHashGet
((
SHashObj
*
)
pool
,
key
,
strlen
(
key
));
STrans
*
pTranInst
=
pThrd
->
pTransInst
;
if
(
plist
==
NULL
)
{
SConnList
list
=
{
0
};
taosHashPut
((
SHashObj
*
)
pool
,
key
,
strlen
(
key
),
(
void
*
)
&
list
,
sizeof
(
list
));
plist
=
taosHashGet
(
pool
,
key
,
strlen
(
key
));
SMsgList
*
nList
=
taosMemoryCalloc
(
1
,
sizeof
(
SMsgList
));
QUEUE_INIT
(
&
nList
->
msgQ
);
nList
->
numOfConn
++
;
SConnList
list
=
{
0
};
QUEUE_INIT
(
&
list
.
conns
);
list
.
list
=
nList
;
taosHashPut
((
SHashObj
*
)
pool
,
key
,
strlen
(
key
),
(
void
*
)
&
list
,
sizeof
(
list
));
return
NULL
;
QUEUE_INIT
(
&
plist
->
conns
);
plist
->
list
=
nList
;
}
SMsgList
*
msglist
=
plist
->
list
;
if
(
QUEUE_IS_EMPTY
(
&
plist
->
conns
)
&&
msglist
->
numOfConn
>=
pTranInst
->
connLimitNum
)
{
*
exceed
=
true
;
if
(
QUEUE_IS_EMPTY
(
&
plist
->
conns
))
{
if
(
plist
->
list
->
numOfConn
>=
pTranInst
->
connLimitNum
)
{
*
exceed
=
true
;
}
return
NULL
;
}
queue
*
h
=
QUEUE_HEAD
(
&
plist
->
conns
);
QUEUE_REMOVE
(
h
);
plist
->
size
-=
1
;
queue
*
h
=
QUEUE_HEAD
(
&
plist
->
conns
);
SCliConn
*
conn
=
QUEUE_DATA
(
h
,
SCliConn
,
q
);
conn
->
status
=
ConnNormal
;
QUEUE_REMOVE
(
&
conn
->
q
);
QUEUE_INIT
(
&
conn
->
q
);
if
(
conn
->
task
!=
NULL
)
{
...
...
@@ -619,23 +620,21 @@ static SCliConn* getConnFromPool2(SCliThrd* pThrd, char* key, SCliMsg** pMsg) {
STrans
*
pTransInst
=
pThrd
->
pTransInst
;
SConnList
*
plist
=
taosHashGet
((
SHashObj
*
)
pool
,
key
,
strlen
(
key
));
if
(
plist
==
NULL
)
{
SConnList
list
=
{
0
};
taosHashPut
((
SHashObj
*
)
pool
,
key
,
strlen
(
key
),
(
void
*
)
&
list
,
sizeof
(
list
));
plist
=
taosHashGet
(
pool
,
key
,
strlen
(
key
));
SMsgList
*
nList
=
taosMemoryCalloc
(
1
,
sizeof
(
SMsgList
));
QUEUE_INIT
(
&
nList
->
msgQ
);
nList
->
numOfConn
++
;
SConnList
list
=
{
0
};
QUEUE_INIT
(
&
list
.
conns
);
list
.
list
=
nList
;
taosHashPut
((
SHashObj
*
)
pool
,
key
,
strlen
(
key
),
(
void
*
)
&
list
,
sizeof
(
list
));
plist
=
taosHashGet
((
SHashObj
*
)
pool
,
key
,
strlen
(
key
));
return
NULL
;
QUEUE_INIT
(
&
plist
->
conns
);
plist
->
list
=
nList
;
}
SMsgList
*
list
=
plist
->
list
;
// no avaliable conn in pool
if
(
QUEUE_IS_EMPTY
(
&
plist
->
conns
))
{
SMsgList
*
list
=
plist
->
list
;
if
((
list
)
->
numOfConn
>=
pTransInst
->
connLimitNum
)
{
STraceId
*
trace
=
&
(
*
pMsg
)
->
msg
.
info
.
traceId
;
...
...
@@ -669,11 +668,12 @@ static SCliConn* getConnFromPool2(SCliThrd* pThrd, char* key, SCliMsg** pMsg) {
return
NULL
;
}
queue
*
h
=
QUEUE_HEAD
(
&
plist
->
conns
);
plist
->
size
-=
1
;
queue
*
h
=
QUEUE_HEAD
(
&
plist
->
conns
);
QUEUE_REMOVE
(
h
);
SCliConn
*
conn
=
QUEUE_DATA
(
h
,
SCliConn
,
q
);
conn
->
status
=
ConnNormal
;
QUEUE_REMOVE
(
&
conn
->
q
);
QUEUE_INIT
(
&
conn
->
q
);
if
(
conn
->
task
!=
NULL
)
{
...
...
@@ -686,6 +686,7 @@ static void addConnToPool(void* pool, SCliConn* conn) {
if
(
conn
->
status
==
ConnInPool
)
{
return
;
}
tError
(
"add conn to pool"
);
allocConnRef
(
conn
,
true
);
SCliThrd
*
thrd
=
conn
->
hostThrd
;
...
...
@@ -1347,7 +1348,7 @@ static void cliHandleQuit(SCliMsg* pMsg, SCliThrd* pThrd) {
tDebug
(
"cli work thread %p start to quit"
,
pThrd
);
destroyCmsg
(
pMsg
);
destroyConnPool
(
pThrd
->
pool
);
destroyConnPool
(
pThrd
);
uv_walk
(
pThrd
->
loop
,
cliWalkCb
,
NULL
);
}
static
void
cliHandleRelease
(
SCliMsg
*
pMsg
,
SCliThrd
*
pThrd
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录