YARN-8022. ResourceManager UI cluster/app/<app-id> page fails to render. Contributed by Tarun Parimi.

This commit is contained in:
Rohith Sharma K S 2018-03-14 09:42:20 +05:30
parent 76be6cbf6c
commit e6de10d0a6
1 changed files with 56 additions and 64 deletions

View File

@ -109,8 +109,7 @@ public class AppBlock extends HtmlBlock {
final GetApplicationReportRequest request = final GetApplicationReportRequest request =
GetApplicationReportRequest.newInstance(appID); GetApplicationReportRequest.newInstance(appID);
if (callerUGI == null) { if (callerUGI == null) {
appReport = appReport = getApplicationReport(request);
appBaseProt.getApplicationReport(request).getApplicationReport();
} else { } else {
appReport = callerUGI.doAs( appReport = callerUGI.doAs(
new PrivilegedExceptionAction<ApplicationReport> () { new PrivilegedExceptionAction<ApplicationReport> () {
@ -143,14 +142,19 @@ public class AppBlock extends HtmlBlock {
try { try {
final GetApplicationAttemptsRequest request = final GetApplicationAttemptsRequest request =
GetApplicationAttemptsRequest.newInstance(appID); GetApplicationAttemptsRequest.newInstance(appID);
attempts = callerUGI.doAs( if (callerUGI == null) {
attempts = getApplicationAttemptsReport(request);
} else {
attempts = callerUGI.doAs(
new PrivilegedExceptionAction<Collection< new PrivilegedExceptionAction<Collection<
ApplicationAttemptReport>>() { ApplicationAttemptReport>>() {
@Override @Override
public Collection<ApplicationAttemptReport> run() throws Exception { public Collection<ApplicationAttemptReport> run()
throws Exception {
return getApplicationAttemptsReport(request); return getApplicationAttemptsReport(request);
} }
}); });
}
} catch (Exception e) { } catch (Exception e) {
String message = String message =
"Failed to read the attempts of the application " + appID + "."; "Failed to read the attempts of the application " + appID + ".";
@ -204,36 +208,55 @@ public class AppBlock extends HtmlBlock {
String schedulerPath = WebAppUtils.getResolvedRMWebAppURLWithScheme(conf) + String schedulerPath = WebAppUtils.getResolvedRMWebAppURLWithScheme(conf) +
"/cluster/scheduler?openQueues=" + app.getQueue(); "/cluster/scheduler?openQueues=" + app.getQueue();
generateOverviewTable(app, schedulerPath, webUiType, appReport);
createApplicationMetricsTable(html);
html.__(InfoBlock.class);
generateApplicationTable(html, callerUGI, attempts);
}
/**
* Generate overview table for app web page.
* @param app app info.
* @param schedulerPath schedule path.
* @param webUiType web ui type.
* @param appReport app report.
*/
private void generateOverviewTable(AppInfo app, String schedulerPath,
String webUiType, ApplicationReport appReport) {
ResponseInfo overviewTable = info("Application Overview") ResponseInfo overviewTable = info("Application Overview")
.__("User:", schedulerPath, app.getUser()) .__("User:", schedulerPath, app.getUser())
.__("Name:", app.getName()) .__("Name:", app.getName())
.__("Application Type:", app.getType()) .__("Application Type:", app.getType())
.__("Application Tags:", .__("Application Tags:",
app.getApplicationTags() == null ? "" : app.getApplicationTags()) app.getApplicationTags() == null ? "" : app.getApplicationTags())
.__("Application Priority:", clarifyAppPriority(app.getPriority())) .__("Application Priority:", clarifyAppPriority(app.getPriority()))
.__( .__(
"YarnApplicationState:", "YarnApplicationState:",
app.getAppState() == null ? UNAVAILABLE : clarifyAppState(app app.getAppState() == null ? UNAVAILABLE : clarifyAppState(app
.getAppState())) .getAppState()))
.__("Queue:", schedulerPath, app.getQueue()) .__("Queue:", schedulerPath, app.getQueue())
.__("FinalStatus Reported by AM:", .__("FinalStatus Reported by AM:",
clairfyAppFinalStatus(app.getFinalAppStatus())) clairfyAppFinalStatus(app.getFinalAppStatus()))
.__("Started:", Times.format(app.getStartedTime())) .__("Started:", Times.format(app.getStartedTime()))
.__( .__(
"Elapsed:", "Elapsed:",
StringUtils.formatTime(Times.elapsed(app.getStartedTime(), StringUtils.formatTime(Times.elapsed(app.getStartedTime(),
app.getFinishedTime()))) app.getFinishedTime())))
.__( .__(
"Tracking URL:", "Tracking URL:",
app.getTrackingUrl() == null app.getTrackingUrl() == null
|| app.getTrackingUrl().equals(UNAVAILABLE) ? null : root_url(app || app.getTrackingUrl().equals(UNAVAILABLE) ? null : root_url(app
.getTrackingUrl()), .getTrackingUrl()),
app.getTrackingUrl() == null app.getTrackingUrl() == null
|| app.getTrackingUrl().equals(UNAVAILABLE) ? "Unassigned" : app || app.getTrackingUrl().equals(UNAVAILABLE) ? "Unassigned" : app
.getAppState() == YarnApplicationState.FINISHED .getAppState() == YarnApplicationState.FINISHED
|| app.getAppState() == YarnApplicationState.FAILED || app.getAppState() == YarnApplicationState.FAILED
|| app.getAppState() == YarnApplicationState.KILLED ? "History" || app.getAppState() == YarnApplicationState.KILLED ? "History"
: "ApplicationMaster"); : "ApplicationMaster");
if (webUiType != null if (webUiType != null
&& webUiType.equals(YarnWebParams.RM_WEB_UI)) { && webUiType.equals(YarnWebParams.RM_WEB_UI)) {
LogAggregationStatus status = getLogAggregationStatus(); LogAggregationStatus status = getLogAggregationStatus();
@ -265,37 +288,6 @@ public class AppBlock extends HtmlBlock {
overviewTable.__("AM container Node Label expression:", overviewTable.__("AM container Node Label expression:",
app.getAmNodeLabelExpression() == null ? "<Not set>" app.getAmNodeLabelExpression() == null ? "<Not set>"
: app.getAmNodeLabelExpression()); : app.getAmNodeLabelExpression());
try {
final GetApplicationAttemptsRequest request =
GetApplicationAttemptsRequest.newInstance(appID);
if (callerUGI == null) {
attempts = appBaseProt.getApplicationAttempts(request)
.getApplicationAttemptList();
} else {
attempts = callerUGI.doAs(
new PrivilegedExceptionAction<Collection<ApplicationAttemptReport>> () {
@Override
public Collection<ApplicationAttemptReport> run() throws Exception {
return appBaseProt.getApplicationAttempts(request)
.getApplicationAttemptList();
}
});
}
} catch (Exception e) {
String message =
"Failed to read the attempts of the application " + appID + ".";
LOG.error(message, e);
html.p().__(message).__();
return;
}
createApplicationMetricsTable(html);
html.__(InfoBlock.class);
generateApplicationTable(html, callerUGI, attempts);
} }
protected void generateApplicationTable(Block html, protected void generateApplicationTable(Block html,