Fix Bug with the runner recovery

that the runners of the environment 10 are also recovered for the environment 1.
This commit is contained in:
Maximilian Paß
2021-10-22 14:34:22 +02:00
parent 24b22f2c40
commit 4db1ceb41e
3 changed files with 19 additions and 16 deletions

View File

@@ -8,6 +8,8 @@ import (
api "github.com/hashicorp/nomad/api" api "github.com/hashicorp/nomad/api"
config "github.com/openHPI/poseidon/internal/config" config "github.com/openHPI/poseidon/internal/config"
dto "github.com/openHPI/poseidon/pkg/dto"
io "io" io "io"
mock "github.com/stretchr/testify/mock" mock "github.com/stretchr/testify/mock"
@@ -187,13 +189,13 @@ func (_m *ExecutorAPIMock) LoadJobList() ([]*api.JobListStub, error) {
return r0, r1 return r0, r1
} }
// LoadRunnerIDs provides a mock function with given fields: environmentID // LoadRunnerIDs provides a mock function with given fields: prefix
func (_m *ExecutorAPIMock) LoadRunnerIDs(environmentID string) ([]string, error) { func (_m *ExecutorAPIMock) LoadRunnerIDs(prefix string) ([]string, error) {
ret := _m.Called(environmentID) ret := _m.Called(prefix)
var r0 []string var r0 []string
if rf, ok := ret.Get(0).(func(string) []string); ok { if rf, ok := ret.Get(0).(func(string) []string); ok {
r0 = rf(environmentID) r0 = rf(prefix)
} else { } else {
if ret.Get(0) != nil { if ret.Get(0) != nil {
r0 = ret.Get(0).([]string) r0 = ret.Get(0).([]string)
@@ -202,7 +204,7 @@ func (_m *ExecutorAPIMock) LoadRunnerIDs(environmentID string) ([]string, error)
var r1 error var r1 error
if rf, ok := ret.Get(1).(func(string) error); ok { if rf, ok := ret.Get(1).(func(string) error); ok {
r1 = rf(environmentID) r1 = rf(prefix)
} else { } else {
r1 = ret.Error(1) r1 = ret.Error(1)
} }
@@ -211,11 +213,11 @@ func (_m *ExecutorAPIMock) LoadRunnerIDs(environmentID string) ([]string, error)
} }
// LoadRunnerJobs provides a mock function with given fields: environmentID // LoadRunnerJobs provides a mock function with given fields: environmentID
func (_m *ExecutorAPIMock) LoadRunnerJobs(environmentID string) ([]*api.Job, error) { func (_m *ExecutorAPIMock) LoadRunnerJobs(environmentID dto.EnvironmentID) ([]*api.Job, error) {
ret := _m.Called(environmentID) ret := _m.Called(environmentID)
var r0 []*api.Job var r0 []*api.Job
if rf, ok := ret.Get(0).(func(string) []*api.Job); ok { if rf, ok := ret.Get(0).(func(dto.EnvironmentID) []*api.Job); ok {
r0 = rf(environmentID) r0 = rf(environmentID)
} else { } else {
if ret.Get(0) != nil { if ret.Get(0) != nil {
@@ -224,7 +226,7 @@ func (_m *ExecutorAPIMock) LoadRunnerJobs(environmentID string) ([]*api.Job, err
} }
var r1 error var r1 error
if rf, ok := ret.Get(1).(func(string) error); ok { if rf, ok := ret.Get(1).(func(dto.EnvironmentID) error); ok {
r1 = rf(environmentID) r1 = rf(environmentID)
} else { } else {
r1 = ret.Error(1) r1 = ret.Error(1)

View File

@@ -7,6 +7,7 @@ import (
nomadApi "github.com/hashicorp/nomad/api" nomadApi "github.com/hashicorp/nomad/api"
"github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/nomad/nomad/structs"
"github.com/openHPI/poseidon/internal/config" "github.com/openHPI/poseidon/internal/config"
"github.com/openHPI/poseidon/pkg/dto"
"github.com/openHPI/poseidon/pkg/logging" "github.com/openHPI/poseidon/pkg/logging"
"github.com/openHPI/poseidon/pkg/nullio" "github.com/openHPI/poseidon/pkg/nullio"
"io" "io"
@@ -33,11 +34,11 @@ type ExecutorAPI interface {
LoadEnvironmentJobs() ([]*nomadApi.Job, error) LoadEnvironmentJobs() ([]*nomadApi.Job, error)
// LoadRunnerJobs loads all runner jobs specific for the environment. // LoadRunnerJobs loads all runner jobs specific for the environment.
LoadRunnerJobs(environmentID string) ([]*nomadApi.Job, error) LoadRunnerJobs(environmentID dto.EnvironmentID) ([]*nomadApi.Job, error)
// LoadRunnerIDs returns the IDs of all runners of the specified environment which are running and not about to // LoadRunnerIDs returns the IDs of all runners with the specified id prefix which are running and not about to
// get stopped. // get stopped.
LoadRunnerIDs(environmentID string) (runnerIds []string, err error) LoadRunnerIDs(prefix string) (runnerIds []string, err error)
// LoadRunnerPortMappings returns the mapped ports of the runner. // LoadRunnerPortMappings returns the mapped ports of the runner.
LoadRunnerPortMappings(runnerID string) ([]nomadApi.PortMapping, error) LoadRunnerPortMappings(runnerID string) ([]nomadApi.PortMapping, error)
@@ -88,8 +89,8 @@ func (a *APIClient) init(nomadConfig *config.Nomad) error {
return nil return nil
} }
func (a *APIClient) LoadRunnerIDs(environmentID string) (runnerIDs []string, err error) { func (a *APIClient) LoadRunnerIDs(prefix string) (runnerIDs []string, err error) {
list, err := a.listJobs(environmentID) list, err := a.listJobs(prefix)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -113,8 +114,8 @@ func (a *APIClient) LoadRunnerPortMappings(runnerID string) ([]nomadApi.PortMapp
return alloc.AllocatedResources.Shared.Ports, nil return alloc.AllocatedResources.Shared.Ports, nil
} }
func (a *APIClient) LoadRunnerJobs(environmentID string) ([]*nomadApi.Job, error) { func (a *APIClient) LoadRunnerJobs(environmentID dto.EnvironmentID) ([]*nomadApi.Job, error) {
runnerIDs, err := a.LoadRunnerIDs(environmentID) runnerIDs, err := a.LoadRunnerIDs(RunnerJobID(environmentID, ""))
if err != nil { if err != nil {
return []*nomadApi.Job{}, fmt.Errorf("couldn't load jobs: %w", err) return []*nomadApi.Job{}, fmt.Errorf("couldn't load jobs: %w", err)
} }

View File

@@ -184,7 +184,7 @@ func (m *NomadRunnerManager) Return(r Runner) error {
func (m *NomadRunnerManager) Load() { func (m *NomadRunnerManager) Load() {
for _, environment := range m.environments.List() { for _, environment := range m.environments.List() {
environmentLogger := log.WithField("environmentID", environment.ID()) environmentLogger := log.WithField("environmentID", environment.ID())
runnerJobs, err := m.apiClient.LoadRunnerJobs(environment.ID().ToString()) runnerJobs, err := m.apiClient.LoadRunnerJobs(environment.ID())
if err != nil { if err != nil {
environmentLogger.WithError(err).Warn("Error fetching the runner jobs") environmentLogger.WithError(err).Warn("Error fetching the runner jobs")
} }