diff options
author | Jon Bratseth <bratseth@vespa.ai> | 2023-06-07 11:24:04 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@vespa.ai> | 2023-06-07 11:24:04 +0200 |
commit | 9a351c620e0ffc30539d03cf79cceb1fef7ee6e3 (patch) | |
tree | 64855f2297a9bfccf59cc270d57a288c9b93b270 /node-repository | |
parent | b49083e2b7223579efe40f7cd310bb769b26d22b (diff) |
Specify a nodes resources fully
Diffstat (limited to 'node-repository')
3 files changed, 20 insertions, 3 deletions
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 29327aaf93a..c07ed653172 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 @@ -97,8 +97,24 @@ public class Nodes { * @param inState the states to return nodes from. If no states are given, all nodes are returned */ public NodeList list(Node.State... inState) { - NodeList nodes = NodeList.copyOf(db.readNodes()); - return inState.length == 0 ? nodes : nodes.state(Set.of(inState)); + NodeList allNodes = NodeList.copyOf(db.readNodes()); + NodeList nodes = inState.length == 0 ? allNodes : allNodes.state(Set.of(inState)); + nodes = NodeList.copyOf(nodes.stream().map(node -> specifyFully(node, allNodes)).toList()); + return nodes; + } + + // Repair underspecified node resources. TODO: Remove this after June 2023 + private Node specifyFully(Node node, NodeList allNodes) { + if (node.resources().isUnspecified()) return node; + + if (node.resources().bandwidthGbpsIsUnspecified()) + node = node.with(new Flavor(node.resources().withBandwidthGbps(0.3)), Agent.system, clock.instant()); + if (node.resources().architecture().isDefault()) { + Optional<Node> parent = allNodes.parentOf(node); + if (parent.isPresent()) + node = node.with(new Flavor(node.resources().with(parent.get().resources().architecture())), Agent.system, clock.instant()); + } + return node; } /** Returns a locked list of all nodes in this repository */ diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java index b194730727f..8462e23fbfd 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java @@ -25,6 +25,7 @@ import java.util.logging.Logger; * A node candidate containing the details required to prioritize it for allocation. This is immutable. * * @author smorgrav + * @author bratseth */ public abstract class NodeCandidate implements Nodelike, Comparable<NodeCandidate> { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTest.java index 51522304350..51b3bb99f4c 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTest.java @@ -29,7 +29,7 @@ public class CapacityCheckerTest { var failurePath = tester.capacityChecker.worstCaseHostLossLeadingToFailure(); assertTrue(failurePath.isPresent()); assertTrue(tester.nodeRepository.nodes().list().nodeType(NodeType.host).asList().containsAll(failurePath.get().hostsCausingFailure)); - assertEquals(5, failurePath.get().hostsCausingFailure.size()); + assertEquals(4, failurePath.get().hostsCausingFailure.size()); } @Test |