[ 
https://issues.apache.org/jira/browse/YARN-3955?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sunil G updated YARN-3955:
--------------------------
    Attachment: YARN-3955.0008.patch

Thanks [~leftnoteasy] for the detailed comments. I have some more doubts here.

1) Common logic of checkAccess / getDefaultPriority can be merged further: both 
can get approvedPriority first.
>> priority acls are stored in ascending order. So for checkAccess, we need to 
>> see whether ACL match or not and then submitted priority is lesser than 
>> configure priority. However in case there are no configurations for priority 
>> ACLs or ACLs are disabled, we still need to say access check is passed. Now 
>> for default priority, we will loop through all configured priority acls and 
>> if any ACLs are matching, we try to get max priority all group from which 
>> default could be taken.
 Do you mean that below methods also can be made common.

{noformat}
    if (!isACLsEnable) {
      return true;
    }
    List<PriorityACL> acls = allAcls.get(queueName);
    if (acls == null || acls.isEmpty()) {
      return true;
    }
{noformat}

There is one issue here. If approvedPriorityACL comes are null, for checkAccess 
it means false. If we put above code also inside {{getPriorityPerUserACL}}, 
then we expect to return true if that returns null. Since there is conflict of 
interest, i pulled it out. May be you could explain a bit further if I missed 
some.

2) As I commented above, do changes of capacity-scheduler.xml related to the 
patch? I cannot find which module uses acl_access_priority in configuration. If 
not, could you add correct default value?
>> in {{CapacitySchedulerConfiguration.getAclKey(AccessType acl)}}, we try to 
>> get priority ACL config from  acl_access_priority . And that is used to 
>> parse and then populate internal structures. By default I kept it *, but I 
>> have given an example as below.
{noformat}
The ACL of who can submit applications with configured priority.
For e.g, [user={name} group={name} max_priority={priority} 
default_priority={priority}]
{noformat}

3) CapacityScheduler:
* updateApplicationPriority should hold writeLock?
* similiarily, checkAndGetApplicationPriority should hold readlock?
>> Done. Updated in patch

* checkAndGetApplicationPriority: when an app's priority set to negative, I 
think we should use 0 instead of max. Thoughts?
{noformat}
      if (appPriority.compareTo(getMaxClusterLevelAppPriority()) < 0) {
        appPriority = Priority
            .newInstance(getMaxClusterLevelAppPriority().getPriority());
      }
{noformat}
This code will reset to cluster-max priority only if submitted priority is more 
than cluster max. Since I used {{compareTo}}, it not looks very readable.
Now to your point, we never worry much of -ve priority as such since we use 
priority as integer. Do you feel we need to make 0 as lowest priority ?

4) AppPriorityACLsMgr:
* addPrioirityACLs, should we do "replace" instead of "add" to acl groups? If 
it is not intentional, could you add a test to make sure update of acls works? 
(like change from [1,2,3] to [1,3,4])
 >> Could I add a clear model. It may be more easy. Thoughts? Updated patch as 
 >> per this.

* getPriorityPerUserACL -> getMappedPriorityAclForUGI.
>> Done.
5) As I mentioned before, remove readlock of LQ#getPriorityAcls, final should 
be enough.
>> One doubt here. Since priorityAcls could also be updated in reinitialize, we 
>> can’t make it as final rt. refreshQueue’s call flow for eg.
6) YarnScheduler: why the new added method has SettableFuture in parameters? It 
doesn't look very clean ...
>> I agree with you. But we are doing statestore update within scheduler. Hence 
>> we need to pass future to see exception is thrown immediately. Hence we had 
>> to add this while doing move to queue.


> Support for priority ACLs in CapacityScheduler
> ----------------------------------------------
>
>                 Key: YARN-3955
>                 URL: https://issues.apache.org/jira/browse/YARN-3955
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>          Components: capacityscheduler
>            Reporter: Sunil G
>            Assignee: Sunil G
>         Attachments: ApplicationPriority-ACL.pdf, 
> ApplicationPriority-ACLs-v2.pdf, YARN-3955.0001.patch, YARN-3955.0002.patch, 
> YARN-3955.0003.patch, YARN-3955.0004.patch, YARN-3955.0005.patch, 
> YARN-3955.0006.patch, YARN-3955.0007.patch, YARN-3955.0008.patch, 
> YARN-3955.v0.patch, YARN-3955.v1.patch, YARN-3955.wip1.patch
>
>
> Support will be added for User-level access permission to use different 
> application-priorities. This is to avoid situations where all users try 
> running max priority in the cluster and thus degrading the value of 
> priorities.
> Access Control Lists can be set per priority level within each queue. Below 
> is an example configuration that can be added in capacity scheduler 
> configuration
> file for each Queue level.
> yarn.scheduler.capacity.root.<queue_name>.<priority>.acl=user1,user2



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to