summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-09-30 09:38:20 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2021-09-30 09:38:20 +0200
commit4bc3531f97f59e89a5965e867e0cf8c6430c4327 (patch)
treec66e61fca33a48a9319a1201af10f4ce5dc610ad /node-repository
parent7a6132ffc9b6ef8bea32d7de4c10b977bb964d49 (diff)
Reduce number of times nodes are read by reading all and then filter as needed.
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeIndices.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java13
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;