YARN-6991. "Kill application" button does not show error if other user tries to kill the application for secure cluster. (Suma Shivaprasad via wangda)

Change-Id: I7e7894b24609709f89064ee5882f055dbb09080b
(cherry picked from commit 263e2c692a)
This commit is contained in:
Wangda Tan 2017-09-21 12:00:53 -07:00
parent 6c07077837
commit 4dbf7a501a
1 changed files with 24 additions and 20 deletions

View File

@ -137,6 +137,30 @@ public class AppBlock extends HtmlBlock {
setTitle(join("Application ", aid));
//Validate if able to read application attempts
// which should also validate if kill is allowed for the user based on ACLs
Collection<ApplicationAttemptReport> attempts;
try {
final GetApplicationAttemptsRequest request =
GetApplicationAttemptsRequest.newInstance(appID);
attempts = callerUGI.doAs(
new PrivilegedExceptionAction<Collection<
ApplicationAttemptReport>>() {
@Override
public Collection<ApplicationAttemptReport> run() throws Exception {
return getApplicationAttemptsReport(request);
}
});
} catch (Exception e) {
String message =
"Failed to read the attempts of the application " + appID + ".";
LOG.error(message, e);
html.p().__(message).__();
return;
}
// YARN-6890. for secured cluster allow anonymous UI access, application kill
// shouldn't be there.
boolean unsecuredUIForSecuredCluster = UserGroupInformation.isSecurityEnabled()
@ -183,26 +207,6 @@ public class AppBlock extends HtmlBlock {
generateOverviewTable(app, schedulerPath, webUiType, appReport);
Collection<ApplicationAttemptReport> attempts;
try {
final GetApplicationAttemptsRequest request =
GetApplicationAttemptsRequest.newInstance(appID);
attempts = callerUGI.doAs(
new PrivilegedExceptionAction<Collection<
ApplicationAttemptReport>>() {
@Override
public Collection<ApplicationAttemptReport> run() throws Exception {
return getApplicationAttemptsReport(request);
}
});
} 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);