Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Fargher <jfargher@gitlab.com>2023-05-26 00:59:50 +0300
committerJames Fargher <jfargher@gitlab.com>2023-06-01 03:50:24 +0300
commitf5d65cd7bd229eb29c603584d1d2a04ab7e6450c (patch)
treee94db0e10dc188dcae3454d9571d4d9ca64ebc47
parent8e494f4e3035544acafbf07e3981a35059359ebc (diff)
backup: Implement remove repository for backup.Repository
In preparation of supporting server-side backup restores, here we add both RPC and server-side implementations for remove repository.
-rw-r--r--cmd/gitaly-backup/restore_test.go2
-rw-r--r--internal/backup/backup.go29
-rw-r--r--internal/backup/repository.go29
3 files changed, 40 insertions, 20 deletions
diff --git a/cmd/gitaly-backup/restore_test.go b/cmd/gitaly-backup/restore_test.go
index 037078310..3492c6c15 100644
--- a/cmd/gitaly-backup/restore_test.go
+++ b/cmd/gitaly-backup/restore_test.go
@@ -76,7 +76,7 @@ func TestRestoreSubcommand(t *testing.T) {
require.NoError(t, fs.Parse([]string{"-path", path, "-remove-all-repositories", existingRepo.StorageName}))
require.EqualError(t,
cmd.Run(ctx, &stdin, io.Discard),
- "restore: pipeline: 1 failures encountered:\n - invalid: manager: remove repository: could not dial source: invalid connection string: \"invalid\"\n")
+ "restore: pipeline: 1 failures encountered:\n - invalid: manager: could not dial source: invalid connection string: \"invalid\"\n")
require.NoDirExists(t, existRepoPath)
diff --git a/internal/backup/backup.go b/internal/backup/backup.go
index 06d09acc4..3acaf36a3 100644
--- a/internal/backup/backup.go
+++ b/internal/backup/backup.go
@@ -15,8 +15,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction"
"gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb"
"gitlab.com/gitlab-org/gitaly/v16/streamio"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
"google.golang.org/protobuf/proto"
)
@@ -84,6 +82,9 @@ type Repository interface {
GetCustomHooks(ctx context.Context, out io.Writer) error
// CreateBundle fetches a bundle that contains refs matching patterns.
CreateBundle(ctx context.Context, out io.Writer, patterns io.Reader) error
+ // Remove removes the repository. Does not return an error if the
+ // repository cannot be found.
+ Remove(ctx context.Context) error
}
// ResolveLocator returns a locator implementation based on a locator identifier.
@@ -254,7 +255,12 @@ func (mgr *Manager) Restore(ctx context.Context, req *RestoreRequest) error {
return fmt.Errorf("manager: %w", err)
}
- if err := mgr.removeRepository(ctx, req.Server, req.Repository); err != nil {
+ repo, err := mgr.repositoryFactory(ctx, req.Repository, req.Server)
+ if err != nil {
+ return fmt.Errorf("manager: %w", err)
+ }
+
+ if err := repo.Remove(ctx); err != nil {
return fmt.Errorf("manager: %w", err)
}
@@ -280,7 +286,7 @@ func (mgr *Manager) Restore(ctx context.Context, req *RestoreRequest) error {
return nil
}
- if err := mgr.removeRepository(ctx, req.Server, req.Repository); err != nil {
+ if err := repo.Remove(ctx); err != nil {
return fmt.Errorf("manager: remove on skipped: %w", err)
}
@@ -309,21 +315,6 @@ func setContextServerInfo(ctx context.Context, server *storage.ServerInfo, stora
return nil
}
-func (mgr *Manager) removeRepository(ctx context.Context, server storage.ServerInfo, repo *gitalypb.Repository) error {
- repoClient, err := mgr.newRepoClient(ctx, server)
- if err != nil {
- return fmt.Errorf("remove repository: %w", err)
- }
- _, err = repoClient.RemoveRepository(ctx, &gitalypb.RemoveRepositoryRequest{Repository: repo})
- switch {
- case status.Code(err) == codes.NotFound:
- return nil
- case err != nil:
- return fmt.Errorf("remove repository: %w", err)
- }
- return nil
-}
-
func (mgr *Manager) createRepository(ctx context.Context, server storage.ServerInfo, repo *gitalypb.Repository) error {
repoClient, err := mgr.newRepoClient(ctx, server)
if err != nil {
diff --git a/internal/backup/repository.go b/internal/backup/repository.go
index b36e08bd6..6c66b29af 100644
--- a/internal/backup/repository.go
+++ b/internal/backup/repository.go
@@ -149,6 +149,22 @@ func (rr *remoteRepository) CreateBundle(ctx context.Context, out io.Writer, pat
return nil
}
+// Remove removes the repository. Does not return an error if the repository
+// cannot be found.
+func (rr *remoteRepository) Remove(ctx context.Context) error {
+ repoClient := rr.newRepoClient()
+ _, err := repoClient.RemoveRepository(ctx, &gitalypb.RemoveRepositoryRequest{
+ Repository: rr.repo,
+ })
+ switch {
+ case status.Code(err) == codes.NotFound:
+ return nil
+ case err != nil:
+ return fmt.Errorf("remote repository: remove: %w", err)
+ }
+ return nil
+}
+
func (rr *remoteRepository) newRepoClient() gitalypb.RepositoryServiceClient {
return gitalypb.NewRepositoryServiceClient(rr.conn)
}
@@ -239,3 +255,16 @@ func (r *localRepository) CreateBundle(ctx context.Context, out io.Writer, patte
return nil
}
+
+// Remove removes the repository. Does not return an error if the repository
+// cannot be found.
+func (r *localRepository) Remove(ctx context.Context) error {
+ err := repoutil.Remove(ctx, r.locator, r.txManager, r.repo)
+ switch {
+ case status.Code(err) == codes.NotFound:
+ return nil
+ case err != nil:
+ return fmt.Errorf("local repository: remove: %w", err)
+ }
+ return nil
+}