From 13ba757fdcb5200e59954fb0200e44b4b95c9629 Mon Sep 17 00:00:00 2001 From: Sami Hiltunen Date: Sat, 20 Nov 2021 16:39:50 +0200 Subject: Add RPC definitions for GetRepositoryMetadata Praefect has methods in the datastore to retrieve a repository's metadata. This commit adds RPC definitions that allow for retrieving the metadata from cluster. This RPC endpoint is going to be used by a command line tool to retrieve a repository's metadata and by Gitaly tests that run with Praefect in front and peek in to the filesystem. Changelog: added --- proto/go/gitalypb/praefect.pb.go | 818 ++++++++++++++++++++++++++-------- proto/go/gitalypb/praefect_grpc.pb.go | 38 ++ proto/praefect.proto | 51 +++ 3 files changed, 717 insertions(+), 190 deletions(-) (limited to 'proto') diff --git a/proto/go/gitalypb/praefect.pb.go b/proto/go/gitalypb/praefect.pb.go index 9fdc2d146..e59dacdf1 100644 --- a/proto/go/gitalypb/praefect.pb.go +++ b/proto/go/gitalypb/praefect.pb.go @@ -20,6 +20,192 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// GetRepositoryMetadataRequest specifies the repository to retrieve metadata for. +type GetRepositoryMetadataRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Query: + // *GetRepositoryMetadataRequest_RepositoryId + // *GetRepositoryMetadataRequest_Path_ + Query isGetRepositoryMetadataRequest_Query `protobuf_oneof:"query"` +} + +func (x *GetRepositoryMetadataRequest) Reset() { + *x = GetRepositoryMetadataRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_praefect_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetRepositoryMetadataRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetRepositoryMetadataRequest) ProtoMessage() {} + +func (x *GetRepositoryMetadataRequest) 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 GetRepositoryMetadataRequest.ProtoReflect.Descriptor instead. +func (*GetRepositoryMetadataRequest) Descriptor() ([]byte, []int) { + return file_praefect_proto_rawDescGZIP(), []int{0} +} + +func (m *GetRepositoryMetadataRequest) GetQuery() isGetRepositoryMetadataRequest_Query { + if m != nil { + return m.Query + } + return nil +} + +func (x *GetRepositoryMetadataRequest) GetRepositoryId() int64 { + if x, ok := x.GetQuery().(*GetRepositoryMetadataRequest_RepositoryId); ok { + return x.RepositoryId + } + return 0 +} + +func (x *GetRepositoryMetadataRequest) GetPath() *GetRepositoryMetadataRequest_Path { + if x, ok := x.GetQuery().(*GetRepositoryMetadataRequest_Path_); ok { + return x.Path + } + return nil +} + +type isGetRepositoryMetadataRequest_Query interface { + isGetRepositoryMetadataRequest_Query() +} + +type GetRepositoryMetadataRequest_RepositoryId struct { + // repository_id is the ID of the repository to retrieve information for. + RepositoryId int64 `protobuf:"varint,1,opt,name=repository_id,json=repositoryId,proto3,oneof"` +} + +type GetRepositoryMetadataRequest_Path_ struct { + // path is the external path of the repository to retrieve information for. + Path *GetRepositoryMetadataRequest_Path `protobuf:"bytes,2,opt,name=path,proto3,oneof"` +} + +func (*GetRepositoryMetadataRequest_RepositoryId) isGetRepositoryMetadataRequest_Query() {} + +func (*GetRepositoryMetadataRequest_Path_) isGetRepositoryMetadataRequest_Query() {} + +// GeRepositoryMetadataResponse contains the repository's cluster metadata. +type GetRepositoryMetadataResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // repository_id is the internal ID of the repository. + RepositoryId int64 `protobuf:"varint,1,opt,name=repository_id,json=repositoryId,proto3" json:"repository_id,omitempty"` + // virtual_storage is the virtual storage in which the repository is located. + VirtualStorage string `protobuf:"bytes,2,opt,name=virtual_storage,json=virtualStorage,proto3" json:"virtual_storage,omitempty"` + // relative_path is the relative path of the repository in the virtual storage. + RelativePath string `protobuf:"bytes,3,opt,name=relative_path,json=relativePath,proto3" json:"relative_path,omitempty"` + // replica_path is the path on the disk where the replicas are stored. + ReplicaPath string `protobuf:"bytes,4,opt,name=replica_path,json=replicaPath,proto3" json:"replica_path,omitempty"` + // primary is the current primary of the repository. + Primary string `protobuf:"bytes,5,opt,name=primary,proto3" json:"primary,omitempty"` + // generation is the repository's current generation. + Generation int64 `protobuf:"varint,6,opt,name=generation,proto3" json:"generation,omitempty"` + // replicas are the existing and supposed to exist replicas of this repository. + Replicas []*GetRepositoryMetadataResponse_Replica `protobuf:"bytes,7,rep,name=replicas,proto3" json:"replicas,omitempty"` +} + +func (x *GetRepositoryMetadataResponse) Reset() { + *x = GetRepositoryMetadataResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_praefect_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetRepositoryMetadataResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetRepositoryMetadataResponse) ProtoMessage() {} + +func (x *GetRepositoryMetadataResponse) 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 GetRepositoryMetadataResponse.ProtoReflect.Descriptor instead. +func (*GetRepositoryMetadataResponse) Descriptor() ([]byte, []int) { + return file_praefect_proto_rawDescGZIP(), []int{1} +} + +func (x *GetRepositoryMetadataResponse) GetRepositoryId() int64 { + if x != nil { + return x.RepositoryId + } + return 0 +} + +func (x *GetRepositoryMetadataResponse) GetVirtualStorage() string { + if x != nil { + return x.VirtualStorage + } + return "" +} + +func (x *GetRepositoryMetadataResponse) GetRelativePath() string { + if x != nil { + return x.RelativePath + } + return "" +} + +func (x *GetRepositoryMetadataResponse) GetReplicaPath() string { + if x != nil { + return x.ReplicaPath + } + return "" +} + +func (x *GetRepositoryMetadataResponse) GetPrimary() string { + if x != nil { + return x.Primary + } + return "" +} + +func (x *GetRepositoryMetadataResponse) GetGeneration() int64 { + if x != nil { + return x.Generation + } + return 0 +} + +func (x *GetRepositoryMetadataResponse) GetReplicas() []*GetRepositoryMetadataResponse_Replica { + if x != nil { + return x.Replicas + } + return nil +} + // SetReplicationFactorRequest sets the desired replication factor for a repository. type SetReplicationFactorRequest struct { state protoimpl.MessageState @@ -37,7 +223,7 @@ type SetReplicationFactorRequest struct { func (x *SetReplicationFactorRequest) Reset() { *x = SetReplicationFactorRequest{} 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) } @@ -50,7 +236,7 @@ func (x *SetReplicationFactorRequest) String() string { func (*SetReplicationFactorRequest) ProtoMessage() {} func (x *SetReplicationFactorRequest) 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 { @@ -63,7 +249,7 @@ func (x *SetReplicationFactorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetReplicationFactorRequest.ProtoReflect.Descriptor instead. func (*SetReplicationFactorRequest) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{0} + return file_praefect_proto_rawDescGZIP(), []int{2} } func (x *SetReplicationFactorRequest) GetVirtualStorage() string { @@ -100,7 +286,7 @@ type SetReplicationFactorResponse struct { func (x *SetReplicationFactorResponse) Reset() { *x = SetReplicationFactorResponse{} 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) } @@ -113,7 +299,7 @@ func (x *SetReplicationFactorResponse) String() string { func (*SetReplicationFactorResponse) ProtoMessage() {} func (x *SetReplicationFactorResponse) 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 { @@ -126,7 +312,7 @@ func (x *SetReplicationFactorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetReplicationFactorResponse.ProtoReflect.Descriptor instead. func (*SetReplicationFactorResponse) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{1} + return file_praefect_proto_rawDescGZIP(), []int{3} } func (x *SetReplicationFactorResponse) GetStorages() []string { @@ -149,7 +335,7 @@ type SetAuthoritativeStorageRequest struct { func (x *SetAuthoritativeStorageRequest) Reset() { *x = SetAuthoritativeStorageRequest{} 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) } @@ -162,7 +348,7 @@ func (x *SetAuthoritativeStorageRequest) String() string { func (*SetAuthoritativeStorageRequest) ProtoMessage() {} func (x *SetAuthoritativeStorageRequest) 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 { @@ -175,7 +361,7 @@ func (x *SetAuthoritativeStorageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetAuthoritativeStorageRequest.ProtoReflect.Descriptor instead. func (*SetAuthoritativeStorageRequest) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{2} + return file_praefect_proto_rawDescGZIP(), []int{4} } func (x *SetAuthoritativeStorageRequest) GetVirtualStorage() string { @@ -208,7 +394,7 @@ type SetAuthoritativeStorageResponse struct { func (x *SetAuthoritativeStorageResponse) Reset() { *x = SetAuthoritativeStorageResponse{} 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) } @@ -221,7 +407,7 @@ func (x *SetAuthoritativeStorageResponse) String() string { func (*SetAuthoritativeStorageResponse) ProtoMessage() {} func (x *SetAuthoritativeStorageResponse) 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 { @@ -234,7 +420,7 @@ func (x *SetAuthoritativeStorageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetAuthoritativeStorageResponse.ProtoReflect.Descriptor instead. func (*SetAuthoritativeStorageResponse) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{3} + return file_praefect_proto_rawDescGZIP(), []int{5} } type DatalossCheckRequest struct { @@ -251,7 +437,7 @@ type DatalossCheckRequest struct { func (x *DatalossCheckRequest) Reset() { *x = DatalossCheckRequest{} 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) } @@ -264,7 +450,7 @@ func (x *DatalossCheckRequest) String() string { func (*DatalossCheckRequest) ProtoMessage() {} func (x *DatalossCheckRequest) 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 { @@ -277,7 +463,7 @@ func (x *DatalossCheckRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DatalossCheckRequest.ProtoReflect.Descriptor instead. func (*DatalossCheckRequest) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{4} + return file_praefect_proto_rawDescGZIP(), []int{6} } func (x *DatalossCheckRequest) GetVirtualStorage() string { @@ -306,7 +492,7 @@ type DatalossCheckResponse struct { func (x *DatalossCheckResponse) Reset() { *x = DatalossCheckResponse{} 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) } @@ -319,7 +505,7 @@ func (x *DatalossCheckResponse) String() string { func (*DatalossCheckResponse) ProtoMessage() {} func (x *DatalossCheckResponse) 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 { @@ -332,7 +518,7 @@ func (x *DatalossCheckResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DatalossCheckResponse.ProtoReflect.Descriptor instead. func (*DatalossCheckResponse) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{5} + return file_praefect_proto_rawDescGZIP(), []int{7} } func (x *DatalossCheckResponse) GetRepositories() []*DatalossCheckResponse_Repository { @@ -353,7 +539,7 @@ type RepositoryReplicasRequest struct { func (x *RepositoryReplicasRequest) Reset() { *x = RepositoryReplicasRequest{} 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) } @@ -366,7 +552,7 @@ func (x *RepositoryReplicasRequest) String() string { func (*RepositoryReplicasRequest) ProtoMessage() {} func (x *RepositoryReplicasRequest) 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 { @@ -379,7 +565,7 @@ func (x *RepositoryReplicasRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryReplicasRequest.ProtoReflect.Descriptor instead. func (*RepositoryReplicasRequest) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{6} + return file_praefect_proto_rawDescGZIP(), []int{8} } func (x *RepositoryReplicasRequest) GetRepository() *Repository { @@ -401,7 +587,7 @@ type RepositoryReplicasResponse struct { func (x *RepositoryReplicasResponse) Reset() { *x = RepositoryReplicasResponse{} 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) } @@ -414,7 +600,7 @@ func (x *RepositoryReplicasResponse) String() string { func (*RepositoryReplicasResponse) ProtoMessage() {} func (x *RepositoryReplicasResponse) 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 { @@ -427,7 +613,7 @@ func (x *RepositoryReplicasResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RepositoryReplicasResponse.ProtoReflect.Descriptor instead. func (*RepositoryReplicasResponse) Descriptor() ([]byte, []int) { - return file_praefect_proto_rawDescGZIP(), []int{7} + return file_praefect_proto_rawDescGZIP(), []int{9} } func (x *RepositoryReplicasResponse) GetPrimary() *RepositoryReplicasResponse_RepositoryDetails { @@ -444,6 +630,148 @@ func (x *RepositoryReplicasResponse) GetReplicas() []*RepositoryReplicasResponse return nil } +type GetRepositoryMetadataRequest_Path struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // virtual_storage is the virtual storage where the repository is. + VirtualStorage string `protobuf:"bytes,1,opt,name=virtual_storage,json=virtualStorage,proto3" json:"virtual_storage,omitempty"` + // relative_path is the relative path of the repository in the virtual storage. + RelativePath string `protobuf:"bytes,2,opt,name=relative_path,json=relativePath,proto3" json:"relative_path,omitempty"` +} + +func (x *GetRepositoryMetadataRequest_Path) Reset() { + *x = GetRepositoryMetadataRequest_Path{} + if protoimpl.UnsafeEnabled { + mi := &file_praefect_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetRepositoryMetadataRequest_Path) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetRepositoryMetadataRequest_Path) ProtoMessage() {} + +func (x *GetRepositoryMetadataRequest_Path) ProtoReflect() protoreflect.Message { + mi := &file_praefect_proto_msgTypes[10] + 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 GetRepositoryMetadataRequest_Path.ProtoReflect.Descriptor instead. +func (*GetRepositoryMetadataRequest_Path) Descriptor() ([]byte, []int) { + return file_praefect_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *GetRepositoryMetadataRequest_Path) GetVirtualStorage() string { + if x != nil { + return x.VirtualStorage + } + return "" +} + +func (x *GetRepositoryMetadataRequest_Path) GetRelativePath() string { + if x != nil { + return x.RelativePath + } + return "" +} + +type GetRepositoryMetadataResponse_Replica struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // storage is the name of the replica's storage. + Storage string `protobuf:"bytes,1,opt,name=storage,proto3" json:"storage,omitempty"` + // assigned indicates whether the replica is on an assigned storage. + Assigned bool `protobuf:"varint,2,opt,name=assigned,proto3" json:"assigned,omitempty"` + // generation is the replicas confirmed generation. Generation is -1 if the replica + // does not yet exist. + Generation int64 `protobuf:"varint,4,opt,name=generation,proto3" json:"generation,omitempty"` + // healthy indicates whether the replica is on a healthy storage. + Healthy bool `protobuf:"varint,5,opt,name=healthy,proto3" json:"healthy,omitempty"` + // valid_primary indicates whether the replica is considered a valid primary. + ValidPrimary bool `protobuf:"varint,6,opt,name=valid_primary,json=validPrimary,proto3" json:"valid_primary,omitempty"` +} + +func (x *GetRepositoryMetadataResponse_Replica) Reset() { + *x = GetRepositoryMetadataResponse_Replica{} + if protoimpl.UnsafeEnabled { + mi := &file_praefect_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetRepositoryMetadataResponse_Replica) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetRepositoryMetadataResponse_Replica) ProtoMessage() {} + +func (x *GetRepositoryMetadataResponse_Replica) ProtoReflect() protoreflect.Message { + mi := &file_praefect_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetRepositoryMetadataResponse_Replica.ProtoReflect.Descriptor instead. +func (*GetRepositoryMetadataResponse_Replica) Descriptor() ([]byte, []int) { + return file_praefect_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *GetRepositoryMetadataResponse_Replica) GetStorage() string { + if x != nil { + return x.Storage + } + return "" +} + +func (x *GetRepositoryMetadataResponse_Replica) GetAssigned() bool { + if x != nil { + return x.Assigned + } + return false +} + +func (x *GetRepositoryMetadataResponse_Replica) GetGeneration() int64 { + if x != nil { + return x.Generation + } + return 0 +} + +func (x *GetRepositoryMetadataResponse_Replica) GetHealthy() bool { + if x != nil { + return x.Healthy + } + return false +} + +func (x *GetRepositoryMetadataResponse_Replica) GetValidPrimary() bool { + if x != nil { + return x.ValidPrimary + } + return false +} + type DatalossCheckResponse_Repository struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -462,7 +790,7 @@ type DatalossCheckResponse_Repository struct { func (x *DatalossCheckResponse_Repository) Reset() { *x = DatalossCheckResponse_Repository{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[8] + mi := &file_praefect_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -475,7 +803,7 @@ func (x *DatalossCheckResponse_Repository) String() string { func (*DatalossCheckResponse_Repository) ProtoMessage() {} func (x *DatalossCheckResponse_Repository) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[8] + mi := &file_praefect_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -488,7 +816,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{5, 0} + return file_praefect_proto_rawDescGZIP(), []int{7, 0} } func (x *DatalossCheckResponse_Repository) GetRelativePath() string { @@ -539,7 +867,7 @@ type DatalossCheckResponse_Repository_Storage struct { func (x *DatalossCheckResponse_Repository_Storage) Reset() { *x = DatalossCheckResponse_Repository_Storage{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[9] + mi := &file_praefect_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -552,7 +880,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[9] + mi := &file_praefect_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -565,7 +893,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{5, 0, 0} + return file_praefect_proto_rawDescGZIP(), []int{7, 0, 0} } func (x *DatalossCheckResponse_Repository_Storage) GetName() string { @@ -615,7 +943,7 @@ type RepositoryReplicasResponse_RepositoryDetails struct { func (x *RepositoryReplicasResponse_RepositoryDetails) Reset() { *x = RepositoryReplicasResponse_RepositoryDetails{} if protoimpl.UnsafeEnabled { - mi := &file_praefect_proto_msgTypes[10] + mi := &file_praefect_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -628,7 +956,7 @@ func (x *RepositoryReplicasResponse_RepositoryDetails) String() string { func (*RepositoryReplicasResponse_RepositoryDetails) ProtoMessage() {} func (x *RepositoryReplicasResponse_RepositoryDetails) ProtoReflect() protoreflect.Message { - mi := &file_praefect_proto_msgTypes[10] + mi := &file_praefect_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -641,7 +969,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{7, 0} + return file_praefect_proto_rawDescGZIP(), []int{9, 0} } func (x *RepositoryReplicasResponse_RepositoryDetails) GetRepository() *Repository { @@ -664,122 +992,172 @@ var file_praefect_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x70, 0x72, 0x61, 0x65, 0x66, 0x65, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x1a, 0x0a, 0x6c, 0x69, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 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, 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, 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, 0x95, 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, + 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, 0xdb, 0x03, 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, 0x9e, 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, 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, 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, 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, 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, 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, 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, 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, } var ( @@ -794,41 +1172,49 @@ func file_praefect_proto_rawDescGZIP() []byte { return file_praefect_proto_rawDescData } -var file_praefect_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_praefect_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_praefect_proto_goTypes = []interface{}{ - (*SetReplicationFactorRequest)(nil), // 0: gitaly.SetReplicationFactorRequest - (*SetReplicationFactorResponse)(nil), // 1: gitaly.SetReplicationFactorResponse - (*SetAuthoritativeStorageRequest)(nil), // 2: gitaly.SetAuthoritativeStorageRequest - (*SetAuthoritativeStorageResponse)(nil), // 3: gitaly.SetAuthoritativeStorageResponse - (*DatalossCheckRequest)(nil), // 4: gitaly.DatalossCheckRequest - (*DatalossCheckResponse)(nil), // 5: gitaly.DatalossCheckResponse - (*RepositoryReplicasRequest)(nil), // 6: gitaly.RepositoryReplicasRequest - (*RepositoryReplicasResponse)(nil), // 7: gitaly.RepositoryReplicasResponse - (*DatalossCheckResponse_Repository)(nil), // 8: gitaly.DatalossCheckResponse.Repository - (*DatalossCheckResponse_Repository_Storage)(nil), // 9: gitaly.DatalossCheckResponse.Repository.Storage - (*RepositoryReplicasResponse_RepositoryDetails)(nil), // 10: gitaly.RepositoryReplicasResponse.RepositoryDetails - (*Repository)(nil), // 11: gitaly.Repository + (*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 } var file_praefect_proto_depIdxs = []int32{ - 8, // 0: gitaly.DatalossCheckResponse.repositories:type_name -> gitaly.DatalossCheckResponse.Repository - 11, // 1: gitaly.RepositoryReplicasRequest.repository:type_name -> gitaly.Repository - 10, // 2: gitaly.RepositoryReplicasResponse.primary:type_name -> gitaly.RepositoryReplicasResponse.RepositoryDetails - 10, // 3: gitaly.RepositoryReplicasResponse.replicas:type_name -> gitaly.RepositoryReplicasResponse.RepositoryDetails - 9, // 4: gitaly.DatalossCheckResponse.Repository.storages:type_name -> gitaly.DatalossCheckResponse.Repository.Storage - 11, // 5: gitaly.RepositoryReplicasResponse.RepositoryDetails.repository:type_name -> gitaly.Repository - 6, // 6: gitaly.PraefectInfoService.RepositoryReplicas:input_type -> gitaly.RepositoryReplicasRequest - 4, // 7: gitaly.PraefectInfoService.DatalossCheck:input_type -> gitaly.DatalossCheckRequest - 2, // 8: gitaly.PraefectInfoService.SetAuthoritativeStorage:input_type -> gitaly.SetAuthoritativeStorageRequest - 0, // 9: gitaly.PraefectInfoService.SetReplicationFactor:input_type -> gitaly.SetReplicationFactorRequest - 7, // 10: gitaly.PraefectInfoService.RepositoryReplicas:output_type -> gitaly.RepositoryReplicasResponse - 5, // 11: gitaly.PraefectInfoService.DatalossCheck:output_type -> gitaly.DatalossCheckResponse - 3, // 12: gitaly.PraefectInfoService.SetAuthoritativeStorage:output_type -> gitaly.SetAuthoritativeStorageResponse - 1, // 13: gitaly.PraefectInfoService.SetReplicationFactor:output_type -> gitaly.SetReplicationFactorResponse - 10, // [10:14] is the sub-list for method output_type - 6, // [6:10] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 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 + 13, // 6: gitaly.DatalossCheckResponse.Repository.storages:type_name -> gitaly.DatalossCheckResponse.Repository.Storage + 15, // 7: gitaly.RepositoryReplicasResponse.RepositoryDetails.repository:type_name -> gitaly.Repository + 8, // 8: gitaly.PraefectInfoService.RepositoryReplicas:input_type -> gitaly.RepositoryReplicasRequest + 6, // 9: gitaly.PraefectInfoService.DatalossCheck:input_type -> gitaly.DatalossCheckRequest + 4, // 10: gitaly.PraefectInfoService.SetAuthoritativeStorage:input_type -> gitaly.SetAuthoritativeStorageRequest + 2, // 11: gitaly.PraefectInfoService.SetReplicationFactor:input_type -> gitaly.SetReplicationFactorRequest + 0, // 12: gitaly.PraefectInfoService.GetRepositoryMetadata:input_type -> gitaly.GetRepositoryMetadataRequest + 9, // 13: gitaly.PraefectInfoService.RepositoryReplicas:output_type -> gitaly.RepositoryReplicasResponse + 7, // 14: gitaly.PraefectInfoService.DatalossCheck:output_type -> gitaly.DatalossCheckResponse + 5, // 15: gitaly.PraefectInfoService.SetAuthoritativeStorage:output_type -> gitaly.SetAuthoritativeStorageResponse + 3, // 16: gitaly.PraefectInfoService.SetReplicationFactor:output_type -> gitaly.SetReplicationFactorResponse + 1, // 17: gitaly.PraefectInfoService.GetRepositoryMetadata:output_type -> gitaly.GetRepositoryMetadataResponse + 13, // [13:18] is the sub-list for method output_type + 8, // [8:13] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_praefect_proto_init() } @@ -840,7 +1226,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.(*SetReplicationFactorRequest); i { + switch v := v.(*GetRepositoryMetadataRequest); i { case 0: return &v.state case 1: @@ -852,7 +1238,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetReplicationFactorResponse); i { + switch v := v.(*GetRepositoryMetadataResponse); i { case 0: return &v.state case 1: @@ -864,7 +1250,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetAuthoritativeStorageRequest); i { + switch v := v.(*SetReplicationFactorRequest); i { case 0: return &v.state case 1: @@ -876,7 +1262,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetAuthoritativeStorageResponse); i { + switch v := v.(*SetReplicationFactorResponse); i { case 0: return &v.state case 1: @@ -888,7 +1274,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatalossCheckRequest); i { + switch v := v.(*SetAuthoritativeStorageRequest); i { case 0: return &v.state case 1: @@ -900,7 +1286,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatalossCheckResponse); i { + switch v := v.(*SetAuthoritativeStorageResponse); i { case 0: return &v.state case 1: @@ -912,7 +1298,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepositoryReplicasRequest); i { + switch v := v.(*DatalossCheckRequest); i { case 0: return &v.state case 1: @@ -924,7 +1310,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepositoryReplicasResponse); i { + switch v := v.(*DatalossCheckResponse); i { case 0: return &v.state case 1: @@ -936,7 +1322,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatalossCheckResponse_Repository); i { + switch v := v.(*RepositoryReplicasRequest); i { case 0: return &v.state case 1: @@ -948,7 +1334,7 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DatalossCheckResponse_Repository_Storage); i { + switch v := v.(*RepositoryReplicasResponse); i { case 0: return &v.state case 1: @@ -960,6 +1346,54 @@ func file_praefect_proto_init() { } } file_praefect_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetRepositoryMetadataRequest_Path); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_praefect_proto_msgTypes[11].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[12].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[13].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[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RepositoryReplicasResponse_RepositoryDetails); i { case 0: return &v.state @@ -972,13 +1406,17 @@ func file_praefect_proto_init() { } } } + file_praefect_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*GetRepositoryMetadataRequest_RepositoryId)(nil), + (*GetRepositoryMetadataRequest_Path_)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_praefect_proto_rawDesc, NumEnums: 0, - NumMessages: 11, + NumMessages: 15, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gitalypb/praefect_grpc.pb.go b/proto/go/gitalypb/praefect_grpc.pb.go index b09fcd6ae..e16d18b83 100644 --- a/proto/go/gitalypb/praefect_grpc.pb.go +++ b/proto/go/gitalypb/praefect_grpc.pb.go @@ -34,6 +34,8 @@ type PraefectInfoServiceClient interface { // from a Praefect node that does not yet know about a new node. As assignments of unconfigured storages are ignored, replication // factor of repositories assigned to a storage node removed from the cluster is effectively decreased. SetReplicationFactor(ctx context.Context, in *SetReplicationFactorRequest, opts ...grpc.CallOption) (*SetReplicationFactorResponse, error) + // GetRepositoryMetadata returns the cluster metadata for a repository. Returns NotFound if the repository does not exist. + GetRepositoryMetadata(ctx context.Context, in *GetRepositoryMetadataRequest, opts ...grpc.CallOption) (*GetRepositoryMetadataResponse, error) } type praefectInfoServiceClient struct { @@ -80,6 +82,15 @@ func (c *praefectInfoServiceClient) SetReplicationFactor(ctx context.Context, in return out, nil } +func (c *praefectInfoServiceClient) GetRepositoryMetadata(ctx context.Context, in *GetRepositoryMetadataRequest, opts ...grpc.CallOption) (*GetRepositoryMetadataResponse, error) { + out := new(GetRepositoryMetadataResponse) + err := c.cc.Invoke(ctx, "/gitaly.PraefectInfoService/GetRepositoryMetadata", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // PraefectInfoServiceServer is the server API for PraefectInfoService service. // All implementations must embed UnimplementedPraefectInfoServiceServer // for forward compatibility @@ -100,6 +111,8 @@ type PraefectInfoServiceServer interface { // from a Praefect node that does not yet know about a new node. As assignments of unconfigured storages are ignored, replication // factor of repositories assigned to a storage node removed from the cluster is effectively decreased. SetReplicationFactor(context.Context, *SetReplicationFactorRequest) (*SetReplicationFactorResponse, error) + // GetRepositoryMetadata returns the cluster metadata for a repository. Returns NotFound if the repository does not exist. + GetRepositoryMetadata(context.Context, *GetRepositoryMetadataRequest) (*GetRepositoryMetadataResponse, error) mustEmbedUnimplementedPraefectInfoServiceServer() } @@ -119,6 +132,9 @@ func (UnimplementedPraefectInfoServiceServer) SetAuthoritativeStorage(context.Co func (UnimplementedPraefectInfoServiceServer) SetReplicationFactor(context.Context, *SetReplicationFactorRequest) (*SetReplicationFactorResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetReplicationFactor not implemented") } +func (UnimplementedPraefectInfoServiceServer) GetRepositoryMetadata(context.Context, *GetRepositoryMetadataRequest) (*GetRepositoryMetadataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetRepositoryMetadata not implemented") +} func (UnimplementedPraefectInfoServiceServer) mustEmbedUnimplementedPraefectInfoServiceServer() {} // UnsafePraefectInfoServiceServer may be embedded to opt out of forward compatibility for this service. @@ -204,6 +220,24 @@ func _PraefectInfoService_SetReplicationFactor_Handler(srv interface{}, ctx cont return interceptor(ctx, in, info, handler) } +func _PraefectInfoService_GetRepositoryMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetRepositoryMetadataRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PraefectInfoServiceServer).GetRepositoryMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gitaly.PraefectInfoService/GetRepositoryMetadata", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PraefectInfoServiceServer).GetRepositoryMetadata(ctx, req.(*GetRepositoryMetadataRequest)) + } + return interceptor(ctx, in, info, handler) +} + // PraefectInfoService_ServiceDesc is the grpc.ServiceDesc for PraefectInfoService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -227,6 +261,10 @@ var PraefectInfoService_ServiceDesc = grpc.ServiceDesc{ MethodName: "SetReplicationFactor", Handler: _PraefectInfoService_SetReplicationFactor_Handler, }, + { + MethodName: "GetRepositoryMetadata", + Handler: _PraefectInfoService_GetRepositoryMetadata_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "praefect.proto", diff --git a/proto/praefect.proto b/proto/praefect.proto index d89d2c3e0..34a4c5f79 100644 --- a/proto/praefect.proto +++ b/proto/praefect.proto @@ -29,6 +29,57 @@ service PraefectInfoService { // from a Praefect node that does not yet know about a new node. As assignments of unconfigured storages are ignored, replication // factor of repositories assigned to a storage node removed from the cluster is effectively decreased. rpc SetReplicationFactor(SetReplicationFactorRequest) returns (SetReplicationFactorResponse); + // GetRepositoryMetadata returns the cluster metadata for a repository. Returns NotFound if the repository does not exist. + rpc GetRepositoryMetadata(GetRepositoryMetadataRequest) returns (GetRepositoryMetadataResponse); +} + +// GetRepositoryMetadataRequest specifies the repository to retrieve metadata for. +message GetRepositoryMetadataRequest { + message Path { + // virtual_storage is the virtual storage where the repository is. + string virtual_storage = 1; + // relative_path is the relative path of the repository in the virtual storage. + string relative_path = 2; + } + + oneof query { + // repository_id is the ID of the repository to retrieve information for. + int64 repository_id = 1; + // path is the external path of the repository to retrieve information for. + Path path = 2; + }; +} + +// GeRepositoryMetadataResponse contains the repository's cluster metadata. +message GetRepositoryMetadataResponse { + message Replica { + // storage is the name of the replica's storage. + string storage = 1; + // assigned indicates whether the replica is on an assigned storage. + bool assigned = 2; + // generation is the replicas confirmed generation. Generation is -1 if the replica + // does not yet exist. + int64 generation = 4; + // healthy indicates whether the replica is on a healthy storage. + bool healthy = 5; + // valid_primary indicates whether the replica is considered a valid primary. + bool valid_primary = 6; + } + + // repository_id is the internal ID of the repository. + int64 repository_id = 1; + // virtual_storage is the virtual storage in which the repository is located. + string virtual_storage = 2; + // relative_path is the relative path of the repository in the virtual storage. + string relative_path = 3; + // replica_path is the path on the disk where the replicas are stored. + string replica_path = 4; + // primary is the current primary of the repository. + string primary = 5; + // generation is the repository's current generation. + int64 generation = 6; + // replicas are the existing and supposed to exist replicas of this repository. + repeated Replica replicas = 7; } // SetReplicationFactorRequest sets the desired replication factor for a repository. -- cgit v1.2.3