diff --git a/pkg/restore/root.go b/pkg/restore/root.go index 95f8127..fa27b0c 100644 --- a/pkg/restore/root.go +++ b/pkg/restore/root.go @@ -26,7 +26,9 @@ func init() { func RestoreVolume(snapshotId string) error { log := logger.WithName("restore-volume") - session.RestoreSessionUpdateTargetStatus(formolv1alpha1.Running) + if err := session.RestoreSessionUpdateTargetStatus(formolv1alpha1.Running); err != nil { + return err + } state := formolv1alpha1.Success output, err := restic.RestorePaths(snapshotId) if err != nil { diff --git a/pkg/session/root.go b/pkg/session/root.go index d35ae78..7be9e15 100644 --- a/pkg/session/root.go +++ b/pkg/session/root.go @@ -2,6 +2,7 @@ package session import ( "context" + "errors" formolv1alpha1 "github.com/desmo999r/formol/api/v1alpha1" "github.com/go-logr/logr" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -88,8 +89,13 @@ func RestoreSessionUpdateTargetStatus(state formolv1alpha1.SessionState) error { } for i, target := range restoreSession.Status.Targets { if target.Name == targetName { + if target.SessionState == formolv1alpha1.Success { + return errors.New("the restore has already been done. Skipping") + } restoreSession.Status.Targets[i].SessionState = state - restoreSession.Status.Targets[i].Duration = &metav1.Duration{Duration: time.Now().Sub(restoreSession.Status.Targets[i].StartTime.Time)} + if state == formolv1alpha1.Success || state == formolv1alpha1.Failure { + restoreSession.Status.Targets[i].Duration = &metav1.Duration{Duration: time.Now().Sub(restoreSession.Status.Targets[i].StartTime.Time)} + } } }