From 5fd9df3e2c729801461393c270bf6e8a71f362af Mon Sep 17 00:00:00 2001 From: Lyndon-Li Date: Wed, 5 Feb 2025 16:16:44 +0800 Subject: [PATCH 1/2] refactor pod volume context Signed-off-by: Lyndon-Li --- pkg/backup/backup.go | 16 +++++++++------- pkg/restore/restore.go | 6 ++++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/pkg/backup/backup.go b/pkg/backup/backup.go index a8ecc285c5..d241c5215a 100644 --- a/pkg/backup/backup.go +++ b/pkg/backup/backup.go @@ -117,6 +117,7 @@ type kubernetesBackupper struct { podCommandExecutor podexec.PodCommandExecutor podVolumeBackupperFactory podvolume.BackupperFactory podVolumeTimeout time.Duration + podVolumeContext context.Context defaultVolumesToFsBackup bool clientPageSize int uploaderType string @@ -308,12 +309,13 @@ func (kb *kubernetesBackupper) BackupWithResolvers( } } - ctx, cancelFunc := context.WithTimeout(context.Background(), podVolumeTimeout) + var cancelFunc context.CancelFunc + kb.podVolumeContext, cancelFunc = context.WithTimeout(context.Background(), podVolumeTimeout) defer cancelFunc() var podVolumeBackupper podvolume.Backupper if kb.podVolumeBackupperFactory != nil { - podVolumeBackupper, err = kb.podVolumeBackupperFactory.NewBackupper(ctx, log, backupRequest.Backup, kb.uploaderType) + podVolumeBackupper, err = kb.podVolumeBackupperFactory.NewBackupper(kb.podVolumeContext, log, backupRequest.Backup, kb.uploaderType) if err != nil { log.WithError(errors.WithStack(err)).Debugf("Error from NewBackupper") return errors.WithStack(err) @@ -489,7 +491,7 @@ func (kb *kubernetesBackupper) BackupWithResolvers( addNextToBlock := i < len(items)-1 && items[i].orderedResource && items[i+1].orderedResource && items[i].groupResource == items[i+1].groupResource if itemBlock != nil && len(itemBlock.Items) > 0 && !addNextToBlock { log.Infof("Backing Up Item Block including %s %s/%s (%v items in block)", items[i].groupResource.String(), items[i].namespace, items[i].name, len(itemBlock.Items)) - backedUpGRs := kb.backupItemBlock(ctx, *itemBlock) + backedUpGRs := kb.backupItemBlock(*itemBlock) for _, backedUpGR := range backedUpGRs { backedUpGroupResources[backedUpGR] = true } @@ -661,7 +663,7 @@ func (kb *kubernetesBackupper) executeItemBlockActions( } } -func (kb *kubernetesBackupper) backupItemBlock(ctx context.Context, itemBlock BackupItemBlock) []schema.GroupResource { +func (kb *kubernetesBackupper) backupItemBlock(itemBlock BackupItemBlock) []schema.GroupResource { // find pods in ItemBlock // filter pods based on whether they still need to be backed up // this list will be used to run pre/post hooks @@ -703,7 +705,7 @@ func (kb *kubernetesBackupper) backupItemBlock(ctx context.Context, itemBlock Ba if len(postHookPods) > 0 { itemBlock.Log.Debug("Executing post hooks") itemBlock.itemBackupper.hookTracker.AsyncItemBlocks.Add(1) - go kb.handleItemBlockPostHooks(ctx, itemBlock, postHookPods) + go kb.handleItemBlockPostHooks(itemBlock, postHookPods) } return grList @@ -739,12 +741,12 @@ func (kb *kubernetesBackupper) handleItemBlockPreHooks(itemBlock BackupItemBlock } // The hooks cannot execute until the PVBs to be processed -func (kb *kubernetesBackupper) handleItemBlockPostHooks(ctx context.Context, itemBlock BackupItemBlock, hookPods []itemblock.ItemBlockItem) { +func (kb *kubernetesBackupper) handleItemBlockPostHooks(itemBlock BackupItemBlock, hookPods []itemblock.ItemBlockItem) { log := itemBlock.Log defer itemBlock.itemBackupper.hookTracker.AsyncItemBlocks.Done() // the post hooks will not execute until all PVBs of the item block pods are processed - if err := kb.waitUntilPVBsProcessed(ctx, log, itemBlock, hookPods); err != nil { + if err := kb.waitUntilPVBsProcessed(kb.podVolumeContext, log, itemBlock, hookPods); err != nil { log.WithError(err).Error("failed to wait PVBs processed for the ItemBlock") return } diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index 7dc5826999..9fbf3268a2 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -108,6 +108,7 @@ type kubernetesRestorer struct { namespaceClient corev1.NamespaceInterface podVolumeRestorerFactory podvolume.RestorerFactory podVolumeTimeout time.Duration + podVolumeContext go_context.Context resourceTerminatingTimeout time.Duration resourceTimeout time.Duration resourcePriorities types.Priorities @@ -249,12 +250,13 @@ func (kr *kubernetesRestorer) RestoreWithResolvers( } } - ctx, cancelFunc := go_context.WithTimeout(go_context.Background(), podVolumeTimeout) + var cancelFunc go_context.CancelFunc + kr.podVolumeContext, cancelFunc = go_context.WithTimeout(go_context.Background(), podVolumeTimeout) defer cancelFunc() var podVolumeRestorer podvolume.Restorer if kr.podVolumeRestorerFactory != nil { - podVolumeRestorer, err = kr.podVolumeRestorerFactory.NewRestorer(ctx, req.Restore) + podVolumeRestorer, err = kr.podVolumeRestorerFactory.NewRestorer(kr.podVolumeContext, req.Restore) if err != nil { return results.Result{}, results.Result{Velero: []string{err.Error()}} } From de170043ea860d57d61b108b01d1d4809e9cac1d Mon Sep 17 00:00:00 2001 From: Lyndon-Li Date: Thu, 6 Feb 2025 10:58:04 +0800 Subject: [PATCH 2/2] rename cancel function Signed-off-by: Lyndon-Li --- pkg/backup/backup.go | 6 +++--- pkg/restore/restore.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/backup/backup.go b/pkg/backup/backup.go index d241c5215a..53b80f8f6a 100644 --- a/pkg/backup/backup.go +++ b/pkg/backup/backup.go @@ -309,9 +309,9 @@ func (kb *kubernetesBackupper) BackupWithResolvers( } } - var cancelFunc context.CancelFunc - kb.podVolumeContext, cancelFunc = context.WithTimeout(context.Background(), podVolumeTimeout) - defer cancelFunc() + var podVolumeCancelFunc context.CancelFunc + kb.podVolumeContext, podVolumeCancelFunc = context.WithTimeout(context.Background(), podVolumeTimeout) + defer podVolumeCancelFunc() var podVolumeBackupper podvolume.Backupper if kb.podVolumeBackupperFactory != nil { diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index 9fbf3268a2..2c8bfda681 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -250,9 +250,9 @@ func (kr *kubernetesRestorer) RestoreWithResolvers( } } - var cancelFunc go_context.CancelFunc - kr.podVolumeContext, cancelFunc = go_context.WithTimeout(go_context.Background(), podVolumeTimeout) - defer cancelFunc() + var podVolumeCancelFunc go_context.CancelFunc + kr.podVolumeContext, podVolumeCancelFunc = go_context.WithTimeout(go_context.Background(), podVolumeTimeout) + defer podVolumeCancelFunc() var podVolumeRestorer podvolume.Restorer if kr.podVolumeRestorerFactory != nil {