diff options
author | Pavlo Strokov <pstrokov@gitlab.com> | 2020-01-28 11:18:32 +0300 |
---|---|---|
committer | Pavlo Strokov <pstrokov@gitlab.com> | 2020-01-28 11:18:32 +0300 |
commit | 6dd32f2add388eddd2c056e1e523e33d90cc5f02 (patch) | |
tree | ce332eeb0b37119ee7888b6613240cacbc1f6114 /internal/git | |
parent | cdb513169e7c062f99aa831f827660f869465454 (diff) |
Use core delta islands to increase opportunity of pack reuse
Including counter to track how often repack happens.
Adding feature toggle to enable usage of delta core islands.
Part of: https://gitlab.com/gitlab-org/gitaly/issues/1519
Diffstat (limited to 'internal/git')
-rw-r--r-- | internal/git/objectpool/fetch.go | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/internal/git/objectpool/fetch.go b/internal/git/objectpool/fetch.go index b042706a0..37ad27746 100644 --- a/internal/git/objectpool/fetch.go +++ b/internal/git/objectpool/fetch.go @@ -12,12 +12,14 @@ import ( "strings" "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" + "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/internal/command" "gitlab.com/gitlab-org/gitaly/internal/git" "gitlab.com/gitlab-org/gitaly/internal/git/repository" "gitlab.com/gitlab-org/gitaly/internal/git/updateref" "gitlab.com/gitlab-org/gitaly/internal/helper" + "gitlab.com/gitlab-org/gitaly/internal/metadata/featureflag" "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" ) @@ -26,6 +28,21 @@ const ( sourceRefNamespace = "refs/remotes/" + sourceRemote ) +var ( + // FullRepackCounter is a counter used to track full repacks (with/without core delta islands). + FullRepackCounter = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitaly_full_repack_total", + Help: "Counter of repack commands run with/without core delta island use", + }, + []string{"core_island"}, + ) +) + +func init() { + prometheus.Register(FullRepackCounter) +} + // FetchFromOrigin initializes the pool and fetches the objects from its origin repository func (o *ObjectPool) FetchFromOrigin(ctx context.Context, origin *gitalypb.Repository) error { if err := o.Init(ctx); err != nil { @@ -171,11 +188,24 @@ func rescueDanglingObjects(ctx context.Context, repo repository.GitRepo) error { } func repackPool(ctx context.Context, pool repository.GitRepo) error { - repackArgs := []git.Option{ - git.ValueFlag{"-c", "pack.island=" + sourceRefNamespace + "/heads"}, - git.ValueFlag{"-c", "pack.island=" + sourceRefNamespace + "/tags"}, - git.ValueFlag{"-c", "pack.writeBitmapHashCache=true"}, + var repackArgs []git.Option + if featureflag.IsEnabled(ctx, featureflag.UseCoreDeltaIslands) { + FullRepackCounter.WithLabelValues("yes").Inc() + repackArgs = []git.Option{ + git.ValueFlag{"-c", "pack.island=" + sourceRefNamespace + "/he(a)ds"}, + git.ValueFlag{"-c", "pack.island=" + sourceRefNamespace + "/t(a)gs"}, + git.ValueFlag{"-c", "pack.islandCore=a"}, + } + } else { + FullRepackCounter.WithLabelValues("no").Inc() + repackArgs = []git.Option{ + git.ValueFlag{"-c", "pack.island=" + sourceRefNamespace + "/heads"}, + git.ValueFlag{"-c", "pack.island=" + sourceRefNamespace + "/tags"}, + } } + + repackArgs = append(repackArgs, git.ValueFlag{"-c", "pack.writeBitmapHashCache=true"}) + repackCmd, err := git.SafeCmd(ctx, pool, repackArgs, git.SubCmd{ Name: "repack", Flags: []git.Option{git.Flag{"-aidb"}}, |