diff --git a/changelogs/unreleased/6587-Lyndon-Li b/changelogs/unreleased/6587-Lyndon-Li new file mode 100644 index 0000000000..d72a27778c --- /dev/null +++ b/changelogs/unreleased/6587-Lyndon-Li @@ -0,0 +1 @@ +Fix issue 6575, flush the repo after delete the snapshot, otherwise, the changes(deleting repo snapshot) cannot be committed to the repo. \ No newline at end of file diff --git a/pkg/repository/provider/unified_repo.go b/pkg/repository/provider/unified_repo.go index 592d271acc..8dc4701855 100644 --- a/pkg/repository/provider/unified_repo.go +++ b/pkg/repository/provider/unified_repo.go @@ -67,7 +67,7 @@ const ( repoOpDescMaintain = "repo maintenance" repoOpDescForget = "forget" - repoConnectDesc = "unfied repo" + repoConnectDesc = "unified repo" ) // NewUnifiedRepoProvider creates the service provider for Unified Repo @@ -302,6 +302,11 @@ func (urp *unifiedRepoProvider) Forget(ctx context.Context, snapshotID string, p return errors.Wrap(err, "error to delete manifest") } + err = bkRepo.Flush(ctx) + if err != nil { + return errors.Wrap(err, "error to flush repo") + } + log.Debug("Forget snapshot complete") return nil diff --git a/pkg/repository/provider/unified_repo_test.go b/pkg/repository/provider/unified_repo_test.go index 8ca73127b8..08f33eb575 100644 --- a/pkg/repository/provider/unified_repo_test.go +++ b/pkg/repository/provider/unified_repo_test.go @@ -783,6 +783,7 @@ func TestForget(t *testing.T) { backupRepo *reposervicenmocks.BackupRepo retFuncOpen []interface{} retFuncDelete interface{} + retFuncFlush interface{} credStoreReturn string credStoreError error expectedErr string @@ -843,6 +844,37 @@ func TestForget(t *testing.T) { }, expectedErr: "error to delete manifest: fake-error-3", }, + { + name: "flush fail", + getter: new(credmock.SecretStore), + credStoreReturn: "fake-password", + funcTable: localFuncTable{ + getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { + return map[string]string{}, nil + }, + getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { + return map[string]string{}, nil + }, + }, + repoService: new(reposervicenmocks.BackupRepoService), + backupRepo: new(reposervicenmocks.BackupRepo), + retFuncOpen: []interface{}{ + func(context.Context, udmrepo.RepoOptions) udmrepo.BackupRepo { + return backupRepo + }, + + func(context.Context, udmrepo.RepoOptions) error { + return nil + }, + }, + retFuncDelete: func(context.Context, udmrepo.ID) error { + return nil + }, + retFuncFlush: func(context.Context) error { + return errors.New("fake-error-4") + }, + expectedErr: "error to flush repo: fake-error-4", + }, } for _, tc := range testCases { @@ -871,6 +903,7 @@ func TestForget(t *testing.T) { if tc.backupRepo != nil { backupRepo.On("DeleteManifest", mock.Anything, mock.Anything).Return(tc.retFuncDelete) + backupRepo.On("Flush", mock.Anything).Return(tc.retFuncFlush) backupRepo.On("Close", mock.Anything).Return(nil) }