Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ linters:
# Checks the number of lines in a function.
# If lower than 0, disable the check.
# Default: 60
lines: 100
lines: 250
# Checks the number of statements in a function.
# If lower than 0, disable the check.
# Default: 40
Expand Down
8 changes: 3 additions & 5 deletions cmd/cachewd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,9 @@ func main() {
return tokenManagerProvider()
})

scheduler, err := jobscheduler.New(ctx, globalConfig.SchedulerConfig)
kctx.FatalIfErrorf(err, "failed to create scheduler")
defer scheduler.Close()
schedulerProvider := jobscheduler.NewProvider(ctx, globalConfig.SchedulerConfig)

cr, sr := newRegistries(scheduler, managerProvider, tokenManagerProvider)
cr, sr := newRegistries(schedulerProvider, managerProvider, tokenManagerProvider)

// Commands
switch { //nolint:gocritic
Expand Down Expand Up @@ -105,7 +103,7 @@ func main() {
kctx.FatalIfErrorf(err)
}

func newRegistries(scheduler jobscheduler.Scheduler, cloneManagerProvider gitclone.ManagerProvider, tokenManagerProvider githubapp.TokenManagerProvider) (*cache.Registry, *strategy.Registry) {
func newRegistries(scheduler jobscheduler.Provider, cloneManagerProvider gitclone.ManagerProvider, tokenManagerProvider githubapp.TokenManagerProvider) (*cache.Registry, *strategy.Registry) {
cr := cache.NewRegistry()
cache.RegisterMemory(cr)
cache.RegisterDisk(cr)
Expand Down
9 changes: 9 additions & 0 deletions internal/jobscheduler/jobs.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,15 @@ type RootScheduler struct {

var _ Scheduler = &RootScheduler{}

type Provider func() (*RootScheduler, error)

// NewProvider returns a scheduler singleton provider function.
func NewProvider(ctx context.Context, config Config) Provider {
return sync.OnceValues(func() (*RootScheduler, error) {
return New(ctx, config)
})
}

// New creates a new JobScheduler.
func New(ctx context.Context, config Config) (*RootScheduler, error) {
if config.Concurrency == 0 {
Expand Down
9 changes: 7 additions & 2 deletions internal/strategy/git/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import (
"github.com/block/cachew/internal/strategy"
)

func Register(r *strategy.Registry, scheduler jobscheduler.Scheduler, cloneManagerProvider gitclone.ManagerProvider, tokenManagerProvider githubapp.TokenManagerProvider) {
func Register(r *strategy.Registry, scheduler jobscheduler.Provider, cloneManagerProvider gitclone.ManagerProvider, tokenManagerProvider githubapp.TokenManagerProvider) {
strategy.Register(r, "git", "Caches Git repositories, including tarball snapshots.", func(ctx context.Context, config Config, cache cache.Cache, mux strategy.Mux) (*Strategy, error) {
return New(ctx, config, scheduler, cache, mux, cloneManagerProvider, tokenManagerProvider)
})
Expand All @@ -54,7 +54,7 @@ type Strategy struct {
func New(
ctx context.Context,
config Config,
scheduler jobscheduler.Scheduler,
schedulerProvider jobscheduler.Provider,
cache cache.Cache,
mux strategy.Mux,
cloneManagerProvider gitclone.ManagerProvider,
Expand Down Expand Up @@ -94,6 +94,11 @@ func New(
}
}

scheduler, err := schedulerProvider()
if err != nil {
return nil, errors.Wrap(err, "failed to create scheduler")
}

s := &Strategy{
config: config,
cache: cache,
Expand Down
7 changes: 2 additions & 5 deletions internal/strategy/git/git_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,9 @@ func (m *testMux) HandleFunc(pattern string, handler func(http.ResponseWriter, *
m.handlers[pattern] = http.HandlerFunc(handler)
}

func newTestScheduler(ctx context.Context, t *testing.T) jobscheduler.Scheduler {
func newTestScheduler(ctx context.Context, t *testing.T) jobscheduler.Provider {
t.Helper()
s, err := jobscheduler.New(ctx, jobscheduler.Config{})
assert.NoError(t, err)
t.Cleanup(func() { s.Close() })
return s
return jobscheduler.NewProvider(ctx, jobscheduler.Config{})
}

func TestNew(t *testing.T) {
Expand Down