Repository: flink
Updated Branches:
  refs/heads/master c4af1b5bb -> dceb5cc17


[FLINK-6581] [cli] Correct dynamic property parsing for YARN cli

The YARN cli will now split the dynamic propertie at the first occurrence of
the = sign instead of splitting it at every = sign. That way we support dynamic
properties of the form -yDenv.java.opts="-DappName=foobar".

Address PR comments

This closes #3903.


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/dceb5cc1
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/dceb5cc1
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/dceb5cc1

Branch: refs/heads/master
Commit: dceb5cc1759bc091a2f3a6e360771c404b87f7f4
Parents: c4af1b5
Author: Till Rohrmann <trohrm...@apache.org>
Authored: Mon May 15 12:04:07 2017 +0200
Committer: Till Rohrmann <trohrm...@apache.org>
Committed: Wed May 17 00:36:33 2017 +0200

----------------------------------------------------------------------
 .../org/apache/flink/yarn/FlinkYarnSessionCliTest.java  |  6 ++++--
 .../org/apache/flink/yarn/cli/FlinkYarnSessionCli.java  | 12 +++++++++---
 2 files changed, 13 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/dceb5cc1/flink-yarn-tests/src/test/java/org/apache/flink/yarn/FlinkYarnSessionCliTest.java
----------------------------------------------------------------------
diff --git 
a/flink-yarn-tests/src/test/java/org/apache/flink/yarn/FlinkYarnSessionCliTest.java
 
b/flink-yarn-tests/src/test/java/org/apache/flink/yarn/FlinkYarnSessionCliTest.java
index 264b6aa..4da5a39 100644
--- 
a/flink-yarn-tests/src/test/java/org/apache/flink/yarn/FlinkYarnSessionCliTest.java
+++ 
b/flink-yarn-tests/src/test/java/org/apache/flink/yarn/FlinkYarnSessionCliTest.java
@@ -68,7 +68,8 @@ public class FlinkYarnSessionCliTest {
                CommandLineParser parser = new DefaultParser();
                CommandLine cmd = null;
                try {
-                       cmd = parser.parse(options, new String[]{"run", "-j", 
"fake.jar", "-n", "15", "-D", "akka.ask.timeout=5 min"});
+                       cmd = parser.parse(options, new String[]{"run", "-j", 
"fake.jar", "-n", "15",
+                               "-D", "akka.ask.timeout=5 min", "-D", 
"env.java.opts=-DappName=foobar"});
                } catch(Exception e) {
                        e.printStackTrace();
                        Assert.fail("Parsing failed with " + e.getMessage());
@@ -80,8 +81,9 @@ public class FlinkYarnSessionCliTest {
 
                Map<String, String> dynProperties =
                        
FlinkYarnSessionCli.getDynamicProperties(flinkYarnDescriptor.getDynamicPropertiesEncoded());
-               Assert.assertEquals(1, dynProperties.size());
+               Assert.assertEquals(2, dynProperties.size());
                Assert.assertEquals("5 min", 
dynProperties.get("akka.ask.timeout"));
+               Assert.assertEquals("-DappName=foobar", 
dynProperties.get("env.java.opts"));
        }
 
        @Test

http://git-wip-us.apache.org/repos/asf/flink/blob/dceb5cc1/flink-yarn/src/main/java/org/apache/flink/yarn/cli/FlinkYarnSessionCli.java
----------------------------------------------------------------------
diff --git 
a/flink-yarn/src/main/java/org/apache/flink/yarn/cli/FlinkYarnSessionCli.java 
b/flink-yarn/src/main/java/org/apache/flink/yarn/cli/FlinkYarnSessionCli.java
index 3d82132..69b472a 100644
--- 
a/flink-yarn/src/main/java/org/apache/flink/yarn/cli/FlinkYarnSessionCli.java
+++ 
b/flink-yarn/src/main/java/org/apache/flink/yarn/cli/FlinkYarnSessionCli.java
@@ -702,9 +702,15 @@ public class FlinkYarnSessionCli implements 
CustomCommandLine<YarnClusterClient>
                                        continue;
                                }
 
-                               String[] kv = propLine.split("=");
-                               if (kv.length >= 2 && kv[0] != null && kv[1] != 
null && kv[0].length() > 0) {
-                                       properties.put(kv[0], kv[1]);
+                               int firstEquals = propLine.indexOf("=");
+
+                               if (firstEquals >= 0) {
+                                       String key = propLine.substring(0, 
firstEquals).trim();
+                                       String value = 
propLine.substring(firstEquals + 1, propLine.length()).trim();
+
+                                       if (!key.isEmpty()) {
+                                               properties.put(key, value);
+                                       }
                                }
                        }
                        return properties;

Reply via email to