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:
authorToon Claes <toon@gitlab.com>2021-01-14 17:55:27 +0300
committerToon Claes <toon@gitlab.com>2021-01-14 17:55:27 +0300
commit04659e96f400993b00367b39819cdffe105e0cab (patch)
treed5add22b5515c271afd4349170eec0ffac59064a
parente9743661a588b99e51cf7f806eaaf137573e5c02 (diff)
parent8d9e3fa3f2c3e18aaf35e4ab6cd9e61b6c711233 (diff)
Merge branch 'pks-objectpool-stats-normal-refs' into 'master'
objectpool: Count normal references when collecting stats See merge request gitlab-org/gitaly!2993
-rw-r--r--changelogs/unreleased/pks-objectpool-stats-normal-refs.yml5
-rw-r--r--internal/git/objectpool/fetch.go29
2 files changed, 27 insertions, 7 deletions
diff --git a/changelogs/unreleased/pks-objectpool-stats-normal-refs.yml b/changelogs/unreleased/pks-objectpool-stats-normal-refs.yml
new file mode 100644
index 000000000..ea6ef6bc6
--- /dev/null
+++ b/changelogs/unreleased/pks-objectpool-stats-normal-refs.yml
@@ -0,0 +1,5 @@
+---
+title: 'objectpool: Count normal references when collecting stats'
+merge_request: 2993
+author:
+type: added
diff --git a/internal/git/objectpool/fetch.go b/internal/git/objectpool/fetch.go
index cc782fd6c..6fc0f8c4e 100644
--- a/internal/git/objectpool/fetch.go
+++ b/internal/git/objectpool/fetch.go
@@ -133,7 +133,7 @@ func (o *ObjectPool) FetchFromOrigin(ctx context.Context, origin *gitalypb.Repos
return repackPool(ctx, o)
}
-const danglingObjectNamespace = "refs/dangling"
+const danglingObjectNamespace = "refs/dangling/"
// rescueDanglingObjects creates refs for all dangling objects if finds
// with `git fsck`, which converts those objects from "dangling" to
@@ -168,7 +168,7 @@ func rescueDanglingObjects(ctx context.Context, repo repository.GitRepo) error {
continue
}
- ref := git.ReferenceName(danglingObjectNamespace + "/" + split[2])
+ ref := git.ReferenceName(danglingObjectNamespace + split[2])
if err := updater.Create(ref, split[2]); err != nil {
return err
}
@@ -226,17 +226,31 @@ func (o *ObjectPool) logStats(ctx context.Context, when string) error {
forEachRef, err := git.NewCommand(ctx, o, nil, git.SubCmd{
Name: "for-each-ref",
- Flags: []git.Option{git.Flag{Name: "--format=%(objecttype)"}},
- Args: []string{danglingObjectNamespace},
+ Flags: []git.Option{git.Flag{Name: "--format=%(objecttype)%00%(refname)"}},
+ Args: []string{"refs/"},
})
if err != nil {
return err
}
- counts := make(map[string]int)
+ danglingRefsByType := make(map[string]int)
+ normalRefsByType := make(map[string]int)
+
scanner := bufio.NewScanner(forEachRef)
for scanner.Scan() {
- counts[scanner.Text()]++
+ line := bytes.SplitN(scanner.Bytes(), []byte{0}, 2)
+ if len(line) != 2 {
+ continue
+ }
+
+ objectType := string(line[0])
+ refname := string(line[1])
+
+ if strings.HasPrefix(refname, danglingObjectNamespace) {
+ danglingRefsByType[objectType]++
+ } else {
+ normalRefsByType[objectType]++
+ }
}
if err := scanner.Err(); err != nil {
@@ -247,7 +261,8 @@ func (o *ObjectPool) logStats(ctx context.Context, when string) error {
}
for _, key := range []string{"blob", "commit", "tag", "tree"} {
- fields["dangling."+key+".ref"] = counts[key]
+ fields["dangling."+key+".ref"] = danglingRefsByType[key]
+ fields["normal."+key+".ref"] = normalRefsByType[key]
}
ctxlogrus.Extract(ctx).WithFields(fields).Info("pool dangling ref stats")