diff options
Diffstat (limited to 'config-model')
4 files changed, 67 insertions, 6 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java index bcf76c15fa2..397b11661e5 100644 --- a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java +++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java @@ -1,4 +1,4 @@ -// Copyright 2019 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config.model.deploy; import com.google.common.collect.ImmutableList; @@ -53,6 +53,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea private boolean useBucketExecutorForLidSpaceCompact; private boolean enableFeedBlockInDistributor = false; private double maxDeadBytesRatio = 0.2; + private int clusterControllerMaxHeapSizeInMb = 512; @Override public ModelContext.FeatureFlags featureFlags() { return this; } @Override public boolean multitenant() { return multitenant; } @@ -88,6 +89,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea @Override public boolean useBucketExecutorForLidSpaceCompact() { return useBucketExecutorForLidSpaceCompact; } @Override public boolean enableFeedBlockInDistributor() { return enableFeedBlockInDistributor; } @Override public double maxDeadBytesRatio() { return maxDeadBytesRatio; } + @Override public int clusterControllerMaxHeapSizeInMb() { return clusterControllerMaxHeapSizeInMb; } public TestProperties setFeedConcurrency(double feedConcurrency) { this.feedConcurrency = feedConcurrency; @@ -202,6 +204,11 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea return this; } + public TestProperties clusterControllerMaxHeapSizeInMb(int heapSize) { + clusterControllerMaxHeapSizeInMb = heapSize; + return this; + } + public static class Spec implements ConfigServerSpec { private final String hostName; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainerCluster.java index 58e5ccd7c3a..4fc73de3b48 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainerCluster.java @@ -1,9 +1,11 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.admin.clustercontroller; +import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.api.Reindexing; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; +import com.yahoo.search.config.QrStartConfig; import com.yahoo.vespa.model.container.ContainerCluster; /** @@ -14,12 +16,14 @@ import com.yahoo.vespa.model.container.ContainerCluster; */ public class ClusterControllerContainerCluster extends ContainerCluster<ClusterControllerContainer> { + private final ModelContext.FeatureFlags featureFlags; private final ReindexingContext reindexingContext; public ClusterControllerContainerCluster( AbstractConfigProducer<?> parent, String subId, String name, DeployState deployState) { super(parent, subId, name, deployState, false); addDefaultHandlersWithVip(); + this.featureFlags = deployState.featureFlags(); this.reindexingContext = createReindexingContext(deployState); } @@ -28,6 +32,16 @@ public class ClusterControllerContainerCluster extends ContainerCluster<ClusterC @Override protected boolean messageBusEnabled() { return false; } + @Override + public void getConfig(QrStartConfig.Builder builder) { + super.getConfig(builder); + int maxHeapSize = featureFlags.clusterControllerMaxHeapSizeInMb(); + boolean verboseGc = (maxHeapSize < 512); + builder.jvm + .verbosegc(verboseGc) + .heapsize(maxHeapSize); + } + public ReindexingContext reindexingContext() { return reindexingContext; } private static ReindexingContext createReindexingContext(DeployState deployState) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java index 26612f7a420..5e9125f560d 100755 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java @@ -620,6 +620,8 @@ public abstract class ContainerCluster<CONTAINER extends Container> public void setEnvironmentVars(String environmentVars) { this.environmentVars = environmentVars; } + public String getEnvironmentVars() { return environmentVars; } + public Optional<String> getJvmGCOptions() { return Optional.ofNullable(jvmGCOptions); } public final void setRpcServerEnabled(boolean rpcServerEnabled) { this.rpcServerEnabled = rpcServerEnabled; } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/ClusterControllerTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/ClusterControllerTestCase.java index 194ebb0f3b2..e92778c11e7 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/admin/ClusterControllerTestCase.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/ClusterControllerTestCase.java @@ -372,7 +372,7 @@ public class ClusterControllerTestCase extends DomBuilderTest { "\n" + "</services>"; - VespaModel model = createVespaModel(xml, false); + VespaModel model = createVespaModel(xml); assertTrue(model.getService("admin/cluster-controllers/0").isPresent()); assertTrue(existsHostsWithClusterControllerConfigId(model)); @@ -403,6 +403,44 @@ public class ClusterControllerTestCase extends DomBuilderTest { } @Test + public void testQrStartConfigWithFeatureFlagForMaxHeap() throws Exception { + String xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" + + "<services>\n" + + "\n" + + " <admin version=\"2.0\">\n" + + " <adminserver hostalias=\"configserver\" />\n" + + " <logserver hostalias=\"logserver\" />\n" + + " <slobroks>\n" + + " <slobrok hostalias=\"configserver\" />\n" + + " <slobrok hostalias=\"logserver\" />\n" + + " </slobroks>\n" + + " </admin>\n" + + " <content version='1.0' id='bar'>" + + " <redundancy>1</redundancy>\n" + + " <documents>" + + " <document type=\"type1\" mode=\"store-only\"/>\n" + + " </documents>\n" + + " <group>" + + " <node hostalias='node0' distribution-key='0' />" + + " </group>" + + " </content>" + + "\n" + + "</services>"; + + VespaModel model = createVespaModel(xml, new DeployState.Builder().properties(new TestProperties().clusterControllerMaxHeapSizeInMb(256))); + assertTrue(model.getService("admin/cluster-controllers/0").isPresent()); + + QrStartConfig.Builder qrBuilder = new QrStartConfig.Builder(); + model.getConfig(qrBuilder, "admin/cluster-controllers/0/components/clustercontroller-bar-configurer"); + QrStartConfig qrStartConfig = new QrStartConfig(qrBuilder); + // Taken from ContainerCluster + assertEquals(32, qrStartConfig.jvm().minHeapsize()); + // Overridden values from ClusterControllerContainerCluster + assertEquals(256, qrStartConfig.jvm().heapsize()); + assertTrue(qrStartConfig.jvm().verbosegc()); + } + + @Test public void testUnconfiguredNoContent() throws Exception { String xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" + "<services>\n" + @@ -476,21 +514,21 @@ public class ClusterControllerTestCase extends DomBuilderTest { } private VespaModel createVespaModel(String servicesXml) throws IOException, SAXException { - return createVespaModel(servicesXml, false); + return createVespaModel(servicesXml, new DeployState.Builder().properties(new TestProperties().enableAutomaticReindexing(true))); } - private VespaModel createVespaModel(String servicesXml, boolean isHosted) throws IOException, SAXException { + + private VespaModel createVespaModel(String servicesXml, DeployState.Builder deployStateBuilder) throws IOException, SAXException { ApplicationPackage applicationPackage = new MockApplicationPackage.Builder() .withServices(servicesXml) .withSchemas(sds) .build(); // Need to create VespaModel to make deploy properties have effect DeployLogger logger = new DeployLoggerStub(); - VespaModel model = new VespaModel(new NullConfigModelRegistry(), new DeployState.Builder() + VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployStateBuilder .applicationPackage(applicationPackage) .reindexing(new DummyReindexing()) .deployLogger(logger) .zone(new Zone(SystemName.cd, Environment.dev, RegionName.from("here"))) - .properties(new TestProperties().setHostedVespa(isHosted).enableAutomaticReindexing(true)) .build()); SimpleApplicationValidator.checkServices(new StringReader(servicesXml), new Version(7)); return model; |