summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2019-11-14 10:10:34 +0100
committerGitHub <noreply@github.com>2019-11-14 10:10:34 +0100
commitc263d900915cca7c2ba4e18790a30c521e44fe43 (patch)
treea7477128c22ad8d9568272fb2833618f900f7939 /config-model
parent19e57679645279ec7d8a5d8a0b63d9f146b25de1 (diff)
parent28acbff8e0e863dd3ec231f617a83cedeb18ca0a (diff)
Merge pull request #11288 from vespa-engine/bratseth/storage-type
Add NodeResources.storageType
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java18
-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.java30
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java9
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);
}