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:
authorPaul Okstad <pokstad@gitlab.com>2019-11-01 18:36:14 +0300
committerPaul Okstad <pokstad@gitlab.com>2019-11-01 18:36:14 +0300
commit226eef60665b0929bd3db358c81018c03f45fb29 (patch)
treebaa5d55bc3e0c19859e8589756a498d2603a3d2f /internal/git
parent2d465eb4419d862f34f2720381ec6ec50b93842a (diff)
parent7060c8827906d8248b05eee8f3f9562b0641c07f (diff)
Merge branch 'jv-count-dangling' into 'master'
Count dangling refs before/after FetchIntoObjectPool See merge request gitlab-org/gitaly!1585
Diffstat (limited to 'internal/git')
-rw-r--r--internal/git/objectpool/fetch.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/internal/git/objectpool/fetch.go b/internal/git/objectpool/fetch.go
index a5240fbfd..6230bb049 100644
--- a/internal/git/objectpool/fetch.go
+++ b/internal/git/objectpool/fetch.go
@@ -6,6 +6,7 @@ import (
"fmt"
"strings"
+ grpc_logrus "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus"
"gitlab.com/gitlab-org/gitaly/internal/command"
"gitlab.com/gitlab-org/gitaly/internal/git"
"gitlab.com/gitlab-org/gitaly/internal/git/repository"
@@ -65,6 +66,10 @@ func (o *ObjectPool) FetchFromOrigin(ctx context.Context, origin *gitalypb.Repos
return err
}
+ if err := logDanglingRefs(ctx, o, "before fetch"); err != nil {
+ return err
+ }
+
refSpec := fmt.Sprintf("+refs/*:%s/*", sourceRefNamespace)
fetchCmd, err := git.Command(ctx, o, "fetch", "--quiet", sourceRemote, refSpec)
if err != nil {
@@ -79,6 +84,10 @@ func (o *ObjectPool) FetchFromOrigin(ctx context.Context, origin *gitalypb.Repos
return err
}
+ if err := logDanglingRefs(ctx, o, "after fetch"); err != nil {
+ return err
+ }
+
packRefs, err := git.Command(ctx, o, "pack-refs", "--all")
if err != nil {
return err
@@ -157,3 +166,37 @@ func repackPool(ctx context.Context, pool repository.GitRepo) error {
return nil
}
+
+func logDanglingRefs(ctx context.Context, pool repository.GitRepo, when string) error {
+ forEachRef, err := git.SafeCmd(ctx, pool, nil, git.SubCmd{
+ Name: "for-each-ref",
+ Flags: []git.Option{git.Flag{"--format=%(objecttype)"}},
+ Args: []string{danglingObjectNamespace},
+ })
+ if err != nil {
+ return err
+ }
+
+ counts := make(map[string]int)
+ scanner := bufio.NewScanner(forEachRef)
+ for scanner.Scan() {
+ counts[scanner.Text()]++
+ }
+
+ if err := scanner.Err(); err != nil {
+ return err
+ }
+ if err := forEachRef.Wait(); err != nil {
+ return err
+ }
+
+ entry := grpc_logrus.Extract(ctx).WithField("when", when)
+ for _, field := range []string{"blob", "commit", "tag", "tree"} {
+ key := "dangling." + field + ".ref"
+ entry = entry.WithField(key, counts[field])
+ }
+
+ entry.Info("pool dangling ref stats")
+
+ return nil
+}