diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-11-02 11:05:56 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-02 11:05:56 +0100 |
commit | acbd0c230aca6c6e0dae0a832047e3d8177d7393 (patch) | |
tree | bae46593d11018a48143eb4e56f46bbfd063609d | |
parent | 644630efa8afae5944e8e68c996bd3219ae44130 (diff) | |
parent | 13e7ffb85bad06d12a3c31034746c25c242c7c73 (diff) |
Merge pull request #7543 from vespa-engine/balder/also-verify-sanity-of-jvmargs-in-hosted-mode
Balder/also verify sanity of jvmargs in hosted mode
8 files changed, 136 insertions, 108 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java index 1f6f7ad6c69..c022f20db70 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java @@ -44,7 +44,7 @@ import java.util.logging.Logger; public class VespaDomBuilder extends VespaModelBuilder { public static final String JVMARGS_ATTRIB_NAME = "jvmargs"; - public static final String GCOPTS_ATTRIB_NAME = "gcopts"; + public static final String JVM_GC_OPTIONS = "jvm-gc-options"; public static final String PRELOAD_ATTRIB_NAME = "preload"; // Intended for vespa engineers public static final String MMAP_NOCORE_LIMIT = "mmap-core-limit"; // Intended for vespa engineers public static final String CORE_ON_OOM = "core-on-oom"; // Intended for vespa engineers 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 ccd828b5f48..29a758fee74 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 @@ -14,9 +14,6 @@ import com.yahoo.config.docproc.SchemamappingConfig; import com.yahoo.config.model.ApplicationConfigProducerRoot; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; -import com.yahoo.config.provision.Environment; -import com.yahoo.config.provision.RegionName; -import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; import com.yahoo.container.BundlesConfig; import com.yahoo.container.ComponentsConfig; @@ -144,7 +141,7 @@ public final class ContainerCluster public static final String STATISTICS_HANDLER_CLASS = "com.yahoo.container.config.StatisticsRequestHandler"; public static final String SIMPLE_LINGUISTICS_PROVIDER = "com.yahoo.language.provider.SimpleLinguisticsProvider"; public static final String CMS = "-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=15 -XX:NewRatio=1"; - static final String G1GC = "-XX:+UseG1GC -XX:MaxTenuringThreshold=15"; + public static final String G1GC = "-XX:+UseG1GC -XX:MaxTenuringThreshold=15"; public static final String ROOT_HANDLER_BINDING = "*://*/"; @@ -186,7 +183,7 @@ public final class ContainerCluster private Zone zone; private String hostClusterId = null; - private String gcopts = null; + private String jvmGCOptions = null; private Integer memoryPercentage = null; private static class AcceptAllVerifier implements ContainerClusterVerifier { @@ -631,20 +628,6 @@ public final class ContainerCluster if (containerSearch!=null) containerSearch.getConfig(builder); } - private String buildGCOpts(Zone zone) { - Optional<String> gcopts = getGCOpts(); - if (gcopts.isPresent()) { - return gcopts.get(); - } else if (zone.system() == SystemName.dev) { - return G1GC; - } else if (isHostedVespa()) { - return ((zone.environment() != Environment.prod) || RegionName.from("us-east-3").equals(zone.region())) - ? G1GC : CMS; - } else { - return CMS; - } - } - @Override public void getConfig(QrStartConfig.Builder builder) { QrStartConfig.Jvm.Builder jvmBuilder = new QrStartConfig.Jvm.Builder(); @@ -656,7 +639,9 @@ public final class ContainerCluster if (containerSearch!=null) { jvmBuilder.directMemorySizeCache(containerSearch.totalCacheSizeMb()); } - jvmBuilder.gcopts(buildGCOpts(getZone())); + if (jvmGCOptions != null) { + jvmBuilder.gcopts(jvmGCOptions); + } builder.jvm(jvmBuilder); } @@ -814,8 +799,8 @@ public final class ContainerCluster public Optional<String> getHostClusterId() { return Optional.ofNullable(hostClusterId); } public void setMemoryPercentage(Integer memoryPercentage) { this.memoryPercentage = memoryPercentage; } - public void setGCOpts(String gcopts) { this.gcopts = gcopts; } - public Optional<String> getGCOpts() { return Optional.ofNullable(gcopts); } + public void setJvmGCOptions(String opts) { this.jvmGCOptions = opts; } + public Optional<String> getJvmGCOptions() { return Optional.ofNullable(jvmGCOptions); } /** * Returns the percentage of host physical memory this application has specified for nodes in this cluster, 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 ac1f313d983..5f9b3e875e6 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 @@ -21,7 +21,9 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.NodeType; +import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.Rotation; +import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; import com.yahoo.container.jdisc.config.MetricDefaultsConfig; import com.yahoo.search.rendering.RendererRegistry; @@ -456,6 +458,19 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { Pattern cmsArgs = Pattern.compile("-XX:[-+]*CMS"); return (gcAlgorithm.matcher(jvmargs).find() ||cmsArgs.matcher(jvmargs).find()); } + + private static String buildJvmGCOptions(Zone zone, String jvmGCOPtions, boolean isHostedVespa) { + if (jvmGCOPtions != null) { + return jvmGCOPtions; + } else if (zone.system() == SystemName.dev) { + return ContainerCluster.G1GC; + } else if (isHostedVespa) { + return ((zone.environment() != Environment.prod) || RegionName.from("us-east-3").equals(zone.region())) + ? ContainerCluster.G1GC : ContainerCluster.CMS; + } else { + return ContainerCluster.CMS; + } + } private void addNodesFromXml(ContainerCluster cluster, Element containerElement, ConfigModelContext context) { Element nodesElement = XML.getChild(containerElement, "nodes"); if (nodesElement == null) { // default single node on localhost @@ -468,13 +483,14 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { else { List<Container> nodes = createNodes(cluster, nodesElement, context); String jvmArgs = nodesElement.getAttribute(VespaDomBuilder.JVMARGS_ATTRIB_NAME); - String gcopts = nodesElement.hasAttribute(VespaDomBuilder.GCOPTS_ATTRIB_NAME) - ? nodesElement.getAttribute(VespaDomBuilder.GCOPTS_ATTRIB_NAME) + String jvmGCOptions = nodesElement.hasAttribute(VespaDomBuilder.JVM_GC_OPTIONS) + ? nodesElement.getAttribute(VespaDomBuilder.JVM_GC_OPTIONS) : null; if (incompatibleGCOptions(jvmArgs)) { - context.getDeployLogger().log(Level.WARNING, "You need to move out your GC related options from 'jvmargs' to 'gcopts'"); + context.getDeployLogger().log(Level.WARNING, "You need to move out your GC related options from 'jvmargs' to 'jvm-gc-options'"); + cluster.setJvmGCOptions(ContainerCluster.CMS); } else { - cluster.setGCOpts(gcopts); + cluster.setJvmGCOptions(buildJvmGCOptions(context.getDeployState().zone(), jvmGCOptions, context.getDeployState().isHosted())); } applyNodesTagJvmArgs(nodes, jvmArgs); applyRoutingAliasProperties(nodes, cluster); diff --git a/config-model/src/main/resources/schema/common.rnc b/config-model/src/main/resources/schema/common.rnc index 6a82556f01b..32ba67b6429 100644 --- a/config-model/src/main/resources/schema/common.rnc +++ b/config-model/src/main/resources/schema/common.rnc @@ -2,7 +2,7 @@ service.attlist &= attribute hostalias { xsd:NCName } service.attlist &= attribute baseport { xsd:unsignedShort }? service.attlist &= attribute jvmargs { text }? -service.attlist &= attribute gcopts { text }? +service.attlist &= attribute jvm-gc-options { text }? # preload is for internal use only service.attlist &= attribute preload { text }? diff --git a/config-model/src/main/resources/schema/containercluster.rnc b/config-model/src/main/resources/schema/containercluster.rnc index 4862fdf7a50..9acb9daaba5 100644 --- a/config-model/src/main/resources/schema/containercluster.rnc +++ b/config-model/src/main/resources/schema/containercluster.rnc @@ -211,7 +211,7 @@ DocumentApi = element document-api { NodesOfContainerCluster = element nodes { attribute jvmargs { text }? & - attribute gcopts { text }? & + attribute jvm-gc-options { text }? & attribute preload { text }? & attribute allocated-memory { text }? & attribute cpu-socket-affinity { xsd:boolean }? & 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 8396cac265c..743dfc5ca73 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 @@ -86,7 +86,7 @@ public class ModelProvisioningTest { " <handler id='myHandler'>" + " <component id='injected' />" + " </handler>" + - " <nodes count='2' allocated-memory='45%' gcopts='-XX:+UseParNewGC' jvmargs='-verbosegc' preload='lib/blablamalloc.so'/>" + + " <nodes count='2' allocated-memory='45%' jvm-gc-options='-XX:+UseParNewGC' jvmargs='-verbosegc' preload='lib/blablamalloc.so'/>" + "</jdisc>" + "</services>"; String hosts ="<hosts>" @@ -140,7 +140,7 @@ public class ModelProvisioningTest { 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"))); + assertThat(mydisc2.getJvmGCOptions(), is(Optional.of("-XX:+UseParNewGC"))); QrStartConfig.Builder qrStartBuilder = new QrStartConfig.Builder(); mydisc2.getConfig(qrStartBuilder); QrStartConfig qrsStartConfig = new QrStartConfig(qrStartBuilder); 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 e4fb19010f5..c9d89a50449 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 @@ -179,36 +179,6 @@ 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.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 a3e24b8a520..efa0d42f014 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 @@ -14,6 +14,7 @@ import com.yahoo.config.model.provision.InMemoryProvisioner; import com.yahoo.config.model.test.MockApplicationPackage; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; import com.yahoo.container.ComponentsConfig; import com.yahoo.container.QrConfig; @@ -69,7 +70,7 @@ import static org.junit.Assert.fail; public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { @Test - public void detect_conflicting_gcoptions_in_jvmargs() { + public void detect_conflicting_jvmgcoptions_in_jvmargs() { assertFalse(ContainerModelBuilder.incompatibleGCOptions("")); assertFalse(ContainerModelBuilder.incompatibleGCOptions("UseG1GC")); assertTrue(ContainerModelBuilder.incompatibleGCOptions("-XX:+UseG1GC")); @@ -78,11 +79,11 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void honours_gcopts() { + public void honours_jvm_gc_options() { Element clusterElem = DomBuilderTest.parse( "<jdisc version='1.0'>", " <search/>", - " <nodes gcopts='-XX:+UseG1GC'>", + " <nodes jvm-gc-options='-XX:+UseG1GC'>", " <node hostalias='mockhost'/>", " </nodes>", "</jdisc>" ); @@ -93,23 +94,79 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { assertEquals("-XX:+UseG1GC", qrStartConfig.jvm().gcopts()); } - @Test - public void ignores_gcopts_on_conflicting_jvargs() { - Element clusterElem = DomBuilderTest.parse( - "<jdisc version='1.0'>", - " <nodes gcopts='-XX:+UseG1GC' jvmargs='-XX:+UseParNewGC'>", - " <node hostalias='mockhost'/>", - " </nodes>", - "</jdisc>" ); - createModel(root, clusterElem); + private static void verifyIgnoreJvmGCOptions(boolean isHosted) throws IOException, SAXException { + String servicesXml = + "<jdisc version='1.0'>" + + " <nodes jvm-gc-options='-XX:+UseG1GC' jvmargs='-XX:+UseParNewGC'>" + + " <node hostalias='mockhost'/>" + + " </nodes>" + + "</jdisc>"; + ApplicationPackage applicationPackage = new MockApplicationPackage.Builder().withServices(servicesXml).build(); + // Need to create VespaModel to make deploy properties have effect + final MyLogger logger = new MyLogger(); + VespaModel model = new VespaModel(new NullConfigModelRegistry(), new DeployState.Builder() + .applicationPackage(applicationPackage) + .deployLogger(logger) + .zone(new Zone(SystemName.cd, Environment.dev, RegionName.from("here"))) + .properties(new DeployProperties.Builder() + .hostedVespa(isHosted) + .build()) + .build()); QrStartConfig.Builder qrStartBuilder = new QrStartConfig.Builder(); - root.getConfig(qrStartBuilder, "jdisc/container.0"); + model.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 { + public void ignores_jvmgcoptions_on_conflicting_jvmargs() throws IOException, SAXException { + verifyIgnoreJvmGCOptions(false); + verifyIgnoreJvmGCOptions(true); + } + + private void verifyJvmGCOptions(boolean isHosted, String override, Zone zone, String expected) throws IOException, SAXException { + String servicesXml = + "<jdisc version='1.0'>" + + " <nodes " + ((override == null) ? ">" : ("jvm-gc-options='" + override + "'>")) + + " <node hostalias='mockhost'/>" + + " </nodes>" + + "</jdisc>"; + ApplicationPackage applicationPackage = new MockApplicationPackage.Builder().withServices(servicesXml).build(); + // Need to create VespaModel to make deploy properties have effect + final MyLogger logger = new MyLogger(); + VespaModel model = new VespaModel(new NullConfigModelRegistry(), new DeployState.Builder() + .applicationPackage(applicationPackage) + .deployLogger(logger) + .zone(zone) + .properties(new DeployProperties.Builder() + .hostedVespa(isHosted) + .build()) + .build()); + QrStartConfig.Builder qrStartBuilder = new QrStartConfig.Builder(); + model.getConfig(qrStartBuilder, "jdisc/container.0"); + QrStartConfig qrStartConfig = new QrStartConfig(qrStartBuilder); + assertEquals(expected, qrStartConfig.jvm().gcopts()); + } + + private void verifyJvmGCOptions(boolean isHosted, Zone zone, String expected) throws IOException, SAXException { + verifyJvmGCOptions(isHosted, null, zone, expected); + verifyJvmGCOptions(isHosted, "-XX:+UseG1GC", zone, "-XX:+UseG1GC"); + Zone DEV = new Zone(SystemName.dev, zone.environment(), zone.region()); + verifyJvmGCOptions(isHosted, null, DEV, ContainerCluster.G1GC); + verifyJvmGCOptions(isHosted, "-XX:+UseConcMarkSweepGC", DEV, "-XX:+UseConcMarkSweepGC"); + } + + @Test + public void requireThatJvmGCOptionsIsHonoured() throws IOException, SAXException { + final Zone US_EAST_3 = new Zone(Environment.prod, RegionName.from("us-east-3")); + verifyJvmGCOptions(false, Zone.defaultZone(),ContainerCluster.CMS); + verifyJvmGCOptions(false, US_EAST_3, ContainerCluster.CMS); + verifyJvmGCOptions(true, Zone.defaultZone(), ContainerCluster.CMS); + verifyJvmGCOptions(true, US_EAST_3, ContainerCluster.G1GC); + } + + @Test + public void default_port_is_4080() { Element clusterElem = DomBuilderTest.parse( "<jdisc version='1.0'>", nodesXml, @@ -120,7 +177,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void http_server_port_is_configurable_and_does_not_affect_other_ports() throws Exception { + public void http_server_port_is_configurable_and_does_not_affect_other_ports() { Element clusterElem = DomBuilderTest.parse( "<jdisc version='1.0'>", " <http>", @@ -162,7 +219,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { assertThat(logger.msgs.get(0).getSecond(), containsString(String.format("You cannot set port to anything else than %d", Container.BASEPORT))); } - private class MyLogger implements DeployLogger { + private static class MyLogger implements DeployLogger { List<Pair<Level, String>> msgs = new ArrayList<>(); @Override public void log(Level level, String message) { @@ -171,7 +228,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void one_cluster_with_explicit_port_and_one_without_is_ok() throws Exception { + public void one_cluster_with_explicit_port_and_one_without_is_ok() { Element cluster1Elem = DomBuilderTest.parse( "<jdisc id='cluster1' version='1.0' />"); Element cluster2Elem = DomBuilderTest.parse( @@ -184,7 +241,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void two_clusters_without_explicit_port_throws_exception() throws SAXException, IOException { + public void two_clusters_without_explicit_port_throws_exception() { Element cluster1Elem = DomBuilderTest.parse( "<jdisc id='cluster1' version='1.0'>", nodesXml, @@ -202,7 +259,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void verify_bindings_for_builtin_handlers() throws Exception { + public void verify_bindings_for_builtin_handlers() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0' />" ); @@ -226,7 +283,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void default_root_handler_is_disabled_when_user_adds_a_handler_with_same_binding() throws Exception { + public void default_root_handler_is_disabled_when_user_adds_a_handler_with_same_binding() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>" + " <handler id='userRootHandler'>" + @@ -240,7 +297,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void handler_bindings_are_included_in_discBindings_config() throws Exception { + public void handler_bindings_are_included_in_discBindings_config() { createClusterWithJDiscHandler(); String discBindingsConfig = root.getConfig(JdiscBindingsConfig.class, "default").toString(); assertThat(discBindingsConfig, containsString("{discHandler}")); @@ -250,12 +307,12 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void handlers_are_included_in_components_config() throws Exception { + public void handlers_are_included_in_components_config() { createClusterWithJDiscHandler(); assertThat(componentsConfig().toString(), containsString(".id \"discHandler\"")); } - private void createClusterWithJDiscHandler() throws SAXException, IOException { + private void createClusterWithJDiscHandler() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>", " <handler id='discHandler'>", @@ -269,14 +326,14 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void servlets_are_included_in_ServletPathConfig() throws Exception { + public void servlets_are_included_in_ServletPathConfig() { createClusterWithServlet(); ServletPathsConfig servletPathsConfig = root.getConfig(ServletPathsConfig.class, "default"); assertThat(servletPathsConfig.servlets().values().iterator().next().path(), is("p/a/t/h")); } @Test - public void servletconfig_is_produced() throws Exception { + public void servletconfig_is_produced() { createClusterWithServlet(); String configId = getContainerCluster("default").getServletMap(). @@ -287,7 +344,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { assertThat(servletConfig.map().get("myKey"), is("myValue")); } - private void createClusterWithServlet() throws SAXException, IOException { + private void createClusterWithServlet() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>", " <servlet id='myServlet' class='myClass' bundle='myBundle'>", @@ -303,7 +360,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { @Test - public void processing_handler_bindings_can_be_overridden() throws Exception { + public void processing_handler_bindings_can_be_overridden() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>", " <processing>", @@ -321,7 +378,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void clientProvider_bindings_are_included_in_discBindings_config() throws Exception { + public void clientProvider_bindings_are_included_in_discBindings_config() { createModelWithClientProvider(); String discBindingsConfig = root.getConfig(JdiscBindingsConfig.class, "default").toString(); assertThat(discBindingsConfig, containsString("{discClient}")); @@ -331,12 +388,12 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void clientProviders_are_included_in_components_config() throws Exception { + public void clientProviders_are_included_in_components_config() { createModelWithClientProvider(); assertThat(componentsConfig().toString(), containsString(".id \"discClient\"")); } - private void createModelWithClientProvider() throws SAXException, IOException { + private void createModelWithClientProvider() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>" + " <client id='discClient'>" + @@ -350,7 +407,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void serverProviders_are_included_in_components_config() throws Exception { + public void serverProviders_are_included_in_components_config() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>" + " <server id='discServer' />" + @@ -367,7 +424,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void searchHandler_gets_only_search_chains_in_chains_config() throws Exception { + public void searchHandler_gets_only_search_chains_in_chains_config() { createClusterWithProcessingAndSearchChains(); String searchHandlerConfigId = "default/component/com.yahoo.search.handler.SearchHandler"; String chainsConfig = getChainsConfig(searchHandlerConfigId); @@ -376,7 +433,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void processingHandler_gets_only_processing_chains_in_chains_config() throws Exception { + public void processingHandler_gets_only_processing_chains_in_chains_config() { createClusterWithProcessingAndSearchChains(); String processingHandlerConfigId = "default/component/com.yahoo.processing.handler.ProcessingHandler"; String chainsConfig = getChainsConfig(processingHandlerConfigId); @@ -384,7 +441,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { assertThat(chainsConfig, not(containsLineWithPattern(".*\\.id \"testSearcher@default\"$"))); } - private void createClusterWithProcessingAndSearchChains() throws SAXException, IOException { + private void createClusterWithProcessingAndSearchChains() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>" + " <search>" + @@ -404,7 +461,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void user_config_can_be_overridden_on_node() throws Exception { + public void user_config_can_be_overridden_on_node() { Element containerElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>", " <config name=\"prelude.cluster.qr-monitor\">" + @@ -429,7 +486,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void legacy_yca_filter_and_its_config_provider_are_included_in_components_config() throws Exception { + public void legacy_yca_filter_and_its_config_provider_are_included_in_components_config() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>", " <filter id='YcaFilter' /> ", @@ -443,7 +500,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void nested_components_are_injected_to_handlers() throws Exception { + public void nested_components_are_injected_to_handlers() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>", " <handler id='myHandler'>", @@ -474,7 +531,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void affinity_is_set() throws IOException, SAXException { + public void affinity_is_set() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>", " <http>", @@ -516,7 +573,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void http_aliases_are_stored_on_cluster_and_on_service_properties() throws SAXException, IOException { + public void http_aliases_are_stored_on_cluster_and_on_service_properties() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>", " <aliases>", @@ -541,7 +598,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test - public void http_aliases_are_only_honored_in_prod_environment() throws SAXException, IOException { + public void http_aliases_are_only_honored_in_prod_environment() { Element clusterElem = DomBuilderTest.parse( "<jdisc id='default' version='1.0'>", " <aliases>", @@ -578,17 +635,17 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test(expected = IllegalArgumentException.class) - public void renderers_named_JsonRenderer_are_not_allowed() throws IOException, SAXException { + public void renderers_named_JsonRenderer_are_not_allowed() { createModel(root, generateContainerElementWithRenderer("JsonRenderer")); } @Test(expected = IllegalArgumentException.class) - public void renderers_named_DefaultRenderer_are_not_allowed() throws IOException, SAXException { + public void renderers_named_DefaultRenderer_are_not_allowed() { createModel(root, generateContainerElementWithRenderer("DefaultRenderer")); } @Test - public void renderers_named_something_else_are_allowed() throws IOException, SAXException { + public void renderers_named_something_else_are_allowed() { createModel(root, generateContainerElementWithRenderer("my-little-renderer")); } @@ -642,15 +699,15 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { assertEquals("default.container.0", config.discriminator()); assertEquals(19102, config.rpc().port()); assertEquals("vespa/service/default/container.0", config.rpc().slobrokId()); - assertEquals(true, config.rpc().enabled()); + assertTrue(config.rpc().enabled()); assertEquals("", config.rpc().host()); - assertEquals(false, config.restartOnDeploy()); - assertEquals(false, config.coveragereports()); + assertFalse(config.restartOnDeploy()); + assertFalse(config.coveragereports()); assertEquals("filedistribution/" + hostname, config.filedistributor().configid()); } @Test - public void secret_store_can_be_set_up() throws IOException, SAXException { + public void secret_store_can_be_set_up() { Element clusterElem = DomBuilderTest.parse( "<jdisc version='1.0'>", " <secret-store>", |