diff --git a/Cargo.lock b/Cargo.lock index 939403c..0bd835d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -190,7 +190,7 @@ dependencies = [ [[package]] name = "dragonfly-api" -version = "2.1.4" +version = "2.1.5" dependencies = [ "prost", "prost-types", diff --git a/Cargo.toml b/Cargo.toml index 98215dd..c338a9f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dragonfly-api" -version = "2.1.4" +version = "2.1.5" authors = ["Gaius "] edition = "2021" license = "Apache-2.0" diff --git a/pkg/apis/dfdaemon/v2/dfdaemon.pb.go b/pkg/apis/dfdaemon/v2/dfdaemon.pb.go index c89faa5..6f3ecd5 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon.pb.go +++ b/pkg/apis/dfdaemon/v2/dfdaemon.pb.go @@ -721,6 +721,539 @@ func (x *DeleteTaskRequest) GetTaskId() string { return "" } +// WritePersistentCacheTaskResponse represents request of WritePersistentCacheTask. +type WritePersistentCacheTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Response: + // + // *WritePersistentCacheTaskRequest_WritePersistentCacheTaskStartedRequest + // *WritePersistentCacheTaskRequest_WritePersistentCacheTaskFinishedRequest + // *WritePersistentCacheTaskRequest_WriteChunkRequest + Response isWritePersistentCacheTaskRequest_Response `protobuf_oneof:"response"` +} + +func (x *WritePersistentCacheTaskRequest) Reset() { + *x = WritePersistentCacheTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WritePersistentCacheTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WritePersistentCacheTaskRequest) ProtoMessage() {} + +func (x *WritePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WritePersistentCacheTaskRequest.ProtoReflect.Descriptor instead. +func (*WritePersistentCacheTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{11} +} + +func (m *WritePersistentCacheTaskRequest) GetResponse() isWritePersistentCacheTaskRequest_Response { + if m != nil { + return m.Response + } + return nil +} + +func (x *WritePersistentCacheTaskRequest) GetWritePersistentCacheTaskStartedRequest() *WritePersistentCacheTaskStartedRequest { + if x, ok := x.GetResponse().(*WritePersistentCacheTaskRequest_WritePersistentCacheTaskStartedRequest); ok { + return x.WritePersistentCacheTaskStartedRequest + } + return nil +} + +func (x *WritePersistentCacheTaskRequest) GetWritePersistentCacheTaskFinishedRequest() *WritePersistentCacheTaskFinishedRequest { + if x, ok := x.GetResponse().(*WritePersistentCacheTaskRequest_WritePersistentCacheTaskFinishedRequest); ok { + return x.WritePersistentCacheTaskFinishedRequest + } + return nil +} + +func (x *WritePersistentCacheTaskRequest) GetWriteChunkRequest() *WriteChunkRequest { + if x, ok := x.GetResponse().(*WritePersistentCacheTaskRequest_WriteChunkRequest); ok { + return x.WriteChunkRequest + } + return nil +} + +type isWritePersistentCacheTaskRequest_Response interface { + isWritePersistentCacheTaskRequest_Response() +} + +type WritePersistentCacheTaskRequest_WritePersistentCacheTaskStartedRequest struct { + WritePersistentCacheTaskStartedRequest *WritePersistentCacheTaskStartedRequest `protobuf:"bytes,1,opt,name=write_persistent_cache_task_started_request,json=writePersistentCacheTaskStartedRequest,proto3,oneof"` +} + +type WritePersistentCacheTaskRequest_WritePersistentCacheTaskFinishedRequest struct { + WritePersistentCacheTaskFinishedRequest *WritePersistentCacheTaskFinishedRequest `protobuf:"bytes,2,opt,name=write_persistent_cache_task_finished_request,json=writePersistentCacheTaskFinishedRequest,proto3,oneof"` +} + +type WritePersistentCacheTaskRequest_WriteChunkRequest struct { + WriteChunkRequest *WriteChunkRequest `protobuf:"bytes,3,opt,name=write_chunk_request,json=writeChunkRequest,proto3,oneof"` +} + +func (*WritePersistentCacheTaskRequest_WritePersistentCacheTaskStartedRequest) isWritePersistentCacheTaskRequest_Response() { +} + +func (*WritePersistentCacheTaskRequest_WritePersistentCacheTaskFinishedRequest) isWritePersistentCacheTaskRequest_Response() { +} + +func (*WritePersistentCacheTaskRequest_WriteChunkRequest) isWritePersistentCacheTaskRequest_Response() { +} + +// WritePersistentCacheTaskStartedRequest represents task write started request of WritePersistentCacheTaskRequest. +type WritePersistentCacheTaskStartedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Replica count of the persistent persistent cache task. + PersistentReplicaCount uint64 `protobuf:"varint,1,opt,name=persistent_replica_count,json=persistentReplicaCount,proto3" json:"persistent_replica_count,omitempty"` + // Tag is used to distinguish different persistent cache tasks. + Tag *string `protobuf:"bytes,2,opt,name=tag,proto3,oneof" json:"tag,omitempty"` + // Application of task. + Application *string `protobuf:"bytes,3,opt,name=application,proto3,oneof" json:"application,omitempty"` + // TTL of the persistent cache task. + Ttl *durationpb.Duration `protobuf:"bytes,4,opt,name=ttl,proto3" json:"ttl,omitempty"` +} + +func (x *WritePersistentCacheTaskStartedRequest) Reset() { + *x = WritePersistentCacheTaskStartedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WritePersistentCacheTaskStartedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WritePersistentCacheTaskStartedRequest) ProtoMessage() {} + +func (x *WritePersistentCacheTaskStartedRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WritePersistentCacheTaskStartedRequest.ProtoReflect.Descriptor instead. +func (*WritePersistentCacheTaskStartedRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{12} +} + +func (x *WritePersistentCacheTaskStartedRequest) GetPersistentReplicaCount() uint64 { + if x != nil { + return x.PersistentReplicaCount + } + return 0 +} + +func (x *WritePersistentCacheTaskStartedRequest) GetTag() string { + if x != nil && x.Tag != nil { + return *x.Tag + } + return "" +} + +func (x *WritePersistentCacheTaskStartedRequest) GetApplication() string { + if x != nil && x.Application != nil { + return *x.Application + } + return "" +} + +func (x *WritePersistentCacheTaskStartedRequest) GetTtl() *durationpb.Duration { + if x != nil { + return x.Ttl + } + return nil +} + +// WritePersistentCacheTaskFinishedRequest represents task write finished request of WritePersistentCacheTaskRequest. +type WritePersistentCacheTaskFinishedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *WritePersistentCacheTaskFinishedRequest) Reset() { + *x = WritePersistentCacheTaskFinishedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WritePersistentCacheTaskFinishedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WritePersistentCacheTaskFinishedRequest) ProtoMessage() {} + +func (x *WritePersistentCacheTaskFinishedRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WritePersistentCacheTaskFinishedRequest.ProtoReflect.Descriptor instead. +func (*WritePersistentCacheTaskFinishedRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{13} +} + +// WriteChunkRequest represents chunk write request of WritePersistentCacheTaskRequest. +type WriteChunkRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Chunk content. + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *WriteChunkRequest) Reset() { + *x = WriteChunkRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteChunkRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteChunkRequest) ProtoMessage() {} + +func (x *WriteChunkRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteChunkRequest.ProtoReflect.Descriptor instead. +func (*WriteChunkRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{14} +} + +func (x *WriteChunkRequest) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +// WritePersistentCacheTaskResponse represents response of WritePersistentCacheTask. +type WritePersistentCacheTaskResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Task id. + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` +} + +func (x *WritePersistentCacheTaskResponse) Reset() { + *x = WritePersistentCacheTaskResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WritePersistentCacheTaskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WritePersistentCacheTaskResponse) ProtoMessage() {} + +func (x *WritePersistentCacheTaskResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WritePersistentCacheTaskResponse.ProtoReflect.Descriptor instead. +func (*WritePersistentCacheTaskResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{15} +} + +func (x *WritePersistentCacheTaskResponse) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +// ReadPersistentCacheTaskRequest represents request of ReadPersistentCacheTask. +type ReadPersistentCacheTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Task id. + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` +} + +func (x *ReadPersistentCacheTaskRequest) Reset() { + *x = ReadPersistentCacheTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReadPersistentCacheTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReadPersistentCacheTaskRequest) ProtoMessage() {} + +func (x *ReadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReadPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. +func (*ReadPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{16} +} + +func (x *ReadPersistentCacheTaskRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +// ReadPersistentCacheTaskResponse represents response of ReadPersistentCacheTask. +type ReadPersistentCacheTaskResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Response: + // + // *ReadPersistentCacheTaskResponse_ReadPersistentCacheTaskFinishedResponse + // *ReadPersistentCacheTaskResponse_ReadChunkResponse + Response isReadPersistentCacheTaskResponse_Response `protobuf_oneof:"response"` +} + +func (x *ReadPersistentCacheTaskResponse) Reset() { + *x = ReadPersistentCacheTaskResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReadPersistentCacheTaskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReadPersistentCacheTaskResponse) ProtoMessage() {} + +func (x *ReadPersistentCacheTaskResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReadPersistentCacheTaskResponse.ProtoReflect.Descriptor instead. +func (*ReadPersistentCacheTaskResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{17} +} + +func (m *ReadPersistentCacheTaskResponse) GetResponse() isReadPersistentCacheTaskResponse_Response { + if m != nil { + return m.Response + } + return nil +} + +func (x *ReadPersistentCacheTaskResponse) GetReadPersistentCacheTaskFinishedResponse() *ReadPersistentCacheTaskFinishedResponse { + if x, ok := x.GetResponse().(*ReadPersistentCacheTaskResponse_ReadPersistentCacheTaskFinishedResponse); ok { + return x.ReadPersistentCacheTaskFinishedResponse + } + return nil +} + +func (x *ReadPersistentCacheTaskResponse) GetReadChunkResponse() *ReadChunkResponse { + if x, ok := x.GetResponse().(*ReadPersistentCacheTaskResponse_ReadChunkResponse); ok { + return x.ReadChunkResponse + } + return nil +} + +type isReadPersistentCacheTaskResponse_Response interface { + isReadPersistentCacheTaskResponse_Response() +} + +type ReadPersistentCacheTaskResponse_ReadPersistentCacheTaskFinishedResponse struct { + ReadPersistentCacheTaskFinishedResponse *ReadPersistentCacheTaskFinishedResponse `protobuf:"bytes,1,opt,name=read_persistent_cache_task_finished_response,json=readPersistentCacheTaskFinishedResponse,proto3,oneof"` +} + +type ReadPersistentCacheTaskResponse_ReadChunkResponse struct { + ReadChunkResponse *ReadChunkResponse `protobuf:"bytes,2,opt,name=read_chunk_response,json=readChunkResponse,proto3,oneof"` +} + +func (*ReadPersistentCacheTaskResponse_ReadPersistentCacheTaskFinishedResponse) isReadPersistentCacheTaskResponse_Response() { +} + +func (*ReadPersistentCacheTaskResponse_ReadChunkResponse) isReadPersistentCacheTaskResponse_Response() { +} + +// ReadPersistentCacheTaskFinishedResponse represents task read finished response of ReadPersistentCacheTaskResponse. +type ReadPersistentCacheTaskFinishedResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ReadPersistentCacheTaskFinishedResponse) Reset() { + *x = ReadPersistentCacheTaskFinishedResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReadPersistentCacheTaskFinishedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReadPersistentCacheTaskFinishedResponse) ProtoMessage() {} + +func (x *ReadPersistentCacheTaskFinishedResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReadPersistentCacheTaskFinishedResponse.ProtoReflect.Descriptor instead. +func (*ReadPersistentCacheTaskFinishedResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{18} +} + +// ReadChunkResponse represents chunk read response of ReadPersistentCacheTaskResponse. +type ReadChunkResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Chunk content. + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *ReadChunkResponse) Reset() { + *x = ReadChunkResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReadChunkResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReadChunkResponse) ProtoMessage() {} + +func (x *ReadChunkResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReadChunkResponse.ProtoReflect.Descriptor instead. +func (*ReadChunkResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{19} +} + +func (x *ReadChunkResponse) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + // DownloadPersistentCacheTaskRequest represents request of DownloadPersistentCacheTask. type DownloadPersistentCacheTaskRequest struct { state protoimpl.MessageState @@ -748,7 +1281,7 @@ type DownloadPersistentCacheTaskRequest struct { func (x *DownloadPersistentCacheTaskRequest) Reset() { *x = DownloadPersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -761,7 +1294,7 @@ func (x *DownloadPersistentCacheTaskRequest) String() string { func (*DownloadPersistentCacheTaskRequest) ProtoMessage() {} func (x *DownloadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -774,7 +1307,7 @@ func (x *DownloadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message // Deprecated: Use DownloadPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. func (*DownloadPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{11} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{20} } func (x *DownloadPersistentCacheTaskRequest) GetTaskId() string { @@ -839,7 +1372,7 @@ type DownloadPersistentCacheTaskStartedResponse struct { func (x *DownloadPersistentCacheTaskStartedResponse) Reset() { *x = DownloadPersistentCacheTaskStartedResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -852,7 +1385,7 @@ func (x *DownloadPersistentCacheTaskStartedResponse) String() string { func (*DownloadPersistentCacheTaskStartedResponse) ProtoMessage() {} func (x *DownloadPersistentCacheTaskStartedResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -865,7 +1398,7 @@ func (x *DownloadPersistentCacheTaskStartedResponse) ProtoReflect() protoreflect // Deprecated: Use DownloadPersistentCacheTaskStartedResponse.ProtoReflect.Descriptor instead. func (*DownloadPersistentCacheTaskStartedResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{12} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{21} } func (x *DownloadPersistentCacheTaskStartedResponse) GetContentLength() uint64 { @@ -897,7 +1430,7 @@ type DownloadPersistentCacheTaskResponse struct { func (x *DownloadPersistentCacheTaskResponse) Reset() { *x = DownloadPersistentCacheTaskResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -910,7 +1443,7 @@ func (x *DownloadPersistentCacheTaskResponse) String() string { func (*DownloadPersistentCacheTaskResponse) ProtoMessage() {} func (x *DownloadPersistentCacheTaskResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -923,7 +1456,7 @@ func (x *DownloadPersistentCacheTaskResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use DownloadPersistentCacheTaskResponse.ProtoReflect.Descriptor instead. func (*DownloadPersistentCacheTaskResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{13} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{22} } func (x *DownloadPersistentCacheTaskResponse) GetHostId() string { @@ -1002,14 +1535,12 @@ type UploadPersistentCacheTaskRequest struct { Application *string `protobuf:"bytes,4,opt,name=application,proto3,oneof" json:"application,omitempty"` // TTL of the persistent cache task. Ttl *durationpb.Duration `protobuf:"bytes,5,opt,name=ttl,proto3" json:"ttl,omitempty"` - // Upload timeout. - Timeout *durationpb.Duration `protobuf:"bytes,6,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` } func (x *UploadPersistentCacheTaskRequest) Reset() { *x = UploadPersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1022,7 +1553,7 @@ func (x *UploadPersistentCacheTaskRequest) String() string { func (*UploadPersistentCacheTaskRequest) ProtoMessage() {} func (x *UploadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1035,7 +1566,7 @@ func (x *UploadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. func (*UploadPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{14} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{23} } func (x *UploadPersistentCacheTaskRequest) GetPath() string { @@ -1073,13 +1604,6 @@ func (x *UploadPersistentCacheTaskRequest) GetTtl() *durationpb.Duration { return nil } -func (x *UploadPersistentCacheTaskRequest) GetTimeout() *durationpb.Duration { - if x != nil { - return x.Timeout - } - return nil -} - // StatPersistentCacheTaskRequest represents request of StatPersistentCacheTask. type StatPersistentCacheTaskRequest struct { state protoimpl.MessageState @@ -1093,7 +1617,7 @@ type StatPersistentCacheTaskRequest struct { func (x *StatPersistentCacheTaskRequest) Reset() { *x = StatPersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1106,7 +1630,7 @@ func (x *StatPersistentCacheTaskRequest) String() string { func (*StatPersistentCacheTaskRequest) ProtoMessage() {} func (x *StatPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1119,7 +1643,7 @@ func (x *StatPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. func (*StatPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{15} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{24} } func (x *StatPersistentCacheTaskRequest) GetTaskId() string { @@ -1142,7 +1666,7 @@ type DeletePersistentCacheTaskRequest struct { func (x *DeletePersistentCacheTaskRequest) Reset() { *x = DeletePersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1155,7 +1679,7 @@ func (x *DeletePersistentCacheTaskRequest) String() string { func (*DeletePersistentCacheTaskRequest) ProtoMessage() {} func (x *DeletePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1168,7 +1692,7 @@ func (x *DeletePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeletePersistentCacheTaskRequest.ProtoReflect.Descriptor instead. func (*DeletePersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{16} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{25} } func (x *DeletePersistentCacheTaskRequest) GetTaskId() string { @@ -1193,7 +1717,7 @@ type SyncHostRequest struct { func (x *SyncHostRequest) Reset() { *x = SyncHostRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1206,7 +1730,7 @@ func (x *SyncHostRequest) String() string { func (*SyncHostRequest) ProtoMessage() {} func (x *SyncHostRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1219,7 +1743,7 @@ func (x *SyncHostRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncHostRequest.ProtoReflect.Descriptor instead. func (*SyncHostRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{17} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{26} } func (x *SyncHostRequest) GetHostId() string { @@ -1343,204 +1867,297 @@ var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDesc = []byte{ 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0xf2, - 0x02, 0x0a, 0x22, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0xb1, + 0x03, 0x0a, 0x1f, 0x57, 0x72, 0x69, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x92, 0x01, 0x0a, 0x2b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x74, 0x61, + 0x73, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x26, 0x77, 0x72, 0x69, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x95, 0x01, 0x0a, 0x2c, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x63, + 0x68, 0x65, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x27, 0x77, 0x72, 0x69, 0x74, 0x65, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x50, 0x0a, 0x13, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, + 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x11, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x42, 0x0f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x03, 0xf8, + 0x42, 0x01, 0x22, 0x82, 0x02, 0x0a, 0x26, 0x57, 0x72, 0x69, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, + 0x18, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, + 0x09, 0xfa, 0x42, 0x06, 0x32, 0x04, 0x18, 0x05, 0x28, 0x01, 0x52, 0x16, 0x70, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, + 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, + 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x04, 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, 0x10, 0xfa, 0x42, 0x0d, 0xaa, 0x01, 0x0a, + 0x22, 0x04, 0x08, 0x80, 0xf5, 0x24, 0x32, 0x02, 0x08, 0x3c, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x29, 0x0a, 0x27, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x36, 0x0a, 0x11, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x7a, 0x02, 0x10, + 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x44, 0x0a, 0x20, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, + 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, + 0x22, 0x42, 0x0a, 0x1e, 0x52, 0x65, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, + 0x73, 0x6b, 0x49, 0x64, 0x22, 0x9c, 0x02, 0x0a, 0x1f, 0x52, 0x65, 0x61, 0x64, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x2c, 0x72, 0x65, 0x61, + 0x64, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x63, + 0x68, 0x65, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x34, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x27, 0x72, 0x65, 0x61, 0x64, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x50, 0x0a, 0x13, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x61, 0x64, + 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x11, 0x72, 0x65, 0x61, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x0f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x03, + 0xf8, 0x42, 0x01, 0x22, 0x29, 0x0a, 0x27, 0x52, 0x65, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x46, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, + 0x0a, 0x11, 0x52, 0x65, 0x61, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x7a, 0x02, 0x10, 0x01, 0x52, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0xf2, 0x02, 0x0a, 0x22, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, + 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0b, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, + 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x02, + 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, + 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 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, 0x48, 0x03, 0x52, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x65, + 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, 0x65, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 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, + 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, 0x22, 0x53, 0x0a, 0x2a, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x22, 0xb4, 0x03, 0x0a, 0x23, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, + 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, + 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x9e, + 0x01, 0x0a, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x48, 0x00, 0x52, 0x2a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x75, 0x0a, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, + 0x65, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x66, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0x99, 0x02, 0x0a, 0x20, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x43, 0x0a, 0x18, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x09, 0xfa, 0x42, 0x06, + 0x32, 0x04, 0x18, 0x05, 0x28, 0x01, 0x52, 0x16, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, + 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x74, + 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0b, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3d, 0x0a, 0x03, + 0x74, 0x74, 0x6c, 0x18, 0x05, 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, 0x10, 0xfa, 0x42, 0x0d, 0xaa, 0x01, 0x0a, 0x22, 0x04, 0x08, 0x80, + 0xf5, 0x24, 0x32, 0x02, 0x08, 0x3c, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x42, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, - 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, - 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x02, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x18, 0x06, 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, 0x48, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, - 0x01, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, - 0x65, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 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, 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, 0x22, 0x53, 0x0a, 0x2a, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, - 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xb4, 0x03, 0x0a, 0x23, 0x44, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x44, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, + 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x55, 0x0a, + 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, - 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, - 0x73, 0x6b, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, - 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x9e, 0x01, 0x0a, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x63, - 0x61, 0x63, 0x68, 0x65, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x2a, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, - 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, - 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0f, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, - 0xdd, 0x02, 0x0a, 0x20, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x12, 0x41, 0x0a, 0x18, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, 0x02, 0x28, 0x01, 0x52, 0x16, 0x70, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x01, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, - 0x01, 0x01, 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 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, 0x10, 0xfa, 0x42, 0x0d, 0xaa, - 0x01, 0x0a, 0x22, 0x04, 0x08, 0x80, 0xf5, 0x24, 0x32, 0x02, 0x08, 0x3c, 0x52, 0x03, 0x74, 0x74, - 0x6c, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 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, 0x48, 0x02, 0x52, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 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, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, - 0x42, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, - 0x6b, 0x49, 0x64, 0x22, 0x44, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x0f, 0x53, 0x79, 0x6e, - 0x63, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, - 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, - 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, - 0x32, 0x9f, 0x06, 0x0a, 0x0e, 0x44, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x55, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, - 0x61, 0x73, 0x6b, 0x12, 0x20, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x08, 0x53, 0x74, - 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x44, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x0a, 0x53, - 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x66, 0x64, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x0d, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, 0x21, 0x2e, - 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x22, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x1b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x66, 0x0a, 0x17, 0x53, 0x74, 0x61, - 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2b, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x12, 0x62, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, - 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x08, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, - 0x74, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, - 0x30, 0x01, 0x32, 0xab, 0x06, 0x0a, 0x10, 0x44, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, + 0x65, 0x72, 0x49, 0x64, 0x32, 0x9f, 0x06, 0x0a, 0x0e, 0x44, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x20, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x44, - 0x0a, 0x0a, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1e, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, - 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x44, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1e, 0x2e, - 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, - 0x6f, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x82, 0x01, 0x0a, 0x1b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x39, + 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, + 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x44, 0x0a, 0x0a, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x4f, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x56, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, + 0x65, 0x12, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x1b, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x12, 0x2f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x66, 0x0a, + 0x17, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2b, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6a, 0x0a, 0x19, 0x55, 0x70, 0x6c, 0x6f, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x62, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x08, 0x53, 0x79, 0x6e, + 0x63, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x48, 0x6f, 0x73, 0x74, 0x30, 0x01, 0x32, 0x9e, 0x08, 0x0a, 0x10, 0x44, 0x66, 0x64, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x20, 0x2e, 0x64, 0x66, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x44, 0x0a, 0x0a, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, + 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, + 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x44, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, + 0x6b, 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x79, 0x0a, 0x18, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x2c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x28, 0x01, 0x12, 0x76, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2b, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x61, 0x64, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x66, 0x64, + 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x82, 0x01, 0x0a, 0x1b, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2f, 0x2e, 0x64, 0x66, 0x64, + 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x66, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x54, 0x61, 0x73, 0x6b, 0x12, 0x66, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x2b, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x62, 0x0a, 0x19, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x42, 0x2d, 0x5a, 0x2b, 0x64, 0x37, 0x79, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x32, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x64, 0x66, 0x64, 0x61, 0x65, - 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0x6a, 0x0a, 0x19, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, + 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x66, 0x0a, 0x17, 0x53, + 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2b, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x62, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x2d, 0x5a, 0x2b, 0x64, 0x37, 0x79, 0x2e, 0x69, + 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, + 0x73, 0x2f, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x64, 0x66, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1555,7 +2172,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP() []byte { return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescData } -var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes = make([]protoimpl.MessageInfo, 19) +var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_goTypes = []interface{}{ (*DownloadTaskRequest)(nil), // 0: dfdaemon.v2.DownloadTaskRequest (*DownloadTaskStartedResponse)(nil), // 1: dfdaemon.v2.DownloadTaskStartedResponse @@ -1568,79 +2185,97 @@ var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_goTypes = []interface{}{ (*UploadTaskRequest)(nil), // 8: dfdaemon.v2.UploadTaskRequest (*StatTaskRequest)(nil), // 9: dfdaemon.v2.StatTaskRequest (*DeleteTaskRequest)(nil), // 10: dfdaemon.v2.DeleteTaskRequest - (*DownloadPersistentCacheTaskRequest)(nil), // 11: dfdaemon.v2.DownloadPersistentCacheTaskRequest - (*DownloadPersistentCacheTaskStartedResponse)(nil), // 12: dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse - (*DownloadPersistentCacheTaskResponse)(nil), // 13: dfdaemon.v2.DownloadPersistentCacheTaskResponse - (*UploadPersistentCacheTaskRequest)(nil), // 14: dfdaemon.v2.UploadPersistentCacheTaskRequest - (*StatPersistentCacheTaskRequest)(nil), // 15: dfdaemon.v2.StatPersistentCacheTaskRequest - (*DeletePersistentCacheTaskRequest)(nil), // 16: dfdaemon.v2.DeletePersistentCacheTaskRequest - (*SyncHostRequest)(nil), // 17: dfdaemon.v2.SyncHostRequest - nil, // 18: dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry - (*v2.Download)(nil), // 19: common.v2.Download - (*v2.Range)(nil), // 20: common.v2.Range - (*v2.Piece)(nil), // 21: common.v2.Piece - (*v2.Task)(nil), // 22: common.v2.Task - (*durationpb.Duration)(nil), // 23: google.protobuf.Duration - (*emptypb.Empty)(nil), // 24: google.protobuf.Empty - (*v2.PersistentCacheTask)(nil), // 25: common.v2.PersistentCacheTask - (*v2.Host)(nil), // 26: common.v2.Host + (*WritePersistentCacheTaskRequest)(nil), // 11: dfdaemon.v2.WritePersistentCacheTaskRequest + (*WritePersistentCacheTaskStartedRequest)(nil), // 12: dfdaemon.v2.WritePersistentCacheTaskStartedRequest + (*WritePersistentCacheTaskFinishedRequest)(nil), // 13: dfdaemon.v2.WritePersistentCacheTaskFinishedRequest + (*WriteChunkRequest)(nil), // 14: dfdaemon.v2.WriteChunkRequest + (*WritePersistentCacheTaskResponse)(nil), // 15: dfdaemon.v2.WritePersistentCacheTaskResponse + (*ReadPersistentCacheTaskRequest)(nil), // 16: dfdaemon.v2.ReadPersistentCacheTaskRequest + (*ReadPersistentCacheTaskResponse)(nil), // 17: dfdaemon.v2.ReadPersistentCacheTaskResponse + (*ReadPersistentCacheTaskFinishedResponse)(nil), // 18: dfdaemon.v2.ReadPersistentCacheTaskFinishedResponse + (*ReadChunkResponse)(nil), // 19: dfdaemon.v2.ReadChunkResponse + (*DownloadPersistentCacheTaskRequest)(nil), // 20: dfdaemon.v2.DownloadPersistentCacheTaskRequest + (*DownloadPersistentCacheTaskStartedResponse)(nil), // 21: dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse + (*DownloadPersistentCacheTaskResponse)(nil), // 22: dfdaemon.v2.DownloadPersistentCacheTaskResponse + (*UploadPersistentCacheTaskRequest)(nil), // 23: dfdaemon.v2.UploadPersistentCacheTaskRequest + (*StatPersistentCacheTaskRequest)(nil), // 24: dfdaemon.v2.StatPersistentCacheTaskRequest + (*DeletePersistentCacheTaskRequest)(nil), // 25: dfdaemon.v2.DeletePersistentCacheTaskRequest + (*SyncHostRequest)(nil), // 26: dfdaemon.v2.SyncHostRequest + nil, // 27: dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry + (*v2.Download)(nil), // 28: common.v2.Download + (*v2.Range)(nil), // 29: common.v2.Range + (*v2.Piece)(nil), // 30: common.v2.Piece + (*v2.Task)(nil), // 31: common.v2.Task + (*durationpb.Duration)(nil), // 32: google.protobuf.Duration + (*emptypb.Empty)(nil), // 33: google.protobuf.Empty + (*v2.PersistentCacheTask)(nil), // 34: common.v2.PersistentCacheTask + (*v2.Host)(nil), // 35: common.v2.Host } var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_depIdxs = []int32{ - 19, // 0: dfdaemon.v2.DownloadTaskRequest.download:type_name -> common.v2.Download - 20, // 1: dfdaemon.v2.DownloadTaskStartedResponse.range:type_name -> common.v2.Range - 18, // 2: dfdaemon.v2.DownloadTaskStartedResponse.response_header:type_name -> dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry - 21, // 3: dfdaemon.v2.DownloadTaskStartedResponse.pieces:type_name -> common.v2.Piece - 21, // 4: dfdaemon.v2.DownloadPieceFinishedResponse.piece:type_name -> common.v2.Piece + 28, // 0: dfdaemon.v2.DownloadTaskRequest.download:type_name -> common.v2.Download + 29, // 1: dfdaemon.v2.DownloadTaskStartedResponse.range:type_name -> common.v2.Range + 27, // 2: dfdaemon.v2.DownloadTaskStartedResponse.response_header:type_name -> dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry + 30, // 3: dfdaemon.v2.DownloadTaskStartedResponse.pieces:type_name -> common.v2.Piece + 30, // 4: dfdaemon.v2.DownloadPieceFinishedResponse.piece:type_name -> common.v2.Piece 1, // 5: dfdaemon.v2.DownloadTaskResponse.download_task_started_response:type_name -> dfdaemon.v2.DownloadTaskStartedResponse 2, // 6: dfdaemon.v2.DownloadTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse - 21, // 7: dfdaemon.v2.DownloadPieceResponse.piece:type_name -> common.v2.Piece - 22, // 8: dfdaemon.v2.UploadTaskRequest.task:type_name -> common.v2.Task - 23, // 9: dfdaemon.v2.DownloadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration - 12, // 10: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_persistent_cache_task_started_response:type_name -> dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse - 2, // 11: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse - 23, // 12: dfdaemon.v2.UploadPersistentCacheTaskRequest.ttl:type_name -> google.protobuf.Duration - 23, // 13: dfdaemon.v2.UploadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration - 0, // 14: dfdaemon.v2.DfdaemonUpload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest - 9, // 15: dfdaemon.v2.DfdaemonUpload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest - 10, // 16: dfdaemon.v2.DfdaemonUpload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest - 4, // 17: dfdaemon.v2.DfdaemonUpload.SyncPieces:input_type -> dfdaemon.v2.SyncPiecesRequest - 6, // 18: dfdaemon.v2.DfdaemonUpload.DownloadPiece:input_type -> dfdaemon.v2.DownloadPieceRequest - 11, // 19: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest - 15, // 20: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest - 16, // 21: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:input_type -> dfdaemon.v2.DeletePersistentCacheTaskRequest - 17, // 22: dfdaemon.v2.DfdaemonUpload.SyncHost:input_type -> dfdaemon.v2.SyncHostRequest - 0, // 23: dfdaemon.v2.DfdaemonDownload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest - 8, // 24: dfdaemon.v2.DfdaemonDownload.UploadTask:input_type -> dfdaemon.v2.UploadTaskRequest - 9, // 25: dfdaemon.v2.DfdaemonDownload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest - 10, // 26: dfdaemon.v2.DfdaemonDownload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest - 24, // 27: dfdaemon.v2.DfdaemonDownload.DeleteHost:input_type -> google.protobuf.Empty - 11, // 28: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest - 14, // 29: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:input_type -> dfdaemon.v2.UploadPersistentCacheTaskRequest - 15, // 30: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest - 16, // 31: dfdaemon.v2.DfdaemonDownload.DeletePersistentCacheTask:input_type -> dfdaemon.v2.DeletePersistentCacheTaskRequest - 3, // 32: dfdaemon.v2.DfdaemonUpload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse - 22, // 33: dfdaemon.v2.DfdaemonUpload.StatTask:output_type -> common.v2.Task - 24, // 34: dfdaemon.v2.DfdaemonUpload.DeleteTask:output_type -> google.protobuf.Empty - 5, // 35: dfdaemon.v2.DfdaemonUpload.SyncPieces:output_type -> dfdaemon.v2.SyncPiecesResponse - 7, // 36: dfdaemon.v2.DfdaemonUpload.DownloadPiece:output_type -> dfdaemon.v2.DownloadPieceResponse - 13, // 37: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse - 25, // 38: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask - 24, // 39: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:output_type -> google.protobuf.Empty - 26, // 40: dfdaemon.v2.DfdaemonUpload.SyncHost:output_type -> common.v2.Host - 3, // 41: dfdaemon.v2.DfdaemonDownload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse - 24, // 42: dfdaemon.v2.DfdaemonDownload.UploadTask:output_type -> google.protobuf.Empty - 22, // 43: dfdaemon.v2.DfdaemonDownload.StatTask:output_type -> common.v2.Task - 24, // 44: dfdaemon.v2.DfdaemonDownload.DeleteTask:output_type -> google.protobuf.Empty - 24, // 45: dfdaemon.v2.DfdaemonDownload.DeleteHost:output_type -> google.protobuf.Empty - 13, // 46: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse - 25, // 47: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:output_type -> common.v2.PersistentCacheTask - 25, // 48: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask - 24, // 49: dfdaemon.v2.DfdaemonDownload.DeletePersistentCacheTask:output_type -> google.protobuf.Empty - 32, // [32:50] is the sub-list for method output_type - 14, // [14:32] is the sub-list for method input_type - 14, // [14:14] is the sub-list for extension type_name - 14, // [14:14] is the sub-list for extension extendee - 0, // [0:14] is the sub-list for field type_name + 30, // 7: dfdaemon.v2.DownloadPieceResponse.piece:type_name -> common.v2.Piece + 31, // 8: dfdaemon.v2.UploadTaskRequest.task:type_name -> common.v2.Task + 12, // 9: dfdaemon.v2.WritePersistentCacheTaskRequest.write_persistent_cache_task_started_request:type_name -> dfdaemon.v2.WritePersistentCacheTaskStartedRequest + 13, // 10: dfdaemon.v2.WritePersistentCacheTaskRequest.write_persistent_cache_task_finished_request:type_name -> dfdaemon.v2.WritePersistentCacheTaskFinishedRequest + 14, // 11: dfdaemon.v2.WritePersistentCacheTaskRequest.write_chunk_request:type_name -> dfdaemon.v2.WriteChunkRequest + 32, // 12: dfdaemon.v2.WritePersistentCacheTaskStartedRequest.ttl:type_name -> google.protobuf.Duration + 18, // 13: dfdaemon.v2.ReadPersistentCacheTaskResponse.read_persistent_cache_task_finished_response:type_name -> dfdaemon.v2.ReadPersistentCacheTaskFinishedResponse + 19, // 14: dfdaemon.v2.ReadPersistentCacheTaskResponse.read_chunk_response:type_name -> dfdaemon.v2.ReadChunkResponse + 32, // 15: dfdaemon.v2.DownloadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration + 21, // 16: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_persistent_cache_task_started_response:type_name -> dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse + 2, // 17: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse + 32, // 18: dfdaemon.v2.UploadPersistentCacheTaskRequest.ttl:type_name -> google.protobuf.Duration + 0, // 19: dfdaemon.v2.DfdaemonUpload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest + 9, // 20: dfdaemon.v2.DfdaemonUpload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest + 10, // 21: dfdaemon.v2.DfdaemonUpload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest + 4, // 22: dfdaemon.v2.DfdaemonUpload.SyncPieces:input_type -> dfdaemon.v2.SyncPiecesRequest + 6, // 23: dfdaemon.v2.DfdaemonUpload.DownloadPiece:input_type -> dfdaemon.v2.DownloadPieceRequest + 20, // 24: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest + 24, // 25: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest + 25, // 26: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:input_type -> dfdaemon.v2.DeletePersistentCacheTaskRequest + 26, // 27: dfdaemon.v2.DfdaemonUpload.SyncHost:input_type -> dfdaemon.v2.SyncHostRequest + 0, // 28: dfdaemon.v2.DfdaemonDownload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest + 8, // 29: dfdaemon.v2.DfdaemonDownload.UploadTask:input_type -> dfdaemon.v2.UploadTaskRequest + 9, // 30: dfdaemon.v2.DfdaemonDownload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest + 10, // 31: dfdaemon.v2.DfdaemonDownload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest + 33, // 32: dfdaemon.v2.DfdaemonDownload.DeleteHost:input_type -> google.protobuf.Empty + 11, // 33: dfdaemon.v2.DfdaemonDownload.WritePersistentCacheTask:input_type -> dfdaemon.v2.WritePersistentCacheTaskRequest + 16, // 34: dfdaemon.v2.DfdaemonDownload.ReadPersistentCacheTask:input_type -> dfdaemon.v2.ReadPersistentCacheTaskRequest + 20, // 35: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest + 23, // 36: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:input_type -> dfdaemon.v2.UploadPersistentCacheTaskRequest + 24, // 37: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest + 25, // 38: dfdaemon.v2.DfdaemonDownload.DeletePersistentCacheTask:input_type -> dfdaemon.v2.DeletePersistentCacheTaskRequest + 3, // 39: dfdaemon.v2.DfdaemonUpload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse + 31, // 40: dfdaemon.v2.DfdaemonUpload.StatTask:output_type -> common.v2.Task + 33, // 41: dfdaemon.v2.DfdaemonUpload.DeleteTask:output_type -> google.protobuf.Empty + 5, // 42: dfdaemon.v2.DfdaemonUpload.SyncPieces:output_type -> dfdaemon.v2.SyncPiecesResponse + 7, // 43: dfdaemon.v2.DfdaemonUpload.DownloadPiece:output_type -> dfdaemon.v2.DownloadPieceResponse + 22, // 44: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse + 34, // 45: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask + 33, // 46: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:output_type -> google.protobuf.Empty + 35, // 47: dfdaemon.v2.DfdaemonUpload.SyncHost:output_type -> common.v2.Host + 3, // 48: dfdaemon.v2.DfdaemonDownload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse + 33, // 49: dfdaemon.v2.DfdaemonDownload.UploadTask:output_type -> google.protobuf.Empty + 31, // 50: dfdaemon.v2.DfdaemonDownload.StatTask:output_type -> common.v2.Task + 33, // 51: dfdaemon.v2.DfdaemonDownload.DeleteTask:output_type -> google.protobuf.Empty + 33, // 52: dfdaemon.v2.DfdaemonDownload.DeleteHost:output_type -> google.protobuf.Empty + 15, // 53: dfdaemon.v2.DfdaemonDownload.WritePersistentCacheTask:output_type -> dfdaemon.v2.WritePersistentCacheTaskResponse + 17, // 54: dfdaemon.v2.DfdaemonDownload.ReadPersistentCacheTask:output_type -> dfdaemon.v2.ReadPersistentCacheTaskResponse + 22, // 55: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse + 34, // 56: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:output_type -> common.v2.PersistentCacheTask + 34, // 57: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask + 33, // 58: dfdaemon.v2.DfdaemonDownload.DeletePersistentCacheTask:output_type -> google.protobuf.Empty + 39, // [39:59] is the sub-list for method output_type + 19, // [19:39] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() } @@ -1782,7 +2417,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCacheTaskRequest); i { + switch v := v.(*WritePersistentCacheTaskRequest); i { case 0: return &v.state case 1: @@ -1794,7 +2429,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCacheTaskStartedResponse); i { + switch v := v.(*WritePersistentCacheTaskStartedRequest); i { case 0: return &v.state case 1: @@ -1806,7 +2441,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCacheTaskResponse); i { + switch v := v.(*WritePersistentCacheTaskFinishedRequest); i { case 0: return &v.state case 1: @@ -1818,7 +2453,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UploadPersistentCacheTaskRequest); i { + switch v := v.(*WriteChunkRequest); i { case 0: return &v.state case 1: @@ -1830,7 +2465,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatPersistentCacheTaskRequest); i { + switch v := v.(*WritePersistentCacheTaskResponse); i { case 0: return &v.state case 1: @@ -1842,7 +2477,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeletePersistentCacheTaskRequest); i { + switch v := v.(*ReadPersistentCacheTaskRequest); i { case 0: return &v.state case 1: @@ -1854,6 +2489,114 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReadPersistentCacheTaskResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReadPersistentCacheTaskFinishedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReadChunkResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DownloadPersistentCacheTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DownloadPersistentCacheTaskStartedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DownloadPersistentCacheTaskResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UploadPersistentCacheTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatPersistentCacheTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeletePersistentCacheTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncHostRequest); i { case 0: return &v.state @@ -1871,19 +2614,29 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { (*DownloadTaskResponse_DownloadTaskStartedResponse)(nil), (*DownloadTaskResponse_DownloadPieceFinishedResponse)(nil), } - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13].OneofWrappers = []interface{}{ + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11].OneofWrappers = []interface{}{ + (*WritePersistentCacheTaskRequest_WritePersistentCacheTaskStartedRequest)(nil), + (*WritePersistentCacheTaskRequest_WritePersistentCacheTaskFinishedRequest)(nil), + (*WritePersistentCacheTaskRequest_WriteChunkRequest)(nil), + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17].OneofWrappers = []interface{}{ + (*ReadPersistentCacheTaskResponse_ReadPersistentCacheTaskFinishedResponse)(nil), + (*ReadPersistentCacheTaskResponse_ReadChunkResponse)(nil), + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22].OneofWrappers = []interface{}{ (*DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse)(nil), (*DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse)(nil), } - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDesc, NumEnums: 0, - NumMessages: 19, + NumMessages: 28, NumExtensions: 0, NumServices: 2, }, diff --git a/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go b/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go index 149d139..54c6b60 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go +++ b/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go @@ -1606,6 +1606,1278 @@ var _ interface { ErrorName() string } = DeleteTaskRequestValidationError{} +// Validate checks the field values on WritePersistentCacheTaskRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *WritePersistentCacheTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WritePersistentCacheTaskRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// WritePersistentCacheTaskRequestMultiError, or nil if none found. +func (m *WritePersistentCacheTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *WritePersistentCacheTaskRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + oneofResponsePresent := false + switch v := m.Response.(type) { + case *WritePersistentCacheTaskRequest_WritePersistentCacheTaskStartedRequest: + if v == nil { + err := WritePersistentCacheTaskRequestValidationError{ + field: "Response", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofResponsePresent = true + + if all { + switch v := interface{}(m.GetWritePersistentCacheTaskStartedRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, WritePersistentCacheTaskRequestValidationError{ + field: "WritePersistentCacheTaskStartedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, WritePersistentCacheTaskRequestValidationError{ + field: "WritePersistentCacheTaskStartedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWritePersistentCacheTaskStartedRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WritePersistentCacheTaskRequestValidationError{ + field: "WritePersistentCacheTaskStartedRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *WritePersistentCacheTaskRequest_WritePersistentCacheTaskFinishedRequest: + if v == nil { + err := WritePersistentCacheTaskRequestValidationError{ + field: "Response", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofResponsePresent = true + + if all { + switch v := interface{}(m.GetWritePersistentCacheTaskFinishedRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, WritePersistentCacheTaskRequestValidationError{ + field: "WritePersistentCacheTaskFinishedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, WritePersistentCacheTaskRequestValidationError{ + field: "WritePersistentCacheTaskFinishedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWritePersistentCacheTaskFinishedRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WritePersistentCacheTaskRequestValidationError{ + field: "WritePersistentCacheTaskFinishedRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *WritePersistentCacheTaskRequest_WriteChunkRequest: + if v == nil { + err := WritePersistentCacheTaskRequestValidationError{ + field: "Response", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofResponsePresent = true + + if all { + switch v := interface{}(m.GetWriteChunkRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, WritePersistentCacheTaskRequestValidationError{ + field: "WriteChunkRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, WritePersistentCacheTaskRequestValidationError{ + field: "WriteChunkRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWriteChunkRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WritePersistentCacheTaskRequestValidationError{ + field: "WriteChunkRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + if !oneofResponsePresent { + err := WritePersistentCacheTaskRequestValidationError{ + field: "Response", + reason: "value is required", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return WritePersistentCacheTaskRequestMultiError(errors) + } + + return nil +} + +// WritePersistentCacheTaskRequestMultiError is an error wrapping multiple +// validation errors returned by WritePersistentCacheTaskRequest.ValidateAll() +// if the designated constraints aren't met. +type WritePersistentCacheTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WritePersistentCacheTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WritePersistentCacheTaskRequestMultiError) AllErrors() []error { return m } + +// WritePersistentCacheTaskRequestValidationError is the validation error +// returned by WritePersistentCacheTaskRequest.Validate if the designated +// constraints aren't met. +type WritePersistentCacheTaskRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e WritePersistentCacheTaskRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e WritePersistentCacheTaskRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e WritePersistentCacheTaskRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e WritePersistentCacheTaskRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e WritePersistentCacheTaskRequestValidationError) ErrorName() string { + return "WritePersistentCacheTaskRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e WritePersistentCacheTaskRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sWritePersistentCacheTaskRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = WritePersistentCacheTaskRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = WritePersistentCacheTaskRequestValidationError{} + +// Validate checks the field values on WritePersistentCacheTaskStartedRequest +// with the rules defined in the proto definition for this message. If any +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. +func (m *WritePersistentCacheTaskStartedRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on +// WritePersistentCacheTaskStartedRequest with the rules defined in the proto +// definition for this message. If any rules are violated, the result is a +// list of violation errors wrapped in +// WritePersistentCacheTaskStartedRequestMultiError, or nil if none found. +func (m *WritePersistentCacheTaskStartedRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *WritePersistentCacheTaskStartedRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if val := m.GetPersistentReplicaCount(); val < 1 || val > 5 { + err := WritePersistentCacheTaskStartedRequestValidationError{ + field: "PersistentReplicaCount", + reason: "value must be inside range [1, 5]", + } + if !all { + return err + } + errors = append(errors, err) + } + + if d := m.GetTtl(); d != nil { + dur, err := d.AsDuration(), d.CheckValid() + if err != nil { + err = WritePersistentCacheTaskStartedRequestValidationError{ + field: "Ttl", + reason: "value is not a valid duration", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } else { + + lte := time.Duration(604800*time.Second + 0*time.Nanosecond) + gte := time.Duration(60*time.Second + 0*time.Nanosecond) + + if dur < gte || dur > lte { + err := WritePersistentCacheTaskStartedRequestValidationError{ + field: "Ttl", + reason: "value must be inside range [1m0s, 168h0m0s]", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + } + + if m.Tag != nil { + // no validation rules for Tag + } + + if m.Application != nil { + // no validation rules for Application + } + + if len(errors) > 0 { + return WritePersistentCacheTaskStartedRequestMultiError(errors) + } + + return nil +} + +// WritePersistentCacheTaskStartedRequestMultiError is an error wrapping +// multiple validation errors returned by +// WritePersistentCacheTaskStartedRequest.ValidateAll() if the designated +// constraints aren't met. +type WritePersistentCacheTaskStartedRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WritePersistentCacheTaskStartedRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WritePersistentCacheTaskStartedRequestMultiError) AllErrors() []error { return m } + +// WritePersistentCacheTaskStartedRequestValidationError is the validation +// error returned by WritePersistentCacheTaskStartedRequest.Validate if the +// designated constraints aren't met. +type WritePersistentCacheTaskStartedRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e WritePersistentCacheTaskStartedRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e WritePersistentCacheTaskStartedRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e WritePersistentCacheTaskStartedRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e WritePersistentCacheTaskStartedRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e WritePersistentCacheTaskStartedRequestValidationError) ErrorName() string { + return "WritePersistentCacheTaskStartedRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e WritePersistentCacheTaskStartedRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sWritePersistentCacheTaskStartedRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = WritePersistentCacheTaskStartedRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = WritePersistentCacheTaskStartedRequestValidationError{} + +// Validate checks the field values on WritePersistentCacheTaskFinishedRequest +// with the rules defined in the proto definition for this message. If any +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. +func (m *WritePersistentCacheTaskFinishedRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on +// WritePersistentCacheTaskFinishedRequest with the rules defined in the proto +// definition for this message. If any rules are violated, the result is a +// list of violation errors wrapped in +// WritePersistentCacheTaskFinishedRequestMultiError, or nil if none found. +func (m *WritePersistentCacheTaskFinishedRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *WritePersistentCacheTaskFinishedRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return WritePersistentCacheTaskFinishedRequestMultiError(errors) + } + + return nil +} + +// WritePersistentCacheTaskFinishedRequestMultiError is an error wrapping +// multiple validation errors returned by +// WritePersistentCacheTaskFinishedRequest.ValidateAll() if the designated +// constraints aren't met. +type WritePersistentCacheTaskFinishedRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WritePersistentCacheTaskFinishedRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WritePersistentCacheTaskFinishedRequestMultiError) AllErrors() []error { return m } + +// WritePersistentCacheTaskFinishedRequestValidationError is the validation +// error returned by WritePersistentCacheTaskFinishedRequest.Validate if the +// designated constraints aren't met. +type WritePersistentCacheTaskFinishedRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e WritePersistentCacheTaskFinishedRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e WritePersistentCacheTaskFinishedRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e WritePersistentCacheTaskFinishedRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e WritePersistentCacheTaskFinishedRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e WritePersistentCacheTaskFinishedRequestValidationError) ErrorName() string { + return "WritePersistentCacheTaskFinishedRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e WritePersistentCacheTaskFinishedRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sWritePersistentCacheTaskFinishedRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = WritePersistentCacheTaskFinishedRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = WritePersistentCacheTaskFinishedRequestValidationError{} + +// Validate checks the field values on WriteChunkRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *WriteChunkRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WriteChunkRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// WriteChunkRequestMultiError, or nil if none found. +func (m *WriteChunkRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *WriteChunkRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(m.GetContent()) < 1 { + err := WriteChunkRequestValidationError{ + field: "Content", + reason: "value length must be at least 1 bytes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return WriteChunkRequestMultiError(errors) + } + + return nil +} + +// WriteChunkRequestMultiError is an error wrapping multiple validation errors +// returned by WriteChunkRequest.ValidateAll() if the designated constraints +// aren't met. +type WriteChunkRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WriteChunkRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WriteChunkRequestMultiError) AllErrors() []error { return m } + +// WriteChunkRequestValidationError is the validation error returned by +// WriteChunkRequest.Validate if the designated constraints aren't met. +type WriteChunkRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e WriteChunkRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e WriteChunkRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e WriteChunkRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e WriteChunkRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e WriteChunkRequestValidationError) ErrorName() string { + return "WriteChunkRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e WriteChunkRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sWriteChunkRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = WriteChunkRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = WriteChunkRequestValidationError{} + +// Validate checks the field values on WritePersistentCacheTaskResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *WritePersistentCacheTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WritePersistentCacheTaskResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// WritePersistentCacheTaskResponseMultiError, or nil if none found. +func (m *WritePersistentCacheTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *WritePersistentCacheTaskResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := WritePersistentCacheTaskResponseValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return WritePersistentCacheTaskResponseMultiError(errors) + } + + return nil +} + +// WritePersistentCacheTaskResponseMultiError is an error wrapping multiple +// validation errors returned by +// WritePersistentCacheTaskResponse.ValidateAll() if the designated +// constraints aren't met. +type WritePersistentCacheTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WritePersistentCacheTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WritePersistentCacheTaskResponseMultiError) AllErrors() []error { return m } + +// WritePersistentCacheTaskResponseValidationError is the validation error +// returned by WritePersistentCacheTaskResponse.Validate if the designated +// constraints aren't met. +type WritePersistentCacheTaskResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e WritePersistentCacheTaskResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e WritePersistentCacheTaskResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e WritePersistentCacheTaskResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e WritePersistentCacheTaskResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e WritePersistentCacheTaskResponseValidationError) ErrorName() string { + return "WritePersistentCacheTaskResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e WritePersistentCacheTaskResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sWritePersistentCacheTaskResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = WritePersistentCacheTaskResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = WritePersistentCacheTaskResponseValidationError{} + +// Validate checks the field values on ReadPersistentCacheTaskRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ReadPersistentCacheTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ReadPersistentCacheTaskRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ReadPersistentCacheTaskRequestMultiError, or nil if none found. +func (m *ReadPersistentCacheTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ReadPersistentCacheTaskRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := ReadPersistentCacheTaskRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ReadPersistentCacheTaskRequestMultiError(errors) + } + + return nil +} + +// ReadPersistentCacheTaskRequestMultiError is an error wrapping multiple +// validation errors returned by ReadPersistentCacheTaskRequest.ValidateAll() +// if the designated constraints aren't met. +type ReadPersistentCacheTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ReadPersistentCacheTaskRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ReadPersistentCacheTaskRequestMultiError) AllErrors() []error { return m } + +// ReadPersistentCacheTaskRequestValidationError is the validation error +// returned by ReadPersistentCacheTaskRequest.Validate if the designated +// constraints aren't met. +type ReadPersistentCacheTaskRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ReadPersistentCacheTaskRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ReadPersistentCacheTaskRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ReadPersistentCacheTaskRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ReadPersistentCacheTaskRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ReadPersistentCacheTaskRequestValidationError) ErrorName() string { + return "ReadPersistentCacheTaskRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ReadPersistentCacheTaskRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sReadPersistentCacheTaskRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ReadPersistentCacheTaskRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ReadPersistentCacheTaskRequestValidationError{} + +// Validate checks the field values on ReadPersistentCacheTaskResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ReadPersistentCacheTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ReadPersistentCacheTaskResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ReadPersistentCacheTaskResponseMultiError, or nil if none found. +func (m *ReadPersistentCacheTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ReadPersistentCacheTaskResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + oneofResponsePresent := false + switch v := m.Response.(type) { + case *ReadPersistentCacheTaskResponse_ReadPersistentCacheTaskFinishedResponse: + if v == nil { + err := ReadPersistentCacheTaskResponseValidationError{ + field: "Response", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofResponsePresent = true + + if all { + switch v := interface{}(m.GetReadPersistentCacheTaskFinishedResponse()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ReadPersistentCacheTaskResponseValidationError{ + field: "ReadPersistentCacheTaskFinishedResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ReadPersistentCacheTaskResponseValidationError{ + field: "ReadPersistentCacheTaskFinishedResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetReadPersistentCacheTaskFinishedResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ReadPersistentCacheTaskResponseValidationError{ + field: "ReadPersistentCacheTaskFinishedResponse", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ReadPersistentCacheTaskResponse_ReadChunkResponse: + if v == nil { + err := ReadPersistentCacheTaskResponseValidationError{ + field: "Response", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofResponsePresent = true + + if all { + switch v := interface{}(m.GetReadChunkResponse()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ReadPersistentCacheTaskResponseValidationError{ + field: "ReadChunkResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ReadPersistentCacheTaskResponseValidationError{ + field: "ReadChunkResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetReadChunkResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ReadPersistentCacheTaskResponseValidationError{ + field: "ReadChunkResponse", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + if !oneofResponsePresent { + err := ReadPersistentCacheTaskResponseValidationError{ + field: "Response", + reason: "value is required", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ReadPersistentCacheTaskResponseMultiError(errors) + } + + return nil +} + +// ReadPersistentCacheTaskResponseMultiError is an error wrapping multiple +// validation errors returned by ReadPersistentCacheTaskResponse.ValidateAll() +// if the designated constraints aren't met. +type ReadPersistentCacheTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ReadPersistentCacheTaskResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ReadPersistentCacheTaskResponseMultiError) AllErrors() []error { return m } + +// ReadPersistentCacheTaskResponseValidationError is the validation error +// returned by ReadPersistentCacheTaskResponse.Validate if the designated +// constraints aren't met. +type ReadPersistentCacheTaskResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ReadPersistentCacheTaskResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ReadPersistentCacheTaskResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ReadPersistentCacheTaskResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ReadPersistentCacheTaskResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ReadPersistentCacheTaskResponseValidationError) ErrorName() string { + return "ReadPersistentCacheTaskResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ReadPersistentCacheTaskResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sReadPersistentCacheTaskResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ReadPersistentCacheTaskResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ReadPersistentCacheTaskResponseValidationError{} + +// Validate checks the field values on ReadPersistentCacheTaskFinishedResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. +func (m *ReadPersistentCacheTaskFinishedResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on +// ReadPersistentCacheTaskFinishedResponse with the rules defined in the proto +// definition for this message. If any rules are violated, the result is a +// list of violation errors wrapped in +// ReadPersistentCacheTaskFinishedResponseMultiError, or nil if none found. +func (m *ReadPersistentCacheTaskFinishedResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ReadPersistentCacheTaskFinishedResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return ReadPersistentCacheTaskFinishedResponseMultiError(errors) + } + + return nil +} + +// ReadPersistentCacheTaskFinishedResponseMultiError is an error wrapping +// multiple validation errors returned by +// ReadPersistentCacheTaskFinishedResponse.ValidateAll() if the designated +// constraints aren't met. +type ReadPersistentCacheTaskFinishedResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ReadPersistentCacheTaskFinishedResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ReadPersistentCacheTaskFinishedResponseMultiError) AllErrors() []error { return m } + +// ReadPersistentCacheTaskFinishedResponseValidationError is the validation +// error returned by ReadPersistentCacheTaskFinishedResponse.Validate if the +// designated constraints aren't met. +type ReadPersistentCacheTaskFinishedResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ReadPersistentCacheTaskFinishedResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ReadPersistentCacheTaskFinishedResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ReadPersistentCacheTaskFinishedResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ReadPersistentCacheTaskFinishedResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ReadPersistentCacheTaskFinishedResponseValidationError) ErrorName() string { + return "ReadPersistentCacheTaskFinishedResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ReadPersistentCacheTaskFinishedResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sReadPersistentCacheTaskFinishedResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ReadPersistentCacheTaskFinishedResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ReadPersistentCacheTaskFinishedResponseValidationError{} + +// Validate checks the field values on ReadChunkResponse with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *ReadChunkResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ReadChunkResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ReadChunkResponseMultiError, or nil if none found. +func (m *ReadChunkResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ReadChunkResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(m.GetContent()) < 1 { + err := ReadChunkResponseValidationError{ + field: "Content", + reason: "value length must be at least 1 bytes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ReadChunkResponseMultiError(errors) + } + + return nil +} + +// ReadChunkResponseMultiError is an error wrapping multiple validation errors +// returned by ReadChunkResponse.ValidateAll() if the designated constraints +// aren't met. +type ReadChunkResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ReadChunkResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ReadChunkResponseMultiError) AllErrors() []error { return m } + +// ReadChunkResponseValidationError is the validation error returned by +// ReadChunkResponse.Validate if the designated constraints aren't met. +type ReadChunkResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ReadChunkResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ReadChunkResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ReadChunkResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ReadChunkResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ReadChunkResponseValidationError) ErrorName() string { + return "ReadChunkResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ReadChunkResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sReadChunkResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ReadChunkResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ReadChunkResponseValidationError{} + // Validate checks the field values on DownloadPersistentCacheTaskRequest with // the rules defined in the proto definition for this message. If any rules // are violated, the first error encountered is returned, or nil if there are @@ -2166,10 +3438,10 @@ func (m *UploadPersistentCacheTaskRequest) validate(all bool) error { errors = append(errors, err) } - if m.GetPersistentReplicaCount() < 1 { + if val := m.GetPersistentReplicaCount(); val < 1 || val > 5 { err := UploadPersistentCacheTaskRequestValidationError{ field: "PersistentReplicaCount", - reason: "value must be greater than or equal to 1", + reason: "value must be inside range [1, 5]", } if !all { return err @@ -2216,39 +3488,6 @@ func (m *UploadPersistentCacheTaskRequest) validate(all bool) error { // no validation rules for Application } - if m.Timeout != nil { - - if all { - switch v := interface{}(m.GetTimeout()).(type) { - case interface{ ValidateAll() error }: - if err := v.ValidateAll(); err != nil { - errors = append(errors, UploadPersistentCacheTaskRequestValidationError{ - field: "Timeout", - reason: "embedded message failed validation", - cause: err, - }) - } - case interface{ Validate() error }: - if err := v.Validate(); err != nil { - errors = append(errors, UploadPersistentCacheTaskRequestValidationError{ - field: "Timeout", - reason: "embedded message failed validation", - cause: err, - }) - } - } - } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UploadPersistentCacheTaskRequestValidationError{ - field: "Timeout", - reason: "embedded message failed validation", - cause: err, - } - } - } - - } - if len(errors) > 0 { return UploadPersistentCacheTaskRequestMultiError(errors) } diff --git a/pkg/apis/dfdaemon/v2/dfdaemon.proto b/pkg/apis/dfdaemon/v2/dfdaemon.proto index cab2082..e8de82b 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon.proto +++ b/pkg/apis/dfdaemon/v2/dfdaemon.proto @@ -125,6 +125,71 @@ message DeleteTaskRequest { string task_id = 1 [(validate.rules).string.min_len = 1]; } +// WritePersistentCacheTaskResponse represents request of WritePersistentCacheTask. +message WritePersistentCacheTaskRequest { + oneof response { + option (validate.required) = true; + + WritePersistentCacheTaskStartedRequest write_persistent_cache_task_started_request = 1; + WritePersistentCacheTaskFinishedRequest write_persistent_cache_task_finished_request = 2; + WriteChunkRequest write_chunk_request = 3; + } +} + +// WritePersistentCacheTaskStartedRequest represents task write started request of WritePersistentCacheTaskRequest. +message WritePersistentCacheTaskStartedRequest { + // Replica count of the persistent persistent cache task. + uint64 persistent_replica_count = 1 [(validate.rules).uint64 = {gte: 1, lte: 5}]; + // Tag is used to distinguish different persistent cache tasks. + optional string tag = 2; + // Application of task. + optional string application = 3; + // TTL of the persistent cache task. + google.protobuf.Duration ttl = 4 [(validate.rules).duration = {gte:{seconds: 60}, lte:{seconds: 604800}}]; +} + +// WritePersistentCacheTaskFinishedRequest represents task write finished request of WritePersistentCacheTaskRequest. +message WritePersistentCacheTaskFinishedRequest { +} + +// WriteChunkRequest represents chunk write request of WritePersistentCacheTaskRequest. +message WriteChunkRequest { + // Chunk content. + bytes content = 1 [(validate.rules).bytes = {min_len: 1}]; +} + +// WritePersistentCacheTaskResponse represents response of WritePersistentCacheTask. +message WritePersistentCacheTaskResponse { + // Task id. + string task_id = 1 [(validate.rules).string.min_len = 1]; +} + +// ReadPersistentCacheTaskRequest represents request of ReadPersistentCacheTask. +message ReadPersistentCacheTaskRequest { + // Task id. + string task_id = 1 [(validate.rules).string.min_len = 1]; +} + +// ReadPersistentCacheTaskResponse represents response of ReadPersistentCacheTask. +message ReadPersistentCacheTaskResponse { + oneof response { + option (validate.required) = true; + + ReadPersistentCacheTaskFinishedResponse read_persistent_cache_task_finished_response = 1; + ReadChunkResponse read_chunk_response = 2; + } +} + +// ReadPersistentCacheTaskFinishedResponse represents task read finished response of ReadPersistentCacheTaskResponse. +message ReadPersistentCacheTaskFinishedResponse { +} + +// ReadChunkResponse represents chunk read response of ReadPersistentCacheTaskResponse. +message ReadChunkResponse { + // Chunk content. + bytes content = 1 [(validate.rules).bytes = {min_len: 1}]; +} + // DownloadPersistentCacheTaskRequest represents request of DownloadPersistentCacheTask. message DownloadPersistentCacheTaskRequest { // Task id. @@ -173,15 +238,13 @@ message UploadPersistentCacheTaskRequest { // Upload file path of persistent cache task. string path = 1 [(validate.rules).string = {min_len: 1}]; // Replica count of the persistent persistent cache task. - uint64 persistent_replica_count = 2 [(validate.rules).uint64.gte = 1]; + uint64 persistent_replica_count = 2 [(validate.rules).uint64 = {gte: 1, lte: 5}]; // Tag is used to distinguish different persistent cache tasks. optional string tag = 3; // Application of task. optional string application = 4; // TTL of the persistent cache task. google.protobuf.Duration ttl = 5 [(validate.rules).duration = {gte:{seconds: 60}, lte:{seconds: 604800}}]; - // Upload timeout. - optional google.protobuf.Duration timeout = 6; } // StatPersistentCacheTaskRequest represents request of StatPersistentCacheTask. @@ -251,6 +314,12 @@ service DfdaemonDownload { // DeleteHost releases host in scheduler. rpc DeleteHost(google.protobuf.Empty)returns(google.protobuf.Empty); + // WritePersistentCacheTask writes persistent cache task to p2p network. + rpc WritePersistentCacheTask(stream WritePersistentCacheTaskRequest) returns(WritePersistentCacheTaskResponse); + + // ReadPersistentCacheTask reads persistent cache task from p2p network. + rpc ReadPersistentCacheTask(ReadPersistentCacheTaskRequest) returns(stream ReadPersistentCacheTaskResponse); + // DownloadPersistentCacheTask downloads persistent cache task from p2p network. rpc DownloadPersistentCacheTask(DownloadPersistentCacheTaskRequest) returns(stream DownloadPersistentCacheTaskResponse); diff --git a/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go b/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go index 02e0b8c..c65cd3a 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go +++ b/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go @@ -533,6 +533,10 @@ type DfdaemonDownloadClient interface { DeleteTask(ctx context.Context, in *DeleteTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // DeleteHost releases host in scheduler. DeleteHost(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) + // WritePersistentCacheTask writes persistent cache task to p2p network. + WritePersistentCacheTask(ctx context.Context, opts ...grpc.CallOption) (DfdaemonDownload_WritePersistentCacheTaskClient, error) + // ReadPersistentCacheTask reads persistent cache task from p2p network. + ReadPersistentCacheTask(ctx context.Context, in *ReadPersistentCacheTaskRequest, opts ...grpc.CallOption) (DfdaemonDownload_ReadPersistentCacheTaskClient, error) // DownloadPersistentCacheTask downloads persistent cache task from p2p network. DownloadPersistentCacheTask(ctx context.Context, in *DownloadPersistentCacheTaskRequest, opts ...grpc.CallOption) (DfdaemonDownload_DownloadPersistentCacheTaskClient, error) // UploadPersistentCacheTask uploads persistent cache task to p2p network. @@ -619,8 +623,74 @@ func (c *dfdaemonDownloadClient) DeleteHost(ctx context.Context, in *emptypb.Emp return out, nil } +func (c *dfdaemonDownloadClient) WritePersistentCacheTask(ctx context.Context, opts ...grpc.CallOption) (DfdaemonDownload_WritePersistentCacheTaskClient, error) { + stream, err := c.cc.NewStream(ctx, &DfdaemonDownload_ServiceDesc.Streams[1], "/dfdaemon.v2.DfdaemonDownload/WritePersistentCacheTask", opts...) + if err != nil { + return nil, err + } + x := &dfdaemonDownloadWritePersistentCacheTaskClient{stream} + return x, nil +} + +type DfdaemonDownload_WritePersistentCacheTaskClient interface { + Send(*WritePersistentCacheTaskRequest) error + CloseAndRecv() (*WritePersistentCacheTaskResponse, error) + grpc.ClientStream +} + +type dfdaemonDownloadWritePersistentCacheTaskClient struct { + grpc.ClientStream +} + +func (x *dfdaemonDownloadWritePersistentCacheTaskClient) Send(m *WritePersistentCacheTaskRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *dfdaemonDownloadWritePersistentCacheTaskClient) CloseAndRecv() (*WritePersistentCacheTaskResponse, error) { + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + m := new(WritePersistentCacheTaskResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *dfdaemonDownloadClient) ReadPersistentCacheTask(ctx context.Context, in *ReadPersistentCacheTaskRequest, opts ...grpc.CallOption) (DfdaemonDownload_ReadPersistentCacheTaskClient, error) { + stream, err := c.cc.NewStream(ctx, &DfdaemonDownload_ServiceDesc.Streams[2], "/dfdaemon.v2.DfdaemonDownload/ReadPersistentCacheTask", opts...) + if err != nil { + return nil, err + } + x := &dfdaemonDownloadReadPersistentCacheTaskClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type DfdaemonDownload_ReadPersistentCacheTaskClient interface { + Recv() (*ReadPersistentCacheTaskResponse, error) + grpc.ClientStream +} + +type dfdaemonDownloadReadPersistentCacheTaskClient struct { + grpc.ClientStream +} + +func (x *dfdaemonDownloadReadPersistentCacheTaskClient) Recv() (*ReadPersistentCacheTaskResponse, error) { + m := new(ReadPersistentCacheTaskResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func (c *dfdaemonDownloadClient) DownloadPersistentCacheTask(ctx context.Context, in *DownloadPersistentCacheTaskRequest, opts ...grpc.CallOption) (DfdaemonDownload_DownloadPersistentCacheTaskClient, error) { - stream, err := c.cc.NewStream(ctx, &DfdaemonDownload_ServiceDesc.Streams[1], "/dfdaemon.v2.DfdaemonDownload/DownloadPersistentCacheTask", opts...) + stream, err := c.cc.NewStream(ctx, &DfdaemonDownload_ServiceDesc.Streams[3], "/dfdaemon.v2.DfdaemonDownload/DownloadPersistentCacheTask", opts...) if err != nil { return nil, err } @@ -692,6 +762,10 @@ type DfdaemonDownloadServer interface { DeleteTask(context.Context, *DeleteTaskRequest) (*emptypb.Empty, error) // DeleteHost releases host in scheduler. DeleteHost(context.Context, *emptypb.Empty) (*emptypb.Empty, error) + // WritePersistentCacheTask writes persistent cache task to p2p network. + WritePersistentCacheTask(DfdaemonDownload_WritePersistentCacheTaskServer) error + // ReadPersistentCacheTask reads persistent cache task from p2p network. + ReadPersistentCacheTask(*ReadPersistentCacheTaskRequest, DfdaemonDownload_ReadPersistentCacheTaskServer) error // DownloadPersistentCacheTask downloads persistent cache task from p2p network. DownloadPersistentCacheTask(*DownloadPersistentCacheTaskRequest, DfdaemonDownload_DownloadPersistentCacheTaskServer) error // UploadPersistentCacheTask uploads persistent cache task to p2p network. @@ -721,6 +795,12 @@ func (UnimplementedDfdaemonDownloadServer) DeleteTask(context.Context, *DeleteTa func (UnimplementedDfdaemonDownloadServer) DeleteHost(context.Context, *emptypb.Empty) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteHost not implemented") } +func (UnimplementedDfdaemonDownloadServer) WritePersistentCacheTask(DfdaemonDownload_WritePersistentCacheTaskServer) error { + return status.Errorf(codes.Unimplemented, "method WritePersistentCacheTask not implemented") +} +func (UnimplementedDfdaemonDownloadServer) ReadPersistentCacheTask(*ReadPersistentCacheTaskRequest, DfdaemonDownload_ReadPersistentCacheTaskServer) error { + return status.Errorf(codes.Unimplemented, "method ReadPersistentCacheTask not implemented") +} func (UnimplementedDfdaemonDownloadServer) DownloadPersistentCacheTask(*DownloadPersistentCacheTaskRequest, DfdaemonDownload_DownloadPersistentCacheTaskServer) error { return status.Errorf(codes.Unimplemented, "method DownloadPersistentCacheTask not implemented") } @@ -838,6 +918,53 @@ func _DfdaemonDownload_DeleteHost_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _DfdaemonDownload_WritePersistentCacheTask_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(DfdaemonDownloadServer).WritePersistentCacheTask(&dfdaemonDownloadWritePersistentCacheTaskServer{stream}) +} + +type DfdaemonDownload_WritePersistentCacheTaskServer interface { + SendAndClose(*WritePersistentCacheTaskResponse) error + Recv() (*WritePersistentCacheTaskRequest, error) + grpc.ServerStream +} + +type dfdaemonDownloadWritePersistentCacheTaskServer struct { + grpc.ServerStream +} + +func (x *dfdaemonDownloadWritePersistentCacheTaskServer) SendAndClose(m *WritePersistentCacheTaskResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *dfdaemonDownloadWritePersistentCacheTaskServer) Recv() (*WritePersistentCacheTaskRequest, error) { + m := new(WritePersistentCacheTaskRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _DfdaemonDownload_ReadPersistentCacheTask_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ReadPersistentCacheTaskRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(DfdaemonDownloadServer).ReadPersistentCacheTask(m, &dfdaemonDownloadReadPersistentCacheTaskServer{stream}) +} + +type DfdaemonDownload_ReadPersistentCacheTaskServer interface { + Send(*ReadPersistentCacheTaskResponse) error + grpc.ServerStream +} + +type dfdaemonDownloadReadPersistentCacheTaskServer struct { + grpc.ServerStream +} + +func (x *dfdaemonDownloadReadPersistentCacheTaskServer) Send(m *ReadPersistentCacheTaskResponse) error { + return x.ServerStream.SendMsg(m) +} + func _DfdaemonDownload_DownloadPersistentCacheTask_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(DownloadPersistentCacheTaskRequest) if err := stream.RecvMsg(m); err != nil { @@ -955,6 +1082,16 @@ var DfdaemonDownload_ServiceDesc = grpc.ServiceDesc{ Handler: _DfdaemonDownload_DownloadTask_Handler, ServerStreams: true, }, + { + StreamName: "WritePersistentCacheTask", + Handler: _DfdaemonDownload_WritePersistentCacheTask_Handler, + ClientStreams: true, + }, + { + StreamName: "ReadPersistentCacheTask", + Handler: _DfdaemonDownload_ReadPersistentCacheTask_Handler, + ServerStreams: true, + }, { StreamName: "DownloadPersistentCacheTask", Handler: _DfdaemonDownload_DownloadPersistentCacheTask_Handler, diff --git a/proto/dfdaemon.proto b/proto/dfdaemon.proto index 64f28e2..de2146b 100644 --- a/proto/dfdaemon.proto +++ b/proto/dfdaemon.proto @@ -114,6 +114,67 @@ message DeleteTaskRequest { string task_id = 1; } +// WritePersistentCacheTaskResponse represents request of WritePersistentCacheTask. +message WritePersistentCacheTaskRequest { + oneof response { + WritePersistentCacheTaskStartedRequest write_persistent_cache_task_started_request = 1; + WritePersistentCacheTaskFinishedRequest write_persistent_cache_task_finished_request = 2; + WriteChunkRequest write_chunk_request = 3; + } +} + +// WritePersistentCacheTaskStartedRequest represents task write started request of WritePersistentCacheTaskRequest. +message WritePersistentCacheTaskStartedRequest { + // Replica count of the persistent persistent cache task. + uint64 persistent_replica_count = 1; + // Tag is used to distinguish different persistent cache tasks. + optional string tag = 2; + // Application of task. + optional string application = 3; + // TTL of the persistent cache task. + google.protobuf.Duration ttl = 4; +} + +// WritePersistentCacheTaskFinishedRequest represents task write finished request of WritePersistentCacheTaskRequest. +message WritePersistentCacheTaskFinishedRequest { +} + +// WriteChunkRequest represents chunk write request of WritePersistentCacheTaskRequest. +message WriteChunkRequest { + // Chunk content. + bytes content = 1; +} + +// WritePersistentCacheTaskResponse represents response of WritePersistentCacheTask. +message WritePersistentCacheTaskResponse { + // Task id. + string task_id = 1; +} + +// ReadPersistentCacheTaskRequest represents request of ReadPersistentCacheTask. +message ReadPersistentCacheTaskRequest { + // Task id. + string task_id = 1; +} + +// ReadPersistentCacheTaskResponse represents response of ReadPersistentCacheTask. +message ReadPersistentCacheTaskResponse { + oneof response { + ReadPersistentCacheTaskFinishedResponse read_persistent_cache_task_finished_response = 1; + ReadChunkResponse read_chunk_response = 2; + } +} + +// ReadPersistentCacheTaskFinishedResponse represents task read finished response of ReadPersistentCacheTaskResponse. +message ReadPersistentCacheTaskFinishedResponse { +} + +// ReadChunkResponse represents chunk read response of ReadPersistentCacheTaskResponse. +message ReadChunkResponse { + // Chunk content. + bytes content = 1; +} + // DownloadPersistentCacheTaskRequest represents request of DownloadPersistentCacheTask. message DownloadPersistentCacheTaskRequest { // Task id. @@ -167,8 +228,6 @@ message UploadPersistentCacheTaskRequest { optional string application = 4; // TTL of the persistent cache task. google.protobuf.Duration ttl = 5; - // Upload timeout. - optional google.protobuf.Duration timeout = 6; } // StatPersistentCacheTaskRequest represents request of StatPersistentCacheTask. @@ -235,6 +294,12 @@ service DfdaemonDownload{ // DeleteHost releases host in scheduler. rpc DeleteHost(google.protobuf.Empty)returns(google.protobuf.Empty); + // WritePersistentCacheTask writes persistent cache task to p2p network. + rpc WritePersistentCacheTask(stream WritePersistentCacheTaskRequest) returns(WritePersistentCacheTaskResponse); + + // ReadPersistentCacheTask reads persistent cache task from p2p network. + rpc ReadPersistentCacheTask(ReadPersistentCacheTaskRequest) returns(stream ReadPersistentCacheTaskResponse); + // DownloadPersistentCacheTask downloads persistent cache task from p2p network. rpc DownloadPersistentCacheTask(DownloadPersistentCacheTaskRequest) returns(stream DownloadPersistentCacheTaskResponse); diff --git a/src/descriptor.bin b/src/descriptor.bin index 9e221c6..ec11fcb 100644 Binary files a/src/descriptor.bin and b/src/descriptor.bin differ diff --git a/src/dfdaemon.v2.rs b/src/dfdaemon.v2.rs index f3051a6..d5c6d3e 100644 --- a/src/dfdaemon.v2.rs +++ b/src/dfdaemon.v2.rs @@ -141,6 +141,118 @@ pub struct DeleteTaskRequest { #[prost(string, tag = "1")] pub task_id: ::prost::alloc::string::String, } +/// WritePersistentCacheTaskResponse represents request of WritePersistentCacheTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WritePersistentCacheTaskRequest { + #[prost(oneof = "write_persistent_cache_task_request::Response", tags = "1, 2, 3")] + pub response: ::core::option::Option, +} +/// Nested message and enum types in `WritePersistentCacheTaskRequest`. +pub mod write_persistent_cache_task_request { + #[derive(serde::Serialize, serde::Deserialize)] + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Response { + #[prost(message, tag = "1")] + WritePersistentCacheTaskStartedRequest( + super::WritePersistentCacheTaskStartedRequest, + ), + #[prost(message, tag = "2")] + WritePersistentCacheTaskFinishedRequest( + super::WritePersistentCacheTaskFinishedRequest, + ), + #[prost(message, tag = "3")] + WriteChunkRequest(super::WriteChunkRequest), + } +} +/// WritePersistentCacheTaskStartedRequest represents task write started request of WritePersistentCacheTaskRequest. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WritePersistentCacheTaskStartedRequest { + /// Replica count of the persistent persistent cache task. + #[prost(uint64, tag = "1")] + pub persistent_replica_count: u64, + /// Tag is used to distinguish different persistent cache tasks. + #[prost(string, optional, tag = "2")] + pub tag: ::core::option::Option<::prost::alloc::string::String>, + /// Application of task. + #[prost(string, optional, tag = "3")] + pub application: ::core::option::Option<::prost::alloc::string::String>, + /// TTL of the persistent cache task. + #[prost(message, optional, tag = "4")] + pub ttl: ::core::option::Option<::prost_wkt_types::Duration>, +} +/// WritePersistentCacheTaskFinishedRequest represents task write finished request of WritePersistentCacheTaskRequest. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct WritePersistentCacheTaskFinishedRequest {} +/// WriteChunkRequest represents chunk write request of WritePersistentCacheTaskRequest. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WriteChunkRequest { + /// Chunk content. + #[prost(bytes = "vec", tag = "1")] + pub content: ::prost::alloc::vec::Vec, +} +/// WritePersistentCacheTaskResponse represents response of WritePersistentCacheTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WritePersistentCacheTaskResponse { + /// Task id. + #[prost(string, tag = "1")] + pub task_id: ::prost::alloc::string::String, +} +/// ReadPersistentCacheTaskRequest represents request of ReadPersistentCacheTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ReadPersistentCacheTaskRequest { + /// Task id. + #[prost(string, tag = "1")] + pub task_id: ::prost::alloc::string::String, +} +/// ReadPersistentCacheTaskResponse represents response of ReadPersistentCacheTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ReadPersistentCacheTaskResponse { + #[prost(oneof = "read_persistent_cache_task_response::Response", tags = "1, 2")] + pub response: ::core::option::Option, +} +/// Nested message and enum types in `ReadPersistentCacheTaskResponse`. +pub mod read_persistent_cache_task_response { + #[derive(serde::Serialize, serde::Deserialize)] + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Response { + #[prost(message, tag = "1")] + ReadPersistentCacheTaskFinishedResponse( + super::ReadPersistentCacheTaskFinishedResponse, + ), + #[prost(message, tag = "2")] + ReadChunkResponse(super::ReadChunkResponse), + } +} +/// ReadPersistentCacheTaskFinishedResponse represents task read finished response of ReadPersistentCacheTaskResponse. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct ReadPersistentCacheTaskFinishedResponse {} +/// ReadChunkResponse represents chunk read response of ReadPersistentCacheTaskResponse. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ReadChunkResponse { + /// Chunk content. + #[prost(bytes = "vec", tag = "1")] + pub content: ::prost::alloc::vec::Vec, +} /// DownloadPersistentCacheTaskRequest represents request of DownloadPersistentCacheTask. #[derive(serde::Serialize, serde::Deserialize)] #[allow(clippy::derive_partial_eq_without_eq)] @@ -232,9 +344,6 @@ pub struct UploadPersistentCacheTaskRequest { /// TTL of the persistent cache task. #[prost(message, optional, tag = "5")] pub ttl: ::core::option::Option<::prost_wkt_types::Duration>, - /// Upload timeout. - #[prost(message, optional, tag = "6")] - pub timeout: ::core::option::Option<::prost_wkt_types::Duration>, } /// StatPersistentCacheTaskRequest represents request of StatPersistentCacheTask. #[derive(serde::Serialize, serde::Deserialize)] @@ -785,6 +894,72 @@ pub mod dfdaemon_download_client { .insert(GrpcMethod::new("dfdaemon.v2.DfdaemonDownload", "DeleteHost")); self.inner.unary(req, path, codec).await } + /// WritePersistentCacheTask writes persistent cache task to p2p network. + pub async fn write_persistent_cache_task( + &mut self, + request: impl tonic::IntoStreamingRequest< + Message = super::WritePersistentCacheTaskRequest, + >, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/dfdaemon.v2.DfdaemonDownload/WritePersistentCacheTask", + ); + let mut req = request.into_streaming_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "dfdaemon.v2.DfdaemonDownload", + "WritePersistentCacheTask", + ), + ); + self.inner.client_streaming(req, path, codec).await + } + /// ReadPersistentCacheTask reads persistent cache task from p2p network. + pub async fn read_persistent_cache_task( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response< + tonic::codec::Streaming, + >, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/dfdaemon.v2.DfdaemonDownload/ReadPersistentCacheTask", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "dfdaemon.v2.DfdaemonDownload", + "ReadPersistentCacheTask", + ), + ); + self.inner.server_streaming(req, path, codec).await + } /// DownloadPersistentCacheTask downloads persistent cache task from p2p network. pub async fn download_persistent_cache_task( &mut self, @@ -1589,6 +1764,33 @@ pub mod dfdaemon_download_server { &self, request: tonic::Request<()>, ) -> std::result::Result, tonic::Status>; + /// WritePersistentCacheTask writes persistent cache task to p2p network. + async fn write_persistent_cache_task( + &self, + request: tonic::Request< + tonic::Streaming, + >, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /// Server streaming response type for the ReadPersistentCacheTask method. + type ReadPersistentCacheTaskStream: tonic::codegen::tokio_stream::Stream< + Item = std::result::Result< + super::ReadPersistentCacheTaskResponse, + tonic::Status, + >, + > + + std::marker::Send + + 'static; + /// ReadPersistentCacheTask reads persistent cache task from p2p network. + async fn read_persistent_cache_task( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Server streaming response type for the DownloadPersistentCacheTask method. type DownloadPersistentCacheTaskStream: tonic::codegen::tokio_stream::Stream< Item = std::result::Result< @@ -1882,6 +2084,111 @@ pub mod dfdaemon_download_server { }; Box::pin(fut) } + "/dfdaemon.v2.DfdaemonDownload/WritePersistentCacheTask" => { + #[allow(non_camel_case_types)] + struct WritePersistentCacheTaskSvc(pub Arc); + impl< + T: DfdaemonDownload, + > tonic::server::ClientStreamingService< + super::WritePersistentCacheTaskRequest, + > for WritePersistentCacheTaskSvc { + type Response = super::WritePersistentCacheTaskResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + tonic::Streaming, + >, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::write_persistent_cache_task( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = WritePersistentCacheTaskSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.client_streaming(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/dfdaemon.v2.DfdaemonDownload/ReadPersistentCacheTask" => { + #[allow(non_camel_case_types)] + struct ReadPersistentCacheTaskSvc(pub Arc); + impl< + T: DfdaemonDownload, + > tonic::server::ServerStreamingService< + super::ReadPersistentCacheTaskRequest, + > for ReadPersistentCacheTaskSvc { + type Response = super::ReadPersistentCacheTaskResponse; + type ResponseStream = T::ReadPersistentCacheTaskStream; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::ReadPersistentCacheTaskRequest, + >, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::read_persistent_cache_task( + &inner, + request, + ) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = ReadPersistentCacheTaskSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.server_streaming(method, req).await; + Ok(res) + }; + Box::pin(fut) + } "/dfdaemon.v2.DfdaemonDownload/DownloadPersistentCacheTask" => { #[allow(non_camel_case_types)] struct DownloadPersistentCacheTaskSvc(