You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-commits@hadoop.apache.org by to...@apache.org on 2013/01/03 16:29:18 UTC
svn commit: r1428401 - in
/hadoop/common/branches/branch-2/hadoop-yarn-project: CHANGES.txt
hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java
Author: tomwhite
Date: Thu Jan 3 15:29:17 2013
New Revision: 1428401
URL: http://svn.apache.org/viewvc?rev=1428401&view=rev
Log:
Merge -r 1428399:1428400 from trunk to branch-2. Fixes: YARN-301. Fair scheduler throws ConcurrentModificationException when iterating over app's priorities. Contributed by Sandy Ryza.
Modified:
hadoop/common/branches/branch-2/hadoop-yarn-project/CHANGES.txt
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java
Modified: hadoop/common/branches/branch-2/hadoop-yarn-project/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-yarn-project/CHANGES.txt?rev=1428401&r1=1428400&r2=1428401&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-yarn-project/CHANGES.txt (original)
+++ hadoop/common/branches/branch-2/hadoop-yarn-project/CHANGES.txt Thu Jan 3 15:29:17 2013
@@ -147,6 +147,9 @@ Release 2.0.3-alpha - Unreleased
YARN-300. After YARN-271, fair scheduler can infinite loop and not
schedule any application. (Sandy Ryza via tomwhite)
+ YARN-301. Fair scheduler throws ConcurrentModificationException when
+ iterating over app's priorities. (Sandy Ryza via tomwhite)
+
Release 2.0.2-alpha - 2012-09-07
YARN-9. Rename YARN_HOME to HADOOP_YARN_HOME. (vinodkv via acmurthy)
Modified: hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java?rev=1428401&r1=1428400&r2=1428401&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java (original)
+++ hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java Thu Jan 3 15:29:17 2013
@@ -305,34 +305,36 @@ public class AppSchedulable extends Sche
// For each priority, see if we can schedule a node local, rack local
// or off-switch request. Rack of off-switch requests may be delayed
// (not scheduled) in order to promote better locality.
- for (Priority priority : prioritiesToTry) {
- app.addSchedulingOpportunity(priority);
- NodeType allowedLocality = app.getAllowedLocalityLevel(priority,
- scheduler.getNumClusterNodes(), scheduler.getNodeLocalityThreshold(),
- scheduler.getRackLocalityThreshold());
+ synchronized (app) {
+ for (Priority priority : prioritiesToTry) {
+ app.addSchedulingOpportunity(priority);
+ NodeType allowedLocality = app.getAllowedLocalityLevel(priority,
+ scheduler.getNumClusterNodes(), scheduler.getNodeLocalityThreshold(),
+ scheduler.getRackLocalityThreshold());
- ResourceRequest localRequest = app.getResourceRequest(priority,
- node.getHostName());
- if (localRequest != null && localRequest.getNumContainers() != 0) {
- return assignContainer(node, app, priority,
- localRequest, NodeType.NODE_LOCAL, reserved);
- }
+ ResourceRequest localRequest = app.getResourceRequest(priority,
+ node.getHostName());
+ if (localRequest != null && localRequest.getNumContainers() != 0) {
+ return assignContainer(node, app, priority,
+ localRequest, NodeType.NODE_LOCAL, reserved);
+ }
- ResourceRequest rackLocalRequest = app.getResourceRequest(priority,
- node.getRackName());
- if (rackLocalRequest != null && rackLocalRequest.getNumContainers() != 0
- && (allowedLocality.equals(NodeType.RACK_LOCAL) ||
- allowedLocality.equals(NodeType.OFF_SWITCH))) {
- return assignContainer(node, app, priority, rackLocalRequest,
- NodeType.RACK_LOCAL, reserved);
- }
+ ResourceRequest rackLocalRequest = app.getResourceRequest(priority,
+ node.getRackName());
+ if (rackLocalRequest != null && rackLocalRequest.getNumContainers() != 0
+ && (allowedLocality.equals(NodeType.RACK_LOCAL) ||
+ allowedLocality.equals(NodeType.OFF_SWITCH))) {
+ return assignContainer(node, app, priority, rackLocalRequest,
+ NodeType.RACK_LOCAL, reserved);
+ }
- ResourceRequest offSwitchRequest = app.getResourceRequest(priority,
- RMNode.ANY);
- if (offSwitchRequest != null && offSwitchRequest.getNumContainers() != 0
- && allowedLocality.equals(NodeType.OFF_SWITCH)) {
- return assignContainer(node, app, priority, offSwitchRequest,
- NodeType.OFF_SWITCH, reserved);
+ ResourceRequest offSwitchRequest = app.getResourceRequest(priority,
+ RMNode.ANY);
+ if (offSwitchRequest != null && offSwitchRequest.getNumContainers() != 0
+ && allowedLocality.equals(NodeType.OFF_SWITCH)) {
+ return assignContainer(node, app, priority, offSwitchRequest,
+ NodeType.OFF_SWITCH, reserved);
+ }
}
}
return Resources.none();