diff options
author | John Cai <jcai@gitlab.com> | 2022-06-02 17:49:04 +0300 |
---|---|---|
committer | John Cai <jcai@gitlab.com> | 2022-07-13 19:00:04 +0300 |
commit | 7ed10ad441251c13a6b1759f7aa50f01d12a08e4 (patch) | |
tree | d2934723566a77cd089ea50eac5ee4b4d990c3af | |
parent | 0f8ab08a73426a0181c6ab6eb6b8641878a822e6 (diff) |
Provide ConcurrencyTracker through service dependencies
Add ConcurrencyTracker as a service dependency and set up the
boilerplate code that includes it in the NewServer invocation. A future
commit will actually instantiate it in the main goroutine and pass it
in.
21 files changed, 111 insertions, 78 deletions
diff --git a/cmd/gitaly-hooks/hooks_test.go b/cmd/gitaly-hooks/hooks_test.go index 9db2ea23f..bf82351ca 100644 --- a/cmd/gitaly-hooks/hooks_test.go +++ b/cmd/gitaly-hooks/hooks_test.go @@ -624,7 +624,7 @@ func (svc featureFlagAsserter) PackObjectsHookWithSidechannel(ctx context.Contex func runHookServiceWithGitlabClient(t *testing.T, cfg config.Cfg, gitlabClient gitlab.Client, serverOpts ...testserver.GitalyServerOpt) { testserver.RunGitalyServer(t, cfg, nil, func(srv *grpc.Server, deps *service.Dependencies) { gitalypb.RegisterHookServiceServer(srv, featureFlagAsserter{ - t: t, wrapped: hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache()), + t: t, wrapped: hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker()), }) }, append(serverOpts, testserver.WithGitLabClient(gitlabClient))...) } diff --git a/internal/git/localrepo/remote_extra_test.go b/internal/git/localrepo/remote_extra_test.go index 012843230..34f9ea556 100644 --- a/internal/git/localrepo/remote_extra_test.go +++ b/internal/git/localrepo/remote_extra_test.go @@ -36,8 +36,7 @@ func TestRepo_FetchInternal(t *testing.T) { gitalypb.RegisterHookServiceServer(srv, hook.NewServer( deps.GetHookManager(), deps.GetGitCmdFactory(), - deps.GetPackObjectsCache(), - )) + deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) gitalypb.RegisterRepositoryServiceServer(srv, repository.NewServer( deps.GetCfg(), deps.GetRubyServer(), diff --git a/internal/git/updateref/update_with_hooks_test.go b/internal/git/updateref/update_with_hooks_test.go index fa02c5069..f351e6c49 100644 --- a/internal/git/updateref/update_with_hooks_test.go +++ b/internal/git/updateref/update_with_hooks_test.go @@ -98,7 +98,7 @@ func TestUpdaterWithHooks_UpdateReference(t *testing.T) { // We need to set up a separate "real" hook service here, as it will be used in // git-update-ref(1) spawned by `updateRefWithHooks()` testserver.RunGitalyServer(t, cfg, nil, func(srv *grpc.Server, deps *service.Dependencies) { - gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) }) user := &gitalypb.User{ diff --git a/internal/gitaly/service/cleanup/testhelper_test.go b/internal/gitaly/service/cleanup/testhelper_test.go index e869be767..867973e07 100644 --- a/internal/gitaly/service/cleanup/testhelper_test.go +++ b/internal/gitaly/service/cleanup/testhelper_test.go @@ -43,7 +43,7 @@ func runCleanupServiceServer(t *testing.T, cfg config.Cfg) string { deps.GetGitCmdFactory(), deps.GetCatfileCache(), )) - gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) gitalypb.RegisterRepositoryServiceServer(srv, repository.NewServer( deps.GetCfg(), deps.GetRubyServer(), diff --git a/internal/gitaly/service/conflicts/testhelper_test.go b/internal/gitaly/service/conflicts/testhelper_test.go index efb45bf0a..49dac5af2 100644 --- a/internal/gitaly/service/conflicts/testhelper_test.go +++ b/internal/gitaly/service/conflicts/testhelper_test.go @@ -69,7 +69,7 @@ func runConflictsServer(t testing.TB, cfg config.Cfg, hookManager hook.Manager) deps.GetGitCmdFactory(), deps.GetTxManager(), )) - gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) gitalypb.RegisterCommitServiceServer(srv, commit.NewServer( deps.GetLocator(), deps.GetGitCmdFactory(), diff --git a/internal/gitaly/service/dependencies.go b/internal/gitaly/service/dependencies.go index f0efa6fec..d6c89e6b8 100644 --- a/internal/gitaly/service/dependencies.go +++ b/internal/gitaly/service/dependencies.go @@ -22,23 +22,24 @@ import ( // Dependencies assembles set of components required by different kinds of services. type Dependencies struct { - Cfg config.Cfg - RubyServer *rubyserver.Server - GitalyHookManager gitalyhook.Manager - TransactionManager transaction.Manager - StorageLocator storage.Locator - ClientPool *client.Pool - GitCmdFactory git.CommandFactory - Linguist *linguist.Instance - BackchannelRegistry *backchannel.Registry - GitlabClient gitlab.Client - CatfileCache catfile.Cache - DiskCache cache.Cache - PackObjectsCache streamcache.Cache - LimitHandler *limithandler.LimiterMiddleware - Git2goExecutor *git2go.Executor - UpdaterWithHooks *updateref.UpdaterWithHooks - HousekeepingManager housekeeping.Manager + Cfg config.Cfg + RubyServer *rubyserver.Server + GitalyHookManager gitalyhook.Manager + TransactionManager transaction.Manager + StorageLocator storage.Locator + ClientPool *client.Pool + GitCmdFactory git.CommandFactory + Linguist *linguist.Instance + BackchannelRegistry *backchannel.Registry + GitlabClient gitlab.Client + CatfileCache catfile.Cache + DiskCache cache.Cache + PackObjectsCache streamcache.Cache + PackObjectsConcurrencyTracker *gitalyhook.ConcurrencyTracker + LimitHandler *limithandler.LimiterMiddleware + Git2goExecutor *git2go.Executor + UpdaterWithHooks *updateref.UpdaterWithHooks + HousekeepingManager housekeeping.Manager } // GetCfg returns service configuration. @@ -106,6 +107,11 @@ func (dc *Dependencies) GetPackObjectsCache() streamcache.Cache { return dc.PackObjectsCache } +// GetPackObjectsConcurrencyTracker returns the pack-objects cache. +func (dc *Dependencies) GetPackObjectsConcurrencyTracker() *gitalyhook.ConcurrencyTracker { + return dc.PackObjectsConcurrencyTracker +} + // GetLimitHandler returns the RPC limit handler. func (dc *Dependencies) GetLimitHandler() *limithandler.LimiterMiddleware { return dc.LimitHandler diff --git a/internal/gitaly/service/hook/server.go b/internal/gitaly/service/hook/server.go index 746fe2fc9..c04f82edb 100644 --- a/internal/gitaly/service/hook/server.go +++ b/internal/gitaly/service/hook/server.go @@ -9,17 +9,24 @@ import ( type server struct { gitalypb.UnimplementedHookServiceServer - manager gitalyhook.Manager - gitCmdFactory git.CommandFactory - packObjectsCache streamcache.Cache + manager gitalyhook.Manager + gitCmdFactory git.CommandFactory + packObjectsCache streamcache.Cache + concurrencyTracker *gitalyhook.ConcurrencyTracker } // NewServer creates a new instance of a gRPC namespace server -func NewServer(manager gitalyhook.Manager, gitCmdFactory git.CommandFactory, packObjectsCache streamcache.Cache) gitalypb.HookServiceServer { +func NewServer( + manager gitalyhook.Manager, + gitCmdFactory git.CommandFactory, + packObjectsCache streamcache.Cache, + concurrencyTracker *gitalyhook.ConcurrencyTracker, +) gitalypb.HookServiceServer { srv := &server{ - manager: manager, - gitCmdFactory: gitCmdFactory, - packObjectsCache: packObjectsCache, + manager: manager, + gitCmdFactory: gitCmdFactory, + packObjectsCache: packObjectsCache, + concurrencyTracker: concurrencyTracker, } return srv diff --git a/internal/gitaly/service/hook/testhelper_test.go b/internal/gitaly/service/hook/testhelper_test.go index d01156891..7bd07dfa1 100644 --- a/internal/gitaly/service/hook/testhelper_test.go +++ b/internal/gitaly/service/hook/testhelper_test.go @@ -62,6 +62,7 @@ func runHooksServer(t testing.TB, cfg config.Cfg, opts []serverOption, serverOpt gitalyhook.NewManager(deps.GetCfg(), deps.GetLocator(), deps.GetGitCmdFactory(), deps.GetTxManager(), deps.GetGitlabClient()), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), + deps.GetPackObjectsConcurrencyTracker(), ) for _, opt := range opts { opt(hookServer.(*server)) diff --git a/internal/gitaly/service/objectpool/testhelper_test.go b/internal/gitaly/service/objectpool/testhelper_test.go index 82793239d..bb8c17f05 100644 --- a/internal/gitaly/service/objectpool/testhelper_test.go +++ b/internal/gitaly/service/objectpool/testhelper_test.go @@ -76,8 +76,7 @@ func runObjectPoolServer(t *testing.T, cfg config.Cfg, locator storage.Locator, gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer( deps.GetHookManager(), deps.GetGitCmdFactory(), - deps.GetPackObjectsCache(), - )) + deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) gitalypb.RegisterRepositoryServiceServer(srv, repository.NewServer( cfg, deps.GetRubyServer(), diff --git a/internal/gitaly/service/operations/branches_test.go b/internal/gitaly/service/operations/branches_test.go index 6973f389f..35e9e5fd8 100644 --- a/internal/gitaly/service/operations/branches_test.go +++ b/internal/gitaly/service/operations/branches_test.go @@ -135,7 +135,7 @@ func TestUserCreateBranch_transactions(t *testing.T) { deps.GetCatfileCache(), deps.GetUpdaterWithHooks(), )) - gitalypb.RegisterHookServiceServer(srv, hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) // Praefect proxy execution disabled as praefect runs only on the UNIX socket, but // the test requires a TCP listening address. }, testserver.WithDisablePraefect()) diff --git a/internal/gitaly/service/operations/tags_test.go b/internal/gitaly/service/operations/tags_test.go index 897a7b965..37e30c5c8 100644 --- a/internal/gitaly/service/operations/tags_test.go +++ b/internal/gitaly/service/operations/tags_test.go @@ -262,7 +262,7 @@ func TestUserCreateTagWithTransaction(t *testing.T) { deps.GetCatfileCache(), deps.GetUpdaterWithHooks(), )) - gitalypb.RegisterHookServiceServer(srv, hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) }) ctx := testhelper.Context(t) diff --git a/internal/gitaly/service/operations/testhelper_test.go b/internal/gitaly/service/operations/testhelper_test.go index 4adb75e5f..1eda70801 100644 --- a/internal/gitaly/service/operations/testhelper_test.go +++ b/internal/gitaly/service/operations/testhelper_test.go @@ -102,7 +102,7 @@ func runOperationServiceServer(t testing.TB, cfg config.Cfg, options ...testserv ) gitalypb.RegisterOperationServiceServer(srv, operationServer) - gitalypb.RegisterHookServiceServer(srv, hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) gitalypb.RegisterRepositoryServiceServer(srv, repository.NewServer( deps.GetCfg(), nil, diff --git a/internal/gitaly/service/ref/delete_refs_test.go b/internal/gitaly/service/ref/delete_refs_test.go index e71e548be..f179298a7 100644 --- a/internal/gitaly/service/ref/delete_refs_test.go +++ b/internal/gitaly/service/ref/delete_refs_test.go @@ -106,7 +106,7 @@ func TestDeleteRefs_transaction(t *testing.T) { deps.GetGit2goExecutor(), deps.GetHousekeepingManager(), )) - gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) }, testserver.WithTransactionManager(txManager)) cfg.SocketPath = addr diff --git a/internal/gitaly/service/ref/testhelper_test.go b/internal/gitaly/service/ref/testhelper_test.go index dc1c6e498..0157c40e9 100644 --- a/internal/gitaly/service/ref/testhelper_test.go +++ b/internal/gitaly/service/ref/testhelper_test.go @@ -65,7 +65,7 @@ func runRefServiceServer(t testing.TB, cfg config.Cfg) string { deps.GetTxManager(), deps.GetCatfileCache(), )) - gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) gitalypb.RegisterRepositoryServiceServer(srv, repository.NewServer( deps.GetCfg(), deps.GetRubyServer(), diff --git a/internal/gitaly/service/repository/testhelper_test.go b/internal/gitaly/service/repository/testhelper_test.go index 4e23841c8..2ab8d552a 100644 --- a/internal/gitaly/service/repository/testhelper_test.go +++ b/internal/gitaly/service/repository/testhelper_test.go @@ -122,7 +122,7 @@ func runRepositoryService(t testing.TB, cfg config.Cfg, rubySrv *rubyserver.Serv deps.GetGit2goExecutor(), deps.GetHousekeepingManager(), )) - gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) gitalypb.RegisterRemoteServiceServer(srv, remote.NewServer( deps.GetLocator(), deps.GetGitCmdFactory(), diff --git a/internal/gitaly/service/setup/register.go b/internal/gitaly/service/setup/register.go index 1f4c570d0..a3ddffb02 100644 --- a/internal/gitaly/service/setup/register.go +++ b/internal/gitaly/service/setup/register.go @@ -144,6 +144,7 @@ func RegisterAll(srv *grpc.Server, deps *service.Dependencies) { deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), + deps.GetPackObjectsConcurrencyTracker(), )) gitalypb.RegisterInternalGitalyServer(srv, internalgitaly.NewServer(deps.GetCfg().Storages)) diff --git a/internal/gitaly/service/smarthttp/receive_pack_test.go b/internal/gitaly/service/smarthttp/receive_pack_test.go index 981e658e5..cbbcd6d9c 100644 --- a/internal/gitaly/service/smarthttp/receive_pack_test.go +++ b/internal/gitaly/service/smarthttp/receive_pack_test.go @@ -705,7 +705,7 @@ func TestPostReceivePack_referenceTransactionHook(t *testing.T) { deps.GetTxManager(), deps.GetDiskCache(), )) - gitalypb.RegisterHookServiceServer(srv, hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) }, testserver.WithDisablePraefect()) ctx, err := txinfo.InjectTransaction(ctx, 1234, "primary", true) @@ -801,7 +801,7 @@ func TestPostReceivePack_notAllowed(t *testing.T) { deps.GetTxManager(), deps.GetDiskCache(), )) - gitalypb.RegisterHookServiceServer(srv, hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hook.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) }, testserver.WithDisablePraefect(), testserver.WithHookManager(hookManager)) ctx, err := txinfo.InjectTransaction(testhelper.Context(t), 1234, "primary", true) diff --git a/internal/gitaly/service/smarthttp/testhelper_test.go b/internal/gitaly/service/smarthttp/testhelper_test.go index 9e69d15f7..19312bd98 100644 --- a/internal/gitaly/service/smarthttp/testhelper_test.go +++ b/internal/gitaly/service/smarthttp/testhelper_test.go @@ -47,7 +47,7 @@ func startSmartHTTPServerWithOptions(t *testing.T, cfg config.Cfg, opts []Server deps.GetGit2goExecutor(), deps.GetHousekeepingManager(), )) - gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) }, serverOpts...) } diff --git a/internal/gitaly/service/ssh/testhelper_test.go b/internal/gitaly/service/ssh/testhelper_test.go index 1ad2ab99a..2361af04a 100644 --- a/internal/gitaly/service/ssh/testhelper_test.go +++ b/internal/gitaly/service/ssh/testhelper_test.go @@ -29,7 +29,13 @@ func runSSHServerWithOptions(t *testing.T, cfg config.Cfg, opts []ServerOpt, ser deps.GetGitCmdFactory(), deps.GetTxManager(), opts...)) - gitalypb.RegisterHookServiceServer(srv, hookservice.NewServer(deps.GetHookManager(), deps.GetGitCmdFactory(), deps.GetPackObjectsCache())) + gitalypb.RegisterHookServiceServer(srv, + hookservice.NewServer( + deps.GetHookManager(), + deps.GetGitCmdFactory(), + deps.GetPackObjectsCache(), + deps.GetPackObjectsConcurrencyTracker(), + )) gitalypb.RegisterRepositoryServiceServer(srv, repository.NewServer( cfg, deps.GetRubyServer(), diff --git a/internal/gitaly/service/wiki/testhelper_test.go b/internal/gitaly/service/wiki/testhelper_test.go index 5402870c9..db4207ffd 100644 --- a/internal/gitaly/service/wiki/testhelper_test.go +++ b/internal/gitaly/service/wiki/testhelper_test.go @@ -76,8 +76,7 @@ func setupWikiService(t testing.TB, cfg config.Cfg, rubySrv *rubyserver.Server) gitalypb.RegisterHookServiceServer(srv, hook.NewServer( deps.GetHookManager(), deps.GetGitCmdFactory(), - deps.GetPackObjectsCache(), - )) + deps.GetPackObjectsCache(), deps.GetPackObjectsConcurrencyTracker())) gitalypb.RegisterWikiServiceServer(srv, NewServer(deps.GetRubyServer(), deps.GetLocator())) gitalypb.RegisterRepositoryServiceServer(srv, repository.NewServer( cfg, diff --git a/internal/testhelper/testserver/gitaly.go b/internal/testhelper/testserver/gitaly.go index 0313ba34c..9c10f506c 100644 --- a/internal/testhelper/testserver/gitaly.go +++ b/internal/testhelper/testserver/gitaly.go @@ -226,23 +226,24 @@ func registerHealthServerIfNotRegistered(srv *grpc.Server) { } type gitalyServerDeps struct { - disablePraefect bool - logger *logrus.Logger - conns *client.Pool - locator storage.Locator - txMgr transaction.Manager - hookMgr hook.Manager - gitlabClient gitlab.Client - gitCmdFactory git.CommandFactory - linguist *linguist.Instance - backchannelReg *backchannel.Registry - catfileCache catfile.Cache - diskCache cache.Cache - packObjectsCache streamcache.Cache - limitHandler *limithandler.LimiterMiddleware - git2goExecutor *git2go.Executor - updaterWithHooks *updateref.UpdaterWithHooks - housekeepingManager housekeeping.Manager + disablePraefect bool + logger *logrus.Logger + conns *client.Pool + locator storage.Locator + txMgr transaction.Manager + hookMgr hook.Manager + gitlabClient gitlab.Client + gitCmdFactory git.CommandFactory + linguist *linguist.Instance + backchannelReg *backchannel.Registry + catfileCache catfile.Cache + diskCache cache.Cache + packObjectsCache streamcache.Cache + packObjectsConcurrencyTracker *hook.ConcurrencyTracker + limitHandler *limithandler.LimiterMiddleware + git2goExecutor *git2go.Executor + updaterWithHooks *updateref.UpdaterWithHooks + housekeepingManager housekeeping.Manager } func (gsd *gitalyServerDeps) createDependencies(t testing.TB, cfg config.Cfg, rubyServer *rubyserver.Server) *service.Dependencies { @@ -301,6 +302,10 @@ func (gsd *gitalyServerDeps) createDependencies(t testing.TB, cfg config.Cfg, ru t.Cleanup(gsd.packObjectsCache.Stop) } + if gsd.packObjectsConcurrencyTracker == nil { + gsd.packObjectsConcurrencyTracker = hook.NewConcurrencyTracker() + } + if gsd.limitHandler == nil { gsd.limitHandler = limithandler.New(cfg, limithandler.LimitConcurrencyByRepo, limithandler.WithConcurrencyLimiters) } @@ -318,23 +323,24 @@ func (gsd *gitalyServerDeps) createDependencies(t testing.TB, cfg config.Cfg, ru } return &service.Dependencies{ - Cfg: cfg, - RubyServer: rubyServer, - ClientPool: gsd.conns, - StorageLocator: gsd.locator, - TransactionManager: gsd.txMgr, - GitalyHookManager: gsd.hookMgr, - GitCmdFactory: gsd.gitCmdFactory, - Linguist: gsd.linguist, - BackchannelRegistry: gsd.backchannelReg, - GitlabClient: gsd.gitlabClient, - CatfileCache: gsd.catfileCache, - DiskCache: gsd.diskCache, - PackObjectsCache: gsd.packObjectsCache, - LimitHandler: gsd.limitHandler, - Git2goExecutor: gsd.git2goExecutor, - UpdaterWithHooks: gsd.updaterWithHooks, - HousekeepingManager: gsd.housekeepingManager, + Cfg: cfg, + RubyServer: rubyServer, + ClientPool: gsd.conns, + StorageLocator: gsd.locator, + TransactionManager: gsd.txMgr, + GitalyHookManager: gsd.hookMgr, + GitCmdFactory: gsd.gitCmdFactory, + Linguist: gsd.linguist, + BackchannelRegistry: gsd.backchannelReg, + GitlabClient: gsd.gitlabClient, + CatfileCache: gsd.catfileCache, + DiskCache: gsd.diskCache, + PackObjectsCache: gsd.packObjectsCache, + PackObjectsConcurrencyTracker: gsd.packObjectsConcurrencyTracker, + LimitHandler: gsd.limitHandler, + Git2goExecutor: gsd.git2goExecutor, + UpdaterWithHooks: gsd.updaterWithHooks, + HousekeepingManager: gsd.housekeepingManager, } } @@ -413,3 +419,12 @@ func WithDiskCache(diskCache cache.Cache) GitalyServerOpt { return deps } } + +// WithConcurrencyTracker sets the PackObjectsConcurrencyTracker that will be +// used for gitaly services initialization. +func WithConcurrencyTracker(tracker *hook.ConcurrencyTracker) GitalyServerOpt { + return func(deps gitalyServerDeps) gitalyServerDeps { + deps.packObjectsConcurrencyTracker = tracker + return deps + } +} |