Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
cd79fd07
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,发现更多精彩内容 >>
未验证
提交
cd79fd07
编写于
11月 03, 2021
作者:
Z
zhenshan.cao
提交者:
GitHub
11月 03, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix timetravel bug on sealed segment (#11152)
Signed-off-by:
N
zhenshan.cao
<
zhenshan.cao@zilliz.com
>
上级
e059c99a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
107 addition
and
2 deletion
+107
-2
internal/core/src/query/visitors/ExecPlanNodeVisitor.cpp
internal/core/src/query/visitors/ExecPlanNodeVisitor.cpp
+2
-0
internal/core/unittest/test_c_api.cpp
internal/core/unittest/test_c_api.cpp
+105
-2
未找到文件。
internal/core/src/query/visitors/ExecPlanNodeVisitor.cpp
浏览文件 @
cd79fd07
...
...
@@ -102,6 +102,8 @@ ExecPlanNodeVisitor::VectorVisitorImpl(VectorPlanNode& node) {
ExecExprVisitor
::
RetType
expr_ret
=
ExecExprVisitor
(
*
segment
,
active_count
,
timestamp_
).
call_child
(
*
node
.
predicate_
.
value
());
bitset_holder
=
std
::
move
(
expr_ret
);
}
else
{
bitset_holder
.
resize
(
active_count
,
true
);
}
segment
->
mask_with_timestamps
(
bitset_holder
,
timestamp_
);
...
...
internal/core/unittest/test_c_api.cpp
浏览文件 @
cd79fd07
...
...
@@ -239,6 +239,11 @@ TEST(CApiTest, SearchTest) {
auto
[
raw_data
,
timestamps
,
uids
]
=
generate_data
(
N
);
auto
line_sizeof
=
(
sizeof
(
int
)
+
sizeof
(
float
)
*
DIM
);
int64_t
ts_offset
=
1000
;
for
(
int
i
=
0
;
i
<
N
;
i
++
)
{
timestamps
[
i
]
=
ts_offset
+
i
;
}
int64_t
offset
;
PreInsert
(
segment
,
N
,
&
offset
);
...
...
@@ -279,12 +284,17 @@ TEST(CApiTest, SearchTest) {
timestamps
.
push_back
(
1
);
CSearchResult
search_result
;
auto
res
=
Search
(
segment
,
plan
,
placeholderGroup
,
timestamps
[
0
]
,
&
search_result
);
auto
res
=
Search
(
segment
,
plan
,
placeholderGroup
,
N
+
ts_offset
,
&
search_result
);
ASSERT_EQ
(
res
.
error_code
,
Success
);
CSearchResult
search_result2
;
auto
res2
=
Search
(
segment
,
plan
,
placeholderGroup
,
ts_offset
,
&
search_result2
);
ASSERT_EQ
(
res2
.
error_code
,
Success
);
DeleteSearchPlan
(
plan
);
DeletePlaceholderGroup
(
placeholderGroup
);
DeleteSearchResult
(
search_result
);
DeleteSearchResult
(
search_result2
);
DeleteCollection
(
collection
);
DeleteSegment
(
segment
);
}
...
...
@@ -2420,6 +2430,99 @@ TEST(CApiTest, SealedSegment_search_float_Predicate_Range) {
DeleteSegment
(
segment
);
}
TEST
(
CApiTest
,
SealedSegment_search_without_predicates
)
{
constexpr
auto
TOPK
=
5
;
std
::
string
schema_string
=
generate_collection_schema
(
"L2"
,
DIM
,
false
);
auto
collection
=
NewCollection
(
schema_string
.
c_str
());
auto
schema
=
((
segcore
::
Collection
*
)
collection
)
->
get_schema
();
auto
segment
=
NewSegment
(
collection
,
0
,
Sealed
);
auto
N
=
ROW_COUNT
;
uint64_t
ts_offset
=
1000
;
auto
dataset
=
DataGen
(
schema
,
N
,
ts_offset
);
auto
vec_col
=
dataset
.
get_col
<
float
>
(
0
);
auto
counter_col
=
dataset
.
get_col
<
int64_t
>
(
1
);
auto
query_ptr
=
vec_col
.
data
()
+
42000
*
DIM
;
const
char
*
dsl_string
=
R"(
{
"bool": {
"vector": {
"fakevec": {
"metric_type": "L2",
"params": {
"nprobe": 10
},
"query": "$0",
"topk": 5,
"round_decimal": -1
}
}
}
})"
;
auto
c_vec_field_data
=
CLoadFieldDataInfo
{
100
,
vec_col
.
data
(),
N
,
};
auto
status
=
LoadFieldData
(
segment
,
c_vec_field_data
);
assert
(
status
.
error_code
==
Success
);
auto
c_counter_field_data
=
CLoadFieldDataInfo
{
101
,
counter_col
.
data
(),
N
,
};
status
=
LoadFieldData
(
segment
,
c_counter_field_data
);
assert
(
status
.
error_code
==
Success
);
auto
c_id_field_data
=
CLoadFieldDataInfo
{
0
,
counter_col
.
data
(),
N
,
};
status
=
LoadFieldData
(
segment
,
c_id_field_data
);
assert
(
status
.
error_code
==
Success
);
auto
c_ts_field_data
=
CLoadFieldDataInfo
{
1
,
counter_col
.
data
(),
N
,
};
status
=
LoadFieldData
(
segment
,
c_ts_field_data
);
assert
(
status
.
error_code
==
Success
);
int
num_queries
=
10
;
auto
blob
=
generate_query_data
(
num_queries
);
void
*
plan
=
nullptr
;
status
=
CreateSearchPlan
(
collection
,
dsl_string
,
&
plan
);
ASSERT_EQ
(
status
.
error_code
,
Success
);
void
*
placeholderGroup
=
nullptr
;
status
=
ParsePlaceholderGroup
(
plan
,
blob
.
data
(),
blob
.
length
(),
&
placeholderGroup
);
ASSERT_EQ
(
status
.
error_code
,
Success
);
std
::
vector
<
CPlaceholderGroup
>
placeholderGroups
;
placeholderGroups
.
push_back
(
placeholderGroup
);
CSearchResult
search_result
;
auto
res
=
Search
(
segment
,
plan
,
placeholderGroup
,
N
+
ts_offset
,
&
search_result
);
std
::
cout
<<
res
.
error_msg
<<
std
::
endl
;
ASSERT_EQ
(
res
.
error_code
,
Success
);
CSearchResult
search_result2
;
auto
res2
=
Search
(
segment
,
plan
,
placeholderGroup
,
ts_offset
,
&
search_result
);
ASSERT_EQ
(
res2
.
error_code
,
Success
);
DeleteSearchPlan
(
plan
);
DeletePlaceholderGroup
(
placeholderGroup
);
DeleteSearchResult
(
search_result
);
DeleteSearchResult
(
search_result2
);
DeleteCollection
(
collection
);
DeleteSegment
(
segment
);
}
TEST
(
CApiTest
,
SealedSegment_search_float_With_Expr_Predicate_Range
)
{
constexpr
auto
TOPK
=
5
;
...
...
@@ -2585,4 +2688,4 @@ TEST(CApiTest, SealedSegment_search_float_With_Expr_Predicate_Range) {
DeleteSearchResult
(
c_search_result_on_bigIndex
);
DeleteCollection
(
collection
);
DeleteSegment
(
segment
);
}
\ No newline at end of file
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录