Refactor NewAbstractManager

to require a context used for the monitoring.
This commit is contained in:
Maximilian Paß
2023-09-04 11:44:36 +02:00
parent b28b87d56f
commit 0d6b4f660c
7 changed files with 34 additions and 17 deletions

View File

@ -169,8 +169,9 @@ func createNomadManager(ctx context.Context) (
return runnerManager, environmentManager return runnerManager, environmentManager
} }
func createAWSManager(_ context.Context) (runnerManager runner.Manager, environmentManager environment.ManagerHandler) { func createAWSManager(ctx context.Context) (
runnerManager = runner.NewAWSRunnerManager() runnerManager runner.Manager, environmentManager environment.ManagerHandler) {
runnerManager = runner.NewAWSRunnerManager(ctx)
return runnerManager, environment.NewAWSEnvironmentManager(runnerManager) return runnerManager, environment.NewAWSEnvironmentManager(runnerManager)
} }

View File

@ -17,7 +17,7 @@ func TestAWSDisabledUsesNomadManager(t *testing.T) {
cancel() cancel()
runnerManager, environmentManager := createManagerHandler(createNomadManager, true, runnerManager, environmentManager := createManagerHandler(createNomadManager, true,
runner.NewAbstractManager(), &environment.AbstractManager{}, disableRecovery) runner.NewAbstractManager(disableRecovery), &environment.AbstractManager{}, disableRecovery)
awsRunnerManager, awsEnvironmentManager := createManagerHandler(createAWSManager, false, awsRunnerManager, awsEnvironmentManager := createManagerHandler(createAWSManager, false,
runnerManager, environmentManager, disableRecovery) runnerManager, environmentManager, disableRecovery)
assert.Equal(t, runnerManager, awsRunnerManager) assert.Equal(t, runnerManager, awsRunnerManager)
@ -29,7 +29,7 @@ func TestAWSEnabledWrappesNomadManager(t *testing.T) {
cancel() cancel()
runnerManager, environmentManager := createManagerHandler(createNomadManager, true, runnerManager, environmentManager := createManagerHandler(createNomadManager, true,
runner.NewAbstractManager(), &environment.AbstractManager{}, disableRecovery) runner.NewAbstractManager(disableRecovery), &environment.AbstractManager{}, disableRecovery)
awsRunnerManager, awsEnvironmentManager := createManagerHandler(createAWSManager, awsRunnerManager, awsEnvironmentManager := createManagerHandler(createAWSManager,
true, runnerManager, environmentManager, disableRecovery) true, runnerManager, environmentManager, disableRecovery)
assert.NotEqual(t, runnerManager, awsRunnerManager) assert.NotEqual(t, runnerManager, awsRunnerManager)

View File

@ -13,7 +13,9 @@ import (
) )
func TestAWSEnvironmentManager_CreateOrUpdate(t *testing.T) { func TestAWSEnvironmentManager_CreateOrUpdate(t *testing.T) {
runnerManager := runner.NewAWSRunnerManager() ctx, cancel := context.WithCancel(context.Background())
defer cancel()
runnerManager := runner.NewAWSRunnerManager(ctx)
m := NewAWSEnvironmentManager(runnerManager) m := NewAWSEnvironmentManager(runnerManager)
uniqueImage := "java11Exec" uniqueImage := "java11Exec"
@ -45,7 +47,9 @@ func TestAWSEnvironmentManager_CreateOrUpdate(t *testing.T) {
} }
func TestAWSEnvironmentManager_Get(t *testing.T) { func TestAWSEnvironmentManager_Get(t *testing.T) {
runnerManager := runner.NewAWSRunnerManager() ctx, cancel := context.WithCancel(context.Background())
defer cancel()
runnerManager := runner.NewAWSRunnerManager(ctx)
m := NewAWSEnvironmentManager(runnerManager) m := NewAWSEnvironmentManager(runnerManager)
t.Run("Calls next handler when not found", func(t *testing.T) { t.Run("Calls next handler when not found", func(t *testing.T) {
@ -79,7 +83,9 @@ func TestAWSEnvironmentManager_Get(t *testing.T) {
} }
func TestAWSEnvironmentManager_List(t *testing.T) { func TestAWSEnvironmentManager_List(t *testing.T) {
runnerManager := runner.NewAWSRunnerManager() ctx, cancel := context.WithCancel(context.Background())
defer cancel()
runnerManager := runner.NewAWSRunnerManager(ctx)
m := NewAWSEnvironmentManager(runnerManager) m := NewAWSEnvironmentManager(runnerManager)
t.Run("also returns environments of the rest of the manager chain", func(t *testing.T) { t.Run("also returns environments of the rest of the manager chain", func(t *testing.T) {

View File

@ -24,12 +24,12 @@ type AbstractManager struct {
// NewAbstractManager creates a new abstract runner manager that keeps track of all runners of one kind. // NewAbstractManager creates a new abstract runner manager that keeps track of all runners of one kind.
// Since this manager is currently directly bound to the lifespan of Poseidon, it does not need a context cancel. // Since this manager is currently directly bound to the lifespan of Poseidon, it does not need a context cancel.
func NewAbstractManager() *AbstractManager { func NewAbstractManager(ctx context.Context) *AbstractManager {
return &AbstractManager{ return &AbstractManager{
environments: storage.NewMonitoredLocalStorage[ExecutionEnvironment]( environments: storage.NewMonitoredLocalStorage[ExecutionEnvironment](
monitoring.MeasurementEnvironments, monitorEnvironmentData, 0, context.Background()), monitoring.MeasurementEnvironments, monitorEnvironmentData, 0, ctx),
usedRunners: storage.NewMonitoredLocalStorage[Runner]( usedRunners: storage.NewMonitoredLocalStorage[Runner](
monitoring.MeasurementUsedRunner, MonitorRunnersEnvironmentID, time.Hour, context.Background()), monitoring.MeasurementUsedRunner, MonitorRunnersEnvironmentID, time.Hour, ctx),
} }
} }
@ -55,7 +55,9 @@ func (n *AbstractManager) NextHandler() AccessorHandler {
if n.HasNextHandler() { if n.HasNextHandler() {
return n.nextHandler return n.nextHandler
} else { } else {
return NewAbstractManager() ctx, cancel := context.WithCancel(context.Background())
cancel()
return NewAbstractManager(ctx)
} }
} }

View File

@ -1,6 +1,7 @@
package runner package runner
import ( import (
"context"
"fmt" "fmt"
"github.com/openHPI/poseidon/pkg/dto" "github.com/openHPI/poseidon/pkg/dto"
"time" "time"
@ -11,8 +12,8 @@ type AWSRunnerManager struct {
} }
// NewAWSRunnerManager creates a new runner manager that keeps track of all runners at AWS. // NewAWSRunnerManager creates a new runner manager that keeps track of all runners at AWS.
func NewAWSRunnerManager() *AWSRunnerManager { func NewAWSRunnerManager(ctx context.Context) *AWSRunnerManager {
return &AWSRunnerManager{NewAbstractManager()} return &AWSRunnerManager{NewAbstractManager(ctx)}
} }
func (a AWSRunnerManager) Claim(id dto.EnvironmentID, duration int) (Runner, error) { func (a AWSRunnerManager) Claim(id dto.EnvironmentID, duration int) (Runner, error) {

View File

@ -1,6 +1,7 @@
package runner package runner
import ( import (
"context"
"github.com/openHPI/poseidon/pkg/dto" "github.com/openHPI/poseidon/pkg/dto"
"github.com/openHPI/poseidon/tests" "github.com/openHPI/poseidon/tests"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -9,7 +10,9 @@ import (
) )
func TestAWSRunnerManager_EnvironmentAccessor(t *testing.T) { func TestAWSRunnerManager_EnvironmentAccessor(t *testing.T) {
m := NewAWSRunnerManager() ctx, cancel := context.WithCancel(context.Background())
defer cancel()
m := NewAWSRunnerManager(ctx)
environments := m.ListEnvironments() environments := m.ListEnvironments()
assert.Empty(t, environments) assert.Empty(t, environments)
@ -30,7 +33,9 @@ func TestAWSRunnerManager_EnvironmentAccessor(t *testing.T) {
} }
func TestAWSRunnerManager_Claim(t *testing.T) { func TestAWSRunnerManager_Claim(t *testing.T) {
m := NewAWSRunnerManager() ctx, cancel := context.WithCancel(context.Background())
defer cancel()
m := NewAWSRunnerManager(ctx)
environment := createBasicEnvironmentMock(defaultEnvironmentID) environment := createBasicEnvironmentMock(defaultEnvironmentID)
r, err := NewAWSFunctionWorkload(environment, nil) r, err := NewAWSFunctionWorkload(environment, nil)
assert.NoError(t, err) assert.NoError(t, err)
@ -56,7 +61,9 @@ func TestAWSRunnerManager_Claim(t *testing.T) {
} }
func TestAWSRunnerManager_Return(t *testing.T) { func TestAWSRunnerManager_Return(t *testing.T) {
m := NewAWSRunnerManager() ctx, cancel := context.WithCancel(context.Background())
defer cancel()
m := NewAWSRunnerManager(ctx)
environment := createBasicEnvironmentMock(defaultEnvironmentID) environment := createBasicEnvironmentMock(defaultEnvironmentID)
m.StoreEnvironment(environment) m.StoreEnvironment(environment)
r, err := NewAWSFunctionWorkload(environment, nil) r, err := NewAWSFunctionWorkload(environment, nil)

View File

@ -32,7 +32,7 @@ type NomadRunnerManager struct {
// It uses the apiClient for all requests and runs a background task to keep the runners in sync with Nomad. // It uses the apiClient for all requests and runs a background task to keep the runners in sync with Nomad.
// If you cancel the context the background synchronization will be stopped. // If you cancel the context the background synchronization will be stopped.
func NewNomadRunnerManager(apiClient nomad.ExecutorAPI, ctx context.Context) *NomadRunnerManager { func NewNomadRunnerManager(apiClient nomad.ExecutorAPI, ctx context.Context) *NomadRunnerManager {
m := &NomadRunnerManager{NewAbstractManager(), apiClient} m := &NomadRunnerManager{NewAbstractManager(ctx), apiClient}
go m.keepRunnersSynced(ctx) go m.keepRunnersSynced(ctx)
return m return m
} }