fix failure to open vector index in mishards (#4910)

* fix #4778

Signed-off-by: yhmo <yihua.mo@zilliz.com>
This commit is contained in:
groot 2021-04-09 15:28:51 +08:00 committed by GitHub
parent ed9d54fcdd
commit f31bf268a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 6 deletions

View File

@ -4,6 +4,7 @@ Please mark all change in change log and use the issue from GitHub
# Milvus 1.1.0 (TBD)
## Bug
- \#4778 Fail to open vector index
- \#4858 Fix the crash when query for a large topk on GPU Flat
- \#4862 The inserted data number increase automatically without any operations
- \#4894 The capacity of bloom filter should be determined by the row count of its segment

View File

@ -1,6 +1,7 @@
*cmake-build-debug*
*cmake-build-release*
*cmake_build*
*build*
*src/index/thirdparty*
*thirdparty*
*easylogging++*

View File

@ -1927,6 +1927,13 @@ DBImpl::QueryAsync(const std::shared_ptr<server::Context>& context, meta::FilesH
LOG_ENGINE_DEBUG_ << LogOut("Engine query begin, index file count: %ld", files.size());
scheduler::SearchJobPtr job = std::make_shared<scheduler::SearchJob>(tracer.Context(), k, extra_params, vectors);
for (auto& file : files) {
// no need to process shadow files
if (file.file_type_ == milvus::engine::meta::SegmentSchema::FILE_TYPE::NEW ||
file.file_type_ == milvus::engine::meta::SegmentSchema::FILE_TYPE::NEW_MERGE ||
file.file_type_ == milvus::engine::meta::SegmentSchema::FILE_TYPE::NEW_INDEX) {
continue;
}
scheduler::SegmentSchemaPtr file_ptr = std::make_shared<meta::SegmentSchema>(file);
job->AddIndexFile(file_ptr);
}

View File

@ -111,14 +111,14 @@ XSearchTask::XSearchTask(const std::shared_ptr<server::Context>& context, Segmen
ascending_reduce = false;
}
EngineType engine_type;
if (file->file_type_ == SegmentSchema::FILE_TYPE::RAW ||
file->file_type_ == SegmentSchema::FILE_TYPE::TO_INDEX ||
file->file_type_ == SegmentSchema::FILE_TYPE::BACKUP) {
// The file may be a raw file, or an index file.
// Deduce the file's engine_type by this rule:
// If the file is a raw file, its file_id is equal to segment id, engine_type is IDMAP
// else if the file is an index file, its file_id is different to segment id, engine_type is index_type
EngineType engine_type = (EngineType)file->engine_type_;
if (file->segment_id_ == file->file_id_) {
engine_type = engine::utils::IsBinaryMetricType(file->metric_type_) ? EngineType::FAISS_BIN_IDMAP
: EngineType::FAISS_IDMAP;
} else {
engine_type = (EngineType)file->engine_type_;
}
milvus::json json_params;