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 ll...@apache.org on 2011/06/17 22:42:29 UTC

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

Author: llu
Date: Fri Jun 17 20:42:28 2011
New Revision: 1137014

URL: http://svn.apache.org/viewvc?rev=1137014&view=rev
Log:
Fix RM app start/finish time and diagnostics. (llu)

Added:
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
Modified:
    hadoop/common/branches/MR-279/mapreduce/CHANGES.txt
    hadoop/common/branches/MR-279/mapreduce/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/AppController.java
    hadoop/common/branches/MR-279/mapreduce/mr-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/MockJobs.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/Controller.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/View.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/view/TwoColumnLayout.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/test/java/org/apache/hadoop/yarn/MockApps.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AMTracker.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AppContext.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationMasterInfo.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManager.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManagerImpl.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/SchedulerNegotiator.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsBlock.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsList.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmController.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmView.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestASMStateMachine.java
    hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java

Modified: hadoop/common/branches/MR-279/mapreduce/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/CHANGES.txt?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/CHANGES.txt (original)
+++ hadoop/common/branches/MR-279/mapreduce/CHANGES.txt Fri Jun 17 20:42:28 2011
@@ -4,6 +4,9 @@ Trunk (unreleased changes)
 
 
     MAPREDUCE-279
+
+    Fix RM app start/finish time and diagnostics. (llu)
+
     Fix race condition between multiple localizers on a single node. (cdouglas via mahadev)
 
     Improve logging for AM when requesting containers to show the right ask 

Modified: hadoop/common/branches/MR-279/mapreduce/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/AppController.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/AppController.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/AppController.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/mr-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/AppController.java Fri Jun 17 20:42:28 2011
@@ -23,8 +23,6 @@ import static org.apache.hadoop.yarn.uti
 import java.util.Locale;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.mapreduce.v2.api.records.JobId;
 import org.apache.hadoop.mapreduce.v2.api.records.TaskId;
@@ -37,7 +35,6 @@ import org.apache.hadoop.yarn.webapp.Con
 import com.google.inject.Inject;
 
 public class AppController extends Controller implements AMParams {
-  private static final Log LOG = LogFactory.getLog(AppController.class);
   final App app;
   
   protected AppController(App app, Configuration conf, RequestContext ctx,
@@ -63,7 +60,8 @@ public class AppController extends Contr
       _("Application Name:", app.context.getApplicationName()).
       _("User:", app.context.getUser()).
       _("Started on:", Times.format(app.context.getStartTime())).
-      _("Elasped: ", Times.elapsed(app.context.getStartTime(), 0));
+      _("Elasped: ", org.apache.hadoop.util.StringUtils.formatTime(
+        Times.elapsed(app.context.getStartTime(), 0)));
     render(InfoPage.class);
   }
 

Modified: hadoop/common/branches/MR-279/mapreduce/mr-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/MockJobs.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/mr-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/MockJobs.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/mr-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/MockJobs.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/mr-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/MockJobs.java Fri Jun 17 20:42:28 2011
@@ -51,9 +51,7 @@ import org.apache.hadoop.security.UserGr
 import org.apache.hadoop.yarn.MockApps;
 import org.apache.hadoop.yarn.api.records.ApplicationId;
 import org.apache.hadoop.yarn.api.records.ContainerId;
-import org.apache.hadoop.yarn.factories.RecordFactory;
-import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
-
+import org.apache.hadoop.yarn.util.Records;
 
 public class MockJobs extends MockApps {
   static final Iterator<JobState> JOB_STATES = Iterators.cycle(
@@ -81,7 +79,8 @@ public class MockJobs extends MockApps {
   static final Iterator<String> DIAGS = Iterators.cycle(
       "Error: java.lang.OutOfMemoryError: Java heap space",
       "Lost task tracker: tasktracker.domain/127.0.0.1:40879");
-  static final RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(null);
+
+  static final int DT = 1000000; // ms
 
   public static String newJobName() {
     return newAppName();
@@ -99,17 +98,17 @@ public class MockJobs extends MockApps {
   }
 
   public static JobId newJobID(ApplicationId appID, int i) {
-    JobId id = recordFactory.newRecordInstance(JobId.class);
+    JobId id = Records.newRecord(JobId.class);
     id.setAppId(appID);
     id.setId(i);
     return id;
   }
 
   public static JobReport newJobReport(JobId id) {
-    JobReport report = recordFactory.newRecordInstance(JobReport.class);
+    JobReport report = Records.newRecord(JobReport.class);
     report.setJobId(id);
-    report.setStartTime(System.currentTimeMillis() - (int)(Math.random() * 1000000));
-    report.setFinishTime(System.currentTimeMillis() + (int)(Math.random() * 1000000) + 1);
+    report.setStartTime(System.currentTimeMillis() - (int)(Math.random() * DT));
+    report.setFinishTime(System.currentTimeMillis() + (int)(Math.random() * DT) + 1);
     report.setMapProgress((float)Math.random());
     report.setReduceProgress((float)Math.random());
     report.setJobState(JOB_STATES.next());
@@ -117,10 +116,10 @@ public class MockJobs extends MockApps {
   }
 
   public static TaskReport newTaskReport(TaskId id) {
-    TaskReport report = recordFactory.newRecordInstance(TaskReport.class);
+    TaskReport report = Records.newRecord(TaskReport.class);
     report.setTaskId(id);
-    report.setStartTime(System.currentTimeMillis() - (int)(Math.random() * 1000000));
-    report.setFinishTime(System.currentTimeMillis() + (int)(Math.random() * 1000000) + 1);
+    report.setStartTime(System.currentTimeMillis() - (int)(Math.random() * DT));
+    report.setFinishTime(System.currentTimeMillis() + (int)(Math.random() * DT) + 1);
     report.setProgress((float)Math.random());
     report.setCounters(newCounters());
     report.setTaskState(TASK_STATES.next());
@@ -128,10 +127,10 @@ public class MockJobs extends MockApps {
   }
 
   public static TaskAttemptReport newTaskAttemptReport(TaskAttemptId id) {
-    TaskAttemptReport report = recordFactory.newRecordInstance(TaskAttemptReport.class);
+    TaskAttemptReport report = Records.newRecord(TaskAttemptReport.class);
     report.setTaskAttemptId(id);
-    report.setStartTime(System.currentTimeMillis() - (int)(Math.random() * 1000000));
-    report.setFinishTime(System.currentTimeMillis() + (int)(Math.random() * 1000000) + 1);
+    report.setStartTime(System.currentTimeMillis() - (int)(Math.random() * DT));
+    report.setFinishTime(System.currentTimeMillis() + (int)(Math.random() * DT) + 1);
     report.setPhase(PHASES.next());
     report.setTaskAttemptState(TASK_ATTEMPT_STATES.next());
     report.setProgress((float)Math.random());
@@ -153,7 +152,7 @@ public class MockJobs extends MockApps {
     for (int i = 0; i < nc; ++i) {
       for (FileSystemCounter c : FileSystemCounter.values()) {
         hc.findCounter(FS_SCHEMES.next(), c).
-            setValue((long)(Math.random() * 1000000));
+            setValue((long)(Math.random() * DT));
       }
     }
     for (int i = 0; i < 2 * 3; ++i) {
@@ -174,7 +173,7 @@ public class MockJobs extends MockApps {
   }
 
   public static TaskAttempt newTaskAttempt(TaskId tid, int i) {
-    final TaskAttemptId taid = recordFactory.newRecordInstance(TaskAttemptId.class);
+    final TaskAttemptId taid = Records.newRecord(TaskAttemptId.class);
     taid.setTaskId(tid);
     taid.setId(i);
     final TaskAttemptReport report = newTaskAttemptReport(taid);
@@ -228,7 +227,7 @@ public class MockJobs extends MockApps {
 
       @Override
       public ContainerId getAssignedContainerID() {
-        ContainerId id = recordFactory.newRecordInstance(ContainerId.class);
+        ContainerId id = Records.newRecord(ContainerId.class);
         id.setAppId(taid.getTaskId().getJobId().getAppId());
         return id;
       }
@@ -260,7 +259,7 @@ public class MockJobs extends MockApps {
   }
 
   public static Task newTask(JobId jid, int i, int m) {
-    final TaskId tid = recordFactory.newRecordInstance(TaskId.class);
+    final TaskId tid = Records.newRecord(TaskId.class);
     tid.setJobId(jid);
     tid.setId(i);
     tid.setTaskType(TASK_TYPES.next());

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/Controller.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/Controller.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/Controller.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/Controller.java Fri Jun 17 20:42:28 2011
@@ -146,6 +146,10 @@ public abstract class Controller impleme
 
   public Injector injector() { return context().injector; }
 
+  public <T> T getInstance(Class<T> cls) {
+    return injector.getInstance(cls);
+  }
+
   public HttpServletRequest request() { return context().request; }
 
   public HttpServletResponse response() { return context().response; }
@@ -172,7 +176,7 @@ public abstract class Controller impleme
   }
 
   public ResponseInfo info(String about) {
-    return injector().getInstance(ResponseInfo.class).about(about);
+    return getInstance(ResponseInfo.class).about(about);
   }
 
   /**
@@ -203,7 +207,7 @@ public abstract class Controller impleme
 
   protected void render(Class<? extends View> cls) {
     context().rendered = true;
-    injector().getInstance(cls).render();
+    getInstance(cls).render();
   }
 
   /**
@@ -224,7 +228,7 @@ public abstract class Controller impleme
   protected void renderJSON(Class<? extends ToJSON> cls) {
     context().rendered = true;
     response().setContentType(MimeType.JSON);
-    injector().getInstance(cls).toJSON(writer());
+    getInstance(cls).toJSON(writer());
   }
 
   /**

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/View.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/View.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/View.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/View.java Fri Jun 17 20:42:28 2011
@@ -101,6 +101,10 @@ public abstract class View implements Pa
 
   public Injector injector() { return context().rc.injector; }
 
+  public <T> T getInstance(Class<T> cls) {
+    return injector().getInstance(cls);
+  }
+
   public HttpServletRequest request() {
     return context().rc.request;
   }
@@ -194,7 +198,7 @@ public abstract class View implements Pa
   }
 
   public ResponseInfo info(String about) {
-    return injector().getInstance(ResponseInfo.class).about(about);
+    return getInstance(ResponseInfo.class).about(about);
   }
 
   /**
@@ -203,7 +207,7 @@ public abstract class View implements Pa
    */
   public void render(Class<? extends SubView> cls) {
     int saved = context().nestLevel;
-    injector().getInstance(cls).renderPartial();
+    getInstance(cls).renderPartial();
     if (context().nestLevel != saved) {
       throw new WebAppException("View "+ cls.getSimpleName() +" not complete");
     }

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/view/TwoColumnLayout.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/view/TwoColumnLayout.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/view/TwoColumnLayout.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/view/TwoColumnLayout.java Fri Jun 17 20:42:28 2011
@@ -91,7 +91,6 @@ public class TwoColumnLayout extends Htm
                                 String... innerStyles) {
     List<String> styles = Lists.newArrayList();
     styles.add(join('#', tableId, "_paginate span {font-weight:normal}"));
-    styles.add(join('#', tableId, " .id {width:14em}"));
     styles.add(join('#', tableId, " .progress {width:8em}"));
     styles.add(join('#', tableId, "_processing {top:-1.5em; font-size:1em;"));
     styles.add("  color:#000; background:rgba(255, 255, 255, 0.8)}");

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/test/java/org/apache/hadoop/yarn/MockApps.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/test/java/org/apache/hadoop/yarn/MockApps.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/test/java/org/apache/hadoop/yarn/MockApps.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-common/src/test/java/org/apache/hadoop/yarn/MockApps.java Fri Jun 17 20:42:28 2011
@@ -29,7 +29,7 @@ import org.apache.hadoop.yarn.api.record
 import org.apache.hadoop.yarn.api.records.ApplicationState;
 import org.apache.hadoop.yarn.api.records.ApplicationStatus;
 import org.apache.hadoop.yarn.api.records.Container;
-import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
+import org.apache.hadoop.yarn.util.Records;
 
 /**
  * Utilities to generate fake test apps
@@ -146,14 +146,14 @@ public class MockApps {
   }
 
   public static ApplicationId newAppID(int i) {
-    ApplicationId id = RecordFactoryProvider.getRecordFactory(null).newRecordInstance(ApplicationId.class);
+    ApplicationId id = Records.newRecord(ApplicationId.class);
     id.setClusterTimestamp(TS);
     id.setId(i);
     return id;
   }
 
   public static ApplicationStatus newAppStatus() {
-    ApplicationStatus status = RecordFactoryProvider.getRecordFactory(null).newRecordInstance(ApplicationStatus.class);
+    ApplicationStatus status = Records.newRecord(ApplicationStatus.class);
     status.setProgress((float)Math.random());
     status.setLastSeen(System.currentTimeMillis());
     return status;

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AMTracker.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AMTracker.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AMTracker.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AMTracker.java Fri Jun 17 20:42:28 2011
@@ -354,10 +354,7 @@ public class AMTracker extends AbstractS
     public String getUser() {   
       throw notimplemented;
     }
-    @Override
-    public long getLastSeen() {
-      return master.getStatus().getLastSeen();
-    }
+   
     @Override
     public String getName() {
       throw notimplemented;
@@ -376,6 +373,16 @@ public class AMTracker extends AbstractS
     public ApplicationStore getStore() {
      throw notimplemented;
     }
+
+    @Override
+    public long getStartTime() {
+      throw notimplemented;
+    }
+
+    @Override
+    public long getFinishTime() {
+      throw notimplemented;
+    }
   }
 
   public void heartBeat(ApplicationStatus status) {

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AppContext.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AppContext.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AppContext.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/AppContext.java Fri Jun 17 20:42:28 2011
@@ -76,12 +76,6 @@ public interface AppContext {
   public String getUser();
   
   /**
-   * The last time the RM heard from this application
-   * @return the last time RM heard from this application.
-   */
-  public long getLastSeen();  
-  
-  /**
    * the name for this application
    * @return the application name.
    */
@@ -104,4 +98,16 @@ public interface AppContext {
    * @return the application store for this application
    */
   public ApplicationStore getStore();
+  
+  /**
+   * the start time of the application
+   * @return the start time of the application
+   */
+  public long getStartTime();
+  
+  /**
+   * The finish time of the application
+   * @return the finish time of the application
+   */
+  public long getFinishTime();
 }
\ No newline at end of file

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationMasterInfo.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationMasterInfo.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationMasterInfo.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationMasterInfo.java Fri Jun 17 20:42:28 2011
@@ -68,6 +68,13 @@ public class ApplicationMasterInfo imple
   private final EventHandler syncHandler;
   private Container masterContainer;
   final private String user;
+  private long startTime = 0;
+  private long finishTime = 0;
+  private String diagnostic;
+  private static String DIAGNOSTIC_KILL_APPLICATION = "Application was killed.";
+  private static String DIAGNOSTIC_AM_FAILED = "Application Master failed";
+  private static String DIAGNOSTIC_AM_LAUNCH_FAILED = "Application Master failed to launch";
+  
   private int numFailed = 0;
   private final ApplicationStore appStore;
   
@@ -218,7 +225,9 @@ public class ApplicationMasterInfo imple
     stateMachine = stateMachineFactory.make(this);
     master.setState(ApplicationState.PENDING);
     master.setClientToken(clientToken);
+    master.setDiagnostics("");
     this.appStore = appStore;
+    this.startTime = System.currentTimeMillis();
   }
 
   @Override
@@ -254,7 +263,17 @@ public class ApplicationMasterInfo imple
   public synchronized ApplicationState getState() {
     return master.getState();
   }
-
+  
+  @Override
+  public synchronized long getStartTime() {
+    return this.startTime;
+  }
+  
+  @Override
+  public synchronized long getFinishTime() {
+    return this.finishTime;
+  }
+  
   @Override
   public synchronized Container getMasterContainer() {
     return masterContainer;
@@ -266,10 +285,6 @@ public class ApplicationMasterInfo imple
     return this.user;
   }
 
-  @Override
-  public synchronized long getLastSeen() {
-    return this.master.getStatus().getLastSeen();
-  }
 
   @Override
   public synchronized int getFailedCount() {
@@ -304,7 +319,7 @@ public class ApplicationMasterInfo imple
         AMLauncherEventType.CLEANUP, masterInfo));
       masterInfo.handler.handle(new ASMEvent<ApplicationTrackerEventType>(
       ApplicationTrackerEventType.REMOVE, masterInfo));
-
+      masterInfo.finishTime = System.currentTimeMillis();
       ApplicationFinishEvent finishEvent = (ApplicationFinishEvent) event;
       return finishEvent.getFinalApplicationState();
     }
@@ -325,6 +340,8 @@ public class ApplicationMasterInfo imple
     @Override
     public void transition(ApplicationMasterInfo masterInfo,
     ASMEvent<ApplicationEventType> event) {
+      masterInfo.finishTime = System.currentTimeMillis();
+      masterInfo.getMaster().setDiagnostics(DIAGNOSTIC_KILL_APPLICATION);
       masterInfo.handler.handle(new ASMEvent<SNEventType>(SNEventType.CLEANUP, masterInfo));
       masterInfo.handler.handle(new ASMEvent<AMLauncherEventType>(AMLauncherEventType.CLEANUP, masterInfo));
       masterInfo.handler.handle(new ASMEvent<ApplicationTrackerEventType>(ApplicationTrackerEventType.REMOVE,
@@ -351,6 +368,8 @@ public class ApplicationMasterInfo imple
     @Override
     public void transition(ApplicationMasterInfo masterInfo,
     ASMEvent<ApplicationEventType> event) {
+      masterInfo.finishTime = System.currentTimeMillis();
+      masterInfo.getMaster().setDiagnostics(DIAGNOSTIC_AM_LAUNCH_FAILED);
       masterInfo.handler.handle(new ASMEvent<SNEventType>(
       SNEventType.RELEASE, masterInfo));
     }

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManager.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManager.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManager.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManager.java Fri Jun 17 20:42:28 2011
@@ -56,6 +56,13 @@ public interface ApplicationsManager ext
     * @return {@link Application} information about the application.
     */
    Application getApplication(ApplicationId applicationID);
+
+   /**
+    * Lookup AppContext by application id.
+    * @param appId the application id to lookup
+    * @return the {@link AppContext} of the application
+    */
+   AppContext getAppContext(ApplicationId appId);
    
    /**
     * Submit the application to run on the cluster.
@@ -78,7 +85,7 @@ public interface ApplicationsManager ext
     * This is used by the webUI.
     * @return the applications in the cluster.
     */
-   List<AppContext> getAllApplications();
+   List<AppContext> getAllAppContexts();
    
    /**
     * Get all the applications in the cluster. 

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManagerImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManagerImpl.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManagerImpl.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/ApplicationsManagerImpl.java Fri Jun 17 20:42:28 2011
@@ -256,7 +256,7 @@ public class ApplicationsManagerImpl ext
  }
 
   @Override
-  public  List<AppContext> getAllApplications() {
+  public  List<AppContext> getAllAppContexts() {
     return amTracker.getAllApplications();
   }
 
@@ -264,9 +264,15 @@ public class ApplicationsManagerImpl ext
       applicationId) {
     return amTracker.get(applicationId);
   }
+
+  @Override
+  public AppContext getAppContext(ApplicationId appId) {
+    return getApplicationMasterInfo(appId);
+  }
   
-  private Application createApplication(ApplicationMaster am, String user,
+  private Application createApplication(AppContext context, String user,
       String queue, String name, Container masterContainer) {
+    ApplicationMaster am = context.getMaster();
     Application application = 
       recordFactory.newRecordInstance(Application.class);
     application.setApplicationId(am.getApplicationId());
@@ -284,8 +290,8 @@ public class ApplicationsManagerImpl ext
   @Override
   public List<Application> getApplications() {
     List<Application> apps = new ArrayList<Application>();
-    for (AppContext am: getAllApplications()) {
-      apps.add(createApplication(am.getMaster(), 
+    for (AppContext am: getAllAppContexts()) {
+      apps.add(createApplication(am, 
           am.getUser(), am.getQueue(), am.getName(), am.getMasterContainer()));
     }
     return apps;
@@ -294,7 +300,7 @@ public class ApplicationsManagerImpl ext
   @Override
   public Application getApplication(ApplicationId appID) {
     ApplicationMasterInfo master = amTracker.get(appID);
-    return (master == null) ? null : createApplication(master.getMaster(),
+    return (master == null) ? null : createApplication(master,
         master.getUser(), master.getQueue(), master.getName(),
         master.getMasterContainer());
   }

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/SchedulerNegotiator.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/SchedulerNegotiator.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/SchedulerNegotiator.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/SchedulerNegotiator.java Fri Jun 17 20:42:28 2011
@@ -296,11 +296,6 @@ class SchedulerNegotiator extends Abstra
     }
 
     @Override
-    public long getLastSeen() {
-      throw notImplementedException;
-    }
-
-    @Override
     public String getName() {
       throw notImplementedException;
     }
@@ -319,5 +314,15 @@ class SchedulerNegotiator extends Abstra
     public ApplicationStore getStore() {
       throw notImplementedException;
     }
+
+    @Override
+    public long getStartTime() {
+      throw notImplementedException;
+    }
+
+    @Override
+    public long getFinishTime() {
+      throw notImplementedException;
+    }
   }
 }
\ No newline at end of file

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsBlock.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsBlock.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsBlock.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsBlock.java Fri Jun 17 20:42:28 2011
@@ -20,7 +20,7 @@ package org.apache.hadoop.yarn.server.re
 
 import com.google.inject.Inject;
 
-import org.apache.hadoop.yarn.api.records.Application;
+import org.apache.hadoop.yarn.server.resourcemanager.applicationsmanager.AppContext;
 import org.apache.hadoop.yarn.util.Apps;
 import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
 import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.*;
@@ -48,24 +48,25 @@ class AppsBlock extends HtmlBlock {
             th(".queue", "Queue").
             th(".state", "State").
             th(".progress", "Progress").
-            th(".master", "Master Tracking URL")._()._().
+            th(".ui", "Tracking UI").
+            th(".note", "Note")._()._().
         tbody();
     int i = 0;
-    for (Application app : list.apps) {
-      String appId = Apps.toString(app.getApplicationId());
-      String masterTrackingURL = app.getTrackingUrl();
-      masterTrackingURL =
-          masterTrackingURL == null ? "UNASSIGNED" : masterTrackingURL;
+    for (AppContext app : list.apps) {
+      String appId = Apps.toString(app.getApplicationID());
+      String trackingUrl = app.getMaster().getTrackingUrl();
+      String ui = trackingUrl == null || trackingUrl.isEmpty() ? "UNASSIGNED" :
+          (app.getFinishTime() == 0 ? "ApplicationMaster" : "JobHistory");
       String percent = String.format("%.1f", app.getStatus().getProgress() * 100);
       tbody.
         tr().
           td().
-            br().$title(String.valueOf(app.getApplicationId().getId()))._(). // for sorting
+            br().$title(String.valueOf(app.getApplicationID().getId()))._(). // for sorting
             a(url("app", appId), appId)._().
           td(app.getUser().toString()).
           td(app.getName().toString()).
           td(app.getQueue().toString()).
-          td(app.getState().toString()).
+          td(app.getMaster().getState().toString()).
           td().
             br().$title(percent)._(). // for sorting
             div(_PROGRESSBAR).
@@ -73,8 +74,8 @@ class AppsBlock extends HtmlBlock {
               div(_PROGRESSBAR_VALUE).
                 $style(join("width:", percent, '%'))._()._()._().
           td().
-            a(masterTrackingURL == null ? "#" : join("http://",
-                masterTrackingURL), masterTrackingURL)._()._();
+            a(trackingUrl == null ? "#" : join("http://", trackingUrl), ui)._().
+          td(app.getMaster().getDiagnostics())._();
       if (list.rendering != Render.HTML && ++i >= 20) break;
     }
     tbody._()._();

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsList.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsList.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsList.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsList.java Fri Jun 17 20:42:28 2011
@@ -25,11 +25,10 @@ import java.io.PrintWriter;
 import java.util.List;
 
 import static org.apache.commons.lang.StringEscapeUtils.*;
-import static org.apache.hadoop.yarn.util.StringHelper.*;
 import static org.apache.hadoop.yarn.webapp.view.JQueryUI.*;
 import static org.apache.hadoop.yarn.webapp.view.Jsons.*;
 
-import org.apache.hadoop.yarn.api.records.Application;
+import org.apache.hadoop.yarn.server.resourcemanager.applicationsmanager.AppContext;
 import org.apache.hadoop.yarn.server.resourcemanager.applicationsmanager.ApplicationsManager;
 import org.apache.hadoop.yarn.util.Apps;
 import org.apache.hadoop.yarn.webapp.ToJSON;
@@ -39,37 +38,39 @@ import org.apache.hadoop.yarn.webapp.Con
 @RequestScoped
 class AppsList implements ToJSON {
   final RequestContext rc;
-  final List<Application> apps;
+  final List<AppContext> apps;
   Render rendering;
 
   @Inject AppsList(RequestContext ctx, ApplicationsManager asm) {
     rc = ctx;
-    apps = asm.getApplications();
+    apps = asm.getAllAppContexts();
   }
 
   void toDataTableArrays(PrintWriter out) {
     out.append('[');
     boolean first = true;
-    for (Application app : apps) {
+    for (AppContext app : apps) {
       if (first) {
         first = false;
       } else {
         out.append(",\n");
       }
-      String appID = Apps.toString(app.getApplicationId());
-      String masterTrackingURL = app.getTrackingUrl();
-      masterTrackingURL = masterTrackingURL == null ? "UNASSIGNED" : masterTrackingURL;
+      String appID = Apps.toString(app.getApplicationID());
+      String trackingUrl = app.getMaster().getTrackingUrl();
+      String ui = trackingUrl == null ? "UNASSIGNED" :
+          (app.getFinishTime() == 0 ? "ApplicationMaster" : "JobHistory");
       out.append("[\"");
-      appendSortable(out, app.getApplicationId().getId());
+      appendSortable(out, app.getApplicationID().getId());
       appendLink(out, appID, rc.prefix(), "app", appID).append(_SEP).
           append(escapeHtml(app.getUser().toString())).append(_SEP).
           append(escapeHtml(app.getName().toString())).append(_SEP).
           append(escapeHtml(app.getQueue())).append(_SEP).
-          append(app.getState().toString()).append(_SEP);
+          append(app.getMaster().getState().toString()).append(_SEP);
       appendProgressBar(out, app.getStatus().getProgress()).append(_SEP);
-      appendLink(out, masterTrackingURL, rc.prefix(),
-          masterTrackingURL == null ? "#" : "http://", masterTrackingURL)
-          .append("\"]");
+      appendLink(out, ui, rc.prefix(),
+                 trackingUrl == null ? "#" : "http://", trackingUrl).
+          append(_SEP).append(escapeHtml(app.getMaster().getDiagnostics())).
+          append("\"]");
     }
     out.append(']');
   }

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java Fri Jun 17 20:42:28 2011
@@ -81,7 +81,8 @@ class NodesPage extends RmView {
     setTitle("Nodes of the cluster");
     set(DATATABLES_ID, "nodes");
     set(initID(DATATABLES, "nodes"), nodesTableInit());
-    setTableStyles(html, "nodes");
+    setTableStyles(html, "nodes", ".healthStatus {width:10em}",
+                   ".healthReport {width:10em}");
   }
 
   @Override protected Class<? extends SubView> content() {

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmController.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmController.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmController.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmController.java Fri Jun 17 20:42:28 2011
@@ -24,7 +24,6 @@ import static org.apache.hadoop.yarn.uti
 
 import org.apache.hadoop.util.VersionInfo;
 import org.apache.hadoop.yarn.util.YarnVersionInfo;
-import org.apache.hadoop.yarn.api.records.Application;
 import org.apache.hadoop.yarn.api.records.ApplicationId;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.applicationsmanager.ApplicationsManager;
@@ -37,6 +36,9 @@ import org.apache.hadoop.yarn.webapp.Con
 import org.apache.hadoop.yarn.webapp.ResponseInfo;
 
 import com.google.inject.Inject;
+import org.apache.hadoop.util.StringUtils;
+import org.apache.hadoop.yarn.api.records.Container;
+import org.apache.hadoop.yarn.server.resourcemanager.applicationsmanager.AppContext;
 
 // Do NOT rename/refactor this to RMView as it will wreak havoc
 // on Mac OS HFS as its case-insensitive!
@@ -50,7 +52,7 @@ public class RmController extends Contro
   public void info() {
     setTitle("About the Cluster");
     long ts = ResourceManager.clusterTimeStamp;
-    ResourceManager rm = injector().getInstance(ResourceManager.class);
+    ResourceManager rm = getInstance(ResourceManager.class);
     info("Cluster overview").
       _("Cluster ID:", ts).
       _("ResourceManager state:", rm.getServiceState()).
@@ -68,8 +70,8 @@ public class RmController extends Contro
       return;
     }
     ApplicationId appID = Apps.toAppID(aid);
-    ApplicationsManager asm = injector().getInstance(ApplicationsManager.class);
-    Application app = asm.getApplication(appID);
+    ApplicationsManager asm = getInstance(ApplicationsManager.class);
+    AppContext app = asm.getAppContext(appID);
     if (app == null) {
       // TODO: handle redirect to jobhistory server
       setStatus(response().SC_NOT_FOUND);
@@ -77,23 +79,26 @@ public class RmController extends Contro
       return;
     }
     setTitle(join("Application ", aid));
-    CharSequence masterTrackingURL = app.getTrackingUrl();
-    String ui = masterTrackingURL == null ? "UNASSIGNED" : app.getTrackingUrl();
+    String trackingUrl = app.getMaster().getTrackingUrl();
+    String ui = trackingUrl == null ? "UNASSIGNED" :
+        (app.getFinishTime() == 0 ? "ApplicationMaster" : "JobHistory");
 
     ResponseInfo info = info("Application Overview").
       _("User:", app.getUser()).
       _("Name:", app.getName()).
-      _("State:", app.getState()).
-      _("Started:", "FIXAPI!").
-      _("Elapsed:", "FIXAPI!").
-      _("Master Tracking URL:", join("http://", ui), join("http://", ui)).
-      _("Diagnostics:", app.getDiagnostics());
-    if (app.getMasterContainer() != null) {
-      String masterTrackingURLLink = join("http://", app.getMasterContainer()
-          .getNodeHttpAddress(), "/yarn", "/containerlogs/", ConverterUtils
-          .toString(app.getMasterContainer().getId()));
-      info._("AM container logs:", masterTrackingURLLink,
-          masterTrackingURLLink);
+      _("State:", app.getMaster().getState()).
+      _("Started:", Times.format(app.getStartTime())).
+      _("Elapsed:", StringUtils.formatTime(
+        Times.elapsed(app.getStartTime(), app.getFinishTime()))).
+      _("Tracking URL:", trackingUrl == null ? "#" :
+        join("http://", trackingUrl), ui).
+      _("Diagnostics:", app.getMaster().getDiagnostics());
+    Container masterContainer = app.getMasterContainer();
+    if (masterContainer != null) {
+      String url = join("http://", masterContainer.getNodeHttpAddress(),
+          "/yarn", "/containerlogs/",
+          ConverterUtils.toString(masterContainer.getId()));
+      info._("AM container logs:", url, url);
     } else {
       info._("AM container logs:", "AM not yet registered with RM");
     }
@@ -105,7 +110,7 @@ public class RmController extends Contro
   }
 
   public void scheduler() {
-    ResourceManager rm = injector().getInstance(ResourceManager.class);
+    ResourceManager rm = getInstance(ResourceManager.class);
     ResourceScheduler rs = rm.getResourceScheduler();
     if (rs == null || rs instanceof CapacityScheduler) {
       setTitle("Capacity Scheduler");

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmView.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmView.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmView.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmView.java Fri Jun 17 20:42:28 2011
@@ -35,7 +35,7 @@ public class RmView extends TwoColumnLay
     commonPreHead(html);
     set(DATATABLES_ID, "apps");
     set(initID(DATATABLES, "apps"), appsTableInit());
-    setTableStyles(html, "apps");
+    setTableStyles(html, "apps", ".queue {width:6em}", ".ui {width:8em}");
   }
 
   protected void commonPreHead(Page.HTML<_> html) {
@@ -56,10 +56,11 @@ public class RmView extends TwoColumnLay
   }
 
   private String appsTableInit() {
-    AppsList list = injector().getInstance(AppsList.class);
+    AppsList list = getInstance(AppsList.class);
+    // id, user, name, queue, state, progress, ui, note
     StringBuilder init = tableInit().
         append(", aoColumns:[{sType:'title-numeric'}, null, null, null, null,").
-        append("{sType:'title-numeric', bSearchable:false}, null]");
+        append("{sType:'title-numeric', bSearchable:false}, null, null]");
     String rows = $("rowlimit");
     int rowLimit = rows.isEmpty() ? MAX_DISPLAY_ROWS : Integer.parseInt(rows);
     if (list.apps.size() < rowLimit) {

Added: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java?rev=1137014&view=auto
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java (added)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java Fri Jun 17 20:42:28 2011
@@ -0,0 +1,380 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.yarn.server.resourcemanager.applicationsmanager;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.security.UserGroupInformation;
+import org.apache.hadoop.yarn.api.records.Application;
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.MockApps;
+import org.apache.hadoop.yarn.api.records.ApplicationMaster;
+import org.apache.hadoop.yarn.api.records.ApplicationState;
+import org.apache.hadoop.yarn.api.records.ApplicationStatus;
+import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext;
+import org.apache.hadoop.yarn.api.records.Container;
+import org.apache.hadoop.yarn.api.records.ContainerId;
+import org.apache.hadoop.yarn.api.records.Resource;
+import org.apache.hadoop.yarn.server.resourcemanager.recovery.ApplicationsStore.ApplicationStore;
+import org.apache.hadoop.yarn.server.resourcemanager.recovery.Store.RMState;
+import org.apache.hadoop.yarn.util.Records;
+
+@InterfaceAudience.Private
+public abstract class MockAsm extends MockApps {
+  static final int DT = 1000000; // ms
+
+  public static class AppMasterBase implements ApplicationMaster {
+    @Override
+    public ApplicationId getApplicationId() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public String getHost() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public int getRpcPort() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public String getTrackingUrl() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public ApplicationStatus getStatus() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public ApplicationState getState() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public String getClientToken() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public int getAMFailCount() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public int getContainerCount() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public String getDiagnostics() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setApplicationId(ApplicationId appId) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setHost(String host) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setRpcPort(int rpcPort) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setTrackingUrl(String url) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setStatus(ApplicationStatus status) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setState(ApplicationState state) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setClientToken(String clientToken) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setAMFailCount(int amFailCount) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setContainerCount(int containerCount) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void setDiagnostics(String diagnostics) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+  }
+
+  public static class AsmBase implements ApplicationsManager {
+    @Override
+    public ApplicationId getNewApplicationID() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public ApplicationMaster getApplicationMaster(ApplicationId applicationId) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Application getApplication(ApplicationId applicationID) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public AppContext getAppContext(ApplicationId appId) {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void submitApplication(ApplicationSubmissionContext context) throws IOException {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void finishApplication(ApplicationId applicationId,
+                                  UserGroupInformation callerUGI) throws IOException {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public List<AppContext> getAllAppContexts() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public List<Application> getApplications() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void recover(RMState state) throws Exception {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+  }
+
+  public static class AppContextBase implements AppContext {
+    @Override
+    public ApplicationSubmissionContext getSubmissionContext() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Resource getResource() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public ApplicationId getApplicationID() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public ApplicationStatus getStatus() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public ApplicationMaster getMaster() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Container getMasterContainer() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public String getUser() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public String getName() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public String getQueue() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public int getFailedCount() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public ApplicationStore getStore() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public long getStartTime() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public long getFinishTime() {
+      throw new UnsupportedOperationException("Not supported yet.");
+    }
+  }
+
+  public static ApplicationMaster newAppMaster(final ApplicationId id) {
+    final ApplicationState state = newAppState();
+    return new AppMasterBase() {
+      @Override
+      public ApplicationId getApplicationId() {
+        return id;
+      }
+
+      @Override
+      public ApplicationState getState() {
+        return state;
+      }
+
+      @Override
+      public String getTrackingUrl() {
+        return Math.random() < 0.5 ? "host.com:port" : null;
+      }
+
+      @Override
+      public String getDiagnostics() {
+        switch (getState()) {
+          case FAILED: return "Application was failed";
+          case KILLED: return "Appiication was killed. yada yada yada.";
+        }
+        return "";
+      }
+    };
+  }
+
+  public static AppContext newAppContext(int i) {
+    final ApplicationId id = newAppID(i);
+    final ApplicationMaster master = newAppMaster(id);
+    final Container masterContainer = Records.newRecord(Container.class);
+    ContainerId containerId = Records.newRecord(ContainerId.class);
+    containerId.setAppId(id);
+    masterContainer.setId(containerId);
+    masterContainer.setNodeHttpAddress("node:port");
+    final ApplicationStatus status = newAppStatus();
+    final String user = newUserName();
+    final String name = newAppName();
+    final String queue = newQueue();
+    final long start = System.currentTimeMillis() - (int)(Math.random()*DT);
+    final long finish = Math.random() < 0.5 ? 0 :
+        System.currentTimeMillis() + (int)(Math.random()*DT);
+    return new AppContextBase() {
+      @Override
+      public ApplicationId getApplicationID() {
+        return id;
+      }
+
+      @Override
+      public ApplicationStatus getStatus() {
+        return status;
+      }
+
+      @Override
+      public ApplicationMaster getMaster() {
+        return master;
+      }
+
+      @Override
+      public Container getMasterContainer() {
+        return Math.random() < 0.5 ? null : masterContainer;
+      }
+
+      @Override
+      public String getUser() {
+        return user;
+      }
+
+      @Override
+      public String getName() {
+        return name;
+      }
+
+      @Override
+      public String getQueue() {
+        return queue;
+      }
+
+      @Override
+      public long getStartTime() {
+        return start;
+      }
+
+      @Override
+      public long getFinishTime() {
+        return finish;
+      }
+    };
+  }
+  
+  public static List<AppContext> newAppContexts(int n) {
+    List<AppContext> list = Lists.newArrayList();
+    for (int i = 0; i < n; ++i) {
+      list.add(newAppContext(i));
+    }
+    return list;
+  }
+
+  public static ApplicationsManager create(int n) {
+    final List<AppContext> apps = newAppContexts(n);
+    final Map<ApplicationId, AppContext> map = Maps.newHashMap();
+    for (AppContext app : apps) {
+      map.put(app.getApplicationID(), app);
+    }
+    return new AsmBase() {
+      @Override
+      public List<AppContext> getAllAppContexts() {
+        return apps;
+      }
+
+      @Override
+      public AppContext getAppContext(ApplicationId id) {
+        return map.get(id);
+      }
+    };
+  }
+}

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java Fri Jun 17 20:42:28 2011
@@ -300,11 +300,6 @@ public class TestAMRestart extends TestC
     }
 
     @Override
-    public long getLastSeen() {
-      return 0;
-    }
-
-    @Override
     public String getName() {
       return null;
     }
@@ -323,6 +318,14 @@ public class TestAMRestart extends TestC
     public ApplicationStore getStore() {
      return StoreFactory.createVoidAppStore();
     }
+    @Override
+    public long getStartTime() {
+      return 0;
+    }
+    @Override
+    public long getFinishTime() {
+      return 0;
+    }
     
   }
 

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestASMStateMachine.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestASMStateMachine.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestASMStateMachine.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestASMStateMachine.java Fri Jun 17 20:42:28 2011
@@ -163,10 +163,6 @@ public class TestASMStateMachine extends
       return null;
     }
     @Override
-    public long getLastSeen() {
-      return 0;
-    }
-    @Override
     public String getName() {
       return null;
     }
@@ -182,6 +178,14 @@ public class TestASMStateMachine extends
     public ApplicationStore getStore() {
       return StoreFactory.createVoidAppStore();
     }
+    @Override
+    public long getStartTime() {
+      return 0;
+    }
+    @Override
+    public long getFinishTime() {
+      return 0;
+    }
   }
 
   private class ApplicationTracker implements EventHandler<ASMEvent<ApplicationTrackerEventType>> {

Modified: hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java?rev=1137014&r1=1137013&r2=1137014&view=diff
==============================================================================
--- hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java (original)
+++ hadoop/common/branches/MR-279/mapreduce/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java Fri Jun 17 20:42:28 2011
@@ -18,30 +18,18 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
-import com.google.common.collect.Maps;
 import com.google.inject.Injector;
-import java.io.IOException;
 
-import java.util.Map;
 import java.util.List;
 
 import static org.apache.hadoop.test.MockitoMaker.*;
 import static org.apache.hadoop.yarn.server.resourcemanager.MockNodes.*;
 import static org.apache.hadoop.yarn.webapp.Params.*;
 
-import org.apache.hadoop.security.UserGroupInformation;
-import org.apache.hadoop.yarn.MockApps;
-import org.apache.hadoop.yarn.api.records.Application;
-import org.apache.hadoop.yarn.api.records.ApplicationId;
-import org.apache.hadoop.yarn.api.records.ApplicationMaster;
-import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext;
-import org.apache.hadoop.yarn.factories.RecordFactory;
-import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.MockNodes;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
-import org.apache.hadoop.yarn.server.resourcemanager.applicationsmanager.AppContext;
 import org.apache.hadoop.yarn.server.resourcemanager.applicationsmanager.ApplicationsManager;
-import org.apache.hadoop.yarn.server.resourcemanager.recovery.Store.RMState;
+import org.apache.hadoop.yarn.server.resourcemanager.applicationsmanager.MockAsm;
 import org.apache.hadoop.yarn.server.resourcemanager.resourcetracker.NodeInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.resourcetracker.RMResourceTrackerImpl;
 import org.apache.hadoop.yarn.server.resourcemanager.resourcetracker.ClusterTracker;
@@ -57,60 +45,6 @@ import static org.mockito.Mockito.*;
 
 public class TestRMWebApp {
   static final int GiB = 1024; // MiB
-  private static final RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(null);
-
-  static class TestAsm implements ApplicationsManager {
-    final List<Application> appsList;
-    final Map<ApplicationId, Application> appsMap = Maps.newHashMap();
-
-    TestAsm(int n) {
-      appsList = MockApps.genApps(n);
-      for (Application app : appsList) {
-        appsMap.put(app.getApplicationId(), app);
-      }
-    }
-
-    @Override
-    public ApplicationId getNewApplicationID() {
-      throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public ApplicationMaster getApplicationMaster(ApplicationId applicationId) {
-      throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public Application getApplication(ApplicationId applicationID) {
-      return appsMap.get(applicationID);
-    }
-
-    @Override
-    public void submitApplication(ApplicationSubmissionContext context) throws IOException {
-      throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public void finishApplication(ApplicationId applicationId, UserGroupInformation 
-        callingUser) throws IOException {
-      throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public List<AppContext> getAllApplications() {
-      throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public List<Application> getApplications() {
-      return appsList;
-    }
-
-    @Override
-    public void recover(RMState state) throws Exception {
-      throw new UnsupportedOperationException("Not supported yet.");
-    }
-  }
 
   @Test public void testControllerIndex() {
     Injector injector = WebAppTests.createMockInjector(this);
@@ -120,8 +54,8 @@ public class TestRMWebApp {
   }
 
   @Test public void testView() {
-    Injector injector =
-        WebAppTests.createMockInjector(ApplicationsManager.class, mockAsm(3));
+    Injector injector = WebAppTests.createMockInjector(ApplicationsManager.class,
+                                                       MockAsm.create(3));
     injector.getInstance(RmView.class).render();
     WebAppTests.flushOutput(injector);
   }
@@ -131,10 +65,6 @@ public class TestRMWebApp {
                          mockResource(1, 2, 8*GiB));
   }
 
-  public static ApplicationsManager mockAsm(int n) {
-    return new TestAsm(n);
-  }
-
   public static RMResourceTrackerImpl mockResource(int racks, int nodes,
                                                    int mbsPerNode) {
     final List<NodeInfo> list =
@@ -147,16 +77,16 @@ public class TestRMWebApp {
                                        int mbsPerNode)
   throws Exception {
     ResourceManager rm = mock(ResourceManager.class);
-    ApplicationsManager asm = mockAsm(apps);
+    ApplicationsManager asm = MockAsm.create(apps);
     RMResourceTrackerImpl rt = mockResource(racks, nodes, mbsPerNode);
-    ResourceScheduler rs = mockCS();
+    ResourceScheduler rs = mockCapacityScheduler();
     when(rm.getApplicationsManager()).thenReturn(asm);
     when(rm.getResourceTracker()).thenReturn(rt);
     when(rm.getResourceScheduler()).thenReturn(rs);
     return rm;
   }
 
-  public static CapacityScheduler mockCS() throws Exception {
+  public static CapacityScheduler mockCapacityScheduler() throws Exception {
     // stolen from TestCapacityScheduler
     CapacitySchedulerConfiguration conf = new CapacitySchedulerConfiguration();
     setupQueueConfiguration(conf);
@@ -217,7 +147,7 @@ public class TestRMWebApp {
 
   public static void main(String[] args) throws Exception {
     // For manual testing
-    WebApps.$for("yarn", new TestRMWebApp()).at(8088).inDevMode().
-        start(new RMWebApp(mockRm(101, 8, 8, 8*GiB))).joinThread();
+    WebApps.$for("yarn", new TestRMWebApp()).at(8888).inDevMode().
+        start(new RMWebApp(mockRm(88, 8, 8, 8*GiB))).joinThread();
   }
 }