diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppBlock.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppBlock.java index ed147fb..f9ab19d 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppBlock.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppBlock.java @@ -25,6 +25,7 @@ import static org.apache.hadoop.yarn.webapp.view.JQueryUI._ODD; import static org.apache.hadoop.yarn.webapp.view.JQueryUI._TH; +import java.io.IOException; import java.util.Collection; import org.apache.hadoop.http.HttpConfig; @@ -32,6 +33,7 @@ import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.yarn.api.records.ApplicationAccessType; import org.apache.hadoop.yarn.api.records.ApplicationId; +import org.apache.hadoop.yarn.api.records.FinalApplicationStatus; import org.apache.hadoop.yarn.api.records.QueueACL; import org.apache.hadoop.yarn.server.resourcemanager.RMContext; import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager; @@ -87,6 +89,21 @@ protected void render(Block html) { return; } AppInfo app = new AppInfo(rmApp, true); + final String thisUrl = request().getRequestURL().toString(); + final String trackingUrlPretty = app.getTrackingUrlPretty(); + if ( rmApp.getFinalApplicationStatus() != FinalApplicationStatus.UNDEFINED + && app.isTrackingUrlReady() + && !trackingUrlPretty.equals(thisUrl)) { + // AM attempt section below will contain broken log links if + // log aggregation is on. On the other hand, an equivalent section on the + // job history server has all correct links. Thus, if the app is finished + // redirect to history. + try { + response().sendRedirect(trackingUrlPretty); + } catch (IOException e) { + LOG.warn("Redirect to history failed", e); + } + } // Check for the authorization. String remoteUser = request().getRemoteUser(); @@ -116,7 +133,7 @@ protected void render(Block html) { _("Elapsed:", StringUtils.formatTime( Times.elapsed(app.getStartTime(), app.getFinishTime()))). _("Tracking URL:", !app.isTrackingUrlReady() ? - "#" : app.getTrackingUrlPretty(), app.getTrackingUI()). + "#" : trackingUrlPretty, app.getTrackingUI()). _("Diagnostics:", app.getNote()); Collection attempts = rmApp.getAppAttempts().values();