Expose metrics of QueryCoord and QueryNodes (#7113)

Signed-off-by: dragondriver <jiquan.long@zilliz.com>
pull/7137/head
dragondriver 2021-08-17 10:06:11 +08:00 committed by GitHub
parent fb22d122e5
commit 7eb8a665b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 2850 additions and 393 deletions

File diff suppressed because it is too large Load Diff

View File

@ -53,7 +53,7 @@ struct TableStruct_milvus_2eproto {
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[61]
static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[63]
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
@ -141,6 +141,12 @@ extern GetIndexStateRequestDefaultTypeInternal _GetIndexStateRequest_default_ins
class GetIndexStateResponse;
class GetIndexStateResponseDefaultTypeInternal;
extern GetIndexStateResponseDefaultTypeInternal _GetIndexStateResponse_default_instance_;
class GetMetricsRequest;
class GetMetricsRequestDefaultTypeInternal;
extern GetMetricsRequestDefaultTypeInternal _GetMetricsRequest_default_instance_;
class GetMetricsResponse;
class GetMetricsResponseDefaultTypeInternal;
extern GetMetricsResponseDefaultTypeInternal _GetMetricsResponse_default_instance_;
class GetPartitionStatisticsRequest;
class GetPartitionStatisticsRequestDefaultTypeInternal;
extern GetPartitionStatisticsRequestDefaultTypeInternal _GetPartitionStatisticsRequest_default_instance_;
@ -276,6 +282,8 @@ template<> ::milvus::proto::milvus::GetIndexBuildProgressRequest* Arena::CreateM
template<> ::milvus::proto::milvus::GetIndexBuildProgressResponse* Arena::CreateMaybeMessage<::milvus::proto::milvus::GetIndexBuildProgressResponse>(Arena*);
template<> ::milvus::proto::milvus::GetIndexStateRequest* Arena::CreateMaybeMessage<::milvus::proto::milvus::GetIndexStateRequest>(Arena*);
template<> ::milvus::proto::milvus::GetIndexStateResponse* Arena::CreateMaybeMessage<::milvus::proto::milvus::GetIndexStateResponse>(Arena*);
template<> ::milvus::proto::milvus::GetMetricsRequest* Arena::CreateMaybeMessage<::milvus::proto::milvus::GetMetricsRequest>(Arena*);
template<> ::milvus::proto::milvus::GetMetricsResponse* Arena::CreateMaybeMessage<::milvus::proto::milvus::GetMetricsResponse>(Arena*);
template<> ::milvus::proto::milvus::GetPartitionStatisticsRequest* Arena::CreateMaybeMessage<::milvus::proto::milvus::GetPartitionStatisticsRequest>(Arena*);
template<> ::milvus::proto::milvus::GetPartitionStatisticsResponse* Arena::CreateMaybeMessage<::milvus::proto::milvus::GetPartitionStatisticsResponse>(Arena*);
template<> ::milvus::proto::milvus::GetPersistentSegmentInfoRequest* Arena::CreateMaybeMessage<::milvus::proto::milvus::GetPersistentSegmentInfoRequest>(Arena*);
@ -10494,6 +10502,313 @@ class RegisterLinkResponse :
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_milvus_2eproto;
};
// -------------------------------------------------------------------
class GetMetricsRequest :
public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.milvus.GetMetricsRequest) */ {
public:
GetMetricsRequest();
virtual ~GetMetricsRequest();
GetMetricsRequest(const GetMetricsRequest& from);
GetMetricsRequest(GetMetricsRequest&& from) noexcept
: GetMetricsRequest() {
*this = ::std::move(from);
}
inline GetMetricsRequest& operator=(const GetMetricsRequest& from) {
CopyFrom(from);
return *this;
}
inline GetMetricsRequest& operator=(GetMetricsRequest&& from) noexcept {
if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
if (this != &from) InternalSwap(&from);
} else {
CopyFrom(from);
}
return *this;
}
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
return GetDescriptor();
}
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor;
}
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection;
}
static const GetMetricsRequest& default_instance();
static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY
static inline const GetMetricsRequest* internal_default_instance() {
return reinterpret_cast<const GetMetricsRequest*>(
&_GetMetricsRequest_default_instance_);
}
static constexpr int kIndexInFileMessages =
61;
friend void swap(GetMetricsRequest& a, GetMetricsRequest& b) {
a.Swap(&b);
}
inline void Swap(GetMetricsRequest* other) {
if (other == this) return;
InternalSwap(other);
}
// implements Message ----------------------------------------------
inline GetMetricsRequest* New() const final {
return CreateMaybeMessage<GetMetricsRequest>(nullptr);
}
GetMetricsRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
return CreateMaybeMessage<GetMetricsRequest>(arena);
}
void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
void CopyFrom(const GetMetricsRequest& from);
void MergeFrom(const GetMetricsRequest& from);
PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
size_t ByteSizeLong() const final;
#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
#else
bool MergePartialFromCodedStream(
::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
void SerializeWithCachedSizes(
::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
int GetCachedSize() const final { return _cached_size_.Get(); }
private:
inline void SharedCtor();
inline void SharedDtor();
void SetCachedSize(int size) const final;
void InternalSwap(GetMetricsRequest* other);
friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
return "milvus.proto.milvus.GetMetricsRequest";
}
private:
inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
return nullptr;
}
inline void* MaybeArenaPtr() const {
return nullptr;
}
public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_milvus_2eproto);
return ::descriptor_table_milvus_2eproto.file_level_metadata[kIndexInFileMessages];
}
public:
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
enum : int {
kRequestFieldNumber = 2,
kBaseFieldNumber = 1,
};
// string request = 2;
void clear_request();
const std::string& request() const;
void set_request(const std::string& value);
void set_request(std::string&& value);
void set_request(const char* value);
void set_request(const char* value, size_t size);
std::string* mutable_request();
std::string* release_request();
void set_allocated_request(std::string* request);
// .milvus.proto.common.MsgBase base = 1;
bool has_base() const;
void clear_base();
const ::milvus::proto::common::MsgBase& base() const;
::milvus::proto::common::MsgBase* release_base();
::milvus::proto::common::MsgBase* mutable_base();
void set_allocated_base(::milvus::proto::common::MsgBase* base);
// @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetMetricsRequest)
private:
class _Internal;
::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr request_;
::milvus::proto::common::MsgBase* base_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_milvus_2eproto;
};
// -------------------------------------------------------------------
class GetMetricsResponse :
public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.milvus.GetMetricsResponse) */ {
public:
GetMetricsResponse();
virtual ~GetMetricsResponse();
GetMetricsResponse(const GetMetricsResponse& from);
GetMetricsResponse(GetMetricsResponse&& from) noexcept
: GetMetricsResponse() {
*this = ::std::move(from);
}
inline GetMetricsResponse& operator=(const GetMetricsResponse& from) {
CopyFrom(from);
return *this;
}
inline GetMetricsResponse& operator=(GetMetricsResponse&& from) noexcept {
if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
if (this != &from) InternalSwap(&from);
} else {
CopyFrom(from);
}
return *this;
}
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
return GetDescriptor();
}
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor;
}
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection;
}
static const GetMetricsResponse& default_instance();
static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY
static inline const GetMetricsResponse* internal_default_instance() {
return reinterpret_cast<const GetMetricsResponse*>(
&_GetMetricsResponse_default_instance_);
}
static constexpr int kIndexInFileMessages =
62;
friend void swap(GetMetricsResponse& a, GetMetricsResponse& b) {
a.Swap(&b);
}
inline void Swap(GetMetricsResponse* other) {
if (other == this) return;
InternalSwap(other);
}
// implements Message ----------------------------------------------
inline GetMetricsResponse* New() const final {
return CreateMaybeMessage<GetMetricsResponse>(nullptr);
}
GetMetricsResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
return CreateMaybeMessage<GetMetricsResponse>(arena);
}
void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
void CopyFrom(const GetMetricsResponse& from);
void MergeFrom(const GetMetricsResponse& from);
PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
size_t ByteSizeLong() const final;
#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
#else
bool MergePartialFromCodedStream(
::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
void SerializeWithCachedSizes(
::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
int GetCachedSize() const final { return _cached_size_.Get(); }
private:
inline void SharedCtor();
inline void SharedDtor();
void SetCachedSize(int size) const final;
void InternalSwap(GetMetricsResponse* other);
friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
return "milvus.proto.milvus.GetMetricsResponse";
}
private:
inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
return nullptr;
}
inline void* MaybeArenaPtr() const {
return nullptr;
}
public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_milvus_2eproto);
return ::descriptor_table_milvus_2eproto.file_level_metadata[kIndexInFileMessages];
}
public:
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
enum : int {
kResponseFieldNumber = 2,
kComponentNameFieldNumber = 3,
kStatusFieldNumber = 1,
};
// string response = 2;
void clear_response();
const std::string& response() const;
void set_response(const std::string& value);
void set_response(std::string&& value);
void set_response(const char* value);
void set_response(const char* value, size_t size);
std::string* mutable_response();
std::string* release_response();
void set_allocated_response(std::string* response);
// string component_name = 3;
void clear_component_name();
const std::string& component_name() const;
void set_component_name(const std::string& value);
void set_component_name(std::string&& value);
void set_component_name(const char* value);
void set_component_name(const char* value, size_t size);
std::string* mutable_component_name();
std::string* release_component_name();
void set_allocated_component_name(std::string* component_name);
// .milvus.proto.common.Status status = 1;
bool has_status() const;
void clear_status();
const ::milvus::proto::common::Status& status() const;
::milvus::proto::common::Status* release_status();
::milvus::proto::common::Status* mutable_status();
void set_allocated_status(::milvus::proto::common::Status* status);
// @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetMetricsResponse)
private:
class _Internal;
::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr response_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr component_name_;
::milvus::proto::common::Status* status_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_milvus_2eproto;
};
// ===================================================================
@ -19923,6 +20238,257 @@ inline void RegisterLinkResponse::set_allocated_status(::milvus::proto::common::
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.RegisterLinkResponse.status)
}
// -------------------------------------------------------------------
// GetMetricsRequest
// .milvus.proto.common.MsgBase base = 1;
inline bool GetMetricsRequest::has_base() const {
return this != internal_default_instance() && base_ != nullptr;
}
inline const ::milvus::proto::common::MsgBase& GetMetricsRequest::base() const {
const ::milvus::proto::common::MsgBase* p = base_;
// @@protoc_insertion_point(field_get:milvus.proto.milvus.GetMetricsRequest.base)
return p != nullptr ? *p : *reinterpret_cast<const ::milvus::proto::common::MsgBase*>(
&::milvus::proto::common::_MsgBase_default_instance_);
}
inline ::milvus::proto::common::MsgBase* GetMetricsRequest::release_base() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.GetMetricsRequest.base)
::milvus::proto::common::MsgBase* temp = base_;
base_ = nullptr;
return temp;
}
inline ::milvus::proto::common::MsgBase* GetMetricsRequest::mutable_base() {
if (base_ == nullptr) {
auto* p = CreateMaybeMessage<::milvus::proto::common::MsgBase>(GetArenaNoVirtual());
base_ = p;
}
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.GetMetricsRequest.base)
return base_;
}
inline void GetMetricsRequest::set_allocated_base(::milvus::proto::common::MsgBase* base) {
::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
if (message_arena == nullptr) {
delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(base_);
}
if (base) {
::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
if (message_arena != submessage_arena) {
base = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
message_arena, base, submessage_arena);
}
} else {
}
base_ = base;
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.GetMetricsRequest.base)
}
// string request = 2;
inline void GetMetricsRequest::clear_request() {
request_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& GetMetricsRequest::request() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.GetMetricsRequest.request)
return request_.GetNoArena();
}
inline void GetMetricsRequest::set_request(const std::string& value) {
request_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.milvus.GetMetricsRequest.request)
}
inline void GetMetricsRequest::set_request(std::string&& value) {
request_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.milvus.GetMetricsRequest.request)
}
inline void GetMetricsRequest::set_request(const char* value) {
GOOGLE_DCHECK(value != nullptr);
request_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.milvus.GetMetricsRequest.request)
}
inline void GetMetricsRequest::set_request(const char* value, size_t size) {
request_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.milvus.GetMetricsRequest.request)
}
inline std::string* GetMetricsRequest::mutable_request() {
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.GetMetricsRequest.request)
return request_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* GetMetricsRequest::release_request() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.GetMetricsRequest.request)
return request_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void GetMetricsRequest::set_allocated_request(std::string* request) {
if (request != nullptr) {
} else {
}
request_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), request);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.GetMetricsRequest.request)
}
// -------------------------------------------------------------------
// GetMetricsResponse
// .milvus.proto.common.Status status = 1;
inline bool GetMetricsResponse::has_status() const {
return this != internal_default_instance() && status_ != nullptr;
}
inline const ::milvus::proto::common::Status& GetMetricsResponse::status() const {
const ::milvus::proto::common::Status* p = status_;
// @@protoc_insertion_point(field_get:milvus.proto.milvus.GetMetricsResponse.status)
return p != nullptr ? *p : *reinterpret_cast<const ::milvus::proto::common::Status*>(
&::milvus::proto::common::_Status_default_instance_);
}
inline ::milvus::proto::common::Status* GetMetricsResponse::release_status() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.GetMetricsResponse.status)
::milvus::proto::common::Status* temp = status_;
status_ = nullptr;
return temp;
}
inline ::milvus::proto::common::Status* GetMetricsResponse::mutable_status() {
if (status_ == nullptr) {
auto* p = CreateMaybeMessage<::milvus::proto::common::Status>(GetArenaNoVirtual());
status_ = p;
}
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.GetMetricsResponse.status)
return status_;
}
inline void GetMetricsResponse::set_allocated_status(::milvus::proto::common::Status* status) {
::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
if (message_arena == nullptr) {
delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(status_);
}
if (status) {
::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
if (message_arena != submessage_arena) {
status = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
message_arena, status, submessage_arena);
}
} else {
}
status_ = status;
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.GetMetricsResponse.status)
}
// string response = 2;
inline void GetMetricsResponse::clear_response() {
response_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& GetMetricsResponse::response() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.GetMetricsResponse.response)
return response_.GetNoArena();
}
inline void GetMetricsResponse::set_response(const std::string& value) {
response_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.milvus.GetMetricsResponse.response)
}
inline void GetMetricsResponse::set_response(std::string&& value) {
response_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.milvus.GetMetricsResponse.response)
}
inline void GetMetricsResponse::set_response(const char* value) {
GOOGLE_DCHECK(value != nullptr);
response_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.milvus.GetMetricsResponse.response)
}
inline void GetMetricsResponse::set_response(const char* value, size_t size) {
response_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.milvus.GetMetricsResponse.response)
}
inline std::string* GetMetricsResponse::mutable_response() {
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.GetMetricsResponse.response)
return response_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* GetMetricsResponse::release_response() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.GetMetricsResponse.response)
return response_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void GetMetricsResponse::set_allocated_response(std::string* response) {
if (response != nullptr) {
} else {
}
response_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), response);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.GetMetricsResponse.response)
}
// string component_name = 3;
inline void GetMetricsResponse::clear_component_name() {
component_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& GetMetricsResponse::component_name() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.GetMetricsResponse.component_name)
return component_name_.GetNoArena();
}
inline void GetMetricsResponse::set_component_name(const std::string& value) {
component_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.milvus.GetMetricsResponse.component_name)
}
inline void GetMetricsResponse::set_component_name(std::string&& value) {
component_name_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.milvus.GetMetricsResponse.component_name)
}
inline void GetMetricsResponse::set_component_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
component_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.milvus.GetMetricsResponse.component_name)
}
inline void GetMetricsResponse::set_component_name(const char* value, size_t size) {
component_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.milvus.GetMetricsResponse.component_name)
}
inline std::string* GetMetricsResponse::mutable_component_name() {
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.GetMetricsResponse.component_name)
return component_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* GetMetricsResponse::release_component_name() {
// @@protoc_insertion_point(field_release:milvus.proto.milvus.GetMetricsResponse.component_name)
return component_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void GetMetricsResponse::set_allocated_component_name(std::string* component_name) {
if (component_name != nullptr) {
} else {
}
component_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), component_name);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.GetMetricsResponse.component_name)
}
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif // __GNUC__
@ -20046,6 +20612,10 @@ inline void RegisterLinkResponse::set_allocated_status(::milvus::proto::common::
// -------------------------------------------------------------------
// -------------------------------------------------------------------
// -------------------------------------------------------------------
// @@protoc_insertion_point(namespace_scope)

View File

@ -244,3 +244,10 @@ func (c *Client) GetSegmentInfo(ctx context.Context, req *querypb.GetSegmentInfo
})
return ret.(*querypb.GetSegmentInfoResponse), err
}
func (c *Client) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
ret, err := c.recall(func() (interface{}, error) {
return c.grpcClient.GetMetrics(ctx, req)
})
return ret.(*milvuspb.GetMetricsResponse), err
}

View File

@ -275,3 +275,7 @@ func (s *Server) CreateQueryChannel(ctx context.Context, req *querypb.CreateQuer
func (s *Server) GetSegmentInfo(ctx context.Context, req *querypb.GetSegmentInfoRequest) (*querypb.GetSegmentInfoResponse, error) {
return s.queryCoord.GetSegmentInfo(ctx, req)
}
func (s *Server) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
return s.queryCoord.GetMetrics(ctx, req)
}

View File

@ -208,3 +208,10 @@ func (c *Client) GetSegmentInfo(ctx context.Context, req *querypb.GetSegmentInfo
})
return ret.(*querypb.GetSegmentInfoResponse), err
}
func (c *Client) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
ret, err := c.recall(func() (interface{}, error) {
return c.grpcClient.GetMetrics(ctx, req)
})
return ret.(*milvuspb.GetMetricsResponse), err
}

View File

@ -311,3 +311,7 @@ func (s *Server) ReleaseSegments(ctx context.Context, req *querypb.ReleaseSegmen
func (s *Server) GetSegmentInfo(ctx context.Context, req *querypb.GetSegmentInfoRequest) (*querypb.GetSegmentInfoResponse, error) {
return s.querynode.GetSegmentInfo(ctx, req)
}
func (s *Server) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
return s.querynode.GetMetrics(ctx, req)
}

View File

@ -472,6 +472,17 @@ message RegisterLinkResponse {
common.Status status = 2;
}
message GetMetricsRequest {
common.MsgBase base = 1;
string request = 2; // request is of jsonic format
}
message GetMetricsResponse {
common.Status status = 1;
string response = 2; // response is of jsonic format
string component_name = 3; // metrics from which component
}
service ProxyService {
rpc RegisterLink(RegisterLinkRequest) returns (RegisterLinkResponse) {}
}

View File

@ -3834,6 +3834,108 @@ func (m *RegisterLinkResponse) GetStatus() *commonpb.Status {
return nil
}
type GetMetricsRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
Request string `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetMetricsRequest) Reset() { *m = GetMetricsRequest{} }
func (m *GetMetricsRequest) String() string { return proto.CompactTextString(m) }
func (*GetMetricsRequest) ProtoMessage() {}
func (*GetMetricsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{60}
}
func (m *GetMetricsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetMetricsRequest.Unmarshal(m, b)
}
func (m *GetMetricsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetMetricsRequest.Marshal(b, m, deterministic)
}
func (m *GetMetricsRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetMetricsRequest.Merge(m, src)
}
func (m *GetMetricsRequest) XXX_Size() int {
return xxx_messageInfo_GetMetricsRequest.Size(m)
}
func (m *GetMetricsRequest) XXX_DiscardUnknown() {
xxx_messageInfo_GetMetricsRequest.DiscardUnknown(m)
}
var xxx_messageInfo_GetMetricsRequest proto.InternalMessageInfo
func (m *GetMetricsRequest) GetBase() *commonpb.MsgBase {
if m != nil {
return m.Base
}
return nil
}
func (m *GetMetricsRequest) GetRequest() string {
if m != nil {
return m.Request
}
return ""
}
type GetMetricsResponse struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
Response string `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"`
ComponentName string `protobuf:"bytes,3,opt,name=component_name,json=componentName,proto3" json:"component_name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetMetricsResponse) Reset() { *m = GetMetricsResponse{} }
func (m *GetMetricsResponse) String() string { return proto.CompactTextString(m) }
func (*GetMetricsResponse) ProtoMessage() {}
func (*GetMetricsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{61}
}
func (m *GetMetricsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetMetricsResponse.Unmarshal(m, b)
}
func (m *GetMetricsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetMetricsResponse.Marshal(b, m, deterministic)
}
func (m *GetMetricsResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetMetricsResponse.Merge(m, src)
}
func (m *GetMetricsResponse) XXX_Size() int {
return xxx_messageInfo_GetMetricsResponse.Size(m)
}
func (m *GetMetricsResponse) XXX_DiscardUnknown() {
xxx_messageInfo_GetMetricsResponse.DiscardUnknown(m)
}
var xxx_messageInfo_GetMetricsResponse proto.InternalMessageInfo
func (m *GetMetricsResponse) GetStatus() *commonpb.Status {
if m != nil {
return m.Status
}
return nil
}
func (m *GetMetricsResponse) GetResponse() string {
if m != nil {
return m.Response
}
return ""
}
func (m *GetMetricsResponse) GetComponentName() string {
if m != nil {
return m.ComponentName
}
return ""
}
func init() {
proto.RegisterEnum("milvus.proto.milvus.ShowType", ShowType_name, ShowType_value)
proto.RegisterEnum("milvus.proto.milvus.PlaceholderType", PlaceholderType_name, PlaceholderType_value)
@ -3898,195 +4000,200 @@ func init() {
proto.RegisterType((*DummyResponse)(nil), "milvus.proto.milvus.DummyResponse")
proto.RegisterType((*RegisterLinkRequest)(nil), "milvus.proto.milvus.RegisterLinkRequest")
proto.RegisterType((*RegisterLinkResponse)(nil), "milvus.proto.milvus.RegisterLinkResponse")
proto.RegisterType((*GetMetricsRequest)(nil), "milvus.proto.milvus.GetMetricsRequest")
proto.RegisterType((*GetMetricsResponse)(nil), "milvus.proto.milvus.GetMetricsResponse")
}
func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) }
var fileDescriptor_02345ba45cc0e303 = []byte{
// 2925 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0xdd, 0x6f, 0x1c, 0x57,
0xf5, 0x9e, 0x5d, 0xef, 0xd7, 0xd9, 0x59, 0x7b, 0x73, 0xfd, 0x11, 0x77, 0x9b, 0x34, 0xf6, 0xf4,
0x97, 0x5f, 0x9d, 0xa4, 0x4d, 0x1a, 0xa7, 0xa5, 0xa5, 0x05, 0xda, 0x24, 0xa6, 0x89, 0xd5, 0xa4,
0xb8, 0xe3, 0xb6, 0x52, 0xa9, 0xaa, 0xd1, 0x78, 0xe7, 0x7a, 0x77, 0xe4, 0xd9, 0x99, 0x65, 0xee,
0xdd, 0x38, 0xdb, 0x27, 0xa4, 0x02, 0x12, 0x2a, 0xb4, 0x42, 0x20, 0x10, 0x6f, 0x08, 0xe8, 0x03,
0x6f, 0x14, 0x90, 0x40, 0x3c, 0xf1, 0xd0, 0x07, 0x1e, 0x90, 0xf8, 0xf8, 0x0b, 0x78, 0xe1, 0xb1,
0xff, 0x01, 0x12, 0xe8, 0x7e, 0xcc, 0xec, 0xcc, 0xfa, 0xce, 0x7a, 0x9d, 0x6d, 0xb0, 0xfd, 0x36,
0x73, 0xee, 0x39, 0xf7, 0x9e, 0x7b, 0xee, 0xb9, 0xe7, 0xdc, 0xf3, 0x01, 0x7a, 0xc7, 0xf5, 0xee,
0xf5, 0xc8, 0xe5, 0x6e, 0x18, 0xd0, 0x00, 0xcd, 0x25, 0xff, 0x2e, 0x8b, 0x9f, 0x86, 0xde, 0x0c,
0x3a, 0x9d, 0xc0, 0x17, 0xc0, 0x86, 0x4e, 0x9a, 0x6d, 0xdc, 0xb1, 0xc5, 0x9f, 0xf1, 0xa9, 0x06,
0xa7, 0x6f, 0x86, 0xd8, 0xa6, 0xf8, 0x66, 0xe0, 0x79, 0xb8, 0x49, 0xdd, 0xc0, 0x37, 0xf1, 0x37,
0x7a, 0x98, 0x50, 0xf4, 0x34, 0x4c, 0x6f, 0xdb, 0x04, 0x2f, 0x69, 0xcb, 0xda, 0x6a, 0x75, 0xed,
0xcc, 0xe5, 0xd4, 0xdc, 0x72, 0xce, 0xbb, 0xa4, 0x75, 0xc3, 0x26, 0xd8, 0xe4, 0x98, 0xe8, 0x34,
0x94, 0x9c, 0x6d, 0xcb, 0xb7, 0x3b, 0x78, 0x29, 0xb7, 0xac, 0xad, 0x56, 0xcc, 0xa2, 0xb3, 0xfd,
0x9a, 0xdd, 0xc1, 0xe8, 0x09, 0x98, 0x6d, 0xc6, 0xf3, 0x0b, 0x84, 0x3c, 0x47, 0x98, 0x19, 0x80,
0x39, 0xe2, 0x22, 0x14, 0x05, 0x7f, 0x4b, 0xd3, 0xcb, 0xda, 0xaa, 0x6e, 0xca, 0x3f, 0x74, 0x16,
0x80, 0xb4, 0xed, 0xd0, 0x21, 0x96, 0xdf, 0xeb, 0x2c, 0x15, 0x96, 0xb5, 0xd5, 0x82, 0x59, 0x11,
0x90, 0xd7, 0x7a, 0x1d, 0xe3, 0x03, 0x0d, 0x16, 0xd6, 0xc3, 0xa0, 0x7b, 0x2c, 0x36, 0x61, 0xfc,
0x4a, 0x83, 0xf9, 0xdb, 0x36, 0x39, 0x1e, 0x12, 0x3d, 0x0b, 0x40, 0xdd, 0x0e, 0xb6, 0x08, 0xb5,
0x3b, 0x5d, 0x2e, 0xd5, 0x69, 0xb3, 0xc2, 0x20, 0x5b, 0x0c, 0x60, 0xbc, 0x0d, 0xfa, 0x8d, 0x20,
0xf0, 0x4c, 0x4c, 0xba, 0x81, 0x4f, 0x30, 0xba, 0x06, 0x45, 0x42, 0x6d, 0xda, 0x23, 0x92, 0xc9,
0x47, 0x95, 0x4c, 0x6e, 0x71, 0x14, 0x53, 0xa2, 0xa2, 0x79, 0x28, 0xdc, 0xb3, 0xbd, 0x9e, 0xe0,
0xb1, 0x6c, 0x8a, 0x1f, 0xe3, 0x1d, 0x98, 0xd9, 0xa2, 0xa1, 0xeb, 0xb7, 0x3e, 0xc7, 0xc9, 0x2b,
0xd1, 0xe4, 0xff, 0xd0, 0xe0, 0x91, 0x75, 0x4c, 0x9a, 0xa1, 0xbb, 0x7d, 0x4c, 0x54, 0xd7, 0x00,
0x7d, 0x00, 0xd9, 0x58, 0xe7, 0xa2, 0xce, 0x9b, 0x29, 0xd8, 0xd0, 0x61, 0x14, 0x86, 0x0f, 0xe3,
0x3f, 0x39, 0x68, 0xa8, 0x36, 0x35, 0x89, 0xf8, 0xbe, 0x1c, 0xdf, 0xa8, 0x1c, 0x27, 0x3a, 0x9f,
0x26, 0x92, 0xd6, 0x60, 0xb0, 0xda, 0x16, 0x07, 0xc4, 0x17, 0x6f, 0x78, 0x57, 0x79, 0xc5, 0xae,
0xd6, 0x60, 0xe1, 0x9e, 0x1b, 0xd2, 0x9e, 0xed, 0x59, 0xcd, 0xb6, 0xed, 0xfb, 0xd8, 0xe3, 0x72,
0x22, 0x4b, 0xd3, 0xcb, 0xf9, 0xd5, 0x8a, 0x39, 0x27, 0x07, 0x6f, 0x8a, 0x31, 0x26, 0x2c, 0x82,
0x9e, 0x81, 0xc5, 0x6e, 0xbb, 0x4f, 0xdc, 0xe6, 0x3e, 0xa2, 0x02, 0x27, 0x9a, 0x8f, 0x46, 0x53,
0x54, 0x97, 0xe0, 0x54, 0x93, 0x5b, 0x2b, 0xc7, 0x62, 0x52, 0x13, 0x62, 0x2c, 0x72, 0x31, 0xd6,
0xe5, 0xc0, 0x1b, 0x11, 0x9c, 0xb1, 0x15, 0x21, 0xf7, 0x68, 0x33, 0x41, 0x50, 0xe2, 0x04, 0x73,
0x72, 0xf0, 0x4d, 0xda, 0x8c, 0x69, 0xb8, 0x21, 0xb9, 0x13, 0xd8, 0xce, 0xf1, 0x30, 0x24, 0x1f,
0x6a, 0xb0, 0x64, 0x62, 0x0f, 0xdb, 0xe4, 0x78, 0xe8, 0xb8, 0xf1, 0x23, 0x0d, 0x1e, 0xbb, 0x85,
0x69, 0x42, 0x5b, 0xa8, 0x4d, 0x5d, 0x42, 0xdd, 0x26, 0x39, 0x4a, 0xb6, 0x3e, 0xd2, 0xe0, 0x5c,
0x26, 0x5b, 0x93, 0x5c, 0x9e, 0xe7, 0xa0, 0xc0, 0xbe, 0xc8, 0x52, 0x6e, 0x39, 0xbf, 0x5a, 0x5d,
0x5b, 0x51, 0xd2, 0xbc, 0x8a, 0xfb, 0x6f, 0x31, 0x9b, 0xb4, 0x69, 0xbb, 0xa1, 0x29, 0xf0, 0x8d,
0x7f, 0x6a, 0xb0, 0xb8, 0xd5, 0x0e, 0xf6, 0x06, 0x2c, 0x3d, 0x0c, 0x01, 0xa5, 0xcd, 0x49, 0x7e,
0xc8, 0x9c, 0xa0, 0xab, 0x30, 0x4d, 0xfb, 0x5d, 0xcc, 0x2d, 0xd1, 0xcc, 0xda, 0xd9, 0xcb, 0x8a,
0xc7, 0xc1, 0x65, 0xc6, 0xe4, 0x1b, 0xfd, 0x2e, 0x36, 0x39, 0x2a, 0xba, 0x00, 0xf5, 0x21, 0x91,
0x47, 0x17, 0x72, 0x36, 0x2d, 0x73, 0x62, 0xfc, 0x21, 0x07, 0xa7, 0xf7, 0x6d, 0x71, 0x12, 0x61,
0xab, 0xd6, 0xce, 0x29, 0xd7, 0x46, 0xe7, 0x21, 0xa1, 0x02, 0x96, 0xeb, 0x90, 0xa5, 0xfc, 0x72,
0x7e, 0x35, 0x6f, 0xd6, 0x12, 0x76, 0xc9, 0x21, 0xe8, 0x29, 0x40, 0xfb, 0xcc, 0x85, 0xb0, 0x4a,
0xd3, 0xe6, 0xa9, 0x61, 0x7b, 0xc1, 0x6d, 0x92, 0xd2, 0x60, 0x08, 0x11, 0x4c, 0x9b, 0xf3, 0x0a,
0x8b, 0x41, 0xd0, 0x55, 0x98, 0x77, 0xfd, 0xbb, 0xb8, 0x13, 0x84, 0x7d, 0xab, 0x8b, 0xc3, 0x26,
0xf6, 0xa9, 0xdd, 0xc2, 0x64, 0xa9, 0xc8, 0x39, 0x9a, 0x8b, 0xc6, 0x36, 0x07, 0x43, 0xc6, 0x6f,
0x35, 0x58, 0x14, 0xaf, 0xae, 0x4d, 0x3b, 0xa4, 0xee, 0x51, 0x7b, 0xae, 0xf3, 0x30, 0xd3, 0x8d,
0xf8, 0x10, 0x78, 0xd3, 0x1c, 0xaf, 0x16, 0x43, 0xf9, 0x2d, 0xfb, 0x44, 0x83, 0x79, 0xf6, 0xc8,
0x3a, 0x49, 0x3c, 0xff, 0x5a, 0x83, 0xb9, 0xdb, 0x36, 0x39, 0x49, 0x2c, 0xff, 0x4e, 0xba, 0xa0,
0x98, 0xe7, 0xa3, 0x34, 0xad, 0x0c, 0x31, 0xcd, 0x74, 0xe4, 0xd5, 0x67, 0x52, 0x5c, 0x13, 0xe3,
0xf7, 0x03, 0x5f, 0x75, 0xc2, 0x38, 0xff, 0xa3, 0x06, 0x67, 0x6f, 0x61, 0x1a, 0x73, 0x7d, 0x2c,
0x7c, 0xda, 0xb8, 0xda, 0xf2, 0xa1, 0xf0, 0xc8, 0x4a, 0xe6, 0x8f, 0xc4, 0xf3, 0x7d, 0x90, 0x83,
0x05, 0xe6, 0x16, 0x8e, 0x87, 0x12, 0x8c, 0xf3, 0x28, 0x57, 0x28, 0x4a, 0x41, 0xa5, 0x28, 0xb1,
0x3f, 0x2d, 0x8e, 0xed, 0x4f, 0x8d, 0xdf, 0xe4, 0xc4, 0x3b, 0x20, 0x29, 0x8d, 0x49, 0x8e, 0x45,
0xc1, 0x6b, 0x4e, 0xc9, 0xab, 0x01, 0x7a, 0x0c, 0xd9, 0x58, 0x8f, 0xfc, 0x63, 0x0a, 0x76, 0x6c,
0xdd, 0xe3, 0xf7, 0x34, 0x58, 0x8c, 0xc2, 0xa0, 0x2d, 0xdc, 0xea, 0x60, 0x9f, 0x3e, 0xb8, 0x0e,
0x0d, 0x6b, 0x40, 0x4e, 0xa1, 0x01, 0x67, 0xa0, 0x42, 0xc4, 0x3a, 0x71, 0x84, 0x33, 0x00, 0x18,
0x1f, 0x6b, 0x70, 0x7a, 0x1f, 0x3b, 0x93, 0x1c, 0xe2, 0x12, 0x94, 0x5c, 0xdf, 0xc1, 0xf7, 0x63,
0x6e, 0xa2, 0x5f, 0x36, 0xb2, 0xdd, 0x73, 0x3d, 0x27, 0x66, 0x23, 0xfa, 0x45, 0x2b, 0xa0, 0x63,
0xdf, 0xde, 0xf6, 0xb0, 0xc5, 0x71, 0xb9, 0x22, 0x97, 0xcd, 0xaa, 0x80, 0x6d, 0x30, 0x90, 0xf1,
0x7d, 0x0d, 0xe6, 0x98, 0xae, 0x49, 0x1e, 0xc9, 0xc3, 0x95, 0xd9, 0x32, 0x54, 0x13, 0xca, 0x24,
0xd9, 0x4d, 0x82, 0x8c, 0x5d, 0x98, 0x4f, 0xb3, 0x33, 0x89, 0xcc, 0x1e, 0x03, 0x88, 0x4f, 0x44,
0xe8, 0x7c, 0xde, 0x4c, 0x40, 0x8c, 0xcf, 0x34, 0x40, 0xe2, 0x49, 0xc5, 0x85, 0x71, 0xc4, 0x19,
0x97, 0x1d, 0x17, 0x7b, 0x4e, 0xd2, 0x6a, 0x57, 0x38, 0x84, 0x0f, 0xaf, 0x83, 0x8e, 0xef, 0xd3,
0xd0, 0xb6, 0xba, 0x76, 0x68, 0x77, 0xc4, 0xe5, 0x19, 0xcb, 0xc0, 0x56, 0x39, 0xd9, 0x26, 0xa7,
0x32, 0xfe, 0xcc, 0x1e, 0x63, 0x52, 0x29, 0x8f, 0xfb, 0x8e, 0xcf, 0x02, 0x70, 0xa5, 0x15, 0xc3,
0x05, 0x31, 0xcc, 0x21, 0xdc, 0x85, 0x7d, 0xac, 0x41, 0x9d, 0x6f, 0x41, 0xec, 0xa7, 0xcb, 0xa6,
0x1d, 0xa2, 0xd1, 0x86, 0x68, 0x46, 0x5c, 0xa1, 0x2f, 0x42, 0x51, 0x0a, 0x36, 0x3f, 0xae, 0x60,
0x25, 0xc1, 0x01, 0xdb, 0x30, 0x7e, 0xae, 0xc1, 0xc2, 0x90, 0xc8, 0x27, 0xd1, 0xe8, 0x37, 0x00,
0x89, 0x1d, 0x3a, 0x83, 0x6d, 0x47, 0xee, 0xf6, 0xbc, 0xd2, 0xb7, 0x0c, 0x0b, 0xc9, 0x3c, 0xe5,
0x0e, 0x41, 0x88, 0xf1, 0x37, 0x0d, 0xce, 0xdc, 0xc2, 0x94, 0xa3, 0xde, 0x60, 0xb6, 0x63, 0x33,
0x0c, 0x5a, 0x21, 0x26, 0xe4, 0xe4, 0xea, 0xc7, 0x8f, 0xc5, 0xfb, 0x4c, 0xb5, 0xa5, 0x49, 0xe4,
0xbf, 0x02, 0x3a, 0x5f, 0x03, 0x3b, 0x56, 0x18, 0xec, 0x11, 0xa9, 0x47, 0x55, 0x09, 0x33, 0x83,
0x3d, 0xae, 0x10, 0x34, 0xa0, 0xb6, 0x27, 0x10, 0xa4, 0x63, 0xe0, 0x10, 0x36, 0xcc, 0xef, 0x60,
0xc4, 0x18, 0x9b, 0x1c, 0x9f, 0x5c, 0x19, 0xff, 0x52, 0x83, 0x85, 0xa1, 0xad, 0x4c, 0x22, 0xdb,
0x67, 0xc5, 0xeb, 0x51, 0x6c, 0x66, 0x66, 0xed, 0x9c, 0x92, 0x26, 0xb1, 0x98, 0xc0, 0x46, 0xe7,
0xa0, 0xba, 0x63, 0xbb, 0x9e, 0x15, 0x62, 0x9b, 0x04, 0xbe, 0xdc, 0x28, 0x30, 0x90, 0xc9, 0x21,
0xc6, 0xa7, 0x1a, 0xd4, 0x59, 0x08, 0x7a, 0xc2, 0x2d, 0xde, 0x2f, 0x72, 0x50, 0xdb, 0xf0, 0x09,
0x0e, 0xe9, 0xf1, 0x8f, 0x30, 0xd0, 0x4b, 0x50, 0xe5, 0x1b, 0x23, 0x96, 0x63, 0x53, 0x5b, 0xba,
0xab, 0xc7, 0x94, 0x59, 0xe4, 0x57, 0x18, 0xde, 0xba, 0x4d, 0x6d, 0x53, 0x48, 0x87, 0xb0, 0x6f,
0xf4, 0x28, 0x54, 0xda, 0x36, 0x69, 0x5b, 0xbb, 0xb8, 0x2f, 0x9e, 0x7d, 0x35, 0xb3, 0xcc, 0x00,
0xaf, 0xe2, 0x3e, 0x41, 0x8f, 0x40, 0xd9, 0xef, 0x75, 0xc4, 0x05, 0x2b, 0x2d, 0x6b, 0xab, 0x35,
0xb3, 0xe4, 0xf7, 0x3a, 0xfc, 0x7a, 0xfd, 0x25, 0x07, 0x33, 0x77, 0x7b, 0x2c, 0x9e, 0xe1, 0x39,
0xf0, 0x9e, 0x47, 0x1f, 0x4c, 0x19, 0x2f, 0x42, 0x5e, 0xbc, 0x19, 0x18, 0xc5, 0x92, 0x92, 0xf1,
0x8d, 0x75, 0x62, 0x32, 0x24, 0x5e, 0x67, 0xea, 0x35, 0x9b, 0xf2, 0x91, 0x95, 0xe7, 0xcc, 0x56,
0x18, 0x84, 0x6b, 0x1c, 0xdb, 0x0a, 0x0e, 0xc3, 0xf8, 0x09, 0xc6, 0xb7, 0x82, 0xc3, 0x50, 0x0c,
0x1a, 0xa0, 0xdb, 0xcd, 0x5d, 0x3f, 0xd8, 0xf3, 0xb0, 0xd3, 0xc2, 0x0e, 0x3f, 0xf6, 0xb2, 0x99,
0x82, 0x09, 0xc5, 0x60, 0x07, 0x6f, 0x35, 0x7d, 0xca, 0x03, 0x89, 0x3c, 0x53, 0x0c, 0x06, 0xb9,
0xe9, 0x53, 0x36, 0xec, 0x60, 0x0f, 0x53, 0xcc, 0x87, 0x4b, 0x62, 0x58, 0x40, 0xe4, 0x70, 0xaf,
0x1b, 0x53, 0x97, 0xc5, 0xb0, 0x80, 0xb0, 0xe1, 0x33, 0x50, 0x19, 0x24, 0xb9, 0x2b, 0x83, 0x6c,
0xa0, 0x48, 0x6d, 0xdf, 0x83, 0xfa, 0xa6, 0x67, 0x37, 0x71, 0x3b, 0xf0, 0x1c, 0x1c, 0x72, 0xef,
0x87, 0xea, 0x90, 0xa7, 0x76, 0x4b, 0xba, 0x57, 0xf6, 0x89, 0x9e, 0x97, 0x31, 0x8e, 0xb8, 0xb8,
0xff, 0xa7, 0xf4, 0x43, 0x89, 0x69, 0x12, 0xa9, 0xc3, 0x45, 0x28, 0xf2, 0xd2, 0x8c, 0x70, 0xbc,
0xba, 0x29, 0xff, 0x8c, 0x77, 0x53, 0xeb, 0xde, 0x0a, 0x83, 0x5e, 0x17, 0x6d, 0x80, 0xde, 0x1d,
0xc0, 0xd8, 0x69, 0x66, 0x7b, 0xbd, 0x61, 0xa6, 0xcd, 0x14, 0xa9, 0xf1, 0x59, 0x1e, 0x6a, 0x5b,
0xd8, 0x0e, 0x9b, 0xed, 0x93, 0x90, 0x6c, 0x60, 0x12, 0x77, 0x88, 0x27, 0x4d, 0x02, 0xfb, 0x44,
0x97, 0xe0, 0x54, 0x62, 0x43, 0x56, 0x8b, 0x09, 0x88, 0x6b, 0x86, 0x6e, 0xd6, 0xbb, 0xc3, 0x82,
0x7b, 0x0e, 0xca, 0x0e, 0xf1, 0x2c, 0x7e, 0x44, 0x25, 0x7e, 0x44, 0xea, 0xfd, 0xad, 0x13, 0x8f,
0x1f, 0x4d, 0xc9, 0x11, 0x1f, 0xe8, 0x71, 0xa8, 0x05, 0x3d, 0xda, 0xed, 0x51, 0x4b, 0xdc, 0xcc,
0xa5, 0x32, 0x67, 0x4f, 0x17, 0x40, 0x7e, 0x71, 0x09, 0x7a, 0x05, 0x6a, 0x84, 0x8b, 0x32, 0x7a,
0x9b, 0x56, 0xc6, 0x7d, 0x42, 0xe9, 0x82, 0x4e, 0x3c, 0x4e, 0xd1, 0x05, 0xa8, 0xd3, 0xd0, 0xbe,
0x87, 0xbd, 0x44, 0xd1, 0x05, 0xb8, 0x3e, 0xce, 0x0a, 0xf8, 0xa0, 0x48, 0x73, 0x05, 0xe6, 0x5a,
0x3d, 0x3b, 0xb4, 0x7d, 0x8a, 0x71, 0x02, 0xbb, 0xca, 0xb1, 0x51, 0x3c, 0x34, 0xa8, 0xd0, 0xbc,
0x0a, 0xd3, 0xb7, 0x5d, 0xca, 0x05, 0xc9, 0x6e, 0xb5, 0xc6, 0x23, 0x01, 0x7e, 0x77, 0x1f, 0x81,
0x72, 0x18, 0xec, 0x09, 0x2b, 0x95, 0xe3, 0x2a, 0x58, 0x0a, 0x83, 0x3d, 0x6e, 0x82, 0x78, 0x59,
0x39, 0x08, 0xa5, 0x6e, 0xe6, 0x4c, 0xf9, 0x67, 0x7c, 0x5b, 0x1b, 0x28, 0x0f, 0x33, 0x30, 0xe4,
0xc1, 0x2c, 0xcc, 0x4b, 0x50, 0x0a, 0x05, 0xfd, 0xc8, 0x22, 0x5b, 0x72, 0x25, 0x6e, 0x25, 0x23,
0x2a, 0xe3, 0x5b, 0x1a, 0xe8, 0xaf, 0x78, 0x3d, 0xf2, 0x30, 0x74, 0x58, 0x95, 0x56, 0xcf, 0xab,
0x53, 0xfa, 0x3f, 0xc8, 0x41, 0x4d, 0xb2, 0x31, 0x89, 0xf7, 0xcf, 0x64, 0x65, 0x0b, 0xaa, 0x6c,
0x49, 0x8b, 0xe0, 0x56, 0x94, 0x93, 0xa8, 0xae, 0xad, 0x29, 0x6f, 0x7d, 0x8a, 0x0d, 0x5e, 0x9e,
0xdc, 0xe2, 0x44, 0x5f, 0xf5, 0x69, 0xd8, 0x37, 0xa1, 0x19, 0x03, 0x1a, 0xef, 0xc2, 0xec, 0xd0,
0x30, 0xd3, 0x8d, 0x5d, 0xdc, 0x8f, 0xcc, 0xda, 0x2e, 0xee, 0xa3, 0x67, 0x92, 0x45, 0xe4, 0x2c,
0xf7, 0x75, 0x27, 0xf0, 0x5b, 0xd7, 0xc3, 0xd0, 0xee, 0xcb, 0x22, 0xf3, 0x0b, 0xb9, 0xe7, 0x35,
0xe3, 0x4f, 0x39, 0xd0, 0x5f, 0xef, 0xe1, 0xb0, 0x7f, 0x94, 0xe6, 0x05, 0xc1, 0x34, 0xbe, 0xdf,
0x0d, 0xa5, 0x83, 0xe6, 0xdf, 0xfb, 0x6f, 0x74, 0x41, 0x71, 0xa3, 0x15, 0x76, 0xa9, 0xa8, 0xb4,
0x4b, 0xaa, 0x2b, 0x5b, 0x3a, 0xd4, 0x95, 0x2d, 0x67, 0x5e, 0x59, 0xa6, 0xdd, 0x52, 0x84, 0x13,
0x5d, 0xb2, 0xd4, 0x3b, 0x24, 0x77, 0xd8, 0x77, 0x88, 0xf1, 0x89, 0x06, 0x95, 0xb7, 0x70, 0x93,
0x06, 0x21, 0xb3, 0x16, 0x0a, 0xd9, 0x6b, 0x63, 0x3c, 0xf5, 0x72, 0xc3, 0x4f, 0xbd, 0x6b, 0x50,
0x76, 0x1d, 0xcb, 0x66, 0x6a, 0xc3, 0x0f, 0x6f, 0xd4, 0x13, 0xa3, 0xe4, 0x3a, 0x5c, 0xbf, 0xc6,
0xcf, 0x4d, 0xff, 0x44, 0x03, 0x5d, 0xf0, 0x4c, 0x04, 0xe5, 0x8b, 0x89, 0xe5, 0x34, 0x95, 0x2e,
0xcb, 0x9f, 0x78, 0xa3, 0xb7, 0xa7, 0x06, 0xcb, 0x5e, 0x07, 0x60, 0xb2, 0x93, 0xe4, 0xe2, 0x2a,
0x2c, 0x2b, 0xb9, 0x15, 0xe4, 0x5c, 0x8e, 0xb7, 0xa7, 0xcc, 0x0a, 0xa3, 0xe2, 0x53, 0xdc, 0x28,
0x41, 0x81, 0x53, 0x1b, 0xff, 0xd6, 0x60, 0xee, 0xa6, 0xed, 0x35, 0xd7, 0x5d, 0x42, 0x6d, 0xbf,
0x39, 0x41, 0xec, 0xf3, 0x02, 0x94, 0x82, 0xae, 0xe5, 0xe1, 0x1d, 0x2a, 0x59, 0x5a, 0x19, 0xb1,
0x23, 0x21, 0x06, 0xb3, 0x18, 0x74, 0xef, 0xe0, 0x1d, 0x8a, 0xbe, 0x04, 0xe5, 0xa0, 0x6b, 0x85,
0x6e, 0xab, 0x4d, 0xa5, 0xf4, 0xc7, 0x20, 0x2e, 0x05, 0x5d, 0x93, 0x51, 0x24, 0x72, 0x05, 0xd3,
0x87, 0xcc, 0x15, 0x18, 0x7f, 0xdf, 0xb7, 0xfd, 0x09, 0x54, 0xfb, 0x05, 0x28, 0xbb, 0x3e, 0xb5,
0x1c, 0x97, 0x44, 0x22, 0x38, 0xab, 0xd6, 0x21, 0x9f, 0xf2, 0x1d, 0xf0, 0x33, 0xf5, 0x29, 0x5b,
0x1b, 0xbd, 0x0c, 0xb0, 0xe3, 0x05, 0xb6, 0xa4, 0x16, 0x32, 0x38, 0xa7, 0xbe, 0x15, 0x0c, 0x2d,
0xa2, 0xaf, 0x70, 0x22, 0x36, 0xc3, 0xe0, 0x48, 0xff, 0xaa, 0xc1, 0xc2, 0x26, 0x0e, 0x89, 0x4b,
0x28, 0xf6, 0xa9, 0xcc, 0xdb, 0x6d, 0xf8, 0x3b, 0x41, 0x3a, 0x41, 0xaa, 0x0d, 0x25, 0x48, 0x3f,
0x9f, 0x74, 0x61, 0x2a, 0x12, 0x10, 0x69, 0xfa, 0x28, 0x12, 0x88, 0x8a, 0x11, 0x22, 0x92, 0x9a,
0xc9, 0x38, 0x26, 0xc9, 0x6f, 0x32, 0xa0, 0x34, 0x7e, 0x28, 0x1a, 0x03, 0x94, 0x9b, 0x7a, 0x70,
0x85, 0x5d, 0x04, 0x69, 0xc0, 0x87, 0xcc, 0xf9, 0xff, 0xc3, 0x90, 0xed, 0xc8, 0x68, 0x57, 0xf8,
0xa9, 0x06, 0xcb, 0xd9, 0x5c, 0x4d, 0xe2, 0x79, 0x5f, 0x86, 0x82, 0xeb, 0xef, 0x04, 0x51, 0x1a,
0xe9, 0xa2, 0xfa, 0x41, 0xad, 0x5c, 0x57, 0x10, 0x1a, 0xff, 0xd2, 0xa0, 0xce, 0x6d, 0xf5, 0x11,
0x1c, 0x7f, 0x07, 0x77, 0x2c, 0xe2, 0xbe, 0x87, 0xa3, 0xe3, 0xef, 0xe0, 0xce, 0x96, 0xfb, 0x1e,
0x4e, 0x69, 0x46, 0x21, 0xad, 0x19, 0xe9, 0x40, 0xbb, 0x38, 0x22, 0x4d, 0x58, 0x4a, 0xa5, 0x09,
0x8d, 0x0f, 0x35, 0x68, 0xdc, 0xc2, 0x74, 0x78, 0xab, 0x47, 0xa7, 0x14, 0x1f, 0x69, 0xf0, 0xa8,
0x92, 0xa1, 0x49, 0xf4, 0xe1, 0xc5, 0xb4, 0x3e, 0xa8, 0x03, 0xac, 0x7d, 0x4b, 0x4a, 0x55, 0xb8,
0x0a, 0xfa, 0x7a, 0xaf, 0xd3, 0x89, 0x1f, 0x3e, 0x2b, 0xa0, 0x87, 0xe2, 0x53, 0xc4, 0x1f, 0xc2,
0x5d, 0x56, 0x25, 0x8c, 0x45, 0x19, 0xc6, 0x25, 0xa8, 0x49, 0x12, 0xc9, 0x75, 0x03, 0xca, 0xa1,
0xfc, 0x96, 0xf8, 0xf1, 0xbf, 0xb1, 0x00, 0x73, 0x26, 0x6e, 0x31, 0x4d, 0x0c, 0xef, 0xb8, 0xfe,
0xae, 0x5c, 0xc6, 0x78, 0x5f, 0x83, 0xf9, 0x34, 0x5c, 0xce, 0xf5, 0x05, 0x28, 0xd9, 0x8e, 0x13,
0x62, 0x42, 0x46, 0x1e, 0xcb, 0x75, 0x81, 0x63, 0x46, 0xc8, 0x09, 0xc9, 0xe5, 0xc6, 0x96, 0xdc,
0xc5, 0x15, 0x28, 0x47, 0xa5, 0x3c, 0x54, 0x82, 0xfc, 0x75, 0xcf, 0xab, 0x4f, 0x21, 0x1d, 0xca,
0x1b, 0xb2, 0x5e, 0x55, 0xd7, 0x2e, 0x7e, 0x05, 0x66, 0x87, 0x22, 0x61, 0x54, 0x86, 0xe9, 0xd7,
0x02, 0x1f, 0xd7, 0xa7, 0x50, 0x1d, 0xf4, 0x1b, 0xae, 0x6f, 0x87, 0x7d, 0xe1, 0x79, 0xea, 0x0e,
0x9a, 0x85, 0x2a, 0xb7, 0xc0, 0x12, 0x80, 0xd7, 0x7e, 0x76, 0x1a, 0x6a, 0x77, 0x39, 0x27, 0x5b,
0x38, 0xbc, 0xe7, 0x36, 0x31, 0xb2, 0xa0, 0x3e, 0xdc, 0x8c, 0x8b, 0x9e, 0x54, 0x9e, 0x59, 0x46,
0xcf, 0x6e, 0x63, 0xd4, 0xde, 0x8c, 0x29, 0xf4, 0x0e, 0xcc, 0xa4, 0xdb, 0x64, 0x91, 0xda, 0x44,
0x28, 0x7b, 0x69, 0x0f, 0x9a, 0xdc, 0x82, 0x5a, 0xaa, 0xeb, 0x15, 0x5d, 0x50, 0xce, 0xad, 0xea,
0x8c, 0x6d, 0xa8, 0xbd, 0x76, 0xb2, 0x33, 0x55, 0x70, 0x9f, 0xee, 0xcd, 0xcb, 0xe0, 0x5e, 0xd9,
0xc0, 0x77, 0x10, 0xf7, 0x36, 0x9c, 0xda, 0xd7, 0x6a, 0x87, 0x9e, 0x52, 0xce, 0x9f, 0xd5, 0x92,
0x77, 0xd0, 0x12, 0x7b, 0x80, 0xf6, 0x77, 0x77, 0xa2, 0xcb, 0xea, 0x13, 0xc8, 0xea, 0x6d, 0x6d,
0x5c, 0x19, 0x1b, 0x3f, 0x16, 0xdc, 0x77, 0x34, 0x38, 0x9d, 0xd1, 0x1f, 0x87, 0xae, 0x29, 0xa7,
0x1b, 0xdd, 0xe4, 0xd7, 0x78, 0xe6, 0x70, 0x44, 0x31, 0x23, 0x3e, 0xcc, 0x0e, 0xb5, 0x8c, 0xa1,
0x4b, 0x99, 0x65, 0xf4, 0xfd, 0xbd, 0x73, 0x8d, 0x27, 0xc7, 0x43, 0x8e, 0xd7, 0x63, 0xb1, 0x61,
0xba, 0xcf, 0x2a, 0x63, 0x3d, 0x75, 0x37, 0xd6, 0x41, 0x07, 0xfa, 0x36, 0xd4, 0x52, 0x0d, 0x51,
0x19, 0x1a, 0xaf, 0x6a, 0x9a, 0x3a, 0x68, 0xea, 0x77, 0x41, 0x4f, 0xf6, 0x2d, 0xa1, 0xd5, 0xac,
0xbb, 0xb4, 0x6f, 0xe2, 0xc3, 0x5c, 0xa5, 0x41, 0x5b, 0xc2, 0x88, 0xab, 0xb4, 0xaf, 0x93, 0x63,
0xfc, 0xab, 0x94, 0x98, 0x7f, 0xe4, 0x55, 0x3a, 0xf4, 0x12, 0xef, 0x6b, 0xb0, 0xa8, 0x6e, 0x7b,
0x41, 0x6b, 0x59, 0xba, 0x99, 0xdd, 0xe0, 0xd3, 0xb8, 0x76, 0x28, 0x9a, 0x58, 0x8a, 0xbb, 0x30,
0x93, 0x6e, 0xee, 0xc8, 0x90, 0xa2, 0xb2, 0x1f, 0xa6, 0x71, 0x69, 0x2c, 0xdc, 0x78, 0xb1, 0x37,
0xa1, 0x9a, 0x28, 0x70, 0xa3, 0x27, 0x46, 0xe8, 0x71, 0xb2, 0x3c, 0x72, 0x90, 0x24, 0xdb, 0x50,
0x4b, 0x15, 0x35, 0xb3, 0x74, 0x58, 0x51, 0x6b, 0x6e, 0x5c, 0x1c, 0x07, 0x35, 0xde, 0x40, 0x1b,
0x6a, 0xa9, 0x12, 0x53, 0xc6, 0x4a, 0xaa, 0x8a, 0x5a, 0xc6, 0x4a, 0xca, 0x8a, 0x95, 0x31, 0x85,
0xbe, 0x99, 0xa8, 0x66, 0xa5, 0x2a, 0x86, 0xe8, 0xea, 0xc8, 0x79, 0x54, 0x05, 0xd3, 0xc6, 0xda,
0x61, 0x48, 0x62, 0x16, 0x5e, 0x87, 0x4a, 0x5c, 0xa8, 0x42, 0xe7, 0x33, 0xcd, 0xc2, 0x61, 0x4e,
0x6a, 0x0b, 0x8a, 0xa2, 0x68, 0x84, 0x8c, 0x8c, 0xf2, 0x70, 0xa2, 0xa2, 0xd4, 0x78, 0x5c, 0x89,
0x93, 0xae, 0xa7, 0x18, 0x53, 0xc8, 0x84, 0xa2, 0x48, 0x4b, 0x66, 0x4c, 0x9a, 0x4a, 0xad, 0x37,
0x46, 0xe3, 0x88, 0x5c, 0xe6, 0x14, 0xda, 0x84, 0x02, 0x4f, 0xdf, 0xa1, 0x95, 0x51, 0xa9, 0xbd,
0x51, 0x33, 0xa6, 0xb2, 0x7f, 0xc6, 0x14, 0xfa, 0x1a, 0x14, 0xf8, 0x2b, 0x35, 0x63, 0xc6, 0x64,
0x7e, 0xae, 0x31, 0x12, 0x25, 0x62, 0xd1, 0x01, 0x3d, 0x19, 0xbd, 0x67, 0x98, 0x57, 0x45, 0x7e,
0xa3, 0x31, 0x0e, 0x66, 0xb4, 0xca, 0x77, 0x35, 0x58, 0xca, 0x0a, 0xf4, 0x50, 0xa6, 0x0f, 0x1d,
0x15, 0xad, 0x36, 0x9e, 0x3d, 0x24, 0x55, 0x2c, 0xc2, 0xf7, 0x60, 0x4e, 0x11, 0x5e, 0xa0, 0x2b,
0x59, 0xf3, 0x65, 0x44, 0x46, 0x8d, 0xa7, 0xc7, 0x27, 0x88, 0xd7, 0xde, 0x84, 0x02, 0x0f, 0x0b,
0x32, 0x8e, 0x2f, 0x19, 0x65, 0x64, 0x28, 0x44, 0x2a, 0xaa, 0x30, 0xa6, 0x10, 0x06, 0x3d, 0x19,
0x23, 0x64, 0x9c, 0x9f, 0x22, 0xbc, 0x68, 0x5c, 0x18, 0x03, 0x33, 0x5a, 0x66, 0xad, 0x07, 0xfa,
0x66, 0x18, 0xdc, 0xef, 0x47, 0x0f, 0xf4, 0xff, 0xcd, 0xb2, 0x37, 0x9e, 0xfd, 0xfa, 0xb5, 0x96,
0x4b, 0xdb, 0xbd, 0x6d, 0x66, 0x03, 0xae, 0x08, 0xdc, 0xa7, 0xdc, 0x40, 0x7e, 0x5d, 0x71, 0x7d,
0x8a, 0x43, 0xdf, 0xf6, 0xae, 0xf0, 0xb9, 0x24, 0xb4, 0xbb, 0xbd, 0x5d, 0xe4, 0xff, 0xd7, 0xfe,
0x1b, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xa4, 0x5f, 0x7a, 0x14, 0x38, 0x00, 0x00,
// 2974 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x1a, 0x4d, 0x6f, 0x24, 0x47,
0xd5, 0x3d, 0xe3, 0xf9, 0x7a, 0xd3, 0x63, 0xcf, 0x96, 0x3f, 0x76, 0x32, 0xd9, 0xcd, 0xda, 0x1d,
0x96, 0x78, 0x77, 0x93, 0xdd, 0xac, 0x37, 0x21, 0x21, 0x01, 0x92, 0xdd, 0x35, 0xd9, 0xb5, 0xb2,
0x1b, 0x9c, 0x76, 0x12, 0x29, 0x44, 0x51, 0xab, 0x3d, 0x5d, 0x1e, 0xb7, 0xdc, 0xd3, 0x3d, 0x74,
0xd5, 0xac, 0x77, 0x72, 0x42, 0x0a, 0x20, 0xa1, 0x84, 0x44, 0x08, 0x04, 0xe2, 0x86, 0x80, 0x1c,
0xb8, 0x11, 0x40, 0x02, 0x71, 0xe2, 0x90, 0x03, 0x07, 0x24, 0x3e, 0x7e, 0x01, 0x17, 0x8e, 0xf9,
0x07, 0x48, 0xa0, 0xfa, 0xe8, 0x9e, 0xee, 0x71, 0xf5, 0x78, 0xbc, 0x93, 0x60, 0xfb, 0xd6, 0xfd,
0xea, 0xbd, 0xaa, 0x57, 0xaf, 0x5e, 0xbd, 0x57, 0xef, 0x03, 0xf4, 0x8e, 0xeb, 0xdd, 0xeb, 0x91,
0xcb, 0xdd, 0x30, 0xa0, 0x01, 0x9a, 0x4b, 0xfe, 0x5d, 0x16, 0x3f, 0x4d, 0xbd, 0x15, 0x74, 0x3a,
0x81, 0x2f, 0x80, 0x4d, 0x9d, 0xb4, 0x76, 0x70, 0xc7, 0x16, 0x7f, 0xc6, 0x27, 0x1a, 0x9c, 0xbe,
0x19, 0x62, 0x9b, 0xe2, 0x9b, 0x81, 0xe7, 0xe1, 0x16, 0x75, 0x03, 0xdf, 0xc4, 0xdf, 0xea, 0x61,
0x42, 0xd1, 0x93, 0x30, 0xbd, 0x65, 0x13, 0xdc, 0xd0, 0x96, 0xb4, 0x95, 0xea, 0xea, 0x99, 0xcb,
0xa9, 0xb9, 0xe5, 0x9c, 0x77, 0x49, 0xfb, 0x86, 0x4d, 0xb0, 0xc9, 0x31, 0xd1, 0x69, 0x28, 0x39,
0x5b, 0x96, 0x6f, 0x77, 0x70, 0x23, 0xb7, 0xa4, 0xad, 0x54, 0xcc, 0xa2, 0xb3, 0xf5, 0x8a, 0xdd,
0xc1, 0xe8, 0x31, 0x98, 0x6d, 0xc5, 0xf3, 0x0b, 0x84, 0x3c, 0x47, 0x98, 0x19, 0x80, 0x39, 0xe2,
0x22, 0x14, 0x05, 0x7f, 0x8d, 0xe9, 0x25, 0x6d, 0x45, 0x37, 0xe5, 0x1f, 0x3a, 0x0b, 0x40, 0x76,
0xec, 0xd0, 0x21, 0x96, 0xdf, 0xeb, 0x34, 0x0a, 0x4b, 0xda, 0x4a, 0xc1, 0xac, 0x08, 0xc8, 0x2b,
0xbd, 0x8e, 0xf1, 0x9e, 0x06, 0x0b, 0x6b, 0x61, 0xd0, 0x3d, 0x16, 0x9b, 0x30, 0x7e, 0xad, 0xc1,
0xfc, 0x6d, 0x9b, 0x1c, 0x0f, 0x89, 0x9e, 0x05, 0xa0, 0x6e, 0x07, 0x5b, 0x84, 0xda, 0x9d, 0x2e,
0x97, 0xea, 0xb4, 0x59, 0x61, 0x90, 0x4d, 0x06, 0x30, 0xde, 0x04, 0xfd, 0x46, 0x10, 0x78, 0x26,
0x26, 0xdd, 0xc0, 0x27, 0x18, 0x5d, 0x83, 0x22, 0xa1, 0x36, 0xed, 0x11, 0xc9, 0xe4, 0xc3, 0x4a,
0x26, 0x37, 0x39, 0x8a, 0x29, 0x51, 0xd1, 0x3c, 0x14, 0xee, 0xd9, 0x5e, 0x4f, 0xf0, 0x58, 0x36,
0xc5, 0x8f, 0xf1, 0x16, 0xcc, 0x6c, 0xd2, 0xd0, 0xf5, 0xdb, 0x9f, 0xe1, 0xe4, 0x95, 0x68, 0xf2,
0x7f, 0x6a, 0xf0, 0xd0, 0x1a, 0x26, 0xad, 0xd0, 0xdd, 0x3a, 0x26, 0xaa, 0x6b, 0x80, 0x3e, 0x80,
0xac, 0xaf, 0x71, 0x51, 0xe7, 0xcd, 0x14, 0x6c, 0xe8, 0x30, 0x0a, 0xc3, 0x87, 0xf1, 0xdf, 0x1c,
0x34, 0x55, 0x9b, 0x9a, 0x44, 0x7c, 0x5f, 0x8d, 0x6f, 0x54, 0x8e, 0x13, 0x9d, 0x4f, 0x13, 0x49,
0x6b, 0x30, 0x58, 0x6d, 0x93, 0x03, 0xe2, 0x8b, 0x37, 0xbc, 0xab, 0xbc, 0x62, 0x57, 0xab, 0xb0,
0x70, 0xcf, 0x0d, 0x69, 0xcf, 0xf6, 0xac, 0xd6, 0x8e, 0xed, 0xfb, 0xd8, 0xe3, 0x72, 0x22, 0x8d,
0xe9, 0xa5, 0xfc, 0x4a, 0xc5, 0x9c, 0x93, 0x83, 0x37, 0xc5, 0x18, 0x13, 0x16, 0x41, 0x4f, 0xc1,
0x62, 0x77, 0xa7, 0x4f, 0xdc, 0xd6, 0x3e, 0xa2, 0x02, 0x27, 0x9a, 0x8f, 0x46, 0x53, 0x54, 0x97,
0xe0, 0x54, 0x8b, 0x5b, 0x2b, 0xc7, 0x62, 0x52, 0x13, 0x62, 0x2c, 0x72, 0x31, 0xd6, 0xe5, 0xc0,
0x6b, 0x11, 0x9c, 0xb1, 0x15, 0x21, 0xf7, 0x68, 0x2b, 0x41, 0x50, 0xe2, 0x04, 0x73, 0x72, 0xf0,
0x75, 0xda, 0x8a, 0x69, 0xb8, 0x21, 0xb9, 0x13, 0xd8, 0xce, 0xf1, 0x30, 0x24, 0x1f, 0x68, 0xd0,
0x30, 0xb1, 0x87, 0x6d, 0x72, 0x3c, 0x74, 0xdc, 0xf8, 0xb1, 0x06, 0x8f, 0xdc, 0xc2, 0x34, 0xa1,
0x2d, 0xd4, 0xa6, 0x2e, 0xa1, 0x6e, 0x8b, 0x1c, 0x25, 0x5b, 0x1f, 0x6a, 0x70, 0x2e, 0x93, 0xad,
0x49, 0x2e, 0xcf, 0x33, 0x50, 0x60, 0x5f, 0xa4, 0x91, 0x5b, 0xca, 0xaf, 0x54, 0x57, 0x97, 0x95,
0x34, 0x2f, 0xe3, 0xfe, 0x1b, 0xcc, 0x26, 0x6d, 0xd8, 0x6e, 0x68, 0x0a, 0x7c, 0xe3, 0x5f, 0x1a,
0x2c, 0x6e, 0xee, 0x04, 0x7b, 0x03, 0x96, 0x3e, 0x0f, 0x01, 0xa5, 0xcd, 0x49, 0x7e, 0xc8, 0x9c,
0xa0, 0xab, 0x30, 0x4d, 0xfb, 0x5d, 0xcc, 0x2d, 0xd1, 0xcc, 0xea, 0xd9, 0xcb, 0x8a, 0xc7, 0xc1,
0x65, 0xc6, 0xe4, 0x6b, 0xfd, 0x2e, 0x36, 0x39, 0x2a, 0xba, 0x00, 0xf5, 0x21, 0x91, 0x47, 0x17,
0x72, 0x36, 0x2d, 0x73, 0x62, 0xfc, 0x31, 0x07, 0xa7, 0xf7, 0x6d, 0x71, 0x12, 0x61, 0xab, 0xd6,
0xce, 0x29, 0xd7, 0x46, 0xe7, 0x21, 0xa1, 0x02, 0x96, 0xeb, 0x90, 0x46, 0x7e, 0x29, 0xbf, 0x92,
0x37, 0x6b, 0x09, 0xbb, 0xe4, 0x10, 0xf4, 0x04, 0xa0, 0x7d, 0xe6, 0x42, 0x58, 0xa5, 0x69, 0xf3,
0xd4, 0xb0, 0xbd, 0xe0, 0x36, 0x49, 0x69, 0x30, 0x84, 0x08, 0xa6, 0xcd, 0x79, 0x85, 0xc5, 0x20,
0xe8, 0x2a, 0xcc, 0xbb, 0xfe, 0x5d, 0xdc, 0x09, 0xc2, 0xbe, 0xd5, 0xc5, 0x61, 0x0b, 0xfb, 0xd4,
0x6e, 0x63, 0xd2, 0x28, 0x72, 0x8e, 0xe6, 0xa2, 0xb1, 0x8d, 0xc1, 0x90, 0xf1, 0x3b, 0x0d, 0x16,
0xc5, 0xab, 0x6b, 0xc3, 0x0e, 0xa9, 0x7b, 0xd4, 0x9e, 0xeb, 0x3c, 0xcc, 0x74, 0x23, 0x3e, 0x04,
0xde, 0x34, 0xc7, 0xab, 0xc5, 0x50, 0x7e, 0xcb, 0x3e, 0xd6, 0x60, 0x9e, 0x3d, 0xb2, 0x4e, 0x12,
0xcf, 0xbf, 0xd1, 0x60, 0xee, 0xb6, 0x4d, 0x4e, 0x12, 0xcb, 0xbf, 0x97, 0x2e, 0x28, 0xe6, 0xf9,
0x28, 0x4d, 0x2b, 0x43, 0x4c, 0x33, 0x1d, 0x79, 0xf5, 0x99, 0x14, 0xd7, 0xc4, 0xf8, 0xc3, 0xc0,
0x57, 0x9d, 0x30, 0xce, 0xff, 0xa4, 0xc1, 0xd9, 0x5b, 0x98, 0xc6, 0x5c, 0x1f, 0x0b, 0x9f, 0x36,
0xae, 0xb6, 0x7c, 0x20, 0x3c, 0xb2, 0x92, 0xf9, 0x23, 0xf1, 0x7c, 0xef, 0xe5, 0x60, 0x81, 0xb9,
0x85, 0xe3, 0xa1, 0x04, 0xe3, 0x3c, 0xca, 0x15, 0x8a, 0x52, 0x50, 0x29, 0x4a, 0xec, 0x4f, 0x8b,
0x63, 0xfb, 0x53, 0xe3, 0xb7, 0x39, 0xf1, 0x0e, 0x48, 0x4a, 0x63, 0x92, 0x63, 0x51, 0xf0, 0x9a,
0x53, 0xf2, 0x6a, 0x80, 0x1e, 0x43, 0xd6, 0xd7, 0x22, 0xff, 0x98, 0x82, 0x1d, 0x5b, 0xf7, 0xf8,
0xbe, 0x06, 0x8b, 0x51, 0x18, 0xb4, 0x89, 0xdb, 0x1d, 0xec, 0xd3, 0x07, 0xd7, 0xa1, 0x61, 0x0d,
0xc8, 0x29, 0x34, 0xe0, 0x0c, 0x54, 0x88, 0x58, 0x27, 0x8e, 0x70, 0x06, 0x00, 0xe3, 0x23, 0x0d,
0x4e, 0xef, 0x63, 0x67, 0x92, 0x43, 0x6c, 0x40, 0xc9, 0xf5, 0x1d, 0x7c, 0x3f, 0xe6, 0x26, 0xfa,
0x65, 0x23, 0x5b, 0x3d, 0xd7, 0x73, 0x62, 0x36, 0xa2, 0x5f, 0xb4, 0x0c, 0x3a, 0xf6, 0xed, 0x2d,
0x0f, 0x5b, 0x1c, 0x97, 0x2b, 0x72, 0xd9, 0xac, 0x0a, 0xd8, 0x3a, 0x03, 0x19, 0x3f, 0xd0, 0x60,
0x8e, 0xe9, 0x9a, 0xe4, 0x91, 0x7c, 0xbe, 0x32, 0x5b, 0x82, 0x6a, 0x42, 0x99, 0x24, 0xbb, 0x49,
0x90, 0xb1, 0x0b, 0xf3, 0x69, 0x76, 0x26, 0x91, 0xd9, 0x23, 0x00, 0xf1, 0x89, 0x08, 0x9d, 0xcf,
0x9b, 0x09, 0x88, 0xf1, 0xa9, 0x06, 0x48, 0x3c, 0xa9, 0xb8, 0x30, 0x8e, 0x38, 0xe3, 0xb2, 0xed,
0x62, 0xcf, 0x49, 0x5a, 0xed, 0x0a, 0x87, 0xf0, 0xe1, 0x35, 0xd0, 0xf1, 0x7d, 0x1a, 0xda, 0x56,
0xd7, 0x0e, 0xed, 0x8e, 0xb8, 0x3c, 0x63, 0x19, 0xd8, 0x2a, 0x27, 0xdb, 0xe0, 0x54, 0xc6, 0x5f,
0xd8, 0x63, 0x4c, 0x2a, 0xe5, 0x71, 0xdf, 0xf1, 0x59, 0x00, 0xae, 0xb4, 0x62, 0xb8, 0x20, 0x86,
0x39, 0x84, 0xbb, 0xb0, 0x8f, 0x34, 0xa8, 0xf3, 0x2d, 0x88, 0xfd, 0x74, 0xd9, 0xb4, 0x43, 0x34,
0xda, 0x10, 0xcd, 0x88, 0x2b, 0xf4, 0x65, 0x28, 0x4a, 0xc1, 0xe6, 0xc7, 0x15, 0xac, 0x24, 0x38,
0x60, 0x1b, 0xc6, 0x2f, 0x34, 0x58, 0x18, 0x12, 0xf9, 0x24, 0x1a, 0xfd, 0x1a, 0x20, 0xb1, 0x43,
0x67, 0xb0, 0xed, 0xc8, 0xdd, 0x9e, 0x57, 0xfa, 0x96, 0x61, 0x21, 0x99, 0xa7, 0xdc, 0x21, 0x08,
0x31, 0xfe, 0xae, 0xc1, 0x99, 0x5b, 0x98, 0x72, 0xd4, 0x1b, 0xcc, 0x76, 0x6c, 0x84, 0x41, 0x3b,
0xc4, 0x84, 0x9c, 0x5c, 0xfd, 0xf8, 0x89, 0x78, 0x9f, 0xa9, 0xb6, 0x34, 0x89, 0xfc, 0x97, 0x41,
0xe7, 0x6b, 0x60, 0xc7, 0x0a, 0x83, 0x3d, 0x22, 0xf5, 0xa8, 0x2a, 0x61, 0x66, 0xb0, 0xc7, 0x15,
0x82, 0x06, 0xd4, 0xf6, 0x04, 0x82, 0x74, 0x0c, 0x1c, 0xc2, 0x86, 0xf9, 0x1d, 0x8c, 0x18, 0x63,
0x93, 0xe3, 0x93, 0x2b, 0xe3, 0x5f, 0x69, 0xb0, 0x30, 0xb4, 0x95, 0x49, 0x64, 0xfb, 0xb4, 0x78,
0x3d, 0x8a, 0xcd, 0xcc, 0xac, 0x9e, 0x53, 0xd2, 0x24, 0x16, 0x13, 0xd8, 0xe8, 0x1c, 0x54, 0xb7,
0x6d, 0xd7, 0xb3, 0x42, 0x6c, 0x93, 0xc0, 0x97, 0x1b, 0x05, 0x06, 0x32, 0x39, 0xc4, 0xf8, 0x44,
0x83, 0x3a, 0x0b, 0x41, 0x4f, 0xb8, 0xc5, 0xfb, 0x65, 0x0e, 0x6a, 0xeb, 0x3e, 0xc1, 0x21, 0x3d,
0xfe, 0x11, 0x06, 0x7a, 0x01, 0xaa, 0x7c, 0x63, 0xc4, 0x72, 0x6c, 0x6a, 0x4b, 0x77, 0xf5, 0x88,
0x32, 0x8b, 0xfc, 0x12, 0xc3, 0x5b, 0xb3, 0xa9, 0x6d, 0x0a, 0xe9, 0x10, 0xf6, 0x8d, 0x1e, 0x86,
0xca, 0x8e, 0x4d, 0x76, 0xac, 0x5d, 0xdc, 0x17, 0xcf, 0xbe, 0x9a, 0x59, 0x66, 0x80, 0x97, 0x71,
0x9f, 0xa0, 0x87, 0xa0, 0xec, 0xf7, 0x3a, 0xe2, 0x82, 0x95, 0x96, 0xb4, 0x95, 0x9a, 0x59, 0xf2,
0x7b, 0x1d, 0x7e, 0xbd, 0xfe, 0x9a, 0x83, 0x99, 0xbb, 0x3d, 0x16, 0xcf, 0xf0, 0x1c, 0x78, 0xcf,
0xa3, 0x0f, 0xa6, 0x8c, 0x17, 0x21, 0x2f, 0xde, 0x0c, 0x8c, 0xa2, 0xa1, 0x64, 0x7c, 0x7d, 0x8d,
0x98, 0x0c, 0x89, 0xd7, 0x99, 0x7a, 0xad, 0x96, 0x7c, 0x64, 0xe5, 0x39, 0xb3, 0x15, 0x06, 0xe1,
0x1a, 0xc7, 0xb6, 0x82, 0xc3, 0x30, 0x7e, 0x82, 0xf1, 0xad, 0xe0, 0x30, 0x14, 0x83, 0x06, 0xe8,
0x76, 0x6b, 0xd7, 0x0f, 0xf6, 0x3c, 0xec, 0xb4, 0xb1, 0xc3, 0x8f, 0xbd, 0x6c, 0xa6, 0x60, 0x42,
0x31, 0xd8, 0xc1, 0x5b, 0x2d, 0x9f, 0xf2, 0x40, 0x22, 0xcf, 0x14, 0x83, 0x41, 0x6e, 0xfa, 0x94,
0x0d, 0x3b, 0xd8, 0xc3, 0x14, 0xf3, 0xe1, 0x92, 0x18, 0x16, 0x10, 0x39, 0xdc, 0xeb, 0xc6, 0xd4,
0x65, 0x31, 0x2c, 0x20, 0x6c, 0xf8, 0x0c, 0x54, 0x06, 0x49, 0xee, 0xca, 0x20, 0x1b, 0x28, 0x52,
0xdb, 0xf7, 0xa0, 0xbe, 0xe1, 0xd9, 0x2d, 0xbc, 0x13, 0x78, 0x0e, 0x0e, 0xb9, 0xf7, 0x43, 0x75,
0xc8, 0x53, 0xbb, 0x2d, 0xdd, 0x2b, 0xfb, 0x44, 0xcf, 0xca, 0x18, 0x47, 0x5c, 0xdc, 0x2f, 0x28,
0xfd, 0x50, 0x62, 0x9a, 0x44, 0xea, 0x70, 0x11, 0x8a, 0xbc, 0x34, 0x23, 0x1c, 0xaf, 0x6e, 0xca,
0x3f, 0xe3, 0xed, 0xd4, 0xba, 0xb7, 0xc2, 0xa0, 0xd7, 0x45, 0xeb, 0xa0, 0x77, 0x07, 0x30, 0x76,
0x9a, 0xd9, 0x5e, 0x6f, 0x98, 0x69, 0x33, 0x45, 0x6a, 0x7c, 0x9a, 0x87, 0xda, 0x26, 0xb6, 0xc3,
0xd6, 0xce, 0x49, 0x48, 0x36, 0x30, 0x89, 0x3b, 0xc4, 0x93, 0x26, 0x81, 0x7d, 0xa2, 0x4b, 0x70,
0x2a, 0xb1, 0x21, 0xab, 0xcd, 0x04, 0xc4, 0x35, 0x43, 0x37, 0xeb, 0xdd, 0x61, 0xc1, 0x3d, 0x03,
0x65, 0x87, 0x78, 0x16, 0x3f, 0xa2, 0x12, 0x3f, 0x22, 0xf5, 0xfe, 0xd6, 0x88, 0xc7, 0x8f, 0xa6,
0xe4, 0x88, 0x0f, 0xf4, 0x28, 0xd4, 0x82, 0x1e, 0xed, 0xf6, 0xa8, 0x25, 0x6e, 0x66, 0xa3, 0xcc,
0xd9, 0xd3, 0x05, 0x90, 0x5f, 0x5c, 0x82, 0x5e, 0x82, 0x1a, 0xe1, 0xa2, 0x8c, 0xde, 0xa6, 0x95,
0x71, 0x9f, 0x50, 0xba, 0xa0, 0x13, 0x8f, 0x53, 0x74, 0x01, 0xea, 0x34, 0xb4, 0xef, 0x61, 0x2f,
0x51, 0x74, 0x01, 0xae, 0x8f, 0xb3, 0x02, 0x3e, 0x28, 0xd2, 0x5c, 0x81, 0xb9, 0x76, 0xcf, 0x0e,
0x6d, 0x9f, 0x62, 0x9c, 0xc0, 0xae, 0x72, 0x6c, 0x14, 0x0f, 0x0d, 0x2a, 0x34, 0x2f, 0xc3, 0xf4,
0x6d, 0x97, 0x72, 0x41, 0xb2, 0x5b, 0xad, 0xf1, 0x48, 0x80, 0xdf, 0xdd, 0x87, 0xa0, 0x1c, 0x06,
0x7b, 0xc2, 0x4a, 0xe5, 0xb8, 0x0a, 0x96, 0xc2, 0x60, 0x8f, 0x9b, 0x20, 0x5e, 0x56, 0x0e, 0x42,
0xa9, 0x9b, 0x39, 0x53, 0xfe, 0x19, 0xdf, 0xd5, 0x06, 0xca, 0xc3, 0x0c, 0x0c, 0x79, 0x30, 0x0b,
0xf3, 0x02, 0x94, 0x42, 0x41, 0x3f, 0xb2, 0xc8, 0x96, 0x5c, 0x89, 0x5b, 0xc9, 0x88, 0xca, 0xf8,
0x8e, 0x06, 0xfa, 0x4b, 0x5e, 0x8f, 0x7c, 0x1e, 0x3a, 0xac, 0x4a, 0xab, 0xe7, 0xd5, 0x29, 0xfd,
0x1f, 0xe6, 0xa0, 0x26, 0xd9, 0x98, 0xc4, 0xfb, 0x67, 0xb2, 0xb2, 0x09, 0x55, 0xb6, 0xa4, 0x45,
0x70, 0x3b, 0xca, 0x49, 0x54, 0x57, 0x57, 0x95, 0xb7, 0x3e, 0xc5, 0x06, 0x2f, 0x4f, 0x6e, 0x72,
0xa2, 0xaf, 0xfb, 0x34, 0xec, 0x9b, 0xd0, 0x8a, 0x01, 0xcd, 0xb7, 0x61, 0x76, 0x68, 0x98, 0xe9,
0xc6, 0x2e, 0xee, 0x47, 0x66, 0x6d, 0x17, 0xf7, 0xd1, 0x53, 0xc9, 0x22, 0x72, 0x96, 0xfb, 0xba,
0x13, 0xf8, 0xed, 0xeb, 0x61, 0x68, 0xf7, 0x65, 0x91, 0xf9, 0xb9, 0xdc, 0xb3, 0x9a, 0xf1, 0xe7,
0x1c, 0xe8, 0xaf, 0xf6, 0x70, 0xd8, 0x3f, 0x4a, 0xf3, 0x82, 0x60, 0x1a, 0xdf, 0xef, 0x86, 0xd2,
0x41, 0xf3, 0xef, 0xfd, 0x37, 0xba, 0xa0, 0xb8, 0xd1, 0x0a, 0xbb, 0x54, 0x54, 0xda, 0x25, 0xd5,
0x95, 0x2d, 0x1d, 0xea, 0xca, 0x96, 0x33, 0xaf, 0x2c, 0xd3, 0x6e, 0x29, 0xc2, 0x89, 0x2e, 0x59,
0xea, 0x1d, 0x92, 0x3b, 0xec, 0x3b, 0xc4, 0xf8, 0x58, 0x83, 0xca, 0x1b, 0xb8, 0x45, 0x83, 0x90,
0x59, 0x0b, 0x85, 0xec, 0xb5, 0x31, 0x9e, 0x7a, 0xb9, 0xe1, 0xa7, 0xde, 0x35, 0x28, 0xbb, 0x8e,
0x65, 0x33, 0xb5, 0xe1, 0x87, 0x37, 0xea, 0x89, 0x51, 0x72, 0x1d, 0xae, 0x5f, 0xe3, 0xe7, 0xa6,
0x7f, 0xaa, 0x81, 0x2e, 0x78, 0x26, 0x82, 0xf2, 0xf9, 0xc4, 0x72, 0x9a, 0x4a, 0x97, 0xe5, 0x4f,
0xbc, 0xd1, 0xdb, 0x53, 0x83, 0x65, 0xaf, 0x03, 0x30, 0xd9, 0x49, 0x72, 0x71, 0x15, 0x96, 0x94,
0xdc, 0x0a, 0x72, 0x2e, 0xc7, 0xdb, 0x53, 0x66, 0x85, 0x51, 0xf1, 0x29, 0x6e, 0x94, 0xa0, 0xc0,
0xa9, 0x8d, 0xff, 0x68, 0x30, 0x77, 0xd3, 0xf6, 0x5a, 0x6b, 0x2e, 0xa1, 0xb6, 0xdf, 0x9a, 0x20,
0xf6, 0x79, 0x0e, 0x4a, 0x41, 0xd7, 0xf2, 0xf0, 0x36, 0x95, 0x2c, 0x2d, 0x8f, 0xd8, 0x91, 0x10,
0x83, 0x59, 0x0c, 0xba, 0x77, 0xf0, 0x36, 0x45, 0x5f, 0x81, 0x72, 0xd0, 0xb5, 0x42, 0xb7, 0xbd,
0x43, 0xa5, 0xf4, 0xc7, 0x20, 0x2e, 0x05, 0x5d, 0x93, 0x51, 0x24, 0x72, 0x05, 0xd3, 0x87, 0xcc,
0x15, 0x18, 0xff, 0xd8, 0xb7, 0xfd, 0x09, 0x54, 0xfb, 0x39, 0x28, 0xbb, 0x3e, 0xb5, 0x1c, 0x97,
0x44, 0x22, 0x38, 0xab, 0xd6, 0x21, 0x9f, 0xf2, 0x1d, 0xf0, 0x33, 0xf5, 0x29, 0x5b, 0x1b, 0xbd,
0x08, 0xb0, 0xed, 0x05, 0xb6, 0xa4, 0x16, 0x32, 0x38, 0xa7, 0xbe, 0x15, 0x0c, 0x2d, 0xa2, 0xaf,
0x70, 0x22, 0x36, 0xc3, 0xe0, 0x48, 0xff, 0xa6, 0xc1, 0xc2, 0x06, 0x0e, 0x89, 0x4b, 0x28, 0xf6,
0xa9, 0xcc, 0xdb, 0xad, 0xfb, 0xdb, 0x41, 0x3a, 0x41, 0xaa, 0x0d, 0x25, 0x48, 0x3f, 0x9b, 0x74,
0x61, 0x2a, 0x12, 0x10, 0x69, 0xfa, 0x28, 0x12, 0x88, 0x8a, 0x11, 0x22, 0x92, 0x9a, 0xc9, 0x38,
0x26, 0xc9, 0x6f, 0x32, 0xa0, 0x34, 0x7e, 0x24, 0x1a, 0x03, 0x94, 0x9b, 0x7a, 0x70, 0x85, 0x5d,
0x04, 0x69, 0xc0, 0x87, 0xcc, 0xf9, 0x17, 0x61, 0xc8, 0x76, 0x64, 0xb4, 0x2b, 0xfc, 0x4c, 0x83,
0xa5, 0x6c, 0xae, 0x26, 0xf1, 0xbc, 0x2f, 0x42, 0xc1, 0xf5, 0xb7, 0x83, 0x28, 0x8d, 0x74, 0x51,
0xfd, 0xa0, 0x56, 0xae, 0x2b, 0x08, 0x8d, 0x7f, 0x6b, 0x50, 0xe7, 0xb6, 0xfa, 0x08, 0x8e, 0xbf,
0x83, 0x3b, 0x16, 0x71, 0xdf, 0xc1, 0xd1, 0xf1, 0x77, 0x70, 0x67, 0xd3, 0x7d, 0x07, 0xa7, 0x34,
0xa3, 0x90, 0xd6, 0x8c, 0x74, 0xa0, 0x5d, 0x1c, 0x91, 0x26, 0x2c, 0xa5, 0xd2, 0x84, 0xc6, 0x07,
0x1a, 0x34, 0x6f, 0x61, 0x3a, 0xbc, 0xd5, 0xa3, 0x53, 0x8a, 0x0f, 0x35, 0x78, 0x58, 0xc9, 0xd0,
0x24, 0xfa, 0xf0, 0x7c, 0x5a, 0x1f, 0xd4, 0x01, 0xd6, 0xbe, 0x25, 0xa5, 0x2a, 0x5c, 0x05, 0x7d,
0xad, 0xd7, 0xe9, 0xc4, 0x0f, 0x9f, 0x65, 0xd0, 0x43, 0xf1, 0x29, 0xe2, 0x0f, 0xe1, 0x2e, 0xab,
0x12, 0xc6, 0xa2, 0x0c, 0xe3, 0x12, 0xd4, 0x24, 0x89, 0xe4, 0xba, 0x09, 0xe5, 0x50, 0x7e, 0x4b,
0xfc, 0xf8, 0xdf, 0x58, 0x80, 0x39, 0x13, 0xb7, 0x99, 0x26, 0x86, 0x77, 0x5c, 0x7f, 0x57, 0x2e,
0x63, 0xbc, 0xab, 0xc1, 0x7c, 0x1a, 0x2e, 0xe7, 0xfa, 0x12, 0x94, 0x6c, 0xc7, 0x09, 0x31, 0x21,
0x23, 0x8f, 0xe5, 0xba, 0xc0, 0x31, 0x23, 0xe4, 0x84, 0xe4, 0x72, 0x63, 0x4b, 0xce, 0xb0, 0xe0,
0xd4, 0x2d, 0x4c, 0xef, 0x62, 0x1a, 0x4e, 0x54, 0x07, 0x6e, 0xb0, 0xc8, 0x80, 0x13, 0x4b, 0xb5,
0x88, 0x7e, 0x8d, 0xf7, 0x35, 0x40, 0xc9, 0x15, 0x26, 0x39, 0xe6, 0xa4, 0x94, 0x73, 0x69, 0x29,
0x8b, 0x56, 0x99, 0x4e, 0x37, 0xf0, 0xb1, 0x4f, 0x93, 0x4f, 0xcc, 0x5a, 0x0c, 0x65, 0xea, 0x77,
0x71, 0x19, 0xca, 0x51, 0xe9, 0x12, 0x95, 0x20, 0x7f, 0xdd, 0xf3, 0xea, 0x53, 0x48, 0x87, 0xf2,
0xba, 0xac, 0xcf, 0xd5, 0xb5, 0x8b, 0x5f, 0x83, 0xd9, 0xa1, 0xc8, 0x1f, 0x95, 0x61, 0xfa, 0x95,
0xc0, 0xc7, 0xf5, 0x29, 0x54, 0x07, 0xfd, 0x86, 0xeb, 0xdb, 0x61, 0x5f, 0x78, 0xda, 0xba, 0x83,
0x66, 0xa1, 0xca, 0x3d, 0x8e, 0x04, 0xe0, 0xd5, 0x9f, 0x9f, 0x86, 0xda, 0x5d, 0xbe, 0x99, 0x4d,
0x1c, 0xde, 0x73, 0x5b, 0x18, 0x59, 0x50, 0x1f, 0x6e, 0x3e, 0x46, 0x8f, 0x2b, 0x75, 0x34, 0xa3,
0x47, 0xb9, 0x39, 0x4a, 0x3c, 0xc6, 0x14, 0x7a, 0x0b, 0x66, 0xd2, 0x6d, 0xc1, 0x48, 0x6d, 0x12,
0x95, 0xbd, 0xc3, 0x07, 0x4d, 0x6e, 0x41, 0x2d, 0xd5, 0xe5, 0x8b, 0x2e, 0x28, 0xe7, 0x56, 0x75,
0x02, 0x37, 0xd5, 0xaf, 0x94, 0x64, 0x27, 0xae, 0xe0, 0x3e, 0xdd, 0x8b, 0x98, 0xc1, 0xbd, 0xb2,
0x61, 0xf1, 0x20, 0xee, 0x6d, 0x38, 0xb5, 0xaf, 0xb5, 0x10, 0x3d, 0xa1, 0x9c, 0x3f, 0xab, 0x05,
0xf1, 0xa0, 0x25, 0xf6, 0x00, 0xed, 0xef, 0x66, 0x45, 0x97, 0xd5, 0x27, 0x90, 0xd5, 0xcb, 0xdb,
0xbc, 0x32, 0x36, 0x7e, 0x2c, 0xb8, 0xef, 0x69, 0x70, 0x3a, 0xa3, 0x1f, 0x10, 0x5d, 0x53, 0x4e,
0x37, 0xba, 0xa9, 0xb1, 0xf9, 0xd4, 0xe1, 0x88, 0x62, 0x46, 0x7c, 0x98, 0x1d, 0x6a, 0x91, 0x43,
0x97, 0x32, 0xdb, 0x06, 0xf6, 0xf7, 0x0a, 0x36, 0x1f, 0x1f, 0x0f, 0x39, 0x5e, 0x8f, 0xc5, 0xc2,
0xe9, 0xbe, 0xb2, 0x8c, 0xf5, 0xd4, 0xdd, 0x67, 0x07, 0x1d, 0xe8, 0x9b, 0x50, 0x4b, 0x35, 0x80,
0x65, 0x68, 0xbc, 0xaa, 0x49, 0xec, 0xa0, 0xa9, 0xdf, 0x06, 0x3d, 0xd9, 0xa7, 0x85, 0x56, 0xb2,
0xee, 0xd2, 0xbe, 0x89, 0x0f, 0x73, 0x95, 0x06, 0x6d, 0x18, 0x23, 0xae, 0xd2, 0xbe, 0xce, 0x95,
0xf1, 0xaf, 0x52, 0x62, 0xfe, 0x91, 0x57, 0xe9, 0xd0, 0x4b, 0xbc, 0xab, 0xc1, 0xa2, 0xba, 0xcd,
0x07, 0xad, 0x66, 0xe9, 0x66, 0x76, 0x43, 0x53, 0xf3, 0xda, 0xa1, 0x68, 0x62, 0x29, 0xee, 0xc2,
0x4c, 0xba, 0x99, 0x25, 0x43, 0x8a, 0xca, 0xfe, 0x9f, 0xe6, 0xa5, 0xb1, 0x70, 0xe3, 0xc5, 0x5e,
0x87, 0x6a, 0xa2, 0xa0, 0x8f, 0x1e, 0x1b, 0xa1, 0xc7, 0xc9, 0x72, 0xd0, 0x41, 0x92, 0xdc, 0x81,
0x5a, 0xaa, 0x88, 0x9b, 0xa5, 0xc3, 0x8a, 0xda, 0x7a, 0xf3, 0xe2, 0x38, 0xa8, 0xf1, 0x06, 0x76,
0xa0, 0x96, 0x2a, 0xa9, 0x65, 0xac, 0xa4, 0xaa, 0x20, 0x66, 0xac, 0xa4, 0xac, 0xd0, 0x19, 0x53,
0xe8, 0xdb, 0x89, 0xea, 0x5d, 0xaa, 0x42, 0x8a, 0xae, 0x8e, 0x9c, 0x47, 0x55, 0x20, 0x6e, 0xae,
0x1e, 0x86, 0x24, 0x66, 0xe1, 0x55, 0xa8, 0xc4, 0x85, 0x39, 0x74, 0x3e, 0xd3, 0x2c, 0x1c, 0xe6,
0xa4, 0x36, 0xa1, 0x28, 0x8a, 0x64, 0xc8, 0xc8, 0x28, 0x87, 0x27, 0x2a, 0x68, 0xcd, 0x47, 0x95,
0x38, 0xe9, 0xfa, 0x91, 0x31, 0x85, 0x4c, 0x28, 0x8a, 0x34, 0x6c, 0xc6, 0xa4, 0xa9, 0x52, 0x42,
0x73, 0x34, 0x8e, 0xc8, 0xdd, 0x4e, 0xa1, 0x0d, 0x28, 0xf0, 0x74, 0x25, 0x5a, 0x1e, 0x95, 0xca,
0x1c, 0x35, 0x63, 0x2a, 0xdb, 0x69, 0x4c, 0xa1, 0x6f, 0x40, 0x81, 0xbf, 0xca, 0x33, 0x66, 0x4c,
0xe6, 0x23, 0x9b, 0x23, 0x51, 0x22, 0x16, 0x1d, 0xd0, 0x93, 0xd9, 0x8a, 0x0c, 0xf3, 0xaa, 0xc8,
0xe7, 0x34, 0xc7, 0xc1, 0x8c, 0x56, 0xf9, 0xbe, 0x06, 0x8d, 0xac, 0xc0, 0x16, 0x65, 0xfa, 0xd0,
0x51, 0xd1, 0x79, 0xf3, 0xe9, 0x43, 0x52, 0xc5, 0x22, 0x7c, 0x07, 0xe6, 0x14, 0xe1, 0x14, 0xba,
0x92, 0x35, 0x5f, 0x46, 0x24, 0xd8, 0x7c, 0x72, 0x7c, 0x82, 0x78, 0xed, 0x0d, 0x28, 0xf0, 0x30,
0x28, 0xe3, 0xf8, 0x92, 0x51, 0x55, 0x86, 0x42, 0xa4, 0xa2, 0x28, 0x63, 0x0a, 0x61, 0xd0, 0x93,
0x31, 0x51, 0xc6, 0xf9, 0x29, 0xc2, 0xa9, 0xe6, 0x85, 0x31, 0x30, 0xa3, 0x65, 0x56, 0x7b, 0xa0,
0x6f, 0x84, 0xc1, 0xfd, 0x7e, 0xf4, 0x40, 0xff, 0xff, 0x2c, 0x7b, 0xe3, 0xe9, 0x6f, 0x5e, 0x6b,
0xbb, 0x74, 0xa7, 0xb7, 0xc5, 0x6c, 0xc0, 0x15, 0x81, 0xfb, 0x84, 0x1b, 0xc8, 0xaf, 0x2b, 0xae,
0x4f, 0x71, 0xe8, 0xdb, 0xde, 0x15, 0x3e, 0x97, 0x84, 0x76, 0xb7, 0xb6, 0x8a, 0xfc, 0xff, 0xda,
0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x6d, 0x26, 0xc3, 0xaf, 0x04, 0x39, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@ -26,6 +26,9 @@ service QueryCoord {
rpc CreateQueryChannel(CreateQueryChannelRequest) returns (CreateQueryChannelResponse) {}
rpc GetPartitionStates(GetPartitionStatesRequest) returns (GetPartitionStatesResponse) {}
rpc GetSegmentInfo(GetSegmentInfoRequest) returns (GetSegmentInfoResponse) {}
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
rpc GetMetrics(milvus.GetMetricsRequest) returns (milvus.GetMetricsResponse) {}
}
service QueryNode {
@ -41,6 +44,9 @@ service QueryNode {
rpc ReleasePartitions(ReleasePartitionsRequest) returns (common.Status) {}
rpc ReleaseSegments(ReleaseSegmentsRequest) returns (common.Status) {}
rpc GetSegmentInfo(GetSegmentInfoRequest) returns (GetSegmentInfoResponse) {}
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
rpc GetMetrics(milvus.GetMetricsRequest) returns (milvus.GetMetricsResponse) {}
}
//--------------------query coordinator proto------------------

View File

@ -2021,128 +2021,130 @@ func init() {
func init() { proto.RegisterFile("query_coord.proto", fileDescriptor_aab7cc9a69ed26e8) }
var fileDescriptor_aab7cc9a69ed26e8 = []byte{
// 1933 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6f, 0x1b, 0xc7,
0x15, 0xd7, 0x92, 0x14, 0x45, 0x3e, 0xf1, 0x63, 0x3d, 0xb6, 0x54, 0x9a, 0xb5, 0x13, 0x75, 0x1d,
0xd7, 0x8e, 0xd2, 0x48, 0x89, 0x9c, 0x02, 0xf5, 0xa1, 0x87, 0x58, 0x8c, 0x55, 0xb6, 0x89, 0xa2,
0xae, 0xd4, 0x14, 0x35, 0x0c, 0x6c, 0x97, 0xdc, 0x11, 0xb5, 0xc8, 0xee, 0x0e, 0xbd, 0xb3, 0xb4,
0x2c, 0x1f, 0x7a, 0xea, 0xb9, 0xb7, 0x9e, 0x5a, 0x14, 0x28, 0xd0, 0x0f, 0xf4, 0xd0, 0x7f, 0xa0,
0xa7, 0xfc, 0x09, 0xfd, 0x07, 0x5a, 0xa0, 0x68, 0x6e, 0xfd, 0x27, 0x8a, 0xf9, 0xd8, 0xe5, 0x7e,
0x0c, 0x25, 0x4a, 0xaa, 0x62, 0xa3, 0xc8, 0x8d, 0xfb, 0xe6, 0xcd, 0xfb, 0x9e, 0xdf, 0xbc, 0x79,
0x84, 0x6b, 0xcf, 0x26, 0x38, 0x3c, 0xb1, 0x86, 0x84, 0x84, 0xce, 0xc6, 0x38, 0x24, 0x11, 0x41,
0xc8, 0x77, 0xbd, 0xe7, 0x13, 0x2a, 0xbe, 0x36, 0xf8, 0x7a, 0xb7, 0x31, 0x24, 0xbe, 0x4f, 0x02,
0x41, 0xeb, 0x36, 0xd2, 0x1c, 0xdd, 0x96, 0x1b, 0x44, 0x38, 0x0c, 0x6c, 0x2f, 0x5e, 0xa5, 0xc3,
0x23, 0xec, 0xdb, 0xf2, 0x4b, 0x77, 0xec, 0xc8, 0x4e, 0xcb, 0x37, 0x7e, 0xa9, 0xc1, 0xea, 0xfe,
0x11, 0x39, 0xde, 0x26, 0x9e, 0x87, 0x87, 0x91, 0x4b, 0x02, 0x6a, 0xe2, 0x67, 0x13, 0x4c, 0x23,
0xf4, 0x1e, 0x54, 0x06, 0x36, 0xc5, 0x1d, 0x6d, 0x4d, 0xbb, 0xbf, 0xbc, 0x75, 0x6b, 0x23, 0x63,
0x89, 0x34, 0xe1, 0x13, 0x3a, 0x7a, 0x64, 0x53, 0x6c, 0x72, 0x4e, 0x84, 0xa0, 0xe2, 0x0c, 0xfa,
0xbd, 0x4e, 0x69, 0x4d, 0xbb, 0x5f, 0x36, 0xf9, 0x6f, 0xf4, 0x16, 0x34, 0x87, 0x89, 0xec, 0x7e,
0x8f, 0x76, 0xca, 0x6b, 0xe5, 0xfb, 0x65, 0x33, 0x4b, 0x34, 0xfe, 0xac, 0xc1, 0x37, 0x0a, 0x66,
0xd0, 0x31, 0x09, 0x28, 0x46, 0x0f, 0xa0, 0x4a, 0x23, 0x3b, 0x9a, 0x50, 0x69, 0xc9, 0x37, 0x95,
0x96, 0xec, 0x73, 0x16, 0x53, 0xb2, 0x16, 0xd5, 0x96, 0x14, 0x6a, 0xd1, 0xfb, 0x70, 0xc3, 0x0d,
0x3e, 0xc1, 0x3e, 0x09, 0x4f, 0xac, 0x31, 0x0e, 0x87, 0x38, 0x88, 0xec, 0x11, 0x8e, 0x6d, 0xbc,
0x1e, 0xaf, 0xed, 0x4d, 0x97, 0x8c, 0x3f, 0x6a, 0xb0, 0xc2, 0x2c, 0xdd, 0xb3, 0xc3, 0xc8, 0xbd,
0x82, 0x78, 0x19, 0xd0, 0x48, 0xdb, 0xd8, 0x29, 0xf3, 0xb5, 0x0c, 0x8d, 0xf1, 0x8c, 0x63, 0xf5,
0xcc, 0xb7, 0x0a, 0x37, 0x37, 0x43, 0x33, 0xfe, 0x20, 0x13, 0x9b, 0xb6, 0xf3, 0x32, 0x01, 0xcd,
0xeb, 0x2c, 0x15, 0x75, 0x5e, 0x24, 0x9c, 0x5f, 0x68, 0xb0, 0xf2, 0x31, 0xb1, 0x9d, 0x69, 0xe2,
0xbf, 0xfa, 0x70, 0x7e, 0x1f, 0xaa, 0xe2, 0x94, 0x74, 0x2a, 0x5c, 0xd7, 0xdd, 0xac, 0x2e, 0x79,
0x82, 0xa6, 0x16, 0xee, 0x73, 0x82, 0x29, 0x37, 0x19, 0xbf, 0xd5, 0xa0, 0x63, 0x62, 0x0f, 0xdb,
0x14, 0xbf, 0x4a, 0x2f, 0x56, 0xa1, 0x1a, 0x10, 0x07, 0xf7, 0x7b, 0xdc, 0x8b, 0xb2, 0x29, 0xbf,
0x8c, 0x2f, 0x65, 0x84, 0x5f, 0xf3, 0x82, 0x4d, 0x65, 0x61, 0xf1, 0x22, 0x59, 0xf8, 0x62, 0x9a,
0x85, 0xd7, 0xdd, 0xd3, 0x69, 0xa6, 0x16, 0x33, 0x99, 0xfa, 0x19, 0xdc, 0xdc, 0x0e, 0xb1, 0x1d,
0xe1, 0x1f, 0x33, 0x98, 0xdf, 0x3e, 0xb2, 0x83, 0x00, 0x7b, 0xb1, 0x0b, 0x79, 0xe5, 0x9a, 0x42,
0x79, 0x07, 0x96, 0xc6, 0x21, 0x79, 0x71, 0x92, 0xd8, 0x1d, 0x7f, 0x1a, 0xbf, 0xd7, 0xa0, 0xab,
0x92, 0x7d, 0x19, 0x44, 0xb8, 0x07, 0xed, 0x50, 0x18, 0x67, 0x0d, 0x85, 0x3c, 0xae, 0xb5, 0x6e,
0xb6, 0x24, 0x59, 0x6a, 0x41, 0x77, 0xa1, 0x15, 0x62, 0x3a, 0xf1, 0xa6, 0x7c, 0x65, 0xce, 0xd7,
0x14, 0x54, 0xc9, 0x66, 0xfc, 0x45, 0x83, 0x9b, 0x3b, 0x38, 0x4a, 0xb2, 0xc7, 0xd4, 0xe1, 0xd7,
0x14, 0x5d, 0x7f, 0xa7, 0x41, 0x3b, 0x67, 0x28, 0x5a, 0x83, 0xe5, 0x14, 0x8f, 0x4c, 0x50, 0x9a,
0x84, 0xbe, 0x07, 0x8b, 0x2c, 0x76, 0x98, 0x9b, 0xd4, 0xda, 0x32, 0x36, 0x8a, 0x97, 0xfb, 0x46,
0x56, 0xaa, 0x29, 0x36, 0xa0, 0x4d, 0xb8, 0xae, 0x40, 0x56, 0x69, 0x3e, 0x2a, 0x02, 0xab, 0xf1,
0x57, 0x0d, 0xba, 0xaa, 0x60, 0x5e, 0x26, 0xe1, 0x4f, 0x60, 0x35, 0xf1, 0xc6, 0x72, 0x30, 0x1d,
0x86, 0xee, 0x98, 0x1f, 0x33, 0x7e, 0x19, 0x2c, 0x6f, 0xdd, 0x39, 0xdb, 0x1f, 0x6a, 0xae, 0x24,
0x22, 0x7a, 0x29, 0x09, 0x86, 0x0b, 0x2b, 0x3b, 0x38, 0xda, 0xc7, 0x23, 0x1f, 0x07, 0x51, 0x3f,
0x38, 0x24, 0x17, 0xcf, 0xfb, 0x1b, 0x00, 0x54, 0xca, 0x49, 0xee, 0xa9, 0x14, 0xc5, 0xf8, 0x47,
0x09, 0x96, 0x53, 0x8a, 0xd0, 0x2d, 0xa8, 0x27, 0xab, 0x32, 0x6b, 0x53, 0x42, 0xa1, 0x62, 0x4a,
0x8a, 0x8a, 0xc9, 0x65, 0xbe, 0x5c, 0xcc, 0xfc, 0x0c, 0x70, 0x46, 0x37, 0xa1, 0xe6, 0x63, 0xdf,
0xa2, 0xee, 0x4b, 0x2c, 0xc1, 0x60, 0xc9, 0xc7, 0xfe, 0xbe, 0xfb, 0x12, 0xb3, 0xa5, 0x60, 0xe2,
0x5b, 0x21, 0x39, 0xa6, 0x9d, 0xaa, 0x58, 0x0a, 0x26, 0xbe, 0x49, 0x8e, 0x29, 0xba, 0x0d, 0xe0,
0x06, 0x0e, 0x7e, 0x61, 0x05, 0xb6, 0x8f, 0x3b, 0x4b, 0xfc, 0x30, 0xd5, 0x39, 0x65, 0xd7, 0xf6,
0x31, 0x83, 0x01, 0xfe, 0xd1, 0xef, 0x75, 0x6a, 0x62, 0xa3, 0xfc, 0x64, 0xae, 0xca, 0x23, 0xd8,
0xef, 0x75, 0xea, 0x62, 0x5f, 0x42, 0x40, 0x1f, 0x41, 0x53, 0xfa, 0x6d, 0x89, 0x32, 0x05, 0x5e,
0xa6, 0x6b, 0xaa, 0xb4, 0xca, 0x00, 0x8a, 0x22, 0x6d, 0xd0, 0xd4, 0x17, 0x6f, 0x29, 0xf3, 0xb9,
0xbc, 0x4c, 0xd9, 0x7d, 0x17, 0x16, 0xdd, 0xe0, 0x90, 0xc4, 0x55, 0xf6, 0xe6, 0x29, 0xe6, 0x70,
0x65, 0x82, 0xdb, 0xf8, 0xa7, 0x06, 0xab, 0x1f, 0x3a, 0x8e, 0x0a, 0x4b, 0xcf, 0x5f, 0x53, 0xd3,
0xfc, 0x95, 0x32, 0xf9, 0x9b, 0x07, 0x4f, 0xde, 0x81, 0x6b, 0x39, 0x9c, 0x94, 0x65, 0x50, 0x37,
0xf5, 0x2c, 0x52, 0xf6, 0x7b, 0xe8, 0x6d, 0xd0, 0xb3, 0x58, 0x29, 0x6f, 0x89, 0xba, 0xd9, 0xce,
0xa0, 0x65, 0xbf, 0x67, 0xfc, 0x4b, 0x83, 0x9b, 0x26, 0xf6, 0xc9, 0x73, 0xfc, 0xff, 0xeb, 0xe3,
0xbf, 0x4b, 0xb0, 0xfa, 0x53, 0x3b, 0x1a, 0x1e, 0xf5, 0x7c, 0x49, 0xa4, 0xaf, 0xc6, 0xc1, 0xdc,
0x11, 0xaf, 0x14, 0x8f, 0x78, 0x52, 0xa6, 0x8b, 0xaa, 0x32, 0x65, 0x0f, 0xaf, 0x8d, 0xcf, 0x62,
0x7f, 0xa7, 0x65, 0x9a, 0x6a, 0x7b, 0xaa, 0x17, 0x68, 0x7b, 0xd0, 0x36, 0x34, 0xf1, 0x8b, 0xa1,
0x37, 0x71, 0xb0, 0x25, 0xb4, 0x2f, 0x71, 0xed, 0x6f, 0x28, 0xb4, 0xa7, 0xcf, 0x48, 0x43, 0x6e,
0xea, 0xf3, 0xa3, 0xf2, 0x1f, 0x0d, 0xda, 0x72, 0x95, 0x75, 0x8a, 0x73, 0xa0, 0x62, 0x2e, 0x1c,
0xa5, 0x62, 0x38, 0xe6, 0x09, 0x6a, 0x7c, 0x43, 0x57, 0x52, 0x37, 0xf4, 0x6d, 0x80, 0x43, 0x6f,
0x42, 0x8f, 0xac, 0xc8, 0xf5, 0x63, 0x4c, 0xac, 0x73, 0xca, 0x81, 0xeb, 0x63, 0xf4, 0x21, 0x34,
0x06, 0x6e, 0xe0, 0x91, 0x91, 0x35, 0xb6, 0xa3, 0x23, 0x86, 0x8c, 0xb3, 0xdc, 0x7d, 0xec, 0x62,
0xcf, 0x79, 0xc4, 0x79, 0xcd, 0x65, 0xb1, 0x67, 0x8f, 0x6d, 0x31, 0xfe, 0x54, 0x82, 0xeb, 0xcc,
0x4d, 0xe9, 0xf1, 0x15, 0x14, 0xd4, 0xc3, 0xb8, 0x14, 0xca, 0xb3, 0xef, 0xc5, 0x5c, 0xbc, 0x8b,
0xe5, 0x70, 0x91, 0xb7, 0x08, 0xfa, 0x11, 0xb4, 0x3c, 0x62, 0x3b, 0xd6, 0x90, 0x04, 0x0e, 0xcf,
0x04, 0x8f, 0x60, 0x6b, 0xeb, 0x2d, 0x95, 0x09, 0x07, 0xa1, 0x3b, 0x1a, 0xe1, 0x70, 0x3b, 0xe6,
0x35, 0x9b, 0x1e, 0x7f, 0x89, 0xc9, 0x4f, 0x8e, 0xa0, 0xb2, 0xa5, 0xbe, 0xba, 0x58, 0xc5, 0x35,
0x50, 0x3e, 0xa5, 0x4b, 0xab, 0xcc, 0xd1, 0xa5, 0x2d, 0x2a, 0x1a, 0xed, 0x6c, 0x27, 0x50, 0x2d,
0x74, 0x02, 0x07, 0xd0, 0x4c, 0x70, 0x85, 0x17, 0xfd, 0x1d, 0x68, 0x0a, 0xb3, 0x2c, 0x16, 0x09,
0xec, 0xc4, 0x5d, 0xb6, 0x20, 0x7e, 0xcc, 0x69, 0x4c, 0x6a, 0x82, 0x5b, 0xe2, 0x52, 0xaa, 0x9b,
0x29, 0x8a, 0xf1, 0x6b, 0x0d, 0xf4, 0x34, 0x22, 0x73, 0xc9, 0xf3, 0xb4, 0xef, 0xf7, 0xa0, 0x2d,
0x07, 0x40, 0x09, 0x2c, 0xca, 0x86, 0xfa, 0x59, 0x5a, 0x5c, 0x0f, 0x7d, 0x00, 0xab, 0x82, 0xb1,
0x00, 0xa3, 0xa2, 0xb1, 0xbe, 0xc1, 0x57, 0xcd, 0x1c, 0x96, 0xfe, 0xbd, 0x0c, 0xad, 0x69, 0xe1,
0xcc, 0x6d, 0xd5, 0x3c, 0x0f, 0xff, 0x5d, 0xd0, 0xa7, 0x9d, 0x21, 0xef, 0x1d, 0x4e, 0xad, 0xfd,
0x7c, 0x4f, 0xd8, 0x1e, 0xe7, 0x5a, 0xe9, 0xc7, 0xd0, 0x94, 0x3e, 0x49, 0x54, 0xab, 0x70, 0x61,
0xdf, 0x52, 0x09, 0xcb, 0x64, 0xd0, 0x6c, 0xa4, 0x20, 0x96, 0xa2, 0x87, 0x50, 0xe7, 0xc7, 0x21,
0x3a, 0x19, 0x63, 0x79, 0x12, 0x6e, 0xa9, 0x64, 0xb0, 0xcc, 0x1e, 0x9c, 0x8c, 0xb1, 0x59, 0xf3,
0xe4, 0xaf, 0xcb, 0xe2, 0xf2, 0x03, 0x58, 0x09, 0xc5, 0xd1, 0x71, 0xac, 0x4c, 0xf8, 0x96, 0x78,
0xf8, 0x6e, 0xc4, 0x8b, 0x7b, 0xe9, 0x30, 0xce, 0xe8, 0xf2, 0x6b, 0x33, 0xbb, 0xfc, 0x5f, 0x40,
0xfb, 0x07, 0x76, 0xe0, 0x90, 0xc3, 0xc3, 0xf8, 0x80, 0x5e, 0xe0, 0x64, 0x3e, 0xcc, 0xf6, 0x57,
0xe7, 0x40, 0x2b, 0xe3, 0x37, 0x25, 0x58, 0x65, 0xb4, 0x47, 0xb6, 0x67, 0x07, 0x43, 0x3c, 0x7f,
0x57, 0xfd, 0xbf, 0xb9, 0x3f, 0xee, 0x40, 0x93, 0x92, 0x49, 0x38, 0xc4, 0x56, 0xa6, 0xb9, 0x6e,
0x08, 0xe2, 0xae, 0x00, 0x98, 0xdb, 0x00, 0x0e, 0x8d, 0xac, 0xcc, 0x8b, 0xbb, 0xee, 0xd0, 0x48,
0x2e, 0xbf, 0x09, 0xcb, 0x52, 0x86, 0x43, 0x02, 0xcc, 0x93, 0x5d, 0x33, 0x41, 0x90, 0x7a, 0x24,
0xe0, 0x7d, 0x38, 0xdb, 0xcf, 0x57, 0x97, 0xf8, 0xea, 0x92, 0x43, 0x23, 0xbe, 0x74, 0x1b, 0xe0,
0xb9, 0xed, 0xb9, 0x0e, 0x2f, 0x52, 0x9e, 0xa6, 0x9a, 0x59, 0xe7, 0x14, 0x16, 0x02, 0xe3, 0x6f,
0x1a, 0xa0, 0x54, 0x74, 0x2e, 0x8e, 0x9d, 0x77, 0xa1, 0x95, 0xf1, 0x33, 0x99, 0x66, 0xa6, 0x1d,
0xa5, 0x0c, 0xfc, 0x07, 0x42, 0x95, 0x15, 0x62, 0x9b, 0x92, 0x80, 0x07, 0x6d, 0x6e, 0xf0, 0x1f,
0xc4, 0x66, 0xb2, 0xad, 0xeb, 0x2f, 0xa1, 0x95, 0x3d, 0xa6, 0xa8, 0x01, 0xb5, 0x5d, 0x12, 0x7d,
0xf4, 0xc2, 0xa5, 0x91, 0xbe, 0x80, 0x5a, 0x00, 0xbb, 0x24, 0xda, 0x0b, 0x31, 0xc5, 0x41, 0xa4,
0x6b, 0x08, 0xa0, 0xfa, 0x69, 0xd0, 0x73, 0xe9, 0xe7, 0x7a, 0x09, 0x5d, 0x97, 0x8f, 0x63, 0xdb,
0xeb, 0xcb, 0x9a, 0xd5, 0xcb, 0x6c, 0x7b, 0xf2, 0x55, 0x41, 0x3a, 0x34, 0x12, 0x96, 0x9d, 0xbd,
0x9f, 0xe8, 0x8b, 0xa8, 0x0e, 0x8b, 0xe2, 0x67, 0x75, 0xfd, 0x53, 0xd0, 0xf3, 0xe6, 0xa1, 0x65,
0x58, 0x3a, 0x12, 0xa5, 0xae, 0x2f, 0xa0, 0x36, 0x2c, 0x7b, 0xd3, 0xc0, 0xea, 0x1a, 0x23, 0x8c,
0xc2, 0xf1, 0x50, 0x86, 0x58, 0x2f, 0x31, 0x6d, 0x2c, 0x56, 0x3d, 0x72, 0x1c, 0xe8, 0xe5, 0xf5,
0x1f, 0x42, 0x23, 0xfd, 0x60, 0x41, 0x35, 0xa8, 0xec, 0x92, 0x00, 0xeb, 0x0b, 0x4c, 0xec, 0x4e,
0x48, 0x8e, 0xdd, 0x60, 0x24, 0x7c, 0x78, 0x1c, 0x92, 0x97, 0x38, 0xd0, 0x4b, 0x6c, 0x81, 0x62,
0xdb, 0x63, 0x0b, 0x65, 0xb6, 0xc0, 0x3e, 0xb0, 0xa3, 0x57, 0xd6, 0xdf, 0x87, 0x5a, 0x0c, 0x17,
0xe8, 0x1a, 0x34, 0x33, 0xa3, 0x35, 0x7d, 0x01, 0x21, 0x71, 0x03, 0x4f, 0x81, 0x41, 0xd7, 0xb6,
0x7e, 0x05, 0x00, 0xe2, 0x46, 0x20, 0x24, 0x74, 0xd0, 0x18, 0xd0, 0x0e, 0x8e, 0xb6, 0x89, 0x3f,
0x26, 0x41, 0x6c, 0x12, 0x45, 0xef, 0x65, 0xb3, 0x94, 0xcc, 0xf1, 0x8b, 0xac, 0xd2, 0xcb, 0xee,
0xb7, 0x67, 0xec, 0xc8, 0xb1, 0x1b, 0x0b, 0xc8, 0xe7, 0x1a, 0x59, 0x03, 0x75, 0xe0, 0x0e, 0x3f,
0x8f, 0xe7, 0x32, 0xa7, 0x68, 0xcc, 0xb1, 0xc6, 0x1a, 0x73, 0xd8, 0x20, 0x3f, 0xf6, 0xa3, 0xd0,
0x0d, 0x46, 0xf1, 0x23, 0xcf, 0x58, 0x40, 0xcf, 0xe0, 0x06, 0x7b, 0x00, 0x46, 0x76, 0xe4, 0xd2,
0xc8, 0x1d, 0xd2, 0x58, 0xe1, 0xd6, 0x6c, 0x85, 0x05, 0xe6, 0x73, 0xaa, 0xf4, 0xa0, 0x9d, 0xfb,
0xff, 0x00, 0xad, 0x2b, 0x81, 0x4c, 0xf9, 0x5f, 0x47, 0xf7, 0x9d, 0xb9, 0x78, 0x13, 0x6d, 0x2e,
0xb4, 0xb2, 0xb3, 0x75, 0xf4, 0xf6, 0x2c, 0x01, 0x85, 0x61, 0x64, 0x77, 0x7d, 0x1e, 0xd6, 0x44,
0xd5, 0x13, 0x68, 0x65, 0xa7, 0xb7, 0x6a, 0x55, 0xca, 0x09, 0x6f, 0xf7, 0xb4, 0xf7, 0xb5, 0xb1,
0x80, 0x7e, 0x0e, 0xd7, 0x0a, 0x23, 0x53, 0xf4, 0x1d, 0x95, 0xf8, 0x59, 0x93, 0xd5, 0xb3, 0x34,
0x48, 0xeb, 0xa7, 0x51, 0x9c, 0x6d, 0x7d, 0x61, 0x76, 0x3e, 0xbf, 0xf5, 0x29, 0xf1, 0xa7, 0x59,
0x7f, 0x6e, 0x0d, 0x13, 0x40, 0xc5, 0xa1, 0x29, 0x7a, 0x57, 0xa5, 0x62, 0xe6, 0xe0, 0xb6, 0xbb,
0x31, 0x2f, 0x7b, 0x92, 0xf2, 0x09, 0x3f, 0xad, 0xf9, 0xf1, 0xa2, 0x52, 0xed, 0xcc, 0x79, 0xa9,
0x5a, 0xed, 0xec, 0x89, 0xa0, 0x28, 0xea, 0xec, 0xd8, 0x46, 0x9d, 0x2b, 0xe5, 0x98, 0x4e, 0x5d,
0xd4, 0xea, 0x29, 0x90, 0xb1, 0xb0, 0xf5, 0x65, 0x0d, 0xea, 0xdc, 0x79, 0x76, 0x75, 0x7d, 0x8d,
0x87, 0x57, 0x80, 0x87, 0x4f, 0xa1, 0x9d, 0x1b, 0x7e, 0xa9, 0xf1, 0x50, 0x3d, 0x21, 0x3b, 0xeb,
0x60, 0x0c, 0x00, 0x15, 0x27, 0x4f, 0xea, 0x0a, 0x9d, 0x39, 0xa1, 0x3a, 0x4b, 0xc7, 0x53, 0x68,
0xe7, 0x26, 0x3f, 0x6a, 0x0f, 0xd4, 0xe3, 0xa1, 0xb3, 0xa4, 0x7f, 0x06, 0x8d, 0xf4, 0x0c, 0x00,
0xdd, 0x9b, 0x05, 0x4b, 0xb9, 0x97, 0xef, 0xab, 0x07, 0xa5, 0xab, 0x07, 0xed, 0xa7, 0xd0, 0xce,
0x3d, 0xfb, 0xd5, 0x91, 0x57, 0xcf, 0x06, 0xce, 0x92, 0xfe, 0xd5, 0xc1, 0xcc, 0xa3, 0x0f, 0x9e,
0x6c, 0x8d, 0xdc, 0xe8, 0x68, 0x32, 0x60, 0x46, 0x6c, 0x8a, 0x9d, 0xef, 0xba, 0x44, 0xfe, 0xda,
0x8c, 0xcf, 0xdb, 0x26, 0x17, 0xb6, 0xc9, 0x85, 0x8d, 0x07, 0x83, 0x2a, 0xff, 0x7c, 0xf0, 0xdf,
0x00, 0x00, 0x00, 0xff, 0xff, 0xa6, 0xcb, 0xb1, 0x73, 0x8e, 0x21, 0x00, 0x00,
// 1958 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x4f, 0x73, 0x1b, 0x49,
0x15, 0xf7, 0x48, 0xb2, 0x2c, 0x3d, 0xeb, 0xcf, 0xa4, 0x13, 0x1b, 0x45, 0x24, 0xbb, 0x66, 0xb2,
0xd9, 0x64, 0xbd, 0xac, 0xbd, 0xab, 0x2c, 0x55, 0xe4, 0xc0, 0x61, 0x63, 0x6d, 0x8c, 0x60, 0xe3,
0x35, 0x63, 0xb3, 0x14, 0xa9, 0x54, 0x0d, 0xa3, 0x99, 0xb6, 0x34, 0xb5, 0x33, 0xd3, 0xca, 0xf4,
0x28, 0x8e, 0x73, 0xe0, 0xc4, 0x57, 0xe0, 0x04, 0x45, 0x15, 0x55, 0xfc, 0x29, 0x0e, 0x7c, 0x01,
0x4e, 0x7b, 0xe1, 0xce, 0x17, 0x80, 0x2a, 0x0a, 0x6e, 0x1c, 0xf8, 0x0a, 0x54, 0xf7, 0xf4, 0x8c,
0xe6, 0x4f, 0xcb, 0x56, 0x6c, 0x4c, 0x52, 0x29, 0x6e, 0xea, 0xd7, 0x6f, 0xde, 0xff, 0xfe, 0xf5,
0xeb, 0x27, 0xb8, 0xf2, 0x74, 0x8a, 0x83, 0x13, 0xc3, 0x22, 0x24, 0xb0, 0xb7, 0x26, 0x01, 0x09,
0x09, 0x42, 0x9e, 0xe3, 0x3e, 0x9b, 0xd2, 0x68, 0xb5, 0xc5, 0xf7, 0xbb, 0x0d, 0x8b, 0x78, 0x1e,
0xf1, 0x23, 0x5a, 0xb7, 0x91, 0xe6, 0xe8, 0xb6, 0x1c, 0x3f, 0xc4, 0x81, 0x6f, 0xba, 0xf1, 0x2e,
0xb5, 0xc6, 0xd8, 0x33, 0xc5, 0x4a, 0xb5, 0xcd, 0xd0, 0x4c, 0xcb, 0xd7, 0x7e, 0xa6, 0xc0, 0xfa,
0xc1, 0x98, 0x1c, 0xef, 0x10, 0xd7, 0xc5, 0x56, 0xe8, 0x10, 0x9f, 0xea, 0xf8, 0xe9, 0x14, 0xd3,
0x10, 0x7d, 0x08, 0x95, 0xa1, 0x49, 0x71, 0x47, 0xd9, 0x50, 0xee, 0xae, 0xf6, 0x6e, 0x6c, 0x65,
0x2c, 0x11, 0x26, 0x3c, 0xa2, 0xa3, 0x07, 0x26, 0xc5, 0x3a, 0xe7, 0x44, 0x08, 0x2a, 0xf6, 0x70,
0xd0, 0xef, 0x94, 0x36, 0x94, 0xbb, 0x65, 0x9d, 0xff, 0x46, 0xef, 0x40, 0xd3, 0x4a, 0x64, 0x0f,
0xfa, 0xb4, 0x53, 0xde, 0x28, 0xdf, 0x2d, 0xeb, 0x59, 0xa2, 0xf6, 0x7b, 0x05, 0xbe, 0x56, 0x30,
0x83, 0x4e, 0x88, 0x4f, 0x31, 0xba, 0x07, 0x55, 0x1a, 0x9a, 0xe1, 0x94, 0x0a, 0x4b, 0xbe, 0x2e,
0xb5, 0xe4, 0x80, 0xb3, 0xe8, 0x82, 0xb5, 0xa8, 0xb6, 0x24, 0x51, 0x8b, 0x3e, 0x82, 0x6b, 0x8e,
0xff, 0x08, 0x7b, 0x24, 0x38, 0x31, 0x26, 0x38, 0xb0, 0xb0, 0x1f, 0x9a, 0x23, 0x1c, 0xdb, 0x78,
0x35, 0xde, 0xdb, 0x9f, 0x6d, 0x69, 0xbf, 0x55, 0x60, 0x8d, 0x59, 0xba, 0x6f, 0x06, 0xa1, 0x73,
0x09, 0xf1, 0xd2, 0xa0, 0x91, 0xb6, 0xb1, 0x53, 0xe6, 0x7b, 0x19, 0x1a, 0xe3, 0x99, 0xc4, 0xea,
0x99, 0x6f, 0x15, 0x6e, 0x6e, 0x86, 0xa6, 0xfd, 0x46, 0x24, 0x36, 0x6d, 0xe7, 0x45, 0x02, 0x9a,
0xd7, 0x59, 0x2a, 0xea, 0x3c, 0x4f, 0x38, 0xbf, 0x52, 0x60, 0xed, 0x33, 0x62, 0xda, 0xb3, 0xc4,
0xff, 0xef, 0xc3, 0xf9, 0x1d, 0xa8, 0x46, 0xa7, 0xa4, 0x53, 0xe1, 0xba, 0x6e, 0x67, 0x75, 0x89,
0x13, 0x34, 0xb3, 0xf0, 0x80, 0x13, 0x74, 0xf1, 0x91, 0xf6, 0x4b, 0x05, 0x3a, 0x3a, 0x76, 0xb1,
0x49, 0xf1, 0xab, 0xf4, 0x62, 0x1d, 0xaa, 0x3e, 0xb1, 0xf1, 0xa0, 0xcf, 0xbd, 0x28, 0xeb, 0x62,
0xa5, 0xfd, 0x53, 0x44, 0xf8, 0x35, 0x2f, 0xd8, 0x54, 0x16, 0x96, 0xcf, 0x93, 0x85, 0xaf, 0x66,
0x59, 0x78, 0xdd, 0x3d, 0x9d, 0x65, 0x6a, 0x39, 0x93, 0xa9, 0x1f, 0xc3, 0xf5, 0x9d, 0x00, 0x9b,
0x21, 0xfe, 0x01, 0x83, 0xf9, 0x9d, 0xb1, 0xe9, 0xfb, 0xd8, 0x8d, 0x5d, 0xc8, 0x2b, 0x57, 0x24,
0xca, 0x3b, 0xb0, 0x32, 0x09, 0xc8, 0xf3, 0x93, 0xc4, 0xee, 0x78, 0xa9, 0xfd, 0x5a, 0x81, 0xae,
0x4c, 0xf6, 0x45, 0x10, 0xe1, 0x0e, 0xb4, 0x83, 0xc8, 0x38, 0xc3, 0x8a, 0xe4, 0x71, 0xad, 0x75,
0xbd, 0x25, 0xc8, 0x42, 0x0b, 0xba, 0x0d, 0xad, 0x00, 0xd3, 0xa9, 0x3b, 0xe3, 0x2b, 0x73, 0xbe,
0x66, 0x44, 0x15, 0x6c, 0xda, 0x1f, 0x14, 0xb8, 0xbe, 0x8b, 0xc3, 0x24, 0x7b, 0x4c, 0x1d, 0x7e,
0x4d, 0xd1, 0xf5, 0x57, 0x0a, 0xb4, 0x73, 0x86, 0xa2, 0x0d, 0x58, 0x4d, 0xf1, 0x88, 0x04, 0xa5,
0x49, 0xe8, 0xdb, 0xb0, 0xcc, 0x62, 0x87, 0xb9, 0x49, 0xad, 0x9e, 0xb6, 0x55, 0xbc, 0xdc, 0xb7,
0xb2, 0x52, 0xf5, 0xe8, 0x03, 0xb4, 0x0d, 0x57, 0x25, 0xc8, 0x2a, 0xcc, 0x47, 0x45, 0x60, 0xd5,
0xfe, 0xa8, 0x40, 0x57, 0x16, 0xcc, 0x8b, 0x24, 0xfc, 0x31, 0xac, 0x27, 0xde, 0x18, 0x36, 0xa6,
0x56, 0xe0, 0x4c, 0xf8, 0x31, 0xe3, 0x97, 0xc1, 0x6a, 0xef, 0xd6, 0xd9, 0xfe, 0x50, 0x7d, 0x2d,
0x11, 0xd1, 0x4f, 0x49, 0xd0, 0x1c, 0x58, 0xdb, 0xc5, 0xe1, 0x01, 0x1e, 0x79, 0xd8, 0x0f, 0x07,
0xfe, 0x11, 0x39, 0x7f, 0xde, 0xdf, 0x02, 0xa0, 0x42, 0x4e, 0x72, 0x4f, 0xa5, 0x28, 0xda, 0x5f,
0x4b, 0xb0, 0x9a, 0x52, 0x84, 0x6e, 0x40, 0x3d, 0xd9, 0x15, 0x59, 0x9b, 0x11, 0x0a, 0x15, 0x53,
0x92, 0x54, 0x4c, 0x2e, 0xf3, 0xe5, 0x62, 0xe6, 0xe7, 0x80, 0x33, 0xba, 0x0e, 0x35, 0x0f, 0x7b,
0x06, 0x75, 0x5e, 0x60, 0x01, 0x06, 0x2b, 0x1e, 0xf6, 0x0e, 0x9c, 0x17, 0x98, 0x6d, 0xf9, 0x53,
0xcf, 0x08, 0xc8, 0x31, 0xed, 0x54, 0xa3, 0x2d, 0x7f, 0xea, 0xe9, 0xe4, 0x98, 0xa2, 0x9b, 0x00,
0x8e, 0x6f, 0xe3, 0xe7, 0x86, 0x6f, 0x7a, 0xb8, 0xb3, 0xc2, 0x0f, 0x53, 0x9d, 0x53, 0xf6, 0x4c,
0x0f, 0x33, 0x18, 0xe0, 0x8b, 0x41, 0xbf, 0x53, 0x8b, 0x3e, 0x14, 0x4b, 0xe6, 0xaa, 0x38, 0x82,
0x83, 0x7e, 0xa7, 0x1e, 0x7d, 0x97, 0x10, 0xd0, 0xa7, 0xd0, 0x14, 0x7e, 0x1b, 0x51, 0x99, 0x02,
0x2f, 0xd3, 0x0d, 0x59, 0x5a, 0x45, 0x00, 0xa3, 0x22, 0x6d, 0xd0, 0xd4, 0x8a, 0xb7, 0x94, 0xf9,
0x5c, 0x5e, 0xa4, 0xec, 0xbe, 0x05, 0xcb, 0x8e, 0x7f, 0x44, 0xe2, 0x2a, 0x7b, 0xfb, 0x14, 0x73,
0xb8, 0xb2, 0x88, 0x5b, 0xfb, 0x9b, 0x02, 0xeb, 0x9f, 0xd8, 0xb6, 0x0c, 0x4b, 0x5f, 0xbe, 0xa6,
0x66, 0xf9, 0x2b, 0x65, 0xf2, 0xb7, 0x08, 0x9e, 0xbc, 0x0f, 0x57, 0x72, 0x38, 0x29, 0xca, 0xa0,
0xae, 0xab, 0x59, 0xa4, 0x1c, 0xf4, 0xd1, 0x7b, 0xa0, 0x66, 0xb1, 0x52, 0xdc, 0x12, 0x75, 0xbd,
0x9d, 0x41, 0xcb, 0x41, 0x5f, 0xfb, 0xbb, 0x02, 0xd7, 0x75, 0xec, 0x91, 0x67, 0xf8, 0xcd, 0xf5,
0xf1, 0x1f, 0x25, 0x58, 0xff, 0x91, 0x19, 0x5a, 0xe3, 0xbe, 0x27, 0x88, 0xf4, 0xd5, 0x38, 0x98,
0x3b, 0xe2, 0x95, 0xe2, 0x11, 0x4f, 0xca, 0x74, 0x59, 0x56, 0xa6, 0xec, 0xe1, 0xb5, 0xf5, 0x45,
0xec, 0xef, 0xac, 0x4c, 0x53, 0x6d, 0x4f, 0xf5, 0x1c, 0x6d, 0x0f, 0xda, 0x81, 0x26, 0x7e, 0x6e,
0xb9, 0x53, 0x1b, 0x1b, 0x91, 0xf6, 0x15, 0xae, 0xfd, 0x2d, 0x89, 0xf6, 0xf4, 0x19, 0x69, 0x88,
0x8f, 0x06, 0xfc, 0xa8, 0xfc, 0x4b, 0x81, 0xb6, 0xd8, 0x65, 0x9d, 0xe2, 0x02, 0xa8, 0x98, 0x0b,
0x47, 0xa9, 0x18, 0x8e, 0x45, 0x82, 0x1a, 0xdf, 0xd0, 0x95, 0xd4, 0x0d, 0x7d, 0x13, 0xe0, 0xc8,
0x9d, 0xd2, 0xb1, 0x11, 0x3a, 0x5e, 0x8c, 0x89, 0x75, 0x4e, 0x39, 0x74, 0x3c, 0x8c, 0x3e, 0x81,
0xc6, 0xd0, 0xf1, 0x5d, 0x32, 0x32, 0x26, 0x66, 0x38, 0x66, 0xc8, 0x38, 0xcf, 0xdd, 0x87, 0x0e,
0x76, 0xed, 0x07, 0x9c, 0x57, 0x5f, 0x8d, 0xbe, 0xd9, 0x67, 0x9f, 0x68, 0xbf, 0x2b, 0xc1, 0x55,
0xe6, 0xa6, 0xf0, 0xf8, 0x12, 0x0a, 0xea, 0x7e, 0x5c, 0x0a, 0xe5, 0xf9, 0xf7, 0x62, 0x2e, 0xde,
0xc5, 0x72, 0x38, 0xcf, 0x5b, 0x04, 0x7d, 0x1f, 0x5a, 0x2e, 0x31, 0x6d, 0xc3, 0x22, 0xbe, 0xcd,
0x33, 0xc1, 0x23, 0xd8, 0xea, 0xbd, 0x23, 0x33, 0xe1, 0x30, 0x70, 0x46, 0x23, 0x1c, 0xec, 0xc4,
0xbc, 0x7a, 0xd3, 0xe5, 0x2f, 0x31, 0xb1, 0xe4, 0x08, 0x2a, 0x5a, 0xea, 0xcb, 0x8b, 0x55, 0x5c,
0x03, 0xe5, 0x53, 0xba, 0xb4, 0xca, 0x02, 0x5d, 0xda, 0xb2, 0xa4, 0xd1, 0xce, 0x76, 0x02, 0xd5,
0x42, 0x27, 0x70, 0x08, 0xcd, 0x04, 0x57, 0x78, 0xd1, 0xdf, 0x82, 0x66, 0x64, 0x96, 0xc1, 0x22,
0x81, 0xed, 0xb8, 0xcb, 0x8e, 0x88, 0x9f, 0x71, 0x1a, 0x93, 0x9a, 0xe0, 0x56, 0x74, 0x29, 0xd5,
0xf5, 0x14, 0x45, 0xfb, 0xb9, 0x02, 0x6a, 0x1a, 0x91, 0xb9, 0xe4, 0x45, 0xda, 0xf7, 0x3b, 0xd0,
0x16, 0x03, 0xa0, 0x04, 0x16, 0x45, 0x43, 0xfd, 0x34, 0x2d, 0xae, 0x8f, 0x3e, 0x86, 0xf5, 0x88,
0xb1, 0x00, 0xa3, 0x51, 0x63, 0x7d, 0x8d, 0xef, 0xea, 0x39, 0x2c, 0xfd, 0x4b, 0x19, 0x5a, 0xb3,
0xc2, 0x59, 0xd8, 0xaa, 0x45, 0x1e, 0xfe, 0x7b, 0xa0, 0xce, 0x3a, 0x43, 0xde, 0x3b, 0x9c, 0x5a,
0xfb, 0xf9, 0x9e, 0xb0, 0x3d, 0xc9, 0xb5, 0xd2, 0x0f, 0xa1, 0x29, 0x7c, 0x12, 0xa8, 0x56, 0xe1,
0xc2, 0xbe, 0x21, 0x13, 0x96, 0xc9, 0xa0, 0xde, 0x48, 0x41, 0x2c, 0x45, 0xf7, 0xa1, 0xce, 0x8f,
0x43, 0x78, 0x32, 0xc1, 0xe2, 0x24, 0xdc, 0x90, 0xc9, 0x60, 0x99, 0x3d, 0x3c, 0x99, 0x60, 0xbd,
0xe6, 0x8a, 0x5f, 0x17, 0xc5, 0xe5, 0x7b, 0xb0, 0x16, 0x44, 0x47, 0xc7, 0x36, 0x32, 0xe1, 0x5b,
0xe1, 0xe1, 0xbb, 0x16, 0x6f, 0xee, 0xa7, 0xc3, 0x38, 0xa7, 0xcb, 0xaf, 0xcd, 0xed, 0xf2, 0x7f,
0x0a, 0xed, 0xef, 0x9a, 0xbe, 0x4d, 0x8e, 0x8e, 0xe2, 0x03, 0x7a, 0x8e, 0x93, 0x79, 0x3f, 0xdb,
0x5f, 0xbd, 0x04, 0x5a, 0x69, 0xbf, 0x28, 0xc1, 0x3a, 0xa3, 0x3d, 0x30, 0x5d, 0xd3, 0xb7, 0xf0,
0xe2, 0x5d, 0xf5, 0x7f, 0xe7, 0xfe, 0xb8, 0x05, 0x4d, 0x4a, 0xa6, 0x81, 0x85, 0x8d, 0x4c, 0x73,
0xdd, 0x88, 0x88, 0x7b, 0x11, 0xc0, 0xdc, 0x04, 0xb0, 0x69, 0x68, 0x64, 0x5e, 0xdc, 0x75, 0x9b,
0x86, 0x62, 0xfb, 0x6d, 0x58, 0x15, 0x32, 0x6c, 0xe2, 0x63, 0x9e, 0xec, 0x9a, 0x0e, 0x11, 0xa9,
0x4f, 0x7c, 0xde, 0x87, 0xb3, 0xef, 0xf9, 0xee, 0x0a, 0xdf, 0x5d, 0xb1, 0x69, 0xc8, 0xb7, 0x6e,
0x02, 0x3c, 0x33, 0x5d, 0xc7, 0xe6, 0x45, 0xca, 0xd3, 0x54, 0xd3, 0xeb, 0x9c, 0xc2, 0x42, 0xa0,
0xfd, 0x49, 0x01, 0x94, 0x8a, 0xce, 0xf9, 0xb1, 0xf3, 0x36, 0xb4, 0x32, 0x7e, 0x26, 0xd3, 0xcc,
0xb4, 0xa3, 0x94, 0x81, 0xff, 0x30, 0x52, 0x65, 0x04, 0xd8, 0xa4, 0xc4, 0xe7, 0x41, 0x5b, 0x18,
0xfc, 0x87, 0xb1, 0x99, 0xec, 0xd3, 0xcd, 0x17, 0xd0, 0xca, 0x1e, 0x53, 0xd4, 0x80, 0xda, 0x1e,
0x09, 0x3f, 0x7d, 0xee, 0xd0, 0x50, 0x5d, 0x42, 0x2d, 0x80, 0x3d, 0x12, 0xee, 0x07, 0x98, 0x62,
0x3f, 0x54, 0x15, 0x04, 0x50, 0xfd, 0xdc, 0xef, 0x3b, 0xf4, 0x4b, 0xb5, 0x84, 0xae, 0x8a, 0xc7,
0xb1, 0xe9, 0x0e, 0x44, 0xcd, 0xaa, 0x65, 0xf6, 0x79, 0xb2, 0xaa, 0x20, 0x15, 0x1a, 0x09, 0xcb,
0xee, 0xfe, 0x0f, 0xd5, 0x65, 0x54, 0x87, 0xe5, 0xe8, 0x67, 0x75, 0xf3, 0x73, 0x50, 0xf3, 0xe6,
0xa1, 0x55, 0x58, 0x19, 0x47, 0xa5, 0xae, 0x2e, 0xa1, 0x36, 0xac, 0xba, 0xb3, 0xc0, 0xaa, 0x0a,
0x23, 0x8c, 0x82, 0x89, 0x25, 0x42, 0xac, 0x96, 0x98, 0x36, 0x16, 0xab, 0x3e, 0x39, 0xf6, 0xd5,
0xf2, 0xe6, 0xf7, 0xa0, 0x91, 0x7e, 0xb0, 0xa0, 0x1a, 0x54, 0xf6, 0x88, 0x8f, 0xd5, 0x25, 0x26,
0x76, 0x37, 0x20, 0xc7, 0x8e, 0x3f, 0x8a, 0x7c, 0x78, 0x18, 0x90, 0x17, 0xd8, 0x57, 0x4b, 0x6c,
0x83, 0x62, 0xd3, 0x65, 0x1b, 0x65, 0xb6, 0xc1, 0x16, 0xd8, 0x56, 0x2b, 0x9b, 0x1f, 0x41, 0x2d,
0x86, 0x0b, 0x74, 0x05, 0x9a, 0x99, 0xd1, 0x9a, 0xba, 0x84, 0x50, 0x74, 0x03, 0xcf, 0x80, 0x41,
0x55, 0x7a, 0xff, 0x06, 0x80, 0xe8, 0x46, 0x20, 0x24, 0xb0, 0xd1, 0x04, 0xd0, 0x2e, 0x0e, 0x77,
0x88, 0x37, 0x21, 0x7e, 0x6c, 0x12, 0x45, 0x1f, 0x66, 0xb3, 0x94, 0xcc, 0xf1, 0x8b, 0xac, 0xc2,
0xcb, 0xee, 0xbb, 0x73, 0xbe, 0xc8, 0xb1, 0x6b, 0x4b, 0xc8, 0xe3, 0x1a, 0x59, 0x03, 0x75, 0xe8,
0x58, 0x5f, 0xc6, 0x73, 0x99, 0x53, 0x34, 0xe6, 0x58, 0x63, 0x8d, 0x39, 0x6c, 0x10, 0x8b, 0x83,
0x30, 0x70, 0xfc, 0x51, 0xfc, 0xc8, 0xd3, 0x96, 0xd0, 0x53, 0xb8, 0xc6, 0x1e, 0x80, 0xa1, 0x19,
0x3a, 0x34, 0x74, 0x2c, 0x1a, 0x2b, 0xec, 0xcd, 0x57, 0x58, 0x60, 0x7e, 0x49, 0x95, 0x2e, 0xb4,
0x73, 0xff, 0x1f, 0xa0, 0x4d, 0x29, 0x90, 0x49, 0xff, 0xeb, 0xe8, 0xbe, 0xbf, 0x10, 0x6f, 0xa2,
0xcd, 0x81, 0x56, 0x76, 0xb6, 0x8e, 0xde, 0x9b, 0x27, 0xa0, 0x30, 0x8c, 0xec, 0x6e, 0x2e, 0xc2,
0x9a, 0xa8, 0x7a, 0x0c, 0xad, 0xec, 0xf4, 0x56, 0xae, 0x4a, 0x3a, 0xe1, 0xed, 0x9e, 0xf6, 0xbe,
0xd6, 0x96, 0xd0, 0x4f, 0xe0, 0x4a, 0x61, 0x64, 0x8a, 0xbe, 0x29, 0x13, 0x3f, 0x6f, 0xb2, 0x7a,
0x96, 0x06, 0x61, 0xfd, 0x2c, 0x8a, 0xf3, 0xad, 0x2f, 0xcc, 0xce, 0x17, 0xb7, 0x3e, 0x25, 0xfe,
0x34, 0xeb, 0x5f, 0x5a, 0xc3, 0x14, 0x50, 0x71, 0x68, 0x8a, 0x3e, 0x90, 0xa9, 0x98, 0x3b, 0xb8,
0xed, 0x6e, 0x2d, 0xca, 0x9e, 0xa4, 0x7c, 0xca, 0x4f, 0x6b, 0x7e, 0xbc, 0x28, 0x55, 0x3b, 0x77,
0x5e, 0x2a, 0x57, 0x3b, 0x7f, 0x22, 0x18, 0x15, 0x75, 0x76, 0x6c, 0x23, 0xcf, 0x95, 0x74, 0x4c,
0x27, 0x2f, 0x6a, 0xf9, 0x14, 0x48, 0x5b, 0x42, 0x06, 0xc0, 0x2e, 0x0e, 0x1f, 0xe1, 0x30, 0x70,
0x2c, 0x8a, 0xde, 0x95, 0x1e, 0xf1, 0x19, 0x43, 0xac, 0xe3, 0xce, 0x99, 0x7c, 0xb1, 0x82, 0xde,
0x9f, 0xeb, 0x50, 0xe7, 0xd1, 0x65, 0x77, 0xe3, 0xff, 0x01, 0xf7, 0x12, 0x00, 0xf7, 0x09, 0xb4,
0x73, 0xd3, 0x35, 0x39, 0xe0, 0xca, 0x47, 0x70, 0x67, 0x9d, 0xbc, 0x21, 0xa0, 0xe2, 0x68, 0x4b,
0x7e, 0x04, 0xe6, 0x8e, 0xc0, 0xce, 0xd2, 0xf1, 0x04, 0xda, 0xb9, 0xd1, 0x92, 0xdc, 0x03, 0xf9,
0xfc, 0xe9, 0x2c, 0xe9, 0x5f, 0x40, 0x23, 0x3d, 0x64, 0x40, 0x77, 0xe6, 0xe1, 0x5e, 0xee, 0x69,
0xfd, 0xea, 0x51, 0xef, 0xf2, 0x6f, 0x85, 0x27, 0xd0, 0xce, 0xcd, 0x15, 0xe4, 0x91, 0x97, 0x0f,
0x1f, 0xce, 0x92, 0xfe, 0x06, 0xe1, 0xd8, 0x83, 0x8f, 0x1f, 0xf7, 0x46, 0x4e, 0x38, 0x9e, 0x0e,
0x99, 0x97, 0xdb, 0x11, 0xe7, 0x07, 0x0e, 0x11, 0xbf, 0xb6, 0xe3, 0x03, 0xbd, 0xcd, 0x25, 0x6d,
0x73, 0x6b, 0x27, 0xc3, 0x61, 0x95, 0x2f, 0xef, 0xfd, 0x27, 0x00, 0x00, 0xff, 0xff, 0x92, 0x29,
0x0a, 0x06, 0x50, 0x22, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -2169,6 +2171,8 @@ type QueryCoordClient interface {
CreateQueryChannel(ctx context.Context, in *CreateQueryChannelRequest, opts ...grpc.CallOption) (*CreateQueryChannelResponse, error)
GetPartitionStates(ctx context.Context, in *GetPartitionStatesRequest, opts ...grpc.CallOption) (*GetPartitionStatesResponse, error)
GetSegmentInfo(ctx context.Context, in *GetSegmentInfoRequest, opts ...grpc.CallOption) (*GetSegmentInfoResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
GetMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest, opts ...grpc.CallOption) (*milvuspb.GetMetricsResponse, error)
}
type queryCoordClient struct {
@ -2287,6 +2291,15 @@ func (c *queryCoordClient) GetSegmentInfo(ctx context.Context, in *GetSegmentInf
return out, nil
}
func (c *queryCoordClient) GetMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest, opts ...grpc.CallOption) (*milvuspb.GetMetricsResponse, error) {
out := new(milvuspb.GetMetricsResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.query.QueryCoord/GetMetrics", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// QueryCoordServer is the server API for QueryCoord service.
type QueryCoordServer interface {
GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error)
@ -2301,6 +2314,8 @@ type QueryCoordServer interface {
CreateQueryChannel(context.Context, *CreateQueryChannelRequest) (*CreateQueryChannelResponse, error)
GetPartitionStates(context.Context, *GetPartitionStatesRequest) (*GetPartitionStatesResponse, error)
GetSegmentInfo(context.Context, *GetSegmentInfoRequest) (*GetSegmentInfoResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
GetMetrics(context.Context, *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error)
}
// UnimplementedQueryCoordServer can be embedded to have forward compatible implementations.
@ -2343,6 +2358,9 @@ func (*UnimplementedQueryCoordServer) GetPartitionStates(ctx context.Context, re
func (*UnimplementedQueryCoordServer) GetSegmentInfo(ctx context.Context, req *GetSegmentInfoRequest) (*GetSegmentInfoResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetSegmentInfo not implemented")
}
func (*UnimplementedQueryCoordServer) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetMetrics not implemented")
}
func RegisterQueryCoordServer(s *grpc.Server, srv QueryCoordServer) {
s.RegisterService(&_QueryCoord_serviceDesc, srv)
@ -2564,6 +2582,24 @@ func _QueryCoord_GetSegmentInfo_Handler(srv interface{}, ctx context.Context, de
return interceptor(ctx, in, info, handler)
}
func _QueryCoord_GetMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(milvuspb.GetMetricsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(QueryCoordServer).GetMetrics(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.query.QueryCoord/GetMetrics",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(QueryCoordServer).GetMetrics(ctx, req.(*milvuspb.GetMetricsRequest))
}
return interceptor(ctx, in, info, handler)
}
var _QueryCoord_serviceDesc = grpc.ServiceDesc{
ServiceName: "milvus.proto.query.QueryCoord",
HandlerType: (*QueryCoordServer)(nil),
@ -2616,6 +2652,10 @@ var _QueryCoord_serviceDesc = grpc.ServiceDesc{
MethodName: "GetSegmentInfo",
Handler: _QueryCoord_GetSegmentInfo_Handler,
},
{
MethodName: "GetMetrics",
Handler: _QueryCoord_GetMetrics_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "query_coord.proto",
@ -2636,6 +2676,8 @@ type QueryNodeClient interface {
ReleasePartitions(ctx context.Context, in *ReleasePartitionsRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
ReleaseSegments(ctx context.Context, in *ReleaseSegmentsRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
GetSegmentInfo(ctx context.Context, in *GetSegmentInfoRequest, opts ...grpc.CallOption) (*GetSegmentInfoResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
GetMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest, opts ...grpc.CallOption) (*milvuspb.GetMetricsResponse, error)
}
type queryNodeClient struct {
@ -2745,6 +2787,15 @@ func (c *queryNodeClient) GetSegmentInfo(ctx context.Context, in *GetSegmentInfo
return out, nil
}
func (c *queryNodeClient) GetMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest, opts ...grpc.CallOption) (*milvuspb.GetMetricsResponse, error) {
out := new(milvuspb.GetMetricsResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.query.QueryNode/GetMetrics", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// QueryNodeServer is the server API for QueryNode service.
type QueryNodeServer interface {
GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error)
@ -2758,6 +2809,8 @@ type QueryNodeServer interface {
ReleasePartitions(context.Context, *ReleasePartitionsRequest) (*commonpb.Status, error)
ReleaseSegments(context.Context, *ReleaseSegmentsRequest) (*commonpb.Status, error)
GetSegmentInfo(context.Context, *GetSegmentInfoRequest) (*GetSegmentInfoResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
GetMetrics(context.Context, *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error)
}
// UnimplementedQueryNodeServer can be embedded to have forward compatible implementations.
@ -2797,6 +2850,9 @@ func (*UnimplementedQueryNodeServer) ReleaseSegments(ctx context.Context, req *R
func (*UnimplementedQueryNodeServer) GetSegmentInfo(ctx context.Context, req *GetSegmentInfoRequest) (*GetSegmentInfoResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetSegmentInfo not implemented")
}
func (*UnimplementedQueryNodeServer) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetMetrics not implemented")
}
func RegisterQueryNodeServer(s *grpc.Server, srv QueryNodeServer) {
s.RegisterService(&_QueryNode_serviceDesc, srv)
@ -3000,6 +3056,24 @@ func _QueryNode_GetSegmentInfo_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler)
}
func _QueryNode_GetMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(milvuspb.GetMetricsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(QueryNodeServer).GetMetrics(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.query.QueryNode/GetMetrics",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(QueryNodeServer).GetMetrics(ctx, req.(*milvuspb.GetMetricsRequest))
}
return interceptor(ctx, in, info, handler)
}
var _QueryNode_serviceDesc = grpc.ServiceDesc{
ServiceName: "milvus.proto.query.QueryNode",
HandlerType: (*QueryNodeServer)(nil),
@ -3048,6 +3122,10 @@ var _QueryNode_serviceDesc = grpc.ServiceDesc{
MethodName: "GetSegmentInfo",
Handler: _QueryNode_GetSegmentInfo_Handler,
},
{
MethodName: "GetMetrics",
Handler: _QueryNode_GetMetrics_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "query_coord.proto",

View File

@ -20,6 +20,8 @@ import (
"strconv"
"sync"
"github.com/milvus-io/milvus/internal/proto/milvuspb"
"github.com/golang/protobuf/proto"
"go.uber.org/zap"
@ -347,6 +349,27 @@ func (c *queryNodeCluster) getSegmentInfo(ctx context.Context, in *querypb.GetSe
return segmentInfos, nil
}
type queryNodeGetMetricsResponse struct {
resp *milvuspb.GetMetricsResponse
err error
}
func (c *queryNodeCluster) getMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest) []queryNodeGetMetricsResponse {
c.RLock()
defer c.RUnlock()
ret := make([]queryNodeGetMetricsResponse, 0, len(c.nodes))
for _, node := range c.nodes {
resp, err := node.getMetrics(ctx, in)
ret = append(ret, queryNodeGetMetricsResponse{
resp: resp,
err: err,
})
}
return ret
}
func (c *queryNodeCluster) getNumDmChannels(nodeID int64) (int, error) {
c.RLock()
defer c.RUnlock()

View File

@ -0,0 +1,22 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querycoord
import (
"testing"
"github.com/milvus-io/milvus/internal/log"
)
func TestQueryNodeCluster_getMetrics(t *testing.T) {
log.Info("TestQueryNodeCluster_getMetrics, todo")
}

View File

@ -0,0 +1,29 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querycoord
import (
"errors"
"fmt"
)
func errQueryNodeIsNotOnService(id UniqueID) error {
return fmt.Errorf("query node %d is not on service", id)
}
func msgQueryCoordIsUnhealthy(coordID UniqueID) string {
return fmt.Sprintf("QueryCoord %d is not ready", coordID)
}
func errQueryCoordIsUnhealthy(coordID UniqueID) error {
return errors.New(msgQueryCoordIsUnhealthy(coordID))
}

View File

@ -0,0 +1,44 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querycoord
import (
"testing"
"github.com/milvus-io/milvus/internal/log"
"go.uber.org/zap"
)
func TestErrQueryNodeIsNotOnService(t *testing.T) {
queryNodeIDList := []UniqueID{
1,
}
for _, id := range queryNodeIDList {
log.Info("TestErrQueryNodeIsNotOnService",
zap.Error(errQueryNodeIsNotOnService(id)))
}
}
func TestMsgQueryCoordIsUnhealthy(t *testing.T) {
nodeIDList := []UniqueID{1, 2, 3}
for _, nodeID := range nodeIDList {
log.Info("TestMsgQueryCoordIsUnhealthy", zap.String("msg", msgQueryCoordIsUnhealthy(nodeID)))
}
}
func TestErrQueryCoordIsUnhealthy(t *testing.T) {
nodeIDList := []UniqueID{1, 2, 3}
for _, nodeID := range nodeIDList {
log.Info("TestErrQueryCoordIsUnhealthy", zap.Error(errQueryCoordIsUnhealthy(nodeID)))
}
}

View File

@ -16,6 +16,8 @@ import (
"errors"
"fmt"
"github.com/milvus-io/milvus/internal/util/metricsinfo"
"go.uber.org/zap"
"github.com/milvus-io/milvus/internal/log"
@ -500,3 +502,74 @@ func (qc *QueryCoord) GetSegmentInfo(ctx context.Context, req *querypb.GetSegmen
Infos: segmentInfos,
}, nil
}
func (qc *QueryCoord) isHealthy() bool {
code := qc.stateCode.Load().(internalpb.StateCode)
return code == internalpb.StateCode_Healthy
}
func (qc *QueryCoord) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
log.Debug("QueryCoord.GetMetrics",
zap.Int64("node_id", Params.QueryCoordID),
zap.String("req", req.Request))
if !qc.isHealthy() {
log.Warn("QueryCoord.GetMetrics failed",
zap.Int64("node_id", Params.QueryCoordID),
zap.String("req", req.Request),
zap.Error(errQueryCoordIsUnhealthy(Params.QueryCoordID)))
return &milvuspb.GetMetricsResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: msgQueryCoordIsUnhealthy(Params.QueryCoordID),
},
Response: "",
}, nil
}
metricType, err := metricsinfo.ParseMetricType(req.Request)
if err != nil {
log.Warn("QueryCoord.GetMetrics failed to parse metric type",
zap.Int64("node_id", Params.QueryCoordID),
zap.String("req", req.Request),
zap.Error(err))
return &milvuspb.GetMetricsResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
},
Response: "",
}, nil
}
log.Debug("QueryCoord.GetMetrics",
zap.String("metric_type", metricType))
if metricType == metricsinfo.SystemInfoMetrics {
metrics, err := getSystemInfoMetrics(ctx, req, qc)
log.Debug("QueryCoord.GetMetrics",
zap.Int64("node_id", Params.QueryCoordID),
zap.String("req", req.Request),
zap.String("metric_type", metricType),
zap.Any("metrics", metrics), // TODO(dragondriver): necessary? may be very large
zap.Error(err))
return metrics, err
}
log.Debug("QueryCoord.GetMetrics failed, request metric type is not implemented yet",
zap.Int64("node_id", Params.QueryCoordID),
zap.String("req", req.Request),
zap.String("metric_type", metricType))
return &milvuspb.GetMetricsResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: metricsinfo.MsgUnimplementedMetric,
},
Response: "",
}, nil
}

View File

@ -0,0 +1,100 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querycoord
import (
"context"
"go.uber.org/zap"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/proto/commonpb"
"github.com/milvus-io/milvus/internal/proto/milvuspb"
"github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/typeutil"
)
// TODO(dragondriver): add more detail metrics
func getSystemInfoMetrics(
ctx context.Context,
req *milvuspb.GetMetricsRequest,
qc *QueryCoord,
) (*milvuspb.GetMetricsResponse, error) {
coordTopology := metricsinfo.CoordTopology{
Self: metricsinfo.ComponentInfos{
Name: metricsinfo.ConstructComponentName(typeutil.QueryCoordRole, Params.QueryCoordID),
},
ConnectedNodes: make([]metricsinfo.ComponentInfos, 0),
}
nodesMetrics := qc.cluster.getMetrics(ctx, req)
for _, nodeMetrics := range nodesMetrics {
if nodeMetrics.err != nil {
log.Warn("invalid metrics of query node was found",
zap.Error(nodeMetrics.err))
coordTopology.ConnectedNodes = append(coordTopology.ConnectedNodes, metricsinfo.ComponentInfos{
HasError: true,
ErrorReason: nodeMetrics.err.Error(),
// Name doesn't matter here cause we can't get it when error occurs, using address as the Name?
Name: "",
})
continue
}
if nodeMetrics.resp.Status.ErrorCode != commonpb.ErrorCode_Success {
log.Warn("invalid metrics of query node was found",
zap.Any("error_code", nodeMetrics.resp.Status.ErrorCode),
zap.Any("error_reason", nodeMetrics.resp.Status.Reason))
coordTopology.ConnectedNodes = append(coordTopology.ConnectedNodes, metricsinfo.ComponentInfos{
HasError: true,
ErrorReason: nodeMetrics.resp.Status.Reason,
Name: nodeMetrics.resp.ComponentName,
})
continue
}
infos := metricsinfo.ComponentInfos{}
err := infos.Unmarshal(nodeMetrics.resp.Response)
if err != nil {
log.Warn("invalid metrics of query node was found",
zap.Error(err))
coordTopology.ConnectedNodes = append(coordTopology.ConnectedNodes, metricsinfo.ComponentInfos{
HasError: true,
ErrorReason: err.Error(),
Name: nodeMetrics.resp.ComponentName,
})
continue
}
coordTopology.ConnectedNodes = append(coordTopology.ConnectedNodes, infos)
}
resp, err := coordTopology.Marshal()
if err != nil {
return &milvuspb.GetMetricsResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
},
Response: "",
}, nil
}
return &milvuspb.GetMetricsResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_Success,
Reason: "",
},
Response: resp,
}, nil
}

View File

@ -0,0 +1,22 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querycoord
import (
"testing"
"github.com/milvus-io/milvus/internal/log"
)
func TestGetSystemInfoMetrics(t *testing.T) {
log.Info("TestGetSystemInfoMetrics, todo")
}

View File

@ -17,6 +17,8 @@ import (
"fmt"
"sync"
"github.com/milvus-io/milvus/internal/proto/milvuspb"
"github.com/golang/protobuf/proto"
"go.uber.org/zap"
@ -63,6 +65,8 @@ type Node interface {
loadSegments(ctx context.Context, in *querypb.LoadSegmentsRequest) error
releaseSegments(ctx context.Context, in *querypb.ReleaseSegmentsRequest) error
getComponentInfo(ctx context.Context) *internalpb.ComponentInfo
getMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error)
}
type queryNode struct {
@ -594,6 +598,16 @@ func (qn *queryNode) getComponentInfo(ctx context.Context) *internalpb.Component
return res.State
}
func (qn *queryNode) getMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
qn.serviceLock.RLock()
if !qn.onService {
return nil, errQueryNodeIsNotOnService(qn.id)
}
qn.serviceLock.RUnlock()
return qn.client.GetMetrics(ctx, in)
}
func (qn *queryNode) loadSegments(ctx context.Context, in *querypb.LoadSegmentsRequest) error {
qn.serviceLock.RLock()
onService := qn.onService

View File

@ -184,3 +184,7 @@ func TestQueryNode_MultiNode_reStart(t *testing.T) {
}
queryCoord.Stop()
}
func TestQueryNode_getMetrics(t *testing.T) {
log.Info("TestQueryNode_getMetrics, todo")
}

View File

@ -0,0 +1,25 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querynode
import (
"errors"
"fmt"
)
func msgQueryNodeIsUnhealthy(nodeID UniqueID) string {
return fmt.Sprintf("query node %d is not ready", nodeID)
}
func errQueryNodeIsUnhealthy(nodeID UniqueID) error {
return errors.New(msgQueryNodeIsUnhealthy(nodeID))
}

View File

@ -0,0 +1,33 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querynode
import (
"testing"
"github.com/milvus-io/milvus/internal/log"
"go.uber.org/zap"
)
func TestMsgQueryNodeIsUnhealthy(t *testing.T) {
nodeIDList := []UniqueID{1, 2, 3}
for _, nodeID := range nodeIDList {
log.Info("TestMsgQueryNodeIsUnhealthy", zap.String("msg", msgQueryNodeIsUnhealthy(nodeID)))
}
}
func TestErrQueryNodeIsUnhealthy(t *testing.T) {
nodeIDList := []UniqueID{1, 2, 3}
for _, nodeID := range nodeIDList {
log.Info("TestErrQueryNodeIsUnhealthy", zap.Error(errQueryNodeIsUnhealthy(nodeID)))
}
}

View File

@ -19,6 +19,8 @@ import (
"strconv"
"strings"
"github.com/milvus-io/milvus/internal/util/metricsinfo"
"go.uber.org/zap"
"github.com/milvus-io/milvus/internal/log"
@ -479,3 +481,75 @@ func (node *QueryNode) GetSegmentInfo(ctx context.Context, in *queryPb.GetSegmen
Infos: infos,
}, nil
}
func (node *QueryNode) isHealthy() bool {
code := node.stateCode.Load().(internalpb.StateCode)
return code == internalpb.StateCode_Healthy
}
// TODO(dragondriver): cache the Metrics and set a retention to the cache
func (node *QueryNode) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
log.Debug("QueryNode.GetMetrics",
zap.Int64("node_id", Params.QueryNodeID),
zap.String("req", req.Request))
if !node.isHealthy() {
log.Warn("QueryNode.GetMetrics failed",
zap.Int64("node_id", Params.QueryNodeID),
zap.String("req", req.Request),
zap.Error(errQueryNodeIsUnhealthy(Params.QueryNodeID)))
return &milvuspb.GetMetricsResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: msgQueryNodeIsUnhealthy(Params.QueryNodeID),
},
Response: "",
}, nil
}
metricType, err := metricsinfo.ParseMetricType(req.Request)
if err != nil {
log.Warn("QueryNode.GetMetrics failed to parse metric type",
zap.Int64("node_id", Params.QueryNodeID),
zap.String("req", req.Request),
zap.Error(err))
return &milvuspb.GetMetricsResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
},
Response: "",
}, nil
}
log.Debug("QueryNode.GetMetrics",
zap.String("metric_type", metricType))
if metricType == metricsinfo.SystemInfoMetrics {
metrics, err := getSystemInfoMetrics(ctx, req, node)
log.Debug("QueryNode.GetMetrics",
zap.Int64("node_id", Params.QueryNodeID),
zap.String("req", req.Request),
zap.String("metric_type", metricType),
zap.Any("metrics", metrics), // TODO(dragondriver): necessary? may be very large
zap.Error(err))
return metrics, err
}
log.Debug("QueryNode.GetMetrics failed, request metric type is not implemented yet",
zap.Int64("node_id", Params.QueryNodeID),
zap.String("req", req.Request),
zap.String("metric_type", metricType))
return &milvuspb.GetMetricsResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: metricsinfo.MsgUnimplementedMetric,
},
Response: "",
}, nil
}

View File

@ -0,0 +1,48 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querynode
import (
"context"
"github.com/milvus-io/milvus/internal/proto/commonpb"
"github.com/milvus-io/milvus/internal/proto/milvuspb"
"github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/typeutil"
)
func getSystemInfoMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest, node *QueryNode) (*milvuspb.GetMetricsResponse, error) {
// TODO(dragondriver): add more metrics
nodeInfos := metricsinfo.ComponentInfos{
Name: metricsinfo.ConstructComponentName(typeutil.QueryNodeRole, Params.QueryNodeID),
}
resp, err := nodeInfos.Marshal()
if err != nil {
return &milvuspb.GetMetricsResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
},
Response: "",
ComponentName: metricsinfo.ConstructComponentName(typeutil.QueryNodeRole, Params.QueryNodeID),
}, nil
}
return &milvuspb.GetMetricsResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_Success,
Reason: "",
},
Response: resp,
ComponentName: metricsinfo.ConstructComponentName(typeutil.QueryNodeRole, Params.QueryNodeID),
}, nil
}

View File

@ -0,0 +1,22 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querynode
import (
"testing"
"github.com/milvus-io/milvus/internal/log"
)
func TestGetSystemInfoMetrics(t *testing.T) {
log.Info("TestGetSystemInfoMetrics, todo")
}

View File

@ -176,6 +176,8 @@ type QueryNode interface {
ReleasePartitions(ctx context.Context, req *querypb.ReleasePartitionsRequest) (*commonpb.Status, error)
ReleaseSegments(ctx context.Context, req *querypb.ReleaseSegmentsRequest) (*commonpb.Status, error)
GetSegmentInfo(ctx context.Context, req *querypb.GetSegmentInfoRequest) (*querypb.GetSegmentInfoResponse, error)
GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error)
}
type QueryCoord interface {
@ -191,4 +193,6 @@ type QueryCoord interface {
CreateQueryChannel(ctx context.Context, req *querypb.CreateQueryChannelRequest) (*querypb.CreateQueryChannelResponse, error)
GetPartitionStates(ctx context.Context, req *querypb.GetPartitionStatesRequest) (*querypb.GetPartitionStatesResponse, error)
GetSegmentInfo(ctx context.Context, req *querypb.GetSegmentInfoRequest) (*querypb.GetSegmentInfoResponse, error)
GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error)
}

View File

@ -0,0 +1,18 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package metricsinfo
import "errors"
const MsgUnimplementedMetric = "sorry, but this metric type is not implemented"
var ErrUnimplementedMetric = errors.New(MsgUnimplementedMetric)

View File

@ -0,0 +1,35 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package metricsinfo
import (
"encoding/json"
"fmt"
)
const (
MetricTypeKey = "metric_type"
SystemInfoMetrics = "system_info"
)
func ParseMetricType(req string) (string, error) {
m := make(map[string]interface{})
err := json.Unmarshal([]byte(req), &m)
if err != nil {
return "", fmt.Errorf("failed to decode the request: %s", err.Error())
}
metricType, exist := m[MetricTypeKey]
if !exist {
return "", fmt.Errorf("%s not found in request", MetricTypeKey)
}
return metricType.(string), nil
}

View File

@ -0,0 +1,59 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package metricsinfo
import (
"encoding/json"
"testing"
"github.com/stretchr/testify/assert"
)
func TestParseMetricType(t *testing.T) {
m1 := make(map[string]interface{})
b1, err := json.Marshal(m1)
assert.Equal(t, nil, err)
s1 := string(b1) // empty request
m2 := make(map[string]interface{})
m2[MetricTypeKey] = SystemInfoMetrics
b2, err := json.Marshal(m2)
assert.Equal(t, nil, err)
s2 := string(b2) // valid
m3 := make(map[string]interface{})
m3[MetricTypeKey] = SystemInfoMetrics
m3["NotImportant"] = SystemInfoMetrics
b3, err := json.Marshal(m3)
assert.Equal(t, nil, err)
s3 := string(b3) // valid
cases := []struct {
s string
want string
errIsNil bool
}{
{"not in json format", "", false},
{s1, "", false},
{s2, SystemInfoMetrics, true},
{s3, SystemInfoMetrics, true},
}
for _, test := range cases {
got, err := ParseMetricType(test.s)
assert.Equal(t, test.errIsNil, err == nil)
if test.errIsNil && test.want != got {
t.Errorf("ParseMetricType(%s) = %s", test.s, test.want)
}
}
}

View File

@ -0,0 +1,103 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package metricsinfo
import (
"encoding/json"
"strconv"
"github.com/milvus-io/milvus/internal/util/typeutil"
)
// in topology graph, the name of all nodes are consisted of role name and its' id
// for example, Proxy1, DataCoord3
// ConstructComponentName returns a name according to the role name and its' id
func ConstructComponentName(role string, id typeutil.UniqueID) string {
return role + strconv.Itoa(int(id))
}
// TODO(dragondriver): how different components extend their metrics information?
// so maybe providing a interface instead of a struct is better?
// then every components can implement it to extend metrics.
// ComponentInfos shows the all necessary metrics of node.
type ComponentInfos struct {
HasError bool `json:"has_error"`
ErrorReason string `json:"error_reason"`
Name string `json:"name"`
// TODO(dragondriver): more required information
}
// Marshal returns the json string of ComponentInfos
func (infos *ComponentInfos) Marshal() (string, error) {
binary, err := json.Marshal(infos)
return string(binary), err
}
// Unmarshal constructs a ComponentInfos object using a json string
func (infos *ComponentInfos) Unmarshal(s string) error {
return json.Unmarshal([]byte(s), infos)
}
// CoordTopology used for coordinator to show their managed nodes.
type CoordTopology struct {
Self ComponentInfos `json:"self"`
ConnectedNodes []ComponentInfos `json:"connected_nodes"`
}
// Marshal returns the json string of CoordTopology
func (topology *CoordTopology) Marshal() (string, error) {
binary, err := json.Marshal(topology)
return string(binary), err
}
// Unmarshal constructs a CoordTopology object using a json string
func (topology *CoordTopology) Unmarshal(s string) error {
return json.Unmarshal([]byte(s), topology)
}
// TODO(dragondriver)
// necessary to show all connection edge in topology graph?
// for example, in system, Proxy connects to RootCoord and RootCoord also connects to Proxy,
// if we do so, the connection relationship may be confusing.
// ConnTopology shows how different components connect to each other.
type ConnTopology struct {
Name string `json:"name"`
ConnectedComponents []string `json:"connected_components"`
}
// Marshal returns the json string of ConnTopology
func (topology *ConnTopology) Marshal() (string, error) {
binary, err := json.Marshal(topology)
return string(binary), err
}
// Unmarshal constructs a ConnTopology object using a json string
func (topology *ConnTopology) Unmarshal(s string) error {
return json.Unmarshal([]byte(s), topology)
}
// SystemTopology shows the system topology
type SystemTopology struct {
}
// Marshal returns the json string of SystemTopology
func (topology *SystemTopology) Marshal() (string, error) {
binary, err := json.Marshal(topology)
return string(binary), err
}
// Unmarshal constructs a SystemTopology object using a json string
func (topology *SystemTopology) Unmarshal(s string) error {
return json.Unmarshal([]byte(s), topology)
}

View File

@ -0,0 +1,108 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package metricsinfo
import (
"testing"
"github.com/milvus-io/milvus/internal/log"
"go.uber.org/zap"
"github.com/milvus-io/milvus/internal/util/typeutil"
"github.com/stretchr/testify/assert"
)
func TestConstructComponentName(t *testing.T) {
roleList := []string{
typeutil.QueryNodeRole,
}
idList := []typeutil.UniqueID{
1,
}
for _, role := range roleList {
for _, id := range idList {
log.Info("TestConstructComponentName",
zap.String("ComponentName", ConstructComponentName(role, id)))
}
}
}
func TestComponentInfos_Codec(t *testing.T) {
infos1 := ComponentInfos{
Name: ConstructComponentName(typeutil.ProxyRole, 1),
}
s, err := infos1.Marshal()
assert.Equal(t, nil, err)
var infos2 ComponentInfos
err = infos2.Unmarshal(s)
assert.Equal(t, nil, err)
assert.Equal(t, infos1.Name, infos2.Name)
}
func TestCoordTopology_Codec(t *testing.T) {
topology1 := CoordTopology{
Self: ComponentInfos{
Name: ConstructComponentName(typeutil.QueryCoordRole, 1),
},
ConnectedNodes: []ComponentInfos{
{
Name: ConstructComponentName(typeutil.QueryNodeRole, 1),
},
{
Name: ConstructComponentName(typeutil.QueryNodeRole, 2),
},
},
}
s, err := topology1.Marshal()
assert.Equal(t, nil, err)
var topology2 CoordTopology
err = topology2.Unmarshal(s)
assert.Equal(t, nil, err)
assert.Equal(t, topology1.Self.Name, topology2.Self.Name)
assert.Equal(t, len(topology1.ConnectedNodes), len(topology2.ConnectedNodes))
for i := range topology1.ConnectedNodes {
assert.Equal(t, topology1.ConnectedNodes[i], topology2.ConnectedNodes[i])
}
}
func TestConnTopology_Codec(t *testing.T) {
topology1 := ConnTopology{
Name: ConstructComponentName(typeutil.ProxyRole, 1),
ConnectedComponents: []string{
ConstructComponentName(typeutil.RootCoordRole, 1),
ConstructComponentName(typeutil.QueryCoordRole, 1),
ConstructComponentName(typeutil.DataCoordRole, 1),
ConstructComponentName(typeutil.IndexCoordRole, 1),
},
}
s, err := topology1.Marshal()
assert.Equal(t, nil, err)
var topology2 ConnTopology
err = topology2.Unmarshal(s)
assert.Equal(t, nil, err)
assert.Equal(t, topology1.Name, topology2.Name)
assert.Equal(t, len(topology1.ConnectedComponents), len(topology2.ConnectedComponents))
for i := range topology1.ConnectedComponents {
assert.Equal(t, topology1.ConnectedComponents[i], topology2.ConnectedComponents[i])
}
}
func TestSystemTopology_Codec(t *testing.T) {
topology1 := SystemTopology{}
s, err := topology1.Marshal()
assert.Equal(t, nil, err)
var topology2 SystemTopology
err = topology2.Unmarshal(s)
assert.Equal(t, nil, err)
}