diff options
author | Jon Bratseth <bratseth@oath.com> | 2019-11-14 10:10:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-14 10:10:34 +0100 |
commit | c263d900915cca7c2ba4e18790a30c521e44fe43 (patch) | |
tree | a7477128c22ad8d9568272fb2833618f900f7939 /config-model | |
parent | 19e57679645279ec7d8a5d8a0b63d9f146b25de1 (diff) | |
parent | 28acbff8e0e863dd3ec231f617a83cedeb18ca0a (diff) |
Merge pull request #11288 from vespa-engine/bratseth/storage-type
Add NodeResources.storageType
Diffstat (limited to 'config-model')
4 files changed, 35 insertions, 25 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 86c72221cab..54850dedbba 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"))); @@ -217,16 +218,27 @@ public class NodesSpecification { } private static NodeResources.DiskSpeed parseOptionalDiskSpeed(String diskSpeedString) { - if (diskSpeedString == null) return NodeResources.DiskSpeed.fast; + if (diskSpeedString == null) return NodeResources.DiskSpeed.getDefault(); 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.getDefault(); + 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 79d7ccb93e2..93c3c9ea2ea 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 @@ -812,45 +812,51 @@ public class ModelProvisioningTest { "<?xml version='1.0' encoding='utf-8' ?>\n" + "<services>" + " <container version='1.0' id='container'>" + - " <nodes count='3' flavor='container-node'/>" + + " <nodes count='3'>" + + " <resources vcpu='1' memory='1Gb' disk='1Gb'/>" + + " </nodes>" + " </container>" + " <content version='1.0' id='content1'>" + " <redundancy>2</redundancy>" + " <documents>" + " <document type='type1' mode='index'/>" + " </documents>" + - " <nodes count='2' flavor='content1-node'/>" + + " <nodes count='2'>" + + " <resources vcpu='2' memory='2Gb' disk='2Gb'/>" + + " </nodes>" + " </content>" + " <content version='1.0' id='content2'>" + " <redundancy>2</redundancy>" + " <documents>" + " <document type='type1' mode='index'/>" + " </documents>" + - " <nodes count='2' flavor='content2-node'/>" + + " <nodes count='2'>" + + " <resources vcpu='4' memory='4Gb' disk='4Gb'/>" + + " </nodes>" + " </content>" + "</services>"; 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); } |