diff options
author | Sami Hiltunen <shiltunen@gitlab.com> | 2022-04-04 19:39:54 +0300 |
---|---|---|
committer | Sami Hiltunen <shiltunen@gitlab.com> | 2022-04-19 19:06:32 +0300 |
commit | b850c3990c3eb2e5f42024ca3409b1dfc078ffb7 (patch) | |
tree | dfe61b2029fc78677f5c15439ec1e9a6a763e157 | |
parent | ef18681a6f171af027a31de9ce335a1887d31e81 (diff) |
Add proto definitions for MarkUnverified RPC
With the introduction of metadata verification, Praefect needs a tool
to manually mark a repository as needing verification immediately rather
than after the specified verification interval has passed. That tool will
require a new RPC that it can call achieve its goal. This commit adds the
proto definitions for MarkUnverified RPC which can be called to either
mark a single repository by ID, a whole virtual storage, or a whole storage
as needing verification.
Changelog: added
-rw-r--r-- | proto/go/gitalypb/praefect.pb.go | 809 | ||||
-rw-r--r-- | proto/go/gitalypb/praefect_grpc.pb.go | 40 | ||||
-rw-r--r-- | proto/praefect.proto | 32 | ||||
-rw-r--r-- | ruby/proto/gitaly/praefect_pb.rb | 17 | ||||
-rw-r--r-- | ruby/proto/gitaly/praefect_services_pb.rb | 3 |
5 files changed, 637 insertions, 264 deletions
diff --git a/proto/go/gitalypb/praefect.pb.go b/proto/go/gitalypb/praefect.pb.go index 62f8af5b8..e21485b62 100644 --- a/proto/go/gitalypb/praefect.pb.go +++ b/proto/go/gitalypb/praefect.pb.go @@ -21,6 +21,156 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// MarkUnverifiedRequest specifies the replicas which to mark unverified. +type MarkUnverifiedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // selector specifies the replicas which to mark unverified. + // + // Types that are assignable to Selector: + // *MarkUnverifiedRequest_RepositoryId + // *MarkUnverifiedRequest_VirtualStorage + // *MarkUnverifiedRequest_Storage_ + Selector isMarkUnverifiedRequest_Selector `protobuf_oneof:"selector"` +} + +func (x *MarkUnverifiedRequest) Reset() { + *x = MarkUnverifiedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_praefect_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MarkUnverifiedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MarkUnverifiedRequest) ProtoMessage() {} + +func (x *MarkUnverifiedRequest) ProtoReflect() protoreflect.Message { + mi := &file_praefect_proto_msgTypes[0] + 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 MarkUnverifiedRequest.ProtoReflect.Descriptor instead. +func (*MarkUnverifiedRequest) Descriptor() ([]byte, []int) { + return file_praefect_proto_rawDescGZIP(), []int{0} +} + +func (m *MarkUnverifiedRequest) GetSelector() isMarkUnverifiedRequest_Selector { + if m != nil { + return m.Selector + } + return nil +} + +func (x *MarkUnverifiedRequest) GetRepositoryId() int64 { + if x, ok := x.GetSelector().(*MarkUnverifiedRequest_RepositoryId); ok { + return x.RepositoryId + } + return 0 +} + +func (x *MarkUnverifiedRequest) GetVirtualStorage() string { + if x, ok := x.GetSelector().(*MarkUnverifiedRequest_VirtualStorage); ok { + return x.VirtualStorage + } + return "" +} + +func (x *MarkUnverifiedRequest) GetStorage() *MarkUnverifiedRequest_Storage { + if x, ok := x.GetSelector().(*MarkUnverifiedRequest_Storage_); ok { + return x.Storage + } + return nil +} + +type isMarkUnverifiedRequest_Selector interface { + isMarkUnverifiedRequest_Selector() +} + +type MarkUnverifiedRequest_RepositoryId struct { + // repository_id is the id of a repository to mark all replicas for unverified. + RepositoryId int64 `protobuf:"varint,1,opt,name=repository_id,json=repositoryId,proto3,oneof"` +} + +type MarkUnverifiedRequest_VirtualStorage struct { + // virtual_storage is the name of virtual storage which will have all of its replicas + // marked unverified. + VirtualStorage string `protobuf:"bytes,2,opt,name=virtual_storage,json=virtualStorage,proto3,oneof"` +} + +type MarkUnverifiedRequest_Storage_ struct { + // storage specifies a single storage. The replicas on the storage marked unverified. + Storage *MarkUnverifiedRequest_Storage `protobuf:"bytes,3,opt,name=storage,proto3,oneof"` +} + +func (*MarkUnverifiedRequest_RepositoryId) isMarkUnverifiedRequest_Selector() {} + +func (*MarkUnverifiedRequest_VirtualStorage) isMarkUnverifiedRequest_Selector() {} + +func (*MarkUnverifiedRequest_Storage_) isMarkUnverifiedRequest_Selector() {} + +// MarkUnverifiedResponse returns the number of replicas marked unverified. +type MarkUnverifiedResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // replicas_marked indicates the number of replicas that were marked unverified. + ReplicasMarked int64 `protobuf:"varint,1,opt,name=replicas_marked,json=replicasMarked,proto3" json:"replicas_marked,omitempty"` +} + +func (x *MarkUnverifiedResponse) Reset() { + *x = MarkUnverifiedResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_praefect_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MarkUnverifiedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MarkUnverifiedResponse) ProtoMessage() {} + +func (x *MarkUnverifiedResponse) ProtoReflect() protoreflect.Message { + mi := &file_praefect_proto_msgTypes[1] + 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 MarkUnverifiedResponse.ProtoReflect.Descriptor instead. +func (*MarkUnverifiedResponse) Descriptor() ([]byte, []int) { + return file_praefect_proto_rawDescGZIP(), []int{1} +} + +func (x *MarkUnverifiedResponse) GetReplicasMarked() int64 { + if x != nil { + return x.ReplicasMarked + } + return 0 +} + // GetRepositoryMetadataRequest specifies the repository to retrieve metadata for. type GetRepositoryMetadataRequest struct { state protoimpl.MessageState @@ -36,7 +186,7 @@ type GetRepositoryMetadataRequest struct { func (x *GetRepositoryMetadataRequest) Reset() { *x = GetRepositoryMetadataRequest{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[0] + mi := &file_praefect_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -49,7 +199,7 @@ func (x *GetRepositoryMetadataRequest) String() string { func (*GetRepositoryMetadataRequest) ProtoMessage() {} func (x *GetRepositoryMetadataRequest) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[0] + mi := &file_praefect_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -62,7 +212,7 @@ func (x *GetRepositoryMetadataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRepositoryMetadataRequest.ProtoReflect.Descriptor instead. func (*GetRepositoryMetadataRequest) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{0} + return file_praefect_proto_rawDescGZIP(), []int{2} } func (m *GetRepositoryMetadataRequest) GetQuery() isGetRepositoryMetadataRequest_Query { @@ -129,7 +279,7 @@ type GetRepositoryMetadataResponse struct { func (x *GetRepositoryMetadataResponse) Reset() { *x = GetRepositoryMetadataResponse{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[1] + mi := &file_praefect_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -142,7 +292,7 @@ func (x *GetRepositoryMetadataResponse) String() string { func (*GetRepositoryMetadataResponse) ProtoMessage() {} func (x *GetRepositoryMetadataResponse) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[1] + mi := &file_praefect_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -155,7 +305,7 @@ func (x *GetRepositoryMetadataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRepositoryMetadataResponse.ProtoReflect.Descriptor instead. func (*GetRepositoryMetadataResponse) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{1} + return file_praefect_proto_rawDescGZIP(), []int{3} } func (x *GetRepositoryMetadataResponse) GetRepositoryId() int64 { @@ -224,7 +374,7 @@ type SetReplicationFactorRequest struct { func (x *SetReplicationFactorRequest) Reset() { *x = SetReplicationFactorRequest{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[2] + mi := &file_praefect_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -237,7 +387,7 @@ func (x *SetReplicationFactorRequest) String() string { func (*SetReplicationFactorRequest) ProtoMessage() {} func (x *SetReplicationFactorRequest) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[2] + mi := &file_praefect_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -250,7 +400,7 @@ func (x *SetReplicationFactorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetReplicationFactorRequest.ProtoReflect.Descriptor instead. func (*SetReplicationFactorRequest) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{2} + return file_praefect_proto_rawDescGZIP(), []int{4} } func (x *SetReplicationFactorRequest) GetVirtualStorage() string { @@ -287,7 +437,7 @@ type SetReplicationFactorResponse struct { func (x *SetReplicationFactorResponse) Reset() { *x = SetReplicationFactorResponse{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[3] + mi := &file_praefect_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -300,7 +450,7 @@ func (x *SetReplicationFactorResponse) String() string { func (*SetReplicationFactorResponse) ProtoMessage() {} func (x *SetReplicationFactorResponse) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[3] + mi := &file_praefect_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -313,7 +463,7 @@ func (x *SetReplicationFactorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetReplicationFactorResponse.ProtoReflect.Descriptor instead. func (*SetReplicationFactorResponse) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{3} + return file_praefect_proto_rawDescGZIP(), []int{5} } func (x *SetReplicationFactorResponse) GetStorages() []string { @@ -336,7 +486,7 @@ type SetAuthoritativeStorageRequest struct { func (x *SetAuthoritativeStorageRequest) Reset() { *x = SetAuthoritativeStorageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[4] + mi := &file_praefect_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -349,7 +499,7 @@ func (x *SetAuthoritativeStorageRequest) String() string { func (*SetAuthoritativeStorageRequest) ProtoMessage() {} func (x *SetAuthoritativeStorageRequest) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[4] + mi := &file_praefect_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -362,7 +512,7 @@ func (x *SetAuthoritativeStorageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetAuthoritativeStorageRequest.ProtoReflect.Descriptor instead. func (*SetAuthoritativeStorageRequest) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{4} + return file_praefect_proto_rawDescGZIP(), []int{6} } func (x *SetAuthoritativeStorageRequest) GetVirtualStorage() string { @@ -395,7 +545,7 @@ type SetAuthoritativeStorageResponse struct { func (x *SetAuthoritativeStorageResponse) Reset() { *x = SetAuthoritativeStorageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[5] + mi := &file_praefect_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -408,7 +558,7 @@ func (x *SetAuthoritativeStorageResponse) String() string { func (*SetAuthoritativeStorageResponse) ProtoMessage() {} func (x *SetAuthoritativeStorageResponse) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[5] + mi := &file_praefect_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -421,7 +571,7 @@ func (x *SetAuthoritativeStorageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetAuthoritativeStorageResponse.ProtoReflect.Descriptor instead. func (*SetAuthoritativeStorageResponse) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{5} + return file_praefect_proto_rawDescGZIP(), []int{7} } type DatalossCheckRequest struct { @@ -438,7 +588,7 @@ type DatalossCheckRequest struct { func (x *DatalossCheckRequest) Reset() { *x = DatalossCheckRequest{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[6] + mi := &file_praefect_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -451,7 +601,7 @@ func (x *DatalossCheckRequest) String() string { func (*DatalossCheckRequest) ProtoMessage() {} func (x *DatalossCheckRequest) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[6] + mi := &file_praefect_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -464,7 +614,7 @@ func (x *DatalossCheckRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DatalossCheckRequest.ProtoReflect.Descriptor instead. func (*DatalossCheckRequest) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{6} + return file_praefect_proto_rawDescGZIP(), []int{8} } func (x *DatalossCheckRequest) GetVirtualStorage() string { @@ -493,7 +643,7 @@ type DatalossCheckResponse struct { func (x *DatalossCheckResponse) Reset() { *x = DatalossCheckResponse{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[7] + mi := &file_praefect_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -506,7 +656,7 @@ func (x *DatalossCheckResponse) String() string { func (*DatalossCheckResponse) ProtoMessage() {} func (x *DatalossCheckResponse) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[7] + mi := &file_praefect_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -519,7 +669,7 @@ func (x *DatalossCheckResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DatalossCheckResponse.ProtoReflect.Descriptor instead. func (*DatalossCheckResponse) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{7} + return file_praefect_proto_rawDescGZIP(), []int{9} } func (x *DatalossCheckResponse) GetRepositories() []*DatalossCheckResponse_Repository { @@ -540,7 +690,7 @@ type RepositoryReplicasRequest struct { func (x *RepositoryReplicasRequest) Reset() { *x = RepositoryReplicasRequest{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[8] + mi := &file_praefect_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -553,7 +703,7 @@ func (x *RepositoryReplicasRequest) String() string { func (*RepositoryReplicasRequest) ProtoMessage() {} func (x *RepositoryReplicasRequest) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[8] + mi := &file_praefect_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -566,7 +716,7 @@ func (x *RepositoryReplicasRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryReplicasRequest.ProtoReflect.Descriptor instead. func (*RepositoryReplicasRequest) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{8} + return file_praefect_proto_rawDescGZIP(), []int{10} } func (x *RepositoryReplicasRequest) GetRepository() *Repository { @@ -588,7 +738,7 @@ type RepositoryReplicasResponse struct { func (x *RepositoryReplicasResponse) Reset() { *x = RepositoryReplicasResponse{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[9] + mi := &file_praefect_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -601,7 +751,7 @@ func (x *RepositoryReplicasResponse) String() string { func (*RepositoryReplicasResponse) ProtoMessage() {} func (x *RepositoryReplicasResponse) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[9] + mi := &file_praefect_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -614,7 +764,7 @@ func (x *RepositoryReplicasResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryReplicasResponse.ProtoReflect.Descriptor instead. func (*RepositoryReplicasResponse) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{9} + return file_praefect_proto_rawDescGZIP(), []int{11} } func (x *RepositoryReplicasResponse) GetPrimary() *RepositoryReplicasResponse_RepositoryDetails { @@ -631,6 +781,64 @@ func (x *RepositoryReplicasResponse) GetReplicas() []*RepositoryReplicasResponse return nil } +// Storage identifies a single storage in a virtual storage. +type MarkUnverifiedRequest_Storage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // virtual_storage is the virtual storage the storage is part of. + VirtualStorage string `protobuf:"bytes,1,opt,name=virtual_storage,json=virtualStorage,proto3" json:"virtual_storage,omitempty"` + // storage is the name of the storage. + Storage string `protobuf:"bytes,2,opt,name=storage,proto3" json:"storage,omitempty"` +} + +func (x *MarkUnverifiedRequest_Storage) Reset() { + *x = MarkUnverifiedRequest_Storage{} + if protoimpl.UnsafeEnabled { + mi := &file_praefect_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MarkUnverifiedRequest_Storage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MarkUnverifiedRequest_Storage) ProtoMessage() {} + +func (x *MarkUnverifiedRequest_Storage) ProtoReflect() protoreflect.Message { + mi := &file_praefect_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MarkUnverifiedRequest_Storage.ProtoReflect.Descriptor instead. +func (*MarkUnverifiedRequest_Storage) Descriptor() ([]byte, []int) { + return file_praefect_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *MarkUnverifiedRequest_Storage) GetVirtualStorage() string { + if x != nil { + return x.VirtualStorage + } + return "" +} + +func (x *MarkUnverifiedRequest_Storage) GetStorage() string { + if x != nil { + return x.Storage + } + return "" +} + type GetRepositoryMetadataRequest_Path struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -645,7 +853,7 @@ type GetRepositoryMetadataRequest_Path struct { func (x *GetRepositoryMetadataRequest_Path) Reset() { *x = GetRepositoryMetadataRequest_Path{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[10] + mi := &file_praefect_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -658,7 +866,7 @@ func (x *GetRepositoryMetadataRequest_Path) String() string { func (*GetRepositoryMetadataRequest_Path) ProtoMessage() {} func (x *GetRepositoryMetadataRequest_Path) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[10] + mi := &file_praefect_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -671,7 +879,7 @@ func (x *GetRepositoryMetadataRequest_Path) ProtoReflect() protoreflect.Message // Deprecated: Use GetRepositoryMetadataRequest_Path.ProtoReflect.Descriptor instead. func (*GetRepositoryMetadataRequest_Path) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{0, 0} + return file_praefect_proto_rawDescGZIP(), []int{2, 0} } func (x *GetRepositoryMetadataRequest_Path) GetVirtualStorage() string { @@ -711,7 +919,7 @@ type GetRepositoryMetadataResponse_Replica struct { func (x *GetRepositoryMetadataResponse_Replica) Reset() { *x = GetRepositoryMetadataResponse_Replica{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[11] + mi := &file_praefect_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -724,7 +932,7 @@ func (x *GetRepositoryMetadataResponse_Replica) String() string { func (*GetRepositoryMetadataResponse_Replica) ProtoMessage() {} func (x *GetRepositoryMetadataResponse_Replica) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[11] + mi := &file_praefect_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -737,7 +945,7 @@ func (x *GetRepositoryMetadataResponse_Replica) ProtoReflect() protoreflect.Mess // Deprecated: Use GetRepositoryMetadataResponse_Replica.ProtoReflect.Descriptor instead. func (*GetRepositoryMetadataResponse_Replica) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{1, 0} + return file_praefect_proto_rawDescGZIP(), []int{3, 0} } func (x *GetRepositoryMetadataResponse_Replica) GetStorage() string { @@ -800,7 +1008,7 @@ type DatalossCheckResponse_Repository struct { func (x *DatalossCheckResponse_Repository) Reset() { *x = DatalossCheckResponse_Repository{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[12] + mi := &file_praefect_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -813,7 +1021,7 @@ func (x *DatalossCheckResponse_Repository) String() string { func (*DatalossCheckResponse_Repository) ProtoMessage() {} func (x *DatalossCheckResponse_Repository) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[12] + mi := &file_praefect_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -826,7 +1034,7 @@ func (x *DatalossCheckResponse_Repository) ProtoReflect() protoreflect.Message { // Deprecated: Use DatalossCheckResponse_Repository.ProtoReflect.Descriptor instead. func (*DatalossCheckResponse_Repository) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{7, 0} + return file_praefect_proto_rawDescGZIP(), []int{9, 0} } func (x *DatalossCheckResponse_Repository) GetRelativePath() string { @@ -877,7 +1085,7 @@ type DatalossCheckResponse_Repository_Storage struct { func (x *DatalossCheckResponse_Repository_Storage) Reset() { *x = DatalossCheckResponse_Repository_Storage{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[13] + mi := &file_praefect_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -890,7 +1098,7 @@ func (x *DatalossCheckResponse_Repository_Storage) String() string { func (*DatalossCheckResponse_Repository_Storage) ProtoMessage() {} func (x *DatalossCheckResponse_Repository_Storage) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[13] + mi := &file_praefect_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -903,7 +1111,7 @@ func (x *DatalossCheckResponse_Repository_Storage) ProtoReflect() protoreflect.M // Deprecated: Use DatalossCheckResponse_Repository_Storage.ProtoReflect.Descriptor instead. func (*DatalossCheckResponse_Repository_Storage) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{7, 0, 0} + return file_praefect_proto_rawDescGZIP(), []int{9, 0, 0} } func (x *DatalossCheckResponse_Repository_Storage) GetName() string { @@ -953,7 +1161,7 @@ type RepositoryReplicasResponse_RepositoryDetails struct { func (x *RepositoryReplicasResponse_RepositoryDetails) Reset() { *x = RepositoryReplicasResponse_RepositoryDetails{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[14] + mi := &file_praefect_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -966,7 +1174,7 @@ func (x *RepositoryReplicasResponse_RepositoryDetails) String() string { func (*RepositoryReplicasResponse_RepositoryDetails) ProtoMessage() {} func (x *RepositoryReplicasResponse_RepositoryDetails) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[14] + mi := &file_praefect_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -979,7 +1187,7 @@ func (x *RepositoryReplicasResponse_RepositoryDetails) ProtoReflect() protorefle // Deprecated: Use RepositoryReplicasResponse_RepositoryDetails.ProtoReflect.Descriptor instead. func (*RepositoryReplicasResponse_RepositoryDetails) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{9, 0} + return file_praefect_proto_rawDescGZIP(), []int{11, 0} } func (x *RepositoryReplicasResponse_RepositoryDetails) GetRepository() *Repository { @@ -1004,176 +1212,202 @@ var file_praefect_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0xe5, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0c, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x50, 0x61, 0x74, 0x68, 0x48, 0x00, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x1a, 0x54, 0x0a, 0x04, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, - 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, - 0x74, 0x68, 0x42, 0x07, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x98, 0x04, 0x0a, 0x1d, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, + 0x6f, 0x74, 0x6f, 0x22, 0x86, 0x02, 0x0a, 0x15, 0x4d, 0x61, 0x72, 0x6b, 0x55, 0x6e, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1e, 0x0a, - 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, - 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x08, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x1a, 0xdb, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 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, 0x52, 0x0a, 0x76, 0x65, 0x72, 0x69, - 0x66, 0x69, 0x65, 0x64, 0x41, 0x74, 0x22, 0x9a, 0x01, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x22, 0x3a, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x22, - 0xa3, 0x01, 0x0a, 0x1e, 0x53, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x41, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x55, 0x6e, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x1a, 0x4c, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, + 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x42, 0x0a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x41, 0x0a, 0x16, + 0x4d, 0x61, 0x72, 0x6b, 0x55, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x73, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x22, + 0xe5, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x25, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x74, 0x68, + 0x48, 0x00, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x1a, 0x54, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, + 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, + 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x42, 0x07, + 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x98, 0x04, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x12, 0x27, + 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x08, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x73, 0x1a, 0xdb, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x73, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x73, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, + 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, + 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x50, 0x72, + 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 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, 0x52, 0x0a, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x41, 0x74, 0x22, 0x9a, 0x01, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x33, 0x0a, 0x15, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x14, 0x44, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x1c, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x5f, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0xbb, 0x03, 0x0a, - 0x15, 0x44, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x69, 0x65, 0x73, 0x1a, 0xd3, 0x02, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x4c, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x08, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x61, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, - 0x72, 0x79, 0x1a, 0x95, 0x01, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x5f, 0x62, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x42, 0x79, 0x12, - 0x1a, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x68, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x70, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x4f, 0x0a, 0x19, 0x52, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, - 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0xa3, 0x02, 0x0a, 0x1a, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x07, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x52, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x50, 0x0a, 0x08, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x1a, 0x63, 0x0a, 0x11, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x32, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x32, 0xfb, 0x03, 0x0a, 0x13, 0x50, 0x72, 0x61, 0x65, 0x66, 0x65, 0x63, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x12, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, - 0x21, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x22, + 0x3a, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x1e, + 0x53, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, + 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x33, 0x0a, 0x15, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x14, 0x44, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x73, + 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, + 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x1c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0xbb, 0x03, 0x0a, 0x15, 0x44, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, + 0x1a, 0xd3, 0x02, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, + 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x68, 0x12, 0x4c, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x1a, 0x95, + 0x01, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x42, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x61, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, + 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x50, + 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x4f, 0x0a, 0x19, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0xa3, 0x02, 0x0a, 0x1a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x44, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, - 0x26, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, - 0x2e, 0x53, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x61, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, - 0x79, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x24, 0x2e, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x04, 0xf0, 0x97, 0x28, 0x01, 0x42, - 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, - 0x74, 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, - 0x76, 0x31, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x07, 0x70, + 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x50, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x08, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x1a, 0x63, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x32, 0x0a, + 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x32, 0xcc, 0x04, + 0x0a, 0x13, 0x50, 0x72, 0x61, 0x65, 0x66, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x21, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x44, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x12, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6a, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x26, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, + 0x4d, 0x61, 0x72, 0x6b, 0x55, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x1d, + 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x55, 0x6e, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x55, 0x6e, 0x76, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, + 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, + 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, + 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, + 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x25, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x04, 0xf0, 0x97, 0x28, 0x01, 0x42, 0x34, 0x5a, 0x32, + 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, + 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x34, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1188,51 +1422,57 @@ func file_praefect_proto_rawDescGZIP() []byte { return file_praefect_proto_rawDescData } -var file_praefect_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_praefect_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_praefect_proto_goTypes = []interface{}{ - (*GetRepositoryMetadataRequest)(nil), // 0: gitaly.GetRepositoryMetadataRequest - (*GetRepositoryMetadataResponse)(nil), // 1: gitaly.GetRepositoryMetadataResponse - (*SetReplicationFactorRequest)(nil), // 2: gitaly.SetReplicationFactorRequest - (*SetReplicationFactorResponse)(nil), // 3: gitaly.SetReplicationFactorResponse - (*SetAuthoritativeStorageRequest)(nil), // 4: gitaly.SetAuthoritativeStorageRequest - (*SetAuthoritativeStorageResponse)(nil), // 5: gitaly.SetAuthoritativeStorageResponse - (*DatalossCheckRequest)(nil), // 6: gitaly.DatalossCheckRequest - (*DatalossCheckResponse)(nil), // 7: gitaly.DatalossCheckResponse - (*RepositoryReplicasRequest)(nil), // 8: gitaly.RepositoryReplicasRequest - (*RepositoryReplicasResponse)(nil), // 9: gitaly.RepositoryReplicasResponse - (*GetRepositoryMetadataRequest_Path)(nil), // 10: gitaly.GetRepositoryMetadataRequest.Path - (*GetRepositoryMetadataResponse_Replica)(nil), // 11: gitaly.GetRepositoryMetadataResponse.Replica - (*DatalossCheckResponse_Repository)(nil), // 12: gitaly.DatalossCheckResponse.Repository - (*DatalossCheckResponse_Repository_Storage)(nil), // 13: gitaly.DatalossCheckResponse.Repository.Storage - (*RepositoryReplicasResponse_RepositoryDetails)(nil), // 14: gitaly.RepositoryReplicasResponse.RepositoryDetails - (*Repository)(nil), // 15: gitaly.Repository - (*timestamppb.Timestamp)(nil), // 16: google.protobuf.Timestamp + (*MarkUnverifiedRequest)(nil), // 0: gitaly.MarkUnverifiedRequest + (*MarkUnverifiedResponse)(nil), // 1: gitaly.MarkUnverifiedResponse + (*GetRepositoryMetadataRequest)(nil), // 2: gitaly.GetRepositoryMetadataRequest + (*GetRepositoryMetadataResponse)(nil), // 3: gitaly.GetRepositoryMetadataResponse + (*SetReplicationFactorRequest)(nil), // 4: gitaly.SetReplicationFactorRequest + (*SetReplicationFactorResponse)(nil), // 5: gitaly.SetReplicationFactorResponse + (*SetAuthoritativeStorageRequest)(nil), // 6: gitaly.SetAuthoritativeStorageRequest + (*SetAuthoritativeStorageResponse)(nil), // 7: gitaly.SetAuthoritativeStorageResponse + (*DatalossCheckRequest)(nil), // 8: gitaly.DatalossCheckRequest + (*DatalossCheckResponse)(nil), // 9: gitaly.DatalossCheckResponse + (*RepositoryReplicasRequest)(nil), // 10: gitaly.RepositoryReplicasRequest + (*RepositoryReplicasResponse)(nil), // 11: gitaly.RepositoryReplicasResponse + (*MarkUnverifiedRequest_Storage)(nil), // 12: gitaly.MarkUnverifiedRequest.Storage + (*GetRepositoryMetadataRequest_Path)(nil), // 13: gitaly.GetRepositoryMetadataRequest.Path + (*GetRepositoryMetadataResponse_Replica)(nil), // 14: gitaly.GetRepositoryMetadataResponse.Replica + (*DatalossCheckResponse_Repository)(nil), // 15: gitaly.DatalossCheckResponse.Repository + (*DatalossCheckResponse_Repository_Storage)(nil), // 16: gitaly.DatalossCheckResponse.Repository.Storage + (*RepositoryReplicasResponse_RepositoryDetails)(nil), // 17: gitaly.RepositoryReplicasResponse.RepositoryDetails + (*Repository)(nil), // 18: gitaly.Repository + (*timestamppb.Timestamp)(nil), // 19: google.protobuf.Timestamp } var file_praefect_proto_depIdxs = []int32{ - 10, // 0: gitaly.GetRepositoryMetadataRequest.path:type_name -> gitaly.GetRepositoryMetadataRequest.Path - 11, // 1: gitaly.GetRepositoryMetadataResponse.replicas:type_name -> gitaly.GetRepositoryMetadataResponse.Replica - 12, // 2: gitaly.DatalossCheckResponse.repositories:type_name -> gitaly.DatalossCheckResponse.Repository - 15, // 3: gitaly.RepositoryReplicasRequest.repository:type_name -> gitaly.Repository - 14, // 4: gitaly.RepositoryReplicasResponse.primary:type_name -> gitaly.RepositoryReplicasResponse.RepositoryDetails - 14, // 5: gitaly.RepositoryReplicasResponse.replicas:type_name -> gitaly.RepositoryReplicasResponse.RepositoryDetails - 16, // 6: gitaly.GetRepositoryMetadataResponse.Replica.verified_at:type_name -> google.protobuf.Timestamp - 13, // 7: gitaly.DatalossCheckResponse.Repository.storages:type_name -> gitaly.DatalossCheckResponse.Repository.Storage - 15, // 8: gitaly.RepositoryReplicasResponse.RepositoryDetails.repository:type_name -> gitaly.Repository - 8, // 9: gitaly.PraefectInfoService.RepositoryReplicas:input_type -> gitaly.RepositoryReplicasRequest - 6, // 10: gitaly.PraefectInfoService.DatalossCheck:input_type -> gitaly.DatalossCheckRequest - 4, // 11: gitaly.PraefectInfoService.SetAuthoritativeStorage:input_type -> gitaly.SetAuthoritativeStorageRequest - 2, // 12: gitaly.PraefectInfoService.SetReplicationFactor:input_type -> gitaly.SetReplicationFactorRequest - 0, // 13: gitaly.PraefectInfoService.GetRepositoryMetadata:input_type -> gitaly.GetRepositoryMetadataRequest - 9, // 14: gitaly.PraefectInfoService.RepositoryReplicas:output_type -> gitaly.RepositoryReplicasResponse - 7, // 15: gitaly.PraefectInfoService.DatalossCheck:output_type -> gitaly.DatalossCheckResponse - 5, // 16: gitaly.PraefectInfoService.SetAuthoritativeStorage:output_type -> gitaly.SetAuthoritativeStorageResponse - 3, // 17: gitaly.PraefectInfoService.SetReplicationFactor:output_type -> gitaly.SetReplicationFactorResponse - 1, // 18: gitaly.PraefectInfoService.GetRepositoryMetadata:output_type -> gitaly.GetRepositoryMetadataResponse - 14, // [14:19] is the sub-list for method output_type - 9, // [9:14] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 12, // 0: gitaly.MarkUnverifiedRequest.storage:type_name -> gitaly.MarkUnverifiedRequest.Storage + 13, // 1: gitaly.GetRepositoryMetadataRequest.path:type_name -> gitaly.GetRepositoryMetadataRequest.Path + 14, // 2: gitaly.GetRepositoryMetadataResponse.replicas:type_name -> gitaly.GetRepositoryMetadataResponse.Replica + 15, // 3: gitaly.DatalossCheckResponse.repositories:type_name -> gitaly.DatalossCheckResponse.Repository + 18, // 4: gitaly.RepositoryReplicasRequest.repository:type_name -> gitaly.Repository + 17, // 5: gitaly.RepositoryReplicasResponse.primary:type_name -> gitaly.RepositoryReplicasResponse.RepositoryDetails + 17, // 6: gitaly.RepositoryReplicasResponse.replicas:type_name -> gitaly.RepositoryReplicasResponse.RepositoryDetails + 19, // 7: gitaly.GetRepositoryMetadataResponse.Replica.verified_at:type_name -> google.protobuf.Timestamp + 16, // 8: gitaly.DatalossCheckResponse.Repository.storages:type_name -> gitaly.DatalossCheckResponse.Repository.Storage + 18, // 9: gitaly.RepositoryReplicasResponse.RepositoryDetails.repository:type_name -> gitaly.Repository + 10, // 10: gitaly.PraefectInfoService.RepositoryReplicas:input_type -> gitaly.RepositoryReplicasRequest + 8, // 11: gitaly.PraefectInfoService.DatalossCheck:input_type -> gitaly.DatalossCheckRequest + 6, // 12: gitaly.PraefectInfoService.SetAuthoritativeStorage:input_type -> gitaly.SetAuthoritativeStorageRequest + 0, // 13: gitaly.PraefectInfoService.MarkUnverified:input_type -> gitaly.MarkUnverifiedRequest + 4, // 14: gitaly.PraefectInfoService.SetReplicationFactor:input_type -> gitaly.SetReplicationFactorRequest + 2, // 15: gitaly.PraefectInfoService.GetRepositoryMetadata:input_type -> gitaly.GetRepositoryMetadataRequest + 11, // 16: gitaly.PraefectInfoService.RepositoryReplicas:output_type -> gitaly.RepositoryReplicasResponse + 9, // 17: gitaly.PraefectInfoService.DatalossCheck:output_type -> gitaly.DatalossCheckResponse + 7, // 18: gitaly.PraefectInfoService.SetAuthoritativeStorage:output_type -> gitaly.SetAuthoritativeStorageResponse + 1, // 19: gitaly.PraefectInfoService.MarkUnverified:output_type -> gitaly.MarkUnverifiedResponse + 5, // 20: gitaly.PraefectInfoService.SetReplicationFactor:output_type -> gitaly.SetReplicationFactorResponse + 3, // 21: gitaly.PraefectInfoService.GetRepositoryMetadata:output_type -> gitaly.GetRepositoryMetadataResponse + 16, // [16:22] is the sub-list for method output_type + 10, // [10:16] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_praefect_proto_init() } @@ -1244,7 +1484,7 @@ func file_praefect_proto_init() { file_shared_proto_init() if !protoimpl.UnsafeEnabled { file_praefect_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRepositoryMetadataRequest); i { + switch v := v.(*MarkUnverifiedRequest); i { case 0: return &v.state case 1: @@ -1256,7 +1496,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRepositoryMetadataResponse); i { + switch v := v.(*MarkUnverifiedResponse); i { case 0: return &v.state case 1: @@ -1268,7 +1508,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetReplicationFactorRequest); i { + switch v := v.(*GetRepositoryMetadataRequest); i { case 0: return &v.state case 1: @@ -1280,7 +1520,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetReplicationFactorResponse); i { + switch v := v.(*GetRepositoryMetadataResponse); i { case 0: return &v.state case 1: @@ -1292,7 +1532,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetAuthoritativeStorageRequest); i { + switch v := v.(*SetReplicationFactorRequest); i { case 0: return &v.state case 1: @@ -1304,7 +1544,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetAuthoritativeStorageResponse); i { + switch v := v.(*SetReplicationFactorResponse); i { case 0: return &v.state case 1: @@ -1316,7 +1556,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatalossCheckRequest); i { + switch v := v.(*SetAuthoritativeStorageRequest); i { case 0: return &v.state case 1: @@ -1328,7 +1568,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatalossCheckResponse); i { + switch v := v.(*SetAuthoritativeStorageResponse); i { case 0: return &v.state case 1: @@ -1340,7 +1580,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepositoryReplicasRequest); i { + switch v := v.(*DatalossCheckRequest); i { case 0: return &v.state case 1: @@ -1352,7 +1592,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepositoryReplicasResponse); i { + switch v := v.(*DatalossCheckResponse); i { case 0: return &v.state case 1: @@ -1364,7 +1604,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRepositoryMetadataRequest_Path); i { + switch v := v.(*RepositoryReplicasRequest); i { case 0: return &v.state case 1: @@ -1376,7 +1616,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRepositoryMetadataResponse_Replica); i { + switch v := v.(*RepositoryReplicasResponse); i { case 0: return &v.state case 1: @@ -1388,7 +1628,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatalossCheckResponse_Repository); i { + switch v := v.(*MarkUnverifiedRequest_Storage); i { case 0: return &v.state case 1: @@ -1400,7 +1640,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatalossCheckResponse_Repository_Storage); i { + switch v := v.(*GetRepositoryMetadataRequest_Path); i { case 0: return &v.state case 1: @@ -1412,6 +1652,42 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetRepositoryMetadataResponse_Replica); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_praefect_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DatalossCheckResponse_Repository); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_praefect_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DatalossCheckResponse_Repository_Storage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_praefect_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RepositoryReplicasResponse_RepositoryDetails); i { case 0: return &v.state @@ -1425,6 +1701,11 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*MarkUnverifiedRequest_RepositoryId)(nil), + (*MarkUnverifiedRequest_VirtualStorage)(nil), + (*MarkUnverifiedRequest_Storage_)(nil), + } + file_praefect_proto_msgTypes[2].OneofWrappers = []interface{}{ (*GetRepositoryMetadataRequest_RepositoryId)(nil), (*GetRepositoryMetadataRequest_Path_)(nil), } @@ -1434,7 +1715,7 @@ func file_praefect_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_praefect_proto_rawDesc, NumEnums: 0, - NumMessages: 15, + NumMessages: 18, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gitalypb/praefect_grpc.pb.go b/proto/go/gitalypb/praefect_grpc.pb.go index e16d18b83..b01e699f6 100644 --- a/proto/go/gitalypb/praefect_grpc.pb.go +++ b/proto/go/gitalypb/praefect_grpc.pb.go @@ -25,6 +25,9 @@ type PraefectInfoServiceClient interface { // This causes the current version of the repository on the authoritative storage to be considered the // latest and overwrite any other version on the virtual storage. SetAuthoritativeStorage(ctx context.Context, in *SetAuthoritativeStorageRequest, opts ...grpc.CallOption) (*SetAuthoritativeStorageResponse, error) + // MarkUnverified marks replicas as unverified. This will trigger verification as Praefect's metadata + // verifier prioritizes unverified replicas. + MarkUnverified(ctx context.Context, in *MarkUnverifiedRequest, opts ...grpc.CallOption) (*MarkUnverifiedResponse, error) // SetReplicationFactor assigns or unassigns host nodes from the repository to meet the desired replication factor. // SetReplicationFactor returns an error when trying to set a replication factor that exceeds the storage node count // in the virtual storage. An error is also returned when trying to set a replication factor below one. The primary node @@ -73,6 +76,15 @@ func (c *praefectInfoServiceClient) SetAuthoritativeStorage(ctx context.Context, return out, nil } +func (c *praefectInfoServiceClient) MarkUnverified(ctx context.Context, in *MarkUnverifiedRequest, opts ...grpc.CallOption) (*MarkUnverifiedResponse, error) { + out := new(MarkUnverifiedResponse) + err := c.cc.Invoke(ctx, "/gitaly.PraefectInfoService/MarkUnverified", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *praefectInfoServiceClient) SetReplicationFactor(ctx context.Context, in *SetReplicationFactorRequest, opts ...grpc.CallOption) (*SetReplicationFactorResponse, error) { out := new(SetReplicationFactorResponse) err := c.cc.Invoke(ctx, "/gitaly.PraefectInfoService/SetReplicationFactor", in, out, opts...) @@ -102,6 +114,9 @@ type PraefectInfoServiceServer interface { // This causes the current version of the repository on the authoritative storage to be considered the // latest and overwrite any other version on the virtual storage. SetAuthoritativeStorage(context.Context, *SetAuthoritativeStorageRequest) (*SetAuthoritativeStorageResponse, error) + // MarkUnverified marks replicas as unverified. This will trigger verification as Praefect's metadata + // verifier prioritizes unverified replicas. + MarkUnverified(context.Context, *MarkUnverifiedRequest) (*MarkUnverifiedResponse, error) // SetReplicationFactor assigns or unassigns host nodes from the repository to meet the desired replication factor. // SetReplicationFactor returns an error when trying to set a replication factor that exceeds the storage node count // in the virtual storage. An error is also returned when trying to set a replication factor below one. The primary node @@ -129,6 +144,9 @@ func (UnimplementedPraefectInfoServiceServer) DatalossCheck(context.Context, *Da func (UnimplementedPraefectInfoServiceServer) SetAuthoritativeStorage(context.Context, *SetAuthoritativeStorageRequest) (*SetAuthoritativeStorageResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetAuthoritativeStorage not implemented") } +func (UnimplementedPraefectInfoServiceServer) MarkUnverified(context.Context, *MarkUnverifiedRequest) (*MarkUnverifiedResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method MarkUnverified not implemented") +} func (UnimplementedPraefectInfoServiceServer) SetReplicationFactor(context.Context, *SetReplicationFactorRequest) (*SetReplicationFactorResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetReplicationFactor not implemented") } @@ -202,6 +220,24 @@ func _PraefectInfoService_SetAuthoritativeStorage_Handler(srv interface{}, ctx c return interceptor(ctx, in, info, handler) } +func _PraefectInfoService_MarkUnverified_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MarkUnverifiedRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PraefectInfoServiceServer).MarkUnverified(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gitaly.PraefectInfoService/MarkUnverified", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PraefectInfoServiceServer).MarkUnverified(ctx, req.(*MarkUnverifiedRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _PraefectInfoService_SetReplicationFactor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SetReplicationFactorRequest) if err := dec(in); err != nil { @@ -258,6 +294,10 @@ var PraefectInfoService_ServiceDesc = grpc.ServiceDesc{ Handler: _PraefectInfoService_SetAuthoritativeStorage_Handler, }, { + MethodName: "MarkUnverified", + Handler: _PraefectInfoService_MarkUnverified_Handler, + }, + { MethodName: "SetReplicationFactor", Handler: _PraefectInfoService_SetReplicationFactor_Handler, }, diff --git a/proto/praefect.proto b/proto/praefect.proto index c26a22c20..2e913b99f 100644 --- a/proto/praefect.proto +++ b/proto/praefect.proto @@ -21,6 +21,10 @@ service PraefectInfoService { // latest and overwrite any other version on the virtual storage. rpc SetAuthoritativeStorage(SetAuthoritativeStorageRequest) returns (SetAuthoritativeStorageResponse); + // MarkUnverified marks replicas as unverified. This will trigger verification as Praefect's metadata + // verifier prioritizes unverified replicas. + rpc MarkUnverified(MarkUnverifiedRequest) returns (MarkUnverifiedResponse); + // SetReplicationFactor assigns or unassigns host nodes from the repository to meet the desired replication factor. // SetReplicationFactor returns an error when trying to set a replication factor that exceeds the storage node count // in the virtual storage. An error is also returned when trying to set a replication factor below one. The primary node @@ -34,6 +38,34 @@ service PraefectInfoService { rpc GetRepositoryMetadata(GetRepositoryMetadataRequest) returns (GetRepositoryMetadataResponse); } +// MarkUnverifiedRequest specifies the replicas which to mark unverified. +message MarkUnverifiedRequest { + // Storage identifies a single storage in a virtual storage. + message Storage { + // virtual_storage is the virtual storage the storage is part of. + string virtual_storage = 1; + // storage is the name of the storage. + string storage = 2; + } + + // selector specifies the replicas which to mark unverified. + oneof selector { + // repository_id is the id of a repository to mark all replicas for unverified. + int64 repository_id = 1; + // virtual_storage is the name of virtual storage which will have all of its replicas + // marked unverified. + string virtual_storage = 2; + // storage specifies a single storage. The replicas on the storage marked unverified. + Storage storage = 3; + } +} + +// MarkUnverifiedResponse returns the number of replicas marked unverified. +message MarkUnverifiedResponse { + // replicas_marked indicates the number of replicas that were marked unverified. + int64 replicas_marked = 1; +} + // GetRepositoryMetadataRequest specifies the repository to retrieve metadata for. message GetRepositoryMetadataRequest { message Path { diff --git a/ruby/proto/gitaly/praefect_pb.rb b/ruby/proto/gitaly/praefect_pb.rb index 918674133..143db977d 100644 --- a/ruby/proto/gitaly/praefect_pb.rb +++ b/ruby/proto/gitaly/praefect_pb.rb @@ -8,6 +8,20 @@ require 'google/protobuf' Google::Protobuf::DescriptorPool.generated_pool.build do add_file("praefect.proto", :syntax => :proto3) do + add_message "gitaly.MarkUnverifiedRequest" do + oneof :selector do + optional :repository_id, :int64, 1 + optional :virtual_storage, :string, 2 + optional :storage, :message, 3, "gitaly.MarkUnverifiedRequest.Storage" + end + end + add_message "gitaly.MarkUnverifiedRequest.Storage" do + optional :virtual_storage, :string, 1 + optional :storage, :string, 2 + end + add_message "gitaly.MarkUnverifiedResponse" do + optional :replicas_marked, :int64, 1 + end add_message "gitaly.GetRepositoryMetadataRequest" do oneof :query do optional :repository_id, :int64, 1 @@ -85,6 +99,9 @@ Google::Protobuf::DescriptorPool.generated_pool.build do end module Gitaly + MarkUnverifiedRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.MarkUnverifiedRequest").msgclass + MarkUnverifiedRequest::Storage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.MarkUnverifiedRequest.Storage").msgclass + MarkUnverifiedResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.MarkUnverifiedResponse").msgclass GetRepositoryMetadataRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.GetRepositoryMetadataRequest").msgclass GetRepositoryMetadataRequest::Path = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.GetRepositoryMetadataRequest.Path").msgclass GetRepositoryMetadataResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.GetRepositoryMetadataResponse").msgclass diff --git a/ruby/proto/gitaly/praefect_services_pb.rb b/ruby/proto/gitaly/praefect_services_pb.rb index 6f5629392..319feaaee 100644 --- a/ruby/proto/gitaly/praefect_services_pb.rb +++ b/ruby/proto/gitaly/praefect_services_pb.rb @@ -21,6 +21,9 @@ module Gitaly # This causes the current version of the repository on the authoritative storage to be considered the # latest and overwrite any other version on the virtual storage. rpc :SetAuthoritativeStorage, ::Gitaly::SetAuthoritativeStorageRequest, ::Gitaly::SetAuthoritativeStorageResponse + # MarkUnverified marks replicas as unverified. This will trigger verification as Praefect's metadata + # verifier prioritizes unverified replicas. + rpc :MarkUnverified, ::Gitaly::MarkUnverifiedRequest, ::Gitaly::MarkUnverifiedResponse # SetReplicationFactor assigns or unassigns host nodes from the repository to meet the desired replication factor. # SetReplicationFactor returns an error when trying to set a replication factor that exceeds the storage node count # in the virtual storage. An error is also returned when trying to set a replication factor below one. The primary node |