diff --git a/core/src/dog_segment/Collection.cpp b/core/src/dog_segment/Collection.cpp index d97c0fe92b..e16e4a08a8 100644 --- a/core/src/dog_segment/Collection.cpp +++ b/core/src/dog_segment/Collection.cpp @@ -1,20 +1,123 @@ #include "Collection.h" #include "pb/master.pb.h" -//using Collection = masterpb::Collection; +#include "pb/message.pb.h" #include +#include + namespace milvus::dog_segment { + Collection::Collection(std::string &collection_name, std::string &schema): collection_name_(collection_name), schema_json_(schema) { parse(); } + void -Collection::set_index() {} +Collection::AddIndex(const grpc::IndexParam& index_param) { + + auto& index_name = index_param.index_name(); + auto& field_name = index_param.field_name(); + + assert(!index_name.empty()); + assert(!field_name.empty()); + + auto index_type = knowhere::IndexEnum::INDEX_FAISS_IVFPQ; + auto index_mode = knowhere::IndexMode::MODE_CPU; + knowhere::Config index_conf; + + bool found_index_type = false; + bool found_index_mode = false; + bool found_index_conf = false; + + auto extra_params = index_param.extra_params(); + for (auto& extra_param: extra_params) { + if (extra_param.key() == "index_type") { + index_type = extra_param.value().data(); + found_index_type = true; + continue; + } + if (extra_param.key() == "index_mode") { + auto index_mode_int = stoi(extra_param.value()); + if (index_mode_int == 0) { + found_index_mode = true; + continue; + } else if (index_mode_int == 1) { + index_mode = knowhere::IndexMode::MODE_GPU; + found_index_mode = true; + continue; + } else { + throw std::runtime_error("Illegal index mode, only 0 or 1 is supported."); + } + } + if (extra_param.key() == "params") { + index_conf = nlohmann::json::parse(extra_param.value()); + found_index_conf = true; + continue; + } + } + + if (!found_index_type) { + std::cout << "WARN: Not specify index type, use default index type: INDEX_FAISS_IVFPQ" << std::endl; + } + if (!found_index_mode) { + std::cout << "WARN: Not specify index mode, use default index mode: MODE_CPU" << std::endl; + } + if (!found_index_conf) { + int dim = 0; + + for (auto& field: schema_->get_fields()) { + if (field.get_data_type() == DataType::VECTOR_FLOAT) { + dim = field.get_dim(); + } + } + assert(dim != 0); + + index_conf = milvus::knowhere::Config{ + {knowhere::meta::DIM, dim}, + {knowhere::IndexParams::nlist, 100}, + {knowhere::IndexParams::nprobe, 4}, + {knowhere::IndexParams::m, 4}, + {knowhere::IndexParams::nbits, 8}, + {knowhere::Metric::TYPE, milvus::knowhere::Metric::L2}, + {knowhere::meta::DEVICEID, 0}, + }; + std::cout << "WARN: Not specify index config, use default index config" << std::endl; + } + + index_->AddEntry(index_name, field_name, index_type, index_mode, index_conf); +} + + +void +Collection::CreateIndex(std::string &index_config) { + if(index_config.empty()) { + index_ = nullptr; + std::cout << "null index config when create index" << std::endl; + return; + } + + masterpb::Collection collection; + auto suc = google::protobuf::TextFormat::ParseFromString(index_config, &collection); + + if (!suc) { + std::cerr << "unmarshal index string failed" << std::endl; + } + + index_ = std::make_shared(schema_); + + for (const auto &index: collection.indexes()){ + std::cout << "add index, index name =" << index.index_name() + << ", field_name = " << index.field_name() + << std::endl; + AddIndex(index); + } +} + void Collection::parse() { - if(schema_json_ == "") { + if(schema_json_.empty()) { auto schema = std::make_shared(); schema->AddField("fakevec", DataType::VECTOR_FLOAT, 16); schema->AddField("age", DataType::INT32); @@ -27,12 +130,12 @@ Collection::parse() { if (!suc) { - std::cerr << "unmarshal failed" << std::endl; + std::cerr << "unmarshal schema string failed" << std::endl; } auto schema = std::make_shared(); for (const milvus::grpc::FieldMeta & child: collection.schema().field_metas()){ - std::cout<<"add Field, name :" << child.field_name() << ", datatype :" << child.type() << ", dim :" << int(child.dim()) << std::endl; - schema->AddField(std::string_view(child.field_name()), DataType {child.type()}, int(child.dim())); + std::cout<<"add Field, name :" << child.field_name() << ", datatype :" << child.type() << ", dim :" << int(child.dim()) << std::endl; + schema->AddField(std::string_view(child.field_name()), DataType {child.type()}, int(child.dim())); } /* schema->AddField("fakevec", DataType::VECTOR_FLOAT, 16); diff --git a/core/src/dog_segment/Collection.h b/core/src/dog_segment/Collection.h index c0718c203b..be8115d65c 100644 --- a/core/src/dog_segment/Collection.h +++ b/core/src/dog_segment/Collection.h @@ -1,5 +1,6 @@ #pragma once +#include #include "dog_segment/Partition.h" #include "SegmentDefs.h" @@ -9,10 +10,10 @@ class Collection { public: explicit Collection(std::string &collection_name, std::string &schema); - // TODO: set index - void set_index(); + void AddIndex(const grpc::IndexParam &index_param); + + void CreateIndex(std::string &index_config); - // TODO: config to schema void parse(); public: @@ -20,13 +21,16 @@ public: return schema_; } + IndexMetaPtr& get_index() { + return index_; + } + std::string& get_collection_name() { return collection_name_; } private: - // TODO: add Index ptr - // IndexPtr index_ = nullptr; + IndexMetaPtr index_; std::string collection_name_; std::string schema_json_; SchemaPtr schema_; diff --git a/core/src/dog_segment/Partition.cpp b/core/src/dog_segment/Partition.cpp index 0772e02f0a..99604dc2fc 100644 --- a/core/src/dog_segment/Partition.cpp +++ b/core/src/dog_segment/Partition.cpp @@ -2,7 +2,7 @@ namespace milvus::dog_segment { -Partition::Partition(std::string& partition_name, SchemaPtr& schema): - partition_name_(partition_name), schema_(schema) {} +Partition::Partition(std::string& partition_name, SchemaPtr& schema, IndexMetaPtr& index): + partition_name_(partition_name), schema_(schema), index_(index) {} } diff --git a/core/src/dog_segment/Partition.h b/core/src/dog_segment/Partition.h index c7ebd80951..162d13a0f4 100644 --- a/core/src/dog_segment/Partition.h +++ b/core/src/dog_segment/Partition.h @@ -6,13 +6,17 @@ namespace milvus::dog_segment { class Partition { public: - explicit Partition(std::string& partition_name, SchemaPtr& schema); + explicit Partition(std::string& partition_name, SchemaPtr& schema, IndexMetaPtr& index); public: SchemaPtr& get_schema() { return schema_; } + IndexMetaPtr& get_index() { + return index_; + } + std::string& get_partition_name() { return partition_name_; } @@ -20,6 +24,7 @@ public: private: std::string partition_name_; SchemaPtr schema_; + IndexMetaPtr index_; }; using PartitionPtr = std::unique_ptr; diff --git a/core/src/dog_segment/collection_c.cpp b/core/src/dog_segment/collection_c.cpp index 995b225631..ab533d5ebe 100644 --- a/core/src/dog_segment/collection_c.cpp +++ b/core/src/dog_segment/collection_c.cpp @@ -21,3 +21,9 @@ DeleteCollection(CCollection collection) { std::cout << "delete collection " << col->get_collection_name() << std::endl; delete col; } + +void UpdateIndexs(CCollection c_collection, const char *index_string) { + auto c = (milvus::dog_segment::Collection*)c_collection; + std::string s(index_string); + c->CreateIndex(s); +} diff --git a/core/src/dog_segment/collection_c.h b/core/src/dog_segment/collection_c.h index 5d3c8aea2f..59e7520c04 100644 --- a/core/src/dog_segment/collection_c.h +++ b/core/src/dog_segment/collection_c.h @@ -10,6 +10,8 @@ NewCollection(const char* collection_name, const char* schema_conf); void DeleteCollection(CCollection collection); +void UpdateIndexs(CCollection c_collection, const char *index_string); + #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/core/src/dog_segment/partition_c.cpp b/core/src/dog_segment/partition_c.cpp index 9901082b94..5094388ead 100644 --- a/core/src/dog_segment/partition_c.cpp +++ b/core/src/dog_segment/partition_c.cpp @@ -10,7 +10,9 @@ NewPartition(CCollection collection, const char* partition_name) { auto schema = c->get_schema(); - auto partition = std::make_unique(name, schema); + auto index = c->get_index(); + + auto partition = std::make_unique(name, schema, index); // TODO: delete print std::cout << "create partition " << name << std::endl; diff --git a/core/src/dog_segment/segment_c.cpp b/core/src/dog_segment/segment_c.cpp index fb3e5bbceb..68004e3542 100644 --- a/core/src/dog_segment/segment_c.cpp +++ b/core/src/dog_segment/segment_c.cpp @@ -12,7 +12,6 @@ CSegmentBase NewSegment(CPartition partition, unsigned long segment_id) { auto p = (milvus::dog_segment::Partition*)partition; - // TODO: remove hard code null index ptr auto segment = milvus::dog_segment::CreateSegment(p->get_schema()); // TODO: delete print diff --git a/core/src/pb/master.pb.cc b/core/src/pb/master.pb.cc index 513ffd860b..04b1410505 100644 --- a/core/src/pb/master.pb.cc +++ b/core/src/pb/master.pb.cc @@ -15,6 +15,7 @@ #include // @@protoc_insertion_point(includes) #include +extern PROTOBUF_INTERNAL_EXPORT_message_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_IndexParam_message_2eproto; extern PROTOBUF_INTERNAL_EXPORT_message_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_Schema_message_2eproto; namespace masterpb { class CollectionDefaultTypeInternal { @@ -41,9 +42,10 @@ static void InitDefaultsscc_info_Collection_master_2eproto() { ::masterpb::Collection::InitAsDefaultInstance(); } -::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_Collection_master_2eproto = - {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_Collection_master_2eproto}, { - &scc_info_Schema_message_2eproto.base,}}; +::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_Collection_master_2eproto = + {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsscc_info_Collection_master_2eproto}, { + &scc_info_Schema_message_2eproto.base, + &scc_info_IndexParam_message_2eproto.base,}}; static void InitDefaultsscc_info_Segment_master_2eproto() { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -89,6 +91,7 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_master_2eproto::offsets[] PROT PROTOBUF_FIELD_OFFSET(::masterpb::Collection, create_time_), PROTOBUF_FIELD_OFFSET(::masterpb::Collection, segment_ids_), PROTOBUF_FIELD_OFFSET(::masterpb::Collection, partition_tags_), + PROTOBUF_FIELD_OFFSET(::masterpb::Collection, indexes_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::masterpb::Segment, _internal_metadata_), ~0u, // no _extensions_ @@ -113,8 +116,8 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_master_2eproto::offsets[] PROT }; static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::masterpb::Collection)}, - { 11, -1, sizeof(::masterpb::Segment)}, - { 24, -1, sizeof(::masterpb::SegmentStat)}, + { 12, -1, sizeof(::masterpb::Segment)}, + { 25, -1, sizeof(::masterpb::SegmentStat)}, }; static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = { @@ -125,19 +128,22 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = const char descriptor_table_protodef_master_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = "\n\014master.proto\022\010masterpb\032\rmessage.proto\"" - "\215\001\n\nCollection\022\n\n\002id\030\001 \001(\004\022\014\n\004name\030\002 \001(\t" + "\267\001\n\nCollection\022\n\n\002id\030\001 \001(\004\022\014\n\004name\030\002 \001(\t" "\022#\n\006schema\030\003 \001(\0132\023.milvus.grpc.Schema\022\023\n" "\013create_time\030\004 \001(\004\022\023\n\013segment_ids\030\005 \003(\004\022" - "\026\n\016partition_tags\030\006 \003(\t\"\301\001\n\007Segment\022\022\n\ns" - "egment_id\030\001 \001(\004\022\025\n\rcollection_id\030\002 \001(\004\022\025" - "\n\rpartition_tag\030\003 \001(\t\022\025\n\rchannel_start\030\004" - " \001(\005\022\023\n\013channel_end\030\005 \001(\005\022\026\n\016open_timest" - "amp\030\006 \001(\004\022\027\n\017close_timestamp\030\007 \001(\004\022\027\n\017co" - "llection_name\030\010 \001(\t\"K\n\013SegmentStat\022\022\n\nse" - "gment_id\030\001 \001(\004\022\023\n\013memory_size\030\002 \001(\004\022\023\n\013m" - "emory_rate\030\003 \001(\0022I\n\006Master\022\?\n\020CreateColl" - "ection\022\024.milvus.grpc.Mapping\032\023.milvus.gr" - "pc.Status\"\000B\010Z\006masterb\006proto3" + "\026\n\016partition_tags\030\006 \003(\t\022(\n\007indexes\030\007 \003(\013" + "2\027.milvus.grpc.IndexParam\"\301\001\n\007Segment\022\022\n" + "\nsegment_id\030\001 \001(\004\022\025\n\rcollection_id\030\002 \001(\004" + "\022\025\n\rpartition_tag\030\003 \001(\t\022\025\n\rchannel_start" + "\030\004 \001(\005\022\023\n\013channel_end\030\005 \001(\005\022\026\n\016open_time" + "stamp\030\006 \001(\004\022\027\n\017close_timestamp\030\007 \001(\004\022\027\n\017" + "collection_name\030\010 \001(\t\"K\n\013SegmentStat\022\022\n\n" + "segment_id\030\001 \001(\004\022\023\n\013memory_size\030\002 \001(\004\022\023\n" + "\013memory_rate\030\003 \001(\0022\210\001\n\006Master\022\?\n\020CreateC" + "ollection\022\024.milvus.grpc.Mapping\032\023.milvus" + ".grpc.Status\"\000\022=\n\013CreateIndex\022\027.milvus.g" + "rpc.IndexParam\032\023.milvus.grpc.Status\"\000B\010Z" + "\006masterb\006proto3" ; static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_master_2eproto_deps[1] = { &::descriptor_table_message_2eproto, @@ -150,7 +156,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_mas static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_master_2eproto_once; static bool descriptor_table_master_2eproto_initialized = false; const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_master_2eproto = { - &descriptor_table_master_2eproto_initialized, descriptor_table_protodef_master_2eproto, "master.proto", 549, + &descriptor_table_master_2eproto_initialized, descriptor_table_protodef_master_2eproto, "master.proto", 655, &descriptor_table_master_2eproto_once, descriptor_table_master_2eproto_sccs, descriptor_table_master_2eproto_deps, 3, 1, schemas, file_default_instances, TableStruct_master_2eproto::offsets, file_level_metadata_master_2eproto, 3, file_level_enum_descriptors_master_2eproto, file_level_service_descriptors_master_2eproto, @@ -181,6 +187,9 @@ void Collection::clear_schema() { } schema_ = nullptr; } +void Collection::clear_indexes() { + indexes_.Clear(); +} Collection::Collection() : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { SharedCtor(); @@ -190,7 +199,8 @@ Collection::Collection(const Collection& from) : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr), segment_ids_(from.segment_ids_), - partition_tags_(from.partition_tags_) { + partition_tags_(from.partition_tags_), + indexes_(from.indexes_) { _internal_metadata_.MergeFrom(from._internal_metadata_); name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); if (!from.name().empty()) { @@ -242,6 +252,7 @@ void Collection::Clear() { segment_ids_.Clear(); partition_tags_.Clear(); + indexes_.Clear(); name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && schema_ != nullptr) { delete schema_; @@ -311,6 +322,18 @@ const char* Collection::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID: } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 50); } else goto handle_unusual; continue; + // repeated .milvus.grpc.IndexParam indexes = 7; + case 7: + if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 58)) { + ptr -= 1; + do { + ptr += 1; + ptr = ctx->ParseMessage(add_indexes(), ptr); + CHK_(ptr); + if (!ctx->DataAvailable(ptr)) break; + } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 58); + } else goto handle_unusual; + continue; default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -425,6 +448,17 @@ bool Collection::MergePartialFromCodedStream( break; } + // repeated .milvus.grpc.IndexParam indexes = 7; + case 7: { + if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (58 & 0xFF)) { + DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage( + input, add_indexes())); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -499,6 +533,15 @@ void Collection::SerializeWithCachedSizes( 6, this->partition_tags(i), output); } + // repeated .milvus.grpc.IndexParam indexes = 7; + for (unsigned int i = 0, + n = static_cast(this->indexes_size()); i < n; i++) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray( + 7, + this->indexes(static_cast(i)), + output); + } + if (_internal_metadata_.have_unknown_fields()) { ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -563,6 +606,14 @@ void Collection::SerializeWithCachedSizes( WriteStringToArray(6, this->partition_tags(i), target); } + // repeated .milvus.grpc.IndexParam indexes = 7; + for (unsigned int i = 0, + n = static_cast(this->indexes_size()); i < n; i++) { + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: + InternalWriteMessageToArray( + 7, this->indexes(static_cast(i)), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -607,6 +658,17 @@ size_t Collection::ByteSizeLong() const { this->partition_tags(i)); } + // repeated .milvus.grpc.IndexParam indexes = 7; + { + unsigned int count = static_cast(this->indexes_size()); + total_size += 1UL * count; + for (unsigned int i = 0; i < count; i++) { + total_size += + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize( + this->indexes(static_cast(i))); + } + } + // string name = 2; if (this->name().size() > 0) { total_size += 1 + @@ -664,6 +726,7 @@ void Collection::MergeFrom(const Collection& from) { segment_ids_.MergeFrom(from.segment_ids_); partition_tags_.MergeFrom(from.partition_tags_); + indexes_.MergeFrom(from.indexes_); if (from.name().size() > 0) { name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_); @@ -702,6 +765,7 @@ void Collection::InternalSwap(Collection* other) { _internal_metadata_.Swap(&other->_internal_metadata_); segment_ids_.InternalSwap(&other->segment_ids_); partition_tags_.InternalSwap(CastToBase(&other->partition_tags_)); + CastToBase(&indexes_)->InternalSwap(CastToBase(&other->indexes_)); name_.Swap(&other->name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); swap(schema_, other->schema_); diff --git a/core/src/pb/master.pb.h b/core/src/pb/master.pb.h index 89f3eeb8cc..e4827888c3 100644 --- a/core/src/pb/master.pb.h +++ b/core/src/pb/master.pb.h @@ -190,6 +190,7 @@ class Collection : enum : int { kSegmentIdsFieldNumber = 5, kPartitionTagsFieldNumber = 6, + kIndexesFieldNumber = 7, kNameFieldNumber = 2, kSchemaFieldNumber = 3, kIdFieldNumber = 1, @@ -223,6 +224,17 @@ class Collection : const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& partition_tags() const; ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_partition_tags(); + // repeated .milvus.grpc.IndexParam indexes = 7; + int indexes_size() const; + void clear_indexes(); + ::milvus::grpc::IndexParam* mutable_indexes(int index); + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::grpc::IndexParam >* + mutable_indexes(); + const ::milvus::grpc::IndexParam& indexes(int index) const; + ::milvus::grpc::IndexParam* add_indexes(); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::grpc::IndexParam >& + indexes() const; + // string name = 2; void clear_name(); const std::string& name() const; @@ -260,6 +272,7 @@ class Collection : ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint64 > segment_ids_; mutable std::atomic _segment_ids_cached_byte_size_; ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField partition_tags_; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::grpc::IndexParam > indexes_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; ::milvus::grpc::Schema* schema_; ::PROTOBUF_NAMESPACE_ID::uint64 id_; @@ -834,6 +847,33 @@ Collection::mutable_partition_tags() { return &partition_tags_; } +// repeated .milvus.grpc.IndexParam indexes = 7; +inline int Collection::indexes_size() const { + return indexes_.size(); +} +inline ::milvus::grpc::IndexParam* Collection::mutable_indexes(int index) { + // @@protoc_insertion_point(field_mutable:masterpb.Collection.indexes) + return indexes_.Mutable(index); +} +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::grpc::IndexParam >* +Collection::mutable_indexes() { + // @@protoc_insertion_point(field_mutable_list:masterpb.Collection.indexes) + return &indexes_; +} +inline const ::milvus::grpc::IndexParam& Collection::indexes(int index) const { + // @@protoc_insertion_point(field_get:masterpb.Collection.indexes) + return indexes_.Get(index); +} +inline ::milvus::grpc::IndexParam* Collection::add_indexes() { + // @@protoc_insertion_point(field_add:masterpb.Collection.indexes) + return indexes_.Add(); +} +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::grpc::IndexParam >& +Collection::indexes() const { + // @@protoc_insertion_point(field_list:masterpb.Collection.indexes) + return indexes_; +} + // ------------------------------------------------------------------- // Segment diff --git a/reader/read_node/segment.go b/reader/read_node/segment.go index bfcdcf7543..29c42a9e30 100644 --- a/reader/read_node/segment.go +++ b/reader/read_node/segment.go @@ -24,8 +24,10 @@ import ( const SegmentLifetime = 20000 const ( - SegmentOpened = 0 - SegmentClosed = 1 + SegmentOpened = 0 + SegmentClosed = 1 + SegmentIndexing = 2 + SegmentIndexed = 3 ) type Segment struct { @@ -33,6 +35,7 @@ type Segment struct { SegmentId int64 SegmentCloseTime uint64 LastMemSize uint64 + SegmentStatus int } func (s *Segment) GetStatus() int {