diff --git a/apis/constants.go b/apis/constants.go index d5cbe9f3e..146f46388 100644 --- a/apis/constants.go +++ b/apis/constants.go @@ -198,12 +198,14 @@ const ( ) const ( - LabelApp = "app" - LabelInvokerType = StashKey + "/invoker-type" - LabelInvokerName = StashKey + "/invoker-name" - LabelTargetKind = StashKey + "/target-kind" - LabelTargetNamespace = StashKey + "/target-namespace" - LabelTargetName = StashKey + "/target-name" + LabelApp = "app" + LabelInvokerType = StashKey + "/invoker-type" + LabelInvokerName = StashKey + "/invoker-name" + LabelTargetKind = StashKey + "/target-kind" + LabelTargetNamespace = StashKey + "/target-namespace" + LabelTargetName = StashKey + "/target-name" + LabelTargetAPIGroup = StashKey + "/target-api-group" + LabelTargetAPIVersion = StashKey + "/target-api-version" ) const ( diff --git a/apis/stash/v1beta1/backup_session_types.go b/apis/stash/v1beta1/backup_session_types.go index e3e7d7b96..fafd4dd4e 100644 --- a/apis/stash/v1beta1/backup_session_types.go +++ b/apis/stash/v1beta1/backup_session_types.go @@ -236,6 +236,9 @@ const ( // DeadlineExceeded indicates whether the session deadline was exceeded or not DeadlineExceeded = "DeadlineExceeded" + + // BackupDisrupted indicates whether the backup was disrupted or not + BackupDisrupted = "BackupDisrupted" ) // =========================== Condition Reasons ======================= @@ -276,4 +279,6 @@ const ( FailedToExecutePostBackupHook = "FailedToExecutePostBackupHook" FailedToCompleteWithinDeadline = "FailedToCompleteWithinDeadline" + + FailedToCompleteDueToDisruption = "FailedToCompleteDueToDisruption" ) diff --git a/pkg/conditions/backupsession.go b/pkg/conditions/backupsession.go index 9ea885874..6eba06c7a 100644 --- a/pkg/conditions/backupsession.go +++ b/pkg/conditions/backupsession.go @@ -172,6 +172,25 @@ func SetPostBackupHookExecutionSucceededToTrueWithMsg(session *invoker.BackupSes }) } +func SetBackupDisruptedConditionToTrue(session *invoker.BackupSessionHandler, target v1beta1.TargetRef, err error) error { + return session.UpdateStatus(&v1beta1.BackupSessionStatus{ + Targets: []v1beta1.BackupTargetStatus{ + { + Ref: target, + Conditions: []kmapi.Condition{ + { + Type: v1beta1.BackupDisrupted, + Status: metav1.ConditionTrue, + Reason: v1beta1.FailedToCompleteDueToDisruption, + Message: fmt.Sprintf("Failed to complete backup. Reason: %v.", err.Error()), + LastTransitionTime: metav1.Now(), + }, + }, + }, + }, + }) +} + func SetGlobalPreBackupHookSucceededConditionToFalse(session *invoker.BackupSessionHandler, hookErr error) error { return session.UpdateStatus(&v1beta1.BackupSessionStatus{ Conditions: []kmapi.Condition{ diff --git a/pkg/invoker/backupsession.go b/pkg/invoker/backupsession.go index 18a7275a1..2c9ae9a03 100644 --- a/pkg/invoker/backupsession.go +++ b/pkg/invoker/backupsession.go @@ -210,6 +210,7 @@ func upsertBackupHostStatus(cur, new []v1beta1.HostBackupStats) []v1beta1.HostBa func calculateBackupTargetPhase(status v1beta1.BackupTargetStatus) v1beta1.TargetPhase { if cutil.IsConditionFalse(status.Conditions, v1beta1.BackupExecutorEnsured) || cutil.IsConditionFalse(status.Conditions, v1beta1.PreBackupHookExecutionSucceeded) || + cutil.IsConditionTrue(status.Conditions, v1beta1.BackupDisrupted) || cutil.IsConditionFalse(status.Conditions, v1beta1.PostBackupHookExecutionSucceeded) { return v1beta1.TargetBackupFailed } diff --git a/pkg/invoker/restoresession.go b/pkg/invoker/restoresession.go index ccf378b82..c796e85de 100644 --- a/pkg/invoker/restoresession.go +++ b/pkg/invoker/restoresession.go @@ -377,7 +377,7 @@ func checkRestoreFailureInHostStatus(status []v1beta1.HostRestoreStats) (bool, s func checkFailureInConditions(conditions []kmapi.Condition) (bool, string) { for _, c := range conditions { - if c.Status == metav1.ConditionFalse || c.Type == v1beta1.DeadlineExceeded { + if c.Status == metav1.ConditionFalse || c.Type == v1beta1.DeadlineExceeded || c.Type == v1beta1.BackupDisrupted { return true, c.Message } }