summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-08-10 16:19:49 +0200
committerMartin Polden <mpolden@mpolden.no>2018-08-10 16:19:49 +0200
commit2d2d3ab3c093098882f2509a12aa6604dd8422ab (patch)
treeae20fcf348f8e86b2f5d11c26d9d5fb235c0e18a /node-repository
parent5694de3199a631126f6155f8cdc26cb26822a381 (diff)
Use addIfAbsent to ensure update/remove order
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java12
1 files changed, 5 insertions, 7 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 e3df6199d06..f729c30de20 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
@@ -29,7 +29,7 @@ import java.util.stream.Collectors;
public abstract class ApplicationMaintainer extends Maintainer {
private final Deployer deployer;
- private final List<ApplicationId> pendingDeployments = new CopyOnWriteArrayList<>();
+ private final CopyOnWriteArrayList<ApplicationId> pendingDeployments = new CopyOnWriteArrayList<>();
// 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
@@ -66,13 +66,11 @@ public abstract class ApplicationMaintainer extends Maintainer {
* even when deployments are slow.
*/
protected void deploy(ApplicationId application) {
- if (pendingDeployments.contains(application)) {
- return;// Avoid queuing multiple deployments for same application
+ if (pendingDeployments.addIfAbsent(application)) { // Avoid queuing multiple deployments for same application
+ log.log(LogLevel.INFO, application + " will be deployed, last deploy time " +
+ getLastDeployTime(application));
+ deploymentExecutor.execute(() -> deployWithLock(application));
}
- log.log(LogLevel.INFO, application + " will be deployed, last deploy time " +
- getLastDeployTime(application));
- pendingDeployments.add(application);
- deploymentExecutor.execute(() -> deployWithLock(application));
}
protected Deployer deployer() { return deployer; }