diff --git a/internal/core/src/segcore/ScalarIndex.h b/internal/core/src/segcore/ScalarIndex.h index 734e797a834923d2104537fd66a5450f1b275e22..25e2c53efb47605651c1c446de1a908d812e216f 100644 --- a/internal/core/src/segcore/ScalarIndex.h +++ b/internal/core/src/segcore/ScalarIndex.h @@ -16,6 +16,7 @@ #include #include +#include #include namespace milvus::segcore { @@ -25,6 +26,8 @@ class ScalarIndexBase { virtual std::pair, std::vector> do_search_ids(const IdArray& ids) const = 0; virtual ~ScalarIndexBase() = default; + virtual std::string + debug() const = 0; }; class ScalarIndexVector : public ScalarIndexBase { @@ -41,6 +44,15 @@ class ScalarIndexVector : public ScalarIndexBase { std::pair, std::vector> do_search_ids(const IdArray& ids) const override; + std::string + debug() const override { + std::string dbg_str; + for (auto pr : mapping_) { + dbg_str += "<" + std::to_string(pr.first) + "->" + std::to_string(pr.second.get()) + ">"; + } + return dbg_str; + } + private: std::vector> mapping_; }; diff --git a/internal/core/src/segcore/SegmentGrowingImpl.cpp b/internal/core/src/segcore/SegmentGrowingImpl.cpp index 0356d91a9ef44632d4bb21238333fa6936d44e68..f24fffce9ef4edde7d20d2bcd8834cc2702b6c49 100644 --- a/internal/core/src/segcore/SegmentGrowingImpl.cpp +++ b/internal/core/src/segcore/SegmentGrowingImpl.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include "query/generated/ExecPlanNodeVisitor.h" #include "segcore/SegmentGrowingImpl.h" #include "query/PlanNode.h" @@ -486,4 +487,9 @@ SegmentGrowingImpl::search_ids(const IdArray& id_array, Timestamp timestamp) con return {std::move(res_id_arr), std::move(res_offsets)}; } +std::string +SegmentGrowingImpl::debug() const { + return "Growing\n"; +} + } // namespace milvus::segcore diff --git a/internal/core/src/segcore/SegmentGrowingImpl.h b/internal/core/src/segcore/SegmentGrowingImpl.h index 9b7190f12b303843ff2034cbf3dea7db033f8f13..55330d010624b2bc2fbe7485897d416089fba91a 100644 --- a/internal/core/src/segcore/SegmentGrowingImpl.h +++ b/internal/core/src/segcore/SegmentGrowingImpl.h @@ -31,6 +31,7 @@ #include "InsertRecord.h" #include #include +#include #include namespace milvus::segcore { @@ -69,6 +70,9 @@ class SegmentGrowingImpl : public SegmentGrowing { int64_t GetMemoryUsageInBytes() const override; + std::string + debug() const override; + public: const InsertRecord& get_insert_record() const { diff --git a/internal/core/src/segcore/SegmentInterface.cpp b/internal/core/src/segcore/SegmentInterface.cpp index 5f5f20419bc674e142ec9384549aa9167acddd6d..924bc07d0f22ee3b20fafb2bfdea2c98fe67940c 100644 --- a/internal/core/src/segcore/SegmentInterface.cpp +++ b/internal/core/src/segcore/SegmentInterface.cpp @@ -197,6 +197,13 @@ SegmentInternalInterface::GetEntityById(const std::vector& field_of auto results = std::make_unique(); auto [ids_, seg_offsets] = search_ids(id_array, timestamp); + + // std::string dbg_log; + // dbg_log += "id_array:" + id_array.DebugString() + "\n"; + // dbg_log += "ids:" + ids_->DebugString() + "\n"; + // dbg_log += "segment_info:" + this->debug(); + // std::cout << dbg_log << std::endl; + results->set_allocated_ids(ids_.release()); auto fields_data = results->mutable_fields_data(); diff --git a/internal/core/src/segcore/SegmentInterface.h b/internal/core/src/segcore/SegmentInterface.h index ee0dafe0120c5a8571440ec0d84a9a1e1b2347e8..6394190068b4c81bd466a0a5ae2816d6015fd8ce 100644 --- a/internal/core/src/segcore/SegmentInterface.h +++ b/internal/core/src/segcore/SegmentInterface.h @@ -22,6 +22,7 @@ #include #include #include +#include namespace milvus::segcore { @@ -93,6 +94,9 @@ class SegmentInternalInterface : public SegmentInterface { const IdArray& id_array, Timestamp timestamp) const override; + virtual std::string + debug() const = 0; + public: virtual void vector_search(int64_t vec_count, diff --git a/internal/core/src/segcore/SegmentSealedImpl.cpp b/internal/core/src/segcore/SegmentSealedImpl.cpp index f4ea6d6c28d4a687668d588326f78779ca0cd25a..fdf35b71c5144ece6a30f7c2a247042c297aa2c8 100644 --- a/internal/core/src/segcore/SegmentSealedImpl.cpp +++ b/internal/core/src/segcore/SegmentSealedImpl.cpp @@ -74,14 +74,23 @@ SegmentSealedImpl::LoadFieldData(const LoadFieldDataInfo& info) { // prepare data aligned_vector vec_data(info.row_count); std::copy_n(src_ptr, info.row_count, vec_data.data()); - auto pk_index = create_index(vec_data.data(), vec_data.size()); + + std::unique_ptr pk_index_; + // fix unintentional index update + if (schema_->get_is_auto_id()) { + pk_index_ = create_index(vec_data.data(), vec_data.size()); + } // write data under lock std::unique_lock lck(mutex_); update_row_count(info.row_count); AssertInfo(row_ids_.empty(), "already exists"); row_ids_ = std::move(vec_data); - primary_key_index_ = std::move(pk_index); + + if (schema_->get_is_auto_id()) { + primary_key_index_ = std::move(pk_index_); + } + ++system_ready_count_; } else { // prepare data @@ -118,6 +127,7 @@ SegmentSealedImpl::LoadFieldData(const LoadFieldDataInfo& info) { field_datas_[field_offset.get()] = std::move(vec_data); scalar_indexings_[field_offset.get()] = std::move(index); } + if (schema_->get_primary_key_offset() == field_offset) { primary_key_index_ = std::move(pk_index_); } @@ -410,6 +420,15 @@ SegmentSealedImpl::search_ids(const IdArray& id_array, Timestamp timestamp) cons return primary_key_index_->do_search_ids(id_array); } +std::string +SegmentSealedImpl::debug() const { + std::string log_str; + log_str += "Sealed\n"; + log_str += "Index:" + primary_key_index_->debug(); + log_str += "\n"; + return log_str; +} + SegmentSealedPtr CreateSealedSegment(SchemaPtr schema) { return std::make_unique(schema); diff --git a/internal/core/src/segcore/SegmentSealedImpl.h b/internal/core/src/segcore/SegmentSealedImpl.h index bdbab769826d0d2db117f13f86f2d508d864139e..e431aa73c8b46f5a0ba2c96fa3d16ea2be5ee6d5 100644 --- a/internal/core/src/segcore/SegmentSealedImpl.h +++ b/internal/core/src/segcore/SegmentSealedImpl.h @@ -17,6 +17,7 @@ #include #include #include +#include namespace milvus::segcore { class SegmentSealedImpl : public SegmentSealed { @@ -57,6 +58,9 @@ class SegmentSealedImpl : public SegmentSealed { int64_t size_per_chunk() const override; + std::string + debug() const override; + protected: // blob and row_count SpanBase diff --git a/internal/core/src/segcore/segment_c.cpp b/internal/core/src/segcore/segment_c.cpp index 3cb7fc9c7fc855317b4295eef3efc936564bd545..a6bd27bf41576c59113f4a4999ad040f09573cb0 100644 --- a/internal/core/src/segcore/segment_c.cpp +++ b/internal/core/src/segcore/segment_c.cpp @@ -22,6 +22,7 @@ #include #include "common/Types.h" #include "common/CGoHelper.h" +#include ////////////////////////////// common interfaces ////////////////////////////// CSegmentInterface