From cfb4fb90d877645e7af28e6f805b677974ee48d5 Mon Sep 17 00:00:00 2001 From: Rakshith R Date: Fri, 12 Aug 2022 17:00:24 +0530 Subject: [PATCH] sidecar: add volume replication service setup adding sidecar service for the volume replication service. Signed-off-by: Rakshith R --- internal/sidecar/service/volumereplication.go | 193 +++ sidecar/main.go | 1 + .../spec/lib/go/replication/replication.pb.go | 1144 +++++++++++++++++ .../lib/go/replication/replication_grpc.pb.go | 255 ++++ vendor/modules.txt | 1 + 5 files changed, 1594 insertions(+) create mode 100644 internal/sidecar/service/volumereplication.go create mode 100644 vendor/github.com/csi-addons/spec/lib/go/replication/replication.pb.go create mode 100644 vendor/github.com/csi-addons/spec/lib/go/replication/replication_grpc.pb.go diff --git a/internal/sidecar/service/volumereplication.go b/internal/sidecar/service/volumereplication.go new file mode 100644 index 000000000..6b7d1146b --- /dev/null +++ b/internal/sidecar/service/volumereplication.go @@ -0,0 +1,193 @@ +/* +Copyright 2022 The Kubernetes-CSI-Addons Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package service + +import ( + "context" + + kube "github.com/csi-addons/kubernetes-csi-addons/internal/kubernetes" + "github.com/csi-addons/kubernetes-csi-addons/internal/proto" + csiReplication "github.com/csi-addons/spec/lib/go/replication" + + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "k8s.io/client-go/kubernetes" + "k8s.io/klog/v2" +) + +// ReplicationServer struct of sidecar with supported methods of proto +// replication server spec and also containing replication +// controller client to csi driver. +type ReplicationServer struct { + proto.UnimplementedReplicationServer + controllerClient csiReplication.ControllerClient + kubeClient *kubernetes.Clientset +} + +// NewReplicationServer creates a new ReplicationServer which handles the proto.Replication +// Service requests. +func NewReplicationServer(c *grpc.ClientConn, kc *kubernetes.Clientset) *ReplicationServer { + return &ReplicationServer{ + controllerClient: csiReplication.NewControllerClient(c), + kubeClient: kc, + } +} + +// RegisterService registers service with the server. +func (rs *ReplicationServer) RegisterService(server grpc.ServiceRegistrar) { + proto.RegisterReplicationServer(server, rs) +} + +// EnableVolumeReplication fetches required information from kubernetes cluster and calls +// CSI-Addons EnableVolumeReplication service. +func (rs *ReplicationServer) EnableVolumeReplication( + ctx context.Context, + req *proto.EnableVolumeReplicationRequest) (*proto.EnableVolumeReplicationResponse, error) { + // Get the secrets from the k8s cluster + data, err := kube.GetSecret(ctx, rs.kubeClient, req.GetSecretName(), req.GetSecretNamespace()) + if err != nil { + klog.Errorf("Failed to get secret %s in namespace %s: %v", req.GetSecretName(), req.GetSecretNamespace(), err) + return nil, status.Error(codes.Internal, err.Error()) + } + + _, err = rs.controllerClient.EnableVolumeReplication(ctx, + &csiReplication.EnableVolumeReplicationRequest{ + VolumeId: req.VolumeId, + ReplicationId: req.ReplicationId, + Parameters: req.Parameters, + Secrets: data, + }) + if err != nil { + klog.Errorf("Failed to enable volume replication: %v", err) + return nil, err + } + + return &proto.EnableVolumeReplicationResponse{}, nil +} + +// DisableVolumeReplication fetches required information from kubernetes cluster and calls +// CSI-Addons DisableVolumeReplication service. +func (rs *ReplicationServer) DisableVolumeReplication( + ctx context.Context, + req *proto.DisableVolumeReplicationRequest) (*proto.DisableVolumeReplicationResponse, error) { + // Get the secrets from the k8s cluster + data, err := kube.GetSecret(ctx, rs.kubeClient, req.GetSecretName(), req.GetSecretNamespace()) + if err != nil { + klog.Errorf("Failed to get secret %s in namespace %s: %v", req.GetSecretName(), req.GetSecretNamespace(), err) + return nil, status.Error(codes.Internal, err.Error()) + } + + _, err = rs.controllerClient.DisableVolumeReplication(ctx, + &csiReplication.DisableVolumeReplicationRequest{ + VolumeId: req.VolumeId, + ReplicationId: req.ReplicationId, + Parameters: req.Parameters, + Secrets: data, + }) + if err != nil { + klog.Errorf("Failed to enable volume replication: %v", err) + return nil, err + } + + return &proto.DisableVolumeReplicationResponse{}, nil +} + +// PromoteVolume fetches required information from kubernetes cluster and calls +// CSI-Addons PromoteVolume service. +func (rs *ReplicationServer) PromoteVolume( + ctx context.Context, + req *proto.PromoteVolumeRequest) (*proto.PromoteVolumeResponse, error) { + // Get the secrets from the k8s cluster + data, err := kube.GetSecret(ctx, rs.kubeClient, req.GetSecretName(), req.GetSecretNamespace()) + if err != nil { + klog.Errorf("Failed to get secret %s in namespace %s: %v", req.GetSecretName(), req.GetSecretNamespace(), err) + return nil, status.Error(codes.Internal, err.Error()) + } + + _, err = rs.controllerClient.PromoteVolume(ctx, + &csiReplication.PromoteVolumeRequest{ + VolumeId: req.VolumeId, + ReplicationId: req.ReplicationId, + Force: req.Force, + Parameters: req.Parameters, + Secrets: data, + }) + if err != nil { + klog.Errorf("Failed to enable volume replication: %v", err) + return nil, err + } + + return &proto.PromoteVolumeResponse{}, nil +} + +// DemoteVolume fetches required information from kubernetes cluster and calls +// CSI-Addons DemoteVolume service. +func (rs *ReplicationServer) DemoteVolume( + ctx context.Context, + req *proto.DemoteVolumeRequest) (*proto.DemoteVolumeResponse, error) { + // Get the secrets from the k8s cluster + data, err := kube.GetSecret(ctx, rs.kubeClient, req.GetSecretName(), req.GetSecretNamespace()) + if err != nil { + klog.Errorf("Failed to get secret %s in namespace %s: %v", req.GetSecretName(), req.GetSecretNamespace(), err) + return nil, status.Error(codes.Internal, err.Error()) + } + + _, err = rs.controllerClient.DemoteVolume(ctx, + &csiReplication.DemoteVolumeRequest{ + VolumeId: req.VolumeId, + ReplicationId: req.ReplicationId, + Force: req.Force, + Parameters: req.Parameters, + Secrets: data, + }) + if err != nil { + klog.Errorf("Failed to enable volume replication: %v", err) + return nil, err + } + + return &proto.DemoteVolumeResponse{}, nil +} + +// ResyncVolume fetches required information from kubernetes cluster and calls +// CSI-Addons ResyncVolume service. +func (rs *ReplicationServer) ResyncVolume( + ctx context.Context, + req *proto.ResyncVolumeRequest) (*proto.ResyncVolumeResponse, error) { + // Get the secrets from the k8s cluster + data, err := kube.GetSecret(ctx, rs.kubeClient, req.GetSecretName(), req.GetSecretNamespace()) + if err != nil { + klog.Errorf("Failed to get secret %s in namespace %s: %v", req.GetSecretName(), req.GetSecretNamespace(), err) + return nil, status.Error(codes.Internal, err.Error()) + } + + resp, err := rs.controllerClient.ResyncVolume(ctx, + &csiReplication.ResyncVolumeRequest{ + VolumeId: req.VolumeId, + ReplicationId: req.ReplicationId, + Force: req.Force, + Parameters: req.Parameters, + Secrets: data, + }) + if err != nil { + klog.Errorf("Failed to enable volume replication: %v", err) + return nil, err + } + + return &proto.ResyncVolumeResponse{ + Ready: resp.Ready, + }, nil +} diff --git a/sidecar/main.go b/sidecar/main.go index 427eb0b94..f1bd48341 100644 --- a/sidecar/main.go +++ b/sidecar/main.go @@ -96,6 +96,7 @@ func main() { sidecarServer.RegisterService(service.NewIdentityServer(csiClient.GetGRPCClient())) sidecarServer.RegisterService(service.NewReclaimSpaceServer(csiClient.GetGRPCClient(), kubeClient, *stagingPath)) sidecarServer.RegisterService(service.NewNetworkFenceServer(csiClient.GetGRPCClient(), kubeClient)) + sidecarServer.RegisterService(service.NewReplicationServer(csiClient.GetGRPCClient(), kubeClient)) sidecarServer.Start() } diff --git a/vendor/github.com/csi-addons/spec/lib/go/replication/replication.pb.go b/vendor/github.com/csi-addons/spec/lib/go/replication/replication.pb.go new file mode 100644 index 000000000..b7d0db181 --- /dev/null +++ b/vendor/github.com/csi-addons/spec/lib/go/replication/replication.pb.go @@ -0,0 +1,1144 @@ +// Code generated by make; DO NOT EDIT. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0 +// protoc v3.14.0 +// source: replication/replication.proto + +package replication + +import ( + proto "github.com/golang/protobuf/proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +// EnableVolumeReplicationRequest holds the required information to enable +// replication on a volume. +type EnableVolumeReplicationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The identifier for this volume, generated by the plugin during + // CreateVolume CSI RPC call. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific volume vs all other volumes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this volume. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The identifier for the replication. + // This field is OPTIONAL. + // This field MUST contain enough information, together with volume_id, + // to uniquely identify this specific replication + // vs all other replications supported by this plugin. + ReplicationId string `protobuf:"bytes,4,opt,name=replication_id,json=replicationId,proto3" json:"replication_id,omitempty"` + // Plugin specific parameters passed in as opaque key-value pairs. + Parameters map[string]string `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Secrets required by the plugin to complete the request. + Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EnableVolumeReplicationRequest) Reset() { + *x = EnableVolumeReplicationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_replication_replication_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EnableVolumeReplicationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnableVolumeReplicationRequest) ProtoMessage() {} + +func (x *EnableVolumeReplicationRequest) ProtoReflect() protoreflect.Message { + mi := &file_replication_replication_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 EnableVolumeReplicationRequest.ProtoReflect.Descriptor instead. +func (*EnableVolumeReplicationRequest) Descriptor() ([]byte, []int) { + return file_replication_replication_proto_rawDescGZIP(), []int{0} +} + +func (x *EnableVolumeReplicationRequest) GetVolumeId() string { + if x != nil { + return x.VolumeId + } + return "" +} + +func (x *EnableVolumeReplicationRequest) GetReplicationId() string { + if x != nil { + return x.ReplicationId + } + return "" +} + +func (x *EnableVolumeReplicationRequest) GetParameters() map[string]string { + if x != nil { + return x.Parameters + } + return nil +} + +func (x *EnableVolumeReplicationRequest) GetSecrets() map[string]string { + if x != nil { + return x.Secrets + } + return nil +} + +// EnableVolumeReplicationResponse holds the information to send when +// replication is successfully enabled on a volume. +type EnableVolumeReplicationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *EnableVolumeReplicationResponse) Reset() { + *x = EnableVolumeReplicationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_replication_replication_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EnableVolumeReplicationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnableVolumeReplicationResponse) ProtoMessage() {} + +func (x *EnableVolumeReplicationResponse) ProtoReflect() protoreflect.Message { + mi := &file_replication_replication_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 EnableVolumeReplicationResponse.ProtoReflect.Descriptor instead. +func (*EnableVolumeReplicationResponse) Descriptor() ([]byte, []int) { + return file_replication_replication_proto_rawDescGZIP(), []int{1} +} + +// DisableVolumeReplicationRequest holds the required information to disable +// replication on a volume. +type DisableVolumeReplicationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The identifier for this volume, generated by the plugin during + // CreateVolume CSI RPC call. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific volume vs all other volumes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this volume. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The identifier for the replication. + // This field is OPTIONAL. + // This field MUST contain enough information, together with volume_id, + // to uniquely identify this specific replication + // vs all other replications supported by this plugin. + ReplicationId string `protobuf:"bytes,4,opt,name=replication_id,json=replicationId,proto3" json:"replication_id,omitempty"` + // Plugin specific parameters passed in as opaque key-value pairs. + Parameters map[string]string `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Secrets required by the plugin to complete the request. + Secrets map[string]string `protobuf:"bytes,3,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *DisableVolumeReplicationRequest) Reset() { + *x = DisableVolumeReplicationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_replication_replication_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DisableVolumeReplicationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DisableVolumeReplicationRequest) ProtoMessage() {} + +func (x *DisableVolumeReplicationRequest) ProtoReflect() protoreflect.Message { + mi := &file_replication_replication_proto_msgTypes[2] + 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 DisableVolumeReplicationRequest.ProtoReflect.Descriptor instead. +func (*DisableVolumeReplicationRequest) Descriptor() ([]byte, []int) { + return file_replication_replication_proto_rawDescGZIP(), []int{2} +} + +func (x *DisableVolumeReplicationRequest) GetVolumeId() string { + if x != nil { + return x.VolumeId + } + return "" +} + +func (x *DisableVolumeReplicationRequest) GetReplicationId() string { + if x != nil { + return x.ReplicationId + } + return "" +} + +func (x *DisableVolumeReplicationRequest) GetParameters() map[string]string { + if x != nil { + return x.Parameters + } + return nil +} + +func (x *DisableVolumeReplicationRequest) GetSecrets() map[string]string { + if x != nil { + return x.Secrets + } + return nil +} + +// DisableVolumeReplicationResponse holds the information to send when +// replication is successfully disabled on a volume. +type DisableVolumeReplicationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DisableVolumeReplicationResponse) Reset() { + *x = DisableVolumeReplicationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_replication_replication_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DisableVolumeReplicationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DisableVolumeReplicationResponse) ProtoMessage() {} + +func (x *DisableVolumeReplicationResponse) ProtoReflect() protoreflect.Message { + mi := &file_replication_replication_proto_msgTypes[3] + 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 DisableVolumeReplicationResponse.ProtoReflect.Descriptor instead. +func (*DisableVolumeReplicationResponse) Descriptor() ([]byte, []int) { + return file_replication_replication_proto_rawDescGZIP(), []int{3} +} + +// PromoteVolumeRequest holds the required information to promote volume as a +// primary on local cluster. +type PromoteVolumeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The identifier for this volume, generated by the plugin during + // CreateVolume CSI RPC call. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific volume vs all other volumes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this volume. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The identifier for the replication. + // This field is OPTIONAL. + // This field MUST contain enough information, together with volume_id, + // to uniquely identify this specific replication + // vs all other replications supported by this plugin. + ReplicationId string `protobuf:"bytes,5,opt,name=replication_id,json=replicationId,proto3" json:"replication_id,omitempty"` + // This field is optional. + // Default value is false, force option to Promote the volume. + Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` + // Plugin specific parameters passed in as opaque key-value pairs. + Parameters map[string]string `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Secrets required by the plugin to complete the request. + Secrets map[string]string `protobuf:"bytes,4,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *PromoteVolumeRequest) Reset() { + *x = PromoteVolumeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_replication_replication_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PromoteVolumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PromoteVolumeRequest) ProtoMessage() {} + +func (x *PromoteVolumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_replication_replication_proto_msgTypes[4] + 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 PromoteVolumeRequest.ProtoReflect.Descriptor instead. +func (*PromoteVolumeRequest) Descriptor() ([]byte, []int) { + return file_replication_replication_proto_rawDescGZIP(), []int{4} +} + +func (x *PromoteVolumeRequest) GetVolumeId() string { + if x != nil { + return x.VolumeId + } + return "" +} + +func (x *PromoteVolumeRequest) GetReplicationId() string { + if x != nil { + return x.ReplicationId + } + return "" +} + +func (x *PromoteVolumeRequest) GetForce() bool { + if x != nil { + return x.Force + } + return false +} + +func (x *PromoteVolumeRequest) GetParameters() map[string]string { + if x != nil { + return x.Parameters + } + return nil +} + +func (x *PromoteVolumeRequest) GetSecrets() map[string]string { + if x != nil { + return x.Secrets + } + return nil +} + +// PromoteVolumeResponse holds the information to send when +// volume is successfully promoted. +type PromoteVolumeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PromoteVolumeResponse) Reset() { + *x = PromoteVolumeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_replication_replication_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PromoteVolumeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PromoteVolumeResponse) ProtoMessage() {} + +func (x *PromoteVolumeResponse) ProtoReflect() protoreflect.Message { + mi := &file_replication_replication_proto_msgTypes[5] + 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 PromoteVolumeResponse.ProtoReflect.Descriptor instead. +func (*PromoteVolumeResponse) Descriptor() ([]byte, []int) { + return file_replication_replication_proto_rawDescGZIP(), []int{5} +} + +// DemoteVolumeRequest holds the required information to demote volume on local +// cluster. +type DemoteVolumeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The identifier for this volume, generated by the plugin during + // CreateVolume CSI RPC call. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific volume vs all other volumes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this volume. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The identifier for the replication. + // This field is OPTIONAL. + // This field MUST contain enough information, together with volume_id, + // to uniquely identify this specific replication + // vs all other replications supported by this plugin. + ReplicationId string `protobuf:"bytes,5,opt,name=replication_id,json=replicationId,proto3" json:"replication_id,omitempty"` + // This field is optional. + // Default value is false, force option to Demote the volume. + Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` + // Plugin specific parameters passed in as opaque key-value pairs. + Parameters map[string]string `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Secrets required by the plugin to complete the request. + Secrets map[string]string `protobuf:"bytes,4,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *DemoteVolumeRequest) Reset() { + *x = DemoteVolumeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_replication_replication_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DemoteVolumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DemoteVolumeRequest) ProtoMessage() {} + +func (x *DemoteVolumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_replication_replication_proto_msgTypes[6] + 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 DemoteVolumeRequest.ProtoReflect.Descriptor instead. +func (*DemoteVolumeRequest) Descriptor() ([]byte, []int) { + return file_replication_replication_proto_rawDescGZIP(), []int{6} +} + +func (x *DemoteVolumeRequest) GetVolumeId() string { + if x != nil { + return x.VolumeId + } + return "" +} + +func (x *DemoteVolumeRequest) GetReplicationId() string { + if x != nil { + return x.ReplicationId + } + return "" +} + +func (x *DemoteVolumeRequest) GetForce() bool { + if x != nil { + return x.Force + } + return false +} + +func (x *DemoteVolumeRequest) GetParameters() map[string]string { + if x != nil { + return x.Parameters + } + return nil +} + +func (x *DemoteVolumeRequest) GetSecrets() map[string]string { + if x != nil { + return x.Secrets + } + return nil +} + +// DemoteVolumeResponse holds the information to send when +// volume is successfully demoted. +type DemoteVolumeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DemoteVolumeResponse) Reset() { + *x = DemoteVolumeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_replication_replication_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DemoteVolumeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DemoteVolumeResponse) ProtoMessage() {} + +func (x *DemoteVolumeResponse) ProtoReflect() protoreflect.Message { + mi := &file_replication_replication_proto_msgTypes[7] + 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 DemoteVolumeResponse.ProtoReflect.Descriptor instead. +func (*DemoteVolumeResponse) Descriptor() ([]byte, []int) { + return file_replication_replication_proto_rawDescGZIP(), []int{7} +} + +// ResyncVolumeRequest holds the required information to resync volume. +type ResyncVolumeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The identifier for this volume, generated by the plugin during + // CreateVolume CSI RPC call. + // This field is REQUIRED. + // This field MUST contain enough information to uniquely identify + // this specific volume vs all other volumes supported by this plugin. + // This field SHALL be used by the CO in subsequent calls to refer to + // this volume. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The identifier for the replication. + // This field is OPTIONAL. + // This field MUST contain enough information, together with volume_id, + // to uniquely identify this specific replication + // vs all other replications supported by this plugin. + ReplicationId string `protobuf:"bytes,5,opt,name=replication_id,json=replicationId,proto3" json:"replication_id,omitempty"` + // This field is optional. + // Default value is false, force option to Resync the volume. + Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` + // Plugin specific parameters passed in as opaque key-value pairs. + Parameters map[string]string `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Secrets required by the plugin to complete the request. + Secrets map[string]string `protobuf:"bytes,4,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ResyncVolumeRequest) Reset() { + *x = ResyncVolumeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_replication_replication_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResyncVolumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResyncVolumeRequest) ProtoMessage() {} + +func (x *ResyncVolumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_replication_replication_proto_msgTypes[8] + 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 ResyncVolumeRequest.ProtoReflect.Descriptor instead. +func (*ResyncVolumeRequest) Descriptor() ([]byte, []int) { + return file_replication_replication_proto_rawDescGZIP(), []int{8} +} + +func (x *ResyncVolumeRequest) GetVolumeId() string { + if x != nil { + return x.VolumeId + } + return "" +} + +func (x *ResyncVolumeRequest) GetReplicationId() string { + if x != nil { + return x.ReplicationId + } + return "" +} + +func (x *ResyncVolumeRequest) GetForce() bool { + if x != nil { + return x.Force + } + return false +} + +func (x *ResyncVolumeRequest) GetParameters() map[string]string { + if x != nil { + return x.Parameters + } + return nil +} + +func (x *ResyncVolumeRequest) GetSecrets() map[string]string { + if x != nil { + return x.Secrets + } + return nil +} + +// ResyncVolumeResponse holds the information to send when +// volume is successfully resynced. +type ResyncVolumeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Indicates that the volume is ready to use. + // The default value is false. + // This field is REQUIRED. + Ready bool `protobuf:"varint,1,opt,name=ready,proto3" json:"ready,omitempty"` +} + +func (x *ResyncVolumeResponse) Reset() { + *x = ResyncVolumeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_replication_replication_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResyncVolumeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResyncVolumeResponse) ProtoMessage() {} + +func (x *ResyncVolumeResponse) ProtoReflect() protoreflect.Message { + mi := &file_replication_replication_proto_msgTypes[9] + 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 ResyncVolumeResponse.ProtoReflect.Descriptor instead. +func (*ResyncVolumeResponse) Descriptor() ([]byte, []int) { + return file_replication_replication_proto_rawDescGZIP(), []int{9} +} + +func (x *ResyncVolumeResponse) GetReady() bool { + if x != nil { + return x.Ready + } + return false +} + +var file_replication_replication_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 1099, + Name: "replication.replication_secret", + Tag: "varint,1099,opt,name=replication_secret", + Filename: "replication/replication.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 1100, + Name: "replication.alpha_field", + Tag: "varint,1100,opt,name=alpha_field", + Filename: "replication/replication.proto", + }, +} + +// Extension fields to descriptorpb.FieldOptions. +var ( + // Indicates that a field MAY contain information that is sensitive + // and MUST be treated as such (e.g. not logged). + // + // optional bool replication_secret = 1099; + E_ReplicationSecret = &file_replication_replication_proto_extTypes[0] + // Indicates that this field is OPTIONAL and part of an experimental + // API that may be deprecated and eventually removed between minor + // releases. + // + // optional bool alpha_field = 1100; + E_AlphaField = &file_replication_replication_proto_extTypes[1] +) + +var File_replication_replication_proto protoreflect.FileDescriptor + +var file_replication_replication_proto_rawDesc = []byte{ + 0x0a, 0x1d, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x20, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9a, + 0x03, 0x0a, 0x1e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2a, + 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x44, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x0a, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, + 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x03, 0xd8, 0x44, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x21, 0x0a, 0x1f, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9d, + 0x03, 0x0a, 0x1f, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, + 0x2a, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x44, 0x01, 0x52, 0x0d, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x5c, 0x0a, 0x0a, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3c, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x07, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xd8, 0x44, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x22, + 0x0a, 0x20, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x92, 0x03, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x44, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0a, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4d, 0x0a, + 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, + 0xd8, 0x44, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x17, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x6d, 0x6f, + 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x8f, 0x03, 0x0a, 0x13, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x44, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x07, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xd8, 0x44, 0x01, 0x52, 0x07, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8f, 0x03, 0x0a, 0x13, 0x52, + 0x65, 0x73, 0x79, 0x6e, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, + 0x2a, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x44, 0x01, 0x52, 0x0d, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x42, 0x03, 0xd8, 0x44, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x14, + 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x32, 0x87, 0x04, 0x0a, 0x0a, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x76, 0x0a, 0x17, 0x45, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2c, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x79, 0x0a, 0x18, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0d, + 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x21, 0x2e, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6d, + 0x6f, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x22, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, + 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x20, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, + 0x0c, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x20, 0x2e, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x79, + 0x6e, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, + 0x73, 0x79, 0x6e, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x3a, 0x4d, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xcb, 0x08, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x3a, 0x3f, 0x0a, 0x0b, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0xcc, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x42, 0x0f, 0x5a, 0x0d, 0x2e, 0x3b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_replication_replication_proto_rawDescOnce sync.Once + file_replication_replication_proto_rawDescData = file_replication_replication_proto_rawDesc +) + +func file_replication_replication_proto_rawDescGZIP() []byte { + file_replication_replication_proto_rawDescOnce.Do(func() { + file_replication_replication_proto_rawDescData = protoimpl.X.CompressGZIP(file_replication_replication_proto_rawDescData) + }) + return file_replication_replication_proto_rawDescData +} + +var file_replication_replication_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_replication_replication_proto_goTypes = []interface{}{ + (*EnableVolumeReplicationRequest)(nil), // 0: replication.EnableVolumeReplicationRequest + (*EnableVolumeReplicationResponse)(nil), // 1: replication.EnableVolumeReplicationResponse + (*DisableVolumeReplicationRequest)(nil), // 2: replication.DisableVolumeReplicationRequest + (*DisableVolumeReplicationResponse)(nil), // 3: replication.DisableVolumeReplicationResponse + (*PromoteVolumeRequest)(nil), // 4: replication.PromoteVolumeRequest + (*PromoteVolumeResponse)(nil), // 5: replication.PromoteVolumeResponse + (*DemoteVolumeRequest)(nil), // 6: replication.DemoteVolumeRequest + (*DemoteVolumeResponse)(nil), // 7: replication.DemoteVolumeResponse + (*ResyncVolumeRequest)(nil), // 8: replication.ResyncVolumeRequest + (*ResyncVolumeResponse)(nil), // 9: replication.ResyncVolumeResponse + nil, // 10: replication.EnableVolumeReplicationRequest.ParametersEntry + nil, // 11: replication.EnableVolumeReplicationRequest.SecretsEntry + nil, // 12: replication.DisableVolumeReplicationRequest.ParametersEntry + nil, // 13: replication.DisableVolumeReplicationRequest.SecretsEntry + nil, // 14: replication.PromoteVolumeRequest.ParametersEntry + nil, // 15: replication.PromoteVolumeRequest.SecretsEntry + nil, // 16: replication.DemoteVolumeRequest.ParametersEntry + nil, // 17: replication.DemoteVolumeRequest.SecretsEntry + nil, // 18: replication.ResyncVolumeRequest.ParametersEntry + nil, // 19: replication.ResyncVolumeRequest.SecretsEntry + (*descriptorpb.FieldOptions)(nil), // 20: google.protobuf.FieldOptions +} +var file_replication_replication_proto_depIdxs = []int32{ + 10, // 0: replication.EnableVolumeReplicationRequest.parameters:type_name -> replication.EnableVolumeReplicationRequest.ParametersEntry + 11, // 1: replication.EnableVolumeReplicationRequest.secrets:type_name -> replication.EnableVolumeReplicationRequest.SecretsEntry + 12, // 2: replication.DisableVolumeReplicationRequest.parameters:type_name -> replication.DisableVolumeReplicationRequest.ParametersEntry + 13, // 3: replication.DisableVolumeReplicationRequest.secrets:type_name -> replication.DisableVolumeReplicationRequest.SecretsEntry + 14, // 4: replication.PromoteVolumeRequest.parameters:type_name -> replication.PromoteVolumeRequest.ParametersEntry + 15, // 5: replication.PromoteVolumeRequest.secrets:type_name -> replication.PromoteVolumeRequest.SecretsEntry + 16, // 6: replication.DemoteVolumeRequest.parameters:type_name -> replication.DemoteVolumeRequest.ParametersEntry + 17, // 7: replication.DemoteVolumeRequest.secrets:type_name -> replication.DemoteVolumeRequest.SecretsEntry + 18, // 8: replication.ResyncVolumeRequest.parameters:type_name -> replication.ResyncVolumeRequest.ParametersEntry + 19, // 9: replication.ResyncVolumeRequest.secrets:type_name -> replication.ResyncVolumeRequest.SecretsEntry + 20, // 10: replication.replication_secret:extendee -> google.protobuf.FieldOptions + 20, // 11: replication.alpha_field:extendee -> google.protobuf.FieldOptions + 0, // 12: replication.Controller.EnableVolumeReplication:input_type -> replication.EnableVolumeReplicationRequest + 2, // 13: replication.Controller.DisableVolumeReplication:input_type -> replication.DisableVolumeReplicationRequest + 4, // 14: replication.Controller.PromoteVolume:input_type -> replication.PromoteVolumeRequest + 6, // 15: replication.Controller.DemoteVolume:input_type -> replication.DemoteVolumeRequest + 8, // 16: replication.Controller.ResyncVolume:input_type -> replication.ResyncVolumeRequest + 1, // 17: replication.Controller.EnableVolumeReplication:output_type -> replication.EnableVolumeReplicationResponse + 3, // 18: replication.Controller.DisableVolumeReplication:output_type -> replication.DisableVolumeReplicationResponse + 5, // 19: replication.Controller.PromoteVolume:output_type -> replication.PromoteVolumeResponse + 7, // 20: replication.Controller.DemoteVolume:output_type -> replication.DemoteVolumeResponse + 9, // 21: replication.Controller.ResyncVolume:output_type -> replication.ResyncVolumeResponse + 17, // [17:22] is the sub-list for method output_type + 12, // [12:17] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 10, // [10:12] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name +} + +func init() { file_replication_replication_proto_init() } +func file_replication_replication_proto_init() { + if File_replication_replication_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_replication_replication_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EnableVolumeReplicationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_replication_replication_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EnableVolumeReplicationResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_replication_replication_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DisableVolumeReplicationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_replication_replication_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DisableVolumeReplicationResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_replication_replication_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PromoteVolumeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_replication_replication_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PromoteVolumeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_replication_replication_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DemoteVolumeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_replication_replication_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DemoteVolumeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_replication_replication_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResyncVolumeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_replication_replication_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResyncVolumeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_replication_replication_proto_rawDesc, + NumEnums: 0, + NumMessages: 20, + NumExtensions: 2, + NumServices: 1, + }, + GoTypes: file_replication_replication_proto_goTypes, + DependencyIndexes: file_replication_replication_proto_depIdxs, + MessageInfos: file_replication_replication_proto_msgTypes, + ExtensionInfos: file_replication_replication_proto_extTypes, + }.Build() + File_replication_replication_proto = out.File + file_replication_replication_proto_rawDesc = nil + file_replication_replication_proto_goTypes = nil + file_replication_replication_proto_depIdxs = nil +} diff --git a/vendor/github.com/csi-addons/spec/lib/go/replication/replication_grpc.pb.go b/vendor/github.com/csi-addons/spec/lib/go/replication/replication_grpc.pb.go new file mode 100644 index 000000000..87c8be8a3 --- /dev/null +++ b/vendor/github.com/csi-addons/spec/lib/go/replication/replication_grpc.pb.go @@ -0,0 +1,255 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package replication + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// ControllerClient is the client API for Controller service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ControllerClient interface { + // EnableVolumeReplication RPC call to enable the volume replication. + EnableVolumeReplication(ctx context.Context, in *EnableVolumeReplicationRequest, opts ...grpc.CallOption) (*EnableVolumeReplicationResponse, error) + // DisableVolumeReplication RPC call to disable the volume replication. + DisableVolumeReplication(ctx context.Context, in *DisableVolumeReplicationRequest, opts ...grpc.CallOption) (*DisableVolumeReplicationResponse, error) + // PromoteVolume RPC call to promote the volume. + PromoteVolume(ctx context.Context, in *PromoteVolumeRequest, opts ...grpc.CallOption) (*PromoteVolumeResponse, error) + // DemoteVolume RPC call to demote the volume. + DemoteVolume(ctx context.Context, in *DemoteVolumeRequest, opts ...grpc.CallOption) (*DemoteVolumeResponse, error) + // ResyncVolume RPC call to resync the volume. + ResyncVolume(ctx context.Context, in *ResyncVolumeRequest, opts ...grpc.CallOption) (*ResyncVolumeResponse, error) +} + +type controllerClient struct { + cc grpc.ClientConnInterface +} + +func NewControllerClient(cc grpc.ClientConnInterface) ControllerClient { + return &controllerClient{cc} +} + +func (c *controllerClient) EnableVolumeReplication(ctx context.Context, in *EnableVolumeReplicationRequest, opts ...grpc.CallOption) (*EnableVolumeReplicationResponse, error) { + out := new(EnableVolumeReplicationResponse) + err := c.cc.Invoke(ctx, "/replication.Controller/EnableVolumeReplication", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) DisableVolumeReplication(ctx context.Context, in *DisableVolumeReplicationRequest, opts ...grpc.CallOption) (*DisableVolumeReplicationResponse, error) { + out := new(DisableVolumeReplicationResponse) + err := c.cc.Invoke(ctx, "/replication.Controller/DisableVolumeReplication", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) PromoteVolume(ctx context.Context, in *PromoteVolumeRequest, opts ...grpc.CallOption) (*PromoteVolumeResponse, error) { + out := new(PromoteVolumeResponse) + err := c.cc.Invoke(ctx, "/replication.Controller/PromoteVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) DemoteVolume(ctx context.Context, in *DemoteVolumeRequest, opts ...grpc.CallOption) (*DemoteVolumeResponse, error) { + out := new(DemoteVolumeResponse) + err := c.cc.Invoke(ctx, "/replication.Controller/DemoteVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) ResyncVolume(ctx context.Context, in *ResyncVolumeRequest, opts ...grpc.CallOption) (*ResyncVolumeResponse, error) { + out := new(ResyncVolumeResponse) + err := c.cc.Invoke(ctx, "/replication.Controller/ResyncVolume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ControllerServer is the server API for Controller service. +// All implementations must embed UnimplementedControllerServer +// for forward compatibility +type ControllerServer interface { + // EnableVolumeReplication RPC call to enable the volume replication. + EnableVolumeReplication(context.Context, *EnableVolumeReplicationRequest) (*EnableVolumeReplicationResponse, error) + // DisableVolumeReplication RPC call to disable the volume replication. + DisableVolumeReplication(context.Context, *DisableVolumeReplicationRequest) (*DisableVolumeReplicationResponse, error) + // PromoteVolume RPC call to promote the volume. + PromoteVolume(context.Context, *PromoteVolumeRequest) (*PromoteVolumeResponse, error) + // DemoteVolume RPC call to demote the volume. + DemoteVolume(context.Context, *DemoteVolumeRequest) (*DemoteVolumeResponse, error) + // ResyncVolume RPC call to resync the volume. + ResyncVolume(context.Context, *ResyncVolumeRequest) (*ResyncVolumeResponse, error) + mustEmbedUnimplementedControllerServer() +} + +// UnimplementedControllerServer must be embedded to have forward compatible implementations. +type UnimplementedControllerServer struct { +} + +func (UnimplementedControllerServer) EnableVolumeReplication(context.Context, *EnableVolumeReplicationRequest) (*EnableVolumeReplicationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EnableVolumeReplication not implemented") +} +func (UnimplementedControllerServer) DisableVolumeReplication(context.Context, *DisableVolumeReplicationRequest) (*DisableVolumeReplicationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DisableVolumeReplication not implemented") +} +func (UnimplementedControllerServer) PromoteVolume(context.Context, *PromoteVolumeRequest) (*PromoteVolumeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PromoteVolume not implemented") +} +func (UnimplementedControllerServer) DemoteVolume(context.Context, *DemoteVolumeRequest) (*DemoteVolumeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DemoteVolume not implemented") +} +func (UnimplementedControllerServer) ResyncVolume(context.Context, *ResyncVolumeRequest) (*ResyncVolumeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ResyncVolume not implemented") +} +func (UnimplementedControllerServer) mustEmbedUnimplementedControllerServer() {} + +// UnsafeControllerServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ControllerServer will +// result in compilation errors. +type UnsafeControllerServer interface { + mustEmbedUnimplementedControllerServer() +} + +func RegisterControllerServer(s grpc.ServiceRegistrar, srv ControllerServer) { + s.RegisterService(&Controller_ServiceDesc, srv) +} + +func _Controller_EnableVolumeReplication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EnableVolumeReplicationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).EnableVolumeReplication(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/replication.Controller/EnableVolumeReplication", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).EnableVolumeReplication(ctx, req.(*EnableVolumeReplicationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_DisableVolumeReplication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DisableVolumeReplicationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).DisableVolumeReplication(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/replication.Controller/DisableVolumeReplication", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).DisableVolumeReplication(ctx, req.(*DisableVolumeReplicationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_PromoteVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PromoteVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).PromoteVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/replication.Controller/PromoteVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).PromoteVolume(ctx, req.(*PromoteVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_DemoteVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DemoteVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).DemoteVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/replication.Controller/DemoteVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).DemoteVolume(ctx, req.(*DemoteVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_ResyncVolume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResyncVolumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).ResyncVolume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/replication.Controller/ResyncVolume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).ResyncVolume(ctx, req.(*ResyncVolumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Controller_ServiceDesc is the grpc.ServiceDesc for Controller service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Controller_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "replication.Controller", + HandlerType: (*ControllerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "EnableVolumeReplication", + Handler: _Controller_EnableVolumeReplication_Handler, + }, + { + MethodName: "DisableVolumeReplication", + Handler: _Controller_DisableVolumeReplication_Handler, + }, + { + MethodName: "PromoteVolume", + Handler: _Controller_PromoteVolume_Handler, + }, + { + MethodName: "DemoteVolume", + Handler: _Controller_DemoteVolume_Handler, + }, + { + MethodName: "ResyncVolume", + Handler: _Controller_ResyncVolume_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "replication/replication.proto", +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 01d7324f3..8a9f91819 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -177,6 +177,7 @@ github.com/containerd/ttrpc github.com/csi-addons/spec/lib/go/fence github.com/csi-addons/spec/lib/go/identity github.com/csi-addons/spec/lib/go/reclaimspace +github.com/csi-addons/spec/lib/go/replication # github.com/cyphar/filepath-securejoin v0.2.3 ## explicit; go 1.13 github.com/cyphar/filepath-securejoin