YARN-4047. ClientRMService getApplications has high scheduler lock contention. Contributed by Jason Lowe
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/7a445fcf Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/7a445fcf Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/7a445fcf Branch: refs/heads/HDFS-7285 Commit: 7a445fcfabcf9c6aae219051f65d3f6cb8feb87c Parents: 38aed1a Author: Jian He <jia...@apache.org> Authored: Thu Aug 13 16:02:57 2015 -0700 Committer: Jian He <jia...@apache.org> Committed: Thu Aug 13 16:02:57 2015 -0700 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 +++ .../yarn/server/resourcemanager/ClientRMService.java | 11 +++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/7a445fcf/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 3d19734..a4c16b1 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -766,6 +766,9 @@ Release 2.8.0 - UNRELEASED YARN-4005. Completed container whose app is finished is possibly not removed from NMStateStore. (Jun Gong via jianhe) + YARN-4047. ClientRMService getApplications has high scheduler lock contention. + (Jason Lowe via jianhe) + Release 2.7.2 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/7a445fcf/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java index e4199be..2dcfe9a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java @@ -752,13 +752,9 @@ public class ClientRMService extends AbstractService implements RMApp application = appsIter.next(); // Check if current application falls under the specified scope - boolean allowAccess = checkAccess(callerUGI, application.getUser(), - ApplicationAccessType.VIEW_APP, application); if (scope == ApplicationsRequestScope.OWN && !callerUGI.getUserName().equals(application.getUser())) { continue; - } else if (scope == ApplicationsRequestScope.VIEWABLE && !allowAccess) { - continue; } if (applicationTypes != null && !applicationTypes.isEmpty()) { @@ -807,6 +803,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( callerUGI.getUserName(), allowAccess)); }