summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2023-06-07 12:41:15 +0200
committerGitHub <noreply@github.com>2023-06-07 12:41:15 +0200
commit6a33c988aaca37e0cd6a446afc2d0a9da6aad3f4 (patch)
tree7f4783b3ad6ccd7ef77b2afc5c5d053f08b11b0d
parent8028f6118e977bddfef2ebe9d0a7b111ed4c8808 (diff)
parente0d696a35ccee1a7787cdfb4a99d2bb2c3535c98 (diff)
Merge pull request #27328 from vespa-engine/bratseth/specify-bandwidth
Bratseth/specify bandwidth
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java9
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java14
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java21
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java8
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTest.java2
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