> On March 8, 2017, 6:38 p.m., Michael Park wrote: > > src/master/quota_handler.cpp > > Lines 70 (patched) > > <https://reviews.apache.org/r/57167/diff/1/?file=1652005#file1652005line70> > > > > What do you think of introducing a `QuotaTree` with which we can > > encapsulate all this stuff? > > > > Something like: > > > > ```cpp > > class QuotaTree { > > QuotaTree() = default; > > > > Try<Nothing> insert(const string& role, const Quota& quota) const { > > // basically the body of `foreachpair` in `buildQuotaTree` + > > validation. > > } > > > > Resources total() const; > > > > private: > > > > class Node { ... }; > > > > unique_ptr<Node> root; > > }; > > > > Try<QuotaTree> buildQuotaTree(const hashmap<string, Quota>& quotas) > > { > > QuotaTree result; > > > > foreachpair (cons string& role, const Quota& quota, quotas) { > > Try<Nothing> insert = result.insert(role, quota); > > if (insert.isError()) { > > return Error("Failed to build quota tree" + insert.error()); > > } > > } > > > > return result; > > } > > ``` > > > > This way we could also keep a running `quotaTree` rather than a > > `quotaMap` and rebuilding the `quotaTree` when we need it. Perhaps a minor > > point. Even if we want to simply keep what we have in this patch, I think > > having a: > > > > ```cpp > > class QuotaTree { > > QuotaTree(const hashmap<string, Quota>&); > > Option<Error> validate() const; > > Resources total() const; > > > > // private stuff... > > }; > > ``` > > > > could simplify the usage a little bit.
This is a nice cleanup -- thanks for the suggestion. - Neil ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/57167/#review168318 ----------------------------------------------------------- On March 9, 2017, 4:44 p.m., Neil Conway wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/57167/ > ----------------------------------------------------------- > > (Updated March 9, 2017, 4:44 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 ce1f0644a56e85a99d8c3742d00940a1bfae3be3 > src/tests/hierarchical_allocator_tests.cpp > cdf1f15b7802439b28405ca8f6634ce83e886630 > src/tests/master_quota_tests.cpp e109656492bc5ac65e398b6b61e7321072b162d3 > > > Diff: https://reviews.apache.org/r/57167/diff/2/ > > > Testing > ------- > > `make check` > > > Thanks, > > Neil Conway > >
