Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
8cf54137
M
milvus
项目概览
milvus
/
milvus
11 个月 前同步成功
通知
261
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,发现更多精彩内容 >>
未验证
提交
8cf54137
编写于
6月 22, 2022
作者:
B
bigsheeper
提交者:
GitHub
6月 22, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add nil check in reduce and add collection rwmutex when release segments (#17698)
Signed-off-by:
N
bigsheeper
<
yihao.dai@zilliz.com
>
上级
a077bad8
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
50 addition
and
5 deletion
+50
-5
internal/querynode/impl.go
internal/querynode/impl.go
+11
-1
internal/querynode/impl_test.go
internal/querynode/impl_test.go
+18
-0
internal/querynode/reduce.go
internal/querynode/reduce.go
+3
-0
internal/querynode/reduce_test.go
internal/querynode/reduce_test.go
+16
-4
internal/querynode/search.go
internal/querynode/search.go
+2
-0
未找到文件。
internal/querynode/impl.go
浏览文件 @
8cf54137
...
...
@@ -349,7 +349,17 @@ func (node *QueryNode) ReleaseSegments(ctx context.Context, in *queryPb.ReleaseS
return
status
,
nil
}
// collection lock is not needed since we guarantee not query/search will be dispatch from leader
collection
,
err
:=
node
.
metaReplica
.
getCollectionByID
(
in
.
CollectionID
)
if
err
!=
nil
{
status
:=
&
commonpb
.
Status
{
ErrorCode
:
commonpb
.
ErrorCode_UnexpectedError
,
Reason
:
fmt
.
Sprintf
(
"cannot find collection %d when ReleaseSegments"
,
in
.
CollectionID
),
}
return
status
,
nil
}
collection
.
Lock
()
defer
collection
.
Unlock
()
for
_
,
id
:=
range
in
.
SegmentIDs
{
switch
in
.
GetScope
()
{
case
queryPb
.
DataScope_Streaming
:
...
...
internal/querynode/impl_test.go
浏览文件 @
8cf54137
...
...
@@ -444,6 +444,24 @@ func TestImpl_ReleaseSegments(t *testing.T) {
assert
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
commonpb
.
ErrorCode_Success
,
status
.
ErrorCode
)
})
wg
.
Add
(
1
)
t
.
Run
(
"test no collection"
,
func
(
t
*
testing
.
T
)
{
defer
wg
.
Done
()
node
,
err
:=
genSimpleQueryNode
(
ctx
)
assert
.
NoError
(
t
,
err
)
err
=
node
.
metaReplica
.
removeCollection
(
defaultCollectionID
)
assert
.
NoError
(
t
,
err
)
req
:=
&
queryPb
.
ReleaseSegmentsRequest
{
Base
:
genCommonMsgBase
(
commonpb
.
MsgType_ReleaseSegments
),
CollectionID
:
defaultCollectionID
,
}
status
,
err
:=
node
.
ReleaseSegments
(
ctx
,
req
)
assert
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
commonpb
.
ErrorCode_UnexpectedError
,
status
.
ErrorCode
)
})
wg
.
Wait
()
}
...
...
internal/querynode/reduce.go
浏览文件 @
8cf54137
...
...
@@ -92,6 +92,9 @@ func reduceSearchResultsAndFillData(plan *SearchPlan, searchResults []*SearchRes
cSearchResults
:=
make
([]
C
.
CSearchResult
,
0
)
for
_
,
res
:=
range
searchResults
{
if
res
==
nil
{
return
nil
,
fmt
.
Errorf
(
"nil searchResult detected when reduceSearchResultsAndFillData"
)
}
cSearchResults
=
append
(
cSearchResults
,
res
.
cSearchResult
)
}
cSearchResultPtr
:=
(
*
C
.
CSearchResult
)(
&
cSearchResults
[
0
])
...
...
internal/querynode/reduce_test.go
浏览文件 @
8cf54137
...
...
@@ -104,8 +104,20 @@ func TestReduce_AllFunc(t *testing.T) {
deleteCollection
(
collection
)
}
func
TestReduce_nilPlan
(
t
*
testing
.
T
)
{
plan
:=
&
SearchPlan
{}
_
,
err
:=
reduceSearchResultsAndFillData
(
plan
,
nil
,
1
,
nil
,
nil
)
assert
.
Error
(
t
,
err
)
func
TestReduce_Invalid
(
t
*
testing
.
T
)
{
t
.
Run
(
"nil plan"
,
func
(
t
*
testing
.
T
)
{
plan
:=
&
SearchPlan
{}
_
,
err
:=
reduceSearchResultsAndFillData
(
plan
,
nil
,
1
,
nil
,
nil
)
assert
.
Error
(
t
,
err
)
})
t
.
Run
(
"nil search result"
,
func
(
t
*
testing
.
T
)
{
collection
:=
newCollection
(
defaultCollectionID
,
genTestCollectionSchema
())
searchReq
,
err
:=
genSearchPlanAndRequests
(
collection
,
IndexHNSW
,
10
)
assert
.
NoError
(
t
,
err
)
searchResults
:=
make
([]
*
SearchResult
,
0
)
searchResults
=
append
(
searchResults
,
nil
)
_
,
err
=
reduceSearchResultsAndFillData
(
searchReq
.
plan
,
searchResults
,
1
,
[]
int32
{
10
},
[]
int32
{
10
})
assert
.
Error
(
t
,
err
)
})
}
internal/querynode/search.go
浏览文件 @
8cf54137
...
...
@@ -20,6 +20,7 @@ import (
"fmt"
"sync"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/metrics"
"github.com/milvus-io/milvus/internal/util/timerecord"
)
...
...
@@ -39,6 +40,7 @@ func searchOnSegments(replica ReplicaInterface, segType segmentType, searchReq *
defer
wg
.
Done
()
seg
,
err
:=
replica
.
getSegmentByID
(
segID
,
segType
)
if
err
!=
nil
{
log
.
Error
(
err
.
Error
())
// should not happen but still ignore it since the result is still correct
return
}
// record search time
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录