Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
906e0e78
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看板
提交
906e0e78
编写于
1月 20, 2022
作者:
dengyihao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor rpc
上级
5e8cb50a
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
81 addition
and
22 deletion
+81
-22
source/libs/transport/inc/transComm.h
source/libs/transport/inc/transComm.h
+7
-0
source/libs/transport/src/trans.c
source/libs/transport/src/trans.c
+2
-8
source/libs/transport/src/transCli.c
source/libs/transport/src/transCli.c
+66
-2
source/libs/transport/src/transSrv.c
source/libs/transport/src/transSrv.c
+6
-12
未找到文件。
source/libs/transport/inc/transComm.h
浏览文件 @
906e0e78
...
...
@@ -201,4 +201,11 @@ bool transDecompressMsg(char* msg, int32_t len, int32_t* flen);
void
transConnCtxDestroy
(
STransConnCtx
*
ctx
);
typedef
struct
SConnBuffer
{
char
*
buf
;
int
len
;
int
cap
;
int
left
;
}
SConnBuffer
;
#endif
source/libs/transport/src/trans.c
浏览文件 @
906e0e78
...
...
@@ -17,13 +17,6 @@
#include "transComm.h"
typedef
struct
SConnBuffer
{
char
*
buf
;
int
len
;
int
cap
;
int
left
;
}
SConnBuffer
;
void
*
(
*
taosInitHandle
[])(
uint32_t
ip
,
uint32_t
port
,
char
*
label
,
int
numOfThreads
,
void
*
fp
,
void
*
shandle
)
=
{
taosInitServer
,
taosInitClient
};
void
(
*
taosCloseHandle
[])(
void
*
arg
)
=
{
taosCloseServer
,
taosCloseClient
};
...
...
@@ -46,10 +39,11 @@ void* rpcOpen(const SRpcInit* pInit) {
void
rpcClose
(
void
*
arg
)
{
SRpcInfo
*
pRpc
=
(
SRpcInfo
*
)
arg
;
(
*
taosCloseHandle
[
pRpc
->
connType
])(
pRpc
->
tcphandle
);
free
(
pRpc
);
return
;
}
void
*
rpcMallocCont
(
int
contLen
)
{
int
size
=
contLen
+
RPC
_MSG_OVERHEAD
;
int
size
=
contLen
+
TRANS
_MSG_OVERHEAD
;
char
*
start
=
(
char
*
)
calloc
(
1
,
(
size_t
)
size
);
if
(
start
==
NULL
)
{
...
...
source/libs/transport/src/transCli.c
浏览文件 @
906e0e78
...
...
@@ -21,6 +21,7 @@ typedef struct SCliConn {
uv_connect_t
connReq
;
uv_stream_t
*
stream
;
uv_write_t
*
writeReq
;
SConnBuffer
readBuf
;
void
*
data
;
queue
conn
;
char
spi
;
...
...
@@ -55,9 +56,17 @@ typedef struct SClientObj {
static
SCliConn
*
getConnFromCache
(
void
*
cache
,
char
*
ip
,
uint32_t
port
);
static
void
addConnToCache
(
void
*
cache
,
char
*
ip
,
uint32_t
port
,
SCliConn
*
conn
);
// process data read from server, auth/decompress etc
static
void
clientProcessData
(
SCliConn
*
conn
);
// check whether already read complete packet from server
static
bool
clientReadComplete
(
SConnBuffer
*
pBuf
);
// alloc buf for read
static
void
clientAllocBufferCb
(
uv_handle_t
*
handle
,
size_t
suggested_size
,
uv_buf_t
*
buf
);
// callback after read nbytes from socket
static
void
clientReadCb
(
uv_stream_t
*
cli
,
ssize_t
nread
,
const
uv_buf_t
*
buf
);
// callback after write data to socket
static
void
clientWriteCb
(
uv_write_t
*
req
,
int
status
);
// callback after conn to server
static
void
clientConnCb
(
uv_connect_t
*
req
,
int
status
);
static
void
clientAsyncCb
(
uv_async_t
*
handle
);
static
void
clientDestroy
(
uv_handle_t
*
handle
);
...
...
@@ -67,18 +76,72 @@ static void clientMsgDestroy(SCliMsg* pMsg);
static
void
*
clientThread
(
void
*
arg
);
static
void
clientProcessData
(
SCliConn
*
conn
)
{
// impl
}
static
void
clientHandleReq
(
SCliMsg
*
pMsg
,
SCliThrdObj
*
pThrd
);
static
bool
clientReadComplete
(
SConnBuffer
*
data
)
{
STransMsgHead
head
;
int32_t
headLen
=
sizeof
(
head
);
if
(
data
->
len
>=
headLen
)
{
memcpy
((
char
*
)
&
head
,
data
->
buf
,
headLen
);
int32_t
msgLen
=
(
int32_t
)
htonl
((
uint32_t
)
head
.
msgLen
);
if
(
msgLen
>
data
->
len
)
{
data
->
left
=
msgLen
-
data
->
len
;
return
false
;
}
else
{
return
true
;
}
}
else
{
return
false
;
}
}
static
void
clientAllocReadBufferCb
(
uv_handle_t
*
handle
,
size_t
suggested_size
,
uv_buf_t
*
buf
)
{
// impl later
static
const
int
CAPACITY
=
512
;
SCliConn
*
conn
=
handle
->
data
;
SConnBuffer
*
pBuf
=
&
conn
->
readBuf
;
if
(
pBuf
->
cap
==
0
)
{
pBuf
->
buf
=
(
char
*
)
calloc
(
CAPACITY
,
sizeof
(
char
));
pBuf
->
len
=
0
;
pBuf
->
cap
=
CAPACITY
;
pBuf
->
left
=
-
1
;
buf
->
base
=
pBuf
->
buf
;
buf
->
len
=
CAPACITY
;
}
else
{
if
(
pBuf
->
len
>=
pBuf
->
cap
)
{
if
(
pBuf
->
left
==
-
1
)
{
pBuf
->
cap
*=
2
;
pBuf
->
buf
=
realloc
(
pBuf
->
buf
,
pBuf
->
cap
);
}
else
if
(
pBuf
->
len
+
pBuf
->
left
>
pBuf
->
cap
)
{
pBuf
->
cap
=
pBuf
->
len
+
pBuf
->
left
;
pBuf
->
buf
=
realloc
(
pBuf
->
buf
,
pBuf
->
len
+
pBuf
->
left
);
}
}
buf
->
base
=
pBuf
->
buf
+
pBuf
->
len
;
buf
->
len
=
pBuf
->
cap
-
pBuf
->
len
;
}
}
static
void
clientReadCb
(
uv_stream_t
*
handle
,
ssize_t
nread
,
const
uv_buf_t
*
buf
)
{
// impl later
SCliConn
*
conn
=
handle
->
data
;
SConnBuffer
*
pBuf
=
&
conn
->
readBuf
;
if
(
nread
>
0
)
{
pBuf
->
len
+=
nread
;
if
(
clientReadComplete
(
pBuf
))
{
tDebug
(
"alread read complete pack"
);
clientProcessData
(
conn
);
}
else
{
tDebug
(
"read halp packet, continue to read"
);
}
return
;
}
if
(
nread
!=
UV_EOF
)
{
tDebug
(
"Read error %s
\n
"
,
uv_err_name
(
nread
));
}
//
uv_close
((
uv_handle_t
*
)
handle
,
clientDestroy
);
}
...
...
@@ -166,7 +229,7 @@ static void clientHandleReq(SCliMsg* pMsg, SCliThrdObj* pThrd) {
conn
->
writeReq
->
data
=
conn
;
clientWrite
(
conn
);
}
else
{
SCliConn
*
conn
=
malloc
(
sizeof
(
SCliConn
));
SCliConn
*
conn
=
calloc
(
1
,
sizeof
(
SCliConn
));
conn
->
stream
=
(
uv_stream_t
*
)
malloc
(
sizeof
(
uv_tcp_t
));
uv_tcp_init
(
pThrd
->
loop
,
(
uv_tcp_t
*
)(
conn
->
stream
));
...
...
@@ -248,6 +311,7 @@ void taosCloseClient(void* arg) {
SCliThrdObj
*
pThrd
=
cli
->
pThreadObj
[
i
];
pthread_join
(
pThrd
->
thread
,
NULL
);
pthread_mutex_destroy
(
&
pThrd
->
msgMtx
);
free
(
pThrd
->
cliAsync
);
free
(
pThrd
->
loop
);
free
(
pThrd
);
}
...
...
source/libs/transport/src/transSrv.c
浏览文件 @
906e0e78
...
...
@@ -16,13 +16,6 @@
#ifdef USE_UV
#include "transComm.h"
typedef
struct
SConnBuffer
{
char
*
buf
;
int
len
;
int
cap
;
int
left
;
}
SConnBuffer
;
typedef
struct
SConn
{
uv_tcp_t
*
pTcp
;
uv_write_t
*
pWriter
;
...
...
@@ -100,7 +93,8 @@ static void* acceptThread(void* arg);
void
uvAllocReadBufferCb
(
uv_handle_t
*
handle
,
size_t
suggested_size
,
uv_buf_t
*
buf
)
{
/*
* formate of data buffer:
* |<-------SRpcReqContext------->|<------------data read from socket----------->|
* |<--------------------------data from socket------------------------------->|
* |<------STransMsgHead------->|<-------------------other data--------------->|
*/
static
const
int
CAPACITY
=
1024
;
...
...
@@ -133,7 +127,6 @@ void uvAllocReadBufferCb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* b
//
static
bool
readComplete
(
SConnBuffer
*
data
)
{
// TODO(yihao): handle pipeline later
// SRpcHead rpcHead;
STransMsgHead
head
;
int32_t
headLen
=
sizeof
(
head
);
if
(
data
->
len
>=
headLen
)
{
...
...
@@ -270,13 +263,13 @@ static void uvProcessData(SConn* pConn) {
void
uvOnReadCb
(
uv_stream_t
*
cli
,
ssize_t
nread
,
const
uv_buf_t
*
buf
)
{
// opt
SConn
*
c
tx
=
cli
->
data
;
SConnBuffer
*
pBuf
=
&
c
tx
->
connBuf
;
SConn
*
c
onn
=
cli
->
data
;
SConnBuffer
*
pBuf
=
&
c
onn
->
connBuf
;
if
(
nread
>
0
)
{
pBuf
->
len
+=
nread
;
if
(
readComplete
(
pBuf
))
{
tDebug
(
"alread read complete packet"
);
uvProcessData
(
c
tx
);
uvProcessData
(
c
onn
);
}
else
{
tDebug
(
"read half packet, continue to read"
);
}
...
...
@@ -542,6 +535,7 @@ void taosCloseServer(void* arg) {
free
(
srv
->
pipe
);
free
(
srv
->
pThreadObj
);
pthread_join
(
srv
->
thread
,
NULL
);
free
(
srv
);
}
void
rpcSendResponse
(
const
SRpcMsg
*
pMsg
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录