Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
2eb8cc45
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1185
Star
22015
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看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
2eb8cc45
编写于
6月 14, 2020
作者:
S
Shengliang Guan
提交者:
GitHub
6月 14, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2274 from taosdata/feature/rpcCancel
add rpcCancelRequest API
上级
a607ef21
6380afb6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
21 addition
and
3 deletion
+21
-3
src/inc/trpc.h
src/inc/trpc.h
+2
-1
src/rpc/src/rpcMain.c
src/rpc/src/rpcMain.c
+19
-2
未找到文件。
src/inc/trpc.h
浏览文件 @
2eb8cc45
...
...
@@ -78,12 +78,13 @@ void rpcClose(void *);
void
*
rpcMallocCont
(
int
contLen
);
void
rpcFreeCont
(
void
*
pCont
);
void
*
rpcReallocCont
(
void
*
ptr
,
int
contLen
);
void
rpcSendRequest
(
void
*
thandle
,
const
SRpcIpSet
*
pIpSet
,
const
SRpcMsg
*
pMsg
);
void
*
rpcSendRequest
(
void
*
thandle
,
const
SRpcIpSet
*
pIpSet
,
const
SRpcMsg
*
pMsg
);
void
rpcSendResponse
(
const
SRpcMsg
*
pMsg
);
void
rpcSendRedirectRsp
(
void
*
pConn
,
const
SRpcIpSet
*
pIpSet
);
int
rpcGetConnInfo
(
void
*
thandle
,
SRpcConnInfo
*
pInfo
);
void
rpcSendRecv
(
void
*
shandle
,
SRpcIpSet
*
pIpSet
,
const
SRpcMsg
*
pReq
,
SRpcMsg
*
pRsp
);
int
rpcReportProgress
(
void
*
pConn
,
char
*
pCont
,
int
contLen
);
void
rpcCanelRequest
(
void
*
pContext
);
#ifdef __cplusplus
}
...
...
src/rpc/src/rpcMain.c
浏览文件 @
2eb8cc45
...
...
@@ -73,6 +73,7 @@ typedef struct {
SRpcInfo
*
pRpc
;
// associated SRpcInfo
SRpcIpSet
ipSet
;
// ip list provided by app
void
*
ahandle
;
// handle provided by app
struct
SRpcConn
*
pConn
;
// pConn allocated
char
msgType
;
// message type
uint8_t
*
pCont
;
// content provided by app
int32_t
contLen
;
// content length
...
...
@@ -339,7 +340,7 @@ void *rpcReallocCont(void *ptr, int contLen) {
return
start
+
sizeof
(
SRpcReqContext
)
+
sizeof
(
SRpcHead
);
}
void
rpcSendRequest
(
void
*
shandle
,
const
SRpcIpSet
*
pIpSet
,
const
SRpcMsg
*
pMsg
)
{
void
*
rpcSendRequest
(
void
*
shandle
,
const
SRpcIpSet
*
pIpSet
,
const
SRpcMsg
*
pMsg
)
{
SRpcInfo
*
pRpc
=
(
SRpcInfo
*
)
shandle
;
SRpcReqContext
*
pContext
;
...
...
@@ -367,7 +368,7 @@ void rpcSendRequest(void *shandle, const SRpcIpSet *pIpSet, const SRpcMsg *pMsg)
rpcSendReqToServer
(
pRpc
,
pContext
);
return
;
return
pContext
;
}
void
rpcSendResponse
(
const
SRpcMsg
*
pRsp
)
{
...
...
@@ -501,6 +502,19 @@ int rpcReportProgress(void *handle, char *pCont, int contLen) {
return
-
1
;
}
/* todo: cancel process may have race condition, pContext may have been released
just before app calls the rpcCancelRequest */
void
rpcCancelRequest
(
void
*
handle
)
{
SRpcReqContext
*
pContext
=
handle
;
if
(
pContext
->
pConn
)
{
tTrace
(
"%s, app trys to cancel request"
,
pContext
->
pConn
->
info
);
rpcCloseConn
(
pContext
->
pConn
);
pContext
->
pConn
=
NULL
;
rpcFreeCont
(
pContext
->
pCont
);
}
}
static
void
rpcFreeMsg
(
void
*
msg
)
{
if
(
msg
)
{
char
*
temp
=
(
char
*
)
msg
-
sizeof
(
SRpcReqContext
);
...
...
@@ -874,6 +888,7 @@ static void rpcReportBrokenLinkToServer(SRpcConn *pConn) {
SRpcMsg
rpcMsg
;
rpcMsg
.
pCont
=
pConn
->
pReqMsg
;
// pReqMsg is re-used to store the APP context from server
rpcMsg
.
contLen
=
pConn
->
reqMsgLen
;
// reqMsgLen is re-used to store the APP context length
rpcMsg
.
ahandle
=
pConn
->
ahandle
;
rpcMsg
.
handle
=
pConn
;
rpcMsg
.
msgType
=
pConn
->
inType
;
rpcMsg
.
code
=
TSDB_CODE_RPC_NETWORK_UNAVAIL
;
...
...
@@ -942,6 +957,7 @@ static void *rpcProcessMsgFromPeer(SRecvInfo *pRecv) {
static
void
rpcNotifyClient
(
SRpcReqContext
*
pContext
,
SRpcMsg
*
pMsg
)
{
SRpcInfo
*
pRpc
=
pContext
->
pRpc
;
pContext
->
pConn
=
NULL
;
if
(
pContext
->
pRsp
)
{
// for synchronous API
memcpy
(
pContext
->
pSet
,
&
pContext
->
ipSet
,
sizeof
(
SRpcIpSet
));
...
...
@@ -1110,6 +1126,7 @@ static void rpcSendReqToServer(SRpcInfo *pRpc, SRpcReqContext *pContext) {
return
;
}
pContext
->
pConn
=
pConn
;
pConn
->
ahandle
=
pContext
->
ahandle
;
rpcLockConn
(
pConn
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录