Mark runner as used now asynchronously.
This commit is contained in:
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/stretchr/testify/mock"
|
"github.com/stretchr/testify/mock"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestConfigureNetworkCreatesNewNetworkWhenNoNetworkExists(t *testing.T) {
|
func TestConfigureNetworkCreatesNewNetworkWhenNoNetworkExists(t *testing.T) {
|
||||||
@ -188,5 +189,6 @@ func TestTwoSampleAddExactlyTwoRunners(t *testing.T) {
|
|||||||
_, ok = environment.Sample(apiMock)
|
_, ok = environment.Sample(apiMock)
|
||||||
require.True(t, ok)
|
require.True(t, ok)
|
||||||
|
|
||||||
|
<-time.After(tests.ShortTimeout) // New Runners are requested asynchronously
|
||||||
apiMock.AssertNumberOfCalls(t, "RegisterRunnerJob", 2)
|
apiMock.AssertNumberOfCalls(t, "RegisterRunnerJob", 2)
|
||||||
}
|
}
|
||||||
|
@ -141,23 +141,28 @@ func (m *NomadRunnerManager) Claim(environmentID dto.EnvironmentID, duration int
|
|||||||
if !ok {
|
if !ok {
|
||||||
return nil, ErrUnknownExecutionEnvironment
|
return nil, ErrUnknownExecutionEnvironment
|
||||||
}
|
}
|
||||||
log.Debug("Before Sample")
|
|
||||||
runner, ok := environment.Sample(m.apiClient)
|
runner, ok := environment.Sample(m.apiClient)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, ErrNoRunnersAvailable
|
return nil, ErrNoRunnersAvailable
|
||||||
}
|
}
|
||||||
|
|
||||||
m.usedRunners.Add(runner)
|
m.usedRunners.Add(runner)
|
||||||
log.Debug("Before Mark Runner As Used")
|
go m.markRunnerAsUsed(runner, duration)
|
||||||
err := m.apiClient.MarkRunnerAsUsed(runner.ID(), duration)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("can't mark runner as used: %w", err)
|
|
||||||
}
|
|
||||||
log.Debug("After Mark Runner As Used")
|
|
||||||
|
|
||||||
runner.SetupTimeout(time.Duration(duration) * time.Second)
|
runner.SetupTimeout(time.Duration(duration) * time.Second)
|
||||||
return runner, nil
|
return runner, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *NomadRunnerManager) markRunnerAsUsed(runner Runner, timeoutDuration int) {
|
||||||
|
err := m.apiClient.MarkRunnerAsUsed(runner.ID(), timeoutDuration)
|
||||||
|
if err != nil {
|
||||||
|
err = m.Return(runner)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).WithField("runnerID", runner.ID()).Error("can't mark runner as used and can't return runner")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (m *NomadRunnerManager) Get(runnerID string) (Runner, error) {
|
func (m *NomadRunnerManager) Get(runnerID string) (Runner, error) {
|
||||||
runner, ok := m.usedRunners.Get(runnerID)
|
runner, ok := m.usedRunners.Get(runnerID)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -150,6 +150,23 @@ func (s *ManagerTestSuite) TestClaimAddsRunnerToUsedRunners() {
|
|||||||
s.Equal(savedRunner, receivedRunner)
|
s.Equal(savedRunner, receivedRunner)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *ManagerTestSuite) TestClaimRemovesRunnerWhenMarkAsUsedFails() {
|
||||||
|
s.exerciseEnvironment.On("Sample", mock.Anything).Return(s.exerciseRunner, true)
|
||||||
|
s.apiMock.On("DeleteJob", mock.AnythingOfType("string")).Return(nil)
|
||||||
|
modifyMockedCall(s.apiMock, "MarkRunnerAsUsed", func(call *mock.Call) {
|
||||||
|
call.Run(func(args mock.Arguments) {
|
||||||
|
call.ReturnArguments = mock.Arguments{tests.ErrDefault}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
claimedRunner, err := s.nomadRunnerManager.Claim(defaultEnvironmentID, defaultInactivityTimeout)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
<-time.After(tests.ShortTimeout) // Claimed runners are marked as used asynchronously
|
||||||
|
s.apiMock.AssertCalled(s.T(), "DeleteJob", claimedRunner.ID())
|
||||||
|
_, ok := s.nomadRunnerManager.usedRunners.Get(claimedRunner.ID())
|
||||||
|
s.False(ok)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *ManagerTestSuite) TestGetReturnsRunnerIfRunnerIsUsed() {
|
func (s *ManagerTestSuite) TestGetReturnsRunnerIfRunnerIsUsed() {
|
||||||
s.nomadRunnerManager.usedRunners.Add(s.exerciseRunner)
|
s.nomadRunnerManager.usedRunners.Add(s.exerciseRunner)
|
||||||
savedRunner, err := s.nomadRunnerManager.Get(s.exerciseRunner.ID())
|
savedRunner, err := s.nomadRunnerManager.Get(s.exerciseRunner.ID())
|
||||||
|
Reference in New Issue
Block a user