summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-09-30 14:30:57 +0200
committerGitHub <noreply@github.com>2020-09-30 14:30:57 +0200
commitb2b61868b24569132d8dac38c8e149887d8d553f (patch)
treead5aed5a94beda336554a89a1becc5837896f19e /node-repository
parent54e7a253b26adadf9f1ba2f1296132d8e4f77ea1 (diff)
parent1e375fe28a32b2d6d8f2d0ac144a8a441cb5510c (diff)
Merge pull request #14627 from vespa-engine/mpolden/reduce-reads
Avoid reading nodes from irrelevant states
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java19
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintainer.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivator.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java2
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();