diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-08-02 10:53:19 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-08-02 11:37:08 +0200 |
commit | 9cfe5dad619b29bff97ddc408e86f0bef8abcdd5 (patch) | |
tree | 3b0bc1cd2a9ae788a02abecb8d7025fe5091709e /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java | |
parent | 06ad98ef6c60e875733c8345baf767fbff71eb57 (diff) |
Shut down deployment executor properly
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java index e93926e121c..62dc9c2395f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java @@ -17,8 +17,9 @@ import java.util.List; import java.util.Optional; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -33,7 +34,10 @@ public abstract class ApplicationMaintainer extends Maintainer { // Use a fixed thread pool to avoid overload on config servers. Resource usage when deploying varies // a lot between applications, so doing one by one avoids issues where one or more resource-demanding // deployments happen simultaneously - private final Executor deploymentExecutor = Executors.newSingleThreadExecutor(new DaemonThreadFactory("node repo application maintainer")); + private final ThreadPoolExecutor deploymentExecutor = new ThreadPoolExecutor(1, 1, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>(), + new DaemonThreadFactory("node repo application maintainer")); protected ApplicationMaintainer(Deployer deployer, NodeRepository nodeRepository, Duration interval, JobControl jobControl) { super(nodeRepository, interval, jobControl); @@ -115,4 +119,16 @@ public abstract class ApplicationMaintainer extends Maintainer { return ! nodeRepository().getNodes(application, Node.State.active).isEmpty(); } + @Override + public void deconstruct() { + super.deconstruct(); + this.deploymentExecutor.shutdownNow(); + try { + // Give deployments in progress some time to complete + this.deploymentExecutor.awaitTermination(1, TimeUnit.MINUTES); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } |