aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
diff options
context:
space:
mode:
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java72
1 files changed, 1 insertions, 71 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
index b48d69447a8..a74f3b2d116 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
@@ -4,7 +4,6 @@ package com.yahoo.vespa.hosted.provision.provisioning;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Flavor;
-import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.NodeType;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.hosted.provision.Node;
@@ -15,7 +14,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -44,17 +42,15 @@ public class NodePrioritizer {
private final boolean isDocker;
private final boolean isAllocatingForReplacement;
private final Set<Node> spareHosts;
- private final Map<Node, ResourceCapacity> headroomHosts;
NodePrioritizer(List<Node> allNodes, ApplicationId appId, ClusterSpec clusterSpec, NodeSpec nodeSpec,
- NodeFlavors nodeFlavors, int spares, NameResolver nameResolver) {
+ int spares, NameResolver nameResolver) {
this.allNodes = Collections.unmodifiableList(allNodes);
this.requestedNodes = nodeSpec;
this.clusterSpec = clusterSpec;
this.appId = appId;
this.nameResolver = nameResolver;
this.spareHosts = findSpareHosts(allNodes, spares);
- this.headroomHosts = findHeadroomHosts(allNodes, spareHosts, nodeFlavors);
this.capacity = new DockerHostCapacity(allNodes);
@@ -93,62 +89,6 @@ public class NodePrioritizer {
}
/**
- * Headroom hosts are the host with the least but sufficient capacity for the requested headroom.
- *
- * If not enough headroom - the headroom violating hosts are the once that are closest to fulfill
- * a headroom request.
- */
- private static Map<Node, ResourceCapacity> findHeadroomHosts(List<Node> nodes, Set<Node> spareNodes, NodeFlavors flavors) {
- DockerHostCapacity capacity = new DockerHostCapacity(nodes);
- Map<Node, ResourceCapacity> headroomHosts = new HashMap<>();
-
- List<Node> hostsSortedOnLeastCapacity = nodes.stream()
- .filter(n -> !spareNodes.contains(n))
- .filter(node -> node.type().equals(NodeType.host))
- .filter(dockerHost -> dockerHost.state().equals(Node.State.active))
- .filter(dockerHost -> capacity.freeIPs(dockerHost) > 0)
- .sorted((a, b) -> capacity.compareWithoutInactive(b, a))
- .collect(Collectors.toList());
-
- // For all flavors with ideal headroom - find which hosts this headroom should be allocated to
- for (Flavor flavor : flavors.getFlavors().stream().filter(f -> f.getIdealHeadroom() > 0).collect(Collectors.toList())) {
- Set<Node> tempHeadroom = new HashSet<>();
- Set<Node> notEnoughCapacity = new HashSet<>();
-
- ResourceCapacity headroomCapacity = ResourceCapacity.of(flavor);
-
- // Select hosts that has available capacity for both headroom and for new allocations
- for (Node host : hostsSortedOnLeastCapacity) {
- if (headroomHosts.containsKey(host)) continue;
- if (capacity.hasCapacityWhenRetiredAndInactiveNodesAreGone(host, headroomCapacity)) {
- headroomHosts.put(host, headroomCapacity);
- tempHeadroom.add(host);
- } else {
- notEnoughCapacity.add(host);
- }
-
- if (tempHeadroom.size() == flavor.getIdealHeadroom()) {
- break;
- }
- }
-
- // Now check if we have enough headroom - if not choose the nodes that almost has it
- if (tempHeadroom.size() < flavor.getIdealHeadroom()) {
- List<Node> violations = notEnoughCapacity.stream()
- .sorted((a, b) -> capacity.compare(b, a))
- .limit(flavor.getIdealHeadroom() - tempHeadroom.size())
- .collect(Collectors.toList());
-
- for (Node hostViolatingHeadrom : violations) {
- headroomHosts.put(hostViolatingHeadrom, headroomCapacity);
- }
- }
- }
-
- return headroomHosts;
- }
-
- /**
* @return The list of nodes sorted by PrioritizableNode::compare
*/
List<PrioritizableNode> prioritize() {
@@ -257,16 +197,6 @@ public class NodePrioritizer {
if (spareHosts.contains(parent)) {
pri.violatesSpares = true;
}
-
- if (headroomHosts.containsKey(parent) && isPreferredNodeToBeReloacted(allNodes, node, parent)) {
- ResourceCapacity neededCapacity = headroomHosts.get(parent);
-
- // If the node is new then we need to check the headroom requirement after it has been added
- if (isNewNode) {
- neededCapacity = ResourceCapacity.composite(neededCapacity, new ResourceCapacity(node));
- }
- pri.violatesHeadroom = !capacity.hasCapacity(parent, neededCapacity);
- }
}
return pri;