> On March 28, 2017, 4:06 p.m., Michael Park wrote: > > src/master/quota_handler.cpp > > Lines 469-487 (original), 605-618 (patched) > > <https://reviews.apache.org/r/57167/diff/8/?file=1672397#file1672397line605> > > > > Couldn't this be just: > > > > ```cpp > > vector<string> components = strings::split(request.url.path, "/", 3u); > > if (components.size() < 3u) { > > return BadRequest( > > "Failed to parse request path '" + request.url.path + > > "': 3 tokens ('master', 'quota', 'role') required, found " + > > stringify(tokens.size()) + " token(s)")); > > } > > > > CHECK_EQ(3u, components.size()); > > const string& role = components.back(); > > /* ... */ > > ``` > > Neil Conway wrote: > I'm not sure this is actually more readable; leaving as-is for now, will > discuss offline.
A summary of our discussion yesterday: the `components.begin() + 3` part looks wrong, but is indeed correct because `split` returns empty tokens, and the first token will be an empty string. This means that my suggestion of `split(..., 3u)` actually has a bug... subtle :(. We also didn't like the splitting/joining of the "rest", because it's not obvious that we get back what we put in. Also, based on the code that I see in libprocess for `route`, it looks like we would allow extraneous slashes such as `/master///quota`. This would mean that the use of `split` actually introduces a backwards-incompatibility here. I personally think it's simplest for us to do `strings::tokenize(request.url.path, "/", 3u)`. What do you think? - Michael ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/57167/#review170328 ----------------------------------------------------------- On March 28, 2017, 4:42 p.m., Neil Conway wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/57167/ > ----------------------------------------------------------- > > (Updated March 28, 2017, 4:42 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 > e343dc37bd7136f0f6dd5dbc22a25cabe715038d > src/tests/master_quota_tests.cpp e418f22ea1773f4356ced44b8d57a80e826c8837 > > > Diff: https://reviews.apache.org/r/57167/diff/9/ > > > Testing > ------- > > `make check` > > > Thanks, > > Neil Conway > >