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:
Diffstat (limited to 'internal/praefect/repocleaner/action_clean.go')
-rw-r--r--internal/praefect/repocleaner/action_clean.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/internal/praefect/repocleaner/action_clean.go b/internal/praefect/repocleaner/action_clean.go
new file mode 100644
index 000000000..aeb8d5099
--- /dev/null
+++ b/internal/praefect/repocleaner/action_clean.go
@@ -0,0 +1,50 @@
+package repocleaner
+
+import (
+ "context"
+
+ "github.com/sirupsen/logrus"
+ "gitlab.com/gitlab-org/gitaly/v14/internal/praefect"
+ "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
+)
+
+// CleanAction is an implementation of the Action interface that moves
+// repositories to a lost+found folder in the root storage directory.
+type CleanAction struct {
+ logger logrus.FieldLogger
+ conns praefect.Connections
+}
+
+// NewCleanAction returns a new instance of CleanAction
+func NewCleanAction(logger logrus.FieldLogger, conns praefect.Connections) *CleanAction {
+ return &CleanAction{
+ logger: logger.WithField("component", "repocleaner.remove_repo_action"),
+ conns: conns,
+ }
+}
+
+// Perform performs the action of moving repositories not known to Praefect to a
+// lost+found folder in the storage root folder.
+func (r *CleanAction) Perform(ctx context.Context, virtualStorage, storage string, replicaPaths []string) error {
+ l := r.logger.WithFields(logrus.Fields{
+ "virtual_storage": virtualStorage,
+ "storage": storage,
+ })
+
+ l.WithField("cleaned_repos", replicaPaths).
+ Warn("cleaned repositories not managed by praefect")
+
+ client, err := getInternalGitalyClient(r.conns, virtualStorage, storage)
+ if err != nil {
+ return err
+ }
+
+ if _, err := client.CleanRepos(ctx, &gitalypb.CleanReposRequest{
+ StorageName: storage,
+ RelativePaths: replicaPaths,
+ }); err != nil {
+ return err
+ }
+
+ return nil
+}