> 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
>
>