diff options
author | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-02-27 15:54:44 +0100 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-02-27 15:54:44 +0100 |
commit | a140e1a43e8e8c6b19f3d2f3825654eb34d6290b (patch) | |
tree | a403771333fb6f62c77d469eca19121ea788eafd /node-repository | |
parent | 56f42da9139d39e60cfcabea7a051cbb6186a661 (diff) |
Deploy zone-app faster
Diffstat (limited to 'node-repository')
3 files changed, 20 insertions, 21 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 f729c30de20..5e5b3546ced 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 @@ -12,15 +12,12 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import java.time.Duration; import java.time.Instant; -import java.util.LinkedHashSet; -import java.util.List; import java.util.Optional; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; /** * @author bratseth @@ -75,17 +72,8 @@ public abstract class ApplicationMaintainer extends Maintainer { protected Deployer deployer() { return deployer; } - protected Set<ApplicationId> applicationsNeedingMaintenance() { - return nodesNeedingMaintenance().stream() - .map(node -> node.allocation().get().owner()) - .collect(Collectors.toCollection(LinkedHashSet::new)); - } - - /** - * Returns the nodes whose applications should be maintained by this now. - * This should be some subset of the allocated nodes. - */ - protected abstract List<Node> nodesNeedingMaintenance(); + /** Returns the applications that should be maintained by this now. */ + protected abstract Set<ApplicationId> applicationsNeedingMaintenance(); /** Redeploy this application. A lock will be taken for the duration of the deployment activation */ protected final void deployWithLock(ApplicationId application) { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainer.java index 45db9ea90d9..b9e27e5d4ae 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainer.java @@ -3,14 +3,18 @@ package com.yahoo.vespa.hosted.provision.maintenance; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Deployer; +import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; +import com.yahoo.vespa.hosted.provision.node.Allocation; import java.time.Clock; import java.time.Duration; import java.time.Instant; -import java.util.List; +import java.util.LinkedHashSet; +import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; /** @@ -26,6 +30,8 @@ import java.util.stream.Collectors; */ public class OperatorChangeApplicationMaintainer extends ApplicationMaintainer { + private static final ApplicationId ZONE_APPLICATION_ID = ApplicationId.from("hosted-vespa", "routing", "default"); + private final Clock clock; private Instant previousRun; @@ -38,22 +44,28 @@ public class OperatorChangeApplicationMaintainer extends ApplicationMaintainer { } @Override - protected List<Node> nodesNeedingMaintenance() { + protected Set<ApplicationId> applicationsNeedingMaintenance() { Instant windowEnd = clock.instant(); Instant windowStart = previousRun; previousRun = windowEnd; return nodeRepository().getNodes().stream() - .filter(node -> node.allocation().isPresent()) .filter(node -> hasManualStateChangeSince(windowStart, node)) - .collect(Collectors.toList()); + .flatMap(node -> owner(node).stream()) + .collect(Collectors.toCollection(LinkedHashSet::new)); } - + private boolean hasManualStateChangeSince(Instant instant, Node node) { return node.history().events().stream() .anyMatch(event -> event.agent() == Agent.operator && event.at().isAfter(instant)); } - /** + private Optional<ApplicationId> owner(Node node) { + if (node.allocation().isPresent()) return node.allocation().map(Allocation::owner); + + return node.type() == NodeType.host ? Optional.of(ZONE_APPLICATION_ID) : Optional.empty(); + } + + /** * Deploy in the maintenance thread to avoid scheduling multiple deployments of the same application if it takes * longer to deploy than the (short) maintenance interval of this */ diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java index ff0773fde71..2525dbecca2 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java @@ -75,7 +75,6 @@ public class PeriodicApplicationMaintainer extends ApplicationMaintainer { return clock.instant().isBefore(start.plus(minTimeBetweenRedeployments)); } - @Override protected List<Node> nodesNeedingMaintenance() { return nodeRepository().getNodes(Node.State.active); } |