diff options
author | Valerij Fredriksen <valerijf@yahooinc.com> | 2022-02-02 23:38:56 +0100 |
---|---|---|
committer | Valerij Fredriksen <valerijf@yahooinc.com> | 2022-02-03 22:32:34 +0100 |
commit | ee735cda60f8f9d1b53cface5b7e6a008ee126ab (patch) | |
tree | b6a4b29bb952bee5a9a7c0856bd0e94104a88875 /node-repository | |
parent | 4fa56185803ebd2c7fad14a9a9ebc4ca6970d64f (diff) |
Make Nodes::canAllocateTenantNodeTo non-static
Diffstat (limited to 'node-repository')
4 files changed, 16 insertions, 14 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java index 341ab1f785c..e6476cd7373 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java @@ -26,7 +26,6 @@ import com.yahoo.vespa.hosted.provision.NodesAndHosts; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.History; import com.yahoo.vespa.hosted.provision.node.IP; -import com.yahoo.vespa.hosted.provision.node.Nodes; import com.yahoo.vespa.hosted.provision.provisioning.FatalProvisioningException; import com.yahoo.vespa.hosted.provision.provisioning.HostProvisioner; import com.yahoo.vespa.hosted.provision.provisioning.HostProvisioner.HostSharing; @@ -205,7 +204,7 @@ public class DynamicProvisioningMaintainer extends NodeRepositoryMaintainer { private Map<String, Node> findSharedHosts(NodeList nodeList) { return nodeList.stream() - .filter(node -> Nodes.canAllocateTenantNodeTo(node, true)) + .filter(node -> nodeRepository().nodes().canAllocateTenantNodeTo(node, true)) .filter(node -> node.reservedTo().isEmpty()) .filter(node -> node.exclusiveToApplicationId().isEmpty()) .collect(Collectors.toMap(Node::hostname, Function.identity())); @@ -298,7 +297,7 @@ public class DynamicProvisioningMaintainer extends NodeRepositoryMaintainer { int wantedGroups = 1; NodePrioritizer prioritizer = new NodePrioritizer(nodesAndHosts, applicationId, clusterSpec, nodeSpec, wantedGroups, - true, nodeRepository().nameResolver(), nodeRepository().resourcesCalculator(), + true, nodeRepository().nameResolver(), nodeRepository().nodes(), nodeRepository().resourcesCalculator(), nodeRepository().spareCount()); List<NodeCandidate> nodeCandidates = prioritizer.collect(List.of()); MutableInteger index = new MutableInteger(0); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java index 4c96e58d954..39857034b09 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java @@ -728,7 +728,7 @@ public class Nodes { return canAllocateTenantNodeTo(host, zone.getCloud().dynamicProvisioning()); } - public static boolean canAllocateTenantNodeTo(Node host, boolean dynamicProvisioning) { + public boolean canAllocateTenantNodeTo(Node host, boolean dynamicProvisioning) { if ( ! host.type().canRun(NodeType.tenant)) return false; if (host.status().wantToRetire()) return false; if (host.allocation().map(alloc -> alloc.membership().retired()).orElse(false)) return false; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java index 2d93763c631..ae65f367684 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java @@ -149,6 +149,7 @@ public class GroupPreparer { wantedGroups, nodeRepository.zone().getCloud().dynamicProvisioning(), nodeRepository.nameResolver(), + nodeRepository.nodes(), nodeRepository.resourcesCalculator(), nodeRepository.spareCount()); allocation.offer(prioritizer.collect(surplusActiveNodes)); 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 dd90c52840b..fe4eb5d68c9 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 @@ -30,13 +30,14 @@ import java.util.stream.Collectors; */ public class NodePrioritizer { - private final List<NodeCandidate> nodes = new ArrayList<>(); + private final List<NodeCandidate> candidates = new ArrayList<>(); private final NodesAndHosts<LockedNodeList> allNodesAndHosts; private final HostCapacity capacity; private final NodeSpec requestedNodes; private final ApplicationId application; private final ClusterSpec clusterSpec; private final NameResolver nameResolver; + private final Nodes nodes; private final boolean dynamicProvisioning; /** Whether node specification allows new nodes to be allocated. */ private final boolean canAllocateNew; @@ -46,7 +47,7 @@ public class NodePrioritizer { private final Set<Node> spareHosts; public NodePrioritizer(NodesAndHosts<LockedNodeList> allNodesAndHosts, ApplicationId application, ClusterSpec clusterSpec, NodeSpec nodeSpec, - int wantedGroups, boolean dynamicProvisioning, NameResolver nameResolver, + int wantedGroups, boolean dynamicProvisioning, NameResolver nameResolver, Nodes nodes, HostResourcesCalculator hostResourcesCalculator, int spareCount) { this.allNodesAndHosts = allNodesAndHosts; this.capacity = new HostCapacity(this.allNodesAndHosts, hostResourcesCalculator); @@ -58,6 +59,7 @@ public class NodePrioritizer { capacity.findSpareHostsInDynamicallyProvisionedZones(this.allNodesAndHosts.nodes().asList()) : capacity.findSpareHosts(this.allNodesAndHosts.nodes().asList(), spareCount); this.nameResolver = nameResolver; + this.nodes = nodes; NodeList nodesInCluster = this.allNodesAndHosts.nodes().owner(application).type(clusterSpec.type()).cluster(clusterSpec.id()); NodeList nonRetiredNodesInCluster = nodesInCluster.not().retired(); @@ -95,12 +97,12 @@ public class NodePrioritizer { /** Returns the list of nodes sorted by {@link NodeCandidate#compareTo(NodeCandidate)} */ private List<NodeCandidate> prioritize() { // Group candidates by their switch hostname - Map<String, List<NodeCandidate>> candidatesBySwitch = this.nodes.stream() + Map<String, List<NodeCandidate>> candidatesBySwitch = this.candidates.stream() .collect(Collectors.groupingBy(candidate -> candidate.parent.orElseGet(candidate::toNode) .switchHostname() .orElse(""))); // Mark lower priority nodes on shared switch as non-exclusive - List<NodeCandidate> nodes = new ArrayList<>(this.nodes.size()); + List<NodeCandidate> nodes = new ArrayList<>(this.candidates.size()); for (var clusterSwitch : candidatesBySwitch.keySet()) { List<NodeCandidate> switchCandidates = candidatesBySwitch.get(clusterSwitch); if (clusterSwitch.isEmpty()) { @@ -126,7 +128,7 @@ public class NodePrioritizer { for (Node node : surplusNodes) { NodeCandidate candidate = candidateFrom(node, true); if (!candidate.violatesSpares || canAllocateToSpareHosts) { - nodes.add(candidate); + candidates.add(candidate); } } } @@ -136,7 +138,7 @@ public class NodePrioritizer { if ( !canAllocateNew) return; for (Node host : allNodesAndHosts.nodes()) { - if ( ! Nodes.canAllocateTenantNodeTo(host, dynamicProvisioning)) continue; + if ( ! nodes.canAllocateTenantNodeTo(host, dynamicProvisioning)) continue; if (host.reservedTo().isPresent() && !host.reservedTo().get().equals(application.tenant())) continue; if (host.reservedTo().isPresent() && application.instance().isTester()) continue; if (host.exclusiveToApplicationId().isPresent()) continue; // Never allocate new nodes to exclusive hosts @@ -144,7 +146,7 @@ public class NodePrioritizer { if (spareHosts.contains(host) && !canAllocateToSpareHosts) continue; if ( ! capacity.hasCapacity(host, requestedNodes.resources().get())) continue; if ( ! allNodesAndHosts.childrenOf(host).owner(application).cluster(clusterSpec.id()).isEmpty()) continue; - nodes.add(NodeCandidate.createNewChild(requestedNodes.resources().get(), + candidates.add(NodeCandidate.createNewChild(requestedNodes.resources().get(), capacity.availableCapacityOf(host), host, spareHosts.contains(host), @@ -164,7 +166,7 @@ public class NodePrioritizer { .filter(node -> node.allocation().get().membership().cluster().id().equals(clusterSpec.id())) .filter(node -> node.state() == Node.State.active || canStillAllocate(node)) .map(node -> candidateFrom(node, false)) - .forEach(nodes::add); + .forEach(candidates::add); } /** Add nodes already provisioned, but not allocated to any application */ @@ -174,7 +176,7 @@ public class NodePrioritizer { .filter(node -> node.state() == Node.State.ready) .map(node -> candidateFrom(node, false)) .filter(n -> !n.violatesSpares || canAllocateToSpareHosts) - .forEach(nodes::add); + .forEach(candidates::add); } /** Create a candidate from given pre-existing node */ @@ -218,7 +220,7 @@ public class NodePrioritizer { private boolean canStillAllocate(Node node) { if (node.type() != NodeType.tenant || node.parentHostname().isEmpty()) return true; Optional<Node> parent = allNodesAndHosts.parentOf(node); - return parent.isPresent() && Nodes.canAllocateTenantNodeTo(parent.get(), dynamicProvisioning); + return parent.isPresent() && nodes.canAllocateTenantNodeTo(parent.get(), dynamicProvisioning); } } |