diff options
author | Harald Musum <musum@verizonmedia.com> | 2021-06-07 13:03:23 +0200 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2021-06-07 13:03:23 +0200 |
commit | 98c9ec0c6f4bc7957ef9945f2c4d2a965551744a (patch) | |
tree | 172ac05b714d527ea5285386f239b4a5b12c7759 /config-model | |
parent | 8dc4e478b9c7ae03d55c167511e00e69a9cb0433 (diff) |
Use feature flag to decide if we should throw when resource limits is specified
Diffstat (limited to 'config-model')
5 files changed, 27 insertions, 17 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ClusterResourceLimits.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ClusterResourceLimits.java index 66640d4b2dc..8db656a5f2c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/ClusterResourceLimits.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ClusterResourceLimits.java @@ -36,12 +36,14 @@ public class ClusterResourceLimits { private final boolean enableFeedBlockInDistributor; private final boolean hostedVespa; + private final boolean throwIfSpecified; private ResourceLimits.Builder ctrlBuilder = new ResourceLimits.Builder(); private ResourceLimits.Builder nodeBuilder = new ResourceLimits.Builder(); - public Builder(boolean enableFeedBlockInDistributor, boolean hostedVespa) { + public Builder(boolean enableFeedBlockInDistributor, boolean hostedVespa, boolean throwIfSpecified) { this.enableFeedBlockInDistributor = enableFeedBlockInDistributor; this.hostedVespa = hostedVespa; + this.throwIfSpecified = throwIfSpecified; } public ClusterResourceLimits build(ModelElement clusterElem) { @@ -55,7 +57,7 @@ public class ClusterResourceLimits { private ResourceLimits.Builder createBuilder(ModelElement element) { return element == null ? new ResourceLimits.Builder() - : DomResourceLimitsBuilder.createBuilder(element, hostedVespa); + : DomResourceLimitsBuilder.createBuilder(element, hostedVespa, throwIfSpecified); } public void setClusterControllerBuilder(ResourceLimits.Builder builder) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java index 90cca1494b2..97093203758 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java @@ -121,7 +121,9 @@ public class ContentCluster extends AbstractConfigProducer<AbstractConfigProduce globallyDistributedDocuments, routingSelection, deployState.zone(), deployState.isHosted()); boolean enableFeedBlockInDistributor = deployState.getProperties().featureFlags().enableFeedBlockInDistributor(); - var resourceLimits = new ClusterResourceLimits.Builder(enableFeedBlockInDistributor, stateIsHosted(deployState)) + var resourceLimits = new ClusterResourceLimits.Builder(enableFeedBlockInDistributor, + stateIsHosted(deployState), + deployState.featureFlags().throwIfResourceLimitsSpecified()) .build(contentElement); c.clusterControllerConfig = new ClusterControllerConfig.Builder(getClusterId(contentElement), contentElement, diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/DomResourceLimitsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/DomResourceLimitsBuilder.java index f65c67de07d..bab991efe51 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/DomResourceLimitsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/DomResourceLimitsBuilder.java @@ -11,12 +11,13 @@ import com.yahoo.vespa.model.content.ResourceLimits; */ public class DomResourceLimitsBuilder { - public static ResourceLimits.Builder createBuilder(ModelElement contentXml, boolean hostedVespa) { + public static ResourceLimits.Builder createBuilder(ModelElement contentXml, boolean hostedVespa, boolean throwIfSpecified) { ResourceLimits.Builder builder = new ResourceLimits.Builder(); ModelElement resourceLimits = contentXml.child("resource-limits"); if (resourceLimits == null) { return builder; } - if (hostedVespa) throw new IllegalArgumentException("Element '" + resourceLimits + "' is not allowed to be set"); + if (hostedVespa && throwIfSpecified) + throw new IllegalArgumentException("Element '" + resourceLimits + "' is not allowed to be set"); if (resourceLimits.child("disk") != null) { builder.setDiskLimit(resourceLimits.childAsDouble("disk")); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/ClusterResourceLimitsTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/ClusterResourceLimitsTest.java index 8e7b1a27d36..ad1f5331a91 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/content/ClusterResourceLimitsTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/content/ClusterResourceLimitsTest.java @@ -6,6 +6,7 @@ import com.yahoo.vespa.model.builder.xml.dom.ModelElement; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.w3c.dom.Document; import java.util.Optional; @@ -48,7 +49,7 @@ public class ClusterResourceLimitsTest { return this; } public ClusterResourceLimits build() { - var builder = new ClusterResourceLimits.Builder(enableFeedBlockInDistributor, false); + var builder = new ClusterResourceLimits.Builder(enableFeedBlockInDistributor, false, false); builder.setClusterControllerBuilder(ctrlBuilder); builder.setContentNodeBuilder(nodeBuilder); return builder.build(); @@ -126,18 +127,22 @@ public class ClusterResourceLimitsTest { public void exception_is_thrown_when_resource_limits_are_specified() { final boolean hosted = true; + Document clusterXml = XML.getDocument("<cluster id=\"test\">" + + " <tuning>\n" + + " <resource-limits>\n" + + " <memory>0.92</memory>\n" + + " </resource-limits>\n" + + " </tuning>\n" + + "</cluster>"); + expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage(containsString("Element 'resource-limits' is not allowed to be set")); + ClusterResourceLimits.Builder builder = new ClusterResourceLimits.Builder(true, hosted, true); + builder.build(new ModelElement(clusterXml.getDocumentElement())); - ClusterResourceLimits.Builder builder = new ClusterResourceLimits.Builder(true, hosted); - builder.build(new ModelElement(XML.getDocument("<cluster id=\"test\">" + - " <tuning>\n" + - " <resource-limits>\n" + - " <memory>0.92</memory>\n" + - " </resource-limits>\n" + - " </tuning>\n" + - "</cluster>") - .getDocumentElement())); + expectedException = ExpectedException.none(); + ClusterResourceLimits.Builder builder2 = new ClusterResourceLimits.Builder(true, hosted, false); + builder2.build(new ModelElement(clusterXml.getDocumentElement())); } private void assertLimits(Double expCtrlDisk, Double expCtrlMemory, Double expNodeDisk, Double expNodeMemory, Fixture f) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/FleetControllerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/FleetControllerClusterTest.java index c713414d043..2eecfa9440e 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/content/FleetControllerClusterTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/content/FleetControllerClusterTest.java @@ -23,7 +23,7 @@ public class FleetControllerClusterTest { var clusterElement = new ModelElement(doc.getDocumentElement()); return new ClusterControllerConfig.Builder("storage", clusterElement, - new ClusterResourceLimits.Builder(enableFeedBlockInDistributor, false) + new ClusterResourceLimits.Builder(enableFeedBlockInDistributor, false, false) .build(clusterElement).getClusterControllerLimits()) .build(root.getDeployState(), root, clusterElement.getXml()); } @@ -112,7 +112,7 @@ public class FleetControllerClusterTest { assertLimits(0.8, 0.7, getConfigForResourceLimitsTuning(null, 0.7)); } - private static double DELTA = 0.00001; + private static final double DELTA = 0.00001; private void assertLimits(double expDisk, double expMemory, FleetcontrollerConfig config) { var limits = config.cluster_feed_block_limit(); |