From e465b0aa4f59684ac7dd094692e7a08325c4464c Mon Sep 17 00:00:00 2001
From: Steve Azzopardi <steveazz@outlook.com>
Date: Wed, 23 Jan 2019 15:08:52 +0100
Subject: [PATCH] Update ExecutorProvider interface signature

Update the `Release` signature of the `ExecutorProvider` interface.
Returning an error when releasing a resource is not actionable, and all
of the implementations of `ExecutorProvider` do not return an error.
---
 commands/multi.go                         | 11 ++---------
 common/executor.go                        |  2 +-
 common/mock_ExecutorProvider.go           | 13 ++-----------
 executors/default_executor_provider.go    |  4 +---
 executors/docker/machine/provider.go      |  5 ++---
 executors/docker/machine/provider_test.go |  3 +--
 6 files changed, 9 insertions(+), 29 deletions(-)

diff --git a/commands/multi.go b/commands/multi.go
index 4f45f7cff..fd32de0e0 100644
--- a/commands/multi.go
+++ b/commands/multi.go
@@ -216,21 +216,14 @@ func (mr *RunCommand) acquireRunnerResources(provider common.ExecutorProvider, r
 		return nil, func() {}, fmt.Errorf("failed to update executor: %v", err)
 	}
 
-	releaseProviderFn := func() {
-		err := provider.Release(runner, executorData)
-		if err != nil {
-			logrus.WithError(err).Error("Failed to release executor")
-		}
-	}
-
 	if !mr.buildsHelper.acquireBuild(runner) {
-		releaseProviderFn()
+		provider.Release(runner, executorData)
 		return nil, nil, errors.New("failed to request job, runner limit met")
 	}
 
 	releaseFn := func() {
 		mr.buildsHelper.releaseBuild(runner)
-		releaseProviderFn()
+		provider.Release(runner, executorData)
 	}
 
 	return executorData, releaseFn, nil
diff --git a/common/executor.go b/common/executor.go
index f8ceb36c8..8dbed88b2 100644
--- a/common/executor.go
+++ b/common/executor.go
@@ -48,7 +48,7 @@ type ExecutorProvider interface {
 	CanCreate() bool
 	Create() Executor
 	Acquire(config *RunnerConfig) (ExecutorData, error)
-	Release(config *RunnerConfig, data ExecutorData) error
+	Release(config *RunnerConfig, data ExecutorData)
 	GetFeatures(features *FeaturesInfo) error
 	GetDefaultShell() string
 }
diff --git a/common/mock_ExecutorProvider.go b/common/mock_ExecutorProvider.go
index 2e5488e35..47722361f 100644
--- a/common/mock_ExecutorProvider.go
+++ b/common/mock_ExecutorProvider.go
@@ -93,15 +93,6 @@ func (_m *MockExecutorProvider) GetFeatures(features *FeaturesInfo) error {
 }
 
 // Release provides a mock function with given fields: config, data
-func (_m *MockExecutorProvider) Release(config *RunnerConfig, data ExecutorData) error {
-	ret := _m.Called(config, data)
-
-	var r0 error
-	if rf, ok := ret.Get(0).(func(*RunnerConfig, ExecutorData) error); ok {
-		r0 = rf(config, data)
-	} else {
-		r0 = ret.Error(0)
-	}
-
-	return r0
+func (_m *MockExecutorProvider) Release(config *RunnerConfig, data ExecutorData) {
+	_m.Called(config, data)
 }
diff --git a/executors/default_executor_provider.go b/executors/default_executor_provider.go
index 67a4a60cd..ebffd49a3 100644
--- a/executors/default_executor_provider.go
+++ b/executors/default_executor_provider.go
@@ -27,9 +27,7 @@ func (e DefaultExecutorProvider) Acquire(config *common.RunnerConfig) (common.Ex
 	return nil, nil
 }
 
-func (e DefaultExecutorProvider) Release(config *common.RunnerConfig, data common.ExecutorData) error {
-	return nil
-}
+func (e DefaultExecutorProvider) Release(config *common.RunnerConfig, data common.ExecutorData) {}
 
 func (e DefaultExecutorProvider) GetFeatures(features *common.FeaturesInfo) error {
 	if e.FeaturesUpdater == nil {
diff --git a/executors/docker/machine/provider.go b/executors/docker/machine/provider.go
index 9111022e8..8e7f2cbc3 100644
--- a/executors/docker/machine/provider.go
+++ b/executors/docker/machine/provider.go
@@ -379,7 +379,7 @@ func (m *machineProvider) Use(config *common.RunnerConfig, data common.ExecutorD
 	return
 }
 
-func (m *machineProvider) Release(config *common.RunnerConfig, data common.ExecutorData) error {
+func (m *machineProvider) Release(config *common.RunnerConfig, data common.ExecutorData) {
 	// Release machine
 	details, ok := data.(*machineDetails)
 	if ok {
@@ -393,12 +393,11 @@ func (m *machineProvider) Release(config *common.RunnerConfig, data common.Execu
 			config.Machine.MaxBuilds > 0 && details.UsedCount >= config.Machine.MaxBuilds {
 			err := m.remove(details.Name, "Too many builds")
 			if err == nil {
-				return nil
+				return
 			}
 		}
 		details.State = machineStateIdle
 	}
-	return nil
 }
 
 func (m *machineProvider) CanCreate() bool {
diff --git a/executors/docker/machine/provider_test.go b/executors/docker/machine/provider_test.go
index d81e500d4..3b0aaf9ea 100644
--- a/executors/docker/machine/provider_test.go
+++ b/executors/docker/machine/provider_test.go
@@ -564,8 +564,7 @@ func TestMachineReleaseIfInvalidDataArePassed(t *testing.T) {
 	assert.NotNil(t, nd)
 	assertTotalMachines(t, p, 1, "it creates one machine")
 
-	err = p.Release(nil, nd)
-	assert.NoError(t, err, "it should not fail")
+	p.Release(nil, nd)
 }
 
 func TestMachineCreationIfFailedToConnect(t *testing.T) {
-- 
GitLab