Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
7dfc8fbf
M
milvus
项目概览
milvus
/
milvus
9 个月 前同步成功
通知
260
Star
22476
Fork
2472
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
milvus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
7dfc8fbf
编写于
8月 02, 2023
作者:
C
congqixia
提交者:
GitHub
8月 02, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix data race on keepAliveCancel (#26087)
Signed-off-by:
N
Congqi Xia
<
congqi.xia@zilliz.com
>
上级
830f0678
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
16 addition
and
22 deletion
+16
-22
internal/util/sessionutil/session_util.go
internal/util/sessionutil/session_util.go
+14
-20
internal/util/sessionutil/session_util_test.go
internal/util/sessionutil/session_util_test.go
+2
-2
未找到文件。
internal/util/sessionutil/session_util.go
浏览文件 @
7dfc8fbf
...
...
@@ -455,9 +455,7 @@ func (s *Session) processKeepAliveResponse(ch <-chan *clientv3.LeaseKeepAliveRes
select
{
case
<-
s
.
ctx
.
Done
()
:
log
.
Warn
(
"keep alive"
,
zap
.
Error
(
errors
.
New
(
"context done"
)))
if
s
.
keepAliveCancel
!=
nil
{
s
.
keepAliveCancel
()
}
s
.
cancelKeepAlive
()
return
case
resp
,
ok
:=
<-
ch
:
if
!
ok
{
...
...
@@ -803,16 +801,12 @@ func (s *Session) LivenessCheck(ctx context.Context, callback func()) {
case
<-
ctx
.
Done
()
:
log
.
Warn
(
"liveness exits due to context done"
)
// cancel the etcd keepAlive context
if
s
.
keepAliveCancel
!=
nil
{
s
.
keepAliveCancel
()
}
s
.
cancelKeepAlive
()
return
case
resp
,
ok
:=
<-
s
.
watchSessionKeyCh
:
if
!
ok
{
log
.
Warn
(
"watch session key channel closed"
)
if
s
.
keepAliveCancel
!=
nil
{
s
.
keepAliveCancel
()
}
s
.
cancelKeepAlive
()
return
}
if
resp
.
Err
()
!=
nil
{
...
...
@@ -820,17 +814,13 @@ func (s *Session) LivenessCheck(ctx context.Context, callback func()) {
if
resp
.
Err
()
!=
v3rpc
.
ErrCompacted
{
//close event channel
log
.
Warn
(
"Watch service found error"
,
zap
.
Error
(
resp
.
Err
()))
if
s
.
keepAliveCancel
!=
nil
{
s
.
keepAliveCancel
()
}
s
.
cancelKeepAlive
()
return
}
log
.
Warn
(
"Watch service found compacted error"
,
zap
.
Error
(
resp
.
Err
()))
getResp
,
err
:=
s
.
etcdCli
.
Get
(
s
.
ctx
,
s
.
getSessionKey
())
if
err
!=
nil
||
len
(
getResp
.
Kvs
)
==
0
{
if
s
.
keepAliveCancel
!=
nil
{
s
.
keepAliveCancel
()
}
s
.
cancelKeepAlive
()
return
}
s
.
watchSessionKeyCh
=
s
.
etcdCli
.
Watch
(
s
.
ctx
,
s
.
getSessionKey
(),
clientv3
.
WithRev
(
getResp
.
Header
.
Revision
))
...
...
@@ -842,9 +832,7 @@ func (s *Session) LivenessCheck(ctx context.Context, callback func()) {
log
.
Info
(
"register session success"
,
zap
.
String
(
"role"
,
s
.
ServerName
),
zap
.
String
(
"key"
,
string
(
event
.
Kv
.
Key
)))
case
mvccpb
.
DELETE
:
log
.
Info
(
"session key is deleted, exit..."
,
zap
.
String
(
"role"
,
s
.
ServerName
),
zap
.
String
(
"key"
,
string
(
event
.
Kv
.
Key
)))
if
s
.
keepAliveCancel
!=
nil
{
s
.
keepAliveCancel
()
}
s
.
cancelKeepAlive
()
}
}
}
...
...
@@ -852,11 +840,17 @@ func (s *Session) LivenessCheck(ctx context.Context, callback func()) {
}()
}
func
(
s
*
Session
)
Stop
()
{
s
.
Revoke
(
time
.
Second
)
func
(
s
*
Session
)
cancelKeepAlive
()
{
s
.
keepAliveLock
.
Lock
()
defer
s
.
keepAliveLock
.
Unlock
()
if
s
.
keepAliveCancel
!=
nil
{
s
.
keepAliveCancel
()
}
}
func
(
s
*
Session
)
Stop
()
{
s
.
Revoke
(
time
.
Second
)
s
.
cancelKeepAlive
()
s
.
wg
.
Wait
()
}
...
...
internal/util/sessionutil/session_util_test.go
浏览文件 @
7dfc8fbf
...
...
@@ -625,7 +625,7 @@ func TestSessionProcessActiveStandBy(t *testing.T) {
s1
.
LivenessCheck
(
ctx1
,
func
()
{
flag
=
true
signal
<-
struct
{}{}
s1
.
keepAliveCancel
()
s1
.
cancelKeepAlive
()
})
assert
.
False
(
t
,
s1
.
isStandby
.
Load
()
.
(
bool
))
...
...
@@ -875,7 +875,7 @@ func (s *SessionSuite) TestKeepAliveRetryActiveCancel() {
session
.
processKeepAliveResponse
(
ch
)
session
.
LivenessCheck
(
ctx
,
nil
)
// active cancel, should not retry connect
session
.
keepAliveCancel
()
session
.
cancelKeepAlive
()
// sleep a while wait goroutine process
time
.
Sleep
(
time
.
Millisecond
*
100
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录