From 9330ae1b3b9db8343a7f47ad549e6fe59136fd7b Mon Sep 17 00:00:00 2001 From: Gaius Date: Wed, 26 Aug 2026 16:45:17 +0800 Subject: [PATCH] feat(common): replace `need_scheduling` bool with `SchedulingPolicy` enum in Download Introduce a `SchedulingPolicy` enum and replace the boolean `need_scheduling` field in the `Download` message with a `scheduling_policy` field across proto definitions, generated Go/Python/Rust bindings, and bump the version to 2.3.5. Signed-off-by: Gaius --- Cargo.lock | 2 +- Cargo.toml | 2 +- pkg/apis/common/v2/common.pb.go | 586 +++++++++++++---------- pkg/apis/common/v2/common.pb.validate.go | 11 +- pkg/apis/common/v2/common.proto | 21 +- proto/common.proto | 21 +- python/dragonfly_api/common_pb2.py | 50 +- python/dragonfly_api/common_pb2.pyi | 15 +- src/common.v2.rs | 44 +- src/descriptor.bin | Bin 213915 -> 214422 bytes 10 files changed, 441 insertions(+), 311 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1033336..019a27e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,7 +119,7 @@ dependencies = [ [[package]] name = "dragonfly-api" -version = "2.3.4" +version = "2.3.5" dependencies = [ "prost", "prost-types", diff --git a/Cargo.toml b/Cargo.toml index 6313165..60aa4bf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dragonfly-api" -version = "2.3.4" +version = "2.3.5" authors = ["Gaius "] edition = "2021" license = "Apache-2.0" diff --git a/pkg/apis/common/v2/common.pb.go b/pkg/apis/common/v2/common.pb.go index 3798d53..6fa0549 100644 --- a/pkg/apis/common/v2/common.pb.go +++ b/pkg/apis/common/v2/common.pb.go @@ -304,6 +304,59 @@ func (Priority) EnumDescriptor() ([]byte, []int) { return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{3} } +// SchedulingPolicy represents how the download interacts with the scheduler. +type SchedulingPolicy int32 + +const ( + // AUTO downloads through the scheduler unless the content length is smaller + // than the minimum piece length, in which case it downloads from the source + // directly, skipping the scheduler. + SchedulingPolicy_AUTO SchedulingPolicy = 0 + // ALWAYS downloads through the scheduler even if the content length is smaller + // than the minimum piece length, so that the peer announces the task to the + // scheduler and other peers can discover it as a parent. + SchedulingPolicy_ALWAYS SchedulingPolicy = 1 +) + +// Enum value maps for SchedulingPolicy. +var ( + SchedulingPolicy_name = map[int32]string{ + 0: "AUTO", + 1: "ALWAYS", + } + SchedulingPolicy_value = map[string]int32{ + "AUTO": 0, + "ALWAYS": 1, + } +) + +func (x SchedulingPolicy) Enum() *SchedulingPolicy { + p := new(SchedulingPolicy) + *p = x + return p +} + +func (x SchedulingPolicy) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SchedulingPolicy) Descriptor() protoreflect.EnumDescriptor { + return file_pkg_apis_common_v2_common_proto_enumTypes[4].Descriptor() +} + +func (SchedulingPolicy) Type() protoreflect.EnumType { + return &file_pkg_apis_common_v2_common_proto_enumTypes[4] +} + +func (x SchedulingPolicy) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SchedulingPolicy.Descriptor instead. +func (SchedulingPolicy) EnumDescriptor() ([]byte, []int) { + return file_pkg_apis_common_v2_common_proto_rawDescGZIP(), []int{4} +} + // Peer metadata. type Peer struct { state protoimpl.MessageState @@ -2721,11 +2774,9 @@ type Download struct { MetadataOnly bool `protobuf:"varint,33,opt,name=metadata_only,json=metadataOnly,proto3" json:"metadata_only,omitempty"` // OpenCSG protocol information. OpenCsg *OpenCSG `protobuf:"bytes,34,opt,name=open_csg,json=openCsg,proto3,oneof" json:"open_csg,omitempty"` - // Need scheduling is the flag to indicate whether the download needs to be scheduled - // by the scheduler even if the content length is smaller than the minimum piece length, - // so that the peer announces the task to the scheduler and other peers can discover - // it as a parent. - NeedScheduling bool `protobuf:"varint,35,opt,name=need_scheduling,json=needScheduling,proto3" json:"need_scheduling,omitempty"` + // Scheduling policy represents how the download interacts with the scheduler, + // default is AUTO. + SchedulingPolicy SchedulingPolicy `protobuf:"varint,35,opt,name=scheduling_policy,json=schedulingPolicy,proto3,enum=common.v2.SchedulingPolicy" json:"scheduling_policy,omitempty"` } func (x *Download) Reset() { @@ -2991,11 +3042,11 @@ func (x *Download) GetOpenCsg() *OpenCSG { return nil } -func (x *Download) GetNeedScheduling() bool { +func (x *Download) GetSchedulingPolicy() SchedulingPolicy { if x != nil { - return x.NeedScheduling + return x.SchedulingPolicy } - return false + return SchedulingPolicy_AUTO } // Object Storage related information. @@ -4105,7 +4156,7 @@ var file_pkg_apis_common_v2_common_proto_rawDesc = []byte{ 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x67, 0x6f, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xba, 0x11, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xe5, 0x11, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1a, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x88, 0x01, 0x01, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, @@ -4217,102 +4268,85 @@ var file_pkg_apis_common_v2_common_proto_rawDesc = []byte{ 0x6e, 0x6c, 0x79, 0x12, 0x32, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x63, 0x73, 0x67, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x53, 0x47, 0x48, 0x11, 0x52, 0x07, 0x6f, 0x70, 0x65, - 0x6e, 0x43, 0x73, 0x67, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x6e, 0x65, 0x65, 0x64, 0x5f, - 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x23, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x6e, 0x65, 0x65, 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, - 0x1a, 0x40, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x08, 0x0a, - 0x06, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, - 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x11, 0x0a, 0x0f, - 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, - 0x07, 0x0a, 0x05, 0x5f, 0x68, 0x64, 0x66, 0x73, 0x42, 0x22, 0x0a, 0x20, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x42, 0x0c, 0x0a, 0x0a, - 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x70, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x63, - 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, - 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x18, 0x0a, - 0x16, 0x5f, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x61, 0x63, 0x74, 0x75, - 0x61, 0x6c, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x0f, - 0x0a, 0x0d, 0x5f, 0x68, 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x63, 0x65, 0x42, - 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, - 0x0b, 0x0a, 0x09, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x63, 0x73, 0x67, 0x4a, 0x04, 0x08, 0x15, - 0x10, 0x16, 0x52, 0x0d, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x61, 0x63, 0x68, - 0x65, 0x22, 0x8d, 0x05, 0x0a, 0x0d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, - 0x00, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x08, - 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, - 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x01, 0x52, 0x08, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x0d, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x02, 0x52, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x11, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, - 0x03, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, - 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x04, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x0f, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, - 0x48, 0x05, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x61, - 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, - 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x06, 0x52, 0x0d, 0x70, 0x72, 0x65, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, - 0x0e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, - 0x01, 0x48, 0x07, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x35, 0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x65, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x08, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, - 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x10, 0x0a, 0x0e, - 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x12, - 0x0a, 0x10, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x69, 0x6e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, - 0x79, 0x22, 0x57, 0x0a, 0x04, 0x48, 0x44, 0x46, 0x53, 0x12, 0x3a, 0x0a, 0x10, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, - 0x00, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x9d, 0x01, 0x0a, 0x0b, 0x48, - 0x75, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, - 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, - 0x01, 0x12, 0x23, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x08, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, - 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0x88, - 0x01, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x01, 0x52, 0x07, 0x62, 0x61, 0x73, 0x65, 0x55, 0x72, 0x6c, - 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x0b, 0x0a, - 0x09, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x22, 0x9c, 0x01, 0x0a, 0x0a, 0x4d, - 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, - 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, - 0x12, 0x23, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x08, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, - 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0x88, 0x01, - 0x01, 0xd0, 0x01, 0x01, 0x48, 0x01, 0x52, 0x07, 0x62, 0x61, 0x73, 0x65, 0x55, 0x72, 0x6c, 0x88, - 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x0b, 0x0a, 0x09, - 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x22, 0x99, 0x01, 0x0a, 0x07, 0x4f, 0x70, - 0x65, 0x6e, 0x43, 0x53, 0x47, 0x12, 0x25, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x6e, 0x43, 0x73, 0x67, 0x88, 0x01, 0x01, 0x12, 0x52, 0x0a, 0x11, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x23, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, + 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x40, 0x0a, 0x12, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x09, 0x0a, + 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, + 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x68, + 0x64, 0x66, 0x73, 0x42, 0x22, 0x0a, 0x20, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, + 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, + 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x5f, 0x69, 0x70, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x69, 0x65, 0x63, + 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x61, 0x63, 0x74, + 0x75, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x69, + 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x68, 0x75, + 0x67, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x63, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x5f, 0x63, 0x73, 0x67, 0x4a, 0x04, 0x08, 0x15, 0x10, 0x16, 0x52, 0x0d, 0x6c, + 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x22, 0x8d, 0x05, 0x0a, + 0x0d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x27, + 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, + 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, + 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, + 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x48, 0x02, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, + 0x79, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x11, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x03, 0x52, 0x0f, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x88, 0x01, 0x01, + 0x12, 0x34, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, + 0xd0, 0x01, 0x01, 0x48, 0x04, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x05, 0x52, 0x0e, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, + 0x12, 0x36, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, + 0x63, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, + 0x01, 0xd0, 0x01, 0x01, 0x48, 0x06, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x64, 0x41, 0x63, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x0e, 0x73, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x07, 0x52, 0x0d, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, + 0x12, 0x35, 0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x6b, 0x69, + 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x48, 0x08, + 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x67, 0x69, + 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, + 0x10, 0x0a, 0x0e, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, + 0x64, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, + 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x42, 0x11, 0x0a, + 0x0f, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, + 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, + 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0x57, 0x0a, 0x04, + 0x48, 0x44, 0x46, 0x53, 0x12, 0x3a, 0x0a, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, + 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0f, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, + 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x9d, 0x01, 0x0a, 0x0b, 0x48, 0x75, 0x67, 0x67, 0x69, 0x6e, + 0x67, 0x46, 0x61, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, @@ -4321,69 +4355,91 @@ var file_pkg_apis_common_v2_common_proto_rawDesc = []byte{ 0x01, 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0x88, 0x01, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x01, 0x52, 0x07, 0x62, 0x61, 0x73, 0x65, 0x55, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x62, 0x61, 0x73, - 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x22, 0x35, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xbe, 0x04, 0x0a, - 0x05, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, - 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, - 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0xab, 0x01, 0x0a, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x01, - 0xfa, 0x42, 0x8e, 0x01, 0x72, 0x8b, 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, - 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, - 0x73, 0x68, 0x61, 0x31, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, - 0x7b, 0x34, 0x30, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, - 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, - 0x31, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, - 0x32, 0x38, 0x7d, 0x7c, 0x62, 0x6c, 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, - 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, - 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0xd0, - 0x01, 0x01, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x09, 0xfa, 0x42, 0x06, - 0x7a, 0x04, 0x10, 0x01, 0x70, 0x01, 0x48, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x54, 0x79, - 0x70, 0x65, 0x48, 0x02, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x54, 0x79, 0x70, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x43, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0f, 0x0a, 0x0d, - 0x5f, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x43, 0x0a, - 0x09, 0x53, 0x69, 0x7a, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, - 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x4d, 0x41, 0x4c, 0x4c, 0x10, - 0x01, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x49, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, - 0x4d, 0x50, 0x54, 0x59, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x10, 0x04, 0x2a, 0x49, 0x0a, 0x08, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, - 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, - 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, - 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, - 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x03, 0x2a, 0x42, 0x0a, - 0x0b, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, - 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x4f, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x00, - 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x10, - 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x10, - 0x02, 0x2a, 0x5e, 0x0a, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0a, 0x0a, - 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x30, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, - 0x45, 0x4c, 0x31, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x32, 0x10, - 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x33, 0x10, 0x03, 0x12, 0x0a, 0x0a, - 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x34, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, - 0x45, 0x4c, 0x35, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x36, 0x10, - 0x06, 0x42, 0x29, 0x5a, 0x27, 0x64, 0x37, 0x79, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x32, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x22, 0x9c, 0x01, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, + 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x08, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x2b, 0x0a, 0x08, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0x88, 0x01, 0x01, 0xd0, 0x01, 0x01, 0x48, + 0x01, 0x52, 0x07, 0x62, 0x61, 0x73, 0x65, 0x55, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, + 0x06, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x75, 0x72, 0x6c, 0x22, 0x99, 0x01, 0x0a, 0x07, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x53, 0x47, + 0x12, 0x25, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x08, + 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, + 0xfa, 0x42, 0x08, 0x72, 0x06, 0x88, 0x01, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x01, 0x52, 0x07, 0x62, + 0x61, 0x73, 0x65, 0x55, 0x72, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c, + 0x22, 0x35, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xbe, 0x04, 0x0a, 0x05, 0x50, 0x69, 0x65, 0x63, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x09, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, + 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0xab, 0x01, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x01, 0xfa, 0x42, 0x8e, 0x01, 0x72, + 0x8b, 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x31, 0x3a, + 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x7c, + 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, + 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x3a, 0x5b, 0x61, + 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x38, 0x7d, 0x7c, 0x62, + 0x6c, 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, + 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, + 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x7a, 0x04, 0x10, 0x01, 0x70, + 0x01, 0x48, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, + 0x3e, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x48, 0x02, 0x52, + 0x0b, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, + 0x37, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xaa, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x42, 0x0c, 0x0a, + 0x0a, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x5f, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x74, 0x72, 0x61, 0x66, + 0x66, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x43, 0x0a, 0x09, 0x53, 0x69, 0x7a, 0x65, + 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, + 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x4d, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, + 0x54, 0x49, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, + 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x10, 0x04, 0x2a, 0x49, 0x0a, + 0x08, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, + 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x45, 0x52, 0x53, 0x49, + 0x53, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x45, 0x52, 0x53, 0x49, + 0x53, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, + 0x05, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x03, 0x2a, 0x42, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x66, + 0x66, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x41, 0x43, 0x4b, 0x5f, + 0x54, 0x4f, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x52, + 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, + 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x10, 0x02, 0x2a, 0x5e, 0x0a, 0x08, + 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, + 0x4c, 0x30, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x31, 0x10, 0x01, + 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x32, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, + 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x33, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, + 0x4c, 0x34, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x35, 0x10, 0x05, + 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x36, 0x10, 0x06, 0x2a, 0x28, 0x0a, 0x10, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x4c, + 0x57, 0x41, 0x59, 0x53, 0x10, 0x01, 0x42, 0x29, 0x5a, 0x27, 0x64, 0x37, 0x79, 0x2e, 0x69, 0x6f, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x73, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4398,117 +4454,119 @@ func file_pkg_apis_common_v2_common_proto_rawDescGZIP() []byte { return file_pkg_apis_common_v2_common_proto_rawDescData } -var file_pkg_apis_common_v2_common_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_pkg_apis_common_v2_common_proto_enumTypes = make([]protoimpl.EnumInfo, 5) var file_pkg_apis_common_v2_common_proto_msgTypes = make([]protoimpl.MessageInfo, 29) var file_pkg_apis_common_v2_common_proto_goTypes = []interface{}{ (SizeScope)(0), // 0: common.v2.SizeScope (TaskType)(0), // 1: common.v2.TaskType (TrafficType)(0), // 2: common.v2.TrafficType (Priority)(0), // 3: common.v2.Priority - (*Peer)(nil), // 4: common.v2.Peer - (*CachePeer)(nil), // 5: common.v2.CachePeer - (*PersistentPeer)(nil), // 6: common.v2.PersistentPeer - (*PersistentCachePeer)(nil), // 7: common.v2.PersistentCachePeer - (*Task)(nil), // 8: common.v2.Task - (*CacheTask)(nil), // 9: common.v2.CacheTask - (*PersistentTask)(nil), // 10: common.v2.PersistentTask - (*PersistentCacheTask)(nil), // 11: common.v2.PersistentCacheTask - (*Host)(nil), // 12: common.v2.Host - (*CPU)(nil), // 13: common.v2.CPU - (*CgroupCPU)(nil), // 14: common.v2.CgroupCPU - (*CPUTimes)(nil), // 15: common.v2.CPUTimes - (*Memory)(nil), // 16: common.v2.Memory - (*CgroupMemory)(nil), // 17: common.v2.CgroupMemory - (*Network)(nil), // 18: common.v2.Network - (*Disk)(nil), // 19: common.v2.Disk - (*CgroupDisk)(nil), // 20: common.v2.CgroupDisk - (*Build)(nil), // 21: common.v2.Build - (*Download)(nil), // 22: common.v2.Download - (*ObjectStorage)(nil), // 23: common.v2.ObjectStorage - (*HDFS)(nil), // 24: common.v2.HDFS - (*HuggingFace)(nil), // 25: common.v2.HuggingFace - (*ModelScope)(nil), // 26: common.v2.ModelScope - (*OpenCSG)(nil), // 27: common.v2.OpenCSG - (*Range)(nil), // 28: common.v2.Range - (*Piece)(nil), // 29: common.v2.Piece - nil, // 30: common.v2.Task.RequestHeaderEntry - nil, // 31: common.v2.CacheTask.RequestHeaderEntry - nil, // 32: common.v2.Download.RequestHeaderEntry - (*durationpb.Duration)(nil), // 33: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 34: google.protobuf.Timestamp + (SchedulingPolicy)(0), // 4: common.v2.SchedulingPolicy + (*Peer)(nil), // 5: common.v2.Peer + (*CachePeer)(nil), // 6: common.v2.CachePeer + (*PersistentPeer)(nil), // 7: common.v2.PersistentPeer + (*PersistentCachePeer)(nil), // 8: common.v2.PersistentCachePeer + (*Task)(nil), // 9: common.v2.Task + (*CacheTask)(nil), // 10: common.v2.CacheTask + (*PersistentTask)(nil), // 11: common.v2.PersistentTask + (*PersistentCacheTask)(nil), // 12: common.v2.PersistentCacheTask + (*Host)(nil), // 13: common.v2.Host + (*CPU)(nil), // 14: common.v2.CPU + (*CgroupCPU)(nil), // 15: common.v2.CgroupCPU + (*CPUTimes)(nil), // 16: common.v2.CPUTimes + (*Memory)(nil), // 17: common.v2.Memory + (*CgroupMemory)(nil), // 18: common.v2.CgroupMemory + (*Network)(nil), // 19: common.v2.Network + (*Disk)(nil), // 20: common.v2.Disk + (*CgroupDisk)(nil), // 21: common.v2.CgroupDisk + (*Build)(nil), // 22: common.v2.Build + (*Download)(nil), // 23: common.v2.Download + (*ObjectStorage)(nil), // 24: common.v2.ObjectStorage + (*HDFS)(nil), // 25: common.v2.HDFS + (*HuggingFace)(nil), // 26: common.v2.HuggingFace + (*ModelScope)(nil), // 27: common.v2.ModelScope + (*OpenCSG)(nil), // 28: common.v2.OpenCSG + (*Range)(nil), // 29: common.v2.Range + (*Piece)(nil), // 30: common.v2.Piece + nil, // 31: common.v2.Task.RequestHeaderEntry + nil, // 32: common.v2.CacheTask.RequestHeaderEntry + nil, // 33: common.v2.Download.RequestHeaderEntry + (*durationpb.Duration)(nil), // 34: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 35: google.protobuf.Timestamp } var file_pkg_apis_common_v2_common_proto_depIdxs = []int32{ - 28, // 0: common.v2.Peer.range:type_name -> common.v2.Range + 29, // 0: common.v2.Peer.range:type_name -> common.v2.Range 3, // 1: common.v2.Peer.priority:type_name -> common.v2.Priority - 29, // 2: common.v2.Peer.pieces:type_name -> common.v2.Piece - 33, // 3: common.v2.Peer.cost:type_name -> google.protobuf.Duration - 8, // 4: common.v2.Peer.task:type_name -> common.v2.Task - 12, // 5: common.v2.Peer.host:type_name -> common.v2.Host - 34, // 6: common.v2.Peer.created_at:type_name -> google.protobuf.Timestamp - 34, // 7: common.v2.Peer.updated_at:type_name -> google.protobuf.Timestamp - 28, // 8: common.v2.CachePeer.range:type_name -> common.v2.Range + 30, // 2: common.v2.Peer.pieces:type_name -> common.v2.Piece + 34, // 3: common.v2.Peer.cost:type_name -> google.protobuf.Duration + 9, // 4: common.v2.Peer.task:type_name -> common.v2.Task + 13, // 5: common.v2.Peer.host:type_name -> common.v2.Host + 35, // 6: common.v2.Peer.created_at:type_name -> google.protobuf.Timestamp + 35, // 7: common.v2.Peer.updated_at:type_name -> google.protobuf.Timestamp + 29, // 8: common.v2.CachePeer.range:type_name -> common.v2.Range 3, // 9: common.v2.CachePeer.priority:type_name -> common.v2.Priority - 29, // 10: common.v2.CachePeer.pieces:type_name -> common.v2.Piece - 33, // 11: common.v2.CachePeer.cost:type_name -> google.protobuf.Duration - 9, // 12: common.v2.CachePeer.task:type_name -> common.v2.CacheTask - 12, // 13: common.v2.CachePeer.host:type_name -> common.v2.Host - 34, // 14: common.v2.CachePeer.created_at:type_name -> google.protobuf.Timestamp - 34, // 15: common.v2.CachePeer.updated_at:type_name -> google.protobuf.Timestamp - 33, // 16: common.v2.PersistentPeer.cost:type_name -> google.protobuf.Duration - 10, // 17: common.v2.PersistentPeer.task:type_name -> common.v2.PersistentTask - 12, // 18: common.v2.PersistentPeer.host:type_name -> common.v2.Host - 34, // 19: common.v2.PersistentPeer.created_at:type_name -> google.protobuf.Timestamp - 34, // 20: common.v2.PersistentPeer.updated_at:type_name -> google.protobuf.Timestamp - 33, // 21: common.v2.PersistentCachePeer.cost:type_name -> google.protobuf.Duration - 11, // 22: common.v2.PersistentCachePeer.task:type_name -> common.v2.PersistentCacheTask - 12, // 23: common.v2.PersistentCachePeer.host:type_name -> common.v2.Host - 34, // 24: common.v2.PersistentCachePeer.created_at:type_name -> google.protobuf.Timestamp - 34, // 25: common.v2.PersistentCachePeer.updated_at:type_name -> google.protobuf.Timestamp + 30, // 10: common.v2.CachePeer.pieces:type_name -> common.v2.Piece + 34, // 11: common.v2.CachePeer.cost:type_name -> google.protobuf.Duration + 10, // 12: common.v2.CachePeer.task:type_name -> common.v2.CacheTask + 13, // 13: common.v2.CachePeer.host:type_name -> common.v2.Host + 35, // 14: common.v2.CachePeer.created_at:type_name -> google.protobuf.Timestamp + 35, // 15: common.v2.CachePeer.updated_at:type_name -> google.protobuf.Timestamp + 34, // 16: common.v2.PersistentPeer.cost:type_name -> google.protobuf.Duration + 11, // 17: common.v2.PersistentPeer.task:type_name -> common.v2.PersistentTask + 13, // 18: common.v2.PersistentPeer.host:type_name -> common.v2.Host + 35, // 19: common.v2.PersistentPeer.created_at:type_name -> google.protobuf.Timestamp + 35, // 20: common.v2.PersistentPeer.updated_at:type_name -> google.protobuf.Timestamp + 34, // 21: common.v2.PersistentCachePeer.cost:type_name -> google.protobuf.Duration + 12, // 22: common.v2.PersistentCachePeer.task:type_name -> common.v2.PersistentCacheTask + 13, // 23: common.v2.PersistentCachePeer.host:type_name -> common.v2.Host + 35, // 24: common.v2.PersistentCachePeer.created_at:type_name -> google.protobuf.Timestamp + 35, // 25: common.v2.PersistentCachePeer.updated_at:type_name -> google.protobuf.Timestamp 1, // 26: common.v2.Task.type:type_name -> common.v2.TaskType - 30, // 27: common.v2.Task.request_header:type_name -> common.v2.Task.RequestHeaderEntry + 31, // 27: common.v2.Task.request_header:type_name -> common.v2.Task.RequestHeaderEntry 0, // 28: common.v2.Task.size_scope:type_name -> common.v2.SizeScope - 29, // 29: common.v2.Task.pieces:type_name -> common.v2.Piece - 34, // 30: common.v2.Task.created_at:type_name -> google.protobuf.Timestamp - 34, // 31: common.v2.Task.updated_at:type_name -> google.protobuf.Timestamp + 30, // 29: common.v2.Task.pieces:type_name -> common.v2.Piece + 35, // 30: common.v2.Task.created_at:type_name -> google.protobuf.Timestamp + 35, // 31: common.v2.Task.updated_at:type_name -> google.protobuf.Timestamp 1, // 32: common.v2.CacheTask.type:type_name -> common.v2.TaskType - 31, // 33: common.v2.CacheTask.request_header:type_name -> common.v2.CacheTask.RequestHeaderEntry + 32, // 33: common.v2.CacheTask.request_header:type_name -> common.v2.CacheTask.RequestHeaderEntry 0, // 34: common.v2.CacheTask.size_scope:type_name -> common.v2.SizeScope - 29, // 35: common.v2.CacheTask.pieces:type_name -> common.v2.Piece - 34, // 36: common.v2.CacheTask.created_at:type_name -> google.protobuf.Timestamp - 34, // 37: common.v2.CacheTask.updated_at:type_name -> google.protobuf.Timestamp - 33, // 38: common.v2.PersistentTask.ttl:type_name -> google.protobuf.Duration - 34, // 39: common.v2.PersistentTask.created_at:type_name -> google.protobuf.Timestamp - 34, // 40: common.v2.PersistentTask.updated_at:type_name -> google.protobuf.Timestamp - 33, // 41: common.v2.PersistentCacheTask.ttl:type_name -> google.protobuf.Duration - 34, // 42: common.v2.PersistentCacheTask.created_at:type_name -> google.protobuf.Timestamp - 34, // 43: common.v2.PersistentCacheTask.updated_at:type_name -> google.protobuf.Timestamp - 13, // 44: common.v2.Host.cpu:type_name -> common.v2.CPU - 16, // 45: common.v2.Host.memory:type_name -> common.v2.Memory - 18, // 46: common.v2.Host.network:type_name -> common.v2.Network - 19, // 47: common.v2.Host.disk:type_name -> common.v2.Disk - 21, // 48: common.v2.Host.build:type_name -> common.v2.Build - 15, // 49: common.v2.CPU.times:type_name -> common.v2.CPUTimes - 14, // 50: common.v2.CPU.cgroup:type_name -> common.v2.CgroupCPU - 17, // 51: common.v2.Memory.cgroup:type_name -> common.v2.CgroupMemory - 20, // 52: common.v2.Disk.cgroup:type_name -> common.v2.CgroupDisk - 28, // 53: common.v2.Download.range:type_name -> common.v2.Range + 30, // 35: common.v2.CacheTask.pieces:type_name -> common.v2.Piece + 35, // 36: common.v2.CacheTask.created_at:type_name -> google.protobuf.Timestamp + 35, // 37: common.v2.CacheTask.updated_at:type_name -> google.protobuf.Timestamp + 34, // 38: common.v2.PersistentTask.ttl:type_name -> google.protobuf.Duration + 35, // 39: common.v2.PersistentTask.created_at:type_name -> google.protobuf.Timestamp + 35, // 40: common.v2.PersistentTask.updated_at:type_name -> google.protobuf.Timestamp + 34, // 41: common.v2.PersistentCacheTask.ttl:type_name -> google.protobuf.Duration + 35, // 42: common.v2.PersistentCacheTask.created_at:type_name -> google.protobuf.Timestamp + 35, // 43: common.v2.PersistentCacheTask.updated_at:type_name -> google.protobuf.Timestamp + 14, // 44: common.v2.Host.cpu:type_name -> common.v2.CPU + 17, // 45: common.v2.Host.memory:type_name -> common.v2.Memory + 19, // 46: common.v2.Host.network:type_name -> common.v2.Network + 20, // 47: common.v2.Host.disk:type_name -> common.v2.Disk + 22, // 48: common.v2.Host.build:type_name -> common.v2.Build + 16, // 49: common.v2.CPU.times:type_name -> common.v2.CPUTimes + 15, // 50: common.v2.CPU.cgroup:type_name -> common.v2.CgroupCPU + 18, // 51: common.v2.Memory.cgroup:type_name -> common.v2.CgroupMemory + 21, // 52: common.v2.Disk.cgroup:type_name -> common.v2.CgroupDisk + 29, // 53: common.v2.Download.range:type_name -> common.v2.Range 1, // 54: common.v2.Download.type:type_name -> common.v2.TaskType 3, // 55: common.v2.Download.priority:type_name -> common.v2.Priority - 32, // 56: common.v2.Download.request_header:type_name -> common.v2.Download.RequestHeaderEntry - 33, // 57: common.v2.Download.timeout:type_name -> google.protobuf.Duration - 23, // 58: common.v2.Download.object_storage:type_name -> common.v2.ObjectStorage - 24, // 59: common.v2.Download.hdfs:type_name -> common.v2.HDFS - 25, // 60: common.v2.Download.hugging_face:type_name -> common.v2.HuggingFace - 26, // 61: common.v2.Download.model_scope:type_name -> common.v2.ModelScope - 27, // 62: common.v2.Download.open_csg:type_name -> common.v2.OpenCSG - 2, // 63: common.v2.Piece.traffic_type:type_name -> common.v2.TrafficType - 33, // 64: common.v2.Piece.cost:type_name -> google.protobuf.Duration - 34, // 65: common.v2.Piece.created_at:type_name -> google.protobuf.Timestamp - 66, // [66:66] is the sub-list for method output_type - 66, // [66:66] is the sub-list for method input_type - 66, // [66:66] is the sub-list for extension type_name - 66, // [66:66] is the sub-list for extension extendee - 0, // [0:66] is the sub-list for field type_name + 33, // 56: common.v2.Download.request_header:type_name -> common.v2.Download.RequestHeaderEntry + 34, // 57: common.v2.Download.timeout:type_name -> google.protobuf.Duration + 24, // 58: common.v2.Download.object_storage:type_name -> common.v2.ObjectStorage + 25, // 59: common.v2.Download.hdfs:type_name -> common.v2.HDFS + 26, // 60: common.v2.Download.hugging_face:type_name -> common.v2.HuggingFace + 27, // 61: common.v2.Download.model_scope:type_name -> common.v2.ModelScope + 28, // 62: common.v2.Download.open_csg:type_name -> common.v2.OpenCSG + 4, // 63: common.v2.Download.scheduling_policy:type_name -> common.v2.SchedulingPolicy + 2, // 64: common.v2.Piece.traffic_type:type_name -> common.v2.TrafficType + 34, // 65: common.v2.Piece.cost:type_name -> google.protobuf.Duration + 35, // 66: common.v2.Piece.created_at:type_name -> google.protobuf.Timestamp + 67, // [67:67] is the sub-list for method output_type + 67, // [67:67] is the sub-list for method input_type + 67, // [67:67] is the sub-list for extension type_name + 67, // [67:67] is the sub-list for extension extendee + 0, // [0:67] is the sub-list for field type_name } func init() { file_pkg_apis_common_v2_common_proto_init() } @@ -4853,7 +4911,7 @@ func file_pkg_apis_common_v2_common_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_apis_common_v2_common_proto_rawDesc, - NumEnums: 4, + NumEnums: 5, NumMessages: 29, NumExtensions: 0, NumServices: 0, diff --git a/pkg/apis/common/v2/common.pb.validate.go b/pkg/apis/common/v2/common.pb.validate.go index e216804..d0e4d08 100644 --- a/pkg/apis/common/v2/common.pb.validate.go +++ b/pkg/apis/common/v2/common.pb.validate.go @@ -3786,7 +3786,16 @@ func (m *Download) validate(all bool) error { // no validation rules for MetadataOnly - // no validation rules for NeedScheduling + if _, ok := SchedulingPolicy_name[int32(m.GetSchedulingPolicy())]; !ok { + err := DownloadValidationError{ + field: "SchedulingPolicy", + reason: "value must be one of the defined enum values", + } + if !all { + return err + } + errors = append(errors, err) + } if m.Digest != nil { diff --git a/pkg/apis/common/v2/common.proto b/pkg/apis/common/v2/common.proto index 23ab100..17223e1 100644 --- a/pkg/apis/common/v2/common.proto +++ b/pkg/apis/common/v2/common.proto @@ -119,6 +119,19 @@ enum Priority { LEVEL6 = 6; } +// SchedulingPolicy represents how the download interacts with the scheduler. +enum SchedulingPolicy { + // AUTO downloads through the scheduler unless the content length is smaller + // than the minimum piece length, in which case it downloads from the source + // directly, skipping the scheduler. + AUTO = 0; + + // ALWAYS downloads through the scheduler even if the content length is smaller + // than the minimum piece length, so that the peer announces the task to the + // scheduler and other peers can discover it as a parent. + ALWAYS = 1; +} + // Peer metadata. message Peer { // Peer id. @@ -727,11 +740,9 @@ message Download { bool metadata_only = 33; // OpenCSG protocol information. optional OpenCSG open_csg = 34; - // Need scheduling is the flag to indicate whether the download needs to be scheduled - // by the scheduler even if the content length is smaller than the minimum piece length, - // so that the peer announces the task to the scheduler and other peers can discover - // it as a parent. - bool need_scheduling = 35; + // Scheduling policy represents how the download interacts with the scheduler, + // default is AUTO. + SchedulingPolicy scheduling_policy = 35 [(validate.rules).enum.defined_only = true]; reserved 21; reserved "load_to_cache"; diff --git a/proto/common.proto b/proto/common.proto index db1f0cf..b8ea303 100644 --- a/proto/common.proto +++ b/proto/common.proto @@ -113,6 +113,19 @@ enum Priority { LEVEL6 = 6; } +// SchedulingPolicy represents how the download interacts with the scheduler. +enum SchedulingPolicy { + // AUTO downloads through the scheduler unless the content length is smaller + // than the minimum piece length, in which case it downloads from the source + // directly, skipping the scheduler. + AUTO = 0; + + // ALWAYS downloads through the scheduler even if the content length is smaller + // than the minimum piece length, so that the peer announces the task to the + // scheduler and other peers can discover it as a parent. + ALWAYS = 1; +} + // Peer metadata. message Peer { // Peer id. @@ -669,11 +682,9 @@ message Download { bool metadata_only = 33; // OpenCSG protocol information. optional OpenCSG open_csg = 34; - // Need scheduling is the flag to indicate whether the download needs to be scheduled - // by the scheduler even if the content length is smaller than the minimum piece length, - // so that the peer announces the task to the scheduler and other peers can discover - // it as a parent. - bool need_scheduling = 35; + // Scheduling policy represents how the download interacts with the scheduler, + // default is AUTO. + SchedulingPolicy scheduling_policy = 35; reserved 21; reserved "load_to_cache"; diff --git a/python/dragonfly_api/common_pb2.py b/python/dragonfly_api/common_pb2.py index c1d3a0c..69393bb 100644 --- a/python/dragonfly_api/common_pb2.py +++ b/python/dragonfly_api/common_pb2.py @@ -26,7 +26,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x63ommon.proto\x12\tcommon.v2\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xbe\x03\n\x04Peer\x12\n\n\x02id\x18\x01 \x01(\t\x12$\n\x05range\x18\x02 \x01(\x0b\x32\x10.common.v2.RangeH\x00\x88\x01\x01\x12%\n\x08priority\x18\x03 \x01(\x0e\x32\x13.common.v2.Priority\x12 \n\x06pieces\x18\x04 \x03(\x0b\x32\x10.common.v2.Piece\x12\'\n\x04\x63ost\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\r\n\x05state\x18\x06 \x01(\t\x12\x1d\n\x04task\x18\x07 \x01(\x0b\x32\x0f.common.v2.Task\x12\x1d\n\x04host\x18\x08 \x01(\x0b\x32\x0f.common.v2.Host\x12\x1b\n\x13need_back_to_source\x18\t \x01(\x08\x12.\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12#\n\x16\x63oncurrent_piece_count\x18\x0c \x01(\rH\x01\x88\x01\x01\x42\x08\n\x06_rangeB\x19\n\x17_concurrent_piece_count\"\xc8\x03\n\tCachePeer\x12\n\n\x02id\x18\x01 \x01(\t\x12$\n\x05range\x18\x02 \x01(\x0b\x32\x10.common.v2.RangeH\x00\x88\x01\x01\x12%\n\x08priority\x18\x03 \x01(\x0e\x32\x13.common.v2.Priority\x12 \n\x06pieces\x18\x04 \x03(\x0b\x32\x10.common.v2.Piece\x12\'\n\x04\x63ost\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\r\n\x05state\x18\x06 \x01(\t\x12\"\n\x04task\x18\x07 \x01(\x0b\x32\x14.common.v2.CacheTask\x12\x1d\n\x04host\x18\x08 \x01(\x0b\x32\x0f.common.v2.Host\x12\x1b\n\x13need_back_to_source\x18\t \x01(\x08\x12.\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12#\n\x16\x63oncurrent_piece_count\x18\x0c \x01(\rH\x01\x88\x01\x01\x42\x08\n\x06_rangeB\x19\n\x17_concurrent_piece_count\"\xb0\x02\n\x0ePersistentPeer\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\'\n\x04\x63ost\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\r\n\x05state\x18\x04 \x01(\t\x12\'\n\x04task\x18\x05 \x01(\x0b\x32\x19.common.v2.PersistentTask\x12\x1d\n\x04host\x18\x06 \x01(\x0b\x32\x0f.common.v2.Host\x12.\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1e\n\x16\x63oncurrent_piece_count\x18\t \x01(\r\"\xba\x02\n\x13PersistentCachePeer\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\'\n\x04\x63ost\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\r\n\x05state\x18\x04 \x01(\t\x12,\n\x04task\x18\x05 \x01(\x0b\x32\x1e.common.v2.PersistentCacheTask\x12\x1d\n\x04host\x18\x06 \x01(\x0b\x32\x0f.common.v2.Host\x12.\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1e\n\x16\x63oncurrent_piece_count\x18\t \x01(\r\"\xcf\x04\n\x04Task\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x04type\x18\x02 \x01(\x0e\x32\x13.common.v2.TaskType\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\x13\n\x06\x64igest\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03tag\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x61pplication\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x15\x66iltered_query_params\x18\x07 \x03(\t\x12:\n\x0erequest_header\x18\x08 \x03(\x0b\x32\".common.v2.Task.RequestHeaderEntry\x12\x16\n\x0e\x63ontent_length\x18\t \x01(\x04\x12\x13\n\x0bpiece_count\x18\n \x01(\r\x12(\n\nsize_scope\x18\x0b \x01(\x0e\x32\x14.common.v2.SizeScope\x12 \n\x06pieces\x18\x0c \x03(\x0b\x32\x10.common.v2.Piece\x12\r\n\x05state\x18\r \x01(\t\x12\x12\n\npeer_count\x18\x0e \x01(\r\x12\x1a\n\x12has_available_peer\x18\x0f \x01(\x08\x12.\n\ncreated_at\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a\x34\n\x12RequestHeaderEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_digestB\x06\n\x04_tagB\x0e\n\x0c_application\"\xd9\x04\n\tCacheTask\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x04type\x18\x02 \x01(\x0e\x32\x13.common.v2.TaskType\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\x13\n\x06\x64igest\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03tag\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x61pplication\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x15\x66iltered_query_params\x18\x07 \x03(\t\x12?\n\x0erequest_header\x18\x08 \x03(\x0b\x32\'.common.v2.CacheTask.RequestHeaderEntry\x12\x16\n\x0e\x63ontent_length\x18\t \x01(\x04\x12\x13\n\x0bpiece_count\x18\n \x01(\r\x12(\n\nsize_scope\x18\x0b \x01(\x0e\x32\x14.common.v2.SizeScope\x12 \n\x06pieces\x18\x0c \x03(\x0b\x32\x10.common.v2.Piece\x12\r\n\x05state\x18\r \x01(\t\x12\x12\n\npeer_count\x18\x0e \x01(\r\x12\x1a\n\x12has_available_peer\x18\x0f \x01(\x08\x12.\n\ncreated_at\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a\x34\n\x12RequestHeaderEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_digestB\x06\n\x04_tagB\x0e\n\x0c_application\"\xcb\x02\n\x0ePersistentTask\x12\n\n\x02id\x18\x01 \x01(\t\x12 \n\x18persistent_replica_count\x18\x02 \x01(\x04\x12(\n current_persistent_replica_count\x18\x03 \x01(\x04\x12\x1d\n\x15\x63urrent_replica_count\x18\x04 \x01(\x04\x12\x16\n\x0e\x63ontent_length\x18\x05 \x01(\x04\x12\x13\n\x0bpiece_count\x18\x06 \x01(\r\x12\r\n\x05state\x18\x07 \x01(\t\x12&\n\x03ttl\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12.\n\ncreated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xaa\x03\n\x13PersistentCacheTask\x12\n\n\x02id\x18\x01 \x01(\t\x12 \n\x18persistent_replica_count\x18\x02 \x01(\x04\x12(\n current_persistent_replica_count\x18\x03 \x01(\x04\x12\x1d\n\x15\x63urrent_replica_count\x18\x04 \x01(\x04\x12\x10\n\x03tag\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61pplication\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpiece_length\x18\x07 \x01(\x04\x12\x16\n\x0e\x63ontent_length\x18\x08 \x01(\x04\x12\x13\n\x0bpiece_count\x18\t \x01(\r\x12\r\n\x05state\x18\n \x01(\t\x12&\n\x03ttl\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12.\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\r \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x06\n\x04_tagB\x0e\n\x0c_application\"\x94\x04\n\x04Host\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x10\n\x08hostname\x18\x03 \x01(\t\x12\n\n\x02ip\x18\x04 \x01(\t\x12\x0c\n\x04port\x18\x05 \x01(\x05\x12\x15\n\rdownload_port\x18\x06 \x01(\x05\x12\n\n\x02os\x18\x07 \x01(\t\x12\x10\n\x08platform\x18\x08 \x01(\t\x12\x17\n\x0fplatform_family\x18\t \x01(\t\x12\x18\n\x10platform_version\x18\n \x01(\t\x12\x16\n\x0ekernel_version\x18\x0b \x01(\t\x12 \n\x03\x63pu\x18\x0c \x01(\x0b\x32\x0e.common.v2.CPUH\x00\x88\x01\x01\x12&\n\x06memory\x18\r \x01(\x0b\x32\x11.common.v2.MemoryH\x01\x88\x01\x01\x12(\n\x07network\x18\x0e \x01(\x0b\x32\x12.common.v2.NetworkH\x02\x88\x01\x01\x12\"\n\x04\x64isk\x18\x0f \x01(\x0b\x32\x0f.common.v2.DiskH\x03\x88\x01\x01\x12$\n\x05\x62uild\x18\x10 \x01(\x0b\x32\x10.common.v2.BuildH\x04\x88\x01\x01\x12\x1c\n\x14scheduler_cluster_id\x18\x11 \x01(\x04\x12\x16\n\x0e\x64isable_shared\x18\x12 \x01(\x08\x12\x12\n\nproxy_port\x18\x13 \x01(\x05\x12\x0c\n\x04name\x18\x14 \x01(\tB\x06\n\x04_cpuB\t\n\x07_memoryB\n\n\x08_networkB\x07\n\x05_diskB\x08\n\x06_build\"\xc7\x01\n\x03\x43PU\x12\x15\n\rlogical_count\x18\x01 \x01(\r\x12\x16\n\x0ephysical_count\x18\x02 \x01(\r\x12\x0f\n\x07percent\x18\x03 \x01(\x01\x12\x17\n\x0fprocess_percent\x18\x04 \x01(\x01\x12\'\n\x05times\x18\x05 \x01(\x0b\x32\x13.common.v2.CPUTimesH\x00\x88\x01\x01\x12)\n\x06\x63group\x18\x06 \x01(\x0b\x32\x14.common.v2.CgroupCPUH\x01\x88\x01\x01\x42\x08\n\x06_timesB\t\n\x07_cgroup\"@\n\tCgroupCPU\x12\x0e\n\x06period\x18\x01 \x01(\x04\x12\r\n\x05quota\x18\x02 \x01(\x03\x12\x14\n\x0cused_percent\x18\x03 \x01(\x01\"\xa4\x01\n\x08\x43PUTimes\x12\x0c\n\x04user\x18\x01 \x01(\x01\x12\x0e\n\x06system\x18\x02 \x01(\x01\x12\x0c\n\x04idle\x18\x03 \x01(\x01\x12\x0c\n\x04nice\x18\x04 \x01(\x01\x12\x0e\n\x06iowait\x18\x05 \x01(\x01\x12\x0b\n\x03irq\x18\x06 \x01(\x01\x12\x0f\n\x07softirq\x18\x07 \x01(\x01\x12\r\n\x05steal\x18\x08 \x01(\x01\x12\r\n\x05guest\x18\t \x01(\x01\x12\x12\n\nguest_nice\x18\n \x01(\x01\"\xb3\x01\n\x06Memory\x12\r\n\x05total\x18\x01 \x01(\x04\x12\x11\n\tavailable\x18\x02 \x01(\x04\x12\x0c\n\x04used\x18\x03 \x01(\x04\x12\x14\n\x0cused_percent\x18\x04 \x01(\x01\x12\x1c\n\x14process_used_percent\x18\x05 \x01(\x01\x12\x0c\n\x04\x66ree\x18\x06 \x01(\x04\x12,\n\x06\x63group\x18\x07 \x01(\x0b\x32\x17.common.v2.CgroupMemoryH\x00\x88\x01\x01\x42\t\n\x07_cgroup\"B\n\x0c\x43groupMemory\x12\r\n\x05limit\x18\x01 \x01(\x03\x12\r\n\x05usage\x18\x02 \x01(\x04\x12\x14\n\x0cused_percent\x18\x03 \x01(\x01\"\xf2\x02\n\x07Network\x12\x1c\n\x14tcp_connection_count\x18\x01 \x01(\r\x12#\n\x1bupload_tcp_connection_count\x18\x02 \x01(\r\x12\x15\n\x08location\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03idc\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x10max_rx_bandwidth\x18\t \x01(\x04\x12\x19\n\x0crx_bandwidth\x18\n \x01(\x04H\x02\x88\x01\x01\x12\x18\n\x10max_tx_bandwidth\x18\x0b \x01(\x04\x12\x19\n\x0ctx_bandwidth\x18\x0c \x01(\x04H\x03\x88\x01\x01\x42\x0b\n\t_locationB\x06\n\x04_idcB\x0f\n\r_rx_bandwidthB\x0f\n\r_tx_bandwidthJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tR\rdownload_rateR\x13\x64ownload_rate_limitR\x0bupload_rateR\x11upload_rate_limit\"\x8c\x02\n\x04\x44isk\x12\r\n\x05total\x18\x01 \x01(\x04\x12\x0c\n\x04\x66ree\x18\x02 \x01(\x04\x12\x0c\n\x04used\x18\x03 \x01(\x04\x12\x14\n\x0cused_percent\x18\x04 \x01(\x01\x12\x14\n\x0cinodes_total\x18\x05 \x01(\x04\x12\x13\n\x0binodes_used\x18\x06 \x01(\x04\x12\x13\n\x0binodes_free\x18\x07 \x01(\x04\x12\x1b\n\x13inodes_used_percent\x18\x08 \x01(\x01\x12\x16\n\x0eread_bandwidth\x18\t \x01(\x04\x12\x17\n\x0fwrite_bandwidth\x18\n \x01(\x04\x12*\n\x06\x63group\x18\x0b \x01(\x0b\x32\x15.common.v2.CgroupDiskH\x00\x88\x01\x01\x42\t\n\x07_cgroup\"=\n\nCgroupDisk\x12\x16\n\x0eread_bandwidth\x18\x01 \x01(\x04\x12\x17\n\x0fwrite_bandwidth\x18\x02 \x01(\x04\"\xbc\x01\n\x05\x42uild\x12\x13\n\x0bgit_version\x18\x01 \x01(\t\x12\x17\n\ngit_commit\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\ngo_version\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0crust_version\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x15\n\x08platform\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\r\n\x0b_git_commitB\r\n\x0b_go_versionB\x0f\n\r_rust_versionB\x0b\n\t_platform\"\xef\x0b\n\x08\x44ownload\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x13\n\x06\x64igest\x18\x02 \x01(\tH\x00\x88\x01\x01\x12$\n\x05range\x18\x03 \x01(\x0b\x32\x10.common.v2.RangeH\x01\x88\x01\x01\x12!\n\x04type\x18\x04 \x01(\x0e\x32\x13.common.v2.TaskType\x12\x10\n\x03tag\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x61pplication\x18\x06 \x01(\tH\x03\x88\x01\x01\x12%\n\x08priority\x18\x07 \x01(\x0e\x32\x13.common.v2.Priority\x12\x1d\n\x15\x66iltered_query_params\x18\x08 \x03(\t\x12>\n\x0erequest_header\x18\t \x03(\x0b\x32&.common.v2.Download.RequestHeaderEntry\x12\x19\n\x0cpiece_length\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x18\n\x0boutput_path\x18\x0b \x01(\tH\x05\x88\x01\x01\x12/\n\x07timeout\x18\x0c \x01(\x0b\x32\x19.google.protobuf.DurationH\x06\x88\x01\x01\x12\x1e\n\x16\x64isable_back_to_source\x18\r \x01(\x08\x12\x1b\n\x13need_back_to_source\x18\x0e \x01(\x08\x12\x19\n\x11\x63\x65rtificate_chain\x18\x0f \x03(\x0c\x12\x10\n\x08prefetch\x18\x10 \x01(\x08\x12\x35\n\x0eobject_storage\x18\x11 \x01(\x0b\x32\x18.common.v2.ObjectStorageH\x07\x88\x01\x01\x12\"\n\x04hdfs\x18\x12 \x01(\x0b\x32\x0f.common.v2.HDFSH\x08\x88\x01\x01\x12\x13\n\x0bis_prefetch\x18\x13 \x01(\x08\x12\x1a\n\x12need_piece_content\x18\x14 \x01(\x08\x12\x17\n\x0f\x66orce_hard_link\x18\x16 \x01(\x08\x12,\n\x1f\x63ontent_for_calculating_task_id\x18\x17 \x01(\tH\t\x88\x01\x01\x12\x16\n\tremote_ip\x18\x18 \x01(\tH\n\x88\x01\x01\x12#\n\x16\x63oncurrent_piece_count\x18\x19 \x01(\rH\x0b\x88\x01\x01\x12\x11\n\toverwrite\x18\x1a \x01(\x08\x12 \n\x13\x61\x63tual_piece_length\x18\x1b \x01(\x04H\x0c\x88\x01\x01\x12\"\n\x15\x61\x63tual_content_length\x18\x1c \x01(\x04H\r\x88\x01\x01\x12\x1f\n\x12\x61\x63tual_piece_count\x18\x1d \x01(\x04H\x0e\x88\x01\x01\x12(\n enable_task_id_based_blob_digest\x18\x1e \x01(\x08\x12\x31\n\x0chugging_face\x18\x1f \x01(\x0b\x32\x16.common.v2.HuggingFaceH\x0f\x88\x01\x01\x12/\n\x0bmodel_scope\x18 \x01(\x0b\x32\x15.common.v2.ModelScopeH\x10\x88\x01\x01\x12\x15\n\rmetadata_only\x18! \x01(\x08\x12)\n\x08open_csg\x18\" \x01(\x0b\x32\x12.common.v2.OpenCSGH\x11\x88\x01\x01\x12\x17\n\x0fneed_scheduling\x18# \x01(\x08\x1a\x34\n\x12RequestHeaderEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_digestB\x08\n\x06_rangeB\x06\n\x04_tagB\x0e\n\x0c_applicationB\x0f\n\r_piece_lengthB\x0e\n\x0c_output_pathB\n\n\x08_timeoutB\x11\n\x0f_object_storageB\x07\n\x05_hdfsB\"\n _content_for_calculating_task_idB\x0c\n\n_remote_ipB\x19\n\x17_concurrent_piece_countB\x16\n\x14_actual_piece_lengthB\x18\n\x16_actual_content_lengthB\x15\n\x13_actual_piece_countB\x0f\n\r_hugging_faceB\x0e\n\x0c_model_scopeB\x0b\n\t_open_csgJ\x04\x08\x15\x10\x16R\rload_to_cache\"\xb3\x03\n\rObjectStorage\x12\x13\n\x06region\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08\x65ndpoint\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\raccess_key_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1e\n\x11\x61\x63\x63\x65ss_key_secret\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rsession_token\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0f\x63redential_path\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0epredefined_acl\x18\x07 \x01(\tH\x06\x88\x01\x01\x12\x1b\n\x0esecurity_token\x18\x08 \x01(\tH\x07\x88\x01\x01\x12!\n\x14insecure_skip_verify\x18\t \x01(\x08H\x08\x88\x01\x01\x42\t\n\x07_regionB\x0b\n\t_endpointB\x10\n\x0e_access_key_idB\x14\n\x12_access_key_secretB\x10\n\x0e_session_tokenB\x12\n\x10_credential_pathB\x11\n\x0f_predefined_aclB\x11\n\x0f_security_tokenB\x17\n\x15_insecure_skip_verify\":\n\x04HDFS\x12\x1d\n\x10\x64\x65legation_token\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x13\n\x11_delegation_token\"a\n\x0bHuggingFace\x12\x12\n\x05token\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08revision\x18\x02 \x01(\t\x12\x15\n\x08\x62\x61se_url\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_tokenB\x0b\n\t_base_url\"`\n\nModelScope\x12\x12\n\x05token\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08revision\x18\x02 \x01(\t\x12\x15\n\x08\x62\x61se_url\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_tokenB\x0b\n\t_base_url\"]\n\x07OpenCSG\x12\x12\n\x05token\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08revision\x18\x02 \x01(\t\x12\x15\n\x08\x62\x61se_url\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_tokenB\x0b\n\t_base_url\"&\n\x05Range\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\"\xac\x02\n\x05Piece\x12\x0e\n\x06number\x18\x01 \x01(\r\x12\x16\n\tparent_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12\x0e\n\x06length\x18\x04 \x01(\x04\x12\x0e\n\x06\x64igest\x18\x05 \x01(\t\x12\x14\n\x07\x63ontent\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x31\n\x0ctraffic_type\x18\x07 \x01(\x0e\x32\x16.common.v2.TrafficTypeH\x02\x88\x01\x01\x12\'\n\x04\x63ost\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12.\n\ncreated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x0c\n\n_parent_idB\n\n\x08_contentB\x0f\n\r_traffic_type*7\n\tSizeScope\x12\n\n\x06NORMAL\x10\x00\x12\t\n\x05SMALL\x10\x01\x12\x08\n\x04TINY\x10\x02\x12\t\n\x05\x45MPTY\x10\x03*I\n\x08TaskType\x12\x0c\n\x08STANDARD\x10\x00\x12\x0e\n\nPERSISTENT\x10\x01\x12\x14\n\x10PERSISTENT_CACHE\x10\x02\x12\t\n\x05\x43\x41\x43HE\x10\x03*B\n\x0bTrafficType\x12\x12\n\x0e\x42\x41\x43K_TO_SOURCE\x10\x00\x12\x0f\n\x0bREMOTE_PEER\x10\x01\x12\x0e\n\nLOCAL_PEER\x10\x02*^\n\x08Priority\x12\n\n\x06LEVEL0\x10\x00\x12\n\n\x06LEVEL1\x10\x01\x12\n\n\x06LEVEL2\x10\x02\x12\n\n\x06LEVEL3\x10\x03\x12\n\n\x06LEVEL4\x10\x04\x12\n\n\x06LEVEL5\x10\x05\x12\n\n\x06LEVEL6\x10\x06\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x63ommon.proto\x12\tcommon.v2\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xbe\x03\n\x04Peer\x12\n\n\x02id\x18\x01 \x01(\t\x12$\n\x05range\x18\x02 \x01(\x0b\x32\x10.common.v2.RangeH\x00\x88\x01\x01\x12%\n\x08priority\x18\x03 \x01(\x0e\x32\x13.common.v2.Priority\x12 \n\x06pieces\x18\x04 \x03(\x0b\x32\x10.common.v2.Piece\x12\'\n\x04\x63ost\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\r\n\x05state\x18\x06 \x01(\t\x12\x1d\n\x04task\x18\x07 \x01(\x0b\x32\x0f.common.v2.Task\x12\x1d\n\x04host\x18\x08 \x01(\x0b\x32\x0f.common.v2.Host\x12\x1b\n\x13need_back_to_source\x18\t \x01(\x08\x12.\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12#\n\x16\x63oncurrent_piece_count\x18\x0c \x01(\rH\x01\x88\x01\x01\x42\x08\n\x06_rangeB\x19\n\x17_concurrent_piece_count\"\xc8\x03\n\tCachePeer\x12\n\n\x02id\x18\x01 \x01(\t\x12$\n\x05range\x18\x02 \x01(\x0b\x32\x10.common.v2.RangeH\x00\x88\x01\x01\x12%\n\x08priority\x18\x03 \x01(\x0e\x32\x13.common.v2.Priority\x12 \n\x06pieces\x18\x04 \x03(\x0b\x32\x10.common.v2.Piece\x12\'\n\x04\x63ost\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\r\n\x05state\x18\x06 \x01(\t\x12\"\n\x04task\x18\x07 \x01(\x0b\x32\x14.common.v2.CacheTask\x12\x1d\n\x04host\x18\x08 \x01(\x0b\x32\x0f.common.v2.Host\x12\x1b\n\x13need_back_to_source\x18\t \x01(\x08\x12.\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12#\n\x16\x63oncurrent_piece_count\x18\x0c \x01(\rH\x01\x88\x01\x01\x42\x08\n\x06_rangeB\x19\n\x17_concurrent_piece_count\"\xb0\x02\n\x0ePersistentPeer\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\'\n\x04\x63ost\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\r\n\x05state\x18\x04 \x01(\t\x12\'\n\x04task\x18\x05 \x01(\x0b\x32\x19.common.v2.PersistentTask\x12\x1d\n\x04host\x18\x06 \x01(\x0b\x32\x0f.common.v2.Host\x12.\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1e\n\x16\x63oncurrent_piece_count\x18\t \x01(\r\"\xba\x02\n\x13PersistentCachePeer\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\'\n\x04\x63ost\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\r\n\x05state\x18\x04 \x01(\t\x12,\n\x04task\x18\x05 \x01(\x0b\x32\x1e.common.v2.PersistentCacheTask\x12\x1d\n\x04host\x18\x06 \x01(\x0b\x32\x0f.common.v2.Host\x12.\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1e\n\x16\x63oncurrent_piece_count\x18\t \x01(\r\"\xcf\x04\n\x04Task\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x04type\x18\x02 \x01(\x0e\x32\x13.common.v2.TaskType\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\x13\n\x06\x64igest\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03tag\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x61pplication\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x15\x66iltered_query_params\x18\x07 \x03(\t\x12:\n\x0erequest_header\x18\x08 \x03(\x0b\x32\".common.v2.Task.RequestHeaderEntry\x12\x16\n\x0e\x63ontent_length\x18\t \x01(\x04\x12\x13\n\x0bpiece_count\x18\n \x01(\r\x12(\n\nsize_scope\x18\x0b \x01(\x0e\x32\x14.common.v2.SizeScope\x12 \n\x06pieces\x18\x0c \x03(\x0b\x32\x10.common.v2.Piece\x12\r\n\x05state\x18\r \x01(\t\x12\x12\n\npeer_count\x18\x0e \x01(\r\x12\x1a\n\x12has_available_peer\x18\x0f \x01(\x08\x12.\n\ncreated_at\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a\x34\n\x12RequestHeaderEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_digestB\x06\n\x04_tagB\x0e\n\x0c_application\"\xd9\x04\n\tCacheTask\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x04type\x18\x02 \x01(\x0e\x32\x13.common.v2.TaskType\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\x13\n\x06\x64igest\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03tag\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x61pplication\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x15\x66iltered_query_params\x18\x07 \x03(\t\x12?\n\x0erequest_header\x18\x08 \x03(\x0b\x32\'.common.v2.CacheTask.RequestHeaderEntry\x12\x16\n\x0e\x63ontent_length\x18\t \x01(\x04\x12\x13\n\x0bpiece_count\x18\n \x01(\r\x12(\n\nsize_scope\x18\x0b \x01(\x0e\x32\x14.common.v2.SizeScope\x12 \n\x06pieces\x18\x0c \x03(\x0b\x32\x10.common.v2.Piece\x12\r\n\x05state\x18\r \x01(\t\x12\x12\n\npeer_count\x18\x0e \x01(\r\x12\x1a\n\x12has_available_peer\x18\x0f \x01(\x08\x12.\n\ncreated_at\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a\x34\n\x12RequestHeaderEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_digestB\x06\n\x04_tagB\x0e\n\x0c_application\"\xcb\x02\n\x0ePersistentTask\x12\n\n\x02id\x18\x01 \x01(\t\x12 \n\x18persistent_replica_count\x18\x02 \x01(\x04\x12(\n current_persistent_replica_count\x18\x03 \x01(\x04\x12\x1d\n\x15\x63urrent_replica_count\x18\x04 \x01(\x04\x12\x16\n\x0e\x63ontent_length\x18\x05 \x01(\x04\x12\x13\n\x0bpiece_count\x18\x06 \x01(\r\x12\r\n\x05state\x18\x07 \x01(\t\x12&\n\x03ttl\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12.\n\ncreated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xaa\x03\n\x13PersistentCacheTask\x12\n\n\x02id\x18\x01 \x01(\t\x12 \n\x18persistent_replica_count\x18\x02 \x01(\x04\x12(\n current_persistent_replica_count\x18\x03 \x01(\x04\x12\x1d\n\x15\x63urrent_replica_count\x18\x04 \x01(\x04\x12\x10\n\x03tag\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61pplication\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpiece_length\x18\x07 \x01(\x04\x12\x16\n\x0e\x63ontent_length\x18\x08 \x01(\x04\x12\x13\n\x0bpiece_count\x18\t \x01(\r\x12\r\n\x05state\x18\n \x01(\t\x12&\n\x03ttl\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12.\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\r \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x06\n\x04_tagB\x0e\n\x0c_application\"\x94\x04\n\x04Host\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x10\n\x08hostname\x18\x03 \x01(\t\x12\n\n\x02ip\x18\x04 \x01(\t\x12\x0c\n\x04port\x18\x05 \x01(\x05\x12\x15\n\rdownload_port\x18\x06 \x01(\x05\x12\n\n\x02os\x18\x07 \x01(\t\x12\x10\n\x08platform\x18\x08 \x01(\t\x12\x17\n\x0fplatform_family\x18\t \x01(\t\x12\x18\n\x10platform_version\x18\n \x01(\t\x12\x16\n\x0ekernel_version\x18\x0b \x01(\t\x12 \n\x03\x63pu\x18\x0c \x01(\x0b\x32\x0e.common.v2.CPUH\x00\x88\x01\x01\x12&\n\x06memory\x18\r \x01(\x0b\x32\x11.common.v2.MemoryH\x01\x88\x01\x01\x12(\n\x07network\x18\x0e \x01(\x0b\x32\x12.common.v2.NetworkH\x02\x88\x01\x01\x12\"\n\x04\x64isk\x18\x0f \x01(\x0b\x32\x0f.common.v2.DiskH\x03\x88\x01\x01\x12$\n\x05\x62uild\x18\x10 \x01(\x0b\x32\x10.common.v2.BuildH\x04\x88\x01\x01\x12\x1c\n\x14scheduler_cluster_id\x18\x11 \x01(\x04\x12\x16\n\x0e\x64isable_shared\x18\x12 \x01(\x08\x12\x12\n\nproxy_port\x18\x13 \x01(\x05\x12\x0c\n\x04name\x18\x14 \x01(\tB\x06\n\x04_cpuB\t\n\x07_memoryB\n\n\x08_networkB\x07\n\x05_diskB\x08\n\x06_build\"\xc7\x01\n\x03\x43PU\x12\x15\n\rlogical_count\x18\x01 \x01(\r\x12\x16\n\x0ephysical_count\x18\x02 \x01(\r\x12\x0f\n\x07percent\x18\x03 \x01(\x01\x12\x17\n\x0fprocess_percent\x18\x04 \x01(\x01\x12\'\n\x05times\x18\x05 \x01(\x0b\x32\x13.common.v2.CPUTimesH\x00\x88\x01\x01\x12)\n\x06\x63group\x18\x06 \x01(\x0b\x32\x14.common.v2.CgroupCPUH\x01\x88\x01\x01\x42\x08\n\x06_timesB\t\n\x07_cgroup\"@\n\tCgroupCPU\x12\x0e\n\x06period\x18\x01 \x01(\x04\x12\r\n\x05quota\x18\x02 \x01(\x03\x12\x14\n\x0cused_percent\x18\x03 \x01(\x01\"\xa4\x01\n\x08\x43PUTimes\x12\x0c\n\x04user\x18\x01 \x01(\x01\x12\x0e\n\x06system\x18\x02 \x01(\x01\x12\x0c\n\x04idle\x18\x03 \x01(\x01\x12\x0c\n\x04nice\x18\x04 \x01(\x01\x12\x0e\n\x06iowait\x18\x05 \x01(\x01\x12\x0b\n\x03irq\x18\x06 \x01(\x01\x12\x0f\n\x07softirq\x18\x07 \x01(\x01\x12\r\n\x05steal\x18\x08 \x01(\x01\x12\r\n\x05guest\x18\t \x01(\x01\x12\x12\n\nguest_nice\x18\n \x01(\x01\"\xb3\x01\n\x06Memory\x12\r\n\x05total\x18\x01 \x01(\x04\x12\x11\n\tavailable\x18\x02 \x01(\x04\x12\x0c\n\x04used\x18\x03 \x01(\x04\x12\x14\n\x0cused_percent\x18\x04 \x01(\x01\x12\x1c\n\x14process_used_percent\x18\x05 \x01(\x01\x12\x0c\n\x04\x66ree\x18\x06 \x01(\x04\x12,\n\x06\x63group\x18\x07 \x01(\x0b\x32\x17.common.v2.CgroupMemoryH\x00\x88\x01\x01\x42\t\n\x07_cgroup\"B\n\x0c\x43groupMemory\x12\r\n\x05limit\x18\x01 \x01(\x03\x12\r\n\x05usage\x18\x02 \x01(\x04\x12\x14\n\x0cused_percent\x18\x03 \x01(\x01\"\xf2\x02\n\x07Network\x12\x1c\n\x14tcp_connection_count\x18\x01 \x01(\r\x12#\n\x1bupload_tcp_connection_count\x18\x02 \x01(\r\x12\x15\n\x08location\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03idc\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x10max_rx_bandwidth\x18\t \x01(\x04\x12\x19\n\x0crx_bandwidth\x18\n \x01(\x04H\x02\x88\x01\x01\x12\x18\n\x10max_tx_bandwidth\x18\x0b \x01(\x04\x12\x19\n\x0ctx_bandwidth\x18\x0c \x01(\x04H\x03\x88\x01\x01\x42\x0b\n\t_locationB\x06\n\x04_idcB\x0f\n\r_rx_bandwidthB\x0f\n\r_tx_bandwidthJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tR\rdownload_rateR\x13\x64ownload_rate_limitR\x0bupload_rateR\x11upload_rate_limit\"\x8c\x02\n\x04\x44isk\x12\r\n\x05total\x18\x01 \x01(\x04\x12\x0c\n\x04\x66ree\x18\x02 \x01(\x04\x12\x0c\n\x04used\x18\x03 \x01(\x04\x12\x14\n\x0cused_percent\x18\x04 \x01(\x01\x12\x14\n\x0cinodes_total\x18\x05 \x01(\x04\x12\x13\n\x0binodes_used\x18\x06 \x01(\x04\x12\x13\n\x0binodes_free\x18\x07 \x01(\x04\x12\x1b\n\x13inodes_used_percent\x18\x08 \x01(\x01\x12\x16\n\x0eread_bandwidth\x18\t \x01(\x04\x12\x17\n\x0fwrite_bandwidth\x18\n \x01(\x04\x12*\n\x06\x63group\x18\x0b \x01(\x0b\x32\x15.common.v2.CgroupDiskH\x00\x88\x01\x01\x42\t\n\x07_cgroup\"=\n\nCgroupDisk\x12\x16\n\x0eread_bandwidth\x18\x01 \x01(\x04\x12\x17\n\x0fwrite_bandwidth\x18\x02 \x01(\x04\"\xbc\x01\n\x05\x42uild\x12\x13\n\x0bgit_version\x18\x01 \x01(\t\x12\x17\n\ngit_commit\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\ngo_version\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0crust_version\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x15\n\x08platform\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\r\n\x0b_git_commitB\r\n\x0b_go_versionB\x0f\n\r_rust_versionB\x0b\n\t_platform\"\x8e\x0c\n\x08\x44ownload\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x13\n\x06\x64igest\x18\x02 \x01(\tH\x00\x88\x01\x01\x12$\n\x05range\x18\x03 \x01(\x0b\x32\x10.common.v2.RangeH\x01\x88\x01\x01\x12!\n\x04type\x18\x04 \x01(\x0e\x32\x13.common.v2.TaskType\x12\x10\n\x03tag\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x61pplication\x18\x06 \x01(\tH\x03\x88\x01\x01\x12%\n\x08priority\x18\x07 \x01(\x0e\x32\x13.common.v2.Priority\x12\x1d\n\x15\x66iltered_query_params\x18\x08 \x03(\t\x12>\n\x0erequest_header\x18\t \x03(\x0b\x32&.common.v2.Download.RequestHeaderEntry\x12\x19\n\x0cpiece_length\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x18\n\x0boutput_path\x18\x0b \x01(\tH\x05\x88\x01\x01\x12/\n\x07timeout\x18\x0c \x01(\x0b\x32\x19.google.protobuf.DurationH\x06\x88\x01\x01\x12\x1e\n\x16\x64isable_back_to_source\x18\r \x01(\x08\x12\x1b\n\x13need_back_to_source\x18\x0e \x01(\x08\x12\x19\n\x11\x63\x65rtificate_chain\x18\x0f \x03(\x0c\x12\x10\n\x08prefetch\x18\x10 \x01(\x08\x12\x35\n\x0eobject_storage\x18\x11 \x01(\x0b\x32\x18.common.v2.ObjectStorageH\x07\x88\x01\x01\x12\"\n\x04hdfs\x18\x12 \x01(\x0b\x32\x0f.common.v2.HDFSH\x08\x88\x01\x01\x12\x13\n\x0bis_prefetch\x18\x13 \x01(\x08\x12\x1a\n\x12need_piece_content\x18\x14 \x01(\x08\x12\x17\n\x0f\x66orce_hard_link\x18\x16 \x01(\x08\x12,\n\x1f\x63ontent_for_calculating_task_id\x18\x17 \x01(\tH\t\x88\x01\x01\x12\x16\n\tremote_ip\x18\x18 \x01(\tH\n\x88\x01\x01\x12#\n\x16\x63oncurrent_piece_count\x18\x19 \x01(\rH\x0b\x88\x01\x01\x12\x11\n\toverwrite\x18\x1a \x01(\x08\x12 \n\x13\x61\x63tual_piece_length\x18\x1b \x01(\x04H\x0c\x88\x01\x01\x12\"\n\x15\x61\x63tual_content_length\x18\x1c \x01(\x04H\r\x88\x01\x01\x12\x1f\n\x12\x61\x63tual_piece_count\x18\x1d \x01(\x04H\x0e\x88\x01\x01\x12(\n enable_task_id_based_blob_digest\x18\x1e \x01(\x08\x12\x31\n\x0chugging_face\x18\x1f \x01(\x0b\x32\x16.common.v2.HuggingFaceH\x0f\x88\x01\x01\x12/\n\x0bmodel_scope\x18 \x01(\x0b\x32\x15.common.v2.ModelScopeH\x10\x88\x01\x01\x12\x15\n\rmetadata_only\x18! \x01(\x08\x12)\n\x08open_csg\x18\" \x01(\x0b\x32\x12.common.v2.OpenCSGH\x11\x88\x01\x01\x12\x36\n\x11scheduling_policy\x18# \x01(\x0e\x32\x1b.common.v2.SchedulingPolicy\x1a\x34\n\x12RequestHeaderEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_digestB\x08\n\x06_rangeB\x06\n\x04_tagB\x0e\n\x0c_applicationB\x0f\n\r_piece_lengthB\x0e\n\x0c_output_pathB\n\n\x08_timeoutB\x11\n\x0f_object_storageB\x07\n\x05_hdfsB\"\n _content_for_calculating_task_idB\x0c\n\n_remote_ipB\x19\n\x17_concurrent_piece_countB\x16\n\x14_actual_piece_lengthB\x18\n\x16_actual_content_lengthB\x15\n\x13_actual_piece_countB\x0f\n\r_hugging_faceB\x0e\n\x0c_model_scopeB\x0b\n\t_open_csgJ\x04\x08\x15\x10\x16R\rload_to_cache\"\xb3\x03\n\rObjectStorage\x12\x13\n\x06region\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08\x65ndpoint\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\raccess_key_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1e\n\x11\x61\x63\x63\x65ss_key_secret\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rsession_token\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x1c\n\x0f\x63redential_path\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0epredefined_acl\x18\x07 \x01(\tH\x06\x88\x01\x01\x12\x1b\n\x0esecurity_token\x18\x08 \x01(\tH\x07\x88\x01\x01\x12!\n\x14insecure_skip_verify\x18\t \x01(\x08H\x08\x88\x01\x01\x42\t\n\x07_regionB\x0b\n\t_endpointB\x10\n\x0e_access_key_idB\x14\n\x12_access_key_secretB\x10\n\x0e_session_tokenB\x12\n\x10_credential_pathB\x11\n\x0f_predefined_aclB\x11\n\x0f_security_tokenB\x17\n\x15_insecure_skip_verify\":\n\x04HDFS\x12\x1d\n\x10\x64\x65legation_token\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x13\n\x11_delegation_token\"a\n\x0bHuggingFace\x12\x12\n\x05token\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08revision\x18\x02 \x01(\t\x12\x15\n\x08\x62\x61se_url\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_tokenB\x0b\n\t_base_url\"`\n\nModelScope\x12\x12\n\x05token\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08revision\x18\x02 \x01(\t\x12\x15\n\x08\x62\x61se_url\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_tokenB\x0b\n\t_base_url\"]\n\x07OpenCSG\x12\x12\n\x05token\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08revision\x18\x02 \x01(\t\x12\x15\n\x08\x62\x61se_url\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_tokenB\x0b\n\t_base_url\"&\n\x05Range\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\"\xac\x02\n\x05Piece\x12\x0e\n\x06number\x18\x01 \x01(\r\x12\x16\n\tparent_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12\x0e\n\x06length\x18\x04 \x01(\x04\x12\x0e\n\x06\x64igest\x18\x05 \x01(\t\x12\x14\n\x07\x63ontent\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x31\n\x0ctraffic_type\x18\x07 \x01(\x0e\x32\x16.common.v2.TrafficTypeH\x02\x88\x01\x01\x12\'\n\x04\x63ost\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12.\n\ncreated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x0c\n\n_parent_idB\n\n\x08_contentB\x0f\n\r_traffic_type*7\n\tSizeScope\x12\n\n\x06NORMAL\x10\x00\x12\t\n\x05SMALL\x10\x01\x12\x08\n\x04TINY\x10\x02\x12\t\n\x05\x45MPTY\x10\x03*I\n\x08TaskType\x12\x0c\n\x08STANDARD\x10\x00\x12\x0e\n\nPERSISTENT\x10\x01\x12\x14\n\x10PERSISTENT_CACHE\x10\x02\x12\t\n\x05\x43\x41\x43HE\x10\x03*B\n\x0bTrafficType\x12\x12\n\x0e\x42\x41\x43K_TO_SOURCE\x10\x00\x12\x0f\n\x0bREMOTE_PEER\x10\x01\x12\x0e\n\nLOCAL_PEER\x10\x02*^\n\x08Priority\x12\n\n\x06LEVEL0\x10\x00\x12\n\n\x06LEVEL1\x10\x01\x12\n\n\x06LEVEL2\x10\x02\x12\n\n\x06LEVEL3\x10\x03\x12\n\n\x06LEVEL4\x10\x04\x12\n\n\x06LEVEL5\x10\x05\x12\n\n\x06LEVEL6\x10\x06*(\n\x10SchedulingPolicy\x12\x08\n\x04\x41UTO\x10\x00\x12\n\n\x06\x41LWAYS\x10\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -39,14 +39,16 @@ _globals['_CACHETASK_REQUESTHEADERENTRY']._serialized_options = b'8\001' _globals['_DOWNLOAD_REQUESTHEADERENTRY']._loaded_options = None _globals['_DOWNLOAD_REQUESTHEADERENTRY']._serialized_options = b'8\001' - _globals['_SIZESCOPE']._serialized_start=8358 - _globals['_SIZESCOPE']._serialized_end=8413 - _globals['_TASKTYPE']._serialized_start=8415 - _globals['_TASKTYPE']._serialized_end=8488 - _globals['_TRAFFICTYPE']._serialized_start=8490 - _globals['_TRAFFICTYPE']._serialized_end=8556 - _globals['_PRIORITY']._serialized_start=8558 - _globals['_PRIORITY']._serialized_end=8652 + _globals['_SIZESCOPE']._serialized_start=8389 + _globals['_SIZESCOPE']._serialized_end=8444 + _globals['_TASKTYPE']._serialized_start=8446 + _globals['_TASKTYPE']._serialized_end=8519 + _globals['_TRAFFICTYPE']._serialized_start=8521 + _globals['_TRAFFICTYPE']._serialized_end=8587 + _globals['_PRIORITY']._serialized_start=8589 + _globals['_PRIORITY']._serialized_end=8683 + _globals['_SCHEDULINGPOLICY']._serialized_start=8685 + _globals['_SCHEDULINGPOLICY']._serialized_end=8725 _globals['_PEER']._serialized_start=93 _globals['_PEER']._serialized_end=539 _globals['_CACHEPEER']._serialized_start=542 @@ -88,21 +90,21 @@ _globals['_BUILD']._serialized_start=5513 _globals['_BUILD']._serialized_end=5701 _globals['_DOWNLOAD']._serialized_start=5704 - _globals['_DOWNLOAD']._serialized_end=7223 + _globals['_DOWNLOAD']._serialized_end=7254 _globals['_DOWNLOAD_REQUESTHEADERENTRY']._serialized_start=2129 _globals['_DOWNLOAD_REQUESTHEADERENTRY']._serialized_end=2181 - _globals['_OBJECTSTORAGE']._serialized_start=7226 - _globals['_OBJECTSTORAGE']._serialized_end=7661 - _globals['_HDFS']._serialized_start=7663 - _globals['_HDFS']._serialized_end=7721 - _globals['_HUGGINGFACE']._serialized_start=7723 - _globals['_HUGGINGFACE']._serialized_end=7820 - _globals['_MODELSCOPE']._serialized_start=7822 - _globals['_MODELSCOPE']._serialized_end=7918 - _globals['_OPENCSG']._serialized_start=7920 - _globals['_OPENCSG']._serialized_end=8013 - _globals['_RANGE']._serialized_start=8015 - _globals['_RANGE']._serialized_end=8053 - _globals['_PIECE']._serialized_start=8056 - _globals['_PIECE']._serialized_end=8356 + _globals['_OBJECTSTORAGE']._serialized_start=7257 + _globals['_OBJECTSTORAGE']._serialized_end=7692 + _globals['_HDFS']._serialized_start=7694 + _globals['_HDFS']._serialized_end=7752 + _globals['_HUGGINGFACE']._serialized_start=7754 + _globals['_HUGGINGFACE']._serialized_end=7851 + _globals['_MODELSCOPE']._serialized_start=7853 + _globals['_MODELSCOPE']._serialized_end=7949 + _globals['_OPENCSG']._serialized_start=7951 + _globals['_OPENCSG']._serialized_end=8044 + _globals['_RANGE']._serialized_start=8046 + _globals['_RANGE']._serialized_end=8084 + _globals['_PIECE']._serialized_start=8087 + _globals['_PIECE']._serialized_end=8387 # @@protoc_insertion_point(module_scope) diff --git a/python/dragonfly_api/common_pb2.pyi b/python/dragonfly_api/common_pb2.pyi index 95f2aeb..ce8843a 100644 --- a/python/dragonfly_api/common_pb2.pyi +++ b/python/dragonfly_api/common_pb2.pyi @@ -40,6 +40,11 @@ class Priority(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): LEVEL4: _ClassVar[Priority] LEVEL5: _ClassVar[Priority] LEVEL6: _ClassVar[Priority] + +class SchedulingPolicy(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + AUTO: _ClassVar[SchedulingPolicy] + ALWAYS: _ClassVar[SchedulingPolicy] NORMAL: SizeScope SMALL: SizeScope TINY: SizeScope @@ -58,6 +63,8 @@ LEVEL3: Priority LEVEL4: Priority LEVEL5: Priority LEVEL6: Priority +AUTO: SchedulingPolicy +ALWAYS: SchedulingPolicy class Peer(_message.Message): __slots__ = ("id", "range", "priority", "pieces", "cost", "state", "task", "host", "need_back_to_source", "created_at", "updated_at", "concurrent_piece_count") @@ -494,7 +501,7 @@ class Build(_message.Message): def __init__(self, git_version: _Optional[str] = ..., git_commit: _Optional[str] = ..., go_version: _Optional[str] = ..., rust_version: _Optional[str] = ..., platform: _Optional[str] = ...) -> None: ... class Download(_message.Message): - __slots__ = ("url", "digest", "range", "type", "tag", "application", "priority", "filtered_query_params", "request_header", "piece_length", "output_path", "timeout", "disable_back_to_source", "need_back_to_source", "certificate_chain", "prefetch", "object_storage", "hdfs", "is_prefetch", "need_piece_content", "force_hard_link", "content_for_calculating_task_id", "remote_ip", "concurrent_piece_count", "overwrite", "actual_piece_length", "actual_content_length", "actual_piece_count", "enable_task_id_based_blob_digest", "hugging_face", "model_scope", "metadata_only", "open_csg", "need_scheduling") + __slots__ = ("url", "digest", "range", "type", "tag", "application", "priority", "filtered_query_params", "request_header", "piece_length", "output_path", "timeout", "disable_back_to_source", "need_back_to_source", "certificate_chain", "prefetch", "object_storage", "hdfs", "is_prefetch", "need_piece_content", "force_hard_link", "content_for_calculating_task_id", "remote_ip", "concurrent_piece_count", "overwrite", "actual_piece_length", "actual_content_length", "actual_piece_count", "enable_task_id_based_blob_digest", "hugging_face", "model_scope", "metadata_only", "open_csg", "scheduling_policy") class RequestHeaderEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -535,7 +542,7 @@ class Download(_message.Message): MODEL_SCOPE_FIELD_NUMBER: _ClassVar[int] METADATA_ONLY_FIELD_NUMBER: _ClassVar[int] OPEN_CSG_FIELD_NUMBER: _ClassVar[int] - NEED_SCHEDULING_FIELD_NUMBER: _ClassVar[int] + SCHEDULING_POLICY_FIELD_NUMBER: _ClassVar[int] url: str digest: str range: Range @@ -569,8 +576,8 @@ class Download(_message.Message): model_scope: ModelScope metadata_only: bool open_csg: OpenCSG - need_scheduling: bool - def __init__(self, url: _Optional[str] = ..., digest: _Optional[str] = ..., range: _Optional[_Union[Range, _Mapping]] = ..., type: _Optional[_Union[TaskType, str]] = ..., tag: _Optional[str] = ..., application: _Optional[str] = ..., priority: _Optional[_Union[Priority, str]] = ..., filtered_query_params: _Optional[_Iterable[str]] = ..., request_header: _Optional[_Mapping[str, str]] = ..., piece_length: _Optional[int] = ..., output_path: _Optional[str] = ..., timeout: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., disable_back_to_source: bool = ..., need_back_to_source: bool = ..., certificate_chain: _Optional[_Iterable[bytes]] = ..., prefetch: bool = ..., object_storage: _Optional[_Union[ObjectStorage, _Mapping]] = ..., hdfs: _Optional[_Union[HDFS, _Mapping]] = ..., is_prefetch: bool = ..., need_piece_content: bool = ..., force_hard_link: bool = ..., content_for_calculating_task_id: _Optional[str] = ..., remote_ip: _Optional[str] = ..., concurrent_piece_count: _Optional[int] = ..., overwrite: bool = ..., actual_piece_length: _Optional[int] = ..., actual_content_length: _Optional[int] = ..., actual_piece_count: _Optional[int] = ..., enable_task_id_based_blob_digest: bool = ..., hugging_face: _Optional[_Union[HuggingFace, _Mapping]] = ..., model_scope: _Optional[_Union[ModelScope, _Mapping]] = ..., metadata_only: bool = ..., open_csg: _Optional[_Union[OpenCSG, _Mapping]] = ..., need_scheduling: bool = ...) -> None: ... + scheduling_policy: SchedulingPolicy + def __init__(self, url: _Optional[str] = ..., digest: _Optional[str] = ..., range: _Optional[_Union[Range, _Mapping]] = ..., type: _Optional[_Union[TaskType, str]] = ..., tag: _Optional[str] = ..., application: _Optional[str] = ..., priority: _Optional[_Union[Priority, str]] = ..., filtered_query_params: _Optional[_Iterable[str]] = ..., request_header: _Optional[_Mapping[str, str]] = ..., piece_length: _Optional[int] = ..., output_path: _Optional[str] = ..., timeout: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., disable_back_to_source: bool = ..., need_back_to_source: bool = ..., certificate_chain: _Optional[_Iterable[bytes]] = ..., prefetch: bool = ..., object_storage: _Optional[_Union[ObjectStorage, _Mapping]] = ..., hdfs: _Optional[_Union[HDFS, _Mapping]] = ..., is_prefetch: bool = ..., need_piece_content: bool = ..., force_hard_link: bool = ..., content_for_calculating_task_id: _Optional[str] = ..., remote_ip: _Optional[str] = ..., concurrent_piece_count: _Optional[int] = ..., overwrite: bool = ..., actual_piece_length: _Optional[int] = ..., actual_content_length: _Optional[int] = ..., actual_piece_count: _Optional[int] = ..., enable_task_id_based_blob_digest: bool = ..., hugging_face: _Optional[_Union[HuggingFace, _Mapping]] = ..., model_scope: _Optional[_Union[ModelScope, _Mapping]] = ..., metadata_only: bool = ..., open_csg: _Optional[_Union[OpenCSG, _Mapping]] = ..., scheduling_policy: _Optional[_Union[SchedulingPolicy, str]] = ...) -> None: ... class ObjectStorage(_message.Message): __slots__ = ("region", "endpoint", "access_key_id", "access_key_secret", "session_token", "credential_path", "predefined_acl", "security_token", "insecure_skip_verify") diff --git a/src/common.v2.rs b/src/common.v2.rs index a1cdbd9..489a3e1 100644 --- a/src/common.v2.rs +++ b/src/common.v2.rs @@ -784,12 +784,10 @@ pub struct Download { /// OpenCSG protocol information. #[prost(message, optional, tag = "34")] pub open_csg: ::core::option::Option, - /// Need scheduling is the flag to indicate whether the download needs to be scheduled - /// by the scheduler even if the content length is smaller than the minimum piece length, - /// so that the peer announces the task to the scheduler and other peers can discover - /// it as a parent. - #[prost(bool, tag = "35")] - pub need_scheduling: bool, + /// Scheduling policy represents how the download interacts with the scheduler, + /// default is AUTO. + #[prost(enumeration = "SchedulingPolicy", tag = "35")] + pub scheduling_policy: i32, } /// Object Storage related information. #[derive(serde::Serialize, serde::Deserialize)] @@ -1105,3 +1103,37 @@ impl Priority { } } } +/// SchedulingPolicy represents how the download interacts with the scheduler. +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum SchedulingPolicy { + /// AUTO downloads through the scheduler unless the content length is smaller + /// than the minimum piece length, in which case it downloads from the source + /// directly, skipping the scheduler. + Auto = 0, + /// ALWAYS downloads through the scheduler even if the content length is smaller + /// than the minimum piece length, so that the peer announces the task to the + /// scheduler and other peers can discover it as a parent. + Always = 1, +} +impl SchedulingPolicy { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Self::Auto => "AUTO", + Self::Always => "ALWAYS", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "AUTO" => Some(Self::Auto), + "ALWAYS" => Some(Self::Always), + _ => None, + } + } +} diff --git a/src/descriptor.bin b/src/descriptor.bin index bd99bc08b05c83fb1f8998cccf6a7db3feb6d8a4..de434f39142ce625b9e193ce4d617371abcbe279 100644 GIT binary patch delta 15747 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 Ny=S!4y~iTI{BMB7f!hE8 delta 15328 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