diff options
author | Harald Musum <musum@yahooinc.com> | 2024-04-07 12:20:00 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2024-04-07 12:20:00 +0200 |
commit | c0f6215feb85a69ee32419c020599ea5db2fe4ef (patch) | |
tree | 471cc5002eef2f5a89445240f4c7d352fddb5972 /config-model | |
parent | 82aff06e654539fda7bdc6e04d53325ed99d4ba9 (diff) |
Test and change schema so that not specifying node count is allowed
Diffstat (limited to 'config-model')
3 files changed, 30 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java index eac03531b86..a2d9433df1d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java @@ -1002,7 +1002,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { return containers; } else if (nodesElement.hasAttribute("count")) // regular, hosted node spec return createNodesFromNodeCount(cluster, containerElement, nodesElement, context); - else if (cluster.isHostedVespa() && cluster.getZone().environment().isManuallyDeployed()) // default to 1 in manual zones + else if (cluster.isHostedVespa() && cluster.getZone().environment().isManuallyDeployed()) // default to 1 in manually deployed zones return createNodesFromNodeCount(cluster, containerElement, nodesElement, context); else // the non-hosted option return createNodesFromNodeList(context.getDeployState(), cluster, nodesElement); diff --git a/config-model/src/main/resources/schema/containercluster.rnc b/config-model/src/main/resources/schema/containercluster.rnc index f24a1511318..9beaf7b7783 100644 --- a/config-model/src/main/resources/schema/containercluster.rnc +++ b/config-model/src/main/resources/schema/containercluster.rnc @@ -307,7 +307,7 @@ NodesOfContainerCluster = element nodes { attribute type { xsd:string } | ( - attribute count { xsd:positiveInteger | xsd:string } & + attribute count { xsd:positiveInteger | xsd:string }? & attribute flavor { xsd:string }? & attribute required { xsd:boolean }? & attribute exclusive { xsd:boolean }? & diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java index 69abb10b91d..aaecc47f943 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java @@ -20,6 +20,9 @@ import com.yahoo.config.model.test.MockApplicationPackage; import com.yahoo.config.model.test.TestDriver; import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Zone; import com.yahoo.document.config.DocumentmanagerConfig; import com.yahoo.messagebus.MessagebusConfig; import com.yahoo.net.HostName; @@ -309,6 +312,31 @@ public class VespaModelTestCase { assertContainsWarning(logger.msgs, "Directory searchdefinitions/ should not be used for schemas, use schemas/ instead"); } + @Test + void testNoNodesCountInDev() { + var services = + """ + <services version='1.0'> + <container version='1.0' id='default'> + <search/> + <nodes> + <resources disk="24Gb" /> + </nodes> + </container> + </services>"""; + + var app = new MockApplicationPackage.Builder().withServices(services).build(); + var deployState = new DeployState.Builder() + .applicationPackage(app) + .zone(new Zone(Environment.dev, RegionName.from("test"))) + .properties(new TestProperties() + .setHostedVespa(true) + .setApplicationId(ApplicationId.from("foo", "bar", "default-t"))) + .build(); + var model = new TestDriver(true).buildModel(deployState); + assertEquals(1, model.getHosts().size()); // node count 1 if not specified + } + private void assertContainsWarning(List<Pair<Level,String>> msgs, String text) { boolean foundCorrectWarning = false; for (var msg : msgs) |