Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
7259a356
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看板
提交
7259a356
编写于
5月 24, 2022
作者:
dengyihao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enh: refactor trans free ctx
上级
1ea2eec5
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
105 addition
and
94 deletion
+105
-94
include/libs/transport/trpc.h
include/libs/transport/trpc.h
+1
-2
source/libs/transport/inc/transComm.h
source/libs/transport/inc/transComm.h
+2
-2
source/libs/transport/src/transCli.c
source/libs/transport/src/transCli.c
+15
-1
source/libs/transport/src/transComm.c
source/libs/transport/src/transComm.c
+2
-2
source/libs/transport/test/transportTests.cpp
source/libs/transport/test/transportTests.cpp
+76
-76
source/os/src/osSocket.c
source/os/src/osSocket.c
+9
-11
未找到文件。
include/libs/transport/trpc.h
浏览文件 @
7259a356
...
...
@@ -89,19 +89,18 @@ typedef struct SRpcInit {
typedef
struct
{
void
*
val
;
int32_t
(
*
clone
)(
void
*
src
,
void
**
dst
);
void
(
*
freeFunc
)(
const
void
*
arg
);
}
SRpcCtxVal
;
typedef
struct
{
int32_t
msgType
;
void
*
val
;
int32_t
(
*
clone
)(
void
*
src
,
void
**
dst
);
void
(
*
freeFunc
)(
const
void
*
arg
);
}
SRpcBrokenlinkVal
;
typedef
struct
{
SHashObj
*
args
;
SRpcBrokenlinkVal
brokenVal
;
void
(
*
freeFunc
)(
const
void
*
arg
);
}
SRpcCtx
;
int32_t
rpcInit
();
...
...
source/libs/transport/inc/transComm.h
浏览文件 @
7259a356
...
...
@@ -95,8 +95,8 @@ typedef void* queue[2];
#define QUEUE_DATA(e, type, field) ((type*)((void*)((char*)(e)-offsetof(type, field))))
#define TRANS_RETRY_COUNT_LIMIT 100 // retry count limit
#define TRANS_RETRY_INTERVAL 15 // ms retry interval
#define TRANS_CONN_TIMEOUT 3 // connect timeout
#define TRANS_RETRY_INTERVAL 15
// ms retry interval
#define TRANS_CONN_TIMEOUT 3
// connect timeout
typedef
SRpcMsg
STransMsg
;
typedef
SRpcCtx
STransCtx
;
...
...
source/libs/transport/src/transCli.c
浏览文件 @
7259a356
...
...
@@ -131,6 +131,19 @@ static void destroyThrdObj(SCliThrdObj* pThrd);
static
void
cliWalkCb
(
uv_handle_t
*
handle
,
void
*
arg
);
static
void
cliReleaseUnfinishedMsg
(
SCliConn
*
conn
)
{
SCliMsg
*
pMsg
=
NULL
;
for
(
int
i
=
0
;
i
<
transQueueSize
(
&
conn
->
cliMsgs
);
i
++
)
{
pMsg
=
transQueueGet
(
&
conn
->
cliMsgs
,
i
);
if
(
pMsg
!=
NULL
&&
pMsg
->
ctx
!=
NULL
)
{
if
(
conn
->
ctx
.
freeFunc
!=
NULL
)
{
conn
->
ctx
.
freeFunc
(
pMsg
->
ctx
->
ahandle
);
}
}
destroyCmsg
(
pMsg
);
}
}
#define CLI_RELEASE_UV(loop) \
do { \
uv_walk(loop, cliWalkCb, NULL); \
...
...
@@ -161,6 +174,7 @@ static void cliWalkCb(uv_handle_t* handle, void* arg);
transUnrefCliHandle(conn); \
} \
destroyCmsg(pMsg); \
cliReleaseUnfinishedMsg(conn); \
addConnToPool(((SCliThrdObj*)conn->hostThrd)->pool, conn); \
return; \
} \
...
...
@@ -465,8 +479,8 @@ static void addConnToPool(void* pool, SCliConn* conn) {
STrans
*
pTransInst
=
((
SCliThrdObj
*
)
conn
->
hostThrd
)
->
pTransInst
;
conn
->
expireTime
=
taosGetTimestampMs
()
+
CONN_PERSIST_TIME
(
pTransInst
->
idleTime
);
transCtxCleanup
(
&
conn
->
ctx
);
transQueueClear
(
&
conn
->
cliMsgs
);
transCtxCleanup
(
&
conn
->
ctx
);
conn
->
status
=
ConnInPool
;
char
key
[
128
]
=
{
0
};
...
...
source/libs/transport/src/transComm.c
浏览文件 @
7259a356
...
...
@@ -233,7 +233,7 @@ void transCtxCleanup(STransCtx* ctx) {
STransCtxVal
*
iter
=
taosHashIterate
(
ctx
->
args
,
NULL
);
while
(
iter
)
{
iter
->
freeFunc
(
iter
->
val
);
ctx
->
freeFunc
(
iter
->
val
);
iter
=
taosHashIterate
(
ctx
->
args
,
iter
);
}
...
...
@@ -257,7 +257,7 @@ void transCtxMerge(STransCtx* dst, STransCtx* src) {
STransCtxVal
*
dVal
=
taosHashGet
(
dst
->
args
,
key
,
klen
);
if
(
dVal
)
{
d
Val
->
freeFunc
(
dVal
->
val
);
d
st
->
freeFunc
(
dVal
->
val
);
}
taosHashPut
(
dst
->
args
,
key
,
klen
,
sVal
,
sizeof
(
*
sVal
));
iter
=
taosHashIterate
(
src
->
args
,
iter
);
...
...
source/libs/transport/test/transportTests.cpp
浏览文件 @
7259a356
...
...
@@ -156,80 +156,80 @@ int32_t cloneVal(void *src, void **dst) {
memcpy
(
*
dst
,
src
,
sz
);
return
0
;
}
TEST_F
(
TransCtxEnv
,
mergeTest
)
{
int
key
=
1
;
{
STransCtx
*
src
=
(
STransCtx
*
)
taosMemoryCalloc
(
1
,
sizeof
(
STransCtx
));
transCtxInit
(
src
);
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryMalloc
(
12
);
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryMalloc
(
12
);
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
transCtxMerge
(
ctx
,
src
);
taosMemoryFree
(
src
);
}
EXPECT_EQ
(
2
,
taosHashGetSize
(
ctx
->
args
));
{
STransCtx
*
src
=
(
STransCtx
*
)
taosMemoryCalloc
(
1
,
sizeof
(
STransCtx
));
transCtxInit
(
src
);
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryMalloc
(
12
);
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryMalloc
(
12
);
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
transCtxMerge
(
ctx
,
src
);
taosMemoryFree
(
src
);
}
std
::
string
val
(
"Hello"
);
EXPECT_EQ
(
4
,
taosHashGetSize
(
ctx
->
args
));
{
key
=
1
;
STransCtx
*
src
=
(
STransCtx
*
)
taosMemoryCalloc
(
1
,
sizeof
(
STransCtx
));
transCtxInit
(
src
);
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryCalloc
(
1
,
11
);
val1
.
clone
=
cloneVal
;
memcpy
(
val1
.
val
,
val
.
c_str
(),
val
.
size
());
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryCalloc
(
1
,
11
);
val1
.
clone
=
cloneVal
;
memcpy
(
val1
.
val
,
val
.
c_str
(),
val
.
size
());
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
transCtxMerge
(
ctx
,
src
);
taosMemoryFree
(
src
);
}
EXPECT_EQ
(
4
,
taosHashGetSize
(
ctx
->
args
));
char
*
skey
=
(
char
*
)
transCtxDumpVal
(
ctx
,
1
);
EXPECT_EQ
(
0
,
strcmp
(
skey
,
val
.
c_str
()));
taosMemoryFree
(
skey
);
skey
=
(
char
*
)
transCtxDumpVal
(
ctx
,
2
);
EXPECT_EQ
(
0
,
strcmp
(
skey
,
val
.
c_str
()));
}
//
TEST_F(TransCtxEnv, mergeTest) {
//
int key = 1;
//
{
//
STransCtx *src = (STransCtx *)taosMemoryCalloc(1, sizeof(STransCtx));
//
transCtxInit(src);
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryMalloc(12);
//
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryMalloc(12);
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
transCtxMerge(ctx, src);
//
taosMemoryFree(src);
//
}
//
EXPECT_EQ(2, taosHashGetSize(ctx->args));
//
{
//
STransCtx *src = (STransCtx *)taosMemoryCalloc(1, sizeof(STransCtx));
//
transCtxInit(src);
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryMalloc(12);
//
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryMalloc(12);
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
transCtxMerge(ctx, src);
//
taosMemoryFree(src);
//
}
//
std::string val("Hello");
//
EXPECT_EQ(4, taosHashGetSize(ctx->args));
//
{
//
key = 1;
//
STransCtx *src = (STransCtx *)taosMemoryCalloc(1, sizeof(STransCtx));
//
transCtxInit(src);
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryCalloc(1, 11);
//
val1.clone = cloneVal;
//
memcpy(val1.val, val.c_str(), val.size());
//
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryCalloc(1, 11);
//
val1.clone = cloneVal;
//
memcpy(val1.val, val.c_str(), val.size());
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
transCtxMerge(ctx, src);
//
taosMemoryFree(src);
//
}
//
EXPECT_EQ(4, taosHashGetSize(ctx->args));
//
//
char *skey = (char *)transCtxDumpVal(ctx, 1);
//
EXPECT_EQ(0, strcmp(skey, val.c_str()));
//
taosMemoryFree(skey);
//
//
skey = (char *)transCtxDumpVal(ctx, 2);
//
EXPECT_EQ(0, strcmp(skey, val.c_str()));
//
}
#endif
source/os/src/osSocket.c
浏览文件 @
7259a356
...
...
@@ -889,11 +889,11 @@ uint32_t taosGetIpv4FromFqdn(const char *fqdn) {
#ifdef WINDOWS
// Initialize Winsock
WSADATA
wsaData
;
int
iResult
;
int
iResult
;
iResult
=
WSAStartup
(
MAKEWORD
(
2
,
2
),
&
wsaData
);
if
(
iResult
!=
0
)
{
printf
(
"WSAStartup failed: %d
\n
"
,
iResult
);
return
1
;
//
printf("WSAStartup failed: %d\n", iResult);
return
1
;
}
#endif
struct
addrinfo
hints
=
{
0
};
...
...
@@ -913,12 +913,12 @@ uint32_t taosGetIpv4FromFqdn(const char *fqdn) {
}
else
{
#ifdef EAI_SYSTEM
if
(
ret
==
EAI_SYSTEM
)
{
printf
(
"failed to get the ip address, fqdn:%s, errno:%d, since:%s"
,
fqdn
,
errno
,
strerror
(
errno
));
//
printf("failed to get the ip address, fqdn:%s, errno:%d, since:%s", fqdn, errno, strerror(errno));
}
else
{
printf
(
"failed to get the ip address, fqdn:%s, ret:%d, since:%s"
,
fqdn
,
ret
,
gai_strerror
(
ret
));
//
printf("failed to get the ip address, fqdn:%s, ret:%d, since:%s", fqdn, ret, gai_strerror(ret));
}
#else
printf
(
"failed to get the ip address, fqdn:%s, ret:%d, since:%s"
,
fqdn
,
ret
,
gai_strerror
(
ret
));
//
printf("failed to get the ip address, fqdn:%s, ret:%d, since:%s", fqdn, ret, gai_strerror(ret));
#endif
return
0xFFFFFFFF
;
}
...
...
@@ -928,7 +928,7 @@ int32_t taosGetFqdn(char *fqdn) {
char
hostname
[
1024
];
hostname
[
1023
]
=
'\0'
;
if
(
gethostname
(
hostname
,
1023
)
==
-
1
)
{
printf
(
"failed to get hostname, reason:%s"
,
strerror
(
errno
));
//
printf("failed to get hostname, reason:%s", strerror(errno));
assert
(
0
);
return
-
1
;
}
...
...
@@ -946,7 +946,7 @@ int32_t taosGetFqdn(char *fqdn) {
#endif // __APPLE__
int32_t
ret
=
getaddrinfo
(
hostname
,
NULL
,
&
hints
,
&
result
);
if
(
!
result
)
{
printf
(
"failed to get fqdn, code:%d, reason:%s"
,
ret
,
gai_strerror
(
ret
));
//
printf("failed to get fqdn, code:%d, reason:%s", ret, gai_strerror(ret));
assert
(
0
);
return
-
1
;
}
...
...
@@ -993,9 +993,7 @@ void tinet_ntoa(char *ipstr, uint32_t ip) {
sprintf
(
ipstr
,
"%d.%d.%d.%d"
,
ip
&
0xFF
,
(
ip
>>
8
)
&
0xFF
,
(
ip
>>
16
)
&
0xFF
,
ip
>>
24
);
}
void
taosIgnSIGPIPE
()
{
signal
(
SIGPIPE
,
SIG_IGN
);
}
void
taosIgnSIGPIPE
()
{
signal
(
SIGPIPE
,
SIG_IGN
);
}
void
taosSetMaskSIGPIPE
()
{
#ifdef WINDOWS
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录