> On June 2, 2017, 4:37 p.m., Jie Yu wrote: > > src/slave/slave.cpp > > Line 5147 (original), 5147 (patched) > > <https://reviews.apache.org/r/59746/diff/1/?file=1740554#file1740554line5147> > > > > Can you explain to me in what scenario, the `future` will be in > > DISCARDED state? who discard the promise associated with this future? > > Alexander Rukletsov wrote: > Sure. Consider docker containerizer. > > 1) During container launch, docker containerizer calls `pull()`: > https://github.com/apache/mesos/blob/9e61b3c7af35a29664361067c0bfa8b460bfefb9/src/slave/containerizer/docker.cpp#L1238 > 2) The container enters `PULLING` state: > https://github.com/apache/mesos/blob/9e61b3c7af35a29664361067c0bfa8b460bfefb9/src/slave/containerizer/docker.cpp#L435 > 3) While the image is being pulled by docker, future > `containers_[containerId]->pull` is returned from `pull()`: > https://github.com/apache/mesos/blob/9e61b3c7af35a29664361067c0bfa8b460bfefb9/src/slave/containerizer/docker.cpp#L446 > 4) This future is part of the `.then` chain returned from `_launch()`: > https://github.com/apache/mesos/blob/9e61b3c7af35a29664361067c0bfa8b460bfefb9/src/slave/containerizer/docker.cpp#L1269 > 5) Now while docker is pulling, `destroy()` is called, which discards the > "pulling future": > https://github.com/apache/mesos/blob/9e61b3c7af35a29664361067c0bfa8b460bfefb9/src/slave/containerizer/docker.cpp#L2126-L2128 > 6) But discarding that future is propagated up the chain: > https://github.com/apache/mesos/blob/9e61b3c7af35a29664361067c0bfa8b460bfefb9/3rdparty/libprocess/include/process/future.hpp#L1410-L1411 > 7) Which triggers the `onAny` callback attached to launch: > https://github.com/apache/mesos/blob/9e61b3c7af35a29664361067c0bfa8b460bfefb9/src/slave/slave.cpp#L2800-L2810 > 8) Which in turn gives us discarded future treated as launch error: > https://github.com/apache/mesos/blob/9e61b3c7af35a29664361067c0bfa8b460bfefb9/src/slave/slave.cpp#L5147-L5152
https://github.com/apache/mesos/blob/9e61b3c7af35a29664361067c0bfa8b460bfefb9/src/slave/containerizer/docker.cpp#L2126-L2128 This discards the future, but not necessarily transition the future to DISCARDED state. That's the reason we have `hasDiscard` and `isDiscarded` methods for Future becaue they means different things. Can you point to me where the promise associated with this future is actually being transitioned into DISCARDED state? - Jie ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/59746/#review176789 ----------------------------------------------------------- On June 2, 2017, 1:10 p.m., Alexander Rukletsov wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/59746/ > ----------------------------------------------------------- > > (Updated June 2, 2017, 1:10 p.m.) > > > Review request for mesos, Ian Downes, Jie Yu, Joseph Wu, and Jan Schlicht. > > > Bugs: MESOS-7601 > https://issues.apache.org/jira/browse/MESOS-7601 > > > Repository: mesos > > > Description > ------- > > Discarded future returned from the containerizer->launch() does not > necessarily mean that the container launch has failed. For example, > a framework may stop while its task are being started. > > > Diffs > ----- > > include/mesos/mesos.proto 5f80170fcd3c05add8b6e9e3107cff062818c1dc > include/mesos/v1/mesos.proto 4b528751006f709f841e44f48c9f5c2dc035b402 > src/slave/slave.cpp 0c7e5f4ef905b3897d341c3147a208fc7a8a12e0 > > > Diff: https://reviews.apache.org/r/59746/diff/1/ > > > Testing > ------- > > make check on several Linux distros. > > > Thanks, > > Alexander Rukletsov > >
