diff options
Diffstat (limited to 'config-model/src/test/java/com/yahoo')
4 files changed, 109 insertions, 30 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 4a9a6d3dff3..839ddcecde3 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 @@ -87,7 +87,7 @@ public class ModelProvisioningTest { " <handler id='myHandler'>" + " <component id='injected' />" + " </handler>" + - " <nodes count='2' allocated-memory='45%' jvmargs='-verbosegc' preload='lib/blablamalloc.so'/>" + + " <nodes count='2' allocated-memory='45%' gcopts='-XX:+UseParNewGC' jvmargs='-verbosegc' preload='lib/blablamalloc.so'/>" + "</jdisc>" + "</services>"; String hosts ="<hosts>" @@ -112,35 +112,38 @@ public class ModelProvisioningTest { + "</hosts>"; VespaModelCreatorWithMockPkg creator = new VespaModelCreatorWithMockPkg(null, services); VespaModel model = creator.create(new DeployState.Builder().modelHostProvisioner(new InMemoryProvisioner(Hosts.readFrom(new StringReader(hosts)), true))); - assertThat(model.getContainerClusters().get("mydisc").getContainers().size(), is(3)); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(0).getConfigId(), is("mydisc/container.0")); - assertTrue(model.getContainerClusters().get("mydisc").getContainers().get(0).isInitialized()); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(1).getConfigId(), is("mydisc/container.1")); - assertTrue(model.getContainerClusters().get("mydisc").getContainers().get(1).isInitialized()); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(2).getConfigId(), is("mydisc/container.2")); - assertTrue(model.getContainerClusters().get("mydisc").getContainers().get(2).isInitialized()); - - assertThat(model.getContainerClusters().get("mydisc2").getContainers().size(), is(2)); - assertThat(model.getContainerClusters().get("mydisc2").getContainers().get(0).getConfigId(), is("mydisc2/container.0")); - assertTrue(model.getContainerClusters().get("mydisc2").getContainers().get(0).isInitialized()); - assertThat(model.getContainerClusters().get("mydisc2").getContainers().get(1).getConfigId(), is("mydisc2/container.1")); - assertTrue(model.getContainerClusters().get("mydisc2").getContainers().get(1).isInitialized()); - - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(0).getJvmArgs(), is("")); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(1).getJvmArgs(), is("")); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(2).getJvmArgs(), is("")); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(0).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamalloc.so"))); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(1).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamalloc.so"))); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(2).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamalloc.so"))); - assertThat(model.getContainerClusters().get("mydisc").getMemoryPercentage(), is(Optional.empty())); - - assertThat(model.getContainerClusters().get("mydisc2").getContainers().get(0).getJvmArgs(), is("-verbosegc")); - assertThat(model.getContainerClusters().get("mydisc2").getContainers().get(1).getJvmArgs(), is("-verbosegc")); - assertThat(model.getContainerClusters().get("mydisc2").getContainers().get(0).getPreLoad(), is("lib/blablamalloc.so")); - assertThat(model.getContainerClusters().get("mydisc2").getContainers().get(1).getPreLoad(), is("lib/blablamalloc.so")); - assertThat(model.getContainerClusters().get("mydisc2").getMemoryPercentage(), is(Optional.of(45))); + ContainerCluster mydisc = model.getContainerClusters().get("mydisc"); + ContainerCluster mydisc2 = model.getContainerClusters().get("mydisc2"); + assertThat(mydisc.getContainers().size(), is(3)); + assertThat(mydisc.getContainers().get(0).getConfigId(), is("mydisc/container.0")); + assertTrue(mydisc.getContainers().get(0).isInitialized()); + assertThat(mydisc.getContainers().get(1).getConfigId(), is("mydisc/container.1")); + assertTrue(mydisc.getContainers().get(1).isInitialized()); + assertThat(mydisc.getContainers().get(2).getConfigId(), is("mydisc/container.2")); + assertTrue(mydisc.getContainers().get(2).isInitialized()); + + assertThat(mydisc2.getContainers().size(), is(2)); + assertThat(mydisc2.getContainers().get(0).getConfigId(), is("mydisc2/container.0")); + assertTrue(mydisc2.getContainers().get(0).isInitialized()); + assertThat(mydisc2.getContainers().get(1).getConfigId(), is("mydisc2/container.1")); + assertTrue(mydisc2.getContainers().get(1).isInitialized()); + + assertThat(mydisc.getContainers().get(0).getJvmArgs(), is("")); + assertThat(mydisc.getContainers().get(1).getJvmArgs(), is("")); + assertThat(mydisc.getContainers().get(2).getJvmArgs(), is("")); + assertThat(mydisc.getContainers().get(0).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamalloc.so"))); + assertThat(mydisc.getContainers().get(1).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamalloc.so"))); + assertThat(mydisc.getContainers().get(2).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamalloc.so"))); + assertThat(mydisc.getMemoryPercentage(), is(Optional.empty())); + + assertThat(mydisc2.getContainers().get(0).getJvmArgs(), is("-verbosegc")); + assertThat(mydisc2.getContainers().get(1).getJvmArgs(), is("-verbosegc")); + assertThat(mydisc2.getContainers().get(0).getPreLoad(), is("lib/blablamalloc.so")); + assertThat(mydisc2.getContainers().get(1).getPreLoad(), is("lib/blablamalloc.so")); + assertThat(mydisc2.getMemoryPercentage(), is(Optional.of(45))); + assertThat(mydisc2.getGCOpts(), is(Optional.of("-XX:+UseParNewGC"))); QrStartConfig.Builder qrStartBuilder = new QrStartConfig.Builder(); - model.getContainerClusters().get("mydisc2").getConfig(qrStartBuilder); + mydisc2.getConfig(qrStartBuilder); QrStartConfig qrsStartConfig = new QrStartConfig(qrStartBuilder); assertEquals(45, qrsStartConfig.jvm().heapSizeAsPercentageOfPhysicalMemory()); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java index 8e096b14d85..7051ffda84a 100755 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java @@ -107,6 +107,10 @@ public class ContainerClusterTest { DeployState state = new DeployState.Builder().properties(new DeployProperties.Builder().hostedVespa(isHosted).build()).build(); return new MockRoot("foo", state); } + private MockRoot createRoot(boolean isHosted, Zone zone) { + DeployState state = new DeployState.Builder().zone(zone).properties(new DeployProperties.Builder().hostedVespa(isHosted).build()).build(); + return new MockRoot("foo", state); + } private ContainerCluster createContainerCluster(MockRoot root, boolean isCombinedCluster, Integer memoryPercentage, Optional<ContainerClusterVerifier> extraComponents) { @@ -154,6 +158,7 @@ public class ContainerClusterTest { assertEquals(expectedArgs, jvmArgs); } } + private void verifyJvmArgs(boolean isHosted, boolean hasDocProc) { MockRoot root = createRoot(isHosted); ContainerCluster cluster = createContainerCluster(root, false); @@ -174,6 +179,36 @@ public class ContainerClusterTest { verifyJvmArgs(isHosted, hasDocProc, "", container.getJvmArgs()); } + private void verifyGCOpts(boolean isHosted, String override, Zone zone, String expected) { + MockRoot root = createRoot(isHosted, zone); + ContainerCluster cluster = createContainerCluster(root, false); + addContainer(root.deployLogger(), cluster, "c1", "host-c1"); + cluster.setGCOpts(override); + assertEquals(1, cluster.getContainers().size()); + QrStartConfig.Builder qsB = new QrStartConfig.Builder(); + cluster.getSearch().getConfig(qsB); + QrStartConfig qsC= new QrStartConfig(qsB); + assertEquals(expected, qsC.jvm().gcopts()); + } + + private void verifyGCOpts(boolean isHosted, Zone zone, String expected) { + verifyGCOpts(isHosted, null, zone, expected); + verifyGCOpts(isHosted, "-XX:+UseG1GC", zone, "-XX:+UseG1GC"); + Zone DEV = new Zone(SystemName.dev, zone.environment(), zone.region()); + verifyGCOpts(isHosted, null, DEV, ContainerCluster.G1GC); + verifyGCOpts(isHosted, "-XX:+UseConcMarkSweepGC", DEV, "-XX:+UseConcMarkSweepGC"); + + } + + @Test + public void requireThatGCOptsIsHonoured() { + final Zone US_EAST_3 = new Zone(Environment.prod, RegionName.from("us-east-3")); + verifyGCOpts(false, Zone.defaultZone(),ContainerCluster.CMS); + verifyGCOpts(false, US_EAST_3, ContainerCluster.CMS); + verifyGCOpts(true, Zone.defaultZone(), ContainerCluster.CMS); + verifyGCOpts(true, US_EAST_3, ContainerCluster.G1GC); + } + @Test public void testContainerClusterMaxThreads() { MockRoot root = createRoot(false); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java index f94ebab42a9..5d708dcddf4 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java @@ -28,6 +28,7 @@ import com.yahoo.container.usability.BindingsOverviewHandler; import com.yahoo.jdisc.http.ServletPathsConfig; import com.yahoo.net.HostName; import com.yahoo.prelude.cluster.QrMonitorConfig; +import com.yahoo.search.config.QrStartConfig; import com.yahoo.vespa.model.AbstractService; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.container.Container; @@ -68,6 +69,46 @@ import static org.junit.Assert.fail; public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { @Test + public void detect_conflicting_gcoptions_in_jvmargs() { + assertFalse(ContainerModelBuilder.incompatibleGCOptions("")); + assertFalse(ContainerModelBuilder.incompatibleGCOptions("UseG1GC")); + assertTrue(ContainerModelBuilder.incompatibleGCOptions("-XX:+UseG1GC")); + assertTrue(ContainerModelBuilder.incompatibleGCOptions("abc -XX:+UseParNewGC xyz")); + } + + @Test + public void honours_gcopts() { + Element clusterElem = DomBuilderTest.parse( + "<jdisc version='1.0'>", + " <search/>", + " <nodes gcopts='-XX:+UseG1GC'>", + " <node hostalias='mockhost'/>", + " </nodes>", + "</jdisc>" ); + createModel(root, clusterElem); + QrStartConfig.Builder qrStartBuilder = new QrStartConfig.Builder(); + root.getConfig(qrStartBuilder, "jdisc/container.0"); + QrStartConfig qrStartConfig = new QrStartConfig(qrStartBuilder); + assertEquals("-XX:+UseG1GC", qrStartConfig.jvm().gcopts()); + } + + @Test + public void ignores_gcopts_on_conflicting_jvargs() { + Element clusterElem = DomBuilderTest.parse( + "<jdisc version='1.0'>", + " <search/>", + " <nodes gcopts='-XX:+UseG1GC' jvmargs='-XX:+UseParNewGC'>", + " <node hostalias='mockhost'/>", + " </nodes>", + "</jdisc>" ); + createModel(root, clusterElem); + QrStartConfig.Builder qrStartBuilder = new QrStartConfig.Builder(); + root.getConfig(qrStartBuilder, "jdisc/container.0"); + QrStartConfig qrStartConfig = new QrStartConfig(qrStartBuilder); + assertEquals(ContainerCluster.CMS, qrStartConfig.jvm().gcopts()); + } + + @Test public void default_port_is_4080() throws Exception { Element clusterElem = DomBuilderTest.parse( "<jdisc version='1.0'>", diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/DocprocBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/DocprocBuilderTest.java index f4d3fbc782c..5acfe9312f6 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/DocprocBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/DocprocBuilderTest.java @@ -217,7 +217,7 @@ public class DocprocBuilderTest extends DomBuilderTest { QrStartConfig.Jvm jvm = qrStartConfig.jvm(); assertThat(jvm.server(), is(true)); assertThat(jvm.verbosegc(), is(true)); - assertThat(jvm.gcopts(), is("")); + assertThat(jvm.gcopts(), is("-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=15 -XX:NewRatio=1")); assertThat(jvm.heapsize(), is(1536)); assertThat(jvm.stacksize(), is(512)); assertThat(qrStartConfig.ulimitv(), is("")); |