From 2348c5058db68b999adc86a8d1ff72c45cb819ff Mon Sep 17 00:00:00 2001 From: Yuji Ito Date: Fri, 28 Nov 2025 09:35:41 +0000 Subject: [PATCH 1/4] Use HaveLen to check length of something Signed-off-by: Yuji Ito --- internal/controller/mantlebackup_controller_test.go | 10 +++++----- test/e2e/multik8s/full_backup_test.go | 4 ++-- test/e2e/multik8s/testutil/util.go | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/controller/mantlebackup_controller_test.go b/internal/controller/mantlebackup_controller_test.go index f9c64b5c..c1c2f7e2 100644 --- a/internal/controller/mantlebackup_controller_test.go +++ b/internal/controller/mantlebackup_controller_test.go @@ -2265,7 +2265,7 @@ var _ = Describe("import", func() { Expect(err).NotTo(HaveOccurred()) Expect(pv.GetLabels()["app.kubernetes.io/name"]).To(Equal(labelAppNameValue)) Expect(pv.GetLabels()["app.kubernetes.io/component"]).To(Equal(labelComponentZeroOutVolume)) - Expect(len(pv.Spec.AccessModes)).To(Equal(1)) + Expect(pv.Spec.AccessModes).To(HaveLen(1)) Expect(pv.Spec.AccessModes[0]).To(Equal(corev1.ReadWriteOnce)) Expect(pv.Spec.Capacity).To(Equal(pvCapacity)) Expect(pv.Spec.CSI.Driver).To(Equal(pvDriver)) @@ -2287,7 +2287,7 @@ var _ = Describe("import", func() { Expect(pvc.GetLabels()["app.kubernetes.io/name"]).To(Equal(labelAppNameValue)) Expect(pvc.GetLabels()["app.kubernetes.io/component"]).To(Equal(labelComponentZeroOutVolume)) Expect(*pvc.Spec.StorageClassName).To(Equal("")) - Expect(len(pvc.Spec.AccessModes)).To(Equal(1)) + Expect(pvc.Spec.AccessModes).To(HaveLen(1)) Expect(pvc.Spec.AccessModes[0]).To(Equal(corev1.ReadWriteOnce)) Expect(pvc.Spec.Resources).To(Equal(pvcResources)) Expect(*pvc.Spec.VolumeMode).To(Equal(corev1.PersistentVolumeBlock)) @@ -2299,17 +2299,17 @@ var _ = Describe("import", func() { Expect(job.GetLabels()["app.kubernetes.io/name"]).To(Equal(labelAppNameValue)) Expect(job.GetLabels()["app.kubernetes.io/component"]).To(Equal(labelComponentZeroOutJob)) Expect(*job.Spec.BackoffLimit).To(Equal(int32(65535))) - Expect(len(job.Spec.Template.Spec.Containers)).To(Equal(1)) + Expect(job.Spec.Template.Spec.Containers).To(HaveLen(1)) Expect(job.Spec.Template.Spec.Containers[0].Name).To(Equal("zeroout")) Expect(*job.Spec.Template.Spec.Containers[0].SecurityContext.Privileged).To(BeTrue()) Expect(*job.Spec.Template.Spec.Containers[0].SecurityContext.RunAsGroup).To(Equal(int64(0))) Expect(*job.Spec.Template.Spec.Containers[0].SecurityContext.RunAsUser).To(Equal(int64(0))) Expect(job.Spec.Template.Spec.Containers[0].Image).To(Equal(mbr.podImage)) - Expect(len(job.Spec.Template.Spec.Containers[0].VolumeDevices)).To(Equal(1)) + Expect(job.Spec.Template.Spec.Containers[0].VolumeDevices).To(HaveLen(1)) Expect(job.Spec.Template.Spec.Containers[0].VolumeDevices[0].Name).To(Equal("zeroout-rbd")) Expect(job.Spec.Template.Spec.Containers[0].VolumeDevices[0].DevicePath).To(Equal("/dev/zeroout-rbd")) Expect(job.Spec.Template.Spec.RestartPolicy).To(Equal(corev1.RestartPolicyOnFailure)) - Expect(len(job.Spec.Template.Spec.Volumes)).To(Equal(1)) + Expect(job.Spec.Template.Spec.Volumes).To(HaveLen(1)) Expect(job.Spec.Template.Spec.Volumes[0]).To(Equal(corev1.Volume{ Name: "zeroout-rbd", VolumeSource: corev1.VolumeSource{ diff --git a/test/e2e/multik8s/full_backup_test.go b/test/e2e/multik8s/full_backup_test.go index 32040170..0e29ee61 100644 --- a/test/e2e/multik8s/full_backup_test.go +++ b/test/e2e/multik8s/full_backup_test.go @@ -132,11 +132,11 @@ var _ = Describe("full backup", Label("full-backup"), func() { // Make sure snapshots are correctly created. primarySnaps, err := ListRBDSnapshotsInPVC(PrimaryK8sCluster, namespace, pvcName) Expect(err).NotTo(HaveOccurred()) - Expect(len(primarySnaps)).To(Equal(1)) + Expect(primarySnaps).To(HaveLen(1)) Expect(primarySnaps[0].Name).To(Equal(backupName)) secondarySnaps, err := ListRBDSnapshotsInPVC(SecondaryK8sCluster, namespace, pvcName) Expect(err).NotTo(HaveOccurred()) - Expect(len(secondarySnaps)).To(Equal(1)) // middle snapshots should be deleted. + Expect(secondarySnaps).To(HaveLen(1)) // Middle snapshots should be deleted. Expect(secondarySnaps[0].Name).To(Equal(backupName)) By("ensuring the PVC can be attached to the pod in the primary cluster") diff --git a/test/e2e/multik8s/testutil/util.go b/test/e2e/multik8s/testutil/util.go index bcf8f631..b30b5878 100644 --- a/test/e2e/multik8s/testutil/util.go +++ b/test/e2e/multik8s/testutil/util.go @@ -487,7 +487,7 @@ func WriteRandomDataToPV(ctx SpecContext, cluster int, namespace, pvcName string }).Should(Succeed()) stdout, _, err := Kubectl(cluster, nil, "logs", "-n", namespace, "job/"+writeJobName) Expect(err).NotTo(HaveOccurred()) - Expect(len(stdout)).NotTo(Equal(0)) + Expect(stdout).NotTo(HaveLen(0)) return string(stdout) } From 8d370a6f0ae1e373b179179b7f0d245531b27b0e Mon Sep 17 00:00:00 2001 From: Yuji Ito Date: Wed, 3 Dec 2025 02:34:21 +0000 Subject: [PATCH 2/4] add some debug logs Signed-off-by: Yuji Ito --- test/e2e/Makefile | 22 ++++++++++++++++++++-- test/e2e/multik8s/testutil/util.go | 5 +++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/test/e2e/Makefile b/test/e2e/Makefile index 3dbf8ba5..b06f5fe0 100644 --- a/test/e2e/Makefile +++ b/test/e2e/Makefile @@ -329,10 +329,28 @@ do-test-multik8s: $(GINKGO) $(GINKGO) --fail-fast -v $(GINKGO_FLAGS) multik8s; \ if [ "$$?" -ne 0 ]; then \ echo "Controller logs for $(MINIKUBE_PROFILE_PRIMARY):"; \ - $${KUBECTL_PRIMARY} logs --tail 100 -n $(CEPH_CLUSTER1_NAMESPACE) -l app.kubernetes.io/name=mantle -c mantle; \ + $${KUBECTL_PRIMARY} logs --tail 1000 -n $(CEPH_CLUSTER1_NAMESPACE) -l app.kubernetes.io/name=mantle -c mantle; \ echo ""; \ echo "Controller logs for $(MINIKUBE_PROFILE_SECONDARY):"; \ - $${KUBECTL_SECONDARY} logs --tail 100 -n $(CEPH_CLUSTER1_NAMESPACE) -l app.kubernetes.io/name=mantle -c mantle; \ + $${KUBECTL_SECONDARY} logs --tail 1000 -n $(CEPH_CLUSTER1_NAMESPACE) -l app.kubernetes.io/name=mantle -c mantle; \ + echo ""; \ + echo "Primary MBs"; \ + $${KUBECTL_PRIMARY} get mantlebackups -A -o yaml; \ + echo ""; \ + echo "Secondary MBs"; \ + $${KUBECTL_SECONDARY} get mantlebackups -A -o yaml; \ + echo ""; \ + echo "Primary PVCs"; \ + $${KUBECTL_PRIMARY} get pvc -A -o yaml; \ + echo ""; \ + echo "Secondary PVCs"; \ + $${KUBECTL_SECONDARY} get pvc -A -o yaml; \ + echo ""; \ + echo "Primary PVs"; \ + $${KUBECTL_PRIMARY} get pv -o yaml; \ + echo ""; \ + echo "Secondary PVs"; \ + $${KUBECTL_SECONDARY} get pv -o yaml; \ # Explicitly fail the test to mark the CI job as failed. \ exit 1; \ fi diff --git a/test/e2e/multik8s/testutil/util.go b/test/e2e/multik8s/testutil/util.go index b30b5878..4f4a48a9 100644 --- a/test/e2e/multik8s/testutil/util.go +++ b/test/e2e/multik8s/testutil/util.go @@ -468,6 +468,7 @@ func CreatePod(cluster int, namespace, podName, pvcName string) { } func CreatePVC(ctx SpecContext, cluster int, namespace, name string) { + GinkgoHelper() Eventually(ctx, func() error { return applyPVCTemplate(cluster, namespace, name) }).Should(Succeed()) @@ -493,7 +494,7 @@ func WriteRandomDataToPV(ctx SpecContext, cluster int, namespace, pvcName string func CreateMantleBackup(cluster int, namespace, pvcName, backupName string) { GinkgoHelper() - By("creating a MantleBackup object") + By(fmt.Sprintf("creating a MantleBackup object @%d:%s/%s", cluster, namespace, backupName)) Eventually(func() error { return ApplyMantleBackupTemplate(cluster, namespace, pvcName, backupName) }).Should(Succeed()) @@ -501,7 +502,7 @@ func CreateMantleBackup(cluster int, namespace, pvcName, backupName string) { func CreateMantleBackupConfig(cluster int, namespace, pvcName, backupConfigName string) { GinkgoHelper() - By("creating a MantleBackupConfig object") + By(fmt.Sprintf("creating a MantleBackupConfig object @%d:%s/%s for %s", cluster, namespace, backupConfigName, pvcName)) Eventually(func() error { return ApplyMantleBackupConfigTemplate(cluster, namespace, pvcName, backupConfigName) }).Should(Succeed()) From 9114318581921bdd7ae27bb2553aeba9f772a443 Mon Sep 17 00:00:00 2001 From: Yuji Ito Date: Wed, 3 Dec 2025 02:40:55 +0000 Subject: [PATCH 3/4] update requeue parameter `ctrl.Result{Requeue: true}` is influenced by backing off. We want to avoid it. Signed-off-by: Yuji Ito --- .../controller/mantlebackup_controller_test.go | 14 +++++++------- internal/controller/suite_test.go | 3 +++ internal/controller/util.go | 14 +++++++------- internal/webhook/v1/suite_test.go | 3 +++ .../testdata/values-mantle-primary-template.yaml | 2 +- .../testdata/values-mantle-secondary-template.yaml | 4 ++-- 6 files changed, 23 insertions(+), 17 deletions(-) diff --git a/internal/controller/mantlebackup_controller_test.go b/internal/controller/mantlebackup_controller_test.go index c1c2f7e2..0ca888fb 100644 --- a/internal/controller/mantlebackup_controller_test.go +++ b/internal/controller/mantlebackup_controller_test.go @@ -1380,7 +1380,7 @@ var _ = Describe("export and upload", func() { diffFrom: diffFrom, }) Expect(err).NotTo(HaveOccurred()) - Expect(ret.Requeue).To(BeTrue()) + Expect(ret.RequeueAfter).NotTo(BeZero()) return target } @@ -1394,7 +1394,7 @@ var _ = Describe("export and upload", func() { diffFrom: nil, }) Expect(err).NotTo(HaveOccurred()) - Expect(ret.Requeue).To(BeTrue()) + Expect(ret.RequeueAfter).NotTo(BeZero()) } completeJob := func(ctx SpecContext, jobName string) { @@ -1739,7 +1739,7 @@ var _ = Describe("import", func() { // The first call to reconcileImportJob should create an import Job res, err := mbr.reconcileImportJob(ctx, backup, snapshotTarget, -1) Expect(err).NotTo(HaveOccurred()) - Expect(res.Requeue).To(BeTrue()) + Expect(res.RequeueAfter).NotTo(BeZero()) var importJob batchv1.Job err = k8sClient.Get(ctx, types.NamespacedName{ @@ -1751,7 +1751,7 @@ var _ = Describe("import", func() { // The successive calls should return ctrl.Result{Requeue: true} until the import Job is completed. res, err = mbr.reconcileImportJob(ctx, backup, snapshotTarget, -1) Expect(err).NotTo(HaveOccurred()) - Expect(res.Requeue).To(BeTrue()) + Expect(res.RequeueAfter).NotTo(BeZero()) // Make the import Job completed. completeJob(ctx, importJob.GetNamespace(), importJob.GetName()) @@ -2177,7 +2177,7 @@ var _ = Describe("import", func() { result, err := mbr.reconcileZeroOutJob(ctx, backup, &snapshotTarget{}) Expect(err).NotTo(HaveOccurred()) - Expect(result.Requeue).To(BeFalse()) + Expect(result.RequeueAfter).To(BeZero()) var pv corev1.PersistentVolume err = k8sClient.Get(ctx, types.NamespacedName{Name: MakeZeroOutPVName(backup)}, &pv) @@ -2258,7 +2258,7 @@ var _ = Describe("import", func() { // The first call to reconcileZeroOutJob should create a PV, PVC, and Job, and requeue. result, err := mbr.reconcileZeroOutJob(ctx, backup, snapshotTarget) Expect(err).NotTo(HaveOccurred()) - Expect(result.Requeue).To(BeTrue()) + Expect(result.RequeueAfter).NotTo(BeZero()) var pv corev1.PersistentVolume err = k8sClient.Get(ctx, types.NamespacedName{Name: MakeZeroOutPVName(backup), Namespace: nsController}, &pv) @@ -2325,7 +2325,7 @@ var _ = Describe("import", func() { // A call to reconcileZeroOutJob should NOT requeue after the Job completed result, err = mbr.reconcileZeroOutJob(ctx, backup, snapshotTarget) Expect(err).NotTo(HaveOccurred()) - Expect(result.Requeue).To(BeFalse()) + Expect(result.RequeueAfter).To(BeZero()) }) }) diff --git a/internal/controller/suite_test.go b/internal/controller/suite_test.go index 4fcf78ac..70dd61ec 100644 --- a/internal/controller/suite_test.go +++ b/internal/controller/suite_test.go @@ -71,6 +71,9 @@ var _ = BeforeSuite(func(ctx SpecContext) { Expect(err).NotTo(HaveOccurred()) Expect(k8sClient).NotTo(BeNil()) + err = os.Setenv("REQUEUE_RECONCILIATION_AFTER", "10s") + Expect(err).NotTo(HaveOccurred()) + By("Setup common resources") resMgr, err = testutil.NewResourceManager(k8sClient) Expect(err).NotTo(HaveOccurred()) diff --git a/internal/controller/util.go b/internal/controller/util.go index a3420902..fd2f5c05 100644 --- a/internal/controller/util.go +++ b/internal/controller/util.go @@ -151,12 +151,12 @@ func IsJobConditionTrue(conditions []batchv1.JobCondition, conditionType batchv1 func requeueReconciliation() ctrl.Result { requeueAfter := os.Getenv("REQUEUE_RECONCILIATION_AFTER") - if requeueAfter != "" { - duration, err := time.ParseDuration(requeueAfter) - if err != nil { - panic(fmt.Sprintf("set REQUEUE_RECONCILIATION_AFTER properly: %v", err)) - } - return ctrl.Result{RequeueAfter: duration} + if len(requeueAfter) == 0 { + panic("You should set REQUEUE_RECONCILIATION_AFTER env var.") + } + duration, err := time.ParseDuration(requeueAfter) + if err != nil { + panic(fmt.Sprintf("Set REQUEUE_RECONCILIATION_AFTER properly: %v", err)) } - return ctrl.Result{Requeue: true} + return ctrl.Result{RequeueAfter: duration} } diff --git a/internal/webhook/v1/suite_test.go b/internal/webhook/v1/suite_test.go index 7b0c2402..60b7df55 100644 --- a/internal/webhook/v1/suite_test.go +++ b/internal/webhook/v1/suite_test.go @@ -73,6 +73,9 @@ var _ = BeforeSuite(func(ctx SpecContext) { Expect(err).NotTo(HaveOccurred()) Expect(k8sClient).NotTo(BeNil()) + err = os.Setenv("REQUEUE_RECONCILIATION_AFTER", "10s") + Expect(err).NotTo(HaveOccurred()) + By("Setup common resources") resMgr, err = testutil.NewResourceManager(k8sClient) Expect(err).NotTo(HaveOccurred()) diff --git a/test/e2e/testdata/values-mantle-primary-template.yaml b/test/e2e/testdata/values-mantle-primary-template.yaml index 1e2fa2eb..9fa999ce 100644 --- a/test/e2e/testdata/values-mantle-primary-template.yaml +++ b/test/e2e/testdata/values-mantle-primary-template.yaml @@ -16,7 +16,7 @@ controller: #noProxy: localhost,127.0.0.1,10.96.0.0/12 env: - name: REQUEUE_RECONCILIATION_AFTER - value: "1s" + value: "10s" backupTransferPartSize: {BACKUP_TRANSFER_PART_SIZE} mtls: serverCACertConfigMap: mantle-secondary-ca-crt diff --git a/test/e2e/testdata/values-mantle-secondary-template.yaml b/test/e2e/testdata/values-mantle-secondary-template.yaml index a50908cb..877c38d8 100644 --- a/test/e2e/testdata/values-mantle-secondary-template.yaml +++ b/test/e2e/testdata/values-mantle-secondary-template.yaml @@ -13,8 +13,8 @@ controller: envSecret: export-data gcInterval: 1s env: - - name: REQUEUE_RECONCILIATION_IMMEDIATELY - value: "1" + - name: REQUEUE_RECONCILIATION_AFTER + value: "10s" mtls: clientCACertConfigMap: mantle-primary-ca-crt serverTLSSecret: cert-mantle-replication From 61821f372de75bc87758a7904cc0a160718038be Mon Sep 17 00:00:00 2001 From: Yuji Ito Date: Wed, 3 Dec 2025 03:20:23 +0000 Subject: [PATCH 4/4] change api CreateOrUpdateMantleBackup to CreateMantleBackup After created MB, there is no need to update it. And We Found a bug caused by overwriting existing annotations Signed-off-by: Yuji Ito --- docs/controller-protocol.md | 18 +-- .../controller/mantlebackup_controller.go | 6 +- .../mantlebackup_controller_test.go | 8 +- internal/controller/replication.go | 104 +++++++++--------- pkg/controller/proto/controller.pb.go | 72 ++++++------ pkg/controller/proto/controller.proto | 10 +- pkg/controller/proto/controller_grpc.pb.go | 36 +++--- .../proto/controller_grpc.pb_mock.go | 28 ++--- 8 files changed, 140 insertions(+), 142 deletions(-) diff --git a/docs/controller-protocol.md b/docs/controller-protocol.md index bbfdcf2a..318f9485 100644 --- a/docs/controller-protocol.md +++ b/docs/controller-protocol.md @@ -4,8 +4,8 @@ ## Table of Contents - [pkg/controller/proto/controller.proto](#pkg_controller_proto_controller-proto) - - [CreateOrUpdateMantleBackupRequest](#proto-CreateOrUpdateMantleBackupRequest) - - [CreateOrUpdateMantleBackupResponse](#proto-CreateOrUpdateMantleBackupResponse) + - [CreateMantleBackupRequest](#proto-CreateMantleBackupRequest) + - [CreateMantleBackupResponse](#proto-CreateMantleBackupResponse) - [CreateOrUpdatePVCRequest](#proto-CreateOrUpdatePVCRequest) - [CreateOrUpdatePVCResponse](#proto-CreateOrUpdatePVCResponse) - [ListMantleBackupRequest](#proto-ListMantleBackupRequest) @@ -26,10 +26,10 @@ - + -### CreateOrUpdateMantleBackupRequest -CreateOrUpdateMantleBackupRequest is a request message for CreateOrUpdateMantleBackup RPC. +### CreateMantleBackupRequest +CreateMantleBackupRequest is a request message for CreateMantleBackup RPC. | Field | Type | Label | Description | @@ -41,10 +41,10 @@ CreateOrUpdateMantleBackupRequest is a request message for CreateOrUpdateMantleB - + -### CreateOrUpdateMantleBackupResponse -CreateOrUpdateMantleBackupResponse is a response message for CreateOrUpdateMantleBackup RPC. +### CreateMantleBackupResponse +CreateMantleBackupResponse is a response message for CreateMantleBackup RPC. nothing. @@ -155,7 +155,7 @@ SetSynchronizingResponse is a response message for SetSynchronize RPC. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| | CreateOrUpdatePVC | [CreateOrUpdatePVCRequest](#proto-CreateOrUpdatePVCRequest) | [CreateOrUpdatePVCResponse](#proto-CreateOrUpdatePVCResponse) | | -| CreateOrUpdateMantleBackup | [CreateOrUpdateMantleBackupRequest](#proto-CreateOrUpdateMantleBackupRequest) | [CreateOrUpdateMantleBackupResponse](#proto-CreateOrUpdateMantleBackupResponse) | | +| CreateMantleBackup | [CreateMantleBackupRequest](#proto-CreateMantleBackupRequest) | [CreateMantleBackupResponse](#proto-CreateMantleBackupResponse) | | | ListMantleBackup | [ListMantleBackupRequest](#proto-ListMantleBackupRequest) | [ListMantleBackupResponse](#proto-ListMantleBackupResponse) | | | SetSynchronizing | [SetSynchronizingRequest](#proto-SetSynchronizingRequest) | [SetSynchronizingResponse](#proto-SetSynchronizingResponse) | | diff --git a/internal/controller/mantlebackup_controller.go b/internal/controller/mantlebackup_controller.go index 35deaf08..8d15dd2a 100644 --- a/internal/controller/mantlebackup_controller.go +++ b/internal/controller/mantlebackup_controller.go @@ -617,10 +617,10 @@ func (r *MantleBackupReconciler) replicateManifests( return ctrl.Result{}, err } - // Call CreateOrUpdateMantleBackup. - if _, err := client.CreateOrUpdateMantleBackup( + // Call CreateMantleBackup. + if _, err := client.CreateMantleBackup( ctx, - &proto.CreateOrUpdateMantleBackupRequest{ + &proto.CreateMantleBackupRequest{ MantleBackup: backupSentJson, }, ); err != nil { diff --git a/internal/controller/mantlebackup_controller_test.go b/internal/controller/mantlebackup_controller_test.go index 0ca888fb..40000431 100644 --- a/internal/controller/mantlebackup_controller_test.go +++ b/internal/controller/mantlebackup_controller_test.go @@ -494,21 +494,21 @@ var _ = Describe("MantleBackup controller", func() { Uid: "a7c9d5e2-4b8f-4e2a-9d3f-1b6a7c8e9f2b", }, nil) secondaryBackups := []*mantlev1.MantleBackup{} - grpcClient.EXPECT().CreateOrUpdateMantleBackup(gomock.Any(), gomock.Any()). + grpcClient.EXPECT().CreateMantleBackup(gomock.Any(), gomock.Any()). MinTimes(1). DoAndReturn( func( ctx context.Context, - req *proto.CreateOrUpdateMantleBackupRequest, + req *proto.CreateMantleBackupRequest, opts ...grpc.CallOption, - ) (*proto.CreateOrUpdateMantleBackupResponse, error) { + ) (*proto.CreateMantleBackupResponse, error) { var secondaryBackup mantlev1.MantleBackup err := json.Unmarshal(req.GetMantleBackup(), &secondaryBackup) if err != nil { panic(err) } secondaryBackups = append(secondaryBackups, &secondaryBackup) - return &proto.CreateOrUpdateMantleBackupResponse{}, nil + return &proto.CreateMantleBackupResponse{}, nil }) grpcClient.EXPECT().ListMantleBackup(gomock.Any(), gomock.Any()). MinTimes(1). diff --git a/internal/controller/replication.go b/internal/controller/replication.go index d760b075..06dc7d8e 100644 --- a/internal/controller/replication.go +++ b/internal/controller/replication.go @@ -10,6 +10,7 @@ import ( "github.com/cybozu-go/mantle/pkg/controller/proto" "google.golang.org/grpc" corev1 "k8s.io/api/core/v1" + aerrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" @@ -109,10 +110,10 @@ func (s *SecondaryServer) CreateOrUpdatePVC( return &proto.CreateOrUpdatePVCResponse{Uid: string(pvc.GetUID())}, nil } -func (s *SecondaryServer) CreateOrUpdateMantleBackup( +func (s *SecondaryServer) CreateMantleBackup( ctx context.Context, - req *proto.CreateOrUpdateMantleBackupRequest, -) (*proto.CreateOrUpdateMantleBackupResponse, error) { + req *proto.CreateMantleBackupRequest, +) (*proto.CreateMantleBackupResponse, error) { var backupReceived mantlev1.MantleBackup if err := json.Unmarshal(req.MantleBackup, &backupReceived); err != nil { return nil, err @@ -139,62 +140,59 @@ func (s *SecondaryServer) CreateOrUpdateMantleBackup( annotRemoteUID, backupReceived.GetName(), backupReceived.GetNamespace()) } - var backup mantlev1.MantleBackup - backup.SetName(backupReceived.GetName()) - backup.SetNamespace(backupReceived.GetNamespace()) - if _, err := ctrl.CreateOrUpdate(ctx, s.client, &backup, func() error { - if !backup.CreationTimestamp.IsZero() { - errMsg := "" - if backup.Labels == nil { - errMsg = "labels field is nil in backup" - } else { - pvcUID, ok := backup.Labels[labelLocalBackupTargetPVCUID] - if !ok { - errMsg = "label not found" - } else if pvcUID != pvcUIDReceived { - errMsg = "label not matched" - } - } - if errMsg != "" { - return fmt.Errorf("%s: %s: %s: %s", - errMsg, labelLocalBackupTargetPVCUID, backupReceived.GetName(), backupReceived.GetNamespace()) - } - - if backup.Annotations == nil { - errMsg = "annotation field is nil in backup" - } else { - remoteUID, ok := backup.Annotations[annotRemoteUID] - if !ok { - errMsg = "annotation not found in backup" - } else if remoteUID != remoteUIDReceived { - errMsg = "annotation not matched" - } - } - if errMsg != "" { - return fmt.Errorf("%s: %s: %s: %s", - errMsg, annotRemoteUID, backupReceived.GetName(), backupReceived.GetNamespace()) - } + var backupExists mantlev1.MantleBackup + if err := s.client.Get(ctx, types.NamespacedName{ + Namespace: backupReceived.GetNamespace(), + Name: backupReceived.GetName(), + }, &backupExists); err != nil { + if !aerrors.IsNotFound(err) { + return nil, fmt.Errorf("failed to get MantleBackup: %w", err) + } + // Not found, create a new one. + if err := s.client.Create(ctx, &backupReceived); err != nil { + return nil, fmt.Errorf("failed to create MantleBackup: %w", err) } + if err := s.client.Status().Update(ctx, &backupReceived); err != nil { + return nil, fmt.Errorf("failed to update status of MantleBackup: %w", err) + } + return &proto.CreateMantleBackupResponse{}, nil + } - backup.Finalizers = backupReceived.Finalizers - backup.Annotations = backupReceived.Annotations - backup.Labels = backupReceived.Labels - backup.Spec = backupReceived.Spec - return nil - }); err != nil { - return nil, fmt.Errorf("CreateOrUpdate failed: %w", err) + // Found, check it. + if backupExists.Labels == nil || backupExists.Annotations == nil { + return nil, fmt.Errorf("both labels and annotations must not be nil in the existing MantleBackup: %s/%s", + backupReceived.GetNamespace(), backupReceived.GetName()) + } + + if pvcUID, ok := backupExists.Labels[labelLocalBackupTargetPVCUID]; !ok { + return nil, fmt.Errorf("label %s not found in the existing MantleBackup: %s/%s", + labelLocalBackupTargetPVCUID, backupReceived.GetNamespace(), backupReceived.GetName()) + } else if pvcUID != pvcUIDReceived { + return nil, fmt.Errorf("label %s not matched in the existing MantleBackup: %s/%s", + labelLocalBackupTargetPVCUID, backupReceived.GetNamespace(), backupReceived.GetName()) } - // Use Patch here because updateStatus is likely to fail due to "the object has been modified" error. - newBackup := backup.DeepCopy() - newBackup.Status.CreatedAt = backupReceived.Status.CreatedAt - newBackup.Status.SnapSize = backupReceived.Status.SnapSize - newBackup.Status.TransferPartSize = backupReceived.Status.TransferPartSize - if err := s.client.Status().Patch(ctx, newBackup, client.MergeFrom(&backup)); err != nil { - return nil, fmt.Errorf("status patch failed: %w", err) + if remoteUID, ok := backupExists.Annotations[annotRemoteUID]; !ok { + return nil, fmt.Errorf("annotation %s not found in the existing MantleBackup: %s/%s", + annotRemoteUID, backupReceived.GetNamespace(), backupReceived.GetName()) + } else if remoteUID != remoteUIDReceived { + return nil, fmt.Errorf("annotation %s not matched in the existing MantleBackup: %s/%s", + annotRemoteUID, backupReceived.GetNamespace(), backupReceived.GetName()) + } + + // Update status if not set. + if backupExists.Status.CreatedAt.IsZero() { + newBackup := backupExists.DeepCopy() + newBackup.Status.CreatedAt = backupReceived.Status.CreatedAt + newBackup.Status.SnapSize = backupReceived.Status.SnapSize + newBackup.Status.TransferPartSize = backupReceived.Status.TransferPartSize + if err := s.client.Status().Patch(ctx, newBackup, client.MergeFrom(&backupExists)); err != nil { + return nil, fmt.Errorf("status patch failed: %w", err) + } } - return &proto.CreateOrUpdateMantleBackupResponse{}, nil + // Already exists with matching pvc-uid and remote-uid, do nothing. + return &proto.CreateMantleBackupResponse{}, nil } func (s *SecondaryServer) ListMantleBackup( diff --git a/pkg/controller/proto/controller.pb.go b/pkg/controller/proto/controller.pb.go index d150ea15..de50d480 100644 --- a/pkg/controller/proto/controller.pb.go +++ b/pkg/controller/proto/controller.pb.go @@ -111,28 +111,28 @@ func (x *CreateOrUpdatePVCResponse) GetUid() string { return "" } -// CreateOrUpdateMantleBackupRequest is a request message for CreateOrUpdateMantleBackup RPC. -type CreateOrUpdateMantleBackupRequest struct { +// CreateMantleBackupRequest is a request message for CreateMantleBackup RPC. +type CreateMantleBackupRequest struct { state protoimpl.MessageState `protogen:"open.v1"` MantleBackup []byte `protobuf:"bytes,1,opt,name=mantleBackup,proto3" json:"mantleBackup,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *CreateOrUpdateMantleBackupRequest) Reset() { - *x = CreateOrUpdateMantleBackupRequest{} +func (x *CreateMantleBackupRequest) Reset() { + *x = CreateMantleBackupRequest{} mi := &file_pkg_controller_proto_controller_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *CreateOrUpdateMantleBackupRequest) String() string { +func (x *CreateMantleBackupRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateOrUpdateMantleBackupRequest) ProtoMessage() {} +func (*CreateMantleBackupRequest) ProtoMessage() {} -func (x *CreateOrUpdateMantleBackupRequest) ProtoReflect() protoreflect.Message { +func (x *CreateMantleBackupRequest) ProtoReflect() protoreflect.Message { mi := &file_pkg_controller_proto_controller_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -144,39 +144,39 @@ func (x *CreateOrUpdateMantleBackupRequest) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use CreateOrUpdateMantleBackupRequest.ProtoReflect.Descriptor instead. -func (*CreateOrUpdateMantleBackupRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateMantleBackupRequest.ProtoReflect.Descriptor instead. +func (*CreateMantleBackupRequest) Descriptor() ([]byte, []int) { return file_pkg_controller_proto_controller_proto_rawDescGZIP(), []int{2} } -func (x *CreateOrUpdateMantleBackupRequest) GetMantleBackup() []byte { +func (x *CreateMantleBackupRequest) GetMantleBackup() []byte { if x != nil { return x.MantleBackup } return nil } -// CreateOrUpdateMantleBackupResponse is a response message for CreateOrUpdateMantleBackup RPC. -type CreateOrUpdateMantleBackupResponse struct { +// CreateMantleBackupResponse is a response message for CreateMantleBackup RPC. +type CreateMantleBackupResponse struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *CreateOrUpdateMantleBackupResponse) Reset() { - *x = CreateOrUpdateMantleBackupResponse{} +func (x *CreateMantleBackupResponse) Reset() { + *x = CreateMantleBackupResponse{} mi := &file_pkg_controller_proto_controller_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *CreateOrUpdateMantleBackupResponse) String() string { +func (x *CreateMantleBackupResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateOrUpdateMantleBackupResponse) ProtoMessage() {} +func (*CreateMantleBackupResponse) ProtoMessage() {} -func (x *CreateOrUpdateMantleBackupResponse) ProtoReflect() protoreflect.Message { +func (x *CreateMantleBackupResponse) ProtoReflect() protoreflect.Message { mi := &file_pkg_controller_proto_controller_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -188,8 +188,8 @@ func (x *CreateOrUpdateMantleBackupResponse) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use CreateOrUpdateMantleBackupResponse.ProtoReflect.Descriptor instead. -func (*CreateOrUpdateMantleBackupResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateMantleBackupResponse.ProtoReflect.Descriptor instead. +func (*CreateMantleBackupResponse) Descriptor() ([]byte, []int) { return file_pkg_controller_proto_controller_proto_rawDescGZIP(), []int{3} } @@ -397,10 +397,10 @@ const file_pkg_controller_proto_controller_proto_rawDesc = "" + "\x18CreateOrUpdatePVCRequest\x12\x10\n" + "\x03pvc\x18\x01 \x01(\fR\x03pvc\"-\n" + "\x19CreateOrUpdatePVCResponse\x12\x10\n" + - "\x03uid\x18\x01 \x01(\tR\x03uid\"G\n" + - "!CreateOrUpdateMantleBackupRequest\x12\"\n" + - "\fmantleBackup\x18\x01 \x01(\fR\fmantleBackup\"$\n" + - "\"CreateOrUpdateMantleBackupResponse\"O\n" + + "\x03uid\x18\x01 \x01(\tR\x03uid\"?\n" + + "\x19CreateMantleBackupRequest\x12\"\n" + + "\fmantleBackup\x18\x01 \x01(\fR\fmantleBackup\"\x1c\n" + + "\x1aCreateMantleBackupResponse\"O\n" + "\x17ListMantleBackupRequest\x12\x16\n" + "\x06pvcUID\x18\x01 \x01(\tR\x06pvcUID\x12\x1c\n" + "\tnamespace\x18\x02 \x01(\tR\tnamespace\"F\n" + @@ -411,10 +411,10 @@ const file_pkg_controller_proto_controller_proto_rawDesc = "" + "\tnamespace\x18\x02 \x01(\tR\tnamespace\x12\x1f\n" + "\bdiffFrom\x18\x03 \x01(\tH\x00R\bdiffFrom\x88\x01\x01B\v\n" + "\t_diffFrom\"\x1a\n" + - "\x18SetSynchronizingResponse2\x84\x03\n" + + "\x18SetSynchronizingResponse2\xec\x02\n" + "\rMantleService\x12V\n" + - "\x11CreateOrUpdatePVC\x12\x1f.proto.CreateOrUpdatePVCRequest\x1a .proto.CreateOrUpdatePVCResponse\x12q\n" + - "\x1aCreateOrUpdateMantleBackup\x12(.proto.CreateOrUpdateMantleBackupRequest\x1a).proto.CreateOrUpdateMantleBackupResponse\x12S\n" + + "\x11CreateOrUpdatePVC\x12\x1f.proto.CreateOrUpdatePVCRequest\x1a .proto.CreateOrUpdatePVCResponse\x12Y\n" + + "\x12CreateMantleBackup\x12 .proto.CreateMantleBackupRequest\x1a!.proto.CreateMantleBackupResponse\x12S\n" + "\x10ListMantleBackup\x12\x1e.proto.ListMantleBackupRequest\x1a\x1f.proto.ListMantleBackupResponse\x12S\n" + "\x10SetSynchronizing\x12\x1e.proto.SetSynchronizingRequest\x1a\x1f.proto.SetSynchronizingResponseB2Z0github.com/cybozu-go/mantle/pkg/controller/protob\x06proto3" @@ -432,22 +432,22 @@ func file_pkg_controller_proto_controller_proto_rawDescGZIP() []byte { var file_pkg_controller_proto_controller_proto_msgTypes = make([]protoimpl.MessageInfo, 8) var file_pkg_controller_proto_controller_proto_goTypes = []any{ - (*CreateOrUpdatePVCRequest)(nil), // 0: proto.CreateOrUpdatePVCRequest - (*CreateOrUpdatePVCResponse)(nil), // 1: proto.CreateOrUpdatePVCResponse - (*CreateOrUpdateMantleBackupRequest)(nil), // 2: proto.CreateOrUpdateMantleBackupRequest - (*CreateOrUpdateMantleBackupResponse)(nil), // 3: proto.CreateOrUpdateMantleBackupResponse - (*ListMantleBackupRequest)(nil), // 4: proto.ListMantleBackupRequest - (*ListMantleBackupResponse)(nil), // 5: proto.ListMantleBackupResponse - (*SetSynchronizingRequest)(nil), // 6: proto.SetSynchronizingRequest - (*SetSynchronizingResponse)(nil), // 7: proto.SetSynchronizingResponse + (*CreateOrUpdatePVCRequest)(nil), // 0: proto.CreateOrUpdatePVCRequest + (*CreateOrUpdatePVCResponse)(nil), // 1: proto.CreateOrUpdatePVCResponse + (*CreateMantleBackupRequest)(nil), // 2: proto.CreateMantleBackupRequest + (*CreateMantleBackupResponse)(nil), // 3: proto.CreateMantleBackupResponse + (*ListMantleBackupRequest)(nil), // 4: proto.ListMantleBackupRequest + (*ListMantleBackupResponse)(nil), // 5: proto.ListMantleBackupResponse + (*SetSynchronizingRequest)(nil), // 6: proto.SetSynchronizingRequest + (*SetSynchronizingResponse)(nil), // 7: proto.SetSynchronizingResponse } var file_pkg_controller_proto_controller_proto_depIdxs = []int32{ 0, // 0: proto.MantleService.CreateOrUpdatePVC:input_type -> proto.CreateOrUpdatePVCRequest - 2, // 1: proto.MantleService.CreateOrUpdateMantleBackup:input_type -> proto.CreateOrUpdateMantleBackupRequest + 2, // 1: proto.MantleService.CreateMantleBackup:input_type -> proto.CreateMantleBackupRequest 4, // 2: proto.MantleService.ListMantleBackup:input_type -> proto.ListMantleBackupRequest 6, // 3: proto.MantleService.SetSynchronizing:input_type -> proto.SetSynchronizingRequest 1, // 4: proto.MantleService.CreateOrUpdatePVC:output_type -> proto.CreateOrUpdatePVCResponse - 3, // 5: proto.MantleService.CreateOrUpdateMantleBackup:output_type -> proto.CreateOrUpdateMantleBackupResponse + 3, // 5: proto.MantleService.CreateMantleBackup:output_type -> proto.CreateMantleBackupResponse 5, // 6: proto.MantleService.ListMantleBackup:output_type -> proto.ListMantleBackupResponse 7, // 7: proto.MantleService.SetSynchronizing:output_type -> proto.SetSynchronizingResponse 4, // [4:8] is the sub-list for method output_type diff --git a/pkg/controller/proto/controller.proto b/pkg/controller/proto/controller.proto index 3a61fa00..99fbb652 100644 --- a/pkg/controller/proto/controller.proto +++ b/pkg/controller/proto/controller.proto @@ -14,13 +14,13 @@ message CreateOrUpdatePVCResponse { string uid = 1; } -// CreateOrUpdateMantleBackupRequest is a request message for CreateOrUpdateMantleBackup RPC. -message CreateOrUpdateMantleBackupRequest { +// CreateMantleBackupRequest is a request message for CreateMantleBackup RPC. +message CreateMantleBackupRequest { bytes mantleBackup = 1; } -// CreateOrUpdateMantleBackupResponse is a response message for CreateOrUpdateMantleBackup RPC. -message CreateOrUpdateMantleBackupResponse { +// CreateMantleBackupResponse is a response message for CreateMantleBackup RPC. +message CreateMantleBackupResponse { // nothing. } @@ -48,7 +48,7 @@ message SetSynchronizingResponse { service MantleService { rpc CreateOrUpdatePVC(CreateOrUpdatePVCRequest) returns (CreateOrUpdatePVCResponse); - rpc CreateOrUpdateMantleBackup(CreateOrUpdateMantleBackupRequest) returns (CreateOrUpdateMantleBackupResponse); + rpc CreateMantleBackup(CreateMantleBackupRequest) returns (CreateMantleBackupResponse); rpc ListMantleBackup(ListMantleBackupRequest) returns (ListMantleBackupResponse); rpc SetSynchronizing(SetSynchronizingRequest) returns (SetSynchronizingResponse); } diff --git a/pkg/controller/proto/controller_grpc.pb.go b/pkg/controller/proto/controller_grpc.pb.go index b60d4098..95fc25be 100644 --- a/pkg/controller/proto/controller_grpc.pb.go +++ b/pkg/controller/proto/controller_grpc.pb.go @@ -19,10 +19,10 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - MantleService_CreateOrUpdatePVC_FullMethodName = "/proto.MantleService/CreateOrUpdatePVC" - MantleService_CreateOrUpdateMantleBackup_FullMethodName = "/proto.MantleService/CreateOrUpdateMantleBackup" - MantleService_ListMantleBackup_FullMethodName = "/proto.MantleService/ListMantleBackup" - MantleService_SetSynchronizing_FullMethodName = "/proto.MantleService/SetSynchronizing" + MantleService_CreateOrUpdatePVC_FullMethodName = "/proto.MantleService/CreateOrUpdatePVC" + MantleService_CreateMantleBackup_FullMethodName = "/proto.MantleService/CreateMantleBackup" + MantleService_ListMantleBackup_FullMethodName = "/proto.MantleService/ListMantleBackup" + MantleService_SetSynchronizing_FullMethodName = "/proto.MantleService/SetSynchronizing" ) // MantleServiceClient is the client API for MantleService service. @@ -30,7 +30,7 @@ const ( // 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 MantleServiceClient interface { CreateOrUpdatePVC(ctx context.Context, in *CreateOrUpdatePVCRequest, opts ...grpc.CallOption) (*CreateOrUpdatePVCResponse, error) - CreateOrUpdateMantleBackup(ctx context.Context, in *CreateOrUpdateMantleBackupRequest, opts ...grpc.CallOption) (*CreateOrUpdateMantleBackupResponse, error) + CreateMantleBackup(ctx context.Context, in *CreateMantleBackupRequest, opts ...grpc.CallOption) (*CreateMantleBackupResponse, error) ListMantleBackup(ctx context.Context, in *ListMantleBackupRequest, opts ...grpc.CallOption) (*ListMantleBackupResponse, error) SetSynchronizing(ctx context.Context, in *SetSynchronizingRequest, opts ...grpc.CallOption) (*SetSynchronizingResponse, error) } @@ -53,10 +53,10 @@ func (c *mantleServiceClient) CreateOrUpdatePVC(ctx context.Context, in *CreateO return out, nil } -func (c *mantleServiceClient) CreateOrUpdateMantleBackup(ctx context.Context, in *CreateOrUpdateMantleBackupRequest, opts ...grpc.CallOption) (*CreateOrUpdateMantleBackupResponse, error) { +func (c *mantleServiceClient) CreateMantleBackup(ctx context.Context, in *CreateMantleBackupRequest, opts ...grpc.CallOption) (*CreateMantleBackupResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(CreateOrUpdateMantleBackupResponse) - err := c.cc.Invoke(ctx, MantleService_CreateOrUpdateMantleBackup_FullMethodName, in, out, cOpts...) + out := new(CreateMantleBackupResponse) + err := c.cc.Invoke(ctx, MantleService_CreateMantleBackup_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -88,7 +88,7 @@ func (c *mantleServiceClient) SetSynchronizing(ctx context.Context, in *SetSynch // for forward compatibility. type MantleServiceServer interface { CreateOrUpdatePVC(context.Context, *CreateOrUpdatePVCRequest) (*CreateOrUpdatePVCResponse, error) - CreateOrUpdateMantleBackup(context.Context, *CreateOrUpdateMantleBackupRequest) (*CreateOrUpdateMantleBackupResponse, error) + CreateMantleBackup(context.Context, *CreateMantleBackupRequest) (*CreateMantleBackupResponse, error) ListMantleBackup(context.Context, *ListMantleBackupRequest) (*ListMantleBackupResponse, error) SetSynchronizing(context.Context, *SetSynchronizingRequest) (*SetSynchronizingResponse, error) mustEmbedUnimplementedMantleServiceServer() @@ -104,8 +104,8 @@ type UnimplementedMantleServiceServer struct{} func (UnimplementedMantleServiceServer) CreateOrUpdatePVC(context.Context, *CreateOrUpdatePVCRequest) (*CreateOrUpdatePVCResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateOrUpdatePVC not implemented") } -func (UnimplementedMantleServiceServer) CreateOrUpdateMantleBackup(context.Context, *CreateOrUpdateMantleBackupRequest) (*CreateOrUpdateMantleBackupResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateOrUpdateMantleBackup not implemented") +func (UnimplementedMantleServiceServer) CreateMantleBackup(context.Context, *CreateMantleBackupRequest) (*CreateMantleBackupResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateMantleBackup not implemented") } func (UnimplementedMantleServiceServer) ListMantleBackup(context.Context, *ListMantleBackupRequest) (*ListMantleBackupResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListMantleBackup not implemented") @@ -152,20 +152,20 @@ func _MantleService_CreateOrUpdatePVC_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } -func _MantleService_CreateOrUpdateMantleBackup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateOrUpdateMantleBackupRequest) +func _MantleService_CreateMantleBackup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateMantleBackupRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(MantleServiceServer).CreateOrUpdateMantleBackup(ctx, in) + return srv.(MantleServiceServer).CreateMantleBackup(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: MantleService_CreateOrUpdateMantleBackup_FullMethodName, + FullMethod: MantleService_CreateMantleBackup_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MantleServiceServer).CreateOrUpdateMantleBackup(ctx, req.(*CreateOrUpdateMantleBackupRequest)) + return srv.(MantleServiceServer).CreateMantleBackup(ctx, req.(*CreateMantleBackupRequest)) } return interceptor(ctx, in, info, handler) } @@ -218,8 +218,8 @@ var MantleService_ServiceDesc = grpc.ServiceDesc{ Handler: _MantleService_CreateOrUpdatePVC_Handler, }, { - MethodName: "CreateOrUpdateMantleBackup", - Handler: _MantleService_CreateOrUpdateMantleBackup_Handler, + MethodName: "CreateMantleBackup", + Handler: _MantleService_CreateMantleBackup_Handler, }, { MethodName: "ListMantleBackup", diff --git a/pkg/controller/proto/controller_grpc.pb_mock.go b/pkg/controller/proto/controller_grpc.pb_mock.go index 31e0210b..82627ffe 100644 --- a/pkg/controller/proto/controller_grpc.pb_mock.go +++ b/pkg/controller/proto/controller_grpc.pb_mock.go @@ -41,24 +41,24 @@ func (m *MockMantleServiceClient) EXPECT() *MockMantleServiceClientMockRecorder return m.recorder } -// CreateOrUpdateMantleBackup mocks base method. -func (m *MockMantleServiceClient) CreateOrUpdateMantleBackup(ctx context.Context, in *CreateOrUpdateMantleBackupRequest, opts ...grpc.CallOption) (*CreateOrUpdateMantleBackupResponse, error) { +// CreateMantleBackup mocks base method. +func (m *MockMantleServiceClient) CreateMantleBackup(ctx context.Context, in *CreateMantleBackupRequest, opts ...grpc.CallOption) (*CreateMantleBackupResponse, error) { m.ctrl.T.Helper() varargs := []any{ctx, in} for _, a := range opts { varargs = append(varargs, a) } - ret := m.ctrl.Call(m, "CreateOrUpdateMantleBackup", varargs...) - ret0, _ := ret[0].(*CreateOrUpdateMantleBackupResponse) + ret := m.ctrl.Call(m, "CreateMantleBackup", varargs...) + ret0, _ := ret[0].(*CreateMantleBackupResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreateOrUpdateMantleBackup indicates an expected call of CreateOrUpdateMantleBackup. -func (mr *MockMantleServiceClientMockRecorder) CreateOrUpdateMantleBackup(ctx, in any, opts ...any) *gomock.Call { +// CreateMantleBackup indicates an expected call of CreateMantleBackup. +func (mr *MockMantleServiceClientMockRecorder) CreateMantleBackup(ctx, in any, opts ...any) *gomock.Call { mr.mock.ctrl.T.Helper() varargs := append([]any{ctx, in}, opts...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateMantleBackup", reflect.TypeOf((*MockMantleServiceClient)(nil).CreateOrUpdateMantleBackup), varargs...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateMantleBackup", reflect.TypeOf((*MockMantleServiceClient)(nil).CreateMantleBackup), varargs...) } // CreateOrUpdatePVC mocks base method. @@ -145,19 +145,19 @@ func (m *MockMantleServiceServer) EXPECT() *MockMantleServiceServerMockRecorder return m.recorder } -// CreateOrUpdateMantleBackup mocks base method. -func (m *MockMantleServiceServer) CreateOrUpdateMantleBackup(arg0 context.Context, arg1 *CreateOrUpdateMantleBackupRequest) (*CreateOrUpdateMantleBackupResponse, error) { +// CreateMantleBackup mocks base method. +func (m *MockMantleServiceServer) CreateMantleBackup(arg0 context.Context, arg1 *CreateMantleBackupRequest) (*CreateMantleBackupResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateOrUpdateMantleBackup", arg0, arg1) - ret0, _ := ret[0].(*CreateOrUpdateMantleBackupResponse) + ret := m.ctrl.Call(m, "CreateMantleBackup", arg0, arg1) + ret0, _ := ret[0].(*CreateMantleBackupResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreateOrUpdateMantleBackup indicates an expected call of CreateOrUpdateMantleBackup. -func (mr *MockMantleServiceServerMockRecorder) CreateOrUpdateMantleBackup(arg0, arg1 any) *gomock.Call { +// CreateMantleBackup indicates an expected call of CreateMantleBackup. +func (mr *MockMantleServiceServerMockRecorder) CreateMantleBackup(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateMantleBackup", reflect.TypeOf((*MockMantleServiceServer)(nil).CreateOrUpdateMantleBackup), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateMantleBackup", reflect.TypeOf((*MockMantleServiceServer)(nil).CreateMantleBackup), arg0, arg1) } // CreateOrUpdatePVC mocks base method.