From 7dccc176904cc92dfb1ba4a6f413f113e915c72d Mon Sep 17 00:00:00 2001 From: kkothule Date: Tue, 16 May 2023 22:46:38 +0530 Subject: [PATCH] Fix status.progress not getting updated for backup Signed-off-by: Xun Jiang --- changelogs/unreleased/6324-blackpiglet | 1 + pkg/backup/backup.go | 37 +++++++++++++++++--------- 2 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 changelogs/unreleased/6324-blackpiglet diff --git a/changelogs/unreleased/6324-blackpiglet b/changelogs/unreleased/6324-blackpiglet new file mode 100644 index 000000000..28f1fa289 --- /dev/null +++ b/changelogs/unreleased/6324-blackpiglet @@ -0,0 +1 @@ +Fixed a bug where status.progress is not getting updated for backups. \ No newline at end of file diff --git a/pkg/backup/backup.go b/pkg/backup/backup.go index 1e2dce2a6..1ae35fbd1 100644 --- a/pkg/backup/backup.go +++ b/pkg/backup/backup.go @@ -279,12 +279,16 @@ func (kb *kubernetesBackupper) BackupWithResolvers(log logrus.FieldLogger, items := collector.getAllItems() log.WithField("progress", "").Infof("Collected %d items matching the backup spec from the Kubernetes API (actual number of items backed up may be more or less depending on velero.io/exclude-from-backup annotation, plugins returning additional related items to back up, etc.)", len(items)) - backupRequest.Status.Progress = &velerov1api.BackupProgress{TotalItems: len(items)} - original := backupRequest.Backup.DeepCopy() - backupRequest.Backup.Status.Progress.TotalItems = len(items) - if err := kube.PatchResource(original, backupRequest.Backup, kb.kbClient); err != nil { + updated := backupRequest.Backup.DeepCopy() + if updated.Status.Progress == nil { + updated.Status.Progress = &velerov1api.BackupProgress{} + } + + updated.Status.Progress.TotalItems = len(items) + if err := kube.PatchResource(backupRequest.Backup, updated, kb.kbClient); err != nil { log.WithError(errors.WithStack((err))).Warn("Got error trying to update backup's status.progress.totalItems") } + backupRequest.Status.Progress = &velerov1api.BackupProgress{TotalItems: len(items)} itemBackupper := &itemBackupper{ backupRequest: backupRequest, @@ -333,12 +337,16 @@ func (kb *kubernetesBackupper) BackupWithResolvers(log logrus.FieldLogger, lastUpdate = &val case <-ticker.C: if lastUpdate != nil { - backupRequest.Status.Progress = &velerov1api.BackupProgress{TotalItems: lastUpdate.totalItems, ItemsBackedUp: lastUpdate.itemsBackedUp} - original := backupRequest.Backup.DeepCopy() - backupRequest.Backup.Status.Progress = &velerov1api.BackupProgress{TotalItems: lastUpdate.totalItems, ItemsBackedUp: lastUpdate.itemsBackedUp} - if err := kube.PatchResource(original, backupRequest.Backup, kb.kbClient); err != nil { + updated := backupRequest.Backup.DeepCopy() + if updated.Status.Progress == nil { + updated.Status.Progress = &velerov1api.BackupProgress{} + } + updated.Status.Progress.TotalItems = lastUpdate.totalItems + updated.Status.Progress.ItemsBackedUp = lastUpdate.itemsBackedUp + if err := kube.PatchResource(backupRequest.Backup, updated, kb.kbClient); err != nil { log.WithError(errors.WithStack((err))).Warn("Got error trying to update backup's status.progress") } + backupRequest.Status.Progress = &velerov1api.BackupProgress{TotalItems: lastUpdate.totalItems, ItemsBackedUp: lastUpdate.itemsBackedUp} lastUpdate = nil } } @@ -413,12 +421,17 @@ func (kb *kubernetesBackupper) BackupWithResolvers(log logrus.FieldLogger, // do a final update on progress since we may have just added some CRDs and may not have updated // for the last few processed items. - backupRequest.Status.Progress = &velerov1api.BackupProgress{TotalItems: len(backupRequest.BackedUpItems), ItemsBackedUp: len(backupRequest.BackedUpItems)} - original = backupRequest.Backup.DeepCopy() - backupRequest.Backup.Status.Progress = &velerov1api.BackupProgress{TotalItems: len(backupRequest.BackedUpItems), ItemsBackedUp: len(backupRequest.BackedUpItems)} - if err := kube.PatchResource(original, backupRequest.Backup, kb.kbClient); err != nil { + updated = backupRequest.Backup.DeepCopy() + if updated.Status.Progress == nil { + updated.Status.Progress = &velerov1api.BackupProgress{} + } + updated.Status.Progress.TotalItems = len(backupRequest.BackedUpItems) + updated.Status.Progress.ItemsBackedUp = len(backupRequest.BackedUpItems) + + if err := kube.PatchResource(backupRequest.Backup, updated, kb.kbClient); err != nil { log.WithError(errors.WithStack((err))).Warn("Got error trying to update backup's status.progress") } + backupRequest.Status.Progress = &velerov1api.BackupProgress{TotalItems: len(backupRequest.BackedUpItems), ItemsBackedUp: len(backupRequest.BackedUpItems)} log.WithField("progress", "").Infof("Backed up a total of %d items", len(backupRequest.BackedUpItems))