diff --git a/changelogs/unreleased/6012-sseago b/changelogs/unreleased/6012-sseago new file mode 100644 index 000000000..fb6544aab --- /dev/null +++ b/changelogs/unreleased/6012-sseago @@ -0,0 +1 @@ +distinguish between New and InProgress operations diff --git a/pkg/backup/backup_test.go b/pkg/backup/backup_test.go index d41f9506d..8fa92b4ae 100644 --- a/pkg/backup/backup_test.go +++ b/pkg/backup/backup_test.go @@ -2478,7 +2478,7 @@ func TestBackupWithAsyncOperations(t *testing.T) { OperationID: "pod-1-1", }, Status: itemoperation.OperationStatus{ - Phase: "InProgress", + Phase: "New", }, }, }, @@ -2507,7 +2507,7 @@ func TestBackupWithAsyncOperations(t *testing.T) { OperationID: "pod-2-1", }, Status: itemoperation.OperationStatus{ - Phase: "InProgress", + Phase: "New", }, }, }, diff --git a/pkg/backup/item_backupper.go b/pkg/backup/item_backupper.go index fd22ea02c..528afc905 100644 --- a/pkg/backup/item_backupper.go +++ b/pkg/backup/item_backupper.go @@ -367,7 +367,7 @@ func (ib *itemBackupper) executeActions( OperationID: operationID, }, Status: itemoperation.OperationStatus{ - Phase: itemoperation.OperationPhaseInProgress, + Phase: itemoperation.OperationPhaseNew, Created: &now, }, } diff --git a/pkg/controller/backup_operations_controller.go b/pkg/controller/backup_operations_controller.go index 50beb095c..96ba1c312 100644 --- a/pkg/controller/backup_operations_controller.go +++ b/pkg/controller/backup_operations_controller.go @@ -286,7 +286,8 @@ func getBackupItemOperationProgress( var completedCount, failedCount int for _, operation := range operationsList { - if operation.Status.Phase == itemoperation.OperationPhaseInProgress { + if operation.Status.Phase == itemoperation.OperationPhaseNew || + operation.Status.Phase == itemoperation.OperationPhaseInProgress { bia, err := pluginManager.GetBackupItemActionV2(operation.Spec.BackupItemAction) if err != nil { operation.Status.Phase = itemoperation.OperationPhaseFailed @@ -322,12 +323,14 @@ func getBackupItemOperationProgress( changes = true } started := metav1.NewTime(operationProgress.Started) - if operation.Status.Started == nil || *(operation.Status.Started) != started { + if operation.Status.Started == nil && !operationProgress.Started.IsZero() || + operation.Status.Started != nil && *(operation.Status.Started) != started { operation.Status.Started = &started changes = true } updated := metav1.NewTime(operationProgress.Updated) - if operation.Status.Updated == nil || *(operation.Status.Updated) != updated { + if operation.Status.Updated == nil && !operationProgress.Updated.IsZero() || + operation.Status.Updated != nil && *(operation.Status.Updated) != updated { operation.Status.Updated = &updated changes = true } @@ -356,6 +359,11 @@ func getBackupItemOperationProgress( failedCount++ continue } + if operation.Status.Phase == itemoperation.OperationPhaseNew && + operation.Status.Started != nil { + operation.Status.Phase = itemoperation.OperationPhaseInProgress + changes = true + } // if we reach this point, the operation is still running inProgressOperations = true } else if operation.Status.Phase == itemoperation.OperationPhaseCompleted { diff --git a/pkg/controller/backup_operations_controller_test.go b/pkg/controller/backup_operations_controller_test.go index d7a7d9831..417294a7c 100644 --- a/pkg/controller/backup_operations_controller_test.go +++ b/pkg/controller/backup_operations_controller_test.go @@ -106,7 +106,7 @@ func TestBackupOperationsReconcile(t *testing.T) { OperationID: "operation-11", }, Status: itemoperation.OperationStatus{ - Phase: itemoperation.OperationPhaseInProgress, + Phase: itemoperation.OperationPhaseNew, Created: &metav1Now, }, }, @@ -136,7 +136,7 @@ func TestBackupOperationsReconcile(t *testing.T) { OperationID: "operation-12", }, Status: itemoperation.OperationStatus{ - Phase: itemoperation.OperationPhaseInProgress, + Phase: itemoperation.OperationPhaseNew, Created: &metav1Now, }, }, @@ -167,7 +167,7 @@ func TestBackupOperationsReconcile(t *testing.T) { OperationID: "operation-13", }, Status: itemoperation.OperationStatus{ - Phase: itemoperation.OperationPhaseInProgress, + Phase: itemoperation.OperationPhaseNew, Created: &metav1Now, }, }, @@ -197,7 +197,7 @@ func TestBackupOperationsReconcile(t *testing.T) { OperationID: "operation-14", }, Status: itemoperation.OperationStatus{ - Phase: itemoperation.OperationPhaseInProgress, + Phase: itemoperation.OperationPhaseNew, Created: &metav1Now, }, }, @@ -227,7 +227,7 @@ func TestBackupOperationsReconcile(t *testing.T) { OperationID: "operation-15", }, Status: itemoperation.OperationStatus{ - Phase: itemoperation.OperationPhaseInProgress, + Phase: itemoperation.OperationPhaseNew, Created: &metav1Now, }, }, @@ -258,7 +258,7 @@ func TestBackupOperationsReconcile(t *testing.T) { OperationID: "operation-16", }, Status: itemoperation.OperationStatus{ - Phase: itemoperation.OperationPhaseInProgress, + Phase: itemoperation.OperationPhaseNew, Created: &metav1Now, }, }, diff --git a/pkg/controller/restore_operations_controller.go b/pkg/controller/restore_operations_controller.go index 15e6a25b8..fe51286ac 100644 --- a/pkg/controller/restore_operations_controller.go +++ b/pkg/controller/restore_operations_controller.go @@ -270,7 +270,8 @@ func getRestoreItemOperationProgress( var completedCount, failedCount int for _, operation := range operationsList { - if operation.Status.Phase == itemoperation.OperationPhaseInProgress { + if operation.Status.Phase == itemoperation.OperationPhaseNew || + operation.Status.Phase == itemoperation.OperationPhaseInProgress { ria, err := pluginManager.GetRestoreItemActionV2(operation.Spec.RestoreItemAction) if err != nil { operation.Status.Phase = itemoperation.OperationPhaseFailed @@ -306,12 +307,14 @@ func getRestoreItemOperationProgress( changes = true } started := metav1.NewTime(operationProgress.Started) - if operation.Status.Started == nil || *(operation.Status.Started) != started { + if operation.Status.Started == nil && !operationProgress.Started.IsZero() || + operation.Status.Started != nil && *(operation.Status.Started) != started { operation.Status.Started = &started changes = true } updated := metav1.NewTime(operationProgress.Updated) - if operation.Status.Updated == nil || *(operation.Status.Updated) != updated { + if operation.Status.Updated == nil && !operationProgress.Updated.IsZero() || + operation.Status.Updated != nil && *(operation.Status.Updated) != updated { operation.Status.Updated = &updated changes = true } @@ -340,6 +343,11 @@ func getRestoreItemOperationProgress( failedCount++ continue } + if operation.Status.Phase == itemoperation.OperationPhaseNew && + operation.Status.Started != nil { + operation.Status.Phase = itemoperation.OperationPhaseInProgress + changes = true + } // if we reach this point, the operation is still running inProgressOperations = true } else if operation.Status.Phase == itemoperation.OperationPhaseCompleted { diff --git a/pkg/itemoperation/shared.go b/pkg/itemoperation/shared.go index b9c81ce0b..0fc2db428 100644 --- a/pkg/itemoperation/shared.go +++ b/pkg/itemoperation/shared.go @@ -86,7 +86,11 @@ func (in *OperationStatus) DeepCopyInto(out *OperationStatus) { } const ( - // OperationPhaseNew means the item operation has been created and started + // OperationPhaseNew means the item operation has been created but not started + // by the plugin + OperationPhaseNew OperationPhase = "New" + + // OperationPhaseInProgress means the item operation has been created and started // by the plugin OperationPhaseInProgress OperationPhase = "InProgress" diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index 35e7fea8a..84368348b 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -1221,7 +1221,7 @@ func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupReso OperationID: executeOutput.OperationID, }, Status: itemoperation.OperationStatus{ - Phase: itemoperation.OperationPhaseInProgress, + Phase: itemoperation.OperationPhaseNew, Created: &now, }, } diff --git a/pkg/restore/restore_test.go b/pkg/restore/restore_test.go index 946ba3bfc..2b8957c3f 100644 --- a/pkg/restore/restore_test.go +++ b/pkg/restore/restore_test.go @@ -1707,7 +1707,7 @@ func TestRestoreWithAsyncOperations(t *testing.T) { OperationID: "pod-1-1", }, Status: itemoperation.OperationStatus{ - Phase: "InProgress", + Phase: "New", }, }, }, @@ -1732,7 +1732,7 @@ func TestRestoreWithAsyncOperations(t *testing.T) { OperationID: "pod-2-1", }, Status: itemoperation.OperationStatus{ - Phase: "InProgress", + Phase: "New", }, }, },