diff options
author | Harald Musum <musum@yahooinc.com> | 2022-02-23 13:31:22 +0100 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2022-02-23 13:31:22 +0100 |
commit | 7eae707c3084ec702f85aa2d27eaae1e11e42ab2 (patch) | |
tree | f09bc035b4f413512af18adcf84b585e854c7453 /config-model | |
parent | 13e5f28849839fc674dbd4b37683e5d7bbff5c57 (diff) |
Add support for achitecture in node resources
Diffstat (limited to 'config-model')
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> |