diff --git a/multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/ResilientCloudControllerClient.java b/multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/ResilientCloudControllerClient.java index acffeeb34c..9e5a2352eb 100644 --- a/multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/ResilientCloudControllerClient.java +++ b/multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/ResilientCloudControllerClient.java @@ -47,9 +47,16 @@ public class ResilientCloudControllerClient implements CloudControllerClient { private final CloudControllerClientImpl delegate; + private final Supplier executorFactory; public ResilientCloudControllerClient(CloudControllerRestClient delegate) { + this(delegate, ResilientCloudOperationExecutor::new); + } + + protected ResilientCloudControllerClient(CloudControllerRestClient delegate, + Supplier executorFactory) { this.delegate = new CloudControllerClientImpl(delegate); + this.executorFactory = executorFactory; } @Override @@ -631,12 +638,14 @@ private void executeWithRetry(Runnable operation, HttpStatus... statusesToIgnore } private T executeWithRetry(Supplier operation, HttpStatus... statusesToIgnore) { - ResilientCloudOperationExecutor executor = new ResilientCloudOperationExecutor().withStatusesToIgnore(statusesToIgnore); + ResilientCloudOperationExecutor executor = executorFactory.get() + .withStatusesToIgnore(statusesToIgnore); return executor.execute(operation); } private T executeWithExponentialBackoff(Function operation, HttpStatus... statusesToIgnore) { - ResilientCloudOperationExecutor executor = new ResilientCloudOperationExecutor().withStatusesToIgnore(statusesToIgnore); + ResilientCloudOperationExecutor executor = executorFactory.get() + .withStatusesToIgnore(statusesToIgnore); return executor.executeWithExponentialBackoff(operation); } diff --git a/multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/util/ResilientCloudOperationExecutor.java b/multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/util/ResilientCloudOperationExecutor.java index fcb9e7d9e3..7b89e0fe96 100644 --- a/multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/util/ResilientCloudOperationExecutor.java +++ b/multiapps-controller-client/src/main/java/org/cloudfoundry/multiapps/controller/client/util/ResilientCloudOperationExecutor.java @@ -62,13 +62,13 @@ public ResilientCloudOperationExecutor withStatusesToIgnore(HttpStatus... status return this; } - ResilientCloudOperationExecutor withSleeper(LongConsumer sleeper) { - this.sleeper = sleeper; + public ResilientCloudOperationExecutor withRandomDelaySupplier(LongSupplier randomDelaySupplier) { + this.randomDelaySupplier = randomDelaySupplier; return this; } - ResilientCloudOperationExecutor withRandomDelaySupplier(LongSupplier randomDelaySupplier) { - this.randomDelaySupplier = randomDelaySupplier; + ResilientCloudOperationExecutor withSleeper(LongConsumer sleeper) { + this.sleeper = sleeper; return this; } diff --git a/multiapps-controller-client/src/test/java/org/cloudfoundry/multiapps/controller/client/ResilientCloudControllerClientTest.java b/multiapps-controller-client/src/test/java/org/cloudfoundry/multiapps/controller/client/ResilientCloudControllerClientTest.java index 07adea18c5..d2deb2c952 100644 --- a/multiapps-controller-client/src/test/java/org/cloudfoundry/multiapps/controller/client/ResilientCloudControllerClientTest.java +++ b/multiapps-controller-client/src/test/java/org/cloudfoundry/multiapps/controller/client/ResilientCloudControllerClientTest.java @@ -15,6 +15,7 @@ import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudSpace; import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudStack; import org.cloudfoundry.multiapps.controller.client.facade.rest.CloudControllerRestClient; +import org.cloudfoundry.multiapps.controller.client.util.ResilientCloudOperationExecutor; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -30,7 +31,8 @@ class ResilientCloudControllerClientTest { @BeforeEach void setUp() { restClient = Mockito.mock(CloudControllerRestClient.class); - client = new ResilientCloudControllerClient(restClient); + client = new ResilientCloudControllerClient(restClient, + () -> new ResilientCloudOperationExecutor().withWaitTimeBetweenRetriesInMillis(0)); } @Test diff --git a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/cf/clients/CustomControllerClientErrorHandlerTest.java b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/cf/clients/CustomControllerClientErrorHandlerTest.java index a8674bbc12..748dc28ca6 100644 --- a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/cf/clients/CustomControllerClientErrorHandlerTest.java +++ b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/cf/clients/CustomControllerClientErrorHandlerTest.java @@ -76,7 +76,7 @@ private static HttpStatusCodeException prepareHttpStatusCodeException(HttpStatus @Test void testHandleErrorsWithWrongExceptionType() { ResilientCloudOperationExecutor resilientCloudOperationExecutor = new ResilientCloudOperationExecutor().withWaitTimeBetweenRetriesInMillis( - 0); + 0).withRandomDelaySupplier(() -> 0); CustomControllerClientErrorHandler customControllerClientErrorHandler = new CustomControllerClientErrorHandler().withExecutorFactory( () -> resilientCloudOperationExecutor); Assertions.assertThrows(IllegalArgumentException.class, () -> customControllerClientErrorHandler.handleErrors(() -> {