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

Adam B updated MESOS-692:
-------------------------
         Component/s: json api
    Target Version/s: 0.22.0
            Shepherd: Adam B
          Issue Type: Improvement  (was: Bug)

> Reservations are not reported in master's state.json
> ----------------------------------------------------
>
>                 Key: MESOS-692
>                 URL: https://issues.apache.org/jira/browse/MESOS-692
>             Project: Mesos
>          Issue Type: Improvement
>          Components: json api, master
>            Reporter: brian wickman
>              Labels: newbie
>
> For each resource type, state.json reports the sum of resources across all 
> reservation roles (including unreserved '*'). Operators would love to have 
> visibility into the reserved and unreserved resources on each node and across 
> the cluster, so it makes sense to surface this information in state.json on 
> both the slave and the master.
> This will become extra valuable as we expand the power of reservations with 
> MESOS-2018 and MESOS-1791.
> Old description:
> ===========================
> When you dump state.json from the master, it lists out a single resources 
> dict, e.g.
> {noformat}
> >>> state['slaves'][0]
> {..., u'registered_time': 1378851991.87182, u'reregistered_time': 
> 1378917907.3190701, u'id': u'201309042122-1937777162-5050-55755-120', 
> u'resources': {u'mem': 21913, u'disk': 400000, u'cpus': 14, u'ports': 
> u'[31000-32000]'}}
> {noformat}
> Looking at the code, it looks like last value wins:
> {noformat}
> // Returns a JSON object modeled on a Resources.
> JSON::Object model(const Resources& resources)
> {
>   JSON::Object object;
>   foreach (const Resource& resource, resources) {
>     switch (resource.type()) {
>       case Value::SCALAR:
>         object.values[resource.name()] = resource.scalar().value();
>         break;
>       case Value::RANGES:
>         object.values[resource.name()] = stringify(resource.ranges());
>         break;
>       case Value::SET:
>         object.values[resource.name()] = stringify(resource.set());
>         break;
>       default:
>         LOG(FATAL) << "Unexpected Value type: " << resource.type();
>         break;
>     }
>   }
>   return object;
> }
> {noformat}
> So for example if you had role * with 15 cores and role "hdfs" with 1 cores, 
> the resource dict might just report 1 core.  Instead it should probably 
> aggregate resources by role, and have resources = {'*': {ram, cpu, disk}, 
> 'hdfs': {ram, cpu, disk}} etc.



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

Reply via email to