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

Craig Welch commented on YARN-3318:
-----------------------------------

[~vinodkv]

bq. ...We can strictly focus on the policy framework here...

Sure, limited patch to "framework"

bq. ...You could also say SchedulableProcess...

SchedulableProcess it is, done

bq. I agree to this, but we are not in a position to support the APIs, CLI, 
config names in a supportable manner yet. They may or may not change depending 
on how parent queue policies, limit policies evolve. For that reason alone, I 
am saying that (1) Don't make the configurations public yet, or put a warning 
saying that they are unstable and (2) don't expose them in CLI , REST APIs yet. 
It's okay to put in the web UI, web UI scraping is not a contract.

You can't see it, because it's part of "Capacity Scheduler Integration", but 
removed CLI and proto related change.  There was no rest api change, the web UI 
change is still present.  Will warn unstable when added to config files in the 
scheduler integration patch

bq. SchedulerApplicationAttempt.getDemand() should be private

Done

bq. updateCaches() -> updateState() / updateSchedulingState() as that is what 
it is doing?  getCachedConsumption() / getCachedDemand(): simply getCurrent*() 
? What is the need for reorderOnContainerAllocate () / 
reorderOnContainerRelease()?

Is now getSchedulingConsumption(); getSchedulingDemand(); 
updateSchedulingState();

This is needed because mutable values which are used for ordering cannot be 
allowed to change for an item in the tree, else it will not be found in some 
cases during the delete before reinsert process which occurs when a 
schedulable's mutable values used in comparison change (for fairness, changes 
to consumption and potentially demand)  Not all OrderingPolicies require 
reordering on these events, for efficiency they get to decide if they do or 
not, hence the "reorderOn".  The "reorderOn" are now   
reorderForContainerAllocation  reorderForContainerRelease

bq. Move all the comparator related classed into their own package
No longer needed as comparators are now just a property of policies, see below 
for details

bq. This is really a ComparatorBasedOrderingPolicy. Do we really see 
non-comparator based ordering-policy. We are unnecessarily adding two 
abstractions - adding policies and comparators

Originally, there was a perceived need to be able to support a more flexible 
interface than the comparator one, but also a desire to build up a simpler, 
composible abstraction to be used with an instance of the former which had 
"most of the hard stuff done".  Given that all of the policies we've 
contemplated building fit the latter abstraction and the level of flexibility 
does not appear to actually be that different, I think it's fair to say that we 
only need what was previously the "SchedulerComparator" abstraction as a 
plugin-point.  Given that, a slightly refactored version of the 
"SchedulerComparator" abstraction is now the only plugin point and is now what 
goes by the name of "OrderingPolicy".  What was previously the "OrderingPolicy" 
is now a single concrete class implementing the surrounding logic, meant to be 
usable from any scheduler, named "SchedulingOrder".  So, one abstraction, a 
comparator-based ordering-policy.  If we really do find we need a flexibility 
we don't have some day, the SchedulingOrder class could be abstracted to 
provide that higher level abstraction - but as we see no need for it now, and 
it appears probably never will, there's no reason to do so at present

bq. ...Use className.getName()...

Done

[~leftnoteasy]

bq. ...I prefer what Vinod suggested, split "SchedulerProcess" to be 
"QueueSchedulable" and "AppSchedulable" ...

I don't see that he has suggested that.  In any case, with the removal of 
"*Serial*" and the move to compareInputOrderTo() I don't at present see a need 
to have separate subtypes for app and queue to avoid "dangling properties".  
And, I think if we do it right we won't end up introducing them.  By splitting 
in the suggested way we commit ourselves to either multiple comparators (to use 
the differing functionality) or awkward testing of subtype/etc logic in one 
comparator - so it basically moves the complexity/awkwardness, it doesn't 
eliminate it.  I've refactored such that the Policy now provides a Comparator 
as opposed to extending it, so there is now room for it to provide multiple 
comparators and handle subtypes if need be, but I think we should wait until we 
see that we must do that before doing so, as I don't believe we will end up 
needing to (but if we do, existing code should need little change, and 
implementing what you suggest should be essentially additive...)

bq. ...About inherit relationships between interfaces/classes...

Policies will be composed to achieve combined capabilities yet the collection 
of SchedulableProcesses & as such must reside in one instance, so attempting to 
place that logic in the multiple-instances (where multiple policies are 
constructed, each containing a SchedulerProcess collection via inheritance) is 
a non starter.  Before the latest refactor this was handled by having a single 
SchedulerComparatorOrderingPolicy with multiple Comparators, post the latest 
refactor the SchedulingOrder is a single concrete type containing the 
SchedulableProcess collection, and using one or more OrderingPolicies which 
possess the policy specific logic (including, but not limited to, comparator 
logic).  As it happens, they do not appear to need to share logic, so there is 
no super class, just a shared interface implementation - were that to change we 
could certainly adjust the implementation, but there's no need to now, and it's 
an implementation not an api issue anyway.

bq. ...Regarding relationship between OrderingPolicy and comparator...

There's no longer this duality, there are now just OrderingPolicies

bq. ...Regarding configuration...

There's now just one type of configuration, for policy, and will handle 
"friendly policy labels".  Only the fifo is available now, and generalized 
composition logic, it's in SchedulingOrder












> Create Initial OrderingPolicy Framework and FifoOrderingPolicy
> --------------------------------------------------------------
>
>                 Key: YARN-3318
>                 URL: https://issues.apache.org/jira/browse/YARN-3318
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>          Components: scheduler
>            Reporter: Craig Welch
>            Assignee: Craig Welch
>         Attachments: YARN-3318.13.patch, YARN-3318.14.patch, 
> YARN-3318.17.patch, YARN-3318.34.patch, YARN-3318.35.patch, 
> YARN-3318.36.patch, YARN-3318.39.patch, YARN-3318.45.patch, YARN-3318.47.patch
>
>
> Create the initial framework required for using OrderingPolicies and an 
> initial FifoOrderingPolicy



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to