diff options
Diffstat (limited to 'internal/cli/gitalybackup')
-rw-r--r-- | internal/cli/gitalybackup/create.go | 2 | ||||
-rw-r--r-- | internal/cli/gitalybackup/restore.go | 34 | ||||
-rw-r--r-- | internal/cli/gitalybackup/restore_test.go | 20 |
3 files changed, 24 insertions, 32 deletions
diff --git a/internal/cli/gitalybackup/create.go b/internal/cli/gitalybackup/create.go index be7e75cdb..4ad653490 100644 --- a/internal/cli/gitalybackup/create.go +++ b/internal/cli/gitalybackup/create.go @@ -174,7 +174,7 @@ func (cmd *createSubcommand) run(ctx context.Context, logger log.Logger, stdin i })) } - if _, err := pipeline.Done(); err != nil { + if err := pipeline.Done(); err != nil { return fmt.Errorf("create: %w", err) } return nil diff --git a/internal/cli/gitalybackup/restore.go b/internal/cli/gitalybackup/restore.go index defffa223..de9e2cd3d 100644 --- a/internal/cli/gitalybackup/restore.go +++ b/internal/cli/gitalybackup/restore.go @@ -135,18 +135,15 @@ func (cmd *restoreSubcommand) run(ctx context.Context, logger log.Logger, stdin manager = backup.NewManager(sink, locator, pool) } - // Get the set of existing repositories keyed by storage. We'll later use this to determine any - // dangling repos that should be removed. - existingRepos := make(map[string][]*gitalypb.Repository) for _, storageName := range cmd.removeAllRepositories { - repos, err := manager.ListRepositories(ctx, &backup.ListRepositoriesRequest{ + err := manager.RemoveAllRepositories(ctx, &backup.RemoveAllRepositoriesRequest{ StorageName: storageName, }) if err != nil { - logger.WithError(err).WithField("storage_name", storageName).Warn("failed to list repositories") + // Treat RemoveAll failures as soft failures until we can determine + // how often it fails. + logger.WithError(err).WithField("storage_name", storageName).Warn("failed to remove all repositories") } - - existingRepos[storageName] = repos } var opts []backup.PipelineOption @@ -181,29 +178,8 @@ func (cmd *restoreSubcommand) run(ctx context.Context, logger log.Logger, stdin })) } - restoredRepos, err := pipeline.Done() - if err != nil { + if err := pipeline.Done(); err != nil { return fmt.Errorf("restore: %w", err) } - - var removalErrors []error - for storageName, repos := range existingRepos { - for _, repo := range repos { - if dangling := restoredRepos[storageName][repo]; dangling == struct{}{} { - // If we have dangling repos (those which exist in the storage but - // weren't part of the restore), they need to be deleted so the - // state of repos in Gitaly matches that in the Rails DB. - if err := manager.RemoveRepository(ctx, &backup.RemoveRepositoryRequest{Repo: repo}); err != nil { - removalErrors = append(removalErrors, fmt.Errorf("storage_name %q relative_path %q: %w", storageName, repo.RelativePath, err)) - } - } - } - } - - if len(removalErrors) > 0 { - return fmt.Errorf("remove dangling repositories: %d failures encountered: %w", - len(removalErrors), errors.Join(removalErrors...)) - } - return nil } diff --git a/internal/cli/gitalybackup/restore_test.go b/internal/cli/gitalybackup/restore_test.go index 6d235525c..4eae52e4c 100644 --- a/internal/cli/gitalybackup/restore_test.go +++ b/internal/cli/gitalybackup/restore_test.go @@ -75,6 +75,12 @@ Issue: https://gitlab.com/gitlab-org/gitaly/-/issues/5269`) })) } + require.NoError(t, encoder.Encode(map[string]string{ + "address": "invalid", + "token": "invalid", + "relative_path": "invalid", + })) + ctx = testhelper.MergeIncomingMetadata(ctx, testcfg.GitalyServersMetadataFromCfg(t, cfg)) args := []string{ @@ -97,7 +103,9 @@ Issue: https://gitlab.com/gitlab-org/gitaly/-/issues/5269`) require.DirExists(t, existRepoPath) - require.NoError(t, cmd.RunContext(ctx, args)) + require.EqualError(t, + cmd.RunContext(ctx, args), + "restore: pipeline: 1 failures encountered:\n - invalid: manager: could not dial source: invalid connection string: \"invalid\"\n") require.NoDirExists(t, existRepoPath) @@ -171,6 +179,12 @@ Issue: https://gitlab.com/gitlab-org/gitaly/-/issues/5269`) })) } + require.NoError(t, encoder.Encode(map[string]string{ + "address": "invalid", + "token": "invalid", + "relative_path": "invalid", + })) + ctx = testhelper.MergeIncomingMetadata(ctx, testcfg.GitalyServersMetadataFromCfg(t, cfg)) args := []string{ @@ -193,7 +207,9 @@ Issue: https://gitlab.com/gitlab-org/gitaly/-/issues/5269`) require.DirExists(t, existRepoPath) - require.NoError(t, cmd.RunContext(ctx, args)) + require.EqualError(t, + cmd.RunContext(ctx, args), + "restore: pipeline: 1 failures encountered:\n - invalid: server-side restore: could not dial source: invalid connection string: \"invalid\"\n") require.NoDirExists(t, existRepoPath) |