From 5b917202405a2b1a92e545f68e41f6e7fcbeda3d Mon Sep 17 00:00:00 2001 From: Ewen Cluley Date: Tue, 30 Mar 2021 11:17:20 +0100 Subject: [PATCH] Use exponential backoff when retrying from 10ms to 100ms --- .../java/io/fabric8/maven/docker/service/RunService.java | 5 +++-- .../java/io/fabric8/maven/docker/service/RunServiceTest.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/fabric8/maven/docker/service/RunService.java b/src/main/java/io/fabric8/maven/docker/service/RunService.java index 61faaecc2..989be60d5 100644 --- a/src/main/java/io/fabric8/maven/docker/service/RunService.java +++ b/src/main/java/io/fabric8/maven/docker/service/RunService.java @@ -21,6 +21,7 @@ import java.io.File; import java.time.Duration; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -469,8 +470,8 @@ private void startContainer(ImageConfiguration imageConfig, String id, GavLabel private void updateMappedPortsAndAddresses(String containerId, PortMapping mappedPorts) throws DockerAccessException { RetryPolicy retryPolicy = new RetryPolicy() - .withMaxAttempts(10) - .withDelay(Duration.ofMillis(250)) + .withMaxAttempts(20) + .withBackoff(10, 100, ChronoUnit.MILLIS) .handle(PortBindingException.class) .onFailedAttempt(f -> log.debug("Failed to update mapped ports for container %s (attempt %d), retrying", containerId, f.getAttemptCount())) diff --git a/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java b/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java index 6343ac7bd..7d2fc405d 100644 --- a/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java +++ b/src/test/java/io/fabric8/maven/docker/service/RunServiceTest.java @@ -371,7 +371,7 @@ public void failAfterRetryingIfInsufficientPortBindingInformation( new Expectations() {{ docker.createContainer(withAny(new ContainerCreateConfig("img")), anyString); result = "containerId"; portMapping.needsPropertiesUpdate(); result = true; - queryService.getMandatoryContainer("containerId"); result = container; times = 10; + queryService.getMandatoryContainer("containerId"); result = container; times = 20; container.isRunning(); result = true; container.getPortBindings(); result = new PortBindingException("5432/tcp", new Gson().fromJson("{\"5432/tcp\": []}", JsonObject.class)); }};