Refactor NewAbstractManager
to require a context used for the monitoring.
This commit is contained in:
@ -169,8 +169,9 @@ func createNomadManager(ctx context.Context) (
|
||||
return runnerManager, environmentManager
|
||||
}
|
||||
|
||||
func createAWSManager(_ context.Context) (runnerManager runner.Manager, environmentManager environment.ManagerHandler) {
|
||||
runnerManager = runner.NewAWSRunnerManager()
|
||||
func createAWSManager(ctx context.Context) (
|
||||
runnerManager runner.Manager, environmentManager environment.ManagerHandler) {
|
||||
runnerManager = runner.NewAWSRunnerManager(ctx)
|
||||
return runnerManager, environment.NewAWSEnvironmentManager(runnerManager)
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,7 @@ func TestAWSDisabledUsesNomadManager(t *testing.T) {
|
||||
cancel()
|
||||
|
||||
runnerManager, environmentManager := createManagerHandler(createNomadManager, true,
|
||||
runner.NewAbstractManager(), &environment.AbstractManager{}, disableRecovery)
|
||||
runner.NewAbstractManager(disableRecovery), &environment.AbstractManager{}, disableRecovery)
|
||||
awsRunnerManager, awsEnvironmentManager := createManagerHandler(createAWSManager, false,
|
||||
runnerManager, environmentManager, disableRecovery)
|
||||
assert.Equal(t, runnerManager, awsRunnerManager)
|
||||
@ -29,7 +29,7 @@ func TestAWSEnabledWrappesNomadManager(t *testing.T) {
|
||||
cancel()
|
||||
|
||||
runnerManager, environmentManager := createManagerHandler(createNomadManager, true,
|
||||
runner.NewAbstractManager(), &environment.AbstractManager{}, disableRecovery)
|
||||
runner.NewAbstractManager(disableRecovery), &environment.AbstractManager{}, disableRecovery)
|
||||
awsRunnerManager, awsEnvironmentManager := createManagerHandler(createAWSManager,
|
||||
true, runnerManager, environmentManager, disableRecovery)
|
||||
assert.NotEqual(t, runnerManager, awsRunnerManager)
|
||||
|
@ -13,7 +13,9 @@ import (
|
||||
)
|
||||
|
||||
func TestAWSEnvironmentManager_CreateOrUpdate(t *testing.T) {
|
||||
runnerManager := runner.NewAWSRunnerManager()
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
runnerManager := runner.NewAWSRunnerManager(ctx)
|
||||
m := NewAWSEnvironmentManager(runnerManager)
|
||||
uniqueImage := "java11Exec"
|
||||
|
||||
@ -45,7 +47,9 @@ func TestAWSEnvironmentManager_CreateOrUpdate(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)
|
||||
|
||||
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) {
|
||||
runnerManager := runner.NewAWSRunnerManager()
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
runnerManager := runner.NewAWSRunnerManager(ctx)
|
||||
m := NewAWSEnvironmentManager(runnerManager)
|
||||
|
||||
t.Run("also returns environments of the rest of the manager chain", func(t *testing.T) {
|
||||
|
@ -24,12 +24,12 @@ type AbstractManager struct {
|
||||
|
||||
// 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.
|
||||
func NewAbstractManager() *AbstractManager {
|
||||
func NewAbstractManager(ctx context.Context) *AbstractManager {
|
||||
return &AbstractManager{
|
||||
environments: storage.NewMonitoredLocalStorage[ExecutionEnvironment](
|
||||
monitoring.MeasurementEnvironments, monitorEnvironmentData, 0, context.Background()),
|
||||
monitoring.MeasurementEnvironments, monitorEnvironmentData, 0, ctx),
|
||||
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() {
|
||||
return n.nextHandler
|
||||
} else {
|
||||
return NewAbstractManager()
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
return NewAbstractManager(ctx)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package runner
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/openHPI/poseidon/pkg/dto"
|
||||
"time"
|
||||
@ -11,8 +12,8 @@ type AWSRunnerManager struct {
|
||||
}
|
||||
|
||||
// NewAWSRunnerManager creates a new runner manager that keeps track of all runners at AWS.
|
||||
func NewAWSRunnerManager() *AWSRunnerManager {
|
||||
return &AWSRunnerManager{NewAbstractManager()}
|
||||
func NewAWSRunnerManager(ctx context.Context) *AWSRunnerManager {
|
||||
return &AWSRunnerManager{NewAbstractManager(ctx)}
|
||||
}
|
||||
|
||||
func (a AWSRunnerManager) Claim(id dto.EnvironmentID, duration int) (Runner, error) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package runner
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openHPI/poseidon/pkg/dto"
|
||||
"github.com/openHPI/poseidon/tests"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@ -9,7 +10,9 @@ import (
|
||||
)
|
||||
|
||||
func TestAWSRunnerManager_EnvironmentAccessor(t *testing.T) {
|
||||
m := NewAWSRunnerManager()
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
m := NewAWSRunnerManager(ctx)
|
||||
|
||||
environments := m.ListEnvironments()
|
||||
assert.Empty(t, environments)
|
||||
@ -30,7 +33,9 @@ func TestAWSRunnerManager_EnvironmentAccessor(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)
|
||||
r, err := NewAWSFunctionWorkload(environment, nil)
|
||||
assert.NoError(t, err)
|
||||
@ -56,7 +61,9 @@ func TestAWSRunnerManager_Claim(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)
|
||||
m.StoreEnvironment(environment)
|
||||
r, err := NewAWSFunctionWorkload(environment, nil)
|
||||
|
@ -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.
|
||||
// If you cancel the context the background synchronization will be stopped.
|
||||
func NewNomadRunnerManager(apiClient nomad.ExecutorAPI, ctx context.Context) *NomadRunnerManager {
|
||||
m := &NomadRunnerManager{NewAbstractManager(), apiClient}
|
||||
m := &NomadRunnerManager{NewAbstractManager(ctx), apiClient}
|
||||
go m.keepRunnersSynced(ctx)
|
||||
return m
|
||||
}
|
||||
|
Reference in New Issue
Block a user