diff --git a/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java b/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java index 9618673b4ce0a..6c103d3cdf933 100644 --- a/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java +++ b/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java @@ -311,11 +311,15 @@ private List buildSparkSubmitCommand(Map env) } private void checkJavaOptions(String javaOptions) { - if (!isEmpty(javaOptions) && javaOptions.contains("Xmx")) { - String msg = String.format("Not allowed to specify max heap(Xmx) memory settings through " + - "java options (was %s). Use the corresponding --driver-memory or " + - "spark.driver.memory configuration instead.", javaOptions); - throw new IllegalArgumentException(msg); + if (!isEmpty(javaOptions)) { + for (String javaOption: CommandBuilderUtils.parseOptionString(javaOptions)) { + if (javaOption.startsWith("-Xmx")) { + String msg = String.format("Not allowed to specify max heap(Xmx) memory settings " + + "through java options (was %s). Use the corresponding --driver-memory or " + + "spark.driver.memory configuration instead.", javaOptions); + throw new IllegalArgumentException(msg); + } + } } } diff --git a/launcher/src/test/java/org/apache/spark/launcher/SparkSubmitCommandBuilderSuite.java b/launcher/src/test/java/org/apache/spark/launcher/SparkSubmitCommandBuilderSuite.java index 967df3a563c8e..7a623bb76f3ad 100644 --- a/launcher/src/test/java/org/apache/spark/launcher/SparkSubmitCommandBuilderSuite.java +++ b/launcher/src/test/java/org/apache/spark/launcher/SparkSubmitCommandBuilderSuite.java @@ -72,6 +72,36 @@ public void testCliHelpAndNoArg() throws Exception { cmd.contains("org.apache.spark.deploy.SparkSubmit")); } + @Test(expected = IllegalArgumentException.class) + public void testCheckJavaOptionsThrowException() throws Exception { + Map env = new HashMap<>(); + List sparkSubmitArgs = Arrays.asList( + parser.MASTER, + "local", + parser.DRIVER_CLASS_PATH, + "/driverCp", + parser.DRIVER_JAVA_OPTIONS, + "-Xmx64g -Dprop=Other -Dprop1=\"-Xmx -Xmx\" -Dprop2=\"-Xmx '-Xmx\" " + + "-Dprop3='-Xmx -Xmx' -Dprop4='-Xmx \"-Xmx'", + SparkLauncher.NO_RESOURCE); + buildCommand(sparkSubmitArgs, env); + } + + @Test + public void testCheckJavaOptions() throws Exception { + Map env = new HashMap<>(); + List sparkSubmitArgs = Arrays.asList( + parser.MASTER, + "local", + parser.DRIVER_CLASS_PATH, + "/driverCp", + parser.DRIVER_JAVA_OPTIONS, + "-Dprop=-Xmx -Dprop1=\"-Xmx -Xmx\" -Dprop2=\"-Xmx '-Xmx\" " + + "-Dprop3='-Xmx -Xmx' -Dprop4='-Xmx \"-Xmx'", + SparkLauncher.NO_RESOURCE); + buildCommand(sparkSubmitArgs, env); + } + @Test public void testCliKillAndStatus() throws Exception { List params = Arrays.asList("driver-20160531171222-0000");