diff --git a/internal/environment/nomad_environment.go b/internal/environment/nomad_environment.go index c27b232..50d213d 100644 --- a/internal/environment/nomad_environment.go +++ b/internal/environment/nomad_environment.go @@ -243,7 +243,7 @@ func (n *NomadEnvironment) ApplyPrewarmingPoolSize() error { func (n *NomadEnvironment) Sample() (runner.Runner, bool) { r, ok := n.idleRunners.Sample() - if ok { + if ok && n.idleRunners.Length() < n.PrewarmingPoolSize() { go func() { err := util.RetryExponential(time.Second, func() error { return n.createRunner(false) @@ -252,6 +252,8 @@ func (n *NomadEnvironment) Sample() (runner.Runner, bool) { log.WithError(err).WithField("environmentID", n.ID()).Error("Couldn't create new runner for claimed one") } }() + } else if ok { + log.WithField("environment", n.ID().ToString()).Warn("Too many idle runner") } return r, ok } diff --git a/internal/environment/nomad_environment_test.go b/internal/environment/nomad_environment_test.go index 4dee667..f94e22c 100644 --- a/internal/environment/nomad_environment_test.go +++ b/internal/environment/nomad_environment_test.go @@ -178,6 +178,7 @@ func TestTwoSampleAddExactlyTwoRunners(t *testing.T) { _, job := helpers.CreateTemplateJob() environment := &NomadEnvironment{apiMock, templateEnvironmentJobHCL, job, storage.NewLocalStorage[runner.Runner](), nil, nil} + environment.SetPrewarmingPoolSize(2) runner1 := &runner.RunnerMock{} runner1.On("ID").Return(tests.DefaultRunnerID) runner2 := &runner.RunnerMock{}