YARN-4047. ClientRMService getApplications has high scheduler lock contention. Contributed by Jason Lowe

(cherry picked from commit 7a445fcfab)

(cherry picked from commit 703fa1b141)
This commit is contained in:
Jian He 2015-08-13 16:02:57 -07:00 committed by Vinod Kumar Vavilapalli
parent d59bf81e08
commit 2b526ba757
2 changed files with 10 additions and 4 deletions

View File

@ -202,6 +202,9 @@ Release 2.6.1 - UNRELEASED
YARN-3999. RM hangs on draing events. (Jian He via xgong) YARN-3999. RM hangs on draing events. (Jian He via xgong)
YARN-4047. ClientRMService getApplications has high scheduler lock contention.
(Jason Lowe via jianhe)
Release 2.6.0 - 2014-11-18 Release 2.6.0 - 2014-11-18
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -738,13 +738,9 @@ public class ClientRMService extends AbstractService implements
RMApp application = appsIter.next(); RMApp application = appsIter.next();
// Check if current application falls under the specified scope // Check if current application falls under the specified scope
boolean allowAccess = checkAccess(callerUGI, application.getUser(),
ApplicationAccessType.VIEW_APP, application);
if (scope == ApplicationsRequestScope.OWN && if (scope == ApplicationsRequestScope.OWN &&
!callerUGI.getUserName().equals(application.getUser())) { !callerUGI.getUserName().equals(application.getUser())) {
continue; continue;
} else if (scope == ApplicationsRequestScope.VIEWABLE && !allowAccess) {
continue;
} }
if (applicationTypes != null && !applicationTypes.isEmpty()) { if (applicationTypes != null && !applicationTypes.isEmpty()) {
@ -793,6 +789,13 @@ public class ClientRMService extends AbstractService implements
} }
} }
// checkAccess can grab the scheduler lock so call it last
boolean allowAccess = checkAccess(callerUGI, application.getUser(),
ApplicationAccessType.VIEW_APP, application);
if (scope == ApplicationsRequestScope.VIEWABLE && !allowAccess) {
continue;
}
reports.add(application.createAndGetApplicationReport( reports.add(application.createAndGetApplicationReport(
callerUGI.getUserName(), allowAccess)); callerUGI.getUserName(), allowAccess));
} }