[ 
https://issues.apache.org/jira/browse/YARN-1707?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14108932#comment-14108932
 ] 

Wangda Tan commented on YARN-1707:
----------------------------------

Hi [~curino],
Thanks for updating, I just took a look, some minor comments,

1) CapacityScheduler#removeQueue
{code}
    if (disposableLeafQueue.getCapacity() > 0) {
      throw new SchedulerConfigEditException("The queue " + queueName
          + " has non-zero capacity: " + disposableLeafQueue.getCapacity());
    }
{code}
removeQueue check disposableLeafQueue's capacity > 0, but addQueue doesn't 
check. In addition, 
After previous check, ParentQueue#removeChildQueue/addChildQueue doesn't need 
check its capacity again.
And they should throw same type of exception (both SchedulerConfigEditException 
or both IllegalArgumentException)

2) CS#addQueue
{code}
      throw new SchedulerConfigEditException("Queue " + queue.getQueueName()
          + " is not a dynamic Queue");
{code}
Should "dynamic Queue" should be "reservation queue" comparing to similar 
exception throw in removeQueue?

3) CS#setEntitlement
{code}
      if (sesConf.getCapacity() > queue.getCapacity()) {
        newQueue.addCapacity((sesConf.getCapacity() - queue.getCapacity()));
      } else {
        newQueue
            .subtractCapacity((queue.getCapacity() - sesConf.getCapacity()));
      }
{code}
Maybe it's better to merge the add/substractCapacity to changeCapacity(delta)
Or just create a "setCapacity" in ReservationQueue?

4) CS#getReservableQueues
Is it better to rename it to getPlanQueues?

5) ReservationQueue#getQueueName
{code}
  @Override
  public String getQueueName() {
    return this.getParent().getQueueName();
  }
{code}
I'm not sure why doing this, could you please elaborate? This makes 
this.queueName and this.getQueueName has different semantic.

6) ReservationQueue#substractCapacity
{code}
this.setCapacity(this.getCapacity() - capacity);
{code}
With EPSILON, it is possible this.capacity < 0 set substract, its better to cap 
this.capacity in range of [0,1]. Also addCapacity

7) DynamicQueueConf
I think unfold it to two float as parameter for setEntitlement maybe more 
straigtforward, is it possible more fields will be add to DynamicQueueConf?

8) ParentQueue#setChildQueues
Since only PlanQueue need sum of capacity <= 1, I would suggest make this 
method protected, and PlanQueue can overwrite this method. Or add a check in 
ParentQueue#setChildQueues.

Wangda

> Making the CapacityScheduler more dynamic
> -----------------------------------------
>
>                 Key: YARN-1707
>                 URL: https://issues.apache.org/jira/browse/YARN-1707
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>          Components: capacityscheduler
>            Reporter: Carlo Curino
>            Assignee: Carlo Curino
>              Labels: capacity-scheduler
>         Attachments: YARN-1707.2.patch, YARN-1707.3.patch, YARN-1707.patch
>
>
> The CapacityScheduler is a rather static at the moment, and refreshqueue 
> provides a rather heavy-handed way to reconfigure it. Moving towards 
> long-running services (tracked in YARN-896) and to enable more advanced 
> admission control and resource parcelling we need to make the 
> CapacityScheduler more dynamic. This is instrumental to the umbrella jira 
> YARN-1051.
> Concretely this require the following changes:
> * create queues dynamically
> * destroy queues dynamically
> * dynamically change queue parameters (e.g., capacity) 
> * modify refreshqueue validation to enforce sum(child.getCapacity())<= 100% 
> instead of ==100%
> We limit this to LeafQueues. 



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to