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 ma...@apache.org on 2011/05/18 03:40:38 UTC

svn commit: r1104654 - in /hadoop/mapreduce/branches/MR-279: ./ mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/

Author: mahadev
Date: Wed May 18 01:40:38 2011
New Revision: 1104654

URL: http://svn.apache.org/viewvc?rev=1104654&view=rev
Log:
MAPREDUCE-2509. Fix NPE in UI for pending attempts. (luke lu via mahadev)

Modified:
    hadoop/mapreduce/branches/MR-279/CHANGES.txt
    hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/JobBlock.java
    hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java
    hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TasksBlock.java
    hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/Times.java

Modified: hadoop/mapreduce/branches/MR-279/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/CHANGES.txt?rev=1104654&r1=1104653&r2=1104654&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/CHANGES.txt (original)
+++ hadoop/mapreduce/branches/MR-279/CHANGES.txt Wed May 18 01:40:38 2011
@@ -4,6 +4,8 @@ Trunk (unreleased changes)
 
   MAPREDUCE-279
 
+    MAPREDUCE-2509. Fix NPE in UI for pending attempts. (luke lu via mahadev) 
+
     Fix job hang if the AM launch fails. (mahadev) 
    
     MAPREDUCE-2504. race in JobHistoryEventHandler stop (siddharth seth via mahadev)

Modified: hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/JobBlock.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/JobBlock.java?rev=1104654&r1=1104653&r2=1104654&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/JobBlock.java (original)
+++ hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/JobBlock.java Wed May 18 01:40:38 2011
@@ -68,14 +68,16 @@ public class JobBlock extends HtmlBlock 
     int mapsComplete = job.getCompletedMaps();
     int reduces = job.getTotalReduces();
     int reducesComplete = job.getCompletedReduces();
+    long startTime = jobReport.getStartTime();
+    long finishTime = jobReport.getFinishTime();
     countTasks(job);
     info("Job Overview").
         _("Job Name:", job.getName()).
         _("State:", job.getState()).
         _("Uberized:", job.isUber()).
-        _("Started:", new Date(jobReport.getStartTime())).
-        _("Elapsed:", StringUtils.formatTime(System.currentTimeMillis()
-                                             - jobReport.getStartTime()));
+        _("Started:", new Date(startTime)).
+        _("Elapsed:", StringUtils.formatTime(
+            Times.elapsed(startTime, finishTime)));
     html.
       _(InfoBlock.class).
       div(_INFO_WRAP).

Modified: hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java?rev=1104654&r1=1104653&r2=1104654&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java (original)
+++ hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java Wed May 18 01:40:38 2011
@@ -21,16 +21,15 @@ package org.apache.hadoop.mapreduce.v2.a
 import com.google.common.base.Joiner;
 import com.google.inject.Inject;
 
-import org.apache.hadoop.mapreduce.v2.api.records.TaskAttemptReport;
 import org.apache.hadoop.mapreduce.v2.app.job.TaskAttempt;
 import org.apache.hadoop.mapreduce.v2.util.MRApps;
+import org.apache.hadoop.util.StringUtils;
 import org.apache.hadoop.yarn.api.records.ContainerId;
 import org.apache.hadoop.yarn.util.ConverterUtils;
 import org.apache.hadoop.yarn.webapp.SubView;
 import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
 import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.*;
 import org.apache.hadoop.yarn.webapp.view.HtmlBlock;
-
 import static org.apache.hadoop.yarn.util.StringHelper.*;
 import static org.apache.hadoop.yarn.webapp.view.JQueryUI.*;
 
@@ -69,23 +68,28 @@ public class TaskPage extends AppView {
         String progress = percent(ta.getProgress());
         ContainerId containerId = ta.getAssignedContainerID();
         String nodeHttpAddr = ta.getNodeHttpAddress();
-        TaskAttemptReport report = ta.getReport();
-        long elapsed = Times.elapsed(report.getStartTime(), report.getFinishTime());
-        String containerIdStr = ConverterUtils.toString(containerId);
-        tbody.
+        long startTime = ta.getLaunchTime();
+        long finishTime = ta.getFinishTime();
+        long elapsed = Times.elapsed(startTime, finishTime);
+        TR<TBODY<TABLE<Hamlet>>> tr = tbody.
           tr().
             td(".id", taid).
             td(".progress", progress).
-            td(".state", ta.getState().toString()).
-            td()
-              .a(".logs",
-                  url("http://", nodeHttpAddr, "yarn", "containerlogs",
-                      containerIdStr),
-                  "Logs for " + containerIdStr)._().
-            td(".ts", String.valueOf(report.getStartTime())).
-            td(".ts", String.valueOf(report.getFinishTime())).
-            td(".dt", String.valueOf(elapsed)).
-            td(".note", Joiner.on('\n').join(ta.getDiagnostics()))._();
+            td(".state", ta.getState().toString());
+        if (containerId != null) {
+          String containerIdStr = ConverterUtils.toString(containerId);
+          tr.
+            td().
+              a(".logs", url("http://", nodeHttpAddr, "yarn", "containerlogs",
+                containerIdStr), "Logs for " + containerIdStr)._();
+        } else {
+          tr.td("N/A");
+        }
+        tr.
+          td(".ts", Times.format(startTime)).
+          td(".ts", Times.format(finishTime)).
+          td(".dt", StringUtils.formatTime(elapsed)).
+          td(".note", Joiner.on('\n').join(ta.getDiagnostics()))._();
       }
       tbody._()._();
     }

Modified: hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TasksBlock.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TasksBlock.java?rev=1104654&r1=1104653&r2=1104654&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TasksBlock.java (original)
+++ hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TasksBlock.java Wed May 18 01:40:38 2011
@@ -19,8 +19,6 @@
 package org.apache.hadoop.mapreduce.v2.app.webapp;
 
 import com.google.inject.Inject;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 
 import org.apache.hadoop.mapreduce.v2.api.records.TaskReport;
 import org.apache.hadoop.mapreduce.v2.api.records.TaskType;
@@ -31,15 +29,12 @@ import org.apache.hadoop.yarn.webapp.ham
 import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.*;
 import org.apache.hadoop.yarn.webapp.view.HtmlBlock;
 
-
 import static org.apache.hadoop.mapreduce.v2.app.webapp.AMWebApp.*;
 import static org.apache.hadoop.yarn.util.StringHelper.*;
 import static org.apache.hadoop.yarn.webapp.view.JQueryUI.*;
 
 public class TasksBlock extends HtmlBlock {
   final App app;
-  final SimpleDateFormat dateFormat =
-      new SimpleDateFormat("d-MMM-yyyy HH:mm:ss");
 
   @Inject TasksBlock(App app) {
     this.app = app;
@@ -74,7 +69,9 @@ public class TasksBlock extends HtmlBloc
       String tid = MRApps.toString(task.getID());
       TaskReport report = task.getReport();
       String pct = percent(report.getProgress());
-      long elapsed = Times.elapsed(report.getStartTime(), report.getFinishTime());
+      long startTime = report.getStartTime();
+      long finishTime = report.getFinishTime();
+      long elapsed = Times.elapsed(startTime, finishTime);
       tbody.
         tr().
           td().
@@ -88,11 +85,11 @@ public class TasksBlock extends HtmlBloc
                 $style(join("width:", pct, '%'))._()._()._().
           td(report.getTaskState().toString()).
           td().
-            br().$title(String.valueOf(report.getStartTime()))._().
-            _(dateFormat.format(new Date(report.getStartTime())))._().
+            br().$title(String.valueOf(startTime))._().
+            _(Times.format(startTime))._().
           td().
-            br().$title(String.valueOf(report.getFinishTime()))._().
-            _(dateFormat.format(new Date(report.getFinishTime())))._().
+            br().$title(String.valueOf(finishTime))._().
+            _(Times.format(finishTime))._().
           td().
             br().$title(String.valueOf(elapsed))._().
             _(StringUtils.formatTime(elapsed))._()._();

Modified: hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/Times.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/Times.java?rev=1104654&r1=1104653&r2=1104654&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/Times.java (original)
+++ hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/Times.java Wed May 18 01:40:38 2011
@@ -18,12 +18,26 @@
 
 package org.apache.hadoop.mapreduce.v2.app.webapp;
 
-final class Times {
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+class Times {
+  static final ThreadLocal<SimpleDateFormat> dateFormat =
+      new ThreadLocal<SimpleDateFormat>() {
+        @Override protected SimpleDateFormat initialValue() {
+          return new SimpleDateFormat("d-MMM-yyyy HH:mm:ss");
+        }
+      };
 
   static long elapsed(long started, long finished) {
     if (finished > 0) {
       return finished - started;
     }
-    return System.currentTimeMillis() - started;
+    return started > 0 ? System.currentTimeMillis() - started : 0;
+  }
+
+  static String format(long ts) {
+    return ts > 0 ? String.valueOf(dateFormat.get().format(new Date(ts)))
+                  : "N/A";
   }
 }