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-02-21 00:12:58 +0300
committerJames Fargher <jfargher@gitlab.com>2023-03-02 22:55:03 +0300
commitf838a979710b79acd91caa8aa620cf2b27a97fe8 (patch)
tree3fc4aa2ffc85d1caf53acab4f578b7d04ffb41ff
parent4020a8bc182d5c3cd88e3b0a845b8d2476252ab8 (diff)
backup: Add RemoveAllRepositories to backup manager
The manager will be used to clear storages prior to starting a full backup.
-rw-r--r--internal/backup/backup.go26
-rw-r--r--internal/backup/backup_test.go30
2 files changed, 56 insertions, 0 deletions
diff --git a/internal/backup/backup.go b/internal/backup/backup.go
index 27323a3d2..2c74ee9cd 100644
--- a/internal/backup/backup.go
+++ b/internal/backup/backup.go
@@ -140,6 +140,32 @@ func NewManager(sink Sink, locator Locator, pool *client.Pool, backupID string)
}
}
+// RemoveAllRepositoriesRequest is the request to remove all repositories in the specified
+// storage name.
+type RemoveAllRepositoriesRequest struct {
+ Server storage.ServerInfo
+ StorageName string
+}
+
+// RemoveAllRepositories removes all repositories in the specified storage name.
+func (mgr *Manager) RemoveAllRepositories(ctx context.Context, req *RemoveAllRepositoriesRequest) error {
+ if err := setContextServerInfo(ctx, &req.Server, req.StorageName); err != nil {
+ return fmt.Errorf("manager: %w", err)
+ }
+
+ repoClient, err := mgr.newRepoClient(ctx, req.Server)
+ if err != nil {
+ return fmt.Errorf("manager: %w", err)
+ }
+
+ _, err = repoClient.RemoveAll(ctx, &gitalypb.RemoveAllRequest{StorageName: req.StorageName})
+ if err != nil {
+ return fmt.Errorf("manager: %w", err)
+ }
+
+ return nil
+}
+
// CreateRequest is the request to create a backup
type CreateRequest struct {
Server storage.ServerInfo
diff --git a/internal/backup/backup_test.go b/internal/backup/backup_test.go
index dd1084275..ce9c2d473 100644
--- a/internal/backup/backup_test.go
+++ b/internal/backup/backup_test.go
@@ -26,6 +26,36 @@ import (
"google.golang.org/protobuf/proto"
)
+func TestManager_RemoveAllRepositories(t *testing.T) {
+ t.Parallel()
+
+ const backupID = "abc123"
+
+ cfg := testcfg.Build(t)
+ cfg.SocketPath = testserver.RunGitalyServer(t, cfg, nil, setup.RegisterAll)
+
+ ctx := testhelper.Context(t)
+
+ repo, repoPath := gittest.CreateRepository(t, ctx, cfg)
+ commitID := gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("main"))
+ gittest.WriteTag(t, cfg, repoPath, "v1.0.0", commitID.Revision())
+
+ pool := client.NewPool()
+ defer testhelper.MustClose(t, pool)
+
+ backupRoot := testhelper.TempDir(t)
+ sink := NewFilesystemSink(backupRoot)
+ locator, err := ResolveLocator("pointer", sink)
+ require.NoError(t, err)
+
+ fsBackup := NewManager(sink, locator, pool, backupID)
+ err = fsBackup.RemoveAllRepositories(ctx, &RemoveAllRepositoriesRequest{
+ Server: storage.ServerInfo{Address: cfg.SocketPath, Token: cfg.Auth.Token},
+ StorageName: repo.StorageName,
+ })
+ require.NoError(t, err)
+}
+
func TestManager_Create(t *testing.T) {
t.Parallel()