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:
authorPavlo Strokov <pstrokov@gitlab.com>2020-01-28 11:18:32 +0300
committerPavlo Strokov <pstrokov@gitlab.com>2020-01-28 11:18:32 +0300
commit6dd32f2add388eddd2c056e1e523e33d90cc5f02 (patch)
treece332eeb0b37119ee7888b6613240cacbc1f6114 /internal/git
parentcdb513169e7c062f99aa831f827660f869465454 (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.go38
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"}},