You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by bi...@apache.org on 2017/11/18 13:57:22 UTC
hadoop git commit: YARN-7489. ConcurrentModificationException in
RMAppImpl#getRMAppMetrics. Contributed by Tao Yang.
Repository: hadoop
Updated Branches:
refs/heads/trunk 96e6a9936 -> b5b81a4f0
YARN-7489. ConcurrentModificationException in RMAppImpl#getRMAppMetrics. Contributed by Tao Yang.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/b5b81a4f
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/b5b81a4f
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/b5b81a4f
Branch: refs/heads/trunk
Commit: b5b81a4f086126974c75dab9b54aea20a0c1a48f
Parents: 96e6a99
Author: bibinchundatt <bi...@apache.org>
Authored: Sat Nov 18 19:25:29 2017 +0530
Committer: bibinchundatt <bi...@apache.org>
Committed: Sat Nov 18 19:25:29 2017 +0530
----------------------------------------------------------------------
.../server/resourcemanager/rmapp/RMAppImpl.java | 58 +++++++++++---------
1 file changed, 31 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/b5b81a4f/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.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/rmapp/RMAppImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java
index 85d355f..6896254 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java
@@ -1641,35 +1641,39 @@ public class RMAppImpl implements RMApp, Recoverable {
int numNonAMContainerPreempted = 0;
Map<String, Long> resourceSecondsMap = new HashMap<>();
Map<String, Long> preemptedSecondsMap = new HashMap<>();
-
- for (RMAppAttempt attempt : attempts.values()) {
- if (null != attempt) {
- RMAppAttemptMetrics attemptMetrics =
- attempt.getRMAppAttemptMetrics();
- Resources.addTo(resourcePreempted,
- attemptMetrics.getResourcePreempted());
- numAMContainerPreempted += attemptMetrics.getIsPreempted() ? 1 : 0;
- numNonAMContainerPreempted +=
- attemptMetrics.getNumNonAMContainersPreempted();
- // getAggregateAppResourceUsage() will calculate resource usage stats
- // for both running and finished containers.
- AggregateAppResourceUsage resUsage =
- attempt.getRMAppAttemptMetrics().getAggregateAppResourceUsage();
- for (Map.Entry<String, Long> entry : resUsage
- .getResourceUsageSecondsMap().entrySet()) {
- long value = RMServerUtils
- .getOrDefault(resourceSecondsMap, entry.getKey(), 0L);
- value += entry.getValue();
- resourceSecondsMap.put(entry.getKey(), value);
- }
- for (Map.Entry<String, Long> entry : attemptMetrics
- .getPreemptedResourceSecondsMap().entrySet()) {
- long value = RMServerUtils
- .getOrDefault(preemptedSecondsMap, entry.getKey(), 0L);
- value += entry.getValue();
- preemptedSecondsMap.put(entry.getKey(), value);
+ this.readLock.lock();
+ try {
+ for (RMAppAttempt attempt : attempts.values()) {
+ if (null != attempt) {
+ RMAppAttemptMetrics attemptMetrics =
+ attempt.getRMAppAttemptMetrics();
+ Resources.addTo(resourcePreempted,
+ attemptMetrics.getResourcePreempted());
+ numAMContainerPreempted += attemptMetrics.getIsPreempted() ? 1 : 0;
+ numNonAMContainerPreempted +=
+ attemptMetrics.getNumNonAMContainersPreempted();
+ // getAggregateAppResourceUsage() will calculate resource usage stats
+ // for both running and finished containers.
+ AggregateAppResourceUsage resUsage =
+ attempt.getRMAppAttemptMetrics().getAggregateAppResourceUsage();
+ for (Map.Entry<String, Long> entry : resUsage
+ .getResourceUsageSecondsMap().entrySet()) {
+ long value = RMServerUtils
+ .getOrDefault(resourceSecondsMap, entry.getKey(), 0L);
+ value += entry.getValue();
+ resourceSecondsMap.put(entry.getKey(), value);
+ }
+ for (Map.Entry<String, Long> entry : attemptMetrics
+ .getPreemptedResourceSecondsMap().entrySet()) {
+ long value = RMServerUtils
+ .getOrDefault(preemptedSecondsMap, entry.getKey(), 0L);
+ value += entry.getValue();
+ preemptedSecondsMap.put(entry.getKey(), value);
+ }
}
}
+ } finally {
+ this.readLock.unlock();
}
return new RMAppMetrics(resourcePreempted, numNonAMContainerPreempted,
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org