diff --git a/pkg/controller/backup_repository_controller.go b/pkg/controller/backup_repository_controller.go index 70331d686..d41f54779 100644 --- a/pkg/controller/backup_repository_controller.go +++ b/pkg/controller/backup_repository_controller.go @@ -328,27 +328,19 @@ func (r *BackupRepoReconciler) runMaintenanceIfDue(ctx context.Context, req *vel } func updateRepoMaintenanceHistory(repo *velerov1api.BackupRepository, result velerov1api.BackupRepositoryMaintenanceResult, startTime time.Time, completionTime time.Time, message string) { - length := defaultMaintenanceStatusQueueLength - if len(repo.Status.RecentMaintenanceStatus) < defaultMaintenanceStatusQueueLength { - length = len(repo.Status.RecentMaintenanceStatus) + 1 - } - - lru := make([]velerov1api.BackupRepositoryMaintenanceStatus, length) - - if len(repo.Status.RecentMaintenanceStatus) >= defaultMaintenanceStatusQueueLength { - copy(lru[:length-1], repo.Status.RecentMaintenanceStatus[len(repo.Status.RecentMaintenanceStatus)-defaultMaintenanceStatusQueueLength+1:]) - } else { - copy(lru[:length-1], repo.Status.RecentMaintenanceStatus[:]) - } - - lru[length-1] = velerov1api.BackupRepositoryMaintenanceStatus{ + latest := velerov1api.BackupRepositoryMaintenanceStatus{ Result: result, StartTimestamp: &metav1.Time{Time: startTime}, CompleteTimestamp: &metav1.Time{Time: completionTime}, Message: message, } - repo.Status.RecentMaintenanceStatus = lru + startingPos := 0 + if len(repo.Status.RecentMaintenance) >= defaultMaintenanceStatusQueueLength { + startingPos = len(repo.Status.RecentMaintenance) - defaultMaintenanceStatusQueueLength + 1 + } + + repo.Status.RecentMaintenance = append(repo.Status.RecentMaintenance[startingPos:], latest) } func dueForMaintenance(req *velerov1api.BackupRepository, now time.Time) bool { diff --git a/pkg/controller/backup_repository_controller_test.go b/pkg/controller/backup_repository_controller_test.go index 5b6c7c8cb..376b17ce8 100644 --- a/pkg/controller/backup_repository_controller_test.go +++ b/pkg/controller/backup_repository_controller_test.go @@ -503,7 +503,7 @@ func TestUpdateRepoMaintenanceHistory(t *testing.T) { Name: "repo", }, Status: velerov1api.BackupRepositoryStatus{ - RecentMaintenanceStatus: []velerov1api.BackupRepositoryMaintenanceStatus{ + RecentMaintenance: []velerov1api.BackupRepositoryMaintenanceStatus{ { StartTimestamp: &metav1.Time{Time: standardTime.Add(-time.Hour * 24)}, CompleteTimestamp: &metav1.Time{Time: standardTime.Add(-time.Hour * 23)}, @@ -519,7 +519,7 @@ func TestUpdateRepoMaintenanceHistory(t *testing.T) { Name: "repo", }, Status: velerov1api.BackupRepositoryStatus{ - RecentMaintenanceStatus: []velerov1api.BackupRepositoryMaintenanceStatus{ + RecentMaintenance: []velerov1api.BackupRepositoryMaintenanceStatus{ { StartTimestamp: &metav1.Time{Time: standardTime.Add(-time.Hour * 24)}, CompleteTimestamp: &metav1.Time{Time: standardTime.Add(-time.Hour * 23)}, @@ -545,7 +545,7 @@ func TestUpdateRepoMaintenanceHistory(t *testing.T) { Name: "repo", }, Status: velerov1api.BackupRepositoryStatus{ - RecentMaintenanceStatus: []velerov1api.BackupRepositoryMaintenanceStatus{ + RecentMaintenance: []velerov1api.BackupRepositoryMaintenanceStatus{ { StartTimestamp: &metav1.Time{Time: standardTime.Add(-time.Hour * 24)}, CompleteTimestamp: &metav1.Time{Time: standardTime.Add(-time.Hour * 23)}, @@ -655,10 +655,10 @@ func TestUpdateRepoMaintenanceHistory(t *testing.T) { t.Run(test.name, func(t *testing.T) { updateRepoMaintenanceHistory(test.backupRepo, test.result, standardTime, standardTime.Add(time.Hour), "fake-message-0") - for at := range test.backupRepo.Status.RecentMaintenanceStatus { - assert.Equal(t, test.expectedHistory[at].StartTimestamp.Time, test.backupRepo.Status.RecentMaintenanceStatus[at].StartTimestamp.Time) - assert.Equal(t, test.expectedHistory[at].CompleteTimestamp.Time, test.backupRepo.Status.RecentMaintenanceStatus[at].CompleteTimestamp.Time) - assert.Equal(t, test.expectedHistory[at].Message, test.backupRepo.Status.RecentMaintenanceStatus[at].Message) + for at := range test.backupRepo.Status.RecentMaintenance { + assert.Equal(t, test.expectedHistory[at].StartTimestamp.Time, test.backupRepo.Status.RecentMaintenance[at].StartTimestamp.Time) + assert.Equal(t, test.expectedHistory[at].CompleteTimestamp.Time, test.backupRepo.Status.RecentMaintenance[at].CompleteTimestamp.Time) + assert.Equal(t, test.expectedHistory[at].Message, test.backupRepo.Status.RecentMaintenance[at].Message) } }) }