diff options
author | valerijf <valerijf@yahoo-inc.com> | 2017-03-22 09:43:01 +0100 |
---|---|---|
committer | valerijf <valerijf@yahoo-inc.com> | 2017-03-22 09:43:01 +0100 |
commit | 80aa8c2c577a3651c8683fe13175647414c5b01d (patch) | |
tree | a3f64f697c26a8fac81629cb6413d4ee22eb4c02 /docker-api | |
parent | 4800d24bb76cb5b70867093d86bcf9f7bd9b1625 (diff) |
awaitCompletion on docker stats until we get the first result
Diffstat (limited to 'docker-api')
-rw-r--r-- | docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java index 5a13c06909c..6b1d63dd12f 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java @@ -43,6 +43,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -278,7 +279,7 @@ public class DockerImpl implements Docker { public Optional<ContainerStats> getContainerStats(ContainerName containerName) { try { DockerStatsCallback statsCallback = dockerClient.statsCmd(containerName.asString()).exec(new DockerStatsCallback()); - statsCallback.awaitCompletion(10, TimeUnit.SECONDS); + statsCallback.awaitCompletion(5, TimeUnit.SECONDS); return statsCallback.stats.map(stats -> new ContainerStatsImpl( stats.getNetworks(), stats.getCpuStats(), stats.getMemoryStats(), stats.getBlkioStats())); @@ -446,16 +447,27 @@ public class DockerImpl implements Docker { } } + // docker-java currently (3.0.8) does not support getting docker stats with stream=false, therefore we need + // to subscribe to the stream and complete as soon we get the first result. private class DockerStatsCallback extends ResultCallbackTemplate<DockerStatsCallback, Statistics> { private Optional<Statistics> stats = Optional.empty(); + private final CountDownLatch completed = new CountDownLatch(1); @Override public void onNext(Statistics stats) { if (stats != null) { this.stats = Optional.of(stats); + completed.countDown(); onComplete(); } } + + @Override + public boolean awaitCompletion(long timeout, TimeUnit timeUnit) throws InterruptedException { + // For some reason it takes as long to execute onComplete as the awaitCompletion timeout is, therefore + // we have own awaitCompletion that completes as soon as we get the first result. + return completed.await(timeout, timeUnit); + } } private DockerClient initDockerConnection(final DockerConfig config, boolean fallbackTo123orErrors) { |