diff options
Diffstat (limited to 'launcher')
-rw-r--r-- | launcher/src/main/java/org/apache/spark/launcher/CommandBuilderUtils.java | 20 | ||||
-rw-r--r-- | launcher/src/test/java/org/apache/spark/launcher/CommandBuilderUtilsSuite.java | 12 |
2 files changed, 29 insertions, 3 deletions
diff --git a/launcher/src/main/java/org/apache/spark/launcher/CommandBuilderUtils.java b/launcher/src/main/java/org/apache/spark/launcher/CommandBuilderUtils.java index d30c2ec5f8..e328c8a341 100644 --- a/launcher/src/main/java/org/apache/spark/launcher/CommandBuilderUtils.java +++ b/launcher/src/main/java/org/apache/spark/launcher/CommandBuilderUtils.java @@ -322,11 +322,9 @@ class CommandBuilderUtils { if (getJavaVendor() == JavaVendor.IBM) { return; } - String[] version = System.getProperty("java.version").split("\\."); - if (Integer.parseInt(version[0]) > 1 || Integer.parseInt(version[1]) > 7) { + if (javaMajorVersion(System.getProperty("java.version")) > 7) { return; } - for (String arg : cmd) { if (arg.startsWith("-XX:MaxPermSize=")) { return; @@ -336,4 +334,20 @@ class CommandBuilderUtils { cmd.add("-XX:MaxPermSize=256m"); } + /** + * Get the major version of the java version string supplied. This method + * accepts any JEP-223-compliant strings (9-ea, 9+100), as well as legacy + * version strings such as 1.7.0_79 + */ + static int javaMajorVersion(String javaVersion) { + String[] version = javaVersion.split("[+.\\-]+"); + int major = Integer.parseInt(version[0]); + // if major > 1, we're using the JEP-223 version string, e.g., 9-ea, 9+120 + // otherwise the second number is the major version + if (major > 1) { + return major; + } else { + return Integer.parseInt(version[1]); + } + } } diff --git a/launcher/src/test/java/org/apache/spark/launcher/CommandBuilderUtilsSuite.java b/launcher/src/test/java/org/apache/spark/launcher/CommandBuilderUtilsSuite.java index bc513ec9b3..4fafc43ef2 100644 --- a/launcher/src/test/java/org/apache/spark/launcher/CommandBuilderUtilsSuite.java +++ b/launcher/src/test/java/org/apache/spark/launcher/CommandBuilderUtilsSuite.java @@ -87,6 +87,18 @@ public class CommandBuilderUtilsSuite { assertEquals("\"a \\\"b\\\" c\"", quoteForCommandString("a \"b\" c")); } + @Test + public void testJavaMajorVersion() { + assertEquals(6, javaMajorVersion("1.6.0_50")); + assertEquals(7, javaMajorVersion("1.7.0_79")); + assertEquals(8, javaMajorVersion("1.8.0_66")); + assertEquals(9, javaMajorVersion("9-ea")); + assertEquals(9, javaMajorVersion("9+100")); + assertEquals(9, javaMajorVersion("9")); + assertEquals(9, javaMajorVersion("9.1.0")); + assertEquals(10, javaMajorVersion("10")); + } + private void testOpt(String opts, List<String> expected) { assertEquals(String.format("test string failed to parse: [[ %s ]]", opts), expected, parseOptionString(opts)); |