diff options
author | Harald Musum <musum@verizonmedia.com> | 2022-01-10 10:22:15 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-10 10:22:15 +0100 |
commit | 75852e3ce2a075c73c0845a8000df4db4c1f7260 (patch) | |
tree | 7cf71086c93830966417752c4d254587a5e5905e /config-model/src/main/java | |
parent | 9b00fdf0246ffff8a0dff05f2237738fe8fcafbf (diff) | |
parent | f7a1319189fec755a5249807e28dcd3244b923b2 (diff) |
Merge pull request #20696 from vespa-engine/hmusum/validate-jvm-options-4
Allow comma in JVM options
Diffstat (limited to 'config-model/src/main/java')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java | 25 |
1 files changed, 20 insertions, 5 deletions
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 657eb6a29e7..e961b39ff8e 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 @@ -1061,15 +1061,22 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { return CONTAINER_TAG.equals(element.getTagName()) || DEPRECATED_CONTAINER_TAG.equals(element.getTagName()); } - private static class JvmOptions { + /** + * Validates JVM options and logs a warning or fails deployment (depending on feature flag) + * if anyone of them has invalid syntax or is an option that is unsupported for the running system. + */ + private static class JvmOptions { - private static final Pattern validPattern = Pattern.compile("-[a-zA-z0-9=:./]+"); + private static final Pattern validPattern = Pattern.compile("-[a-zA-z0-9=:./,]+"); + // debug port will not be available in hosted, don't allow + private static final Pattern invalidInHostedatttern = Pattern.compile("-Xrunjdwp:transport=.*"); private final ContainerCluster<?> cluster; private final Element nodesElement; private final DeployLogger logger; private final boolean legacyOptions; private final boolean failDeploymentWithInvalidJvmOptions; + private final boolean isHosted; public JvmOptions(ContainerCluster<?> cluster, Element nodesElement, DeployState deployState, boolean legacyOptions) { this.cluster = cluster; @@ -1077,6 +1084,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { this.logger = deployState.getDeployLogger(); this.legacyOptions = legacyOptions; this.failDeploymentWithInvalidJvmOptions = deployState.featureFlags().failDeploymentWithInvalidJvmOptions(); + this.isHosted = deployState.isHosted(); } String build() { @@ -1086,7 +1094,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { Element jvmElement = XML.getChild(nodesElement, "jvm"); if (jvmElement == null) return ""; String jvmOptions = jvmElement.getAttribute(VespaDomBuilder.OPTIONS); - if (jvmOptions == null) return ""; + if (jvmOptions.isEmpty()) return ""; validateJvmOptions(jvmOptions); return jvmOptions; } @@ -1135,6 +1143,12 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { .filter(option -> !Pattern.matches(validPattern.pattern(), option)) .sorted() .collect(Collectors.toList()); + if (isHosted) + invalidOptions.addAll(Arrays.stream(optionList) + .filter(option -> !option.isEmpty()) + .filter(option -> Pattern.matches(invalidInHostedatttern.pattern(), option)) + .sorted() + .collect(Collectors.toList())); if (invalidOptions.isEmpty()) return; @@ -1147,8 +1161,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { } /** - * Validates JVM GC options and logs a warning if anyone of them has invalid syntax or is an option - * that is unsupported for the running system (e.g. uses CMS options for hosted Vespa, which uses JDK 17) + * Validates JVM GC options and logs a warning or fails deployment (depending on feature flag) + * if anyone of them has invalid syntax or is an option that is unsupported for the running system + * (e.g. uses CMS options for hosted Vespa, which uses JDK 17). */ private static class JvmGcOptions { |