From 6b96d2dd94534574cd74cf5d54b481ab887aab3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20S=C4=99k?= Date: Sun, 3 May 2020 19:59:44 +0200 Subject: [PATCH] #273 Prevent make backup with the same number before pod deletion --- .../configuration/backuprestore/backuprestore.go | 4 +++- pkg/controller/jenkins/configuration/base/pod.go | 12 ++++-------- .../jenkins/configuration/user/reconcile.go | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/pkg/controller/jenkins/configuration/backuprestore/backuprestore.go b/pkg/controller/jenkins/configuration/backuprestore/backuprestore.go index 03b75ac5..fc297314 100644 --- a/pkg/controller/jenkins/configuration/backuprestore/backuprestore.go +++ b/pkg/controller/jenkins/configuration/backuprestore/backuprestore.go @@ -158,7 +158,7 @@ func (bar *BackupAndRestore) Restore(jenkinsClient jenkinsclient.Jenkins) error } // Backup performs Jenkins backup operation -func (bar *BackupAndRestore) Backup() error { +func (bar *BackupAndRestore) Backup(setBackupDoneBeforePodDeletion bool) error { jenkins := bar.Configuration.Jenkins if len(jenkins.Spec.Backup.ContainerName) == 0 || jenkins.Spec.Backup.Action.Exec == nil { bar.logger.V(log.VDebug).Info("Skipping restore backup, backup restore not configured") @@ -176,11 +176,13 @@ func (bar *BackupAndRestore) Backup() error { _, _, err := bar.Exec(podName, jenkins.Spec.Backup.ContainerName, command) if err == nil { + bar.logger.V(log.VDebug).Info(fmt.Sprintf("Backup completed '%d', updating status", backupNumber)) if jenkins.Status.RestoredBackup == 0 { jenkins.Status.RestoredBackup = backupNumber } jenkins.Status.LastBackup = backupNumber jenkins.Status.PendingBackup = backupNumber + jenkins.Status.BackupDoneBeforePodDeletion = setBackupDoneBeforePodDeletion return bar.Client.Update(context.TODO(), jenkins) } diff --git a/pkg/controller/jenkins/configuration/base/pod.go b/pkg/controller/jenkins/configuration/base/pod.go index 63803f12..1476d308 100644 --- a/pkg/controller/jenkins/configuration/base/pod.go +++ b/pkg/controller/jenkins/configuration/base/pod.go @@ -190,17 +190,13 @@ func (r *ReconcileJenkinsBaseConfiguration) ensureJenkinsMasterPod(meta metav1.O backupAndRestore := backuprestore.New(r.Configuration, r.logger) if backupAndRestore.IsBackupTriggerEnabled() { backupAndRestore.StopBackupTrigger() + return reconcile.Result{Requeue: true}, nil } - if r.Configuration.Jenkins.Spec.Backup.MakeBackupBeforePodDeletion { - if r.Configuration.Jenkins.Status.LastBackup == r.Configuration.Jenkins.Status.PendingBackup && !r.Configuration.Jenkins.Status.BackupDoneBeforePodDeletion { + if r.Configuration.Jenkins.Spec.Backup.MakeBackupBeforePodDeletion && !r.Configuration.Jenkins.Status.BackupDoneBeforePodDeletion { + if r.Configuration.Jenkins.Status.LastBackup == r.Configuration.Jenkins.Status.PendingBackup { r.Configuration.Jenkins.Status.PendingBackup = r.Configuration.Jenkins.Status.PendingBackup + 1 - r.Configuration.Jenkins.Status.BackupDoneBeforePodDeletion = true - err = r.Client.Update(context.TODO(), r.Configuration.Jenkins) - if err != nil { - return reconcile.Result{}, err - } } - if err = backupAndRestore.Backup(); err != nil { + if err = backupAndRestore.Backup(true); err != nil { return reconcile.Result{}, err } } diff --git a/pkg/controller/jenkins/configuration/user/reconcile.go b/pkg/controller/jenkins/configuration/user/reconcile.go index b7155474..acb8c81e 100644 --- a/pkg/controller/jenkins/configuration/user/reconcile.go +++ b/pkg/controller/jenkins/configuration/user/reconcile.go @@ -55,7 +55,7 @@ func (r *ReconcileUserConfiguration) Reconcile() (reconcile.Result, error) { return reconcile.Result{}, err } - if err := backupAndRestore.Backup(); err != nil { + if err := backupAndRestore.Backup(false); err != nil { return reconcile.Result{}, err } if err := backupAndRestore.EnsureBackupTrigger(); err != nil {