diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AppSchedulingInfo.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AppSchedulingInfo.java index e318d47..297481e 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AppSchedulingInfo.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/AppSchedulingInfo.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -38,6 +39,7 @@ import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.ResourceRequest; +import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState; import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer; import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainerState; @@ -136,7 +138,8 @@ synchronized public boolean updateResourceRequests( QueueMetrics metrics = queue.getMetrics(); boolean anyResourcesUpdated = false; - + HashMap anyPrioritymap = + new HashMap(); // Update resource requests for (ResourceRequest request : requests) { Priority priority = request.getPriority(); @@ -161,6 +164,11 @@ synchronized public boolean updateResourceRequests( if (request.getNumContainers() > 0) { activeUsersManager.activateApplication(user, applicationId); } + if ((null != request.getNodeLabelExpression()) + && (!request.getNodeLabelExpression().equals( + RMNodeLabelsManager.NO_LABEL))) { + anyPrioritymap.put(priority, request); + } } Map asks = this.requests.get(priority); @@ -214,6 +222,20 @@ synchronized public boolean updateResourceRequests( } } } + if (anyPrioritymap.size() > 0) { + for (ResourceRequest request : requests) { + Priority priority = request.getPriority(); + ResourceRequest anyResourceRequest = anyPrioritymap.get(priority); + if ((null != anyResourceRequest)) { + request.setNodeLabelExpression(anyResourceRequest + .getNodeLabelExpression()); + if (LOG.isDebugEnabled()) { + LOG.debug("Updated label Expression for :" + " application= " + + applicationId + " request= " + request); + } + } + } + } return anyResourcesUpdated; }