aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-08-02 10:53:19 +0200
committerMartin Polden <mpolden@mpolden.no>2018-08-02 11:37:08 +0200
commit9cfe5dad619b29bff97ddc408e86f0bef8abcdd5 (patch)
tree3b0bc1cd2a9ae788a02abecb8d7025fe5091709e /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java
parent06ad98ef6c60e875733c8345baf767fbff71eb57 (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.java22
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);
+ }
+ }
+
}