Author: cnauroth
Date: Wed Jul 10 23:20:26 2013
New Revision: 1502056
URL: http://svn.apache.org/r1502056
Log:
MAPREDUCE-4374. Merging change r1502054 from branch-2.1-beta to
branch-2.1.0-beta.
Modified:
hadoop/common/branches/branch-2.1.0-beta/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Apps.java
Modified:
hadoop/common/branches/branch-2.1.0-beta/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Apps.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.1.0-beta/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Apps.java?rev=1502056&r1=1502055&r2=1502056&view=diff
==============================================================================
---
hadoop/common/branches/branch-2.1.0-beta/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Apps.java
(original)
+++
hadoop/common/branches/branch-2.1.0-beta/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Apps.java
Wed Jul 10 23:20:26 2013
@@ -22,12 +22,16 @@ import static org.apache.hadoop.yarn.uti
import static org.apache.hadoop.yarn.util.StringHelper.join;
import static org.apache.hadoop.yarn.util.StringHelper.sjoin;
+import java.io.File;
import java.util.Iterator;
import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.classification.InterfaceAudience.Public;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
+import org.apache.hadoop.util.Shell;
import org.apache.hadoop.util.StringInterner;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
@@ -69,41 +73,30 @@ public class Apps {
String envString) {
if (envString != null && envString.length() > 0) {
String childEnvs[] = envString.split(",");
+ Pattern p = Pattern.compile(Shell.getEnvironmentVariableRegex());
for (String cEnv : childEnvs) {
String[] parts = cEnv.split("="); // split on '='
- String value = env.get(parts[0]);
-
- if (value != null) {
- // Replace $env with the child's env constructed by NM's
- // For example: LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp
- value = parts[1].replace("$" + parts[0], value);
- } else {
- // example PATH=$PATH:/tmp
- value = System.getenv(parts[0]);
- if (value != null) {
- // the env key is present in the tt's env
- value = parts[1].replace("$" + parts[0], value);
- } else {
- // check for simple variable substitution
- // for e.g. ROOT=$HOME
- String envValue = System.getenv(parts[1].substring(1));
- if (envValue != null) {
- value = envValue;
- } else {
- // the env key is note present anywhere .. simply set it
- // example X=$X:/tmp or X=/tmp
- value = parts[1].replace("$" + parts[0], "");
- }
- }
+ Matcher m = p.matcher(parts[1]);
+ StringBuffer sb = new StringBuffer();
+ while (m.find()) {
+ String var = m.group(1);
+ // replace $env with the child's env constructed by tt's
+ String replace = env.get(var);
+ // if this key is not configured by the tt for the child .. get it
+ // from the tt's env
+ if (replace == null)
+ replace = System.getenv(var);
+ // the env key is note present anywhere .. simply set it
+ if (replace == null)
+ replace = "";
+ m.appendReplacement(sb, Matcher.quoteReplacement(replace));
}
- addToEnvironment(env, parts[0], value);
+ m.appendTail(sb);
+ addToEnvironment(env, parts[0], sb.toString());
}
}
}
- private static final String SYSTEM_PATH_SEPARATOR =
- System.getProperty("path.separator");
-
@Public
@Unstable
public static void addToEnvironment(
@@ -113,7 +106,7 @@ public class Apps {
if (val == null) {
val = value;
} else {
- val = val + SYSTEM_PATH_SEPARATOR + value;
+ val = val + File.pathSeparator + value;
}
environment.put(StringInterner.weakIntern(variable),
StringInterner.weakIntern(val));