diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2023-06-07 12:41:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-07 12:41:15 +0200 |
commit | 6a33c988aaca37e0cd6a446afc2d0a9da6aad3f4 (patch) | |
tree | 7f4783b3ad6ccd7ef77b2afc5c5d053f08b11b0d | |
parent | 8028f6118e977bddfef2ebe9d0a7b111ed4c8808 (diff) | |
parent | e0d696a35ccee1a7787cdfb4a99d2bb2c3535c98 (diff) |
Merge pull request #27328 from vespa-engine/bratseth/specify-bandwidth
Bratseth/specify bandwidth
6 files changed, 38 insertions, 17 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java index ae9d696a9a3..585e69d9141 100644 --- a/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java +++ b/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java @@ -233,13 +233,8 @@ public class InMemoryProvisioner implements HostProvisioner { // Minimal capacity policies private NodeResources decideResources(NodeResources resources) { - if (resources.vcpuIsUnspecified()) - resources = resources.withVcpu(defaultNodeResources.vcpu()); - if (resources.memoryGbIsUnspecified()) - resources = resources.withMemoryGb(defaultNodeResources.memoryGb()); - if (resources.diskGbIsUnspecified()) - resources = resources.withDiskGb(defaultNodeResources.diskGb()); - return resources; + if (defaultNodeResources.isUnspecified()) return resources; + return resources.withUnspecifiedNumbersFrom(defaultNodeResources); } private List<HostSpec> allocateHostGroup(ClusterSpec clusterGroup, NodeResources requestedResourcesOrUnspecified, diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java index 36ba12c7cf8..438bb26479d 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java @@ -213,6 +213,7 @@ public class NodeResources { public boolean vcpuIsUnspecified() { return vcpu == 0; } public boolean memoryGbIsUnspecified() { return memoryGb == 0; } public boolean diskGbIsUnspecified() { return diskGb == 0; } + public boolean bandwidthGbpsIsUnspecified() { return bandwidthGbps == 0; } /** Returns the standard cost of these resources, in dollars per hour */ public double cost() { @@ -267,6 +268,19 @@ public class NodeResources { return new NodeResources(vcpu, memoryGb, diskGb, bandwidthGbps, diskSpeed, storageType, architecture, gpuResources); } + public NodeResources withUnspecifiedNumbersFrom(NodeResources fullySpecified) { + var resources = this; + if (resources.vcpuIsUnspecified()) + resources = resources.withVcpu(fullySpecified.vcpu()); + if (resources.memoryGbIsUnspecified()) + resources = resources.withMemoryGb(fullySpecified.memoryGb()); + if (resources.diskGbIsUnspecified()) + resources = resources.withDiskGb(fullySpecified.diskGb()); + if (resources.bandwidthGbpsIsUnspecified()) + resources = resources.withBandwidthGbps(fullySpecified.bandwidthGbps()); + return resources; + } + /** Returns this with disk speed, storage type and architecture set to any */ public NodeResources justNumbers() { if (isUnspecified()) return unspecified(); 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..5426d818db5 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 @@ -7,6 +7,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Flavor; +import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.Zone; import com.yahoo.transaction.Mutex; @@ -97,8 +98,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() == NodeResources.Architecture.any) { + 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/CapacityPolicies.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java index 049b345dad7..148c2393726 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java @@ -90,13 +90,7 @@ public class CapacityPolicies { } public NodeResources specifyFully(NodeResources resources, ClusterSpec clusterSpec, ApplicationId applicationId) { - if (resources.vcpuIsUnspecified()) - resources = resources.withVcpu(defaultResources(clusterSpec, applicationId).vcpu()); - if (resources.memoryGbIsUnspecified()) - resources = resources.withMemoryGb(defaultResources(clusterSpec, applicationId).memoryGb()); - if (resources.diskGbIsUnspecified()) - resources = resources.withDiskGb(defaultResources(clusterSpec, applicationId).diskGb()); - return resources; + return resources.withUnspecifiedNumbersFrom(defaultResources(clusterSpec, applicationId)); } private NodeResources defaultResources(ClusterSpec clusterSpec, ApplicationId applicationId) { 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 |