aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2022-02-23 13:31:22 +0100
committerHarald Musum <musum@yahooinc.com>2022-02-23 13:31:22 +0100
commit7eae707c3084ec702f85aa2d27eaae1e11e42ab2 (patch)
treef09bc035b4f413512af18adcf84b585e854c7453 /config-model
parent13e5f28849839fc674dbd4b37683e5d7bbff5c57 (diff)
Add support for achitecture in node resources
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java22
-rw-r--r--config-model/src/main/resources/schema/common.rnc3
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java5
-rw-r--r--config-model/src/test/schema-test-files/services-hosted.xml2
4 files changed, 23 insertions, 9 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
index 53224894bb5..10f44fc5031 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
@@ -260,12 +260,13 @@ public class NodesSpecification {
Pair<Double, Double> vcpu = toRange(element.requiredStringAttribute("vcpu"), .0, Double::parseDouble);
Pair<Double, Double> memory = toRange(element.requiredStringAttribute("memory"), .0, s -> parseGbAmount(s, "B"));
Pair<Double, Double> disk = toRange(element.requiredStringAttribute("disk"), .0, s -> parseGbAmount(s, "B"));
- Pair<Double, Double> bandwidth = toRange(element.stringAttribute("bandwidth"), .3, s -> parseGbAmount(s, "BPS"));
- NodeResources.DiskSpeed diskSpeed = parseOptionalDiskSpeed(element.stringAttribute("disk-speed"));
- NodeResources.StorageType storageType = parseOptionalStorageType(element.stringAttribute("storage-type"));
+ Pair<Double, Double> bandwith = toRange(element.stringAttribute("bandwidth"), .3, s -> parseGbAmount(s, "BPS"));
+ NodeResources.DiskSpeed diskSpeed = parseOptionalDiskSpeed(element.stringAttribute("disk-speed"));
+ NodeResources.StorageType storageType = parseOptionalStorageType(element.stringAttribute("storage-type"));
+ NodeResources.Architecture architecture = parseOptionalArchitecture(element.stringAttribute("architecture"));
- var min = new NodeResources(vcpu.getFirst(), memory.getFirst(), disk.getFirst(), bandwidth.getFirst(), diskSpeed, storageType);
- var max = new NodeResources(vcpu.getSecond(), memory.getSecond(), disk.getSecond(), bandwidth.getSecond(), diskSpeed, storageType);
+ var min = new NodeResources(vcpu.getFirst(), memory.getFirst(), disk.getFirst(), bandwith.getFirst(), diskSpeed, storageType, architecture);
+ var max = new NodeResources(vcpu.getSecond(), memory.getSecond(), disk.getSecond(), bandwith.getSecond(), diskSpeed, storageType, architecture);
return new Pair<>(min, max);
}
@@ -326,6 +327,17 @@ public class NodesSpecification {
}
}
+ private static NodeResources.Architecture parseOptionalArchitecture(String architecture) {
+ if (architecture == null) return NodeResources.Architecture.getDefault();
+ switch (architecture) {
+ case "x86_64" : return NodeResources.Architecture.x86_64;
+ case "aarch64" : return NodeResources.Architecture.aarch64;
+ case "any" : return NodeResources.Architecture.any;
+ default: throw new IllegalArgumentException("Illegal architecture value '" + architecture +
+ "': Legal values are 'x86_64', 'aarch64' and 'any')");
+ }
+ }
+
/**
* Resolve any reference in nodesElement and return the referred element.
*
diff --git a/config-model/src/main/resources/schema/common.rnc b/config-model/src/main/resources/schema/common.rnc
index f56f9ee503e..275c0f7f702 100644
--- a/config-model/src/main/resources/schema/common.rnc
+++ b/config-model/src/main/resources/schema/common.rnc
@@ -28,7 +28,8 @@ Resources = element resources {
attribute memory { xsd:string } &
attribute disk { xsd:string } &
attribute disk-speed { xsd:string }? &
- attribute storage-type { xsd:string }?
+ attribute storage-type { xsd:string }? &
+ attribute architecture { xsd:string }?
}
OptionalDedicatedNodes = element nodes {
diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
index 8db6d6001c9..9852952bacb 100644
--- a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
@@ -1381,7 +1381,7 @@ public class ModelProvisioningTest {
" </admin>" +
" <container version='1.0' id='container'>" +
" <nodes count='4'>" +
- " <resources vcpu='12' memory='10Gb' disk='30Gb'/>" +
+ " <resources vcpu='12' memory='10Gb' disk='30Gb' architecture='aarch64'/>" +
" </nodes>" +
" </container>" +
" <content version='1.0' id='foo'>" +
@@ -1406,7 +1406,8 @@ public class ModelProvisioningTest {
VespaModelTester tester = new VespaModelTester();
tester.addHosts(new NodeResources(0.1, 0.2, 300, 0.3, NodeResources.DiskSpeed.slow), 1);// Logserver
tester.addHosts(new NodeResources(0.1, 0.3, 1, 0.5), 2); // Slobrok
- tester.addHosts(new NodeResources(12, 10, 30, 0.3), 4); // Container
+ tester.addHosts(new NodeResources(12, 10, 30, 0.3,
+ NodeResources.DiskSpeed.fast, NodeResources.StorageType.local, NodeResources.Architecture.aarch64), 4); // Container
tester.addHosts(new NodeResources(8, 200, 1000000, 0.3), 5); // Content-foo
tester.addHosts(new NodeResources(10, 64, 200, 0.3), 6); // Content-bar
tester.addHosts(new NodeResources(0.5, 2, 10, 0.3), 6); // Cluster-controller
diff --git a/config-model/src/test/schema-test-files/services-hosted.xml b/config-model/src/test/schema-test-files/services-hosted.xml
index bfd3871d71e..367e6019389 100644
--- a/config-model/src/test/schema-test-files/services-hosted.xml
+++ b/config-model/src/test/schema-test-files/services-hosted.xml
@@ -8,7 +8,7 @@
<container id="container1" version="1.0">
<nodes count="[5,7]" required="true">
- <resources vcpu="1.2" memory="10Gb" disk="0.3 TB"/>
+ <resources vcpu="1.2" memory="10Gb" disk="0.3 TB" architecture="aarch64"/>
</nodes>
</container>