Jian He commented on YARN-3361:

Some comments on my side
- should treat each limit differently for different labeled requests?  
// Otherwise, if any of the label of this node beyond queue limit, we
// cannot 
allocate on this node. Consider a small epsilon here.
- Merge queue#needResource and application#needResource
- needResource -> hasPendingResourceRequest; needResource can also be 
simplified if pass in partionToAllocate 
- Some methods like canAssignToThisQueue where both nodeLabels and 
exclusiveType are passed, it may be simplified by passing the current 
partitionToAllocate to simplify the internal if/else check.
- The following may be incorrect, as the current request may be not the AM 
container request, though null == rmAppAttempt.getMasterContainer()
// AM container allocation doesn't support non-exclusive allocation to

// avoid painful of preempt an AM container

- below if/else can be avoided if passing the nodePartition into 
if (!nodePartition.equals(RMNodeLabelsManager.NO_LABEL)) {
      queueCapacity =
              .max(resourceCalculator, clusterResource, queueCapacity,

    } else {
      // else there's no label on request, just to use absolute capacity as
      // capacity for nodes without label
      queueCapacity =
          Resources.multiplyAndNormalizeUp(resourceCalculator, labelManager
- the second limit won’t be hit?
    if (exclusiveType == ExclusiveType.EXCLUSIVE) {
      maxUserLimit =
          Resources.multiplyAndRoundDown(queueCapacity, userLimitFactor);
    } else if (exclusiveType == ExclusiveType.NON_EXECLUSIVE) {
      maxUserLimit =
          labelManager.getResourceByLabel(nodePartition, clusterResource);
- nonExclusiveSchedulingOpportunities#setCount -> add(Priority)

> CapacityScheduler side changes to support non-exclusive node labels
> -------------------------------------------------------------------
>                 Key: YARN-3361
>                 URL: https://issues.apache.org/jira/browse/YARN-3361
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>          Components: capacityscheduler
>            Reporter: Wangda Tan
>            Assignee: Wangda Tan
>         Attachments: YARN-3361.1.patch, YARN-3361.2.patch
> According to design doc attached in YARN-3214, we need implement following 
> logic in CapacityScheduler:
> 1) When allocate a resource request with no node-label specified, it should 
> get preferentially allocated to node without labels.
> 2) When there're some available resource in a node with label, they can be 
> used by applications with following order:
> - Applications under queues which can access the label and ask for same 
> labeled resource. 
> - Applications under queues which can access the label and ask for 
> non-labeled resource.
> - Applications under queues cannot access the label and ask for non-labeled 
> resource.
> 3) Expose necessary information that can be used by preemption policy to make 
> preemption decisions.

This message was sent by Atlassian JIRA

Reply via email to