diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-09-30 09:38:20 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-09-30 09:38:20 +0200 |
commit | 4bc3531f97f59e89a5965e867e0cf8c6430c4327 (patch) | |
tree | c66e61fca33a48a9319a1201af10f4ce5dc610ad /node-repository | |
parent | 7a6132ffc9b6ef8bea32d7de4c10b977bb964d49 (diff) |
Reduce number of times nodes are read by reading all and then filter as needed.
Diffstat (limited to 'node-repository')
2 files changed, 6 insertions, 10 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeIndices.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeIndices.java index da4ae2a119e..7b7e8582c1d 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeIndices.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeIndices.java @@ -1,9 +1,6 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.provisioning; -import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.vespa.hosted.provision.NodeList; - import java.util.List; import static java.util.Comparator.naturalOrder; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java index 3fa44d4c091..d5b754117cb 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java @@ -57,12 +57,11 @@ class Preparer { // but it may not change the set of active nodes, as the active nodes must stay in sync with the // active config model which is changed on activate private List<Node> prepareNodes(ApplicationId application, ClusterSpec cluster, NodeSpec requestedNodes, int wantedGroups) { - List<Node> surplusNodes = findNodesInRemovableGroups(application, cluster, wantedGroups); + NodeList allNodes = nodeRepository.nodes().list(); + NodeList appNodes = allNodes.owner(application); + List<Node> surplusNodes = findNodesInRemovableGroups(appNodes, cluster, wantedGroups); - List<Integer> usedIndices = nodeRepository.nodes().list() - .owner(application) - .cluster(cluster.id()) - .mapToList(node -> node.allocation().get().membership().index()); + List<Integer> usedIndices = appNodes.cluster(cluster.id()).mapToList(node -> node.allocation().get().membership().index()); NodeIndices indices = new NodeIndices(usedIndices, ! cluster.type().isContent()); List<Node> acceptedNodes = new ArrayList<>(); for (int groupIndex = 0; groupIndex < wantedGroups; groupIndex++) { @@ -95,9 +94,9 @@ class Preparer { * Returns a list of the nodes which are * in groups with index number above or equal the group count */ - private List<Node> findNodesInRemovableGroups(ApplicationId application, ClusterSpec requestedCluster, int wantedGroups) { + private List<Node> findNodesInRemovableGroups(NodeList appNodes, ClusterSpec requestedCluster, int wantedGroups) { List<Node> surplusNodes = new ArrayList<>(0); - for (Node node : nodeRepository.nodes().list(Node.State.active).owner(application)) { + for (Node node : appNodes.state(Node.State.active)) { ClusterSpec nodeCluster = node.allocation().get().membership().cluster(); if ( ! nodeCluster.id().equals(requestedCluster.id())) continue; if ( ! nodeCluster.type().equals(requestedCluster.type())) continue; |