diff --git a/Cargo.lock b/Cargo.lock index b743dfe..d1b08d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -160,7 +160,7 @@ dependencies = [ [[package]] name = "dragonfly-api" -version = "2.0.120" +version = "2.0.121" dependencies = [ "prost 0.11.9", "prost-types 0.12.6", diff --git a/Cargo.toml b/Cargo.toml index 6b89683..e3f6266 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dragonfly-api" -version = "2.0.120" +version = "2.0.121" authors = ["Gaius "] edition = "2021" license = "Apache-2.0" diff --git a/pkg/apis/dfdaemon/v2/dfdaemon.proto b/pkg/apis/dfdaemon/v2/dfdaemon.proto index d182ee4..7fdd9b6 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon.proto +++ b/pkg/apis/dfdaemon/v2/dfdaemon.proto @@ -138,7 +138,7 @@ message DownloadCacheTaskRequest { // Task piece length. uint64 piece_length = 5 [(validate.rules).uint64.gte = 1]; // File path to be exported. - string output_path = 6 [(validate.rules).string = {min_len: 1}]; + string output_path = 6 [(validate.rules).string.min_len = 1]; // Download timeout. optional google.protobuf.Duration timeout = 7; } diff --git a/pkg/apis/scheduler/v2/mocks/scheduler_mock.go b/pkg/apis/scheduler/v2/mocks/scheduler_mock.go index 35ddfbc..cc30a22 100644 --- a/pkg/apis/scheduler/v2/mocks/scheduler_mock.go +++ b/pkg/apis/scheduler/v2/mocks/scheduler_mock.go @@ -43,6 +43,26 @@ func (m *MockSchedulerClient) EXPECT() *MockSchedulerClientMockRecorder { return m.recorder } +// AnnounceCachePeer mocks base method. +func (m *MockSchedulerClient) AnnounceCachePeer(ctx context.Context, opts ...grpc.CallOption) (scheduler.Scheduler_AnnounceCachePeerClient, error) { + m.ctrl.T.Helper() + varargs := []any{ctx} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AnnounceCachePeer", varargs...) + ret0, _ := ret[0].(scheduler.Scheduler_AnnounceCachePeerClient) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AnnounceCachePeer indicates an expected call of AnnounceCachePeer. +func (mr *MockSchedulerClientMockRecorder) AnnounceCachePeer(ctx any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AnnounceCachePeer", reflect.TypeOf((*MockSchedulerClient)(nil).AnnounceCachePeer), varargs...) +} + // AnnounceHost mocks base method. func (m *MockSchedulerClient) AnnounceHost(ctx context.Context, in *scheduler.AnnounceHostRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { m.ctrl.T.Helper() @@ -83,6 +103,46 @@ func (mr *MockSchedulerClientMockRecorder) AnnouncePeer(ctx any, opts ...any) *g return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AnnouncePeer", reflect.TypeOf((*MockSchedulerClient)(nil).AnnouncePeer), varargs...) } +// DeleteCachePeer mocks base method. +func (m *MockSchedulerClient) DeleteCachePeer(ctx context.Context, in *scheduler.DeleteCachePeerRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DeleteCachePeer", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteCachePeer indicates an expected call of DeleteCachePeer. +func (mr *MockSchedulerClientMockRecorder) DeleteCachePeer(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteCachePeer", reflect.TypeOf((*MockSchedulerClient)(nil).DeleteCachePeer), varargs...) +} + +// DeleteCacheTask mocks base method. +func (m *MockSchedulerClient) DeleteCacheTask(ctx context.Context, in *scheduler.DeleteCacheTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DeleteCacheTask", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteCacheTask indicates an expected call of DeleteCacheTask. +func (mr *MockSchedulerClientMockRecorder) DeleteCacheTask(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteCacheTask", reflect.TypeOf((*MockSchedulerClient)(nil).DeleteCacheTask), varargs...) +} + // DeleteHost mocks base method. func (m *MockSchedulerClient) DeleteHost(ctx context.Context, in *scheduler.DeleteHostRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { m.ctrl.T.Helper() @@ -143,6 +203,46 @@ func (mr *MockSchedulerClientMockRecorder) DeleteTask(ctx, in any, opts ...any) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteTask", reflect.TypeOf((*MockSchedulerClient)(nil).DeleteTask), varargs...) } +// StatCachePeer mocks base method. +func (m *MockSchedulerClient) StatCachePeer(ctx context.Context, in *scheduler.StatCachePeerRequest, opts ...grpc.CallOption) (*common.CachePeer, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StatCachePeer", varargs...) + ret0, _ := ret[0].(*common.CachePeer) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StatCachePeer indicates an expected call of StatCachePeer. +func (mr *MockSchedulerClientMockRecorder) StatCachePeer(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatCachePeer", reflect.TypeOf((*MockSchedulerClient)(nil).StatCachePeer), varargs...) +} + +// StatCacheTask mocks base method. +func (m *MockSchedulerClient) StatCacheTask(ctx context.Context, in *scheduler.StatCacheTaskRequest, opts ...grpc.CallOption) (*common.CacheTask, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StatCacheTask", varargs...) + ret0, _ := ret[0].(*common.CacheTask) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StatCacheTask indicates an expected call of StatCacheTask. +func (mr *MockSchedulerClientMockRecorder) StatCacheTask(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatCacheTask", reflect.TypeOf((*MockSchedulerClient)(nil).StatCacheTask), varargs...) +} + // StatPeer mocks base method. func (m *MockSchedulerClient) StatPeer(ctx context.Context, in *scheduler.StatPeerRequest, opts ...grpc.CallOption) (*common.Peer, error) { m.ctrl.T.Helper() @@ -477,6 +577,143 @@ func (mr *MockScheduler_SyncProbesClientMockRecorder) Trailer() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Trailer", reflect.TypeOf((*MockScheduler_SyncProbesClient)(nil).Trailer)) } +// MockScheduler_AnnounceCachePeerClient is a mock of Scheduler_AnnounceCachePeerClient interface. +type MockScheduler_AnnounceCachePeerClient struct { + ctrl *gomock.Controller + recorder *MockScheduler_AnnounceCachePeerClientMockRecorder +} + +// MockScheduler_AnnounceCachePeerClientMockRecorder is the mock recorder for MockScheduler_AnnounceCachePeerClient. +type MockScheduler_AnnounceCachePeerClientMockRecorder struct { + mock *MockScheduler_AnnounceCachePeerClient +} + +// NewMockScheduler_AnnounceCachePeerClient creates a new mock instance. +func NewMockScheduler_AnnounceCachePeerClient(ctrl *gomock.Controller) *MockScheduler_AnnounceCachePeerClient { + mock := &MockScheduler_AnnounceCachePeerClient{ctrl: ctrl} + mock.recorder = &MockScheduler_AnnounceCachePeerClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockScheduler_AnnounceCachePeerClient) EXPECT() *MockScheduler_AnnounceCachePeerClientMockRecorder { + return m.recorder +} + +// CloseSend mocks base method. +func (m *MockScheduler_AnnounceCachePeerClient) CloseSend() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CloseSend") + ret0, _ := ret[0].(error) + return ret0 +} + +// CloseSend indicates an expected call of CloseSend. +func (mr *MockScheduler_AnnounceCachePeerClientMockRecorder) CloseSend() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CloseSend", reflect.TypeOf((*MockScheduler_AnnounceCachePeerClient)(nil).CloseSend)) +} + +// Context mocks base method. +func (m *MockScheduler_AnnounceCachePeerClient) Context() context.Context { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Context") + ret0, _ := ret[0].(context.Context) + return ret0 +} + +// Context indicates an expected call of Context. +func (mr *MockScheduler_AnnounceCachePeerClientMockRecorder) Context() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Context", reflect.TypeOf((*MockScheduler_AnnounceCachePeerClient)(nil).Context)) +} + +// Header mocks base method. +func (m *MockScheduler_AnnounceCachePeerClient) Header() (metadata.MD, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Header") + ret0, _ := ret[0].(metadata.MD) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Header indicates an expected call of Header. +func (mr *MockScheduler_AnnounceCachePeerClientMockRecorder) Header() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Header", reflect.TypeOf((*MockScheduler_AnnounceCachePeerClient)(nil).Header)) +} + +// Recv mocks base method. +func (m *MockScheduler_AnnounceCachePeerClient) Recv() (*scheduler.AnnounceCachePeerResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Recv") + ret0, _ := ret[0].(*scheduler.AnnounceCachePeerResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Recv indicates an expected call of Recv. +func (mr *MockScheduler_AnnounceCachePeerClientMockRecorder) Recv() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Recv", reflect.TypeOf((*MockScheduler_AnnounceCachePeerClient)(nil).Recv)) +} + +// RecvMsg mocks base method. +func (m_2 *MockScheduler_AnnounceCachePeerClient) RecvMsg(m any) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "RecvMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// RecvMsg indicates an expected call of RecvMsg. +func (mr *MockScheduler_AnnounceCachePeerClientMockRecorder) RecvMsg(m any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecvMsg", reflect.TypeOf((*MockScheduler_AnnounceCachePeerClient)(nil).RecvMsg), m) +} + +// Send mocks base method. +func (m *MockScheduler_AnnounceCachePeerClient) Send(arg0 *scheduler.AnnounceCachePeerRequest) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Send", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Send indicates an expected call of Send. +func (mr *MockScheduler_AnnounceCachePeerClientMockRecorder) Send(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Send", reflect.TypeOf((*MockScheduler_AnnounceCachePeerClient)(nil).Send), arg0) +} + +// SendMsg mocks base method. +func (m_2 *MockScheduler_AnnounceCachePeerClient) SendMsg(m any) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "SendMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendMsg indicates an expected call of SendMsg. +func (mr *MockScheduler_AnnounceCachePeerClientMockRecorder) SendMsg(m any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMsg", reflect.TypeOf((*MockScheduler_AnnounceCachePeerClient)(nil).SendMsg), m) +} + +// Trailer mocks base method. +func (m *MockScheduler_AnnounceCachePeerClient) Trailer() metadata.MD { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Trailer") + ret0, _ := ret[0].(metadata.MD) + return ret0 +} + +// Trailer indicates an expected call of Trailer. +func (mr *MockScheduler_AnnounceCachePeerClientMockRecorder) Trailer() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Trailer", reflect.TypeOf((*MockScheduler_AnnounceCachePeerClient)(nil).Trailer)) +} + // MockSchedulerServer is a mock of SchedulerServer interface. type MockSchedulerServer struct { ctrl *gomock.Controller @@ -500,6 +737,20 @@ func (m *MockSchedulerServer) EXPECT() *MockSchedulerServerMockRecorder { return m.recorder } +// AnnounceCachePeer mocks base method. +func (m *MockSchedulerServer) AnnounceCachePeer(arg0 scheduler.Scheduler_AnnounceCachePeerServer) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AnnounceCachePeer", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// AnnounceCachePeer indicates an expected call of AnnounceCachePeer. +func (mr *MockSchedulerServerMockRecorder) AnnounceCachePeer(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AnnounceCachePeer", reflect.TypeOf((*MockSchedulerServer)(nil).AnnounceCachePeer), arg0) +} + // AnnounceHost mocks base method. func (m *MockSchedulerServer) AnnounceHost(arg0 context.Context, arg1 *scheduler.AnnounceHostRequest) (*emptypb.Empty, error) { m.ctrl.T.Helper() @@ -529,6 +780,36 @@ func (mr *MockSchedulerServerMockRecorder) AnnouncePeer(arg0 any) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AnnouncePeer", reflect.TypeOf((*MockSchedulerServer)(nil).AnnouncePeer), arg0) } +// DeleteCachePeer mocks base method. +func (m *MockSchedulerServer) DeleteCachePeer(arg0 context.Context, arg1 *scheduler.DeleteCachePeerRequest) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteCachePeer", arg0, arg1) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteCachePeer indicates an expected call of DeleteCachePeer. +func (mr *MockSchedulerServerMockRecorder) DeleteCachePeer(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteCachePeer", reflect.TypeOf((*MockSchedulerServer)(nil).DeleteCachePeer), arg0, arg1) +} + +// DeleteCacheTask mocks base method. +func (m *MockSchedulerServer) DeleteCacheTask(arg0 context.Context, arg1 *scheduler.DeleteCacheTaskRequest) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteCacheTask", arg0, arg1) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteCacheTask indicates an expected call of DeleteCacheTask. +func (mr *MockSchedulerServerMockRecorder) DeleteCacheTask(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteCacheTask", reflect.TypeOf((*MockSchedulerServer)(nil).DeleteCacheTask), arg0, arg1) +} + // DeleteHost mocks base method. func (m *MockSchedulerServer) DeleteHost(arg0 context.Context, arg1 *scheduler.DeleteHostRequest) (*emptypb.Empty, error) { m.ctrl.T.Helper() @@ -574,6 +855,36 @@ func (mr *MockSchedulerServerMockRecorder) DeleteTask(arg0, arg1 any) *gomock.Ca return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteTask", reflect.TypeOf((*MockSchedulerServer)(nil).DeleteTask), arg0, arg1) } +// StatCachePeer mocks base method. +func (m *MockSchedulerServer) StatCachePeer(arg0 context.Context, arg1 *scheduler.StatCachePeerRequest) (*common.CachePeer, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StatCachePeer", arg0, arg1) + ret0, _ := ret[0].(*common.CachePeer) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StatCachePeer indicates an expected call of StatCachePeer. +func (mr *MockSchedulerServerMockRecorder) StatCachePeer(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatCachePeer", reflect.TypeOf((*MockSchedulerServer)(nil).StatCachePeer), arg0, arg1) +} + +// StatCacheTask mocks base method. +func (m *MockSchedulerServer) StatCacheTask(arg0 context.Context, arg1 *scheduler.StatCacheTaskRequest) (*common.CacheTask, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StatCacheTask", arg0, arg1) + ret0, _ := ret[0].(*common.CacheTask) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StatCacheTask indicates an expected call of StatCacheTask. +func (mr *MockSchedulerServerMockRecorder) StatCacheTask(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatCacheTask", reflect.TypeOf((*MockSchedulerServer)(nil).StatCacheTask), arg0, arg1) +} + // StatPeer mocks base method. func (m *MockSchedulerServer) StatPeer(arg0 context.Context, arg1 *scheduler.StatPeerRequest) (*common.Peer, error) { m.ctrl.T.Helper() @@ -920,3 +1231,137 @@ func (mr *MockScheduler_SyncProbesServerMockRecorder) SetTrailer(arg0 any) *gomo mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetTrailer", reflect.TypeOf((*MockScheduler_SyncProbesServer)(nil).SetTrailer), arg0) } + +// MockScheduler_AnnounceCachePeerServer is a mock of Scheduler_AnnounceCachePeerServer interface. +type MockScheduler_AnnounceCachePeerServer struct { + ctrl *gomock.Controller + recorder *MockScheduler_AnnounceCachePeerServerMockRecorder +} + +// MockScheduler_AnnounceCachePeerServerMockRecorder is the mock recorder for MockScheduler_AnnounceCachePeerServer. +type MockScheduler_AnnounceCachePeerServerMockRecorder struct { + mock *MockScheduler_AnnounceCachePeerServer +} + +// NewMockScheduler_AnnounceCachePeerServer creates a new mock instance. +func NewMockScheduler_AnnounceCachePeerServer(ctrl *gomock.Controller) *MockScheduler_AnnounceCachePeerServer { + mock := &MockScheduler_AnnounceCachePeerServer{ctrl: ctrl} + mock.recorder = &MockScheduler_AnnounceCachePeerServerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockScheduler_AnnounceCachePeerServer) EXPECT() *MockScheduler_AnnounceCachePeerServerMockRecorder { + return m.recorder +} + +// Context mocks base method. +func (m *MockScheduler_AnnounceCachePeerServer) Context() context.Context { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Context") + ret0, _ := ret[0].(context.Context) + return ret0 +} + +// Context indicates an expected call of Context. +func (mr *MockScheduler_AnnounceCachePeerServerMockRecorder) Context() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Context", reflect.TypeOf((*MockScheduler_AnnounceCachePeerServer)(nil).Context)) +} + +// Recv mocks base method. +func (m *MockScheduler_AnnounceCachePeerServer) Recv() (*scheduler.AnnounceCachePeerRequest, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Recv") + ret0, _ := ret[0].(*scheduler.AnnounceCachePeerRequest) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Recv indicates an expected call of Recv. +func (mr *MockScheduler_AnnounceCachePeerServerMockRecorder) Recv() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Recv", reflect.TypeOf((*MockScheduler_AnnounceCachePeerServer)(nil).Recv)) +} + +// RecvMsg mocks base method. +func (m_2 *MockScheduler_AnnounceCachePeerServer) RecvMsg(m any) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "RecvMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// RecvMsg indicates an expected call of RecvMsg. +func (mr *MockScheduler_AnnounceCachePeerServerMockRecorder) RecvMsg(m any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecvMsg", reflect.TypeOf((*MockScheduler_AnnounceCachePeerServer)(nil).RecvMsg), m) +} + +// Send mocks base method. +func (m *MockScheduler_AnnounceCachePeerServer) Send(arg0 *scheduler.AnnounceCachePeerResponse) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Send", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Send indicates an expected call of Send. +func (mr *MockScheduler_AnnounceCachePeerServerMockRecorder) Send(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Send", reflect.TypeOf((*MockScheduler_AnnounceCachePeerServer)(nil).Send), arg0) +} + +// SendHeader mocks base method. +func (m *MockScheduler_AnnounceCachePeerServer) SendHeader(arg0 metadata.MD) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendHeader", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendHeader indicates an expected call of SendHeader. +func (mr *MockScheduler_AnnounceCachePeerServerMockRecorder) SendHeader(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendHeader", reflect.TypeOf((*MockScheduler_AnnounceCachePeerServer)(nil).SendHeader), arg0) +} + +// SendMsg mocks base method. +func (m_2 *MockScheduler_AnnounceCachePeerServer) SendMsg(m any) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "SendMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendMsg indicates an expected call of SendMsg. +func (mr *MockScheduler_AnnounceCachePeerServerMockRecorder) SendMsg(m any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMsg", reflect.TypeOf((*MockScheduler_AnnounceCachePeerServer)(nil).SendMsg), m) +} + +// SetHeader mocks base method. +func (m *MockScheduler_AnnounceCachePeerServer) SetHeader(arg0 metadata.MD) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetHeader", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetHeader indicates an expected call of SetHeader. +func (mr *MockScheduler_AnnounceCachePeerServerMockRecorder) SetHeader(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetHeader", reflect.TypeOf((*MockScheduler_AnnounceCachePeerServer)(nil).SetHeader), arg0) +} + +// SetTrailer mocks base method. +func (m *MockScheduler_AnnounceCachePeerServer) SetTrailer(arg0 metadata.MD) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "SetTrailer", arg0) +} + +// SetTrailer indicates an expected call of SetTrailer. +func (mr *MockScheduler_AnnounceCachePeerServerMockRecorder) SetTrailer(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetTrailer", reflect.TypeOf((*MockScheduler_AnnounceCachePeerServer)(nil).SetTrailer), arg0) +} diff --git a/pkg/apis/scheduler/v2/scheduler.pb.go b/pkg/apis/scheduler/v2/scheduler.pb.go index 350034a..75230f1 100644 --- a/pkg/apis/scheduler/v2/scheduler.pb.go +++ b/pkg/apis/scheduler/v2/scheduler.pb.go @@ -178,8 +178,8 @@ func (x *DownloadPeerBackToSourceStartedRequest) GetDescription() string { return "" } -// RescheduleRequest represents reschedule request of AnnouncePeerRequest. -type RescheduleRequest struct { +// ReschedulePeerRequest represents reschedule request of AnnouncePeerRequest. +type ReschedulePeerRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -190,8 +190,8 @@ type RescheduleRequest struct { Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` } -func (x *RescheduleRequest) Reset() { - *x = RescheduleRequest{} +func (x *ReschedulePeerRequest) Reset() { + *x = ReschedulePeerRequest{} if protoimpl.UnsafeEnabled { mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -199,13 +199,13 @@ func (x *RescheduleRequest) Reset() { } } -func (x *RescheduleRequest) String() string { +func (x *ReschedulePeerRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RescheduleRequest) ProtoMessage() {} +func (*ReschedulePeerRequest) ProtoMessage() {} -func (x *RescheduleRequest) ProtoReflect() protoreflect.Message { +func (x *ReschedulePeerRequest) ProtoReflect() protoreflect.Message { mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -217,19 +217,19 @@ func (x *RescheduleRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RescheduleRequest.ProtoReflect.Descriptor instead. -func (*RescheduleRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ReschedulePeerRequest.ProtoReflect.Descriptor instead. +func (*ReschedulePeerRequest) Descriptor() ([]byte, []int) { return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{3} } -func (x *RescheduleRequest) GetCandidateParents() []*v2.Peer { +func (x *ReschedulePeerRequest) GetCandidateParents() []*v2.Peer { if x != nil { return x.CandidateParents } return nil } -func (x *RescheduleRequest) GetDescription() string { +func (x *ReschedulePeerRequest) GetDescription() string { if x != nil && x.Description != nil { return *x.Description } @@ -710,7 +710,7 @@ type AnnouncePeerRequest struct { // *AnnouncePeerRequest_RegisterPeerRequest // *AnnouncePeerRequest_DownloadPeerStartedRequest // *AnnouncePeerRequest_DownloadPeerBackToSourceStartedRequest - // *AnnouncePeerRequest_RescheduleRequest + // *AnnouncePeerRequest_ReschedulePeerRequest // *AnnouncePeerRequest_DownloadPeerFinishedRequest // *AnnouncePeerRequest_DownloadPeerBackToSourceFinishedRequest // *AnnouncePeerRequest_DownloadPeerFailedRequest @@ -803,9 +803,9 @@ func (x *AnnouncePeerRequest) GetDownloadPeerBackToSourceStartedRequest() *Downl return nil } -func (x *AnnouncePeerRequest) GetRescheduleRequest() *RescheduleRequest { - if x, ok := x.GetRequest().(*AnnouncePeerRequest_RescheduleRequest); ok { - return x.RescheduleRequest +func (x *AnnouncePeerRequest) GetReschedulePeerRequest() *ReschedulePeerRequest { + if x, ok := x.GetRequest().(*AnnouncePeerRequest_ReschedulePeerRequest); ok { + return x.ReschedulePeerRequest } return nil } @@ -882,8 +882,8 @@ type AnnouncePeerRequest_DownloadPeerBackToSourceStartedRequest struct { DownloadPeerBackToSourceStartedRequest *DownloadPeerBackToSourceStartedRequest `protobuf:"bytes,6,opt,name=download_peer_back_to_source_started_request,json=downloadPeerBackToSourceStartedRequest,proto3,oneof"` } -type AnnouncePeerRequest_RescheduleRequest struct { - RescheduleRequest *RescheduleRequest `protobuf:"bytes,7,opt,name=reschedule_request,json=rescheduleRequest,proto3,oneof"` +type AnnouncePeerRequest_ReschedulePeerRequest struct { + ReschedulePeerRequest *ReschedulePeerRequest `protobuf:"bytes,7,opt,name=reschedule_peer_request,json=reschedulePeerRequest,proto3,oneof"` } type AnnouncePeerRequest_DownloadPeerFinishedRequest struct { @@ -924,7 +924,7 @@ func (*AnnouncePeerRequest_DownloadPeerStartedRequest) isAnnouncePeerRequest_Req func (*AnnouncePeerRequest_DownloadPeerBackToSourceStartedRequest) isAnnouncePeerRequest_Request() {} -func (*AnnouncePeerRequest_RescheduleRequest) isAnnouncePeerRequest_Request() {} +func (*AnnouncePeerRequest_ReschedulePeerRequest) isAnnouncePeerRequest_Request() {} func (*AnnouncePeerRequest_DownloadPeerFinishedRequest) isAnnouncePeerRequest_Request() {} @@ -1317,7 +1317,7 @@ type StatTaskRequest struct { unknownFields protoimpl.UnknownFields // Task id. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` } func (x *StatTaskRequest) Reset() { @@ -1352,9 +1352,9 @@ func (*StatTaskRequest) Descriptor() ([]byte, []int) { return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{19} } -func (x *StatTaskRequest) GetId() string { +func (x *StatTaskRequest) GetTaskId() string { if x != nil { - return x.Id + return x.TaskId } return "" } @@ -1473,7 +1473,7 @@ type DeleteHostRequest struct { unknownFields protoimpl.UnknownFields // Host id. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` } func (x *DeleteHostRequest) Reset() { @@ -1508,9 +1508,9 @@ func (*DeleteHostRequest) Descriptor() ([]byte, []int) { return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{22} } -func (x *DeleteHostRequest) GetId() string { +func (x *DeleteHostRequest) GetHostId() string { if x != nil { - return x.Id + return x.HostId } return "" } @@ -1931,6 +1931,897 @@ func (x *SyncProbesResponse) GetHosts() []*v2.Host { return nil } +// RegisterCachePeerRequest represents cache peer registered request of AnnounceCachePeerRequest. +type RegisterCachePeerRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Host id. + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` + // Task id. + TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Tag is used to distinguish different cache tasks. + Tag *string `protobuf:"bytes,3,opt,name=tag,proto3,oneof" json:"tag,omitempty"` + // Application of task. + Application *string `protobuf:"bytes,4,opt,name=application,proto3,oneof" json:"application,omitempty"` + // Task piece length. + PieceLength uint64 `protobuf:"varint,5,opt,name=piece_length,json=pieceLength,proto3" json:"piece_length,omitempty"` + // File path to be exported. + OutputPath string `protobuf:"bytes,6,opt,name=output_path,json=outputPath,proto3" json:"output_path,omitempty"` + // Download timeout. + Timeout *durationpb.Duration `protobuf:"bytes,7,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` +} + +func (x *RegisterCachePeerRequest) Reset() { + *x = RegisterCachePeerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegisterCachePeerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegisterCachePeerRequest) ProtoMessage() {} + +func (x *RegisterCachePeerRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[30] + 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 RegisterCachePeerRequest.ProtoReflect.Descriptor instead. +func (*RegisterCachePeerRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{30} +} + +func (x *RegisterCachePeerRequest) GetHostId() string { + if x != nil { + return x.HostId + } + return "" +} + +func (x *RegisterCachePeerRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +func (x *RegisterCachePeerRequest) GetTag() string { + if x != nil && x.Tag != nil { + return *x.Tag + } + return "" +} + +func (x *RegisterCachePeerRequest) GetApplication() string { + if x != nil && x.Application != nil { + return *x.Application + } + return "" +} + +func (x *RegisterCachePeerRequest) GetPieceLength() uint64 { + if x != nil { + return x.PieceLength + } + return 0 +} + +func (x *RegisterCachePeerRequest) GetOutputPath() string { + if x != nil { + return x.OutputPath + } + return "" +} + +func (x *RegisterCachePeerRequest) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + +// DownloadCachePeerStartedRequest represents cache peer download started request of AnnounceCachePeerRequest. +type DownloadCachePeerStartedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DownloadCachePeerStartedRequest) Reset() { + *x = DownloadCachePeerStartedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DownloadCachePeerStartedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DownloadCachePeerStartedRequest) ProtoMessage() {} + +func (x *DownloadCachePeerStartedRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[31] + 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 DownloadCachePeerStartedRequest.ProtoReflect.Descriptor instead. +func (*DownloadCachePeerStartedRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{31} +} + +// RescheduleCachePeerRequest represents reschedule request of AnnounceCachePeerRequest. +type RescheduleCachePeerRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Candidate parent ids. + CandidateParents []*v2.CachePeer `protobuf:"bytes,1,rep,name=candidate_parents,json=candidateParents,proto3" json:"candidate_parents,omitempty"` + // The description of the reschedule reason. + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` +} + +func (x *RescheduleCachePeerRequest) Reset() { + *x = RescheduleCachePeerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RescheduleCachePeerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RescheduleCachePeerRequest) ProtoMessage() {} + +func (x *RescheduleCachePeerRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[32] + 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 RescheduleCachePeerRequest.ProtoReflect.Descriptor instead. +func (*RescheduleCachePeerRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{32} +} + +func (x *RescheduleCachePeerRequest) GetCandidateParents() []*v2.CachePeer { + if x != nil { + return x.CandidateParents + } + return nil +} + +func (x *RescheduleCachePeerRequest) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" +} + +// DownloadCachePeerFinishedRequest represents cache peer download finished request of AnnounceCachePeerRequest. +type DownloadCachePeerFinishedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Total piece count. + PieceCount uint32 `protobuf:"varint,1,opt,name=piece_count,json=pieceCount,proto3" json:"piece_count,omitempty"` +} + +func (x *DownloadCachePeerFinishedRequest) Reset() { + *x = DownloadCachePeerFinishedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DownloadCachePeerFinishedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DownloadCachePeerFinishedRequest) ProtoMessage() {} + +func (x *DownloadCachePeerFinishedRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[33] + 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 DownloadCachePeerFinishedRequest.ProtoReflect.Descriptor instead. +func (*DownloadCachePeerFinishedRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{33} +} + +func (x *DownloadCachePeerFinishedRequest) GetPieceCount() uint32 { + if x != nil { + return x.PieceCount + } + return 0 +} + +// DownloadCachePeerFailedRequest represents cache peer download failed request of AnnounceCachePeerRequest. +type DownloadCachePeerFailedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The description of the download failed. + Description *string `protobuf:"bytes,1,opt,name=description,proto3,oneof" json:"description,omitempty"` +} + +func (x *DownloadCachePeerFailedRequest) Reset() { + *x = DownloadCachePeerFailedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DownloadCachePeerFailedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DownloadCachePeerFailedRequest) ProtoMessage() {} + +func (x *DownloadCachePeerFailedRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[34] + 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 DownloadCachePeerFailedRequest.ProtoReflect.Descriptor instead. +func (*DownloadCachePeerFailedRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{34} +} + +func (x *DownloadCachePeerFailedRequest) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" +} + +// AnnounceCachePeerRequest represents request of AnnounceCachePeer. +type AnnounceCachePeerRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Host id. + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` + // Task id. + TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Peer id. + PeerId string `protobuf:"bytes,3,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"` + // Types that are assignable to Request: + // + // *AnnounceCachePeerRequest_RegisterCachePeerRequest + // *AnnounceCachePeerRequest_DownloadCachePeerStartedRequest + // *AnnounceCachePeerRequest_RescheduleCachePeerRequest + // *AnnounceCachePeerRequest_DownloadCachePeerFinishedRequest + // *AnnounceCachePeerRequest_DownloadCachePeerFailedRequest + // *AnnounceCachePeerRequest_DownloadPieceFinishedRequest + // *AnnounceCachePeerRequest_DownloadPieceFailedRequest + Request isAnnounceCachePeerRequest_Request `protobuf_oneof:"request"` +} + +func (x *AnnounceCachePeerRequest) Reset() { + *x = AnnounceCachePeerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AnnounceCachePeerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AnnounceCachePeerRequest) ProtoMessage() {} + +func (x *AnnounceCachePeerRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[35] + 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 AnnounceCachePeerRequest.ProtoReflect.Descriptor instead. +func (*AnnounceCachePeerRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{35} +} + +func (x *AnnounceCachePeerRequest) GetHostId() string { + if x != nil { + return x.HostId + } + return "" +} + +func (x *AnnounceCachePeerRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +func (x *AnnounceCachePeerRequest) GetPeerId() string { + if x != nil { + return x.PeerId + } + return "" +} + +func (m *AnnounceCachePeerRequest) GetRequest() isAnnounceCachePeerRequest_Request { + if m != nil { + return m.Request + } + return nil +} + +func (x *AnnounceCachePeerRequest) GetRegisterCachePeerRequest() *RegisterCachePeerRequest { + if x, ok := x.GetRequest().(*AnnounceCachePeerRequest_RegisterCachePeerRequest); ok { + return x.RegisterCachePeerRequest + } + return nil +} + +func (x *AnnounceCachePeerRequest) GetDownloadCachePeerStartedRequest() *DownloadCachePeerStartedRequest { + if x, ok := x.GetRequest().(*AnnounceCachePeerRequest_DownloadCachePeerStartedRequest); ok { + return x.DownloadCachePeerStartedRequest + } + return nil +} + +func (x *AnnounceCachePeerRequest) GetRescheduleCachePeerRequest() *RescheduleCachePeerRequest { + if x, ok := x.GetRequest().(*AnnounceCachePeerRequest_RescheduleCachePeerRequest); ok { + return x.RescheduleCachePeerRequest + } + return nil +} + +func (x *AnnounceCachePeerRequest) GetDownloadCachePeerFinishedRequest() *DownloadCachePeerFinishedRequest { + if x, ok := x.GetRequest().(*AnnounceCachePeerRequest_DownloadCachePeerFinishedRequest); ok { + return x.DownloadCachePeerFinishedRequest + } + return nil +} + +func (x *AnnounceCachePeerRequest) GetDownloadCachePeerFailedRequest() *DownloadCachePeerFailedRequest { + if x, ok := x.GetRequest().(*AnnounceCachePeerRequest_DownloadCachePeerFailedRequest); ok { + return x.DownloadCachePeerFailedRequest + } + return nil +} + +func (x *AnnounceCachePeerRequest) GetDownloadPieceFinishedRequest() *DownloadPieceFinishedRequest { + if x, ok := x.GetRequest().(*AnnounceCachePeerRequest_DownloadPieceFinishedRequest); ok { + return x.DownloadPieceFinishedRequest + } + return nil +} + +func (x *AnnounceCachePeerRequest) GetDownloadPieceFailedRequest() *DownloadPieceFailedRequest { + if x, ok := x.GetRequest().(*AnnounceCachePeerRequest_DownloadPieceFailedRequest); ok { + return x.DownloadPieceFailedRequest + } + return nil +} + +type isAnnounceCachePeerRequest_Request interface { + isAnnounceCachePeerRequest_Request() +} + +type AnnounceCachePeerRequest_RegisterCachePeerRequest struct { + RegisterCachePeerRequest *RegisterCachePeerRequest `protobuf:"bytes,4,opt,name=register_cache_peer_request,json=registerCachePeerRequest,proto3,oneof"` +} + +type AnnounceCachePeerRequest_DownloadCachePeerStartedRequest struct { + DownloadCachePeerStartedRequest *DownloadCachePeerStartedRequest `protobuf:"bytes,5,opt,name=download_cache_peer_started_request,json=downloadCachePeerStartedRequest,proto3,oneof"` +} + +type AnnounceCachePeerRequest_RescheduleCachePeerRequest struct { + RescheduleCachePeerRequest *RescheduleCachePeerRequest `protobuf:"bytes,6,opt,name=reschedule_cache_peer_request,json=rescheduleCachePeerRequest,proto3,oneof"` +} + +type AnnounceCachePeerRequest_DownloadCachePeerFinishedRequest struct { + DownloadCachePeerFinishedRequest *DownloadCachePeerFinishedRequest `protobuf:"bytes,7,opt,name=download_cache_peer_finished_request,json=downloadCachePeerFinishedRequest,proto3,oneof"` +} + +type AnnounceCachePeerRequest_DownloadCachePeerFailedRequest struct { + DownloadCachePeerFailedRequest *DownloadCachePeerFailedRequest `protobuf:"bytes,8,opt,name=download_cache_peer_failed_request,json=downloadCachePeerFailedRequest,proto3,oneof"` +} + +type AnnounceCachePeerRequest_DownloadPieceFinishedRequest struct { + DownloadPieceFinishedRequest *DownloadPieceFinishedRequest `protobuf:"bytes,9,opt,name=download_piece_finished_request,json=downloadPieceFinishedRequest,proto3,oneof"` +} + +type AnnounceCachePeerRequest_DownloadPieceFailedRequest struct { + DownloadPieceFailedRequest *DownloadPieceFailedRequest `protobuf:"bytes,10,opt,name=download_piece_failed_request,json=downloadPieceFailedRequest,proto3,oneof"` +} + +func (*AnnounceCachePeerRequest_RegisterCachePeerRequest) isAnnounceCachePeerRequest_Request() {} + +func (*AnnounceCachePeerRequest_DownloadCachePeerStartedRequest) isAnnounceCachePeerRequest_Request() { +} + +func (*AnnounceCachePeerRequest_RescheduleCachePeerRequest) isAnnounceCachePeerRequest_Request() {} + +func (*AnnounceCachePeerRequest_DownloadCachePeerFinishedRequest) isAnnounceCachePeerRequest_Request() { +} + +func (*AnnounceCachePeerRequest_DownloadCachePeerFailedRequest) isAnnounceCachePeerRequest_Request() { +} + +func (*AnnounceCachePeerRequest_DownloadPieceFinishedRequest) isAnnounceCachePeerRequest_Request() {} + +func (*AnnounceCachePeerRequest_DownloadPieceFailedRequest) isAnnounceCachePeerRequest_Request() {} + +// EmptyCacheTaskResponse represents empty cache task response of AnnounceCachePeerResponse. +type EmptyCacheTaskResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *EmptyCacheTaskResponse) Reset() { + *x = EmptyCacheTaskResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EmptyCacheTaskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmptyCacheTaskResponse) ProtoMessage() {} + +func (x *EmptyCacheTaskResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[36] + 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 EmptyCacheTaskResponse.ProtoReflect.Descriptor instead. +func (*EmptyCacheTaskResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{36} +} + +// NormalCacheTaskResponse represents normal cache task response of AnnounceCachePeerResponse. +type NormalCacheTaskResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Candidate parents. + CandidateParents []*v2.CachePeer `protobuf:"bytes,1,rep,name=candidate_parents,json=candidateParents,proto3" json:"candidate_parents,omitempty"` +} + +func (x *NormalCacheTaskResponse) Reset() { + *x = NormalCacheTaskResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NormalCacheTaskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NormalCacheTaskResponse) ProtoMessage() {} + +func (x *NormalCacheTaskResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[37] + 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 NormalCacheTaskResponse.ProtoReflect.Descriptor instead. +func (*NormalCacheTaskResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{37} +} + +func (x *NormalCacheTaskResponse) GetCandidateParents() []*v2.CachePeer { + if x != nil { + return x.CandidateParents + } + return nil +} + +// AnnounceCachePeerResponse represents response of AnnounceCachePeer. +type AnnounceCachePeerResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Response: + // + // *AnnounceCachePeerResponse_EmptyTaskResponse + // *AnnounceCachePeerResponse_NormalTaskResponse + Response isAnnounceCachePeerResponse_Response `protobuf_oneof:"response"` +} + +func (x *AnnounceCachePeerResponse) Reset() { + *x = AnnounceCachePeerResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AnnounceCachePeerResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AnnounceCachePeerResponse) ProtoMessage() {} + +func (x *AnnounceCachePeerResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[38] + 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 AnnounceCachePeerResponse.ProtoReflect.Descriptor instead. +func (*AnnounceCachePeerResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{38} +} + +func (m *AnnounceCachePeerResponse) GetResponse() isAnnounceCachePeerResponse_Response { + if m != nil { + return m.Response + } + return nil +} + +func (x *AnnounceCachePeerResponse) GetEmptyTaskResponse() *EmptyCacheTaskResponse { + if x, ok := x.GetResponse().(*AnnounceCachePeerResponse_EmptyTaskResponse); ok { + return x.EmptyTaskResponse + } + return nil +} + +func (x *AnnounceCachePeerResponse) GetNormalTaskResponse() *NormalCacheTaskResponse { + if x, ok := x.GetResponse().(*AnnounceCachePeerResponse_NormalTaskResponse); ok { + return x.NormalTaskResponse + } + return nil +} + +type isAnnounceCachePeerResponse_Response interface { + isAnnounceCachePeerResponse_Response() +} + +type AnnounceCachePeerResponse_EmptyTaskResponse struct { + EmptyTaskResponse *EmptyCacheTaskResponse `protobuf:"bytes,1,opt,name=empty_task_response,json=emptyTaskResponse,proto3,oneof"` +} + +type AnnounceCachePeerResponse_NormalTaskResponse struct { + NormalTaskResponse *NormalCacheTaskResponse `protobuf:"bytes,2,opt,name=normal_task_response,json=normalTaskResponse,proto3,oneof"` +} + +func (*AnnounceCachePeerResponse_EmptyTaskResponse) isAnnounceCachePeerResponse_Response() {} + +func (*AnnounceCachePeerResponse_NormalTaskResponse) isAnnounceCachePeerResponse_Response() {} + +// StatCachePeerRequest represents request of StatCachePeer. +type StatCachePeerRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Host id. + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` + // Task id. + TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Peer id. + PeerId string `protobuf:"bytes,3,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"` +} + +func (x *StatCachePeerRequest) Reset() { + *x = StatCachePeerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatCachePeerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatCachePeerRequest) ProtoMessage() {} + +func (x *StatCachePeerRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[39] + 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 StatCachePeerRequest.ProtoReflect.Descriptor instead. +func (*StatCachePeerRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{39} +} + +func (x *StatCachePeerRequest) GetHostId() string { + if x != nil { + return x.HostId + } + return "" +} + +func (x *StatCachePeerRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +func (x *StatCachePeerRequest) GetPeerId() string { + if x != nil { + return x.PeerId + } + return "" +} + +// DeleteCachePeerRequest represents request of DeleteCachePeer. +type DeleteCachePeerRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Host id. + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` + // Task id. + TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // Peer id. + PeerId string `protobuf:"bytes,3,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"` +} + +func (x *DeleteCachePeerRequest) Reset() { + *x = DeleteCachePeerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteCachePeerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteCachePeerRequest) ProtoMessage() {} + +func (x *DeleteCachePeerRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[40] + 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 DeleteCachePeerRequest.ProtoReflect.Descriptor instead. +func (*DeleteCachePeerRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{40} +} + +func (x *DeleteCachePeerRequest) GetHostId() string { + if x != nil { + return x.HostId + } + return "" +} + +func (x *DeleteCachePeerRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +func (x *DeleteCachePeerRequest) GetPeerId() string { + if x != nil { + return x.PeerId + } + return "" +} + +// StatCacheTaskRequest represents request of StatCacheTask. +type StatCacheTaskRequest 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 *StatCacheTaskRequest) Reset() { + *x = StatCacheTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatCacheTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatCacheTaskRequest) ProtoMessage() {} + +func (x *StatCacheTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[41] + 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 StatCacheTaskRequest.ProtoReflect.Descriptor instead. +func (*StatCacheTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{41} +} + +func (x *StatCacheTaskRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +// DeleteCacheTaskRequest represents request of DeleteCacheTask. +type DeleteCacheTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Host id. + HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` + // Task id. + TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` +} + +func (x *DeleteCacheTaskRequest) Reset() { + *x = DeleteCacheTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteCacheTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteCacheTaskRequest) ProtoMessage() {} + +func (x *DeleteCacheTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[42] + 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 DeleteCacheTaskRequest.ProtoReflect.Descriptor instead. +func (*DeleteCacheTaskRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP(), []int{42} +} + +func (x *DeleteCacheTaskRequest) GetHostId() string { + if x != nil { + return x.HostId + } + return "" +} + +func (x *DeleteCacheTaskRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + var File_pkg_apis_scheduler_v2_scheduler_proto protoreflect.FileDescriptor var file_pkg_apis_scheduler_v2_scheduler_proto_rawDesc = []byte{ @@ -1963,339 +2854,520 @@ var file_pkg_apis_scheduler_v2_scheduler_proto_rawDesc = []byte{ 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, - 0x11, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x10, 0x63, 0x61, 0x6e, 0x64, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, - 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x65, - 0x0a, 0x1b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x69, 0x65, 0x63, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x71, 0x0a, 0x27, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 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, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x69, - 0x65, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5e, 0x0a, 0x19, 0x44, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x98, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3c, 0x0a, 0x11, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x10, 0x63, + 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x31, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, + 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, + 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x65, 0x0a, 0x1b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, + 0x65, 0x72, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 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, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x65, 0x63, + 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, + 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x71, 0x0a, 0x27, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 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, 0x12, 0x1f, 0x0a, 0x0b, 0x70, + 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x70, 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5e, 0x0a, 0x19, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, + 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, + 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6a, 0x0a, 0x25, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, + 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6a, 0x0a, 0x25, 0x44, 0x6f, 0x77, 0x6e, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x1c, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x70, 0x69, 0x65, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x22, 0x5c, 0x0a, 0x28, 0x44, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, + 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x1a, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, + 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, + 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, + 0x24, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, + 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, + 0x61, 0x72, 0x79, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x22, 0xa8, 0x01, 0x0a, 0x26, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x26, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x01, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x48, 0x00, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x42, 0x0f, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x42, 0x0f, + 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, + 0xed, 0x0c, 0x0a, 0x13, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x50, 0x65, 0x65, 0x72, + 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, 0x57, 0x0a, + 0x15, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x13, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x65, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6d, 0x0a, 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x94, 0x01, 0x0a, 0x2c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x31, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, - 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x1c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x22, 0x5c, 0x0a, 0x28, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, - 0x65, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x1a, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x69, 0x65, - 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x09, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x42, - 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x22, 0xa8, 0x01, 0x0a, 0x26, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, - 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0c, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x48, 0x01, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x48, 0x00, - 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x42, 0x0f, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xe0, 0x0c, 0x0a, 0x13, - 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x26, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, + 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x17, + 0x72, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x70, 0x0a, 0x1e, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6e, + 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, + 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x1b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x97, 0x01, + 0x0a, 0x2d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, + 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, + 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, + 0x72, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6e, + 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x27, + 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, + 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6a, 0x0a, 0x1c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x19, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x91, 0x01, 0x0a, 0x2b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x25, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, + 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x73, 0x0a, 0x1f, 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, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 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, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x1c, + 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, + 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x9a, 0x01, 0x0a, + 0x2e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, + 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, + 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, + 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x28, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x61, + 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6d, 0x0a, 0x1d, 0x64, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x64, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x94, 0x01, 0x0a, 0x2c, 0x64, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, + 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x34, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, + 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x26, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, + 0x0e, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, + 0x13, 0x0a, 0x11, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x0a, 0x12, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x63, 0x61, + 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x10, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x5d, 0x0a, 0x18, 0x4e, 0x65, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, + 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, + 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0xba, 0x02, 0x0a, 0x14, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x50, 0x65, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x13, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x11, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, + 0x14, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x72, 0x6d, 0x61, + 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x12, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x1c, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, + 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x65, 0x65, 0x64, 0x42, 0x61, 0x63, + 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x48, 0x00, 0x52, 0x18, 0x6e, 0x65, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0x77, + 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x65, 0x72, 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, 0x22, 0x79, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x50, 0x65, 0x65, 0x72, 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, 0x22, 0x33, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x74, 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, 0x57, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x61, 0x73, 0x6b, 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, + 0x22, 0x44, 0x0a, 0x13, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x22, 0x35, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 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, 0x22, 0x15, 0x0a, + 0x13, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0xb2, 0x01, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x2d, + 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x35, 0x0a, + 0x03, 0x72, 0x74, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x01, 0x52, + 0x03, 0x72, 0x74, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x4d, 0x0a, 0x14, 0x50, 0x72, 0x6f, + 0x62, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x35, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, + 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x22, 0x7f, 0x0a, 0x0b, 0x46, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, + 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x12, 0x50, 0x72, 0x6f, + 0x62, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3b, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, + 0x01, 0x02, 0x08, 0x01, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x22, 0xdd, 0x02, 0x0a, + 0x11, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, + 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x68, 0x6f, 0x73, + 0x74, 0x12, 0x57, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, + 0x50, 0x72, 0x6f, 0x62, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x16, 0x70, 0x72, + 0x6f, 0x62, 0x65, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x46, + 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x14, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, + 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a, 0x07, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0x47, 0x0a, 0x12, + 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, + 0x73, 0x74, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x28, 0x01, 0x52, 0x05, + 0x68, 0x6f, 0x73, 0x74, 0x73, 0x22, 0xd0, 0x02, 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 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, 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, 0x2a, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x32, + 0x02, 0x28, 0x01, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x12, 0x28, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 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, 0x21, 0x0a, 0x1f, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa2, 0x01, 0x0a, 0x1a, + 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, + 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x11, 0x63, 0x61, + 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x10, 0x63, 0x61, 0x6e, + 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x31, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, + 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x43, 0x0a, 0x20, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x50, 0x65, 0x65, 0x72, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x69, 0x65, 0x63, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x63, 0x0a, 0x1e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, + 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xca, 0x07, 0x0a, 0x18, 0x41, + 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, + 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, 0x67, 0x0a, + 0x1b, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, + 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, + 0x32, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, + 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x18, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7d, 0x0a, 0x23, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6d, 0x0a, 0x1d, 0x72, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x80, 0x01, 0x0a, 0x24, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6e, + 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x50, 0x65, 0x65, 0x72, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7a, 0x0a, 0x22, 0x64, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x66, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x1e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x73, 0x0a, 0x1f, 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, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 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, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x64, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6d, 0x0a, 0x1d, 0x64, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x64, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0x18, 0x0a, 0x16, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x66, 0x0a, 0x17, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x11, + 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x10, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xdf, 0x01, 0x0a, 0x19, 0x41, 0x6e, + 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x13, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x11, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x59, 0x0a, 0x14, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x72, + 0x6d, 0x61, 0x6c, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x12, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x61, + 0x73, 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, 0x7c, 0x0a, 0x14, 0x53, + 0x74, 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 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, 0x57, 0x0a, 0x15, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x13, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x6d, 0x0a, 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, - 0x65, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, - 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x94, 0x01, 0x0a, 0x2c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, - 0x65, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, - 0x52, 0x26, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, - 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, - 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x70, 0x0a, 0x1e, 0x64, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, - 0x1b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x97, 0x01, 0x0a, - 0x2d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x62, - 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, - 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x27, 0x64, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x54, - 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6a, 0x0a, 0x1c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x19, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x50, 0x65, 0x65, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x91, 0x01, 0x0a, 0x2b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, - 0x70, 0x65, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, - 0x25, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x65, 0x72, 0x42, 0x61, 0x63, - 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x73, 0x0a, 0x1f, 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, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 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, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x64, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x9a, 0x01, 0x0a, 0x2e, - 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x62, - 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, - 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x28, - 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x61, 0x63, - 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6d, 0x0a, 0x1d, 0x64, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x94, 0x01, 0x0a, 0x2c, 0x64, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, - 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, - 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x26, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, - 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0x13, - 0x0a, 0x11, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x0a, 0x12, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x61, 0x73, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x63, 0x61, 0x6e, - 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x65, 0x65, 0x72, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, - 0x10, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x73, 0x22, 0x5d, 0x0a, 0x18, 0x4e, 0x65, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, - 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0xba, 0x02, 0x0a, 0x14, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x50, 0x65, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x13, 0x65, 0x6d, 0x70, - 0x74, 0x79, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x11, 0x65, 0x6d, 0x70, 0x74, 0x79, - 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x14, - 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, - 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x12, - 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x68, 0x0a, 0x1c, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x5f, - 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x65, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, - 0x54, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x48, 0x00, 0x52, 0x18, 0x6e, 0x65, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 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, 0x77, 0x0a, - 0x0f, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x65, 0x72, 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, 0x22, 0x79, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x50, 0x65, 0x65, 0x72, 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, 0x22, 0x2a, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x57, 0x0a, - 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 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, 0x22, 0x44, 0x0a, 0x13, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, - 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, - 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x11, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x50, 0x72, - 0x6f, 0x62, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0xb2, 0x01, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x68, - 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x03, 0x72, 0x74, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xaa, 0x01, 0x02, 0x08, 0x01, 0x52, 0x03, 0x72, 0x74, - 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x4d, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x46, - 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, - 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, - 0x6f, 0x62, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x06, 0x70, - 0x72, 0x6f, 0x62, 0x65, 0x73, 0x22, 0x7f, 0x0a, 0x0b, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x50, - 0x72, 0x6f, 0x62, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, - 0x6f, 0x73, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x68, - 0x6f, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, - 0x01, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x46, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x06, - 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, - 0x01, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x22, 0xdd, 0x02, 0x0a, 0x11, 0x53, 0x79, - 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2d, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x57, - 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, - 0x62, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x48, 0x00, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x62, 0x65, - 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x46, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x70, - 0x72, 0x6f, 0x62, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, 0x66, 0x61, 0x69, - 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x46, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0x47, 0x0a, 0x12, 0x53, 0x79, 0x6e, - 0x63, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x31, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x42, - 0x0a, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x28, 0x01, 0x52, 0x05, 0x68, 0x6f, 0x73, - 0x74, 0x73, 0x32, 0xd3, 0x04, 0x0a, 0x09, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, - 0x12, 0x59, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x50, 0x65, 0x65, 0x72, + 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x22, 0x7e, 0x0a, 0x16, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 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, 0x22, 0x38, 0x0a, 0x14, 0x53, 0x74, 0x61, + 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, 0x5c, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 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, 0x32, 0xf5, 0x07, 0x0a, 0x09, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x12, + 0x59, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, + 0x21, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x41, + 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, + 0x32, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x08, 0x53, 0x74, + 0x61, 0x74, 0x50, 0x65, 0x65, 0x72, 0x12, 0x1d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x50, 0x65, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 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, 0x3a, 0x0a, + 0x08, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1d, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 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, 0x45, 0x0a, 0x0a, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 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, 0x49, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x21, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, - 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, - 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x08, 0x53, - 0x74, 0x61, 0x74, 0x50, 0x65, 0x65, 0x72, 0x12, 0x1d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x65, 0x72, 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, 0x3a, - 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1d, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 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, 0x45, 0x0a, 0x0a, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x72, 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, 0x49, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x48, 0x6f, 0x73, - 0x74, 0x12, 0x21, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, - 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74, 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, 0x45, 0x0a, 0x0a, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x48, 0x6f, 0x73, 0x74, 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, 0x53, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x62, 0x65, - 0x73, 0x12, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x2f, 0x5a, 0x2d, 0x64, 0x37, 0x79, 0x2e, - 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, - 0x69, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x3b, - 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x48, 0x6f, 0x73, 0x74, 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, 0x45, 0x0a, 0x0a, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, + 0x6f, 0x73, 0x74, 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, 0x53, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, + 0x12, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x11, 0x41, 0x6e, 0x6e, 0x6f, 0x75, + 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, + 0x75, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, + 0x01, 0x12, 0x49, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, + 0x65, 0x72, 0x12, 0x22, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x0f, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, + 0x24, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x65, 0x65, 0x72, 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, 0x49, 0x0a, + 0x0d, 0x53, 0x74, 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x22, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x4f, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x24, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 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, 0x2f, 0x5a, 0x2d, 0x64, 0x37, 0x79, + 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, + 0x70, 0x69, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, + 0x3b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2310,12 +3382,12 @@ func file_pkg_apis_scheduler_v2_scheduler_proto_rawDescGZIP() []byte { return file_pkg_apis_scheduler_v2_scheduler_proto_rawDescData } -var file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes = make([]protoimpl.MessageInfo, 43) var file_pkg_apis_scheduler_v2_scheduler_proto_goTypes = []interface{}{ (*RegisterPeerRequest)(nil), // 0: scheduler.v2.RegisterPeerRequest (*DownloadPeerStartedRequest)(nil), // 1: scheduler.v2.DownloadPeerStartedRequest (*DownloadPeerBackToSourceStartedRequest)(nil), // 2: scheduler.v2.DownloadPeerBackToSourceStartedRequest - (*RescheduleRequest)(nil), // 3: scheduler.v2.RescheduleRequest + (*ReschedulePeerRequest)(nil), // 3: scheduler.v2.ReschedulePeerRequest (*DownloadPeerFinishedRequest)(nil), // 4: scheduler.v2.DownloadPeerFinishedRequest (*DownloadPeerBackToSourceFinishedRequest)(nil), // 5: scheduler.v2.DownloadPeerBackToSourceFinishedRequest (*DownloadPeerFailedRequest)(nil), // 6: scheduler.v2.DownloadPeerFailedRequest @@ -2342,26 +3414,41 @@ var file_pkg_apis_scheduler_v2_scheduler_proto_goTypes = []interface{}{ (*ProbeFailedRequest)(nil), // 27: scheduler.v2.ProbeFailedRequest (*SyncProbesRequest)(nil), // 28: scheduler.v2.SyncProbesRequest (*SyncProbesResponse)(nil), // 29: scheduler.v2.SyncProbesResponse - (*v2.Download)(nil), // 30: common.v2.Download - (*v2.Peer)(nil), // 31: common.v2.Peer - (*v2.Piece)(nil), // 32: common.v2.Piece - (*v21.Backend)(nil), // 33: errordetails.v2.Backend - (*v2.Host)(nil), // 34: common.v2.Host - (*durationpb.Duration)(nil), // 35: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 36: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 37: google.protobuf.Empty - (*v2.Task)(nil), // 38: common.v2.Task + (*RegisterCachePeerRequest)(nil), // 30: scheduler.v2.RegisterCachePeerRequest + (*DownloadCachePeerStartedRequest)(nil), // 31: scheduler.v2.DownloadCachePeerStartedRequest + (*RescheduleCachePeerRequest)(nil), // 32: scheduler.v2.RescheduleCachePeerRequest + (*DownloadCachePeerFinishedRequest)(nil), // 33: scheduler.v2.DownloadCachePeerFinishedRequest + (*DownloadCachePeerFailedRequest)(nil), // 34: scheduler.v2.DownloadCachePeerFailedRequest + (*AnnounceCachePeerRequest)(nil), // 35: scheduler.v2.AnnounceCachePeerRequest + (*EmptyCacheTaskResponse)(nil), // 36: scheduler.v2.EmptyCacheTaskResponse + (*NormalCacheTaskResponse)(nil), // 37: scheduler.v2.NormalCacheTaskResponse + (*AnnounceCachePeerResponse)(nil), // 38: scheduler.v2.AnnounceCachePeerResponse + (*StatCachePeerRequest)(nil), // 39: scheduler.v2.StatCachePeerRequest + (*DeleteCachePeerRequest)(nil), // 40: scheduler.v2.DeleteCachePeerRequest + (*StatCacheTaskRequest)(nil), // 41: scheduler.v2.StatCacheTaskRequest + (*DeleteCacheTaskRequest)(nil), // 42: scheduler.v2.DeleteCacheTaskRequest + (*v2.Download)(nil), // 43: common.v2.Download + (*v2.Peer)(nil), // 44: common.v2.Peer + (*v2.Piece)(nil), // 45: common.v2.Piece + (*v21.Backend)(nil), // 46: errordetails.v2.Backend + (*v2.Host)(nil), // 47: common.v2.Host + (*durationpb.Duration)(nil), // 48: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 49: google.protobuf.Timestamp + (*v2.CachePeer)(nil), // 50: common.v2.CachePeer + (*emptypb.Empty)(nil), // 51: google.protobuf.Empty + (*v2.Task)(nil), // 52: common.v2.Task + (*v2.CacheTask)(nil), // 53: common.v2.CacheTask } var file_pkg_apis_scheduler_v2_scheduler_proto_depIdxs = []int32{ - 30, // 0: scheduler.v2.RegisterPeerRequest.download:type_name -> common.v2.Download - 31, // 1: scheduler.v2.RescheduleRequest.candidate_parents:type_name -> common.v2.Peer - 32, // 2: scheduler.v2.DownloadPieceFinishedRequest.piece:type_name -> common.v2.Piece - 32, // 3: scheduler.v2.DownloadPieceBackToSourceFinishedRequest.piece:type_name -> common.v2.Piece - 33, // 4: scheduler.v2.DownloadPieceBackToSourceFailedRequest.backend:type_name -> errordetails.v2.Backend + 43, // 0: scheduler.v2.RegisterPeerRequest.download:type_name -> common.v2.Download + 44, // 1: scheduler.v2.ReschedulePeerRequest.candidate_parents:type_name -> common.v2.Peer + 45, // 2: scheduler.v2.DownloadPieceFinishedRequest.piece:type_name -> common.v2.Piece + 45, // 3: scheduler.v2.DownloadPieceBackToSourceFinishedRequest.piece:type_name -> common.v2.Piece + 46, // 4: scheduler.v2.DownloadPieceBackToSourceFailedRequest.backend:type_name -> errordetails.v2.Backend 0, // 5: scheduler.v2.AnnouncePeerRequest.register_peer_request:type_name -> scheduler.v2.RegisterPeerRequest 1, // 6: scheduler.v2.AnnouncePeerRequest.download_peer_started_request:type_name -> scheduler.v2.DownloadPeerStartedRequest 2, // 7: scheduler.v2.AnnouncePeerRequest.download_peer_back_to_source_started_request:type_name -> scheduler.v2.DownloadPeerBackToSourceStartedRequest - 3, // 8: scheduler.v2.AnnouncePeerRequest.reschedule_request:type_name -> scheduler.v2.RescheduleRequest + 3, // 8: scheduler.v2.AnnouncePeerRequest.reschedule_peer_request:type_name -> scheduler.v2.ReschedulePeerRequest 4, // 9: scheduler.v2.AnnouncePeerRequest.download_peer_finished_request:type_name -> scheduler.v2.DownloadPeerFinishedRequest 5, // 10: scheduler.v2.AnnouncePeerRequest.download_peer_back_to_source_finished_request:type_name -> scheduler.v2.DownloadPeerBackToSourceFinishedRequest 6, // 11: scheduler.v2.AnnouncePeerRequest.download_peer_failed_request:type_name -> scheduler.v2.DownloadPeerFailedRequest @@ -2370,43 +3457,65 @@ var file_pkg_apis_scheduler_v2_scheduler_proto_depIdxs = []int32{ 9, // 14: scheduler.v2.AnnouncePeerRequest.download_piece_back_to_source_finished_request:type_name -> scheduler.v2.DownloadPieceBackToSourceFinishedRequest 10, // 15: scheduler.v2.AnnouncePeerRequest.download_piece_failed_request:type_name -> scheduler.v2.DownloadPieceFailedRequest 11, // 16: scheduler.v2.AnnouncePeerRequest.download_piece_back_to_source_failed_request:type_name -> scheduler.v2.DownloadPieceBackToSourceFailedRequest - 31, // 17: scheduler.v2.NormalTaskResponse.candidate_parents:type_name -> common.v2.Peer + 44, // 17: scheduler.v2.NormalTaskResponse.candidate_parents:type_name -> common.v2.Peer 13, // 18: scheduler.v2.AnnouncePeerResponse.empty_task_response:type_name -> scheduler.v2.EmptyTaskResponse 14, // 19: scheduler.v2.AnnouncePeerResponse.normal_task_response:type_name -> scheduler.v2.NormalTaskResponse 15, // 20: scheduler.v2.AnnouncePeerResponse.need_back_to_source_response:type_name -> scheduler.v2.NeedBackToSourceResponse - 34, // 21: scheduler.v2.AnnounceHostRequest.host:type_name -> common.v2.Host - 34, // 22: scheduler.v2.Probe.host:type_name -> common.v2.Host - 35, // 23: scheduler.v2.Probe.rtt:type_name -> google.protobuf.Duration - 36, // 24: scheduler.v2.Probe.created_at:type_name -> google.protobuf.Timestamp + 47, // 21: scheduler.v2.AnnounceHostRequest.host:type_name -> common.v2.Host + 47, // 22: scheduler.v2.Probe.host:type_name -> common.v2.Host + 48, // 23: scheduler.v2.Probe.rtt:type_name -> google.protobuf.Duration + 49, // 24: scheduler.v2.Probe.created_at:type_name -> google.protobuf.Timestamp 24, // 25: scheduler.v2.ProbeFinishedRequest.probes:type_name -> scheduler.v2.Probe - 34, // 26: scheduler.v2.FailedProbe.host:type_name -> common.v2.Host + 47, // 26: scheduler.v2.FailedProbe.host:type_name -> common.v2.Host 26, // 27: scheduler.v2.ProbeFailedRequest.probes:type_name -> scheduler.v2.FailedProbe - 34, // 28: scheduler.v2.SyncProbesRequest.host:type_name -> common.v2.Host + 47, // 28: scheduler.v2.SyncProbesRequest.host:type_name -> common.v2.Host 23, // 29: scheduler.v2.SyncProbesRequest.probe_started_request:type_name -> scheduler.v2.ProbeStartedRequest 25, // 30: scheduler.v2.SyncProbesRequest.probe_finished_request:type_name -> scheduler.v2.ProbeFinishedRequest 27, // 31: scheduler.v2.SyncProbesRequest.probe_failed_request:type_name -> scheduler.v2.ProbeFailedRequest - 34, // 32: scheduler.v2.SyncProbesResponse.hosts:type_name -> common.v2.Host - 12, // 33: scheduler.v2.Scheduler.AnnouncePeer:input_type -> scheduler.v2.AnnouncePeerRequest - 17, // 34: scheduler.v2.Scheduler.StatPeer:input_type -> scheduler.v2.StatPeerRequest - 18, // 35: scheduler.v2.Scheduler.DeletePeer:input_type -> scheduler.v2.DeletePeerRequest - 19, // 36: scheduler.v2.Scheduler.StatTask:input_type -> scheduler.v2.StatTaskRequest - 20, // 37: scheduler.v2.Scheduler.DeleteTask:input_type -> scheduler.v2.DeleteTaskRequest - 21, // 38: scheduler.v2.Scheduler.AnnounceHost:input_type -> scheduler.v2.AnnounceHostRequest - 22, // 39: scheduler.v2.Scheduler.DeleteHost:input_type -> scheduler.v2.DeleteHostRequest - 28, // 40: scheduler.v2.Scheduler.SyncProbes:input_type -> scheduler.v2.SyncProbesRequest - 16, // 41: scheduler.v2.Scheduler.AnnouncePeer:output_type -> scheduler.v2.AnnouncePeerResponse - 31, // 42: scheduler.v2.Scheduler.StatPeer:output_type -> common.v2.Peer - 37, // 43: scheduler.v2.Scheduler.DeletePeer:output_type -> google.protobuf.Empty - 38, // 44: scheduler.v2.Scheduler.StatTask:output_type -> common.v2.Task - 37, // 45: scheduler.v2.Scheduler.DeleteTask:output_type -> google.protobuf.Empty - 37, // 46: scheduler.v2.Scheduler.AnnounceHost:output_type -> google.protobuf.Empty - 37, // 47: scheduler.v2.Scheduler.DeleteHost:output_type -> google.protobuf.Empty - 29, // 48: scheduler.v2.Scheduler.SyncProbes:output_type -> scheduler.v2.SyncProbesResponse - 41, // [41:49] is the sub-list for method output_type - 33, // [33:41] is the sub-list for method input_type - 33, // [33:33] is the sub-list for extension type_name - 33, // [33:33] is the sub-list for extension extendee - 0, // [0:33] is the sub-list for field type_name + 47, // 32: scheduler.v2.SyncProbesResponse.hosts:type_name -> common.v2.Host + 48, // 33: scheduler.v2.RegisterCachePeerRequest.timeout:type_name -> google.protobuf.Duration + 50, // 34: scheduler.v2.RescheduleCachePeerRequest.candidate_parents:type_name -> common.v2.CachePeer + 30, // 35: scheduler.v2.AnnounceCachePeerRequest.register_cache_peer_request:type_name -> scheduler.v2.RegisterCachePeerRequest + 31, // 36: scheduler.v2.AnnounceCachePeerRequest.download_cache_peer_started_request:type_name -> scheduler.v2.DownloadCachePeerStartedRequest + 32, // 37: scheduler.v2.AnnounceCachePeerRequest.reschedule_cache_peer_request:type_name -> scheduler.v2.RescheduleCachePeerRequest + 33, // 38: scheduler.v2.AnnounceCachePeerRequest.download_cache_peer_finished_request:type_name -> scheduler.v2.DownloadCachePeerFinishedRequest + 34, // 39: scheduler.v2.AnnounceCachePeerRequest.download_cache_peer_failed_request:type_name -> scheduler.v2.DownloadCachePeerFailedRequest + 8, // 40: scheduler.v2.AnnounceCachePeerRequest.download_piece_finished_request:type_name -> scheduler.v2.DownloadPieceFinishedRequest + 10, // 41: scheduler.v2.AnnounceCachePeerRequest.download_piece_failed_request:type_name -> scheduler.v2.DownloadPieceFailedRequest + 50, // 42: scheduler.v2.NormalCacheTaskResponse.candidate_parents:type_name -> common.v2.CachePeer + 36, // 43: scheduler.v2.AnnounceCachePeerResponse.empty_task_response:type_name -> scheduler.v2.EmptyCacheTaskResponse + 37, // 44: scheduler.v2.AnnounceCachePeerResponse.normal_task_response:type_name -> scheduler.v2.NormalCacheTaskResponse + 12, // 45: scheduler.v2.Scheduler.AnnouncePeer:input_type -> scheduler.v2.AnnouncePeerRequest + 17, // 46: scheduler.v2.Scheduler.StatPeer:input_type -> scheduler.v2.StatPeerRequest + 18, // 47: scheduler.v2.Scheduler.DeletePeer:input_type -> scheduler.v2.DeletePeerRequest + 19, // 48: scheduler.v2.Scheduler.StatTask:input_type -> scheduler.v2.StatTaskRequest + 20, // 49: scheduler.v2.Scheduler.DeleteTask:input_type -> scheduler.v2.DeleteTaskRequest + 21, // 50: scheduler.v2.Scheduler.AnnounceHost:input_type -> scheduler.v2.AnnounceHostRequest + 22, // 51: scheduler.v2.Scheduler.DeleteHost:input_type -> scheduler.v2.DeleteHostRequest + 28, // 52: scheduler.v2.Scheduler.SyncProbes:input_type -> scheduler.v2.SyncProbesRequest + 35, // 53: scheduler.v2.Scheduler.AnnounceCachePeer:input_type -> scheduler.v2.AnnounceCachePeerRequest + 39, // 54: scheduler.v2.Scheduler.StatCachePeer:input_type -> scheduler.v2.StatCachePeerRequest + 40, // 55: scheduler.v2.Scheduler.DeleteCachePeer:input_type -> scheduler.v2.DeleteCachePeerRequest + 41, // 56: scheduler.v2.Scheduler.StatCacheTask:input_type -> scheduler.v2.StatCacheTaskRequest + 42, // 57: scheduler.v2.Scheduler.DeleteCacheTask:input_type -> scheduler.v2.DeleteCacheTaskRequest + 16, // 58: scheduler.v2.Scheduler.AnnouncePeer:output_type -> scheduler.v2.AnnouncePeerResponse + 44, // 59: scheduler.v2.Scheduler.StatPeer:output_type -> common.v2.Peer + 51, // 60: scheduler.v2.Scheduler.DeletePeer:output_type -> google.protobuf.Empty + 52, // 61: scheduler.v2.Scheduler.StatTask:output_type -> common.v2.Task + 51, // 62: scheduler.v2.Scheduler.DeleteTask:output_type -> google.protobuf.Empty + 51, // 63: scheduler.v2.Scheduler.AnnounceHost:output_type -> google.protobuf.Empty + 51, // 64: scheduler.v2.Scheduler.DeleteHost:output_type -> google.protobuf.Empty + 29, // 65: scheduler.v2.Scheduler.SyncProbes:output_type -> scheduler.v2.SyncProbesResponse + 38, // 66: scheduler.v2.Scheduler.AnnounceCachePeer:output_type -> scheduler.v2.AnnounceCachePeerResponse + 50, // 67: scheduler.v2.Scheduler.StatCachePeer:output_type -> common.v2.CachePeer + 51, // 68: scheduler.v2.Scheduler.DeleteCachePeer:output_type -> google.protobuf.Empty + 53, // 69: scheduler.v2.Scheduler.StatCacheTask:output_type -> common.v2.CacheTask + 51, // 70: scheduler.v2.Scheduler.DeleteCacheTask:output_type -> google.protobuf.Empty + 58, // [58:71] is the sub-list for method output_type + 45, // [45:58] is the sub-list for method input_type + 45, // [45:45] is the sub-list for extension type_name + 45, // [45:45] is the sub-list for extension extendee + 0, // [0:45] is the sub-list for field type_name } func init() { file_pkg_apis_scheduler_v2_scheduler_proto_init() } @@ -2452,7 +3561,7 @@ func file_pkg_apis_scheduler_v2_scheduler_proto_init() { } } file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RescheduleRequest); i { + switch v := v.(*ReschedulePeerRequest); i { case 0: return &v.state case 1: @@ -2775,6 +3884,162 @@ func file_pkg_apis_scheduler_v2_scheduler_proto_init() { return nil } } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegisterCachePeerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DownloadCachePeerStartedRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RescheduleCachePeerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DownloadCachePeerFinishedRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DownloadCachePeerFailedRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AnnounceCachePeerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EmptyCacheTaskResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NormalCacheTaskResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AnnounceCachePeerResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatCachePeerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteCachePeerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatCacheTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteCacheTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[2].OneofWrappers = []interface{}{} file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[3].OneofWrappers = []interface{}{} @@ -2788,7 +4053,7 @@ func file_pkg_apis_scheduler_v2_scheduler_proto_init() { (*AnnouncePeerRequest_RegisterPeerRequest)(nil), (*AnnouncePeerRequest_DownloadPeerStartedRequest)(nil), (*AnnouncePeerRequest_DownloadPeerBackToSourceStartedRequest)(nil), - (*AnnouncePeerRequest_RescheduleRequest)(nil), + (*AnnouncePeerRequest_ReschedulePeerRequest)(nil), (*AnnouncePeerRequest_DownloadPeerFinishedRequest)(nil), (*AnnouncePeerRequest_DownloadPeerBackToSourceFinishedRequest)(nil), (*AnnouncePeerRequest_DownloadPeerFailedRequest)(nil), @@ -2810,13 +4075,29 @@ func file_pkg_apis_scheduler_v2_scheduler_proto_init() { (*SyncProbesRequest_ProbeFinishedRequest)(nil), (*SyncProbesRequest_ProbeFailedRequest)(nil), } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[30].OneofWrappers = []interface{}{} + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[32].OneofWrappers = []interface{}{} + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[34].OneofWrappers = []interface{}{} + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[35].OneofWrappers = []interface{}{ + (*AnnounceCachePeerRequest_RegisterCachePeerRequest)(nil), + (*AnnounceCachePeerRequest_DownloadCachePeerStartedRequest)(nil), + (*AnnounceCachePeerRequest_RescheduleCachePeerRequest)(nil), + (*AnnounceCachePeerRequest_DownloadCachePeerFinishedRequest)(nil), + (*AnnounceCachePeerRequest_DownloadCachePeerFailedRequest)(nil), + (*AnnounceCachePeerRequest_DownloadPieceFinishedRequest)(nil), + (*AnnounceCachePeerRequest_DownloadPieceFailedRequest)(nil), + } + file_pkg_apis_scheduler_v2_scheduler_proto_msgTypes[38].OneofWrappers = []interface{}{ + (*AnnounceCachePeerResponse_EmptyTaskResponse)(nil), + (*AnnounceCachePeerResponse_NormalTaskResponse)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_apis_scheduler_v2_scheduler_proto_rawDesc, NumEnums: 0, - NumMessages: 30, + NumMessages: 43, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/apis/scheduler/v2/scheduler.pb.validate.go b/pkg/apis/scheduler/v2/scheduler.pb.validate.go index 829ad29..6e0e732 100644 --- a/pkg/apis/scheduler/v2/scheduler.pb.validate.go +++ b/pkg/apis/scheduler/v2/scheduler.pb.validate.go @@ -404,22 +404,22 @@ var _ interface { ErrorName() string } = DownloadPeerBackToSourceStartedRequestValidationError{} -// Validate checks the field values on RescheduleRequest 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 *RescheduleRequest) Validate() error { +// Validate checks the field values on ReschedulePeerRequest 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 *ReschedulePeerRequest) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on RescheduleRequest with the rules +// ValidateAll checks the field values on ReschedulePeerRequest 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 -// RescheduleRequestMultiError, or nil if none found. -func (m *RescheduleRequest) ValidateAll() error { +// ReschedulePeerRequestMultiError, or nil if none found. +func (m *ReschedulePeerRequest) ValidateAll() error { return m.validate(true) } -func (m *RescheduleRequest) validate(all bool) error { +func (m *ReschedulePeerRequest) validate(all bool) error { if m == nil { return nil } @@ -433,7 +433,7 @@ func (m *RescheduleRequest) validate(all bool) error { switch v := interface{}(item).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, RescheduleRequestValidationError{ + errors = append(errors, ReschedulePeerRequestValidationError{ field: fmt.Sprintf("CandidateParents[%v]", idx), reason: "embedded message failed validation", cause: err, @@ -441,7 +441,7 @@ func (m *RescheduleRequest) validate(all bool) error { } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, RescheduleRequestValidationError{ + errors = append(errors, ReschedulePeerRequestValidationError{ field: fmt.Sprintf("CandidateParents[%v]", idx), reason: "embedded message failed validation", cause: err, @@ -450,7 +450,7 @@ func (m *RescheduleRequest) validate(all bool) error { } } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return RescheduleRequestValidationError{ + return ReschedulePeerRequestValidationError{ field: fmt.Sprintf("CandidateParents[%v]", idx), reason: "embedded message failed validation", cause: err, @@ -465,7 +465,7 @@ func (m *RescheduleRequest) validate(all bool) error { if m.GetDescription() != "" { if utf8.RuneCountInString(m.GetDescription()) < 1 { - err := RescheduleRequestValidationError{ + err := ReschedulePeerRequestValidationError{ field: "Description", reason: "value length must be at least 1 runes", } @@ -480,19 +480,19 @@ func (m *RescheduleRequest) validate(all bool) error { } if len(errors) > 0 { - return RescheduleRequestMultiError(errors) + return ReschedulePeerRequestMultiError(errors) } return nil } -// RescheduleRequestMultiError is an error wrapping multiple validation errors -// returned by RescheduleRequest.ValidateAll() if the designated constraints -// aren't met. -type RescheduleRequestMultiError []error +// ReschedulePeerRequestMultiError is an error wrapping multiple validation +// errors returned by ReschedulePeerRequest.ValidateAll() if the designated +// constraints aren't met. +type ReschedulePeerRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m RescheduleRequestMultiError) Error() string { +func (m ReschedulePeerRequestMultiError) Error() string { var msgs []string for _, err := range m { msgs = append(msgs, err.Error()) @@ -501,11 +501,11 @@ func (m RescheduleRequestMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m RescheduleRequestMultiError) AllErrors() []error { return m } +func (m ReschedulePeerRequestMultiError) AllErrors() []error { return m } -// RescheduleRequestValidationError is the validation error returned by -// RescheduleRequest.Validate if the designated constraints aren't met. -type RescheduleRequestValidationError struct { +// ReschedulePeerRequestValidationError is the validation error returned by +// ReschedulePeerRequest.Validate if the designated constraints aren't met. +type ReschedulePeerRequestValidationError struct { field string reason string cause error @@ -513,24 +513,24 @@ type RescheduleRequestValidationError struct { } // Field function returns field value. -func (e RescheduleRequestValidationError) Field() string { return e.field } +func (e ReschedulePeerRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e RescheduleRequestValidationError) Reason() string { return e.reason } +func (e ReschedulePeerRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e RescheduleRequestValidationError) Cause() error { return e.cause } +func (e ReschedulePeerRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e RescheduleRequestValidationError) Key() bool { return e.key } +func (e ReschedulePeerRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e RescheduleRequestValidationError) ErrorName() string { - return "RescheduleRequestValidationError" +func (e ReschedulePeerRequestValidationError) ErrorName() string { + return "ReschedulePeerRequestValidationError" } // Error satisfies the builtin error interface -func (e RescheduleRequestValidationError) Error() string { +func (e ReschedulePeerRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -542,14 +542,14 @@ func (e RescheduleRequestValidationError) Error() string { } return fmt.Sprintf( - "invalid %sRescheduleRequest.%s: %s%s", + "invalid %sReschedulePeerRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = RescheduleRequestValidationError{} +var _ error = ReschedulePeerRequestValidationError{} var _ interface { Field() string @@ -557,7 +557,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = RescheduleRequestValidationError{} +} = ReschedulePeerRequestValidationError{} // Validate checks the field values on DownloadPeerFinishedRequest with the // rules defined in the proto definition for this message. If any rules are @@ -1780,7 +1780,7 @@ func (m *AnnouncePeerRequest) validate(all bool) error { } } - case *AnnouncePeerRequest_RescheduleRequest: + case *AnnouncePeerRequest_ReschedulePeerRequest: if v == nil { err := AnnouncePeerRequestValidationError{ field: "Request", @@ -1794,11 +1794,11 @@ func (m *AnnouncePeerRequest) validate(all bool) error { oneofRequestPresent = true if all { - switch v := interface{}(m.GetRescheduleRequest()).(type) { + switch v := interface{}(m.GetReschedulePeerRequest()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { errors = append(errors, AnnouncePeerRequestValidationError{ - field: "RescheduleRequest", + field: "ReschedulePeerRequest", reason: "embedded message failed validation", cause: err, }) @@ -1806,16 +1806,16 @@ func (m *AnnouncePeerRequest) validate(all bool) error { case interface{ Validate() error }: if err := v.Validate(); err != nil { errors = append(errors, AnnouncePeerRequestValidationError{ - field: "RescheduleRequest", + field: "ReschedulePeerRequest", reason: "embedded message failed validation", cause: err, }) } } - } else if v, ok := interface{}(m.GetRescheduleRequest()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetReschedulePeerRequest()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AnnouncePeerRequestValidationError{ - field: "RescheduleRequest", + field: "ReschedulePeerRequest", reason: "embedded message failed validation", cause: err, } @@ -3156,9 +3156,9 @@ func (m *StatTaskRequest) validate(all bool) error { var errors []error - if utf8.RuneCountInString(m.GetId()) < 1 { + if utf8.RuneCountInString(m.GetTaskId()) < 1 { err := StatTaskRequestValidationError{ - field: "Id", + field: "TaskId", reason: "value length must be at least 1 runes", } if !all { @@ -3533,9 +3533,9 @@ func (m *DeleteHostRequest) validate(all bool) error { var errors []error - if utf8.RuneCountInString(m.GetId()) < 1 { + if utf8.RuneCountInString(m.GetHostId()) < 1 { err := DeleteHostRequestValidationError{ - field: "Id", + field: "HostId", reason: "value length must be at least 1 runes", } if !all { @@ -4772,3 +4772,2080 @@ var _ interface { Cause() error ErrorName() string } = SyncProbesResponseValidationError{} + +// Validate checks the field values on RegisterCachePeerRequest 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 *RegisterCachePeerRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RegisterCachePeerRequest 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 +// RegisterCachePeerRequestMultiError, or nil if none found. +func (m *RegisterCachePeerRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RegisterCachePeerRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetHostId()) < 1 { + err := RegisterCachePeerRequestValidationError{ + field: "HostId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := RegisterCachePeerRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if m.GetPieceLength() < 1 { + err := RegisterCachePeerRequestValidationError{ + field: "PieceLength", + reason: "value must be greater than or equal to 1", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetOutputPath()) < 1 { + err := RegisterCachePeerRequestValidationError{ + field: "OutputPath", + reason: "value length must be at least 1 runes", + } + 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 m.Timeout != nil { + + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RegisterCachePeerRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RegisterCachePeerRequestValidationError{ + 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 RegisterCachePeerRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return RegisterCachePeerRequestMultiError(errors) + } + + return nil +} + +// RegisterCachePeerRequestMultiError is an error wrapping multiple validation +// errors returned by RegisterCachePeerRequest.ValidateAll() if the designated +// constraints aren't met. +type RegisterCachePeerRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RegisterCachePeerRequestMultiError) 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 RegisterCachePeerRequestMultiError) AllErrors() []error { return m } + +// RegisterCachePeerRequestValidationError is the validation error returned by +// RegisterCachePeerRequest.Validate if the designated constraints aren't met. +type RegisterCachePeerRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RegisterCachePeerRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RegisterCachePeerRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RegisterCachePeerRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RegisterCachePeerRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RegisterCachePeerRequestValidationError) ErrorName() string { + return "RegisterCachePeerRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e RegisterCachePeerRequestValidationError) 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 %sRegisterCachePeerRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RegisterCachePeerRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RegisterCachePeerRequestValidationError{} + +// Validate checks the field values on DownloadCachePeerStartedRequest 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 *DownloadCachePeerStartedRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DownloadCachePeerStartedRequest 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 +// DownloadCachePeerStartedRequestMultiError, or nil if none found. +func (m *DownloadCachePeerStartedRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DownloadCachePeerStartedRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return DownloadCachePeerStartedRequestMultiError(errors) + } + + return nil +} + +// DownloadCachePeerStartedRequestMultiError is an error wrapping multiple +// validation errors returned by DownloadCachePeerStartedRequest.ValidateAll() +// if the designated constraints aren't met. +type DownloadCachePeerStartedRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DownloadCachePeerStartedRequestMultiError) 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 DownloadCachePeerStartedRequestMultiError) AllErrors() []error { return m } + +// DownloadCachePeerStartedRequestValidationError is the validation error +// returned by DownloadCachePeerStartedRequest.Validate if the designated +// constraints aren't met. +type DownloadCachePeerStartedRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DownloadCachePeerStartedRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DownloadCachePeerStartedRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DownloadCachePeerStartedRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DownloadCachePeerStartedRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DownloadCachePeerStartedRequestValidationError) ErrorName() string { + return "DownloadCachePeerStartedRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DownloadCachePeerStartedRequestValidationError) 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 %sDownloadCachePeerStartedRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DownloadCachePeerStartedRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DownloadCachePeerStartedRequestValidationError{} + +// Validate checks the field values on RescheduleCachePeerRequest 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 *RescheduleCachePeerRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RescheduleCachePeerRequest 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 +// RescheduleCachePeerRequestMultiError, or nil if none found. +func (m *RescheduleCachePeerRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RescheduleCachePeerRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetCandidateParents() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RescheduleCachePeerRequestValidationError{ + field: fmt.Sprintf("CandidateParents[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RescheduleCachePeerRequestValidationError{ + field: fmt.Sprintf("CandidateParents[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RescheduleCachePeerRequestValidationError{ + field: fmt.Sprintf("CandidateParents[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.Description != nil { + + if m.GetDescription() != "" { + + if utf8.RuneCountInString(m.GetDescription()) < 1 { + err := RescheduleCachePeerRequestValidationError{ + field: "Description", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if len(errors) > 0 { + return RescheduleCachePeerRequestMultiError(errors) + } + + return nil +} + +// RescheduleCachePeerRequestMultiError is an error wrapping multiple +// validation errors returned by RescheduleCachePeerRequest.ValidateAll() if +// the designated constraints aren't met. +type RescheduleCachePeerRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RescheduleCachePeerRequestMultiError) 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 RescheduleCachePeerRequestMultiError) AllErrors() []error { return m } + +// RescheduleCachePeerRequestValidationError is the validation error returned +// by RescheduleCachePeerRequest.Validate if the designated constraints aren't met. +type RescheduleCachePeerRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RescheduleCachePeerRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RescheduleCachePeerRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RescheduleCachePeerRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RescheduleCachePeerRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RescheduleCachePeerRequestValidationError) ErrorName() string { + return "RescheduleCachePeerRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e RescheduleCachePeerRequestValidationError) 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 %sRescheduleCachePeerRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RescheduleCachePeerRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RescheduleCachePeerRequestValidationError{} + +// Validate checks the field values on DownloadCachePeerFinishedRequest 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 *DownloadCachePeerFinishedRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DownloadCachePeerFinishedRequest 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 +// DownloadCachePeerFinishedRequestMultiError, or nil if none found. +func (m *DownloadCachePeerFinishedRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DownloadCachePeerFinishedRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for PieceCount + + if len(errors) > 0 { + return DownloadCachePeerFinishedRequestMultiError(errors) + } + + return nil +} + +// DownloadCachePeerFinishedRequestMultiError is an error wrapping multiple +// validation errors returned by +// DownloadCachePeerFinishedRequest.ValidateAll() if the designated +// constraints aren't met. +type DownloadCachePeerFinishedRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DownloadCachePeerFinishedRequestMultiError) 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 DownloadCachePeerFinishedRequestMultiError) AllErrors() []error { return m } + +// DownloadCachePeerFinishedRequestValidationError is the validation error +// returned by DownloadCachePeerFinishedRequest.Validate if the designated +// constraints aren't met. +type DownloadCachePeerFinishedRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DownloadCachePeerFinishedRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DownloadCachePeerFinishedRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DownloadCachePeerFinishedRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DownloadCachePeerFinishedRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DownloadCachePeerFinishedRequestValidationError) ErrorName() string { + return "DownloadCachePeerFinishedRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DownloadCachePeerFinishedRequestValidationError) 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 %sDownloadCachePeerFinishedRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DownloadCachePeerFinishedRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DownloadCachePeerFinishedRequestValidationError{} + +// Validate checks the field values on DownloadCachePeerFailedRequest 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 *DownloadCachePeerFailedRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DownloadCachePeerFailedRequest 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 +// DownloadCachePeerFailedRequestMultiError, or nil if none found. +func (m *DownloadCachePeerFailedRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DownloadCachePeerFailedRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if m.Description != nil { + + if m.GetDescription() != "" { + + if utf8.RuneCountInString(m.GetDescription()) < 1 { + err := DownloadCachePeerFailedRequestValidationError{ + field: "Description", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if len(errors) > 0 { + return DownloadCachePeerFailedRequestMultiError(errors) + } + + return nil +} + +// DownloadCachePeerFailedRequestMultiError is an error wrapping multiple +// validation errors returned by DownloadCachePeerFailedRequest.ValidateAll() +// if the designated constraints aren't met. +type DownloadCachePeerFailedRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DownloadCachePeerFailedRequestMultiError) 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 DownloadCachePeerFailedRequestMultiError) AllErrors() []error { return m } + +// DownloadCachePeerFailedRequestValidationError is the validation error +// returned by DownloadCachePeerFailedRequest.Validate if the designated +// constraints aren't met. +type DownloadCachePeerFailedRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DownloadCachePeerFailedRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DownloadCachePeerFailedRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DownloadCachePeerFailedRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DownloadCachePeerFailedRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DownloadCachePeerFailedRequestValidationError) ErrorName() string { + return "DownloadCachePeerFailedRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DownloadCachePeerFailedRequestValidationError) 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 %sDownloadCachePeerFailedRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DownloadCachePeerFailedRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DownloadCachePeerFailedRequestValidationError{} + +// Validate checks the field values on AnnounceCachePeerRequest 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 *AnnounceCachePeerRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AnnounceCachePeerRequest 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 +// AnnounceCachePeerRequestMultiError, or nil if none found. +func (m *AnnounceCachePeerRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *AnnounceCachePeerRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetHostId()) < 1 { + err := AnnounceCachePeerRequestValidationError{ + field: "HostId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := AnnounceCachePeerRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetPeerId()) < 1 { + err := AnnounceCachePeerRequestValidationError{ + field: "PeerId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + oneofRequestPresent := false + switch v := m.Request.(type) { + case *AnnounceCachePeerRequest_RegisterCachePeerRequest: + if v == nil { + err := AnnounceCachePeerRequestValidationError{ + field: "Request", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofRequestPresent = true + + if all { + switch v := interface{}(m.GetRegisterCachePeerRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "RegisterCachePeerRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "RegisterCachePeerRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRegisterCachePeerRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AnnounceCachePeerRequestValidationError{ + field: "RegisterCachePeerRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *AnnounceCachePeerRequest_DownloadCachePeerStartedRequest: + if v == nil { + err := AnnounceCachePeerRequestValidationError{ + field: "Request", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofRequestPresent = true + + if all { + switch v := interface{}(m.GetDownloadCachePeerStartedRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "DownloadCachePeerStartedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "DownloadCachePeerStartedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDownloadCachePeerStartedRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AnnounceCachePeerRequestValidationError{ + field: "DownloadCachePeerStartedRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *AnnounceCachePeerRequest_RescheduleCachePeerRequest: + if v == nil { + err := AnnounceCachePeerRequestValidationError{ + field: "Request", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofRequestPresent = true + + if all { + switch v := interface{}(m.GetRescheduleCachePeerRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "RescheduleCachePeerRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "RescheduleCachePeerRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRescheduleCachePeerRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AnnounceCachePeerRequestValidationError{ + field: "RescheduleCachePeerRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *AnnounceCachePeerRequest_DownloadCachePeerFinishedRequest: + if v == nil { + err := AnnounceCachePeerRequestValidationError{ + field: "Request", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofRequestPresent = true + + if all { + switch v := interface{}(m.GetDownloadCachePeerFinishedRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "DownloadCachePeerFinishedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "DownloadCachePeerFinishedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDownloadCachePeerFinishedRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AnnounceCachePeerRequestValidationError{ + field: "DownloadCachePeerFinishedRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *AnnounceCachePeerRequest_DownloadCachePeerFailedRequest: + if v == nil { + err := AnnounceCachePeerRequestValidationError{ + field: "Request", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofRequestPresent = true + + if all { + switch v := interface{}(m.GetDownloadCachePeerFailedRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "DownloadCachePeerFailedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "DownloadCachePeerFailedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDownloadCachePeerFailedRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AnnounceCachePeerRequestValidationError{ + field: "DownloadCachePeerFailedRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *AnnounceCachePeerRequest_DownloadPieceFinishedRequest: + if v == nil { + err := AnnounceCachePeerRequestValidationError{ + field: "Request", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofRequestPresent = true + + if all { + switch v := interface{}(m.GetDownloadPieceFinishedRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "DownloadPieceFinishedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "DownloadPieceFinishedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDownloadPieceFinishedRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AnnounceCachePeerRequestValidationError{ + field: "DownloadPieceFinishedRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *AnnounceCachePeerRequest_DownloadPieceFailedRequest: + if v == nil { + err := AnnounceCachePeerRequestValidationError{ + field: "Request", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + oneofRequestPresent = true + + if all { + switch v := interface{}(m.GetDownloadPieceFailedRequest()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "DownloadPieceFailedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AnnounceCachePeerRequestValidationError{ + field: "DownloadPieceFailedRequest", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDownloadPieceFailedRequest()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AnnounceCachePeerRequestValidationError{ + field: "DownloadPieceFailedRequest", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + if !oneofRequestPresent { + err := AnnounceCachePeerRequestValidationError{ + field: "Request", + reason: "value is required", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return AnnounceCachePeerRequestMultiError(errors) + } + + return nil +} + +// AnnounceCachePeerRequestMultiError is an error wrapping multiple validation +// errors returned by AnnounceCachePeerRequest.ValidateAll() if the designated +// constraints aren't met. +type AnnounceCachePeerRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AnnounceCachePeerRequestMultiError) 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 AnnounceCachePeerRequestMultiError) AllErrors() []error { return m } + +// AnnounceCachePeerRequestValidationError is the validation error returned by +// AnnounceCachePeerRequest.Validate if the designated constraints aren't met. +type AnnounceCachePeerRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e AnnounceCachePeerRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e AnnounceCachePeerRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e AnnounceCachePeerRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e AnnounceCachePeerRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e AnnounceCachePeerRequestValidationError) ErrorName() string { + return "AnnounceCachePeerRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e AnnounceCachePeerRequestValidationError) 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 %sAnnounceCachePeerRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = AnnounceCachePeerRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = AnnounceCachePeerRequestValidationError{} + +// Validate checks the field values on EmptyCacheTaskResponse 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 *EmptyCacheTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on EmptyCacheTaskResponse 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 +// EmptyCacheTaskResponseMultiError, or nil if none found. +func (m *EmptyCacheTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *EmptyCacheTaskResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return EmptyCacheTaskResponseMultiError(errors) + } + + return nil +} + +// EmptyCacheTaskResponseMultiError is an error wrapping multiple validation +// errors returned by EmptyCacheTaskResponse.ValidateAll() if the designated +// constraints aren't met. +type EmptyCacheTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EmptyCacheTaskResponseMultiError) 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 EmptyCacheTaskResponseMultiError) AllErrors() []error { return m } + +// EmptyCacheTaskResponseValidationError is the validation error returned by +// EmptyCacheTaskResponse.Validate if the designated constraints aren't met. +type EmptyCacheTaskResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e EmptyCacheTaskResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e EmptyCacheTaskResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e EmptyCacheTaskResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e EmptyCacheTaskResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e EmptyCacheTaskResponseValidationError) ErrorName() string { + return "EmptyCacheTaskResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e EmptyCacheTaskResponseValidationError) 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 %sEmptyCacheTaskResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = EmptyCacheTaskResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = EmptyCacheTaskResponseValidationError{} + +// Validate checks the field values on NormalCacheTaskResponse 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 *NormalCacheTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NormalCacheTaskResponse 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 +// NormalCacheTaskResponseMultiError, or nil if none found. +func (m *NormalCacheTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *NormalCacheTaskResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(m.GetCandidateParents()) < 1 { + err := NormalCacheTaskResponseValidationError{ + field: "CandidateParents", + reason: "value must contain at least 1 item(s)", + } + if !all { + return err + } + errors = append(errors, err) + } + + for idx, item := range m.GetCandidateParents() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NormalCacheTaskResponseValidationError{ + field: fmt.Sprintf("CandidateParents[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NormalCacheTaskResponseValidationError{ + field: fmt.Sprintf("CandidateParents[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NormalCacheTaskResponseValidationError{ + field: fmt.Sprintf("CandidateParents[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return NormalCacheTaskResponseMultiError(errors) + } + + return nil +} + +// NormalCacheTaskResponseMultiError is an error wrapping multiple validation +// errors returned by NormalCacheTaskResponse.ValidateAll() if the designated +// constraints aren't met. +type NormalCacheTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NormalCacheTaskResponseMultiError) 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 NormalCacheTaskResponseMultiError) AllErrors() []error { return m } + +// NormalCacheTaskResponseValidationError is the validation error returned by +// NormalCacheTaskResponse.Validate if the designated constraints aren't met. +type NormalCacheTaskResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NormalCacheTaskResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NormalCacheTaskResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NormalCacheTaskResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NormalCacheTaskResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NormalCacheTaskResponseValidationError) ErrorName() string { + return "NormalCacheTaskResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e NormalCacheTaskResponseValidationError) 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 %sNormalCacheTaskResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NormalCacheTaskResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NormalCacheTaskResponseValidationError{} + +// Validate checks the field values on AnnounceCachePeerResponse 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 *AnnounceCachePeerResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AnnounceCachePeerResponse 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 +// AnnounceCachePeerResponseMultiError, or nil if none found. +func (m *AnnounceCachePeerResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *AnnounceCachePeerResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + oneofResponsePresent := false + switch v := m.Response.(type) { + case *AnnounceCachePeerResponse_EmptyTaskResponse: + if v == nil { + err := AnnounceCachePeerResponseValidationError{ + 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.GetEmptyTaskResponse()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AnnounceCachePeerResponseValidationError{ + field: "EmptyTaskResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AnnounceCachePeerResponseValidationError{ + field: "EmptyTaskResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEmptyTaskResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AnnounceCachePeerResponseValidationError{ + field: "EmptyTaskResponse", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *AnnounceCachePeerResponse_NormalTaskResponse: + if v == nil { + err := AnnounceCachePeerResponseValidationError{ + 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.GetNormalTaskResponse()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AnnounceCachePeerResponseValidationError{ + field: "NormalTaskResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AnnounceCachePeerResponseValidationError{ + field: "NormalTaskResponse", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNormalTaskResponse()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AnnounceCachePeerResponseValidationError{ + field: "NormalTaskResponse", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + if !oneofResponsePresent { + err := AnnounceCachePeerResponseValidationError{ + field: "Response", + reason: "value is required", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return AnnounceCachePeerResponseMultiError(errors) + } + + return nil +} + +// AnnounceCachePeerResponseMultiError is an error wrapping multiple validation +// errors returned by AnnounceCachePeerResponse.ValidateAll() if the +// designated constraints aren't met. +type AnnounceCachePeerResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AnnounceCachePeerResponseMultiError) 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 AnnounceCachePeerResponseMultiError) AllErrors() []error { return m } + +// AnnounceCachePeerResponseValidationError is the validation error returned by +// AnnounceCachePeerResponse.Validate if the designated constraints aren't met. +type AnnounceCachePeerResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e AnnounceCachePeerResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e AnnounceCachePeerResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e AnnounceCachePeerResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e AnnounceCachePeerResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e AnnounceCachePeerResponseValidationError) ErrorName() string { + return "AnnounceCachePeerResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e AnnounceCachePeerResponseValidationError) 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 %sAnnounceCachePeerResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = AnnounceCachePeerResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = AnnounceCachePeerResponseValidationError{} + +// Validate checks the field values on StatCachePeerRequest 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 *StatCachePeerRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on StatCachePeerRequest 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 +// StatCachePeerRequestMultiError, or nil if none found. +func (m *StatCachePeerRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *StatCachePeerRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetHostId()) < 1 { + err := StatCachePeerRequestValidationError{ + field: "HostId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := StatCachePeerRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetPeerId()) < 1 { + err := StatCachePeerRequestValidationError{ + field: "PeerId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return StatCachePeerRequestMultiError(errors) + } + + return nil +} + +// StatCachePeerRequestMultiError is an error wrapping multiple validation +// errors returned by StatCachePeerRequest.ValidateAll() if the designated +// constraints aren't met. +type StatCachePeerRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m StatCachePeerRequestMultiError) 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 StatCachePeerRequestMultiError) AllErrors() []error { return m } + +// StatCachePeerRequestValidationError is the validation error returned by +// StatCachePeerRequest.Validate if the designated constraints aren't met. +type StatCachePeerRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StatCachePeerRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StatCachePeerRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StatCachePeerRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StatCachePeerRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StatCachePeerRequestValidationError) ErrorName() string { + return "StatCachePeerRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e StatCachePeerRequestValidationError) 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 %sStatCachePeerRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StatCachePeerRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StatCachePeerRequestValidationError{} + +// Validate checks the field values on DeleteCachePeerRequest 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 *DeleteCachePeerRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCachePeerRequest 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 +// DeleteCachePeerRequestMultiError, or nil if none found. +func (m *DeleteCachePeerRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCachePeerRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetHostId()) < 1 { + err := DeleteCachePeerRequestValidationError{ + field: "HostId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := DeleteCachePeerRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetPeerId()) < 1 { + err := DeleteCachePeerRequestValidationError{ + field: "PeerId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteCachePeerRequestMultiError(errors) + } + + return nil +} + +// DeleteCachePeerRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteCachePeerRequest.ValidateAll() if the designated +// constraints aren't met. +type DeleteCachePeerRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCachePeerRequestMultiError) 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 DeleteCachePeerRequestMultiError) AllErrors() []error { return m } + +// DeleteCachePeerRequestValidationError is the validation error returned by +// DeleteCachePeerRequest.Validate if the designated constraints aren't met. +type DeleteCachePeerRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DeleteCachePeerRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DeleteCachePeerRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DeleteCachePeerRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DeleteCachePeerRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DeleteCachePeerRequestValidationError) ErrorName() string { + return "DeleteCachePeerRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DeleteCachePeerRequestValidationError) 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 %sDeleteCachePeerRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DeleteCachePeerRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DeleteCachePeerRequestValidationError{} + +// Validate checks the field values on StatCacheTaskRequest 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 *StatCacheTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on StatCacheTaskRequest 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 +// StatCacheTaskRequestMultiError, or nil if none found. +func (m *StatCacheTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *StatCacheTaskRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := StatCacheTaskRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return StatCacheTaskRequestMultiError(errors) + } + + return nil +} + +// StatCacheTaskRequestMultiError is an error wrapping multiple validation +// errors returned by StatCacheTaskRequest.ValidateAll() if the designated +// constraints aren't met. +type StatCacheTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m StatCacheTaskRequestMultiError) 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 StatCacheTaskRequestMultiError) AllErrors() []error { return m } + +// StatCacheTaskRequestValidationError is the validation error returned by +// StatCacheTaskRequest.Validate if the designated constraints aren't met. +type StatCacheTaskRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StatCacheTaskRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StatCacheTaskRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StatCacheTaskRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StatCacheTaskRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StatCacheTaskRequestValidationError) ErrorName() string { + return "StatCacheTaskRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e StatCacheTaskRequestValidationError) 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 %sStatCacheTaskRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StatCacheTaskRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StatCacheTaskRequestValidationError{} + +// Validate checks the field values on DeleteCacheTaskRequest 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 *DeleteCacheTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCacheTaskRequest 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 +// DeleteCacheTaskRequestMultiError, or nil if none found. +func (m *DeleteCacheTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCacheTaskRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetHostId()) < 1 { + err := DeleteCacheTaskRequestValidationError{ + field: "HostId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := DeleteCacheTaskRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteCacheTaskRequestMultiError(errors) + } + + return nil +} + +// DeleteCacheTaskRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteCacheTaskRequest.ValidateAll() if the designated +// constraints aren't met. +type DeleteCacheTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCacheTaskRequestMultiError) 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 DeleteCacheTaskRequestMultiError) AllErrors() []error { return m } + +// DeleteCacheTaskRequestValidationError is the validation error returned by +// DeleteCacheTaskRequest.Validate if the designated constraints aren't met. +type DeleteCacheTaskRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DeleteCacheTaskRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DeleteCacheTaskRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DeleteCacheTaskRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DeleteCacheTaskRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DeleteCacheTaskRequestValidationError) ErrorName() string { + return "DeleteCacheTaskRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DeleteCacheTaskRequestValidationError) 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 %sDeleteCacheTaskRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DeleteCacheTaskRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DeleteCacheTaskRequestValidationError{} diff --git a/pkg/apis/scheduler/v2/scheduler.proto b/pkg/apis/scheduler/v2/scheduler.proto index 3bc5971..76ec6b2 100644 --- a/pkg/apis/scheduler/v2/scheduler.proto +++ b/pkg/apis/scheduler/v2/scheduler.proto @@ -43,8 +43,8 @@ message DownloadPeerBackToSourceStartedRequest { optional string description = 1 [(validate.rules).string = {min_len: 1, ignore_empty: true}]; } -// RescheduleRequest represents reschedule request of AnnouncePeerRequest. -message RescheduleRequest { +// ReschedulePeerRequest represents reschedule request of AnnouncePeerRequest. +message ReschedulePeerRequest { // Candidate parent ids. repeated common.v2.Peer candidate_parents = 1; @@ -129,7 +129,7 @@ message AnnouncePeerRequest { RegisterPeerRequest register_peer_request = 4; DownloadPeerStartedRequest download_peer_started_request = 5; DownloadPeerBackToSourceStartedRequest download_peer_back_to_source_started_request = 6; - RescheduleRequest reschedule_request = 7; + ReschedulePeerRequest reschedule_peer_request = 7; DownloadPeerFinishedRequest download_peer_finished_request = 8; DownloadPeerBackToSourceFinishedRequest download_peer_back_to_source_finished_request = 9; DownloadPeerFailedRequest download_peer_failed_request = 10; @@ -148,7 +148,7 @@ message EmptyTaskResponse { // NormalTaskResponse represents normal task response of AnnouncePeerResponse. message NormalTaskResponse { // Candidate parents. - repeated common.v2.Peer candidate_parents = 1 [(validate.rules).repeated = {min_items: 1}]; + repeated common.v2.Peer candidate_parents = 1 [(validate.rules).repeated.min_items = 1]; } // NeedBackToSourceResponse represents need back-to-source response of AnnouncePeerResponse. @@ -191,7 +191,7 @@ message DeletePeerRequest { // StatTaskRequest represents request of StatTask. message StatTaskRequest { // Task id. - string id = 1 [(validate.rules).string.min_len = 1]; + string task_id = 1 [(validate.rules).string.min_len = 1]; } // DeleteTaskRequest represents request of DeleteTask. @@ -211,7 +211,7 @@ message AnnounceHostRequest { // DeleteHostRequest represents request of DeleteHost. message DeleteHostRequest{ // Host id. - string id = 1 [(validate.rules).string.min_len = 1]; + string host_id = 1 [(validate.rules).string.min_len = 1]; } // ProbeStartedRequest represents started request of SyncProbesRequest. @@ -268,6 +268,125 @@ message SyncProbesResponse { repeated common.v2.Host hosts = 1 [(validate.rules).repeated = {min_items: 1, ignore_empty: true}]; } +// RegisterCachePeerRequest represents cache peer registered request of AnnounceCachePeerRequest. +message RegisterCachePeerRequest { + // Host id. + string host_id = 1 [(validate.rules).string.min_len = 1]; + // Task id. + string task_id = 2 [(validate.rules).string.min_len = 1]; + // Tag is used to distinguish different cache tasks. + optional string tag = 3; + // Application of task. + optional string application = 4; + // Task piece length. + uint64 piece_length = 5 [(validate.rules).uint64.gte = 1]; + // File path to be exported. + string output_path = 6 [(validate.rules).string.min_len = 1]; + // Download timeout. + optional google.protobuf.Duration timeout = 7; +} + +// DownloadCachePeerStartedRequest represents cache peer download started request of AnnounceCachePeerRequest. +message DownloadCachePeerStartedRequest { +} + +// RescheduleCachePeerRequest represents reschedule request of AnnounceCachePeerRequest. +message RescheduleCachePeerRequest { + // Candidate parent ids. + repeated common.v2.CachePeer candidate_parents = 1; + + // The description of the reschedule reason. + optional string description = 2 [(validate.rules).string = {min_len: 1, ignore_empty: true}]; +} + +// DownloadCachePeerFinishedRequest represents cache peer download finished request of AnnounceCachePeerRequest. +message DownloadCachePeerFinishedRequest { + // Total piece count. + uint32 piece_count = 1; +} + +// DownloadCachePeerFailedRequest represents cache peer download failed request of AnnounceCachePeerRequest. +message DownloadCachePeerFailedRequest { + // The description of the download failed. + optional string description = 1 [(validate.rules).string = {min_len: 1, ignore_empty: true}]; +} + +// AnnounceCachePeerRequest represents request of AnnounceCachePeer. +message AnnounceCachePeerRequest { + // Host id. + string host_id = 1 [(validate.rules).string.min_len = 1]; + // Task id. + string task_id = 2 [(validate.rules).string.min_len = 1]; + // Peer id. + string peer_id = 3 [(validate.rules).string.min_len = 1]; + + oneof request { + option (validate.required) = true; + + RegisterCachePeerRequest register_cache_peer_request = 4; + DownloadCachePeerStartedRequest download_cache_peer_started_request = 5; + RescheduleCachePeerRequest reschedule_cache_peer_request = 6; + DownloadCachePeerFinishedRequest download_cache_peer_finished_request = 7; + DownloadCachePeerFailedRequest download_cache_peer_failed_request = 8; + DownloadPieceFinishedRequest download_piece_finished_request = 9; + DownloadPieceFailedRequest download_piece_failed_request = 10; + } +} + +// EmptyCacheTaskResponse represents empty cache task response of AnnounceCachePeerResponse. +message EmptyCacheTaskResponse { +} + +// NormalCacheTaskResponse represents normal cache task response of AnnounceCachePeerResponse. +message NormalCacheTaskResponse { + // Candidate parents. + repeated common.v2.CachePeer candidate_parents = 1 [(validate.rules).repeated.min_items = 1]; +} + +// AnnounceCachePeerResponse represents response of AnnounceCachePeer. +message AnnounceCachePeerResponse { + oneof response { + option (validate.required) = true; + + EmptyCacheTaskResponse empty_task_response = 1; + NormalCacheTaskResponse normal_task_response = 2; + } +} + +// StatCachePeerRequest represents request of StatCachePeer. +message StatCachePeerRequest { + // Host id. + string host_id = 1 [(validate.rules).string.min_len = 1]; + // Task id. + string task_id = 2 [(validate.rules).string.min_len = 1]; + // Peer id. + string peer_id = 3 [(validate.rules).string.min_len = 1]; +} + +// DeleteCachePeerRequest represents request of DeleteCachePeer. +message DeleteCachePeerRequest { + // Host id. + string host_id = 1 [(validate.rules).string.min_len = 1]; + // Task id. + string task_id = 2 [(validate.rules).string.min_len = 1]; + // Peer id. + string peer_id = 3 [(validate.rules).string.min_len = 1]; +} + +// StatCacheTaskRequest represents request of StatCacheTask. +message StatCacheTaskRequest { + // Task id. + string task_id = 1 [(validate.rules).string.min_len = 1]; +} + +// DeleteCacheTaskRequest represents request of DeleteCacheTask. +message DeleteCacheTaskRequest { + // Host id. + string host_id = 1 [(validate.rules).string.min_len = 1]; + // Task id. + string task_id = 2 [(validate.rules).string.min_len = 1]; +} + // Scheduler RPC Service. service Scheduler { // AnnouncePeer announces peer to scheduler. @@ -293,4 +412,19 @@ service Scheduler { // SyncProbes sync probes of the host. rpc SyncProbes(stream SyncProbesRequest)returns(stream SyncProbesResponse); + + // AnnounceCachePeer announces cache peer to scheduler. + rpc AnnounceCachePeer(stream AnnounceCachePeerRequest) returns(stream AnnounceCachePeerResponse); + + // Checks information of cache peer. + rpc StatCachePeer(StatCachePeerRequest)returns(common.v2.CachePeer); + + // DeleteCachePeer releases cache peer in scheduler. + rpc DeleteCachePeer(DeleteCachePeerRequest)returns(google.protobuf.Empty); + + // Checks information of cache task. + rpc StatCacheTask(StatCacheTaskRequest)returns(common.v2.CacheTask); + + // DeleteCacheTask releases cache task in scheduler. + rpc DeleteCacheTask(DeleteCacheTaskRequest)returns(google.protobuf.Empty); } diff --git a/pkg/apis/scheduler/v2/scheduler_grpc.pb.go b/pkg/apis/scheduler/v2/scheduler_grpc.pb.go index 757170e..39c65f6 100644 --- a/pkg/apis/scheduler/v2/scheduler_grpc.pb.go +++ b/pkg/apis/scheduler/v2/scheduler_grpc.pb.go @@ -40,6 +40,16 @@ type SchedulerClient interface { DeleteHost(ctx context.Context, in *DeleteHostRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // SyncProbes sync probes of the host. SyncProbes(ctx context.Context, opts ...grpc.CallOption) (Scheduler_SyncProbesClient, error) + // AnnounceCachePeer announces cache peer to scheduler. + AnnounceCachePeer(ctx context.Context, opts ...grpc.CallOption) (Scheduler_AnnounceCachePeerClient, error) + // Checks information of cache peer. + StatCachePeer(ctx context.Context, in *StatCachePeerRequest, opts ...grpc.CallOption) (*v2.CachePeer, error) + // DeleteCachePeer releases cache peer in scheduler. + DeleteCachePeer(ctx context.Context, in *DeleteCachePeerRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // Checks information of cache task. + StatCacheTask(ctx context.Context, in *StatCacheTaskRequest, opts ...grpc.CallOption) (*v2.CacheTask, error) + // DeleteCacheTask releases cache task in scheduler. + DeleteCacheTask(ctx context.Context, in *DeleteCacheTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type schedulerClient struct { @@ -166,6 +176,73 @@ func (x *schedulerSyncProbesClient) Recv() (*SyncProbesResponse, error) { return m, nil } +func (c *schedulerClient) AnnounceCachePeer(ctx context.Context, opts ...grpc.CallOption) (Scheduler_AnnounceCachePeerClient, error) { + stream, err := c.cc.NewStream(ctx, &Scheduler_ServiceDesc.Streams[2], "/scheduler.v2.Scheduler/AnnounceCachePeer", opts...) + if err != nil { + return nil, err + } + x := &schedulerAnnounceCachePeerClient{stream} + return x, nil +} + +type Scheduler_AnnounceCachePeerClient interface { + Send(*AnnounceCachePeerRequest) error + Recv() (*AnnounceCachePeerResponse, error) + grpc.ClientStream +} + +type schedulerAnnounceCachePeerClient struct { + grpc.ClientStream +} + +func (x *schedulerAnnounceCachePeerClient) Send(m *AnnounceCachePeerRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *schedulerAnnounceCachePeerClient) Recv() (*AnnounceCachePeerResponse, error) { + m := new(AnnounceCachePeerResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *schedulerClient) StatCachePeer(ctx context.Context, in *StatCachePeerRequest, opts ...grpc.CallOption) (*v2.CachePeer, error) { + out := new(v2.CachePeer) + err := c.cc.Invoke(ctx, "/scheduler.v2.Scheduler/StatCachePeer", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerClient) DeleteCachePeer(ctx context.Context, in *DeleteCachePeerRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/scheduler.v2.Scheduler/DeleteCachePeer", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerClient) StatCacheTask(ctx context.Context, in *StatCacheTaskRequest, opts ...grpc.CallOption) (*v2.CacheTask, error) { + out := new(v2.CacheTask) + err := c.cc.Invoke(ctx, "/scheduler.v2.Scheduler/StatCacheTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerClient) DeleteCacheTask(ctx context.Context, in *DeleteCacheTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/scheduler.v2.Scheduler/DeleteCacheTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // SchedulerServer is the server API for Scheduler service. // All implementations should embed UnimplementedSchedulerServer // for forward compatibility @@ -186,6 +263,16 @@ type SchedulerServer interface { DeleteHost(context.Context, *DeleteHostRequest) (*emptypb.Empty, error) // SyncProbes sync probes of the host. SyncProbes(Scheduler_SyncProbesServer) error + // AnnounceCachePeer announces cache peer to scheduler. + AnnounceCachePeer(Scheduler_AnnounceCachePeerServer) error + // Checks information of cache peer. + StatCachePeer(context.Context, *StatCachePeerRequest) (*v2.CachePeer, error) + // DeleteCachePeer releases cache peer in scheduler. + DeleteCachePeer(context.Context, *DeleteCachePeerRequest) (*emptypb.Empty, error) + // Checks information of cache task. + StatCacheTask(context.Context, *StatCacheTaskRequest) (*v2.CacheTask, error) + // DeleteCacheTask releases cache task in scheduler. + DeleteCacheTask(context.Context, *DeleteCacheTaskRequest) (*emptypb.Empty, error) } // UnimplementedSchedulerServer should be embedded to have forward compatible implementations. @@ -216,6 +303,21 @@ func (UnimplementedSchedulerServer) DeleteHost(context.Context, *DeleteHostReque func (UnimplementedSchedulerServer) SyncProbes(Scheduler_SyncProbesServer) error { return status.Errorf(codes.Unimplemented, "method SyncProbes not implemented") } +func (UnimplementedSchedulerServer) AnnounceCachePeer(Scheduler_AnnounceCachePeerServer) error { + return status.Errorf(codes.Unimplemented, "method AnnounceCachePeer not implemented") +} +func (UnimplementedSchedulerServer) StatCachePeer(context.Context, *StatCachePeerRequest) (*v2.CachePeer, error) { + return nil, status.Errorf(codes.Unimplemented, "method StatCachePeer not implemented") +} +func (UnimplementedSchedulerServer) DeleteCachePeer(context.Context, *DeleteCachePeerRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteCachePeer not implemented") +} +func (UnimplementedSchedulerServer) StatCacheTask(context.Context, *StatCacheTaskRequest) (*v2.CacheTask, error) { + return nil, status.Errorf(codes.Unimplemented, "method StatCacheTask not implemented") +} +func (UnimplementedSchedulerServer) DeleteCacheTask(context.Context, *DeleteCacheTaskRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteCacheTask not implemented") +} // UnsafeSchedulerServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to SchedulerServer will @@ -388,6 +490,104 @@ func (x *schedulerSyncProbesServer) Recv() (*SyncProbesRequest, error) { return m, nil } +func _Scheduler_AnnounceCachePeer_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SchedulerServer).AnnounceCachePeer(&schedulerAnnounceCachePeerServer{stream}) +} + +type Scheduler_AnnounceCachePeerServer interface { + Send(*AnnounceCachePeerResponse) error + Recv() (*AnnounceCachePeerRequest, error) + grpc.ServerStream +} + +type schedulerAnnounceCachePeerServer struct { + grpc.ServerStream +} + +func (x *schedulerAnnounceCachePeerServer) Send(m *AnnounceCachePeerResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *schedulerAnnounceCachePeerServer) Recv() (*AnnounceCachePeerRequest, error) { + m := new(AnnounceCachePeerRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _Scheduler_StatCachePeer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StatCachePeerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerServer).StatCachePeer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.v2.Scheduler/StatCachePeer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerServer).StatCachePeer(ctx, req.(*StatCachePeerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Scheduler_DeleteCachePeer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteCachePeerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerServer).DeleteCachePeer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.v2.Scheduler/DeleteCachePeer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerServer).DeleteCachePeer(ctx, req.(*DeleteCachePeerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Scheduler_StatCacheTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StatCacheTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerServer).StatCacheTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.v2.Scheduler/StatCacheTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerServer).StatCacheTask(ctx, req.(*StatCacheTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Scheduler_DeleteCacheTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteCacheTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerServer).DeleteCacheTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.v2.Scheduler/DeleteCacheTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerServer).DeleteCacheTask(ctx, req.(*DeleteCacheTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Scheduler_ServiceDesc is the grpc.ServiceDesc for Scheduler service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -419,6 +619,22 @@ var Scheduler_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteHost", Handler: _Scheduler_DeleteHost_Handler, }, + { + MethodName: "StatCachePeer", + Handler: _Scheduler_StatCachePeer_Handler, + }, + { + MethodName: "DeleteCachePeer", + Handler: _Scheduler_DeleteCachePeer_Handler, + }, + { + MethodName: "StatCacheTask", + Handler: _Scheduler_StatCacheTask_Handler, + }, + { + MethodName: "DeleteCacheTask", + Handler: _Scheduler_DeleteCacheTask_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -433,6 +649,12 @@ var Scheduler_ServiceDesc = grpc.ServiceDesc{ ServerStreams: true, ClientStreams: true, }, + { + StreamName: "AnnounceCachePeer", + Handler: _Scheduler_AnnounceCachePeer_Handler, + ServerStreams: true, + ClientStreams: true, + }, }, Metadata: "pkg/apis/scheduler/v2/scheduler.proto", } diff --git a/proto/scheduler.proto b/proto/scheduler.proto index 6aa8114..9a5776f 100644 --- a/proto/scheduler.proto +++ b/proto/scheduler.proto @@ -40,11 +40,10 @@ message DownloadPeerBackToSourceStartedRequest { optional string description = 1; } -// RescheduleRequest represents reschedule request of AnnouncePeerRequest. -message RescheduleRequest { +// ReschedulePeerRequest represents reschedule request of AnnouncePeerRequest. +message ReschedulePeerRequest { // Candidate parent ids. repeated common.v2.Peer candidate_parents = 1; - // The description of the reschedule reason. optional string description = 2; } @@ -122,7 +121,7 @@ message AnnouncePeerRequest { RegisterPeerRequest register_peer_request = 4; DownloadPeerStartedRequest download_peer_started_request = 5; DownloadPeerBackToSourceStartedRequest download_peer_back_to_source_started_request = 6; - RescheduleRequest reschedule_request = 7; + ReschedulePeerRequest reschedule_peer_request = 7; DownloadPeerFinishedRequest download_peer_finished_request = 8; DownloadPeerBackToSourceFinishedRequest download_peer_back_to_source_finished_request = 9; DownloadPeerFailedRequest download_peer_failed_request = 10; @@ -182,7 +181,7 @@ message DeletePeerRequest { // StatTaskRequest represents request of StatTask. message StatTaskRequest { // Task id. - string id = 1; + string task_id = 1; } // DeleteTaskRequest represents request of DeleteTask. @@ -202,7 +201,7 @@ message AnnounceHostRequest { // DeleteHostRequest represents request of DeleteHost. message DeleteHostRequest{ // Host id. - string id = 1; + string host_id = 1; } // ProbeStartedRequest represents started request of SyncProbesRequest. @@ -257,6 +256,121 @@ message SyncProbesResponse { repeated common.v2.Host hosts = 1; } +// RegisterCachePeerRequest represents cache peer registered request of AnnounceCachePeerRequest. +message RegisterCachePeerRequest { + // Host id. + string host_id = 1; + // Task id. + string task_id = 2; + // Tag is used to distinguish different cache tasks. + optional string tag = 3; + // Application of task. + optional string application = 4; + // Task piece length. + uint64 piece_length = 5; + // File path to be exported. + string output_path = 6; + // Download timeout. + optional google.protobuf.Duration timeout = 7; +} + +// DownloadCachePeerStartedRequest represents cache peer download started request of AnnounceCachePeerRequest. +message DownloadCachePeerStartedRequest { +} + +// RescheduleCachePeerRequest represents reschedule request of AnnounceCachePeerRequest. +message RescheduleCachePeerRequest { + // Candidate parent ids. + repeated common.v2.CachePeer candidate_parents = 1; + + // The description of the reschedule reason. + optional string description = 2; +} + +// DownloadCachePeerFinishedRequest represents cache peer download finished request of AnnounceCachePeerRequest. +message DownloadCachePeerFinishedRequest { + // Total piece count. + uint32 piece_count = 1; +} + +// DownloadCachePeerFailedRequest represents cache peer download failed request of AnnounceCachePeerRequest. +message DownloadCachePeerFailedRequest { + // The description of the download failed. + optional string description = 1; +} + +// AnnounceCachePeerRequest represents request of AnnounceCachePeer. +message AnnounceCachePeerRequest { + // Host id. + string host_id = 1; + // Task id. + string task_id = 2; + // Peer id. + string peer_id = 3; + + oneof request { + RegisterCachePeerRequest register_cache_peer_request = 4; + DownloadCachePeerStartedRequest download_cache_peer_started_request = 5; + RescheduleCachePeerRequest reschedule_cache_peer_request = 6; + DownloadCachePeerFinishedRequest download_cache_peer_finished_request = 7; + DownloadCachePeerFailedRequest download_cache_peer_failed_request = 8; + DownloadPieceFinishedRequest download_piece_finished_request = 9; + DownloadPieceFailedRequest download_piece_failed_request = 10; + } +} + +// EmptyCacheTaskResponse represents empty cache task response of AnnounceCachePeerResponse. +message EmptyCacheTaskResponse { +} + +// NormalCacheTaskResponse represents normal cache task response of AnnounceCachePeerResponse. +message NormalCacheTaskResponse { + // Candidate parents. + repeated common.v2.CachePeer candidate_cache_parents = 1; +} + +// AnnounceCachePeerResponse represents response of AnnounceCachePeer. +message AnnounceCachePeerResponse { + oneof response { + EmptyCacheTaskResponse empty_task_response = 1; + NormalCacheTaskResponse normal_task_response = 2; + } +} + +// StatCachePeerRequest represents request of StatCachePeer. +message StatCachePeerRequest { + // Host id. + string host_id = 1; + // Task id. + string task_id = 2; + // Peer id. + string peer_id = 3; +} + +// DeleteCachePeerRequest represents request of DeleteCachePeer. +message DeleteCachePeerRequest { + // Host id. + string host_id = 1; + // Task id. + string task_id = 2; + // Peer id. + string peer_id = 3; +} + +// StatCacheTaskRequest represents request of StatCacheTask. +message StatCacheTaskRequest { + // Task id. + string task_id = 1; +} + +// DeleteCacheTaskRequest represents request of DeleteCacheTask. +message DeleteCacheTaskRequest { + // Host id. + string host_id = 1; + // Task id. + string task_id = 2; +} + // Scheduler RPC Service. service Scheduler{ // AnnouncePeer announces peer to scheduler. @@ -282,4 +396,19 @@ service Scheduler{ // SyncProbes sync probes of the host. rpc SyncProbes(stream SyncProbesRequest)returns(stream SyncProbesResponse); + + // AnnounceCachePeer announces cache peer to scheduler. + rpc AnnounceCachePeer(stream AnnounceCachePeerRequest) returns(stream AnnounceCachePeerResponse); + + // Checks information of cache peer. + rpc StatCachePeer(StatCachePeerRequest)returns(common.v2.CachePeer); + + // DeleteCachePeer releases cache peer in scheduler. + rpc DeleteCachePeer(DeleteCachePeerRequest)returns(google.protobuf.Empty); + + // Checks information of cache task. + rpc StatCacheTask(StatCacheTaskRequest)returns(common.v2.CacheTask); + + // DeleteCacheTask releases cache task in scheduler. + rpc DeleteCacheTask(DeleteCacheTaskRequest)returns(google.protobuf.Empty); } diff --git a/src/descriptor.bin b/src/descriptor.bin index 326590d..11fbcda 100644 Binary files a/src/descriptor.bin and b/src/descriptor.bin differ diff --git a/src/scheduler.v2.rs b/src/scheduler.v2.rs index e0fe15f..69c15f9 100644 --- a/src/scheduler.v2.rs +++ b/src/scheduler.v2.rs @@ -21,11 +21,11 @@ pub struct DownloadPeerBackToSourceStartedRequest { #[prost(string, optional, tag = "1")] pub description: ::core::option::Option<::prost::alloc::string::String>, } -/// RescheduleRequest represents reschedule request of AnnouncePeerRequest. +/// ReschedulePeerRequest represents reschedule request of AnnouncePeerRequest. #[derive(serde::Serialize, serde::Deserialize)] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct RescheduleRequest { +pub struct ReschedulePeerRequest { /// Candidate parent ids. #[prost(message, repeated, tag = "1")] pub candidate_parents: ::prost::alloc::vec::Vec, @@ -169,7 +169,7 @@ pub mod announce_peer_request { super::DownloadPeerBackToSourceStartedRequest, ), #[prost(message, tag = "7")] - RescheduleRequest(super::RescheduleRequest), + ReschedulePeerRequest(super::ReschedulePeerRequest), #[prost(message, tag = "8")] DownloadPeerFinishedRequest(super::DownloadPeerFinishedRequest), #[prost(message, tag = "9")] @@ -278,7 +278,7 @@ pub struct DeletePeerRequest { pub struct StatTaskRequest { /// Task id. #[prost(string, tag = "1")] - pub id: ::prost::alloc::string::String, + pub task_id: ::prost::alloc::string::String, } /// DeleteTaskRequest represents request of DeleteTask. #[derive(serde::Serialize, serde::Deserialize)] @@ -308,7 +308,7 @@ pub struct AnnounceHostRequest { pub struct DeleteHostRequest { /// Host id. #[prost(string, tag = "1")] - pub id: ::prost::alloc::string::String, + pub host_id: ::prost::alloc::string::String, } /// ProbeStartedRequest represents started request of SyncProbesRequest. #[derive(serde::Serialize, serde::Deserialize)] @@ -394,6 +394,197 @@ pub struct SyncProbesResponse { #[prost(message, repeated, tag = "1")] pub hosts: ::prost::alloc::vec::Vec, } +/// RegisterCachePeerRequest represents cache peer registered request of AnnounceCachePeerRequest. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct RegisterCachePeerRequest { + /// Host id. + #[prost(string, tag = "1")] + pub host_id: ::prost::alloc::string::String, + /// Task id. + #[prost(string, tag = "2")] + pub task_id: ::prost::alloc::string::String, + /// Tag is used to distinguish different cache tasks. + #[prost(string, optional, tag = "3")] + pub tag: ::core::option::Option<::prost::alloc::string::String>, + /// Application of task. + #[prost(string, optional, tag = "4")] + pub application: ::core::option::Option<::prost::alloc::string::String>, + /// Task piece length. + #[prost(uint64, tag = "5")] + pub piece_length: u64, + /// File path to be exported. + #[prost(string, tag = "6")] + pub output_path: ::prost::alloc::string::String, + /// Download timeout. + #[prost(message, optional, tag = "7")] + pub timeout: ::core::option::Option<::prost_wkt_types::Duration>, +} +/// DownloadCachePeerStartedRequest represents cache peer download started request of AnnounceCachePeerRequest. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DownloadCachePeerStartedRequest {} +/// RescheduleCachePeerRequest represents reschedule request of AnnounceCachePeerRequest. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct RescheduleCachePeerRequest { + /// Candidate parent ids. + #[prost(message, repeated, tag = "1")] + pub candidate_parents: ::prost::alloc::vec::Vec, + /// The description of the reschedule reason. + #[prost(string, optional, tag = "2")] + pub description: ::core::option::Option<::prost::alloc::string::String>, +} +/// DownloadCachePeerFinishedRequest represents cache peer download finished request of AnnounceCachePeerRequest. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DownloadCachePeerFinishedRequest { + /// Total piece count. + #[prost(uint32, tag = "1")] + pub piece_count: u32, +} +/// DownloadCachePeerFailedRequest represents cache peer download failed request of AnnounceCachePeerRequest. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DownloadCachePeerFailedRequest { + /// The description of the download failed. + #[prost(string, optional, tag = "1")] + pub description: ::core::option::Option<::prost::alloc::string::String>, +} +/// AnnounceCachePeerRequest represents request of AnnounceCachePeer. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AnnounceCachePeerRequest { + /// Host id. + #[prost(string, tag = "1")] + pub host_id: ::prost::alloc::string::String, + /// Task id. + #[prost(string, tag = "2")] + pub task_id: ::prost::alloc::string::String, + /// Peer id. + #[prost(string, tag = "3")] + pub peer_id: ::prost::alloc::string::String, + #[prost( + oneof = "announce_cache_peer_request::Request", + tags = "4, 5, 6, 7, 8, 9, 10" + )] + pub request: ::core::option::Option, +} +/// Nested message and enum types in `AnnounceCachePeerRequest`. +pub mod announce_cache_peer_request { + #[derive(serde::Serialize, serde::Deserialize)] + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Request { + #[prost(message, tag = "4")] + RegisterCachePeerRequest(super::RegisterCachePeerRequest), + #[prost(message, tag = "5")] + DownloadCachePeerStartedRequest(super::DownloadCachePeerStartedRequest), + #[prost(message, tag = "6")] + RescheduleCachePeerRequest(super::RescheduleCachePeerRequest), + #[prost(message, tag = "7")] + DownloadCachePeerFinishedRequest(super::DownloadCachePeerFinishedRequest), + #[prost(message, tag = "8")] + DownloadCachePeerFailedRequest(super::DownloadCachePeerFailedRequest), + #[prost(message, tag = "9")] + DownloadPieceFinishedRequest(super::DownloadPieceFinishedRequest), + #[prost(message, tag = "10")] + DownloadPieceFailedRequest(super::DownloadPieceFailedRequest), + } +} +/// EmptyCacheTaskResponse represents empty cache task response of AnnounceCachePeerResponse. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EmptyCacheTaskResponse {} +/// NormalCacheTaskResponse represents normal cache task response of AnnounceCachePeerResponse. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct NormalCacheTaskResponse { + /// Candidate parents. + #[prost(message, repeated, tag = "1")] + pub candidate_cache_parents: ::prost::alloc::vec::Vec< + super::super::common::v2::CachePeer, + >, +} +/// AnnounceCachePeerResponse represents response of AnnounceCachePeer. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AnnounceCachePeerResponse { + #[prost(oneof = "announce_cache_peer_response::Response", tags = "1, 2")] + pub response: ::core::option::Option, +} +/// Nested message and enum types in `AnnounceCachePeerResponse`. +pub mod announce_cache_peer_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")] + EmptyTaskResponse(super::EmptyCacheTaskResponse), + #[prost(message, tag = "2")] + NormalTaskResponse(super::NormalCacheTaskResponse), + } +} +/// StatCachePeerRequest represents request of StatCachePeer. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct StatCachePeerRequest { + /// Host id. + #[prost(string, tag = "1")] + pub host_id: ::prost::alloc::string::String, + /// Task id. + #[prost(string, tag = "2")] + pub task_id: ::prost::alloc::string::String, + /// Peer id. + #[prost(string, tag = "3")] + pub peer_id: ::prost::alloc::string::String, +} +/// DeleteCachePeerRequest represents request of DeleteCachePeer. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteCachePeerRequest { + /// Host id. + #[prost(string, tag = "1")] + pub host_id: ::prost::alloc::string::String, + /// Task id. + #[prost(string, tag = "2")] + pub task_id: ::prost::alloc::string::String, + /// Peer id. + #[prost(string, tag = "3")] + pub peer_id: ::prost::alloc::string::String, +} +/// StatCacheTaskRequest represents request of StatCacheTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct StatCacheTaskRequest { + /// Task id. + #[prost(string, tag = "1")] + pub task_id: ::prost::alloc::string::String, +} +/// DeleteCacheTaskRequest represents request of DeleteCacheTask. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteCacheTaskRequest { + /// Host id. + #[prost(string, tag = "1")] + pub host_id: ::prost::alloc::string::String, + /// Task id. + #[prost(string, tag = "2")] + pub task_id: ::prost::alloc::string::String, +} /// Generated client implementations. pub mod scheduler_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] @@ -678,6 +869,132 @@ pub mod scheduler_client { .insert(GrpcMethod::new("scheduler.v2.Scheduler", "SyncProbes")); self.inner.streaming(req, path, codec).await } + /// AnnounceCachePeer announces cache peer to scheduler. + pub async fn announce_cache_peer( + &mut self, + request: impl tonic::IntoStreamingRequest< + Message = super::AnnounceCachePeerRequest, + >, + ) -> 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( + "/scheduler.v2.Scheduler/AnnounceCachePeer", + ); + let mut req = request.into_streaming_request(); + req.extensions_mut() + .insert(GrpcMethod::new("scheduler.v2.Scheduler", "AnnounceCachePeer")); + self.inner.streaming(req, path, codec).await + } + /// Checks information of cache peer. + pub async fn stat_cache_peer( + &mut self, + request: impl tonic::IntoRequest, + ) -> 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( + "/scheduler.v2.Scheduler/StatCachePeer", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert(GrpcMethod::new("scheduler.v2.Scheduler", "StatCachePeer")); + self.inner.unary(req, path, codec).await + } + /// DeleteCachePeer releases cache peer in scheduler. + pub async fn delete_cache_peer( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result, 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( + "/scheduler.v2.Scheduler/DeleteCachePeer", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert(GrpcMethod::new("scheduler.v2.Scheduler", "DeleteCachePeer")); + self.inner.unary(req, path, codec).await + } + /// Checks information of cache task. + pub async fn stat_cache_task( + &mut self, + request: impl tonic::IntoRequest, + ) -> 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( + "/scheduler.v2.Scheduler/StatCacheTask", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert(GrpcMethod::new("scheduler.v2.Scheduler", "StatCacheTask")); + self.inner.unary(req, path, codec).await + } + /// DeleteCacheTask releases cache task in scheduler. + pub async fn delete_cache_task( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result, 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( + "/scheduler.v2.Scheduler/DeleteCacheTask", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert(GrpcMethod::new("scheduler.v2.Scheduler", "DeleteCacheTask")); + self.inner.unary(req, path, codec).await + } } } /// Generated server implementations. @@ -748,6 +1065,49 @@ pub mod scheduler_server { &self, request: tonic::Request>, ) -> std::result::Result, tonic::Status>; + /// Server streaming response type for the AnnounceCachePeer method. + type AnnounceCachePeerStream: futures_core::Stream< + Item = std::result::Result< + super::AnnounceCachePeerResponse, + tonic::Status, + >, + > + + Send + + 'static; + /// AnnounceCachePeer announces cache peer to scheduler. + async fn announce_cache_peer( + &self, + request: tonic::Request>, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /// Checks information of cache peer. + async fn stat_cache_peer( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /// DeleteCachePeer releases cache peer in scheduler. + async fn delete_cache_peer( + &self, + request: tonic::Request, + ) -> std::result::Result, tonic::Status>; + /// Checks information of cache task. + async fn stat_cache_task( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + /// DeleteCacheTask releases cache task in scheduler. + async fn delete_cache_task( + &self, + request: tonic::Request, + ) -> std::result::Result, tonic::Status>; } /// Scheduler RPC Service. #[derive(Debug)] @@ -1191,6 +1551,239 @@ pub mod scheduler_server { }; Box::pin(fut) } + "/scheduler.v2.Scheduler/AnnounceCachePeer" => { + #[allow(non_camel_case_types)] + struct AnnounceCachePeerSvc(pub Arc); + impl< + T: Scheduler, + > tonic::server::StreamingService + for AnnounceCachePeerSvc { + type Response = super::AnnounceCachePeerResponse; + type ResponseStream = T::AnnounceCachePeerStream; + 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 { + (*inner).announce_cache_peer(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 inner = inner.0; + let method = AnnounceCachePeerSvc(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.streaming(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/scheduler.v2.Scheduler/StatCachePeer" => { + #[allow(non_camel_case_types)] + struct StatCachePeerSvc(pub Arc); + impl< + T: Scheduler, + > tonic::server::UnaryService + for StatCachePeerSvc { + type Response = super::super::super::common::v2::CachePeer; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + (*inner).stat_cache_peer(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 inner = inner.0; + let method = StatCachePeerSvc(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.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/scheduler.v2.Scheduler/DeleteCachePeer" => { + #[allow(non_camel_case_types)] + struct DeleteCachePeerSvc(pub Arc); + impl< + T: Scheduler, + > tonic::server::UnaryService + for DeleteCachePeerSvc { + type Response = (); + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + (*inner).delete_cache_peer(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 inner = inner.0; + let method = DeleteCachePeerSvc(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.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/scheduler.v2.Scheduler/StatCacheTask" => { + #[allow(non_camel_case_types)] + struct StatCacheTaskSvc(pub Arc); + impl< + T: Scheduler, + > tonic::server::UnaryService + for StatCacheTaskSvc { + type Response = super::super::super::common::v2::CacheTask; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + (*inner).stat_cache_task(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 inner = inner.0; + let method = StatCacheTaskSvc(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.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/scheduler.v2.Scheduler/DeleteCacheTask" => { + #[allow(non_camel_case_types)] + struct DeleteCacheTaskSvc(pub Arc); + impl< + T: Scheduler, + > tonic::server::UnaryService + for DeleteCacheTaskSvc { + type Response = (); + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + (*inner).delete_cache_task(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 inner = inner.0; + let method = DeleteCacheTaskSvc(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.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } _ => { Box::pin(async move { Ok(