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:
authorSami Hiltunen <shiltunen@gitlab.com>2022-03-02 18:31:04 +0300
committerSami Hiltunen <shiltunen@gitlab.com>2022-03-02 18:44:15 +0300
commit8d3767c71c82d56e96eaf4427ab8f230cc467ffe (patch)
tree9c7d972ed54aec9ea380ea19951de5031e3dec2a
parent3558909df5cbdc69d537f7c17e3316f86830e714 (diff)
Rewrite relative path in RepositoryReplicassmh-repository-replicas-rewriting
RepositoryReplicas RPC is currently not accounting for relative path rewriting when sending the CalculateChecksum RPCs. This causes it to fail when Praefect generates unique paths for the repositories. This commit fixes the issue by sending the requests to the Gitalys with the appropriate replica paths.
-rw-r--r--internal/praefect/service/info/repositories.go37
1 files changed, 18 insertions, 19 deletions
diff --git a/internal/praefect/service/info/repositories.go b/internal/praefect/service/info/repositories.go
index ba6f1f90a..ec6bb1a4b 100644
--- a/internal/praefect/service/info/repositories.go
+++ b/internal/praefect/service/info/repositories.go
@@ -7,7 +7,6 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/helper"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
"golang.org/x/sync/errgroup"
- "google.golang.org/grpc"
)
// RepositoryReplicas returns a list of repositories that includes the checksum of the primary as well as the replicas
@@ -30,6 +29,11 @@ func (s *Server) RepositoryReplicas(ctx context.Context, in *gitalypb.Repository
return nil, fmt.Errorf("get host assignments: %w", err)
}
+ replicaPath, err := s.rs.GetReplicaPath(ctx, repositoryID)
+ if err != nil {
+ return nil, fmt.Errorf("get replica path: %w", err)
+ }
+
secondaries := make([]string, 0, len(assignments)-1)
primaryIsAssigned := false
for _, assignment := range assignments {
@@ -47,7 +51,7 @@ func (s *Server) RepositoryReplicas(ctx context.Context, in *gitalypb.Repository
var resp gitalypb.RepositoryReplicasResponse
- if resp.Primary, err = s.getRepositoryDetails(ctx, virtualStorage, primary, relativePath); err != nil {
+ if resp.Primary, err = s.getRepositoryDetails(ctx, virtualStorage, primary, relativePath, replicaPath); err != nil {
return nil, helper.ErrInternal(err)
}
@@ -60,7 +64,7 @@ func (s *Server) RepositoryReplicas(ctx context.Context, in *gitalypb.Repository
storage := storage // rescoping
g.Go(func() error {
var err error
- resp.Replicas[i], err = s.getRepositoryDetails(ctx, virtualStorage, storage, relativePath)
+ resp.Replicas[i], err = s.getRepositoryDetails(ctx, virtualStorage, storage, relativePath, replicaPath)
return err
})
}
@@ -72,33 +76,28 @@ func (s *Server) RepositoryReplicas(ctx context.Context, in *gitalypb.Repository
return &resp, nil
}
-func (s *Server) getRepositoryDetails(ctx context.Context, virtualStorage, storage, relativePath string) (*gitalypb.RepositoryReplicasResponse_RepositoryDetails, error) {
+func (s *Server) getRepositoryDetails(ctx context.Context, virtualStorage, storage, relativePath, replicaPath string) (*gitalypb.RepositoryReplicasResponse_RepositoryDetails, error) {
conn, ok := s.conns[virtualStorage][storage]
if !ok {
return nil, fmt.Errorf("no connection to %q/%q", virtualStorage, storage)
}
- return getChecksum(
- ctx,
- &gitalypb.Repository{
- StorageName: storage,
- RelativePath: relativePath,
- }, conn)
-}
-
-func getChecksum(ctx context.Context, repo *gitalypb.Repository, cc *grpc.ClientConn) (*gitalypb.RepositoryReplicasResponse_RepositoryDetails, error) {
- client := gitalypb.NewRepositoryServiceClient(cc)
-
- resp, err := client.CalculateChecksum(ctx,
+ resp, err := gitalypb.NewRepositoryServiceClient(conn).CalculateChecksum(ctx,
&gitalypb.CalculateChecksumRequest{
- Repository: repo,
+ Repository: &gitalypb.Repository{
+ StorageName: storage,
+ RelativePath: replicaPath,
+ },
})
if err != nil {
return nil, err
}
return &gitalypb.RepositoryReplicasResponse_RepositoryDetails{
- Repository: repo,
- Checksum: resp.GetChecksum(),
+ Repository: &gitalypb.Repository{
+ StorageName: storage,
+ RelativePath: relativePath,
+ },
+ Checksum: resp.GetChecksum(),
}, nil
}