diff options
author | Toon Claes <toon@gitlab.com> | 2021-01-14 17:55:27 +0300 |
---|---|---|
committer | Toon Claes <toon@gitlab.com> | 2021-01-14 17:55:27 +0300 |
commit | 04659e96f400993b00367b39819cdffe105e0cab (patch) | |
tree | d5add22b5515c271afd4349170eec0ffac59064a | |
parent | e9743661a588b99e51cf7f806eaaf137573e5c02 (diff) | |
parent | 8d9e3fa3f2c3e18aaf35e4ab6cd9e61b6c711233 (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.yml | 5 | ||||
-rw-r--r-- | internal/git/objectpool/fetch.go | 29 |
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") |