YARN-7401. Reduce lock contention in ClusterNodeTracker#getClusterCapacity()
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/8db9d61a Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/8db9d61a Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/8db9d61a Branch: refs/heads/YARN-6592 Commit: 8db9d61ac2e04888cb228b29fe54b41c730cf0e6 Parents: 13fa2d4 Author: Daniel Templeton <templ...@apache.org> Authored: Tue Nov 7 14:53:48 2017 -0800 Committer: Daniel Templeton <templ...@apache.org> Committed: Tue Nov 7 14:53:48 2017 -0800 ---------------------------------------------------------------------- .../scheduler/ClusterNodeTracker.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/8db9d61a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ClusterNodeTracker.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/scheduler/ClusterNodeTracker.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ClusterNodeTracker.java index ccec6bc..60ef390 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ClusterNodeTracker.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/ClusterNodeTracker.java @@ -55,8 +55,9 @@ public class ClusterNodeTracker<N extends SchedulerNode> { private Map<String, N> nodeNameToNodeMap = new HashMap<>(); private Map<String, List<N>> nodesPerRack = new HashMap<>(); - private Resource clusterCapacity = Resources.clone(Resources.none()); - private Resource staleClusterCapacity = null; + private final Resource clusterCapacity = Resources.clone(Resources.none()); + private volatile Resource staleClusterCapacity = + Resources.clone(Resources.none()); // Max allocation private long maxNodeMemory = -1; @@ -82,6 +83,7 @@ public class ClusterNodeTracker<N extends SchedulerNode> { // Update cluster capacity Resources.addTo(clusterCapacity, node.getTotalResource()); + staleClusterCapacity = Resources.clone(clusterCapacity); // Update maximumAllocation updateMaxResources(node, true); @@ -139,16 +141,7 @@ public class ClusterNodeTracker<N extends SchedulerNode> { } public Resource getClusterCapacity() { - readLock.lock(); - try { - if (staleClusterCapacity == null || - !Resources.equals(staleClusterCapacity, clusterCapacity)) { - staleClusterCapacity = Resources.clone(clusterCapacity); - } - return staleClusterCapacity; - } finally { - readLock.unlock(); - } + return staleClusterCapacity; } public N removeNode(NodeId nodeId) { @@ -175,6 +168,7 @@ public class ClusterNodeTracker<N extends SchedulerNode> { // Update cluster capacity Resources.subtractFrom(clusterCapacity, node.getTotalResource()); + staleClusterCapacity = Resources.clone(clusterCapacity); // Update maximumAllocation updateMaxResources(node, false); --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org