summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2024-04-07 12:20:00 +0200
committerHarald Musum <musum@yahooinc.com>2024-04-07 12:20:00 +0200
commitc0f6215feb85a69ee32419c020599ea5db2fe4ef (patch)
tree471cc5002eef2f5a89445240f4c7d352fddb5972
parent82aff06e654539fda7bdc6e04d53325ed99d4ba9 (diff)
Test and change schema so that not specifying node count is allowed
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java2
-rw-r--r--config-model/src/main/resources/schema/containercluster.rnc2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java28
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)