diff --git a/internal/nomad/nomad.go b/internal/nomad/nomad.go index 5232542..7a238a1 100644 --- a/internal/nomad/nomad.go +++ b/internal/nomad/nomad.go @@ -39,7 +39,7 @@ type ExecutorAPI interface { // LoadRunnerJobs loads all runner jobs specific for the environment. LoadRunnerJobs(environmentID dto.EnvironmentID) ([]*nomadApi.Job, error) - // LoadRunnerIDs returns the IDs of all runners with the specified id prefix which are running and not about to + // LoadRunnerIDs returns the IDs of all runners with the specified id prefix which are not about to // get stopped. LoadRunnerIDs(prefix string) (runnerIds []string, err error) @@ -101,8 +101,8 @@ func (a *APIClient) LoadRunnerIDs(prefix string) (runnerIDs []string, err error) return nil, err } for _, jobListStub := range list { - allocationRunning := jobListStub.JobSummary.Summary[TaskGroupName].Running > 0 - if jobListStub.Status == structs.JobStatusRunning && allocationRunning { + // Filter out dead ("complete", "failed" or "lost") jobs + if jobListStub.Status != structs.JobStatusDead { runnerIDs = append(runnerIDs, jobListStub.ID) } } diff --git a/internal/nomad/nomad_test.go b/internal/nomad/nomad_test.go index 7be9ca9..f6822dd 100644 --- a/internal/nomad/nomad_test.go +++ b/internal/nomad/nomad_test.go @@ -86,13 +86,14 @@ func (s *LoadRunnersTestSuite) TestAvailableRunnerIsReturned() { s.Equal(s.availableRunner.ID, returnedIds[0]) } -func (s *LoadRunnersTestSuite) TestPendingRunnerIsNotReturned() { +func (s *LoadRunnersTestSuite) TestPendingRunnerIsReturned() { s.mock.On("listJobs", mock.AnythingOfType("string")). Return([]*nomadApi.JobListStub{s.pendingRunner}, nil) returnedIds, err := s.nomadAPIClient.LoadRunnerIDs(s.jobID) s.Require().NoError(err) - s.Empty(returnedIds) + s.Len(returnedIds, 1) + s.Equal(s.pendingRunner.ID, returnedIds[0]) } func (s *LoadRunnersTestSuite) TestDeadRunnerIsNotReturned() { @@ -116,9 +117,11 @@ func (s *LoadRunnersTestSuite) TestReturnsAllAvailableRunners() { returnedIds, err := s.nomadAPIClient.LoadRunnerIDs(s.jobID) s.Require().NoError(err) - s.Len(returnedIds, 2) + s.Len(returnedIds, 3) s.Contains(returnedIds, s.availableRunner.ID) s.Contains(returnedIds, s.anotherAvailableRunner.ID) + s.Contains(returnedIds, s.pendingRunner.ID) + s.NotContains(returnedIds, s.deadRunner.ID) } const TestNamespace = "unit-tests"