mesos-reviews mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Park <mp...@apache.org>
Subject Re: Review Request 57167: Updated quota handler logic for hierarchical roles.
Date Tue, 14 Mar 2017 21:40:26 GMT


> On March 8, 2017, 10:38 a.m., Michael Park wrote:
> > src/master/quota_handler.cpp
> > Lines 78 (patched)
> > <https://reviews.apache.org/r/57167/diff/1/?file=1652005#file1652005line78>
> >
> >     The general pattern for `validate` I think is to return an `Option<Error>`.
In this case, we could more accurately report what/where the invalid relationship is within
the tree.
> 
> Neil Conway wrote:
>     `Option<Error>` seemed like overkill to me, and doesn't compose as nicely when
checking the validity of children. I renamed the member function to `isValid()` -- how does
that sound?

> Option<Error> seemed like overkill to me

Okay
> and doesn't compose as nicely when checking the validity of children.

Hm...? I don't get it. Doesn't it just go from
```cpp
bool isValid() const
{
  foreachvalue (const unique_ptr<Node>& child, root->children) {
    if (!child->isValid()) {
      return false;
    }
  }
  
  return true;
}
```

to...

```cpp
Option<Error> validate() const
{
  foreachvalue (const unique_ptr<Node>& child, root->children) {
    Option<Error> validate = child->validate();
    if (validate.isSome()) {
      return validate;
    }
  }
  
  return None();
}
```

and,

```cpp
    bool isValid() const
    {
      foreachvalue (const unique_ptr<Node>& child, children) {
        if (!child->isValid()) {
          return false;
        }
      }

      Resources childResources;
      foreachvalue (const unique_ptr<Node>& child, children) {
        childResources += child->quota.info.guarantee();
      }

      Resources selfResources = quota.info.guarantee();

      return selfResources.contains(childResources);
    }
```

to...

```cpp
    Option<Error> validate() const
    {
      foreachvalue (const unique_ptr<Node>& child, children) {
        Option<Error> validate = child->validate();
        if (validate.isSome()) {
          return validate;
        }
      }

      Resources childResources;
      foreachvalue (const unique_ptr<Node>& child, children) {
        childResources += child->quota.info.guarantee();
      }

      Resources selfResources = quota.info.guarantee();

      if (!selfResources.contains(childResources)) {
        return Error("Detected invalid quota tree. Parent role " + name +
                     " with quota: " + selfResources + " does not contain"
                     "the sum of its children's resources: " + childResources);
      }

      return None();
    }
```

It's fine if you think `validate` is overkill, but I'm not seeing what doesn't work out nicely.
To me it just seems like it's not any more complicated, and produces a better error message
for the user.


- Michael


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/57167/#review168318
-----------------------------------------------------------


On March 10, 2017, 2:03 p.m., Neil Conway wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/57167/
> -----------------------------------------------------------
> 
> (Updated March 10, 2017, 2:03 p.m.)
> 
> 
> Review request for mesos and Michael Park.
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> The quota'd resources for a nested role are "included" within the
> quota'd resources for that role's parent. Hence, the quota of a node
> must always be greater than or equal to the sum of the quota'd resources
> of that role's children.
> 
> When creating and removing quota, we must ensure that this invariant is
> not violated.
> 
> When computing the cluster capacity heuristic, we must ensure that we do
> not "double-count" quota'd resources: e.g., if the cluster has a total
> capacity of 100 CPUs, role "x" has a quota guarantee of 80 CPUs, and
> role "x/y" has a quota guarantee of 40 CPUs, this does NOT violate the
> cluster capacity heuristic.
> 
> 
> Diffs
> -----
> 
>   src/master/quota_handler.cpp 36ea1acca47014b2fb7a3b597b857c8ec9e2ab67 
>   src/tests/hierarchical_allocator_tests.cpp dce619ec49db480685deb1bf8f7faeebe02e25b5

>   src/tests/master_quota_tests.cpp e418f22ea1773f4356ced44b8d57a80e826c8837 
> 
> 
> Diff: https://reviews.apache.org/r/57167/diff/4/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> Thanks,
> 
> Neil Conway
> 
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message