瀏覽代碼

Fix NPE when killing/failing already killed/failed tasks. (llu)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/MR-279@1136224 13f79535-47bb-0310-9956-ffa450edef68
Luke Lu 14 年之前
父節點
當前提交
c0ace5f640

+ 2 - 0
mapreduce/CHANGES.txt

@@ -4,6 +4,8 @@ Trunk (unreleased changes)
 
 
     MAPREDUCE-279
+
+    Fix NPE when killing/failing already killed/failed tasks. (llu)
    
     Update install instructions with svn unsplit (Thomas Graves via mahadev)
 

+ 6 - 25
mapreduce/mr-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/ClientServiceDelegate.java

@@ -396,29 +396,6 @@ public class ClientServiceDelegate {
     (taskReports).toArray(new org.apache.hadoop.mapreduce.TaskReport[0]);
   }
 
-  public Void killJob(JobID jobID) throws YarnRemoteException,
-  YarnRemoteException {
-    org.apache.hadoop.mapreduce.v2.api.records.JobId  nJobID = TypeConverter.toYarn(jobID);
-    KillJobRequest request = recordFactory.newRecordInstance(KillJobRequest.class);
-    try {
-      request.setJobId(nJobID);
-      getProxy(jobID).killJob(request);
-    } catch(YarnRemoteException yre) {//thrown by remote server, no need to redirect
-      LOG.warn(RPCUtil.toString(yre));
-      throw yre;
-    } catch(Exception e) {
-      LOG.debug("Failed to contact application master ", e);
-      try {
-        request.setJobId(nJobID);
-        getRefreshedProxy(jobID).killJob(request);
-      } catch(YarnRemoteException yre) {
-        LOG.warn(RPCUtil.toString(yre));
-        throw yre;
-      }
-    }
-    return null;
-  }
-
   public boolean killTask(TaskAttemptID taskAttemptID, boolean fail)
   throws YarnRemoteException {
     org.apache.hadoop.mapreduce.v2.api.records.TaskAttemptId attemptID 
@@ -438,13 +415,17 @@ public class ClientServiceDelegate {
       throw yre;
     } catch(Exception e) {
       LOG.debug("Failed to contact application master ", e);
+      MRClientProtocol proxy = getRefreshedProxy(taskAttemptID.getJobID());
+      if (proxy == null) {
+        return false;
+      }
       try {
         if (fail) {
           failRequest.setTaskAttemptId(attemptID);
-          getRefreshedProxy(taskAttemptID.getJobID()).failTaskAttempt(failRequest);
+          proxy.failTaskAttempt(failRequest);
         } else {
           killRequest.setTaskAttemptId(attemptID);
-          getRefreshedProxy(taskAttemptID.getJobID()).killTaskAttempt(killRequest);
+          proxy.killTaskAttempt(killRequest);
         }
       } catch(YarnRemoteException yre) {
         LOG.warn(RPCUtil.toString(yre));