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

@ -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) {

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.
// 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)
}
}

View File

@ -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) {

View File

@ -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)

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.
// 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
}