diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-09-30 14:30:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-30 14:30:57 +0200 |
commit | b2b61868b24569132d8dac38c8e149887d8d553f (patch) | |
tree | ad5aed5a94beda336554a89a1becc5837896f19e /node-repository | |
parent | 54e7a253b26adadf9f1ba2f1296132d8e4f77ea1 (diff) | |
parent | 1e375fe28a32b2d6d8f2d0ac144a8a441cb5510c (diff) |
Merge pull request #14627 from vespa-engine/mpolden/reduce-reads
Avoid reading nodes from irrelevant states
Diffstat (limited to 'node-repository')
5 files changed, 17 insertions, 17 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java index e70793111ea..77ae6ecf1a7 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java @@ -268,9 +268,9 @@ public class NodeRepository extends AbstractComponent { return db.readNodes(inState).stream().filter(node -> node.type().equals(type)).collect(Collectors.toList()); } - /** Returns a filterable list of all nodes in this repository */ - public NodeList list() { - return NodeList.copyOf(getNodes()); + /** Returns a filterable list of nodes in this repository in any of the given states */ + public NodeList list(State ... inState) { + return NodeList.copyOf(getNodes(inState)); } /** Returns a filterable list of all nodes of an application */ diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java index 2afbb0e6476..c3b2b0f1e66 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java @@ -14,7 +14,6 @@ import com.yahoo.vespa.hosted.provision.node.History; import java.time.Clock; import java.time.Duration; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.function.Predicate; import java.util.logging.Logger; @@ -72,10 +71,10 @@ public class FailedExpirer extends NodeRepositoryMaintainer { @Override protected boolean maintain() { - List<Node> remainingNodes = new ArrayList<>(nodeRepository.list() - .state(Node.State.failed) - .nodeType(NodeType.tenant, NodeType.host) - .asList()); + List<Node> remainingNodes = nodeRepository.getNodes(Node.State.failed).stream() + .filter(node -> node.type() == NodeType.tenant || + node.type() == NodeType.host) + .collect(Collectors.toList()); recycleIf(remainingNodes, node -> node.allocation().isEmpty()); recycleIf(remainingNodes, node -> @@ -98,11 +97,11 @@ public class FailedExpirer extends NodeRepositoryMaintainer { List<Node> nodesToRecycle = new ArrayList<>(); for (Node candidate : nodes) { if (NodeFailer.hasHardwareIssue(candidate, nodeRepository)) { - List<String> unparkedChildren = !candidate.type().isHost() ? Collections.emptyList() : - nodeRepository.list().childrenOf(candidate).asList().stream() - .filter(node -> node.state() != Node.State.parked) - .map(Node::hostname) - .collect(Collectors.toList()); + List<String> unparkedChildren = !candidate.type().isHost() ? List.of() : + nodeRepository.list() + .childrenOf(candidate) + .matching(node -> node.state() != Node.State.parked) + .mapToList(Node::hostname); if (unparkedChildren.isEmpty()) { nodeRepository.park(candidate.hostname(), false, Agent.FailedExpirer, diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintainer.java index 5f87cf9fd9b..2e9cf783f79 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintainer.java @@ -38,7 +38,9 @@ public abstract class NodeRepositoryMaintainer extends Maintainer { /** A utility to group active tenant nodes by application */ protected Map<ApplicationId, List<Node>> activeNodesByApplication() { - return nodeRepository().list().nodeType(NodeType.tenant).state(Node.State.active).asList() + return nodeRepository().list(Node.State.active) + .nodeType(NodeType.tenant) + .asList() .stream() .filter(node -> ! node.allocation().get().owner().instance().isTester()) .collect(Collectors.groupingBy(node -> node.allocation().get().owner())); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java index 0e3b6715ff1..68c1c98d8ba 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java @@ -34,9 +34,8 @@ public class OsUpgradeActivator extends NodeRepositoryMaintainer { /** Returns whether to allow OS upgrade of nodes of given type */ private boolean canUpgradeOsOf(NodeType type) { - return nodeRepository().list() + return nodeRepository().list(Node.State.ready, Node.State.active) .nodeType(type) - .state(Node.State.ready, Node.State.active) // Only consider nodes in long-term states .changingVersion() .asList() .isEmpty(); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java index b4e21b22cd2..0047f427748 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java @@ -35,7 +35,7 @@ public class RetiringUpgrader implements Upgrader { @Override public void upgradeTo(OsVersionTarget target) { - NodeList activeNodes = nodeRepository.list().nodeType(target.nodeType()).state(Node.State.active); + NodeList activeNodes = nodeRepository.list(Node.State.active).nodeType(target.nodeType()); if (activeNodes.size() == 0) return; // No nodes eligible for upgrade Instant now = nodeRepository.clock().instant(); |