Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
0c3f92d7
M
milvus
项目概览
milvus
/
milvus
11 个月 前同步成功
通知
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 搜索 >>
未验证
提交
0c3f92d7
编写于
6月 21, 2023
作者:
S
SimFG
提交者:
GitHub
6月 21, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Improve the panic code about the rootcoord/session/rocksmq (#24859) (#25024)
Signed-off-by:
N
SimFG
<
bang.fu@zilliz.com
>
上级
b88e74a1
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
42 addition
and
27 deletion
+42
-27
internal/mq/mqimpl/rocksmq/server/rocksmq_impl.go
internal/mq/mqimpl/rocksmq/server/rocksmq_impl.go
+1
-1
internal/mq/mqimpl/rocksmq/server/rocksmq_impl_test.go
internal/mq/mqimpl/rocksmq/server/rocksmq_impl_test.go
+1
-1
internal/rootcoord/dml_channels.go
internal/rootcoord/dml_channels.go
+23
-20
internal/rootcoord/dml_channels_test.go
internal/rootcoord/dml_channels_test.go
+7
-4
internal/util/sessionutil/session_util.go
internal/util/sessionutil/session_util.go
+10
-1
未找到文件。
internal/mq/mqimpl/rocksmq/server/rocksmq_impl.go
浏览文件 @
0c3f92d7
...
...
@@ -1051,7 +1051,7 @@ func (rmq *rocksmq) updateAckedInfo(topicName, groupName string, firstID UniqueI
consumers
,
ok
:=
vals
.
([]
*
Consumer
)
if
!
ok
||
len
(
consumers
)
==
0
{
log
.
Error
(
"update ack with no consumer"
,
zap
.
String
(
"topic"
,
topicName
))
panic
(
"update ack with no consumer"
)
return
nil
}
// find min id of all consumer
...
...
internal/mq/mqimpl/rocksmq/server/rocksmq_impl_test.go
浏览文件 @
0c3f92d7
...
...
@@ -1229,7 +1229,7 @@ func TestRocksmq_updateAckedInfoErr(t *testing.T) {
rmq
.
DestroyConsumerGroup
(
topicName
,
groupName
+
strconv
.
Itoa
(
i
))
}
// update acked for topic without any consumer
assert
.
Panics
(
t
,
func
()
{
rmq
.
updateAckedInfo
(
topicName
,
groupName
,
0
,
ids
[
len
(
ids
)
-
1
])
}
)
assert
.
Nil
(
t
,
rmq
.
updateAckedInfo
(
topicName
,
groupName
,
0
,
ids
[
len
(
ids
)
-
1
])
)
}
func
TestRocksmq_Info
(
t
*
testing
.
T
)
{
...
...
internal/rootcoord/dml_channels.go
浏览文件 @
0c3f92d7
...
...
@@ -24,6 +24,8 @@ import (
"strings"
"sync"
"github.com/cockroachdb/errors"
"github.com/milvus-io/milvus/pkg/metrics"
"go.uber.org/zap"
...
...
@@ -259,14 +261,21 @@ func (d *dmlChannels) getChannelNum() int {
return
len
(
d
.
listChannels
())
}
func
(
d
*
dmlChannels
)
getMsgStreamByName
(
chanName
string
)
(
*
dmlMsgStream
,
error
)
{
v
,
ok
:=
d
.
pool
.
Load
(
chanName
)
if
!
ok
{
log
.
Error
(
"invalid channel name"
,
zap
.
String
(
"chanName"
,
chanName
))
return
nil
,
errors
.
Newf
(
"invalid channel name: %s"
,
chanName
)
}
return
v
.
(
*
dmlMsgStream
),
nil
}
func
(
d
*
dmlChannels
)
broadcast
(
chanNames
[]
string
,
pack
*
msgstream
.
MsgPack
)
error
{
for
_
,
chanName
:=
range
chanNames
{
v
,
ok
:=
d
.
pool
.
Load
(
chanName
)
if
!
ok
{
log
.
Error
(
"invalid channel name"
,
zap
.
String
(
"chanName"
,
chanName
))
panic
(
"invalid channel name: "
+
chanName
)
dms
,
err
:=
d
.
getMsgStreamByName
(
chanName
)
if
err
!=
nil
{
return
err
}
dms
:=
v
.
(
*
dmlMsgStream
)
dms
.
mutex
.
RLock
()
if
dms
.
refcnt
>
0
{
...
...
@@ -284,12 +293,10 @@ func (d *dmlChannels) broadcast(chanNames []string, pack *msgstream.MsgPack) err
func
(
d
*
dmlChannels
)
broadcastMark
(
chanNames
[]
string
,
pack
*
msgstream
.
MsgPack
)
(
map
[
string
][]
byte
,
error
)
{
result
:=
make
(
map
[
string
][]
byte
)
for
_
,
chanName
:=
range
chanNames
{
v
,
ok
:=
d
.
pool
.
Load
(
chanName
)
if
!
ok
{
log
.
Error
(
"invalid channel name"
,
zap
.
String
(
"chanName"
,
chanName
))
panic
(
"invalid channel name: "
+
chanName
)
dms
,
err
:=
d
.
getMsgStreamByName
(
chanName
)
if
err
!=
nil
{
return
result
,
err
}
dms
:=
v
.
(
*
dmlMsgStream
)
dms
.
mutex
.
RLock
()
if
dms
.
refcnt
>
0
{
...
...
@@ -313,12 +320,10 @@ func (d *dmlChannels) broadcastMark(chanNames []string, pack *msgstream.MsgPack)
func
(
d
*
dmlChannels
)
addChannels
(
names
...
string
)
{
for
_
,
name
:=
range
names
{
v
,
ok
:=
d
.
pool
.
Load
(
name
)
if
!
ok
{
log
.
Error
(
"invalid channel name"
,
zap
.
String
(
"chanName"
,
name
))
panic
(
"invalid channel name: "
+
name
)
dms
,
err
:=
d
.
getMsgStreamByName
(
name
)
if
err
!=
nil
{
continue
}
dms
:=
v
.
(
*
dmlMsgStream
)
d
.
mut
.
Lock
()
dms
.
IncRefcnt
()
...
...
@@ -329,12 +334,10 @@ func (d *dmlChannels) addChannels(names ...string) {
func
(
d
*
dmlChannels
)
removeChannels
(
names
...
string
)
{
for
_
,
name
:=
range
names
{
v
,
ok
:=
d
.
pool
.
Load
(
name
)
if
!
ok
{
log
.
Error
(
"invalid channel name"
,
zap
.
String
(
"chanName"
,
name
))
panic
(
"invalid channel name: "
+
name
)
dms
,
err
:=
d
.
getMsgStreamByName
(
name
)
if
err
!=
nil
{
continue
}
dms
:=
v
.
(
*
dmlMsgStream
)
d
.
mut
.
Lock
()
dms
.
DecRefCnt
()
...
...
internal/rootcoord/dml_channels_test.go
浏览文件 @
0c3f92d7
...
...
@@ -138,10 +138,13 @@ func TestDmlChannels(t *testing.T) {
assert
.
Equal
(
t
,
0
,
len
(
chanNames
))
randStr
:=
funcutil
.
RandomString
(
8
)
assert
.
Panics
(
t
,
func
()
{
dml
.
addChannels
(
randStr
)
})
assert
.
Panics
(
t
,
func
()
{
dml
.
broadcast
([]
string
{
randStr
},
nil
)
})
assert
.
Panics
(
t
,
func
()
{
dml
.
broadcastMark
([]
string
{
randStr
},
nil
)
})
assert
.
Panics
(
t
,
func
()
{
dml
.
removeChannels
(
randStr
)
})
dml
.
addChannels
(
randStr
)
assert
.
Error
(
t
,
dml
.
broadcast
([]
string
{
randStr
},
nil
))
{
_
,
err
:=
dml
.
broadcastMark
([]
string
{
randStr
},
nil
)
assert
.
Error
(
t
,
err
)
}
dml
.
removeChannels
(
randStr
)
chans0
:=
dml
.
getChannelNames
(
2
)
dml
.
addChannels
(
chans0
...
)
...
...
internal/util/sessionutil/session_util.go
浏览文件 @
0c3f92d7
...
...
@@ -359,7 +359,16 @@ func (s *Session) getSessionKey() string {
}
func
(
s
*
Session
)
initWatchSessionCh
()
{
getResp
,
err
:=
s
.
etcdCli
.
Get
(
context
.
Background
(),
s
.
getSessionKey
())
var
(
err
error
getResp
*
clientv3
.
GetResponse
)
err
=
retry
.
Do
(
context
.
Background
(),
func
()
error
{
getResp
,
err
=
s
.
etcdCli
.
Get
(
context
.
Background
(),
s
.
getSessionKey
())
log
.
Warn
(
"fail to get the session key from the etcd"
,
zap
.
Error
(
err
))
return
err
},
retry
.
Attempts
(
100
))
if
err
!=
nil
{
panic
(
err
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录