> On Jan. 7, 2020, 9:43 p.m., Greg Mann wrote: > > src/slave/slave.cpp > > Lines 3623 (patched) > > <https://reviews.apache.org/r/71858/diff/4/?file=2191535#file2191535line3628> > > > > Should this be an `Option`? So that we can only set > > `containerConfig.limits` when limits have actually been set? > > Qian Zhang wrote: > I added a check `if (!executorLimits.empty()) {` before setting > `containerConfig.limit`, HDYT? > > Greg Mann wrote: > If we use an option, then the type in the function signature more > precisely expresses the semantics of the function, which improves readability > IMO. > > Qian Zhang wrote: > I actually thought about it before, but it may make the code a bit more > complicated. Here is the code where we call `launchExecutor()`: > ``` > defer( > self(), > &Self::launchExecutor, > lambda::_1, > frameworkId, > executorInfo_, > executorLimits, > taskGroup.isNone() ? task.get() : Option<TaskInfo>::none())); > ``` > > The type of the variable `executorLimits` is `google::protobuf::Map` > rather than `Option<google::protobuf::Map>`. So if we change the type of the > parameter `executorLimits` of the `launchExecutor` method to > `Option<google::protobuf::Map>`, its `isSome()` will actually always be true > since a map `executorLimits` will always be passed to it, that means checking > `executorLimits.isSome()` in `launchExecutor` is actually redundant. To make > it not redundant, I may need to change the type of the variable > `executorLimits` from `google::protobuf::Map` to > `Option<google::protobuf::Map>`in the caller's code and define another local > variable of type `google::protobuf::Map` and set `executorLimits` to that > variable when we need to set executor's resource limits, I think it is bit > more complicated than the current code in this patch. > > Another option would be set the default value of the `executorLimits` > parameter to an empty map (i.e. `{}`), like: > ``` > const google::protobuf::Map<string, Value::Scalar>& executorLimits = {}, > ``` > Does it help? > > Qian Zhang wrote: > The reason that I did not set the default value of the `executorLimits` > parameter to `{}` is, the variable `executorLimits` in the caller side is > `{}` by default :-)
> To make it not redundant, I may need to change the type of the variable > executorLimits from google::protobuf::Map to Option\<google::protobuf::Map>in > the caller's code and define another local variable of type > google::protobuf::Map and set executorLimits to that variable when we need to > set executor's resource limits Personally, that approach sounds better to me. I might be missing something, but this seems like a classic use case for the `Option` type. - Greg ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/71858/#review219154 ----------------------------------------------------------- On Jan. 8, 2020, 2:40 a.m., Qian Zhang wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/71858/ > ----------------------------------------------------------- > > (Updated Jan. 8, 2020, 2:40 a.m.) > > > Review request for mesos, Andrei Budnik and Greg Mann. > > > Bugs: MESOS-10046 > https://issues.apache.org/jira/browse/MESOS-10046 > > > Repository: mesos > > > Description > ------- > > WIP: Set resource limits when launching executor container. > > > Diffs > ----- > > src/slave/slave.hpp 77b5bc0082c6bb73fbd48a2ebe812629921645cb > src/slave/slave.cpp 3839a120446339fea8aa857f431a2dba28ed4002 > > > Diff: https://reviews.apache.org/r/71858/diff/6/ > > > Testing > ------- > > > Thanks, > > Qian Zhang > >