浏览代码

HADOOP-1840. Fix race condition which leads to task's diagnostic messages getting lost.

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@574888 13f79535-47bb-0310-9956-ffa450edef68
Arun Murthy 18 年之前
父节点
当前提交
88b9b47724
共有 2 个文件被更改,包括 17 次插入6 次删除
  1. 3 0
      CHANGES.txt
  2. 14 6
      src/java/org/apache/hadoop/mapred/TaskStatus.java

+ 3 - 0
CHANGES.txt

@@ -118,6 +118,9 @@ Trunk (unreleased changes)
     HADOOP-1818. Fix MultiFileInputFormat so that it does not return 
     empty splits when numPaths < numSplits.  (Thomas Friol via enis)
 
+    HADOOP-1840. Fix race condition which leads to task's diagnostic
+    messages getting lost. (acmurthy) 
+
   IMPROVEMENTS
 
     HADOOP-1266. Remove dependency of package org.apache.hadoop.net on 

+ 14 - 6
src/java/org/apache/hadoop/mapred/TaskStatus.java

@@ -80,7 +80,10 @@ abstract class TaskStatus implements Writable, Cloneable {
   public void setTaskTracker(String tracker) { this.taskTracker = tracker;}
   public void setRunState(State runState) { this.runState = runState; }
   public String getDiagnosticInfo() { return diagnosticInfo; }
-  public void setDiagnosticInfo(String info) { this.diagnosticInfo = info; }
+  public void setDiagnosticInfo(String info) { 
+    diagnosticInfo = 
+      ((diagnosticInfo == null) ? info : diagnosticInfo.concat(info)); 
+  }
   public String getStateString() { return stateString; }
   public void setStateString(String stateString) { this.stateString = stateString; }
   /**
@@ -231,9 +234,10 @@ abstract class TaskStatus implements Writable, Cloneable {
   synchronized void statusUpdate(TaskStatus status) {
     this.progress = status.getProgress();
     this.runState = status.getRunState();
-    this.diagnosticInfo = status.getDiagnosticInfo();
     this.stateString = status.getStateString();
-      
+
+    setDiagnosticInfo(status.getDiagnosticInfo());
+    
     if (status.getStartTime() != 0) {
       this.startTime = status.getStartTime(); 
     }
@@ -246,10 +250,14 @@ abstract class TaskStatus implements Writable, Cloneable {
   }
   
   /**
-   * Clear out transient information after sending out a status update
-   * to the {@link TaskTracker}.
+   * Clear out transient information after sending out a status-update
+   * from either the {@link Task} to the {@link TaskTracker} or from the
+   * {@link TaskTracker} to the {@link JobTracker}. 
    */
-  synchronized void clearStatus() {}
+  synchronized void clearStatus() {
+    // Clear diagnosticInfo
+    diagnosticInfo = "";
+  }
 
   public Object clone() {
     try {