diff options
author | Harald Musum <musum@yahooinc.com> | 2024-04-07 22:41:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-07 22:41:03 +0200 |
commit | 14462536eb7b530b184d48484976f72f2ab3b56c (patch) | |
tree | 2675e636afa5e954ba17261ce46bde594a8aff1f /config-model | |
parent | 59cbad455146da8ff5e10760354395959ad8adb0 (diff) | |
parent | 68bafbf5963259f4ad506c9e1bea1937a7f1dfcb (diff) |
Merge pull request #30843 from vespa-engine/hmusum/no-node-count-means-1-node
Hmusum/no node count means 1 node
Diffstat (limited to 'config-model')
4 files changed, 32 insertions, 13 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..4abd6e89b15 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()) // default to 1 if node count is not specified 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/container/xml/JettyContainerModelBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/JettyContainerModelBuilderTest.java index 934606b93ac..c4fc4ee71c6 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/JettyContainerModelBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/JettyContainerModelBuilderTest.java @@ -6,6 +6,7 @@ import com.yahoo.config.model.builder.xml.test.DomBuilderTest; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.deploy.TestProperties; import com.yahoo.config.model.provision.HostsXmlProvisioner; +import com.yahoo.config.model.provision.InMemoryProvisioner; import com.yahoo.config.model.test.MockRoot; import com.yahoo.container.ComponentsConfig; import com.yahoo.container.jdisc.FilterBindingsProvider; @@ -254,25 +255,16 @@ public class JettyContainerModelBuilderTest extends ContainerModelBuilderTestBas " <server port='8080' id='default'>", " </server>", " </http>", - multiNode, + " <nodes count='1' />", "", "</container>"); - String hostsxml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" + - "<hosts>\n" + - " <host name=\"mockhost-1\">\n" + - " <alias>mockhost1</alias>\n" + - " </host>\n" + - " <host name=\"mockhost-2\">\n" + - " <alias>mockhost2</alias>\n" + - " </host>\n" + - "</hosts>\n"; DeployState deployState = new DeployState.Builder() .properties( new TestProperties() .setHostedVespa(true) .setEndpointCertificateSecrets(Optional.of(new EndpointCertificateSecrets("CERT", "KEY")))) - .modelHostProvisioner(new HostsXmlProvisioner(new StringReader(hostsxml))) + .modelHostProvisioner(new InMemoryProvisioner(1, true)) .build(); MockRoot root = new MockRoot("root", deployState); createModel(root, deployState, null, clusterElem); 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..c7d9ae6b818 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,30 @@ public class VespaModelTestCase { assertContainsWarning(logger.msgs, "Directory searchdefinitions/ should not be used for schemas, use schemas/ instead"); } + @Test + void testNoNodesCount() { + 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) + .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) |