Proactively enable commitGraph feature for Git repos
We've seen in https://gitlab.com/gitlab-org/gitlab-ce/issues/63432#note_182763288 that enabling the commitGraph feature of Git 2.21 in Projects::CommitController#branches can dramatically drop the RPC time of the ListTagNamesContainingCommit Gitaly RPC from 5 s to < 500 ms.
Right now the P99 shoots upwards to 50 s (https://dashboards.gitlab.net/d/PqeIQ9Iik/gitaly-feature-latency-detail?orgId=1&refresh=5m&var-job=gitaly&var-method=ListTagNamesContainingCommit&from=now-24h&to=now&fullscreen&panelId=1):
Running Housekeeping on the repo may cause GC to run and build a commit graph. This can be done via ::Projects::HousekeepingService.new(proj, :gc).execute until https://gitlab.com/gitlab-org/gitlab-ce/issues/63349 is resolved.
It would be expensive to build the commit graph for every repo on GitLab.com. However, we really care about optimizing the worst offenders. We could track the most frequently consumers of ListTagNamesContainingCommit and enable the commit graph on them now. For example:
- Record the number of times a repo initiates
ListTagNamesContainingCommit - Check if the
commitGraphis enabled. If it is, we're done. - If it is not, and the count reaches a certain threshold (e.g. 100), initiate a
commitGraphbuild.
