Refactor master:index ids

Signed-off-by: neza2017 <yefu.chen@zilliz.com>
pull/4973/head^2
neza2017 2021-02-11 08:41:59 +08:00 committed by yefu.chen
parent 70fe5233cf
commit 85c1404393
11 changed files with 277 additions and 282 deletions

View File

@ -24,4 +24,4 @@ master:
maxPartitionNum: 4096
nodeID: 100
timeout: 5 # time out, 5 seconds
timeout: 3600 # time out, 5 seconds

View File

@ -18,8 +18,7 @@
extern PROTOBUF_INTERNAL_EXPORT_common_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Address_common_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_common_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_KeyValuePair_common_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_etcd_5fmeta_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_FieldBinlogFiles_etcd_5fmeta_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_etcd_5fmeta_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_FieldIndexInfo_etcd_5fmeta_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_etcd_5fmeta_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_IndexInfo_etcd_5fmeta_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_etcd_5fmeta_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_FieldIndexInfo_etcd_5fmeta_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_schema_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_CollectionSchema_schema_2eproto;
namespace milvus {
namespace proto {
@ -127,9 +126,8 @@ static void InitDefaultsscc_info_FieldIndexInfo_etcd_5fmeta_2eproto() {
::milvus::proto::etcd::FieldIndexInfo::InitAsDefaultInstance();
}
::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_FieldIndexInfo_etcd_5fmeta_2eproto =
{{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_FieldIndexInfo_etcd_5fmeta_2eproto}, {
&scc_info_IndexInfo_etcd_5fmeta_2eproto.base,}};
::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_FieldIndexInfo_etcd_5fmeta_2eproto =
{{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_FieldIndexInfo_etcd_5fmeta_2eproto}, {}};
static void InitDefaultsscc_info_FieldIndexMeta_etcd_5fmeta_2eproto() {
GOOGLE_PROTOBUF_VERIFY_VERSION;
@ -277,7 +275,7 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_etcd_5fmeta_2eproto::offsets[]
~0u, // no _oneof_case_
~0u, // no _weak_field_map_
PROTOBUF_FIELD_OFFSET(::milvus::proto::etcd::FieldIndexInfo, filedid_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::etcd::FieldIndexInfo, index_info_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::etcd::FieldIndexInfo, indexid_),
~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::milvus::proto::etcd::CollectionInfo, _internal_metadata_),
~0u, // no _extensions_
@ -382,35 +380,34 @@ const char descriptor_table_protodef_etcd_5fmeta_2eproto[] PROTOBUF_SECTION_VARI
"ID\030\002 \001(\003\022\022\n\nsegmentIDs\030\003 \003(\003\"i\n\tIndexInf"
"o\022\022\n\nindex_name\030\001 \001(\t\022\017\n\007indexID\030\002 \001(\003\0227"
"\n\014index_params\030\003 \003(\0132!.milvus.proto.comm"
"on.KeyValuePair\"S\n\016FieldIndexInfo\022\017\n\007fil"
"edID\030\001 \001(\003\0220\n\nindex_info\030\002 \001(\0132\034.milvus."
"proto.etcd.IndexInfo\"\270\001\n\016CollectionInfo\022"
"\n\n\002ID\030\001 \001(\003\0225\n\006schema\030\002 \001(\0132%.milvus.pro"
"to.schema.CollectionSchema\022\023\n\013create_tim"
"e\030\003 \001(\004\022\024\n\014partitionIDs\030\004 \003(\003\0228\n\rfield_i"
"ndexes\030\005 \003(\0132!.milvus.proto.etcd.FieldIn"
"dexInfo\"X\n\020SegmentIndexInfo\022\021\n\tsegmentID"
"\030\001 \001(\003\022\017\n\007fieldID\030\002 \001(\003\022\017\n\007indexID\030\003 \001(\003"
"\022\017\n\007buildID\030\004 \001(\003\"\252\001\n\016CollectionMeta\022\n\n\002"
"ID\030\001 \001(\003\0225\n\006schema\030\002 \001(\0132%.milvus.proto."
"schema.CollectionSchema\022\023\n\013create_time\030\003"
" \001(\004\022\022\n\nsegmentIDs\030\004 \003(\003\022\026\n\016partition_ta"
"gs\030\005 \003(\t\022\024\n\014partitionIDs\030\006 \003(\003\"9\n\020FieldB"
"inlogFiles\022\017\n\007fieldID\030\001 \001(\003\022\024\n\014binlog_fi"
"les\030\002 \003(\t\"\204\002\n\013SegmentMeta\022\021\n\tsegmentID\030\001"
" \001(\003\022\024\n\014collectionID\030\002 \001(\003\022\025\n\rpartition_"
"tag\030\003 \001(\t\022\025\n\rchannel_start\030\004 \001(\005\022\023\n\013chan"
"nel_end\030\005 \001(\005\022\021\n\topen_time\030\006 \001(\004\022\022\n\nclos"
"e_time\030\007 \001(\004\022\020\n\010num_rows\030\010 \001(\003\022\020\n\010mem_si"
"ze\030\t \001(\003\022>\n\021binlog_file_paths\030\n \003(\0132#.mi"
"lvus.proto.etcd.FieldBinlogFiles\"\310\001\n\016Fie"
"ldIndexMeta\022\021\n\tsegmentID\030\001 \001(\003\022\017\n\007fieldI"
"D\030\002 \001(\003\022\017\n\007indexID\030\003 \001(\003\0227\n\014index_params"
"\030\004 \003(\0132!.milvus.proto.common.KeyValuePai"
"r\022.\n\005state\030\005 \001(\0162\037.milvus.proto.common.I"
"ndexState\022\030\n\020index_file_paths\030\006 \003(\tB@Z>g"
"ithub.com/zilliztech/milvus-distributed/"
"internal/proto/etcdpbb\006proto3"
"on.KeyValuePair\"2\n\016FieldIndexInfo\022\017\n\007fil"
"edID\030\001 \001(\003\022\017\n\007indexID\030\002 \001(\003\"\270\001\n\016Collecti"
"onInfo\022\n\n\002ID\030\001 \001(\003\0225\n\006schema\030\002 \001(\0132%.mil"
"vus.proto.schema.CollectionSchema\022\023\n\013cre"
"ate_time\030\003 \001(\004\022\024\n\014partitionIDs\030\004 \003(\003\0228\n\r"
"field_indexes\030\005 \003(\0132!.milvus.proto.etcd."
"FieldIndexInfo\"X\n\020SegmentIndexInfo\022\021\n\tse"
"gmentID\030\001 \001(\003\022\017\n\007fieldID\030\002 \001(\003\022\017\n\007indexI"
"D\030\003 \001(\003\022\017\n\007buildID\030\004 \001(\003\"\252\001\n\016CollectionM"
"eta\022\n\n\002ID\030\001 \001(\003\0225\n\006schema\030\002 \001(\0132%.milvus"
".proto.schema.CollectionSchema\022\023\n\013create"
"_time\030\003 \001(\004\022\022\n\nsegmentIDs\030\004 \003(\003\022\026\n\016parti"
"tion_tags\030\005 \003(\t\022\024\n\014partitionIDs\030\006 \003(\003\"9\n"
"\020FieldBinlogFiles\022\017\n\007fieldID\030\001 \001(\003\022\024\n\014bi"
"nlog_files\030\002 \003(\t\"\204\002\n\013SegmentMeta\022\021\n\tsegm"
"entID\030\001 \001(\003\022\024\n\014collectionID\030\002 \001(\003\022\025\n\rpar"
"tition_tag\030\003 \001(\t\022\025\n\rchannel_start\030\004 \001(\005\022"
"\023\n\013channel_end\030\005 \001(\005\022\021\n\topen_time\030\006 \001(\004\022"
"\022\n\nclose_time\030\007 \001(\004\022\020\n\010num_rows\030\010 \001(\003\022\020\n"
"\010mem_size\030\t \001(\003\022>\n\021binlog_file_paths\030\n \003"
"(\0132#.milvus.proto.etcd.FieldBinlogFiles\""
"\310\001\n\016FieldIndexMeta\022\021\n\tsegmentID\030\001 \001(\003\022\017\n"
"\007fieldID\030\002 \001(\003\022\017\n\007indexID\030\003 \001(\003\0227\n\014index"
"_params\030\004 \003(\0132!.milvus.proto.common.KeyV"
"aluePair\022.\n\005state\030\005 \001(\0162\037.milvus.proto.c"
"ommon.IndexState\022\030\n\020index_file_paths\030\006 \003"
"(\tB@Z>github.com/zilliztech/milvus-distr"
"ibuted/internal/proto/etcdpbb\006proto3"
;
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_etcd_5fmeta_2eproto_deps[2] = {
&::descriptor_table_common_2eproto,
@ -432,7 +429,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_etc
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_etcd_5fmeta_2eproto_once;
static bool descriptor_table_etcd_5fmeta_2eproto_initialized = false;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_etcd_5fmeta_2eproto = {
&descriptor_table_etcd_5fmeta_2eproto_initialized, descriptor_table_protodef_etcd_5fmeta_2eproto, "etcd_meta.proto", 1589,
&descriptor_table_etcd_5fmeta_2eproto_initialized, descriptor_table_protodef_etcd_5fmeta_2eproto, "etcd_meta.proto", 1556,
&descriptor_table_etcd_5fmeta_2eproto_once, descriptor_table_etcd_5fmeta_2eproto_sccs, descriptor_table_etcd_5fmeta_2eproto_deps, 11, 2,
schemas, file_default_instances, TableStruct_etcd_5fmeta_2eproto::offsets,
file_level_metadata_etcd_5fmeta_2eproto, 11, file_level_enum_descriptors_etcd_5fmeta_2eproto, file_level_service_descriptors_etcd_5fmeta_2eproto,
@ -1997,18 +1994,11 @@ void IndexInfo::InternalSwap(IndexInfo* other) {
// ===================================================================
void FieldIndexInfo::InitAsDefaultInstance() {
::milvus::proto::etcd::_FieldIndexInfo_default_instance_._instance.get_mutable()->index_info_ = const_cast< ::milvus::proto::etcd::IndexInfo*>(
::milvus::proto::etcd::IndexInfo::internal_default_instance());
}
class FieldIndexInfo::_Internal {
public:
static const ::milvus::proto::etcd::IndexInfo& index_info(const FieldIndexInfo* msg);
};
const ::milvus::proto::etcd::IndexInfo&
FieldIndexInfo::_Internal::index_info(const FieldIndexInfo* msg) {
return *msg->index_info_;
}
FieldIndexInfo::FieldIndexInfo()
: ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
SharedCtor();
@ -2018,20 +2008,16 @@ FieldIndexInfo::FieldIndexInfo(const FieldIndexInfo& from)
: ::PROTOBUF_NAMESPACE_ID::Message(),
_internal_metadata_(nullptr) {
_internal_metadata_.MergeFrom(from._internal_metadata_);
if (from.has_index_info()) {
index_info_ = new ::milvus::proto::etcd::IndexInfo(*from.index_info_);
} else {
index_info_ = nullptr;
}
filedid_ = from.filedid_;
::memcpy(&filedid_, &from.filedid_,
static_cast<size_t>(reinterpret_cast<char*>(&indexid_) -
reinterpret_cast<char*>(&filedid_)) + sizeof(indexid_));
// @@protoc_insertion_point(copy_constructor:milvus.proto.etcd.FieldIndexInfo)
}
void FieldIndexInfo::SharedCtor() {
::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_FieldIndexInfo_etcd_5fmeta_2eproto.base);
::memset(&index_info_, 0, static_cast<size_t>(
reinterpret_cast<char*>(&filedid_) -
reinterpret_cast<char*>(&index_info_)) + sizeof(filedid_));
::memset(&filedid_, 0, static_cast<size_t>(
reinterpret_cast<char*>(&indexid_) -
reinterpret_cast<char*>(&filedid_)) + sizeof(indexid_));
}
FieldIndexInfo::~FieldIndexInfo() {
@ -2040,7 +2026,6 @@ FieldIndexInfo::~FieldIndexInfo() {
}
void FieldIndexInfo::SharedDtor() {
if (this != internal_default_instance()) delete index_info_;
}
void FieldIndexInfo::SetCachedSize(int size) const {
@ -2058,11 +2043,9 @@ void FieldIndexInfo::Clear() {
// Prevent compiler warnings about cached_has_bits being unused
(void) cached_has_bits;
if (GetArenaNoVirtual() == nullptr && index_info_ != nullptr) {
delete index_info_;
}
index_info_ = nullptr;
filedid_ = PROTOBUF_LONGLONG(0);
::memset(&filedid_, 0, static_cast<size_t>(
reinterpret_cast<char*>(&indexid_) -
reinterpret_cast<char*>(&filedid_)) + sizeof(indexid_));
_internal_metadata_.Clear();
}
@ -2081,10 +2064,10 @@ const char* FieldIndexInfo::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE
CHK_(ptr);
} else goto handle_unusual;
continue;
// .milvus.proto.etcd.IndexInfo index_info = 2;
// int64 indexID = 2;
case 2:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
ptr = ctx->ParseMessage(mutable_index_info(), ptr);
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 16)) {
indexid_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
CHK_(ptr);
} else goto handle_unusual;
continue;
@ -2131,11 +2114,13 @@ bool FieldIndexInfo::MergePartialFromCodedStream(
break;
}
// .milvus.proto.etcd.IndexInfo index_info = 2;
// int64 indexID = 2;
case 2: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) {
DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
input, mutable_index_info()));
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (16 & 0xFF)) {
DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive<
::PROTOBUF_NAMESPACE_ID::int64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_INT64>(
input, &indexid_)));
} else {
goto handle_unusual;
}
@ -2174,10 +2159,9 @@ void FieldIndexInfo::SerializeWithCachedSizes(
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt64(1, this->filedid(), output);
}
// .milvus.proto.etcd.IndexInfo index_info = 2;
if (this->has_index_info()) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray(
2, _Internal::index_info(this), output);
// int64 indexID = 2;
if (this->indexid() != 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt64(2, this->indexid(), output);
}
if (_internal_metadata_.have_unknown_fields()) {
@ -2198,11 +2182,9 @@ void FieldIndexInfo::SerializeWithCachedSizes(
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt64ToArray(1, this->filedid(), target);
}
// .milvus.proto.etcd.IndexInfo index_info = 2;
if (this->has_index_info()) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
InternalWriteMessageToArray(
2, _Internal::index_info(this), target);
// int64 indexID = 2;
if (this->indexid() != 0) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt64ToArray(2, this->indexid(), target);
}
if (_internal_metadata_.have_unknown_fields()) {
@ -2226,13 +2208,6 @@ size_t FieldIndexInfo::ByteSizeLong() const {
// Prevent compiler warnings about cached_has_bits being unused
(void) cached_has_bits;
// .milvus.proto.etcd.IndexInfo index_info = 2;
if (this->has_index_info()) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
*index_info_);
}
// int64 filedID = 1;
if (this->filedid() != 0) {
total_size += 1 +
@ -2240,6 +2215,13 @@ size_t FieldIndexInfo::ByteSizeLong() const {
this->filedid());
}
// int64 indexID = 2;
if (this->indexid() != 0) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::Int64Size(
this->indexid());
}
int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
SetCachedSize(cached_size);
return total_size;
@ -2267,12 +2249,12 @@ void FieldIndexInfo::MergeFrom(const FieldIndexInfo& from) {
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
(void) cached_has_bits;
if (from.has_index_info()) {
mutable_index_info()->::milvus::proto::etcd::IndexInfo::MergeFrom(from.index_info());
}
if (from.filedid() != 0) {
set_filedid(from.filedid());
}
if (from.indexid() != 0) {
set_indexid(from.indexid());
}
}
void FieldIndexInfo::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
@ -2296,8 +2278,8 @@ bool FieldIndexInfo::IsInitialized() const {
void FieldIndexInfo::InternalSwap(FieldIndexInfo* other) {
using std::swap;
_internal_metadata_.Swap(&other->_internal_metadata_);
swap(index_info_, other->index_info_);
swap(filedid_, other->filedid_);
swap(indexid_, other->indexid_);
}
::PROTOBUF_NAMESPACE_ID::Metadata FieldIndexInfo::GetMetadata() const {

View File

@ -872,29 +872,26 @@ class FieldIndexInfo :
// accessors -------------------------------------------------------
enum : int {
kIndexInfoFieldNumber = 2,
kFiledIDFieldNumber = 1,
kIndexIDFieldNumber = 2,
};
// .milvus.proto.etcd.IndexInfo index_info = 2;
bool has_index_info() const;
void clear_index_info();
const ::milvus::proto::etcd::IndexInfo& index_info() const;
::milvus::proto::etcd::IndexInfo* release_index_info();
::milvus::proto::etcd::IndexInfo* mutable_index_info();
void set_allocated_index_info(::milvus::proto::etcd::IndexInfo* index_info);
// int64 filedID = 1;
void clear_filedid();
::PROTOBUF_NAMESPACE_ID::int64 filedid() const;
void set_filedid(::PROTOBUF_NAMESPACE_ID::int64 value);
// int64 indexID = 2;
void clear_indexid();
::PROTOBUF_NAMESPACE_ID::int64 indexid() const;
void set_indexid(::PROTOBUF_NAMESPACE_ID::int64 value);
// @@protoc_insertion_point(class_scope:milvus.proto.etcd.FieldIndexInfo)
private:
class _Internal;
::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
::milvus::proto::etcd::IndexInfo* index_info_;
::PROTOBUF_NAMESPACE_ID::int64 filedid_;
::PROTOBUF_NAMESPACE_ID::int64 indexid_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_etcd_5fmeta_2eproto;
};
@ -2456,55 +2453,18 @@ inline void FieldIndexInfo::set_filedid(::PROTOBUF_NAMESPACE_ID::int64 value) {
// @@protoc_insertion_point(field_set:milvus.proto.etcd.FieldIndexInfo.filedID)
}
// .milvus.proto.etcd.IndexInfo index_info = 2;
inline bool FieldIndexInfo::has_index_info() const {
return this != internal_default_instance() && index_info_ != nullptr;
// int64 indexID = 2;
inline void FieldIndexInfo::clear_indexid() {
indexid_ = PROTOBUF_LONGLONG(0);
}
inline void FieldIndexInfo::clear_index_info() {
if (GetArenaNoVirtual() == nullptr && index_info_ != nullptr) {
delete index_info_;
}
index_info_ = nullptr;
inline ::PROTOBUF_NAMESPACE_ID::int64 FieldIndexInfo::indexid() const {
// @@protoc_insertion_point(field_get:milvus.proto.etcd.FieldIndexInfo.indexID)
return indexid_;
}
inline const ::milvus::proto::etcd::IndexInfo& FieldIndexInfo::index_info() const {
const ::milvus::proto::etcd::IndexInfo* p = index_info_;
// @@protoc_insertion_point(field_get:milvus.proto.etcd.FieldIndexInfo.index_info)
return p != nullptr ? *p : *reinterpret_cast<const ::milvus::proto::etcd::IndexInfo*>(
&::milvus::proto::etcd::_IndexInfo_default_instance_);
}
inline ::milvus::proto::etcd::IndexInfo* FieldIndexInfo::release_index_info() {
// @@protoc_insertion_point(field_release:milvus.proto.etcd.FieldIndexInfo.index_info)
inline void FieldIndexInfo::set_indexid(::PROTOBUF_NAMESPACE_ID::int64 value) {
::milvus::proto::etcd::IndexInfo* temp = index_info_;
index_info_ = nullptr;
return temp;
}
inline ::milvus::proto::etcd::IndexInfo* FieldIndexInfo::mutable_index_info() {
if (index_info_ == nullptr) {
auto* p = CreateMaybeMessage<::milvus::proto::etcd::IndexInfo>(GetArenaNoVirtual());
index_info_ = p;
}
// @@protoc_insertion_point(field_mutable:milvus.proto.etcd.FieldIndexInfo.index_info)
return index_info_;
}
inline void FieldIndexInfo::set_allocated_index_info(::milvus::proto::etcd::IndexInfo* index_info) {
::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
if (message_arena == nullptr) {
delete index_info_;
}
if (index_info) {
::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
if (message_arena != submessage_arena) {
index_info = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
message_arena, index_info, submessage_arena);
}
} else {
}
index_info_ = index_info;
// @@protoc_insertion_point(field_set_allocated:milvus.proto.etcd.FieldIndexInfo.index_info)
indexid_ = value;
// @@protoc_insertion_point(field_set:milvus.proto.etcd.FieldIndexInfo.indexID)
}
// -------------------------------------------------------------------

View File

@ -517,9 +517,8 @@ func TestGrpcService(t *testing.T) {
rsp, err := cli.DescribeIndex(req)
assert.Nil(t, err)
assert.Equal(t, rsp.Status.ErrorCode, commonpb.ErrorCode_SUCCESS)
assert.Equal(t, len(rsp.IndexDescriptions), 2)
assert.Equal(t, len(rsp.IndexDescriptions), 1)
assert.Equal(t, rsp.IndexDescriptions[0].IndexName, cms.Params.DefaultIndexName)
assert.Equal(t, rsp.IndexDescriptions[1].IndexName, "testColl_index_100")
})

View File

@ -376,13 +376,18 @@ func (c *Core) startSegmentFlushCompletedLoop() {
log.Printf("GetCollectionBySegmentID, error = %s ", err.Error())
}
for _, f := range coll.FieldIndexes {
idxInfo, err := c.MetaTable.GetIndexByID(f.IndexID)
if err != nil {
log.Printf("index id = %d not found", f.IndexID)
}
fieldSch, err := GetFieldSchemaByID(coll, f.FiledID)
if err == nil {
t := &CreateIndexTask{
core: c,
segmentID: seg,
indexName: f.IndexInfo.IndexName,
indexID: f.IndexInfo.IndexID,
indexName: idxInfo.IndexName,
indexID: idxInfo.IndexID,
fieldSchema: fieldSch,
indexParams: nil,
}

View File

@ -604,8 +604,9 @@ func TestMasterService(t *testing.T) {
collMeta, err = core.MetaTable.GetCollectionByName("testColl")
assert.Nil(t, err)
assert.Equal(t, len(collMeta.FieldIndexes), 2)
assert.Equal(t, len(collMeta.FieldIndexes), 2)
assert.Equal(t, collMeta.FieldIndexes[1].IndexInfo.IndexName, Params.DefaultIndexName)
idxMeta, err := core.MetaTable.GetIndexByID(collMeta.FieldIndexes[1].IndexID)
assert.Nil(t, err)
assert.Equal(t, idxMeta.IndexName, Params.DefaultIndexName)
req.FieldName = "no field"
rsp, err = core.CreateIndex(req)
@ -727,7 +728,7 @@ func TestMasterService(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, rsp.Status.ErrorCode, commonpb.ErrorCode_SUCCESS)
assert.Equal(t, len(rsp.IndexDescriptions), 3)
assert.Equal(t, len(rsp.IndexDescriptions), 2)
indexNames := make([]string, 0)
for _, d := range rsp.IndexDescriptions {
indexNames = append(indexNames, d.IndexName)
@ -736,7 +737,6 @@ func TestMasterService(t *testing.T) {
assert.ElementsMatch(t, indexNames, []string{
"testColl_index_100",
Params.DefaultIndexName,
Params.DefaultIndexName,
})
})

View File

@ -172,7 +172,7 @@ func (mt *metaTable) reloadFromKV() error {
return nil
}
func (mt *metaTable) AddCollection(coll *pb.CollectionInfo, part *pb.PartitionInfo) error {
func (mt *metaTable) AddCollection(coll *pb.CollectionInfo, part *pb.PartitionInfo, idx []*pb.IndexInfo) error {
mt.ddLock.Lock()
defer mt.ddLock.Unlock()
@ -186,12 +186,18 @@ func (mt *metaTable) AddCollection(coll *pb.CollectionInfo, part *pb.PartitionIn
if _, ok := mt.collName2ID[coll.Schema.Name]; ok {
return errors.Errorf("collection %s exist", coll.Schema.Name)
}
if len(coll.FieldIndexes) != len(idx) {
return errors.Errorf("incorrect index id when creating collection")
}
coll.PartitionIDs = append(coll.PartitionIDs, part.PartitionID)
mt.collID2Meta[coll.ID] = *coll
mt.collName2ID[coll.Schema.Name] = coll.ID
mt.partitionID2Meta[part.PartitionID] = *part
mt.partitionID2CollID[part.PartitionID] = coll.ID
for _, i := range idx {
mt.indexID2Meta[i.IndexID] = *i
}
k1 := path.Join(CollectionMetaPrefix, strconv.FormatInt(coll.ID, 10))
v1 := proto.MarshalTextString(coll)
@ -199,6 +205,12 @@ func (mt *metaTable) AddCollection(coll *pb.CollectionInfo, part *pb.PartitionIn
v2 := proto.MarshalTextString(part)
meta := map[string]string{k1: v1, k2: v2}
for _, i := range idx {
k := path.Join(IndexMetaPrefix, strconv.FormatInt(i.IndexID, 10))
v := proto.MarshalTextString(i)
meta[k] = v
}
err := mt.client.MultiSave(meta)
if err != nil {
_ = mt.reloadFromKV()
@ -238,7 +250,7 @@ func (mt *metaTable) DeleteCollection(collID typeutil.UniqueID) error {
metaKeys = append(metaKeys, path.Join(SegmentIndexMetaPrefix, strconv.FormatInt(segID, 10), strconv.FormatInt(indexID, 10)))
indexMeta, ok := mt.indexID2Meta[segIdxMeta.IndexID]
if !ok {
log.Printf("index id = %d not exist", segIdxMeta.IndexID)
//log.Printf("index id = %d not exist", segIdxMeta.IndexID) // segments may share index id
continue
}
delete(mt.indexID2Meta, segIdxMeta.IndexID)
@ -506,14 +518,10 @@ func (mt *metaTable) AddSegment(seg *datapb.SegmentInfo) error {
return nil
}
func (mt *metaTable) AddIndex(seg *pb.SegmentIndexInfo, idx *pb.IndexInfo) error {
func (mt *metaTable) AddIndex(seg *pb.SegmentIndexInfo) error {
mt.ddLock.Lock()
defer mt.ddLock.Unlock()
if seg.IndexID != idx.IndexID {
return errors.Errorf("index id in segment is %d, in index info is %d, not equal", seg.IndexID, idx.IndexID)
}
segIdxMap, ok := mt.segID2IndexMeta[seg.SegmentID]
if !ok {
idxMap := map[typeutil.UniqueID]pb.SegmentIndexInfo{seg.IndexID: *seg}
@ -524,21 +532,30 @@ func (mt *metaTable) AddIndex(seg *pb.SegmentIndexInfo, idx *pb.IndexInfo) error
return errors.Errorf("index id = %d exist", seg.IndexID)
}
}
var k1, k2, v1, v2 string
(*(mt.segID2IndexMeta[seg.SegmentID]))[seg.IndexID] = *seg
k1 = path.Join(SegmentIndexMetaPrefix, strconv.FormatInt(seg.SegmentID, 10), strconv.FormatInt(seg.IndexID, 10))
v1 = proto.MarshalTextString(seg)
meta := map[string]string{k1: v1}
_, ok = mt.indexID2Meta[idx.IndexID]
collID, ok := mt.segID2CollID[seg.SegmentID]
if !ok {
mt.indexID2Meta[idx.IndexID] = *idx
k2 = path.Join(IndexMetaPrefix, strconv.FormatInt(idx.IndexID, 10))
v2 = proto.MarshalTextString(idx)
meta[k2] = v2
return errors.Errorf("segment id = %d not belong to any collection", seg.SegmentID)
}
collMeta, ok := mt.collID2Meta[collID]
if !ok {
return errors.Errorf("collection id = %d not found", collID)
}
exist := false
for _, i := range collMeta.FieldIndexes {
if i.IndexID == seg.IndexID {
exist = true
break
}
}
if !exist {
return errors.Errorf("index id = %d not found", seg.IndexID)
}
err := mt.client.MultiSave(meta)
(*(mt.segID2IndexMeta[seg.SegmentID]))[seg.IndexID] = *seg
k := path.Join(SegmentIndexMetaPrefix, strconv.FormatInt(seg.SegmentID, 10), strconv.FormatInt(seg.IndexID, 10))
v := proto.MarshalTextString(seg)
err := mt.client.Save(k, v)
if err != nil {
_ = mt.reloadFromKV()
return err
@ -655,11 +672,17 @@ func (mt *metaTable) GetNotIndexedSegments(collName string, fieldName string, id
}
exist := false
var existInfo pb.IndexInfo
if idxInfo.IndexParams != nil {
for _, f := range collMeta.FieldIndexes {
if f.FiledID == fieldSchema.FieldID {
existInfo, ok = mt.indexID2Meta[f.IndexID]
if !ok {
return nil, schemapb.FieldSchema{}, errors.Errorf("index id = %d not found", f.IndexID)
}
// (collMeta.IndexNames[i] == indexName)
if EqualKeyPairArray(f.IndexInfo.IndexParams, idxInfo.IndexParams) {
if EqualKeyPairArray(existInfo.IndexParams, idxInfo.IndexParams) {
exist = true
break
}
@ -668,20 +691,38 @@ func (mt *metaTable) GetNotIndexedSegments(collName string, fieldName string, id
}
if !exist && idxInfo.IndexParams != nil {
idx := &pb.FieldIndexInfo{
FiledID: fieldSchema.FieldID,
IndexInfo: idxInfo,
FiledID: fieldSchema.FieldID,
IndexID: idxInfo.IndexID,
}
collMeta.FieldIndexes = append(collMeta.FieldIndexes, idx)
mt.collID2Meta[collMeta.ID] = collMeta
k1 := path.Join(CollectionMetaPrefix, strconv.FormatInt(collMeta.ID, 10))
v1 := proto.MarshalTextString(&collMeta)
err := mt.client.Save(k1, v1)
mt.indexID2Meta[idx.IndexID] = *idxInfo
k2 := path.Join(IndexMetaPrefix, strconv.FormatInt(idx.IndexID, 10))
v2 := proto.MarshalTextString(idx)
meta := map[string]string{k1: v1, k2: v2}
err = mt.client.MultiSave(meta)
if err != nil {
_ = mt.reloadFromKV()
return nil, schemapb.FieldSchema{}, err
}
} else {
idxInfo.IndexID = existInfo.IndexID
if existInfo.IndexName != idxInfo.IndexName { //replace index name
existInfo.IndexName = idxInfo.IndexName
mt.indexID2Meta[existInfo.IndexID] = existInfo
k := path.Join(IndexMetaPrefix, strconv.FormatInt(existInfo.IndexID, 10))
v := proto.MarshalTextString(&existInfo)
err = mt.client.Save(k, v)
if err != nil {
_ = mt.reloadFromKV()
return nil, schemapb.FieldSchema{}, err
}
}
}
rstID := make([]typeutil.UniqueID, 0, 16)
@ -715,7 +756,8 @@ func (mt *metaTable) GetIndexByName(collName string, fieldName string, indexName
return nil, err
}
rstIndex := make([]*pb.IndexInfo, 0, 16)
rstIndex := make([]pb.IndexInfo, 0, len(collMeta.FieldIndexes))
existMap := map[typeutil.UniqueID]bool{}
for _, partID := range collMeta.PartitionIDs {
partMeta, ok := mt.partitionID2Meta[partID]
@ -733,20 +775,20 @@ func (mt *metaTable) GetIndexByName(collName string, fieldName string, indexName
if !ok {
continue
}
if indexName == "" {
rstIndex = append(rstIndex, &idxMeta)
} else if idxMeta.IndexName == indexName {
rstIndex = append(rstIndex, &idxMeta)
if _, ok = existMap[idxID]; ok {
continue
}
if indexName == "" {
rstIndex = append(rstIndex, idxMeta)
} else if idxMeta.IndexName == indexName {
rstIndex = append(rstIndex, idxMeta)
}
existMap[idxID] = true
}
}
}
}
rst := make([]pb.IndexInfo, 0, len(rstIndex))
for i := range rstIndex {
rst = append(rst, *rstIndex[i])
}
return rst, nil
return rstIndex, nil
}
func (mt *metaTable) GetIndexByID(indexID typeutil.UniqueID) (*pb.IndexInfo, error) {

View File

@ -65,6 +65,12 @@ func TestMetaTable(t *testing.T) {
},
},
},
FieldIndexes: []*pb.FieldIndexInfo{
{
FiledID: 110,
IndexID: 10000,
},
},
CreateTime: 0,
PartitionIDs: nil,
}
@ -73,9 +79,25 @@ func TestMetaTable(t *testing.T) {
PartitionID: 10,
SegmentIDs: nil,
}
idxInfo := []*pb.IndexInfo{
{
IndexName: "testColl_index_110",
IndexID: 10000,
IndexParams: []*commonpb.KeyValuePair{
{
Key: "field110-i1",
Value: "field110-v1",
},
{
Key: "field110-i2",
Value: "field110-v2",
},
},
},
}
t.Run("add collection", func(t *testing.T) {
err = mt.AddCollection(collInfo, partInfo)
err = mt.AddCollection(collInfo, partInfo, idxInfo)
assert.Nil(t, err)
collMeta, err := mt.GetCollectionByName("testColl")
@ -106,26 +128,12 @@ func TestMetaTable(t *testing.T) {
seg := pb.SegmentIndexInfo{
SegmentID: 100,
FieldID: 110,
IndexID: 200,
IndexID: 10000,
BuildID: 201,
}
idx := pb.IndexInfo{
IndexName: "idx200",
IndexID: 200,
IndexParams: []*commonpb.KeyValuePair{
{
Key: "field110-i1",
Value: "field110-v1",
},
{
Key: "field110-i2",
Value: "field110-v2",
},
},
}
err := mt.AddIndex(&seg, &idx)
err := mt.AddIndex(&seg)
assert.Nil(t, err)
assert.NotNil(t, mt.AddIndex(&seg, &idx))
assert.NotNil(t, mt.AddIndex(&seg))
})
t.Run("get not indexed segments", func(t *testing.T) {
@ -171,6 +179,8 @@ func TestMetaTable(t *testing.T) {
},
}
idxInfo.IndexParams = params
idxInfo.IndexID = 2001
idxInfo.IndexName = "field110-1"
seg, field, err = mt.GetNotIndexedSegments("testColl", "field110", idxInfo)
assert.Nil(t, err)
@ -182,10 +192,10 @@ func TestMetaTable(t *testing.T) {
})
t.Run("get index by name", func(t *testing.T) {
idx, err := mt.GetIndexByName("testColl", "field110", "idx200")
idx, err := mt.GetIndexByName("testColl", "field110", "field110")
assert.Nil(t, err)
assert.Equal(t, len(idx), 1)
assert.Equal(t, idx[0].IndexID, int64(200))
assert.Equal(t, idx[0].IndexID, int64(10000))
params := []*commonpb.KeyValuePair{
{
Key: "field110-i1",

View File

@ -115,6 +115,7 @@ func (t *CreateCollectionReqTask) Execute() error {
PartitionID: partitionID,
SegmentIDs: make([]typeutil.UniqueID, 0, 16),
}
idxInfo := make([]*etcdpb.IndexInfo, 0, 16)
for _, field := range schema.Fields {
if field.DataType == schemapb.DataType_VECTOR_FLOAT || field.DataType == schemapb.DataType_VECTOR_BINARY {
if len(field.IndexParams) > 0 {
@ -124,18 +125,20 @@ func (t *CreateCollectionReqTask) Execute() error {
}
filedIdx := &etcdpb.FieldIndexInfo{
FiledID: field.FieldID,
IndexInfo: &etcdpb.IndexInfo{
IndexName: fmt.Sprintf("%s_index_%d", collMeta.Schema.Name, field.FieldID),
IndexID: idxID,
IndexParams: field.IndexParams,
},
IndexID: idxID,
}
idx := &etcdpb.IndexInfo{
IndexName: fmt.Sprintf("%s_index_%d", collMeta.Schema.Name, field.FieldID),
IndexID: idxID,
IndexParams: field.IndexParams,
}
idxInfo = append(idxInfo, idx)
collMeta.FieldIndexes = append(collMeta.FieldIndexes, filedIdx)
}
}
}
err = t.core.MetaTable.AddCollection(&collMeta, &partMeta)
err = t.core.MetaTable.AddCollection(&collMeta, &partMeta, idxInfo)
if err != nil {
return err
}
@ -611,8 +614,8 @@ func (t *CreateIndexReqTask) Execute() error {
task := CreateIndexTask{
core: t.core,
segmentID: seg,
indexName: indexName,
indexID: indexID,
indexName: idxInfo.IndexName,
indexID: idxInfo.IndexID,
fieldSchema: &field,
indexParams: t.Req.ExtraParams,
}
@ -694,11 +697,6 @@ func (t *CreateIndexTask) BuildIndex() error {
IndexID: t.indexID,
BuildID: bldID,
}
idx := etcdpb.IndexInfo{
IndexName: t.indexName,
IndexID: t.indexID,
IndexParams: t.indexParams,
}
err = t.core.MetaTable.AddIndex(&seg, &idx)
err = t.core.MetaTable.AddIndex(&seg)
return err
}

View File

@ -32,7 +32,7 @@ message IndexInfo {
message FieldIndexInfo{
int64 filedID = 1;
IndexInfo index_info = 2;
int64 indexID = 2;
}
message CollectionInfo {

View File

@ -251,11 +251,11 @@ func (m *IndexInfo) GetIndexParams() []*commonpb.KeyValuePair {
}
type FieldIndexInfo struct {
FiledID int64 `protobuf:"varint,1,opt,name=filedID,proto3" json:"filedID,omitempty"`
IndexInfo *IndexInfo `protobuf:"bytes,2,opt,name=index_info,json=indexInfo,proto3" json:"index_info,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
FiledID int64 `protobuf:"varint,1,opt,name=filedID,proto3" json:"filedID,omitempty"`
IndexID int64 `protobuf:"varint,2,opt,name=indexID,proto3" json:"indexID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FieldIndexInfo) Reset() { *m = FieldIndexInfo{} }
@ -290,11 +290,11 @@ func (m *FieldIndexInfo) GetFiledID() int64 {
return 0
}
func (m *FieldIndexInfo) GetIndexInfo() *IndexInfo {
func (m *FieldIndexInfo) GetIndexID() int64 {
if m != nil {
return m.IndexInfo
return m.IndexID
}
return nil
return 0
}
type CollectionInfo struct {
@ -764,59 +764,58 @@ func init() {
func init() { proto.RegisterFile("etcd_meta.proto", fileDescriptor_975d306d62b73e88) }
var fileDescriptor_975d306d62b73e88 = []byte{
// 862 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcd, 0x8e, 0xe3, 0x44,
0x10, 0x96, 0x27, 0x99, 0x64, 0x5c, 0xf9, 0x99, 0x99, 0x3e, 0x99, 0x65, 0x97, 0xcd, 0x7a, 0xb5,
0x10, 0x09, 0x31, 0x91, 0x06, 0xc1, 0x05, 0x81, 0x60, 0x37, 0x8c, 0x14, 0x21, 0x76, 0x83, 0x33,
0xe2, 0xc0, 0xc5, 0xea, 0xd8, 0x95, 0xa4, 0x25, 0x77, 0x3b, 0xb8, 0xdb, 0xec, 0xcc, 0x1c, 0x10,
0x57, 0x78, 0x04, 0x5e, 0x11, 0x5e, 0x01, 0x09, 0xf5, 0x4f, 0x1c, 0x7b, 0x36, 0x20, 0xb4, 0x12,
0xb7, 0xd4, 0x57, 0x55, 0x5d, 0x55, 0xdf, 0x57, 0xe5, 0xc0, 0x29, 0xaa, 0x24, 0x8d, 0x39, 0x2a,
0x7a, 0xb1, 0x2d, 0x72, 0x95, 0x93, 0x73, 0xce, 0xb2, 0x9f, 0x4a, 0x69, 0xad, 0x0b, 0xed, 0x7d,
0xd0, 0x4f, 0x72, 0xce, 0x73, 0x61, 0xa1, 0x07, 0x7d, 0x99, 0x6c, 0x90, 0xbb, 0xf0, 0xf0, 0x77,
0x0f, 0xe0, 0x1a, 0x05, 0x15, 0xea, 0x5b, 0x54, 0x94, 0x0c, 0xe1, 0x68, 0x36, 0x0d, 0xbc, 0x91,
0x37, 0x6e, 0x45, 0x47, 0xb3, 0x29, 0x79, 0x1f, 0x4e, 0x45, 0xc9, 0xe3, 0x1f, 0x4b, 0x2c, 0x6e,
0x63, 0x91, 0xa7, 0x28, 0x83, 0x23, 0xe3, 0x1c, 0x88, 0x92, 0x7f, 0xa7, 0xd1, 0x97, 0x1a, 0x24,
0x1f, 0xc2, 0x39, 0x13, 0x12, 0x0b, 0x15, 0x27, 0x1b, 0x2a, 0x04, 0x66, 0xb3, 0xa9, 0x0c, 0x5a,
0xa3, 0xd6, 0xd8, 0x8f, 0xce, 0xac, 0xe3, 0x45, 0x85, 0x93, 0x0f, 0xe0, 0xd4, 0x3e, 0x58, 0xc5,
0x06, 0xed, 0x91, 0x37, 0xf6, 0xa3, 0xa1, 0x81, 0xab, 0xc8, 0xf0, 0x17, 0x0f, 0xfc, 0x79, 0x91,
0xdf, 0xdc, 0x1e, 0xec, 0xed, 0x53, 0xe8, 0xd2, 0x34, 0x2d, 0x50, 0xda, 0x9e, 0x7a, 0x97, 0x0f,
0x2f, 0x1a, 0xb3, 0xbb, 0xa9, 0xbf, 0xb2, 0x31, 0xd1, 0x2e, 0x58, 0xf7, 0x5a, 0xa0, 0x2c, 0xb3,
0x43, 0xbd, 0x5a, 0xc7, 0xbe, 0xd7, 0xf0, 0x06, 0x06, 0x73, 0x5a, 0x28, 0xa6, 0x58, 0x2e, 0x66,
0x62, 0x95, 0x93, 0x67, 0x30, 0xdc, 0xee, 0x80, 0x58, 0x50, 0x8e, 0xa6, 0x23, 0x3f, 0x1a, 0x54,
0xe8, 0x4b, 0xca, 0x91, 0x8c, 0xa0, 0x57, 0x01, 0xb3, 0xa9, 0x23, 0xad, 0x0e, 0x91, 0xf7, 0x00,
0x24, 0xae, 0x39, 0x0a, 0xb5, 0xab, 0xdf, 0x8a, 0x6a, 0x48, 0xf8, 0x9b, 0x07, 0xfe, 0x4c, 0xa4,
0x78, 0x63, 0xca, 0x3e, 0x02, 0x60, 0xda, 0xa8, 0x97, 0xf4, 0x0d, 0x62, 0xca, 0x05, 0xd0, 0x35,
0x46, 0x55, 0x6a, 0x67, 0x92, 0x29, 0xf4, 0x6d, 0xe2, 0x96, 0x16, 0x94, 0xdb, 0x42, 0xbd, 0xcb,
0x27, 0x07, 0xa9, 0xfa, 0x06, 0x6f, 0xbf, 0xa7, 0x59, 0x89, 0x73, 0xca, 0x8a, 0xa8, 0x67, 0xd2,
0xe6, 0x26, 0x2b, 0x5c, 0xc3, 0xf0, 0x8a, 0x61, 0x96, 0xee, 0x1b, 0x0a, 0xa0, 0xbb, 0x62, 0x19,
0xa6, 0x95, 0x24, 0x3b, 0x93, 0x7c, 0xb6, 0x6b, 0x95, 0x89, 0x55, 0x7e, 0x58, 0x1a, 0xbd, 0x96,
0x17, 0xd5, 0x5b, 0x6e, 0x10, 0xfd, 0x33, 0xfc, 0xd3, 0x83, 0xe1, 0x8b, 0x3c, 0xcb, 0x30, 0xa9,
0x18, 0xbf, 0xaf, 0xfb, 0xe7, 0xd0, 0xb1, 0x2b, 0xec, 0xde, 0x7e, 0xd6, 0x7c, 0xdb, 0xad, 0xf7,
0xfe, 0x91, 0x85, 0x01, 0x22, 0x97, 0x44, 0x1e, 0x43, 0x2f, 0x29, 0x90, 0x2a, 0x8c, 0x15, 0xe3,
0x18, 0xb4, 0x46, 0xde, 0xb8, 0x1d, 0x81, 0x85, 0xae, 0x19, 0x47, 0x12, 0x42, 0xbf, 0xa6, 0x93,
0x0c, 0xda, 0x46, 0x9a, 0x06, 0x46, 0xae, 0x60, 0xb0, 0xd2, 0x7c, 0xc4, 0xa6, 0x73, 0x94, 0xc1,
0xf1, 0x21, 0x5a, 0xcd, 0x98, 0x4d, 0xde, 0xa2, 0xfe, 0xaa, 0xb2, 0x51, 0x86, 0x3f, 0xc3, 0xd9,
0xc2, 0x49, 0x5e, 0x31, 0xfb, 0x10, 0xfc, 0x6a, 0x0d, 0xdc, 0xd8, 0x7b, 0xc0, 0xf2, 0xae, 0x5f,
0xa8, 0x94, 0x76, 0x66, 0x7d, 0x07, 0x5a, 0xcd, 0x1d, 0x08, 0xa0, 0xbb, 0x2c, 0x99, 0xc9, 0x69,
0x5b, 0x8f, 0x33, 0xc3, 0x3f, 0x1a, 0x74, 0x1f, 0x3c, 0xb3, 0xff, 0x9b, 0xee, 0xe6, 0x1d, 0xb4,
0xef, 0xdf, 0x41, 0xf3, 0xe0, 0x14, 0x5d, 0x5b, 0xae, 0xeb, 0x07, 0x77, 0x4d, 0xd7, 0xf2, 0x0d,
0xd5, 0x3a, 0x6f, 0xaa, 0x16, 0xbe, 0x82, 0x33, 0xa3, 0xc6, 0x73, 0x26, 0xb2, 0x7c, 0x7d, 0xc5,
0x32, 0x94, 0x75, 0x3e, 0xbd, 0x26, 0x9f, 0x4f, 0xa0, 0xbf, 0x34, 0x81, 0xb1, 0xde, 0x6c, 0xfd,
0x91, 0xd1, 0x65, 0x7b, 0xcb, 0x7d, 0x72, 0xf8, 0xd7, 0x11, 0xf4, 0x9c, 0x7e, 0x86, 0xbb, 0x7f,
0x97, 0x2e, 0x84, 0x7e, 0xb2, 0x5f, 0xed, 0x9d, 0x7e, 0x0d, 0x8c, 0x3c, 0x85, 0x41, 0x63, 0x5a,
0x43, 0x98, 0x5f, 0x9b, 0xe3, 0x9a, 0xae, 0x75, 0x90, 0xfb, 0x74, 0xc5, 0x52, 0xd1, 0x42, 0x19,
0x55, 0x8f, 0xa3, 0xbe, 0x03, 0x17, 0x1a, 0x33, 0xc4, 0xbb, 0x20, 0x14, 0x69, 0x70, 0x6c, 0x42,
0xc0, 0x41, 0x5f, 0x8b, 0x94, 0xbc, 0x0b, 0x7e, 0xbe, 0x45, 0x61, 0x75, 0xe9, 0x18, 0x5d, 0x4e,
0x34, 0x60, 0x54, 0x79, 0x04, 0x90, 0x64, 0xb9, 0x74, 0xaa, 0x75, 0x8d, 0xd7, 0x37, 0x88, 0x71,
0xbf, 0x03, 0x27, 0xfa, 0x7f, 0xa1, 0xc8, 0x5f, 0xcb, 0xe0, 0xc4, 0xd2, 0x26, 0x4a, 0x1e, 0xe5,
0xaf, 0xa5, 0x76, 0x71, 0xe4, 0xb1, 0x64, 0x77, 0x18, 0xf8, 0xd6, 0xc5, 0x91, 0x2f, 0xd8, 0x1d,
0x92, 0x57, 0x70, 0x5e, 0x63, 0x34, 0xde, 0x52, 0xb5, 0x91, 0x01, 0x98, 0xcb, 0x79, 0xfa, 0x4f,
0x97, 0x53, 0xd3, 0x2a, 0x3a, 0xdd, 0x73, 0x3f, 0xd7, 0xb9, 0xe1, 0xaf, 0x47, 0xf5, 0xef, 0xd2,
0x7f, 0x90, 0xe0, 0x6d, 0xae, 0xe7, 0xfe, 0x17, 0xb4, 0xfd, 0x36, 0x5f, 0x50, 0xf2, 0x09, 0x1c,
0x4b, 0x45, 0x15, 0x1a, 0x21, 0x86, 0x97, 0x8f, 0x0f, 0xa6, 0x9b, 0x31, 0x16, 0x3a, 0x2c, 0xb2,
0xd1, 0x64, 0x0c, 0x67, 0xb6, 0x78, 0x8d, 0xb1, 0x8e, 0x59, 0xc4, 0xa1, 0xc1, 0x2b, 0x2e, 0x9e,
0x7f, 0xf9, 0xc3, 0x17, 0x6b, 0xa6, 0x36, 0xe5, 0x52, 0x3f, 0x36, 0xb9, 0x63, 0x59, 0xc6, 0xee,
0x14, 0x26, 0x9b, 0x89, 0x2d, 0xf4, 0x51, 0xca, 0xa4, 0x2a, 0xd8, 0xb2, 0x54, 0x98, 0x4e, 0x98,
0x50, 0x58, 0x08, 0x9a, 0x4d, 0x4c, 0xf5, 0x89, 0x66, 0x7b, 0xbb, 0x5c, 0x76, 0x8c, 0xf5, 0xf1,
0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x8d, 0xb6, 0x6d, 0x54, 0x08, 0x00, 0x00,
// 845 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x54, 0x5f, 0x8f, 0xdb, 0x44,
0x10, 0x97, 0x93, 0x5c, 0x72, 0x9e, 0xfc, 0xb9, 0xbb, 0x7d, 0x32, 0xa5, 0xa5, 0xa9, 0xab, 0x42,
0x24, 0xc4, 0x45, 0x3a, 0x04, 0x6f, 0x20, 0x68, 0xc3, 0x49, 0x11, 0xa2, 0x0d, 0xce, 0x89, 0x07,
0x5e, 0xac, 0x8d, 0x3d, 0x97, 0xac, 0xe4, 0x5d, 0x07, 0xef, 0x9a, 0xde, 0xdd, 0x03, 0xe2, 0x15,
0x3e, 0x02, 0x5f, 0x11, 0xbe, 0x02, 0x12, 0xda, 0x3f, 0x71, 0xec, 0x6b, 0x8a, 0x50, 0x25, 0x1e,
0xe7, 0x37, 0x33, 0x3b, 0x33, 0xbf, 0xdf, 0xcc, 0xc2, 0x09, 0xaa, 0x24, 0x8d, 0x39, 0x2a, 0x7a,
0xbe, 0x2d, 0x72, 0x95, 0x93, 0x33, 0xce, 0xb2, 0x9f, 0x4b, 0x69, 0xad, 0x73, 0xed, 0x7d, 0x30,
0x48, 0x72, 0xce, 0x73, 0x61, 0xa1, 0x07, 0x03, 0x99, 0x6c, 0x90, 0xbb, 0xf0, 0xf0, 0x0f, 0x0f,
0xe0, 0x0a, 0x05, 0x15, 0xea, 0x3b, 0x54, 0x94, 0x8c, 0xa0, 0x35, 0x9f, 0x05, 0xde, 0xd8, 0x9b,
0xb4, 0xa3, 0xd6, 0x7c, 0x46, 0x3e, 0x84, 0x13, 0x51, 0xf2, 0xf8, 0xa7, 0x12, 0x8b, 0xdb, 0x58,
0xe4, 0x29, 0xca, 0xa0, 0x65, 0x9c, 0x43, 0x51, 0xf2, 0xef, 0x35, 0xfa, 0x52, 0x83, 0xe4, 0x63,
0x38, 0x63, 0x42, 0x62, 0xa1, 0xe2, 0x64, 0x43, 0x85, 0xc0, 0x6c, 0x3e, 0x93, 0x41, 0x7b, 0xdc,
0x9e, 0xf8, 0xd1, 0xa9, 0x75, 0xbc, 0xa8, 0x70, 0xf2, 0x11, 0x9c, 0xd8, 0x07, 0xab, 0xd8, 0xa0,
0x33, 0xf6, 0x26, 0x7e, 0x34, 0x32, 0x70, 0x15, 0x19, 0xfe, 0xea, 0x81, 0xbf, 0x28, 0xf2, 0x9b,
0xdb, 0x83, 0xbd, 0x7d, 0x0e, 0x3d, 0x9a, 0xa6, 0x05, 0x4a, 0xdb, 0x53, 0xff, 0xe2, 0xe1, 0x79,
0x63, 0x76, 0x37, 0xf5, 0xd7, 0x36, 0x26, 0xda, 0x05, 0xeb, 0x5e, 0x0b, 0x94, 0x65, 0x76, 0xa8,
0x57, 0xeb, 0xd8, 0xf7, 0x1a, 0xde, 0xc0, 0x70, 0x41, 0x0b, 0xc5, 0x14, 0xcb, 0xc5, 0x5c, 0x5c,
0xe7, 0xe4, 0x19, 0x8c, 0xb6, 0x3b, 0x20, 0x16, 0x94, 0xa3, 0xe9, 0xc8, 0x8f, 0x86, 0x15, 0xfa,
0x92, 0x72, 0x24, 0x63, 0xe8, 0x57, 0xc0, 0x7c, 0xe6, 0x48, 0xab, 0x43, 0xe4, 0x03, 0x00, 0x89,
0x6b, 0x8e, 0x42, 0xed, 0xea, 0xb7, 0xa3, 0x1a, 0x12, 0xfe, 0xee, 0x81, 0x3f, 0x17, 0x29, 0xde,
0x98, 0xb2, 0x8f, 0x00, 0x98, 0x36, 0xea, 0x25, 0x7d, 0x83, 0x98, 0x72, 0x01, 0xf4, 0x8c, 0x51,
0x95, 0xda, 0x99, 0x64, 0x06, 0x03, 0x9b, 0xb8, 0xa5, 0x05, 0xe5, 0xb6, 0x50, 0xff, 0xe2, 0xc9,
0x41, 0xaa, 0xbe, 0xc5, 0xdb, 0x1f, 0x68, 0x56, 0xe2, 0x82, 0xb2, 0x22, 0xea, 0x9b, 0xb4, 0x85,
0xc9, 0x0a, 0x67, 0x30, 0xba, 0x64, 0x98, 0xa5, 0xfb, 0x86, 0x02, 0xe8, 0x5d, 0xb3, 0x0c, 0xd3,
0x4a, 0x92, 0x9d, 0xf9, 0xf6, 0x5e, 0xc2, 0xbf, 0x3c, 0x18, 0xbd, 0xc8, 0xb3, 0x0c, 0x93, 0x8a,
0xce, 0xfb, 0xa2, 0x7e, 0x01, 0x5d, 0xbb, 0x9f, 0x4e, 0xd3, 0x67, 0xcd, 0x46, 0xdd, 0xee, 0xee,
0x1f, 0x59, 0x1a, 0x20, 0x72, 0x49, 0xe4, 0x31, 0xf4, 0x93, 0x02, 0xa9, 0xc2, 0x58, 0x31, 0x8e,
0x41, 0x7b, 0xec, 0x4d, 0x3a, 0x11, 0x58, 0xe8, 0x8a, 0x71, 0x24, 0x21, 0x0c, 0x6a, 0x22, 0xc8,
0xa0, 0x63, 0x78, 0x6f, 0x60, 0xe4, 0x12, 0x86, 0xd7, 0x7a, 0xd8, 0xd8, 0xf4, 0x8d, 0x32, 0x38,
0x3a, 0xc4, 0x99, 0x3e, 0xad, 0xf3, 0x26, 0x29, 0xd1, 0xe0, 0xba, 0xb2, 0x51, 0x86, 0xbf, 0xc0,
0xe9, 0xd2, 0xe9, 0x59, 0xd1, 0xf6, 0x10, 0xfc, 0x4a, 0x63, 0x37, 0xf6, 0x1e, 0xb0, 0xa4, 0xea,
0x17, 0x2a, 0xea, 0x9c, 0x59, 0x27, 0xb5, 0xdd, 0x14, 0x38, 0x80, 0xde, 0xaa, 0x64, 0x26, 0xa7,
0x63, 0x3d, 0xce, 0x0c, 0xff, 0x6c, 0xd0, 0x7d, 0xf0, 0x86, 0xfe, 0x6f, 0xba, 0x9b, 0x4b, 0xde,
0xb9, 0xbf, 0xe4, 0xcd, 0x6b, 0x52, 0x74, 0x6d, 0xb9, 0xae, 0x5f, 0xd3, 0x15, 0x5d, 0xcb, 0x37,
0x54, 0xeb, 0xbe, 0xa9, 0x5a, 0xf8, 0x0a, 0x4e, 0x8d, 0x1a, 0xcf, 0x99, 0xc8, 0xf2, 0xf5, 0x25,
0xcb, 0x50, 0xd6, 0xf9, 0xf4, 0x9a, 0x7c, 0x3e, 0x81, 0xc1, 0xca, 0x04, 0xc6, 0x7a, 0x6d, 0xf5,
0x0f, 0xa2, 0xcb, 0xf6, 0x57, 0xfb, 0xe4, 0xf0, 0xef, 0x16, 0xf4, 0x9d, 0x7e, 0x86, 0xbb, 0x7f,
0x97, 0x2e, 0x84, 0x41, 0xb2, 0x5f, 0xed, 0x9d, 0x7e, 0x0d, 0x8c, 0x3c, 0x85, 0x61, 0x63, 0x5a,
0x43, 0x98, 0x5f, 0x9b, 0xe3, 0x8a, 0xae, 0x75, 0x90, 0xfb, 0x97, 0x62, 0xa9, 0x68, 0xa1, 0x8c,
0xaa, 0x47, 0xd1, 0xc0, 0x81, 0x4b, 0x8d, 0x19, 0xe2, 0x5d, 0x10, 0x8a, 0x34, 0x38, 0x32, 0x21,
0xe0, 0xa0, 0x6f, 0x44, 0x4a, 0xde, 0x07, 0x3f, 0xdf, 0xa2, 0xb0, 0xba, 0x74, 0x8d, 0x2e, 0xc7,
0x1a, 0x30, 0xaa, 0x3c, 0x02, 0x48, 0xb2, 0x5c, 0x3a, 0xd5, 0x7a, 0xc6, 0xeb, 0x1b, 0xc4, 0xb8,
0xdf, 0x83, 0x63, 0xfd, 0xe9, 0x17, 0xf9, 0x6b, 0x19, 0x1c, 0x5b, 0xda, 0x44, 0xc9, 0xa3, 0xfc,
0xb5, 0xd4, 0x2e, 0x8e, 0x3c, 0x96, 0xec, 0x0e, 0x03, 0xdf, 0xba, 0x38, 0xf2, 0x25, 0xbb, 0x43,
0xf2, 0x0a, 0xce, 0x6a, 0x8c, 0xc6, 0x5b, 0xaa, 0x36, 0x32, 0x00, 0x73, 0x39, 0x4f, 0xdf, 0x76,
0x39, 0x35, 0xad, 0xa2, 0x93, 0x3d, 0xf7, 0x0b, 0x9d, 0x1b, 0xfe, 0xd6, 0xaa, 0x7f, 0x3a, 0xff,
0x41, 0x82, 0x77, 0xb9, 0x9e, 0xfb, 0xdf, 0x63, 0xe7, 0x5d, 0xbe, 0x47, 0xf2, 0x19, 0x1c, 0x49,
0x45, 0x15, 0x1a, 0x21, 0x46, 0x17, 0x8f, 0x0f, 0xa6, 0x9b, 0x31, 0x96, 0x3a, 0x2c, 0xb2, 0xd1,
0x64, 0x02, 0xa7, 0xb6, 0x78, 0x8d, 0xb1, 0xae, 0x59, 0xc4, 0x91, 0xc1, 0x2b, 0x2e, 0x9e, 0x7f,
0xf5, 0xe3, 0x97, 0x6b, 0xa6, 0x36, 0xe5, 0x4a, 0x3f, 0x36, 0xbd, 0x63, 0x59, 0xc6, 0xee, 0x14,
0x26, 0x9b, 0xa9, 0x2d, 0xf4, 0x49, 0xca, 0xa4, 0x2a, 0xd8, 0xaa, 0x54, 0x98, 0x4e, 0x99, 0x50,
0x58, 0x08, 0x9a, 0x4d, 0x4d, 0xf5, 0xa9, 0x66, 0x7b, 0xbb, 0x5a, 0x75, 0x8d, 0xf5, 0xe9, 0x3f,
0x01, 0x00, 0x00, 0xff, 0xff, 0x9d, 0x83, 0x5a, 0x23, 0x31, 0x08, 0x00, 0x00,
}