From 276c047bfdc581bbbef42012b24ffd4424873430 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Wed, 13 Nov 2019 14:26:34 +0100 Subject: Add NodeResources.storageType --- .../model/builder/xml/dom/NodesSpecification.java | 16 ++++++++++-- config-model/src/main/resources/schema/common.rnc | 3 ++- .../model/provision/ModelProvisioningTest.java | 30 +++++++++++++--------- .../yahoo/vespa/model/test/VespaModelTester.java | 9 ------- 4 files changed, 34 insertions(+), 24 deletions(-) (limited to 'config-model') 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 86c72221cab..c0ce5ca22db 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 @@ -171,7 +171,8 @@ public class NodesSpecification { Optional.ofNullable(resources.stringAttribute("bandwidth")) .map(b -> parseGbAmount(b, "BPS")) .orElse(0.3), - parseOptionalDiskSpeed(resources.stringAttribute("disk-speed")))); + parseOptionalDiskSpeed(resources.stringAttribute("disk-speed")), + parseOptionalStorageType(resources.stringAttribute("storage-type")))); } else if (nodesElement.stringAttribute("flavor") != null) { // legacy fallback return Optional.of(NodeResources.fromLegacyName(nodesElement.stringAttribute("flavor"))); @@ -221,12 +222,23 @@ public class NodesSpecification { switch (diskSpeedString) { case "fast" : return NodeResources.DiskSpeed.fast; case "slow" : return NodeResources.DiskSpeed.slow; - case "any" : return NodeResources.DiskSpeed.any; + case "any" : return NodeResources.DiskSpeed.any; default: throw new IllegalArgumentException("Illegal disk-speed value '" + diskSpeedString + "': Legal values are 'fast', 'slow' and 'any')"); } } + private static NodeResources.StorageType parseOptionalStorageType(String storageTypeString) { + if (storageTypeString == null) return NodeResources.StorageType.any; + switch (storageTypeString) { + case "remote" : return NodeResources.StorageType.remote; + case "local" : return NodeResources.StorageType.local; + case "any" : return NodeResources.StorageType.any; + default: throw new IllegalArgumentException("Illegal storage-type value '" + storageTypeString + + "': Legal values are 'remote', 'local' and 'any')"); + } + } + @Override public String toString() { return "specification of " + count + (dedicated ? " dedicated " : " ") + "nodes" + diff --git a/config-model/src/main/resources/schema/common.rnc b/config-model/src/main/resources/schema/common.rnc index c5690f9c915..e3ad942e7b3 100644 --- a/config-model/src/main/resources/schema/common.rnc +++ b/config-model/src/main/resources/schema/common.rnc @@ -27,7 +27,8 @@ Resources = element resources { attribute vcpu { xsd:double { minExclusive = "0.0" } } & attribute memory { xsd:string } & attribute disk { xsd:string } & - attribute disk-speed { xsd:string }? + attribute disk-speed { xsd:string }? & + attribute storage-type { 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 b8b50ba0eaa..fae0ba062bb 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 @@ -813,45 +813,51 @@ public class ModelProvisioningTest { "\n" + "" + " " + - " " + + " " + + " " + + " " + " " + " " + " 2" + " " + " " + " " + - " " + + " " + + " " + + " " + " " + " " + " 2" + " " + " " + " " + - " " + + " " + + " " + + " " + " " + ""; VespaModelTester tester = new VespaModelTester(); // use different flavors to make the test clearer - tester.addHosts("container-node", 3); - tester.addHosts("content1-node", 2); - tester.addHosts("content2-node", 2); + tester.addHosts(new NodeResources(1, 1, 1, 0.3), 3); + tester.addHosts(new NodeResources(2, 2, 2, 0.3), 2); + tester.addHosts(new NodeResources(4, 4, 4, 0.3), 2); VespaModel model = tester.createModel(services, true); ContentCluster cluster1 = model.getContentClusters().get("content1"); ClusterControllerContainerCluster clusterControllers1 = cluster1.getClusterControllers(); assertEquals(1, clusterControllers1.getContainers().size()); - assertEquals("content1-node0", clusterControllers1.getContainers().get(0).getHostName()); - assertEquals("content1-node1", clusterControllers1.getContainers().get(1).getHostName()); - assertEquals("container-node0", clusterControllers1.getContainers().get(2).getHostName()); + assertEquals("node-2-2-2-02", clusterControllers1.getContainers().get(0).getHostName()); + assertEquals("node-2-2-2-01", clusterControllers1.getContainers().get(1).getHostName()); + assertEquals("node-1-1-1-02", clusterControllers1.getContainers().get(2).getHostName()); ContentCluster cluster2 = model.getContentClusters().get("content2"); ClusterControllerContainerCluster clusterControllers2 = cluster2.getClusterControllers(); assertEquals(3, clusterControllers2.getContainers().size()); - assertEquals("content2-node0", clusterControllers2.getContainers().get(0).getHostName()); - assertEquals("content2-node1", clusterControllers2.getContainers().get(1).getHostName()); + assertEquals("node-4-4-4-02", clusterControllers2.getContainers().get(0).getHostName()); + assertEquals("node-4-4-4-01", clusterControllers2.getContainers().get(1).getHostName()); assertEquals("We do not pick the container used to supplement another cluster", - "container-node1", clusterControllers2.getContainers().get(2).getHostName()); + "node-1-1-1-01", clusterControllers2.getContainers().get(2).getHostName()); } @Test diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java index 63269c45e5f..b6180ab78b9 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java @@ -60,15 +60,6 @@ public class VespaModelTester { /** Adds some nodes with resources 1, 3, 9 */ public Hosts addHosts(int count) { return addHosts(new NodeResources(1, 3, 9, 1), count); } - /** Adds some hosts to this system */ - public Hosts addHosts(String flavor, int count) { - return addHosts(Optional.empty(), NodeResources.fromLegacyName(flavor), count); - } - - public Hosts addHosts(Flavor flavor, int count) { - return addHosts(Optional.of(flavor), NodeResources.fromLegacyName(flavor.name()), count); - } - public Hosts addHosts(NodeResources resources, int count) { return addHosts(Optional.of(new Flavor(resources)), resources, count); } -- cgit v1.2.3