You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Klaus Ma (JIRA)" <ji...@apache.org> on 2016/07/09 10:49:12 UTC

[jira] [Updated] (MESOS-3896) Add accounting for reservation slack in the allocator.

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

Klaus Ma updated MESOS-3896:
----------------------------
    Assignee:     (was: Klaus Ma)

> Add accounting for reservation slack in the allocator.
> ------------------------------------------------------
>
>                 Key: MESOS-3896
>                 URL: https://issues.apache.org/jira/browse/MESOS-3896
>             Project: Mesos
>          Issue Type: Bug
>            Reporter: Artem Harutyunyan
>              Labels: mesosphere
>
> MESOS-XXX: Optimsistic accounter
> {code}
>     class HierarchicalAllocatorProcess 
>     {
>       struct Slave
>       {
>         ...
>         struct Optimistic 
>         {
>           Resources total; // The total allocation slack resources
>           Resources allocated; // The allocated allocation slack resources
>         };
>     
>         Optimistic optimistic;
>       };
>     }
> {code}
> MESOS-4146: flatten & allocationSlack for Optimistic Offer
> {code}
>     class Resources
>     {
>         // Returns a Resources object with the same amount of each resource
>         // type as these Resources, but with all Resource objects marked as
>         // the specified `RevocableInfo::Type`; the other attribute is not
>         // affected.
>         Resources flatten(Resource::RevocableInfo::Type type);
>         // Return a Resources object that:
>         //   - if role is given, the resources did not include role's reserved
>         //     resources.
>         //   - the resources's revocable type is `ALLOCATION_SLACK`
>         //   - the role of resources is set to "*"
>         Resources allocationSlack(Option<string> role = None());
>     }
> {code}
> MESOS-XXX: Allocate the allocation_slack resources to framework
> {code}
>     void HierarchicalAllocatorProcess::allocate(
>         const hashset<SlaveID>& slaveIds_)
>     {
>       foreach slave; foreach role; foreach framework
>       {
>         Resource optimistic;
>         if (framework.revocable) {
>           Resources total = slaves[slaveId].optimistic.total.allocationSlack(role);
>           optimistic = total - slaves[slaveId].optimistic.allocated;
>         }
>         ...
>         offerable[frameworkId][slaveId] += resources + optimistic;
>         ...
>         slaves[slaveId].optimistic.allocated += optimistic;
>       }
>     }
> {code}
>   
> Here's some consideration about `ALLOCATION_SLACK`:
> 1. 'Old' resources (available/total) did not include ALLOCATION_SLACK
> 2. After `Quota`, `remainingClusterResources.contains` should not check ALLOCATION_SLACK; if there no enough resources,  master can still offer ALLOCATION_SALCK resources.
> 3. In sorter, it'll not include ALLOCATION_SLACK; as those resources are borrowed from other role/framework
> 4. If either normal resources or ALLOCATION_SLACK resources are allocable/!filtered, it can be offered to framework
> 5. Currently, allocator will assign all ALLOCATION_SALCK resources in slave to one framework
> MESOS-XXX: Update ALLOCATION_SLACK for dynamic reservation (updateAllocation)
> {code}
>     void HierarchicalAllocatorProcess::updateAllocation(
>         const FrameworkID& frameworkId,
>         const SlaveID& slaveId,
>         const vector<Offer::Operation>& operations)
>     {
>         ...
>         Try<Resources> updatedOptimistic =
>             slaves[slaveId].optimistic.total.apply(operations);
>         CHECK_SOME(updatedTotal);
>         slaves[slaveId].optimistic.total =
>             updatedOptimistic.get().stateless().reserved().flatten(ALLOCATION_SLACK);
>         ...
>     }
> {code}
>     
> MESOS-XXX: Add ALLOCATION_SLACK when slaver register/re-register (addSlave)
> {code}
>     void HierarchicalAllocatorProcess::addSlave(
>         const SlaveID& slaveId,
>         const SlaveInfo& slaveInfo,
>         const Option<Unavailability>& unavailability,
>         const Resources& total,
>         const hashmap<FrameworkID, Resources>& used)
>     {
>       ...
>       slaves[slaveId].optimistic.total =
>           total.stateless().reserved().flatten(ALLOCATION_SLACK);
>       ...
>     }
> {code}
>   
> No need to handle `removeSlave`, it'll all related info from `slaves` including `optimistic`.
> MESOS-XXX: return resources to allocator (recoverResources)
> {code}
>     void HierarchicalAllocatorProcess::recoverResources(
>         const FrameworkID& frameworkId,
>         const SlaveID& slaveId,
>         const Resources& resources,
>         const Option<Filters>& filters)
>     {
>       if (slaves.contains(slaveId))
>       {
>         ...
>         slaves[slaveId].optimistic.allocated -= resources.allocationSlack();
>         ...
>       }
>     }
> {code}



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