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/service/repository/replicate.go')
-rw-r--r--internal/service/repository/replicate.go47
1 files changed, 45 insertions, 2 deletions
diff --git a/internal/service/repository/replicate.go b/internal/service/repository/replicate.go
index 9cc5eae01..81e7196fc 100644
--- a/internal/service/repository/replicate.go
+++ b/internal/service/repository/replicate.go
@@ -8,11 +8,11 @@ import (
"os"
"path/filepath"
- "gitlab.com/gitlab-org/gitaly/internal/safe"
-
"gitlab.com/gitlab-org/gitaly/client"
"gitlab.com/gitlab-org/gitaly/internal/config"
+ "gitlab.com/gitlab-org/gitaly/internal/git/objectpool"
"gitlab.com/gitlab-org/gitaly/internal/helper"
+ "gitlab.com/gitlab-org/gitaly/internal/safe"
"gitlab.com/gitlab-org/gitaly/proto/go/gitalypb"
"gitlab.com/gitlab-org/gitaly/streamio"
"golang.org/x/sync/errgroup"
@@ -35,6 +35,7 @@ func (s *server) ReplicateRepository(ctx context.Context, in *gitalypb.Replicate
for _, f := range []func(context.Context, *gitalypb.ReplicateRepositoryRequest) error{
syncRepository,
syncInfoAttributes,
+ s.syncObjectPool,
} {
f := f // rescoping f
g.Go(func() error { return f(outgoingCtx, in) })
@@ -132,6 +133,38 @@ func syncInfoAttributes(ctx context.Context, in *gitalypb.ReplicateRepositoryReq
return os.Rename(attributesPath, attributesPath)
}
+func (s *server) syncObjectPool(ctx context.Context, in *gitalypb.ReplicateRepositoryRequest) error {
+ objectPoolClient, err := newObjectPoolClient(ctx, in.GetSource().GetStorageName())
+ if err != nil {
+ return err
+ }
+
+ resp, err := objectPoolClient.GetObjectPool(ctx, &gitalypb.GetObjectPoolRequest{
+ Repository: in.GetSource(),
+ })
+ if err != nil {
+ return err
+ }
+
+ if resp.GetObjectPool() == nil {
+ return nil
+ }
+
+ targetObjectPool, err := objectpool.NewObjectPool(
+ in.GetRepository().GetStorageName(),
+ resp.GetObjectPool().GetRepository().GetRelativePath(),
+ )
+ if err != nil {
+ return err
+ }
+
+ if targetObjectPool.Exists() && targetObjectPool.IsValid() {
+ return targetObjectPool.Link(ctx, in.GetRepository())
+ }
+
+ return targetObjectPool.Init(ctx)
+}
+
// newRemoteClient creates a new RemoteClient that talks to the same gitaly server
func newRemoteClient() (gitalypb.RemoteServiceClient, error) {
conn, err := client.Dial(fmt.Sprintf("unix:%s", config.GitalyInternalSocketPath()), nil)
@@ -151,3 +184,13 @@ func newRepoClient(ctx context.Context, storageName string) (gitalypb.Repository
return gitalypb.NewRepositoryServiceClient(conn), nil
}
+
+// newObjectPoolClient creates a new RepositoryClient that talks to the gitaly of the source repository
+func newObjectPoolClient(ctx context.Context, storageName string) (gitalypb.ObjectPoolServiceClient, error) {
+ conn, err := helper.ClientConnection(ctx, storageName)
+ if err != nil {
+ return nil, err
+ }
+
+ return gitalypb.NewObjectPoolServiceClient(conn), nil
+}