> On Aug. 13, 2020, 9:22 p.m., Benjamin Mahler wrote: > > src/master/offer_constraints_filter.cpp > > Lines 43-56 (patched) > > <https://reviews.apache.org/r/72741/diff/1/?file=2237295#file2237295line43> > > > > We should check that they aren't both set? > > Andrei Sekretenko wrote: > `oneof` guarantees that only one is set, regardless of the contents of > the serialized message. > > And, at the very least, the code generated by the bundled protoc clearly > guarantees that only one of `has_*()` will return `true`. > For example, a message like > ``` > message Foo{} > > message Bar{} > > > > message Msg{ > > oneof oneofname { > > Foo foo = 1; > > Bar bar = 2; > > } > > } > ``` > results in the following generated code: > > ``` > class Msg{ > enum OneofnameCase { > > kFoo = 1, > > kBar = 2, > > ONEOFNAME_NOT_SET = 0, > > }; > ... > } > > inline bool Msg::has_foo() const { > > return oneofname_case() == kFoo; > > } > inline Msg::OneofnameCase Msg::oneofname_case() const { > > return Msg::OneofnameCase(_oneof_case_[0]); > > } > ... > > ``` > > This means that such a check would protect only against two things: > - a major and **obvious** bug in `protoc`; if the current implementation > has any oneof bugs, this check will not help catch them > - us suddenly removing `oneof`; in this case we have bigger problems > than this one > > The worst thing about adding this check is that right after adding > existence/equality constraiunts it will turn into checking that only one of > the **six** fields is set. > Had we planned to have only two fields forever, this check would have > added clarity; with six fields, I doubt it makes things clearer. > > Probably I should add a comment to remind readers that this is `oneof`, > or, better, some local static assertion that those fields are part of oneof. > > I have to say that it is rather unfortunate that oneof field > accessors/setters have the same names and signatures as those of normal > fields...
Oops, I was looking at another oneof (for the predicate, which will grow to six members soon). Added a comment for that one, but will add a CHECK here, as we aren't going to have more than two members in the foreseeable future in this one. - Andrei ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/72741/#review221571 ----------------------------------------------------------- On Aug. 14, 2020, 5:38 p.m., Andrei Sekretenko wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/72741/ > ----------------------------------------------------------- > > (Updated Aug. 14, 2020, 5:38 p.m.) > > > Review request for mesos and Benjamin Mahler. > > > Bugs: MESOS-10171 > https://issues.apache.org/jira/browse/MESOS-10171 > > > Repository: mesos > > > Description > ------- > > This patch implements an offer filtering object that supports the > Exists/NotExists offer constraints, and adds it into the allocator > interface. > > More constraints will be added to this filter in further patches. > > > Diffs > ----- > > include/mesos/allocator/allocator.hpp > c700528e14bb42f6cea37f42dd7b72eb76a1a6b9 > src/CMakeLists.txt 4e15e3d99aa2cce2403fe07e762fef2fb4a27dea > src/Makefile.am 447db323875e4cad46000977f4a61600baff8f89 > src/master/allocator/mesos/offer_constraints_filter.cpp PRE-CREATION > src/master/master.cpp 6a013e334b19bd108791d1c5fd0864c710aae8cb > > > Diff: https://reviews.apache.org/r/72741/diff/3/ > > > Testing > ------- > > > Thanks, > > Andrei Sekretenko > >