You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-commits@hadoop.apache.org by vi...@apache.org on 2010/05/04 08:27:20 UTC
svn commit: r940740 - in /hadoop/mapreduce/trunk: CHANGES.txt
src/java/org/apache/hadoop/mapred/TaskRunner.java
src/java/org/apache/hadoop/mapred/TaskTracker.java
Author: vinodkv
Date: Tue May 4 06:27:20 2010
New Revision: 940740
URL: http://svn.apache.org/viewvc?rev=940740&view=rev
Log:
MAPREDUCE-1707. TaskRunner can get NPE in getting ugi from TaskTracker. Contributed by Vinod Kumar Vavilapalli.
Modified:
hadoop/mapreduce/trunk/CHANGES.txt
hadoop/mapreduce/trunk/src/java/org/apache/hadoop/mapred/TaskRunner.java
hadoop/mapreduce/trunk/src/java/org/apache/hadoop/mapred/TaskTracker.java
Modified: hadoop/mapreduce/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/trunk/CHANGES.txt?rev=940740&r1=940739&r2=940740&view=diff
==============================================================================
--- hadoop/mapreduce/trunk/CHANGES.txt (original)
+++ hadoop/mapreduce/trunk/CHANGES.txt Tue May 4 06:27:20 2010
@@ -2,6 +2,19 @@ Hadoop MapReduce Change Log
Trunk (unreleased changes)
+ INCOMPATIBLE CHANGES
+
+ NEW FEATURES
+
+ IMPROVEMENTS
+
+ OPTIMIZATIONS
+
+ BUG FIXES
+
+ MAPREDUCE-1707. TaskRunner can get NPE in getting ugi from TaskTracker.
+ (Vinod Kumar Vavilapalli)
+
Release 0.21.0 - Unreleased
INCOMPATIBLE CHANGES
Modified: hadoop/mapreduce/trunk/src/java/org/apache/hadoop/mapred/TaskRunner.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/trunk/src/java/org/apache/hadoop/mapred/TaskRunner.java?rev=940740&r1=940739&r2=940740&view=diff
==============================================================================
--- hadoop/mapreduce/trunk/src/java/org/apache/hadoop/mapred/TaskRunner.java (original)
+++ hadoop/mapreduce/trunk/src/java/org/apache/hadoop/mapred/TaskRunner.java Tue May 4 06:27:20 2010
@@ -177,9 +177,7 @@ abstract class TaskRunner extends Thread
// We don't create any symlinks yet, so presence/absence of workDir
// actually on the file system doesn't matter.
- UserGroupInformation ugi =
- tracker.getRunningJob(t.getJobID()).getUGI();
- ugi.doAs(new PrivilegedExceptionAction<Void>() {
+ tip.getUGI().doAs(new PrivilegedExceptionAction<Void>() {
public Void run() throws IOException {
taskDistributedCacheManager =
tracker.getTrackerDistributedCacheManager()
@@ -256,8 +254,9 @@ abstract class TaskRunner extends Thread
}
} finally {
try{
- taskDistributedCacheManager.release();
-
+ if (taskDistributedCacheManager != null) {
+ taskDistributedCacheManager.release();
+ }
}catch(IOException ie){
LOG.warn("Error releasing caches : Cache files might not have been cleaned up");
}
Modified: hadoop/mapreduce/trunk/src/java/org/apache/hadoop/mapred/TaskTracker.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/trunk/src/java/org/apache/hadoop/mapred/TaskTracker.java?rev=940740&r1=940739&r2=940740&view=diff
==============================================================================
--- hadoop/mapreduce/trunk/src/java/org/apache/hadoop/mapred/TaskTracker.java (original)
+++ hadoop/mapreduce/trunk/src/java/org/apache/hadoop/mapred/TaskTracker.java Tue May 4 06:27:20 2010
@@ -1156,9 +1156,11 @@ public class TaskTracker
}
}
- private void launchTaskForJob(TaskInProgress tip, JobConf jobConf) throws IOException{
+ private void launchTaskForJob(TaskInProgress tip, JobConf jobConf,
+ UserGroupInformation ugi) throws IOException {
synchronized (tip) {
tip.setJobConf(jobConf);
+ tip.setUGI(ugi);
tip.launchTask();
}
}
@@ -2232,7 +2234,8 @@ public class TaskTracker
void startNewTask(TaskInProgress tip) {
try {
RunningJob rjob = localizeJob(tip);
- launchTaskForJob(tip, new JobConf(rjob.jobConf));
+ // Localization is done. Neither rjob.jobConf nor rjob.ugi can be null
+ launchTaskForJob(tip, new JobConf(rjob.jobConf), rjob.ugi);
} catch (Throwable e) {
String msg = ("Error initializing " + tip.getTask().getTaskID() +
":\n" + StringUtils.stringifyException(e));
@@ -2373,7 +2376,19 @@ public class TaskTracker
private String debugCommand;
private volatile boolean slotTaken = false;
private TaskLauncher launcher;
-
+
+ // The ugi of the user who is running the job. This contains all the tokens
+ // too which will be populated during job-localization
+ private UserGroupInformation ugi;
+
+ UserGroupInformation getUGI() {
+ return ugi;
+ }
+
+ void setUGI(UserGroupInformation userUGI) {
+ ugi = userUGI;
+ }
+
/**
*/
public TaskInProgress(Task task, JobConf conf) {