From f31bf268a236f4ec16ea6af75a2200e65d3e68fb Mon Sep 17 00:00:00 2001 From: groot Date: Fri, 9 Apr 2021 15:28:51 +0800 Subject: [PATCH] fix failure to open vector index in mishards (#4910) * fix #4778 Signed-off-by: yhmo --- CHANGELOG.md | 1 + core/build-support/lint_exclusions.txt | 1 + core/src/db/DBImpl.cpp | 7 +++++++ core/src/scheduler/task/SearchTask.cpp | 12 ++++++------ 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21a8720adc..610bb3e8b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/core/build-support/lint_exclusions.txt b/core/build-support/lint_exclusions.txt index 36a872f912..cbba7b3100 100644 --- a/core/build-support/lint_exclusions.txt +++ b/core/build-support/lint_exclusions.txt @@ -1,6 +1,7 @@ *cmake-build-debug* *cmake-build-release* *cmake_build* +*build* *src/index/thirdparty* *thirdparty* *easylogging++* diff --git a/core/src/db/DBImpl.cpp b/core/src/db/DBImpl.cpp index 5693a98bde..ce6858d1f1 100644 --- a/core/src/db/DBImpl.cpp +++ b/core/src/db/DBImpl.cpp @@ -1927,6 +1927,13 @@ DBImpl::QueryAsync(const std::shared_ptr& context, meta::FilesH LOG_ENGINE_DEBUG_ << LogOut("Engine query begin, index file count: %ld", files.size()); scheduler::SearchJobPtr job = std::make_shared(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(file); job->AddIndexFile(file_ptr); } diff --git a/core/src/scheduler/task/SearchTask.cpp b/core/src/scheduler/task/SearchTask.cpp index f04c1aed61..b74ef08c8c 100644 --- a/core/src/scheduler/task/SearchTask.cpp +++ b/core/src/scheduler/task/SearchTask.cpp @@ -111,14 +111,14 @@ XSearchTask::XSearchTask(const std::shared_ptr& 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;