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/ref/refs.go')
-rw-r--r--internal/service/ref/refs.go52
1 files changed, 49 insertions, 3 deletions
diff --git a/internal/service/ref/refs.go b/internal/service/ref/refs.go
index 1aab6f40d..940b69869 100644
--- a/internal/service/ref/refs.go
+++ b/internal/service/ref/refs.go
@@ -8,6 +8,10 @@ import (
"fmt"
"strings"
+ "github.com/prometheus/client_golang/prometheus"
+ "gitlab.com/gitlab-org/gitaly/internal/featureflag"
+ "gitlab.com/gitlab-org/gitaly/internal/rubyserver"
+
"gitlab.com/gitlab-org/gitaly-proto/go/gitalypb"
"gitlab.com/gitlab-org/gitaly/internal/git"
"gitlab.com/gitlab-org/gitaly/internal/git/catfile"
@@ -24,8 +28,22 @@ var (
headReference = _headReference
// FindBranchNames is exported to be used in other packages
FindBranchNames = _findBranchNames
+
+ findAllTagsFeatureFlag = "go-find-all-tags"
+
+ findAllTagsRequests = prometheus.NewCounterVec(
+ prometheus.CounterOpts{
+ Name: "gitaly_find_all_tags_requests_total",
+ Help: "Counter of go vs ruby implementation of FindAllTags",
+ },
+ []string{"implementation"},
+ )
)
+func init() {
+ prometheus.Register(findAllTagsRequests)
+}
+
type findRefsOpts struct {
cmdArgs []string
delim []byte
@@ -137,11 +155,39 @@ func (s *server) FindAllTags(in *gitalypb.FindAllTagsRequest, stream gitalypb.Re
return helper.ErrInvalidArgument(err)
}
- if err := parseAndReturnTags(ctx, in.GetRepository(), stream); err != nil {
- return helper.ErrInternal(err)
+ if featureflag.IsEnabled(ctx, findAllTagsFeatureFlag) {
+ findAllTagsRequests.WithLabelValues("go").Inc()
+ if err := parseAndReturnTags(ctx, in.GetRepository(), stream); err != nil {
+ return helper.ErrInternal(err)
+ }
+ return nil
}
- return nil
+ findAllTagsRequests.WithLabelValues("ruby").Inc()
+ client, err := s.RefServiceClient(ctx)
+ if err != nil {
+ return err
+ }
+
+ clientCtx, err := rubyserver.SetHeaders(ctx, in.GetRepository())
+ if err != nil {
+ return err
+ }
+
+ rubyStream, err := client.FindAllTags(clientCtx, in)
+ if err != nil {
+ return err
+ }
+
+ return rubyserver.Proxy(func() error {
+ resp, err := rubyStream.Recv()
+ if err != nil {
+ md := rubyStream.Trailer()
+ stream.SetTrailer(md)
+ return err
+ }
+ return stream.Send(resp)
+ })
}
func validateFindAllTagsRequest(request *gitalypb.FindAllTagsRequest) error {