fix:Chunk Id out of range in vector BF search, after the growing index removes the vec chunks. (#36939)

issue: https://github.com/milvus-io/milvus/issues/36871
related pr: https://github.com/milvus-io/milvus/pull/36938

Signed-off-by: cqy123456 <qianya.cheng@zilliz.com>
pull/36927/head
cqy123456 2024-10-18 12:21:25 +08:00 committed by GitHub
parent fbe177d6e7
commit 304098cd40
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 7 additions and 2 deletions

View File

@ -94,6 +94,13 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
FloatSegmentIndexSearch(
segment, info, query_data, num_queries, bitset, search_result);
} else {
std::shared_lock<std::shared_mutex> read_chunk_mutex(
segment.get_chunk_mutex());
// check SyncDataWithIndex() again, in case the vector chunks has been removed.
if (segment.get_indexing_record().SyncDataWithIndex(field.get_id())) {
return FloatSegmentIndexSearch(
segment, info, query_data, num_queries, bitset, search_result);
}
SubSearchResult final_qr(num_queries, topk, metric_type, round_decimal);
// TODO(SPARSE): see todo in PlanImpl.h::PlaceHolder.
auto dim = field.get_data_type() == DataType::VECTOR_SPARSE_FLOAT
@ -101,8 +108,6 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
: field.get_dim();
dataset::SearchDataset search_dataset{
metric_type, num_queries, topk, round_decimal, dim, query_data};
std::shared_lock<std::shared_mutex> read_chunk_mutex(
segment.get_chunk_mutex());
int32_t current_chunk_id = 0;
// step 3: brute force search where small indexing is unavailable
auto vec_ptr = record.get_data_base(vecfield_id);