You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by om...@apache.org on 2011/03/04 05:30:52 UTC
svn commit: r1077576 - in
/hadoop/common/branches/branch-0.20-security-patches/src:
mapred/org/apache/hadoop/mapred/TaskRunner.java
test/org/apache/hadoop/mapred/TestTaskEnvironment.java
Author: omalley
Date: Fri Mar 4 04:30:52 2011
New Revision: 1077576
URL: http://svn.apache.org/viewvc?rev=1077576&view=rev
Log:
commit 225283ea86afdc51079fd7066f48ff8da1125524
Author: Arun C Murthy <ac...@apache.org>
Date: Tue Jul 20 23:58:16 2010 -0700
HADOOP-5981. Fix variable substitution during parsing of child environment variables. Contributed by Krishna Ramachandran.
+++ b/YAHOO-CHANGES.txt
+ HADOOP-5981. Fix variable substitution during parsing of child environment
+ variables. (Krishna Ramachandran via acmurthy)
+
Modified:
hadoop/common/branches/branch-0.20-security-patches/src/mapred/org/apache/hadoop/mapred/TaskRunner.java
hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestTaskEnvironment.java
Modified: hadoop/common/branches/branch-0.20-security-patches/src/mapred/org/apache/hadoop/mapred/TaskRunner.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/src/mapred/org/apache/hadoop/mapred/TaskRunner.java?rev=1077576&r1=1077575&r2=1077576&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/src/mapred/org/apache/hadoop/mapred/TaskRunner.java (original)
+++ hadoop/common/branches/branch-0.20-security-patches/src/mapred/org/apache/hadoop/mapred/TaskRunner.java Fri Mar 4 04:30:52 2011
@@ -562,7 +562,8 @@ abstract class TaskRunner extends Thread
hadoopClientOpts = hadoopClientOpts + "-Dhadoop.tasklog.taskid=" + taskid
+ " -Dhadoop.tasklog.iscleanup=" + t.isTaskCleanupTask()
+ " -Dhadoop.tasklog.totalLogFileSize=" + logSize;
- env.put("HADOOP_CLIENT_OPTS", "\"" + hadoopClientOpts + "\"");
+ // following line is a backport from jira MAPREDUCE-1286
+ env.put("HADOOP_CLIENT_OPTS", hadoopClientOpts);
// add the env variables passed by the user
String mapredChildEnv = getChildEnv(conf);
@@ -588,7 +589,7 @@ abstract class TaskRunner extends Thread
* @return
* @throws Throwable
*/
- private String setEnvFromInputString(String errorInfo, Map<String, String> env,
+ String setEnvFromInputString(String errorInfo, Map<String, String> env,
String mapredChildEnv) throws Throwable {
if (mapredChildEnv != null && mapredChildEnv.length() > 0) {
String childEnvs[] = mapredChildEnv.split(",");
@@ -596,6 +597,7 @@ abstract class TaskRunner extends Thread
try {
String[] parts = cEnv.split("="); // split on '='
String value = env.get(parts[0]);
+
if (value != null) {
// replace $env with the child's env constructed by tt's
// example LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp
@@ -609,9 +611,16 @@ abstract class TaskRunner extends Thread
// the env key is present in the tt's env
value = parts[1].replace("$" + parts[0], value);
} else {
- // the env key is note present anywhere .. simply set it
- // example X=$X:/tmp or X=/tmp
- value = parts[1].replace("$" + parts[0], "");
+ // 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], "");
+ }
}
}
env.put(parts[0], value);
Modified: hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestTaskEnvironment.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestTaskEnvironment.java?rev=1077576&r1=1077575&r2=1077576&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestTaskEnvironment.java (original)
+++ hadoop/common/branches/branch-0.20-security-patches/src/test/org/apache/hadoop/mapred/TestTaskEnvironment.java Fri Mar 4 04:30:52 2011
@@ -90,6 +90,7 @@ public class TestTaskEnvironment {
public void testTaskEnv() throws Throwable {
ttConf.set("mapreduce.admin.user.shell", "/bin/testshell");
ttConf.set("mapreduce.admin.user.env", "key1=value1,key2=value2");
+ ttConf.set("mapred.child.env", "ROOT=$HOME");
final Map<String, String> env = new HashMap<String, String>();
String user = "test";
JobConf taskConf = new JobConf(ttConf);
@@ -99,7 +100,9 @@ public class TestTaskEnvironment {
TaskInProgress tip = tt.new TaskInProgress(task, taskConf);
final TaskRunner taskRunner = task.createRunner(tt, tip);
String errorInfo = "Child error";
+ String mapredChildEnv = taskRunner.getChildEnv(taskConf);
taskRunner.updateUserLoginEnv(errorInfo, user, taskConf, env);
+ taskRunner.setEnvFromInputString(errorInfo, env, mapredChildEnv);
final Vector<String> vargs = new Vector<String>(1);
File pidFile = new File(TEST_DIR, "pid");
@@ -120,5 +123,8 @@ public class TestTaskEnvironment {
assertTrue(jvmenvmap.containsValue("value2"));
assertTrue(javaOpts, javaOpts.contains("Xmx"));
assertTrue(javaOpts, javaOpts.contains("IPv4"));
+
+ String root = jvmenvmap.get("ROOT");
+ assertTrue(root, root.contentEquals(System.getenv("HOME")));
}
}