diff options
author | Jon Bratseth <bratseth@gmail.com> | 2021-02-16 11:53:26 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2021-02-16 11:53:26 +0100 |
commit | 8125df94dc66bf3765fc6335c6dc65c4a0e3a6d5 (patch) | |
tree | f987057ee1078092b119c7880dc18d6dac2b96dd | |
parent | 4a62c2efe7ab3856e400ed512169cf2c2a78110b (diff) |
Generalize error message and make tests more realistic
4 files changed, 38 insertions, 6 deletions
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 5a71f83e468..5ffdcaa8bc0 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 @@ -1403,6 +1403,7 @@ public class ModelProvisioningTest { "</container>" + "</services>"; VespaModelTester tester = new VespaModelTester(); + tester.setHosted(false); tester.addHosts(1); VespaModel model = tester.createModel(services, true); assertEquals(1, model.getRoot().hostSystem().getHosts().size()); 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 ce8d2c193b9..90ad240ff73 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 @@ -15,8 +15,13 @@ import com.yahoo.config.model.provision.InMemoryProvisioner; import com.yahoo.config.model.provision.SingleNodeProvisioner; import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.Capacity; +import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Flavor; +import com.yahoo.config.provision.HostSpec; import com.yahoo.config.provision.NodeResources; +import com.yahoo.config.provision.ProvisionLogger; +import com.yahoo.config.provision.Provisioner; import com.yahoo.config.provision.Zone; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.test.utils.ApplicationPackageUtils; @@ -47,7 +52,7 @@ public class VespaModelTester { private final ConfigModelRegistry configModelRegistry; private boolean hosted = true; - private Map<NodeResources, Collection<Host>> hostsByResources = new HashMap<>(); + private final Map<NodeResources, Collection<Host>> hostsByResources = new HashMap<>(); private ApplicationId applicationId = ApplicationId.defaultId(); private boolean useDedicatedNodeForLogserver = false; @@ -139,9 +144,12 @@ public class VespaModelTester { ApplicationPackage appPkg = modelCreatorWithMockPkg.appPkg; HostProvisioner provisioner = hosted ? - new InMemoryProvisioner(hostsByResources, failOnOutOfCapacity, useMaxResources, - false, - startIndexForClusters, retiredHostNames) : + new ProvisionerAdapter(new InMemoryProvisioner(hostsByResources, + failOnOutOfCapacity, + useMaxResources, + false, + startIndexForClusters, + retiredHostNames)) : new SingleNodeProvisioner(); TestProperties properties = new TestProperties() @@ -159,4 +167,25 @@ public class VespaModelTester { return modelCreatorWithMockPkg.create(false, deployState.build(), configModelRegistry); } + /** To verify that we don't call allocateHost(alias) in hosted environments */ + private static class ProvisionerAdapter implements HostProvisioner { + + private final HostProvisioner provisioner; + + public ProvisionerAdapter(HostProvisioner provisioner) { + this.provisioner = provisioner; + } + + @Override + public HostSpec allocateHost(String alias) { + throw new UnsupportedOperationException("Allocating hosts using <node> tags is not supported in hosted environments, " + + "use <nodes count='N'> instead, see https://cloud.vespa.ai/en/reference/services"); + } + + @Override + public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) { + return provisioner.prepare(cluster, capacity, logger); + } + + } } diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java index 21c6cc8e795..12010042c79 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java @@ -218,6 +218,7 @@ public class NodeResources { sb.append(x10/10).append('.').append(x10%10); return sb; } + @Override public String toString() { if (isUnspecified()) diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/provision/ProvisionerAdapter.java b/configserver/src/main/java/com/yahoo/vespa/config/server/provision/ProvisionerAdapter.java index 9e232a6533f..d0c08d2747d 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/provision/ProvisionerAdapter.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/provision/ProvisionerAdapter.java @@ -34,8 +34,9 @@ public class ProvisionerAdapter implements HostProvisioner { @Override public HostSpec allocateHost(String alias) { // TODO: Remove this method since hosted/non-hosted needs different interfaces. See also ModelContextImpl.getHostProvisioner - throw new UnsupportedOperationException("Allocating hosts using <node> tags is not supported in hosted environments, " + - "use <nodes count='N'> instead, see https://cloud.vespa.ai/en/reference/services"); + throw new UnsupportedOperationException("Clusters in hosted environments must have a <nodes count='N'> tag " + + "matching all zones, and having no <node> subtags, " + + "see https://cloud.vespa.ai/en/reference/services"); } @Override |