summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2019-02-27 15:54:44 +0100
committerValerij Fredriksen <valerijf@verizonmedia.com>2019-02-27 15:54:44 +0100
commita140e1a43e8e8c6b19f3d2f3825654eb34d6290b (patch)
treea403771333fb6f62c77d469eca19121ea788eafd /node-repository
parent56f42da9139d39e60cfcabea7a051cbb6186a661 (diff)
Deploy zone-app faster
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java16
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainer.java24
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java1
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);
}