You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mesos.apache.org by Ian Downes <ia...@gmail.com> on 2014/04/17 00:11:38 UTC
Review Request 20429: Improve Launcher::recover() to wait for all pids to be
reaped.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/20429/
-----------------------------------------------------------
Review request for mesos, Ben Mahler, Jie Yu, and Vinod Kone.
Repository: mesos-git
Description
-------
A process that is killed will move out of a cgroup, so cgroups::destroy will see the cgroup as empty and complete, but the process may not have been reaped. This patch ensures that all processes are reaped before the launcher declares a container destroyed.
Diffs
-----
src/slave/containerizer/cgroups_launcher.hpp db61107141f60dd13cfa13278a7daab16f0d108c
src/slave/containerizer/cgroups_launcher.cpp 39f0e4c3baaed3403da160ba63dada4a53d9af09
src/slave/containerizer/launcher.hpp dee526f254d56a7a974a70522cd0ca059814fb6d
src/slave/containerizer/launcher.cpp c83327b2f13f0511c8e4e0e9902bc6a1e1328283
src/slave/containerizer/mesos_containerizer.hpp ee1fd3010b4a178a6abcbd813af5eba4d564be00
src/slave/containerizer/mesos_containerizer.cpp 1ce41d71eb13582b46d240d48f0508bdc3e7ef10
Diff: https://reviews.apache.org/r/20429/diff/
Testing
-------
make check # Linux
Thanks,
Ian Downes
Re: Review Request 20429: Improve Launcher::recover() to wait for all pids
to be reaped.
Posted by Chi Zhang <ch...@gmail.com>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/20429/#review40674
-----------------------------------------------------------
src/slave/containerizer/cgroups_launcher.cpp
<https://reviews.apache.org/r/20429/#comment73732>
2 lambda::bind's on this line?
- Chi Zhang
On April 16, 2014, 10:11 p.m., Ian Downes wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/20429/
> -----------------------------------------------------------
>
> (Updated April 16, 2014, 10:11 p.m.)
>
>
> Review request for mesos, Ben Mahler, Jie Yu, and Vinod Kone.
>
>
> Repository: mesos-git
>
>
> Description
> -------
>
> A process that is killed will move out of a cgroup, so cgroups::destroy will see the cgroup as empty and complete, but the process may not have been reaped. This patch ensures that all processes are reaped before the launcher declares a container destroyed.
>
>
> Diffs
> -----
>
> src/slave/containerizer/cgroups_launcher.hpp db61107141f60dd13cfa13278a7daab16f0d108c
> src/slave/containerizer/cgroups_launcher.cpp 39f0e4c3baaed3403da160ba63dada4a53d9af09
> src/slave/containerizer/launcher.hpp dee526f254d56a7a974a70522cd0ca059814fb6d
> src/slave/containerizer/launcher.cpp c83327b2f13f0511c8e4e0e9902bc6a1e1328283
> src/slave/containerizer/mesos_containerizer.hpp ee1fd3010b4a178a6abcbd813af5eba4d564be00
> src/slave/containerizer/mesos_containerizer.cpp 1ce41d71eb13582b46d240d48f0508bdc3e7ef10
>
> Diff: https://reviews.apache.org/r/20429/diff/
>
>
> Testing
> -------
>
> make check # Linux
>
>
> Thanks,
>
> Ian Downes
>
>
Re: Review Request 20429: Improve Launcher::recover() to wait for all pids
to be reaped.
Posted by Vinod Kone <vi...@gmail.com>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/20429/#review40969
-----------------------------------------------------------
src/slave/containerizer/cgroups_launcher.cpp
<https://reviews.apache.org/r/20429/#comment74292>
properly align " for container"
src/slave/containerizer/cgroups_launcher.cpp
<https://reviews.apache.org/r/20429/#comment74304>
How about something like this?
// pseudo code.
foreach (orphan, orphans) {
Future<bool> future = cgroups::freeze(orphan)
.then(&CgroupsLauncher::reap, ...)
.then(cgroups::destroy, ...)
futures.push_back(future);
}
collect(futures)
.onAny(_recover, ....)
Where CgroupsLauncher::reap() does a snapshot of processes and collects the future of the reaps.
Alternatively, you can stick the reaping into cgroups::destroy which will simplify this code quite a bit and also could be taken advantage of by our test teardown methods.
src/slave/containerizer/cgroups_launcher.cpp
<https://reviews.apache.org/r/20429/#comment74295>
Hmm. What happens if a process forks after we take a snapshot? How about taking a snapshot after you call cgroups::freeze?
src/slave/containerizer/cgroups_launcher.cpp
<https://reviews.apache.org/r/20429/#comment74293>
properly align "processes.error()"
src/slave/containerizer/cgroups_launcher.cpp
<https://reviews.apache.org/r/20429/#comment74300>
Why 5s timeout? What if it takes longer?
Also, why .then instead of .any?
src/slave/containerizer/mesos_containerizer.cpp
<https://reviews.apache.org/r/20429/#comment74305>
What happens if launcher's recover fails?
- Vinod Kone
On April 16, 2014, 10:11 p.m., Ian Downes wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/20429/
> -----------------------------------------------------------
>
> (Updated April 16, 2014, 10:11 p.m.)
>
>
> Review request for mesos, Ben Mahler, Jie Yu, and Vinod Kone.
>
>
> Repository: mesos-git
>
>
> Description
> -------
>
> A process that is killed will move out of a cgroup, so cgroups::destroy will see the cgroup as empty and complete, but the process may not have been reaped. This patch ensures that all processes are reaped before the launcher declares a container destroyed.
>
>
> Diffs
> -----
>
> src/slave/containerizer/cgroups_launcher.hpp db61107141f60dd13cfa13278a7daab16f0d108c
> src/slave/containerizer/cgroups_launcher.cpp 39f0e4c3baaed3403da160ba63dada4a53d9af09
> src/slave/containerizer/launcher.hpp dee526f254d56a7a974a70522cd0ca059814fb6d
> src/slave/containerizer/launcher.cpp c83327b2f13f0511c8e4e0e9902bc6a1e1328283
> src/slave/containerizer/mesos_containerizer.hpp ee1fd3010b4a178a6abcbd813af5eba4d564be00
> src/slave/containerizer/mesos_containerizer.cpp 1ce41d71eb13582b46d240d48f0508bdc3e7ef10
>
> Diff: https://reviews.apache.org/r/20429/diff/
>
>
> Testing
> -------
>
> make check # Linux
>
>
> Thanks,
>
> Ian Downes
>
>
Re: Review Request 20429: Improve Launcher::recover() to wait for all pids
to be reaped.
Posted by Mesos ReviewBot <de...@mesos.apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/20429/#review40702
-----------------------------------------------------------
Bad patch!
Reviews applied: [20429]
Failed command: make -j3 distcheck GTEST_FILTER='' >/dev/null
Error:
configure: WARNING: can not find python-boto
-------------------------------------------------------------------
mesos-ec2 services will not function.
-------------------------------------------------------------------
ev.c:1531:31: warning: 'ev_default_loop_ptr' initialized and declared 'extern' [enabled by default]
ev.c: In function 'evpipe_write':
ev.c:2160:17: warning: ignoring return value of 'write', declared with attribute warn_unused_result [-Wunused-result]
ev.c:2172:17: warning: ignoring return value of 'write', declared with attribute warn_unused_result [-Wunused-result]
ev.c: In function 'pipecb':
ev.c:2193:16: warning: ignoring return value of 'read', declared with attribute warn_unused_result [-Wunused-result]
ev.c:2207:16: warning: ignoring return value of 'read', declared with attribute warn_unused_result [-Wunused-result]
In file included from /usr/include/c++/4.6/ext/hash_set:61:0,
from src/glog/stl_logging.h:54,
from src/stl_logging_unittest.cc:34:
/usr/include/c++/4.6/backward/backward_warning.h:33:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. [-Wcpp]
In file included from src/utilities.h:73:0,
from src/googletest.h:38,
from src/stl_logging_unittest.cc:48:
src/base/mutex.h:137:0: warning: "_XOPEN_SOURCE" redefined [enabled by default]
/usr/include/features.h:166:0: note: this is the location of the previous definition
warning: no files found matching 'Makefile' under directory 'docs'
warning: no files found matching 'indexsidebar.html' under directory 'docs'
ar: creating libleveldb.a
../../src/slave/containerizer/cgroups_launcher.cpp: In member function 'virtual process::Future<Nothing> mesos::internal::slave::CgroupsLauncher::recover(const std::list<mesos::internal::slave::state::RunState, std::allocator<mesos::internal::slave::state::RunState> >&)':
../../src/slave/containerizer/cgroups_launcher.cpp:144:50: error: no matching function for call to 'collect(std::list<process::Future<Option<int> > >&, process::Timeout)'
../../src/slave/containerizer/cgroups_launcher.cpp:144:50: note: candidate is:
../../3rdparty/libprocess/include/process/collect.hpp:181:30: note: template<class T> process::Future<std::list<T> > process::collect(const std::list<process::Future<T> >&)
../../src/slave/containerizer/cgroups_launcher.cpp: In member function 'virtual process::Future<Nothing> mesos::internal::slave::CgroupsLauncher::destroy(const mesos::ContainerID&)':
../../src/slave/containerizer/cgroups_launcher.cpp:276:48: error: no matching function for call to 'process::Future<Option<int> >::then(std::tr1::_Bind<std::tr1::_Bind<process::Future<Nothing> (*())()>()>)'
../../src/slave/containerizer/cgroups_launcher.cpp:276:48: note: candidates are:
../../3rdparty/libprocess/include/process/future.hpp:313:13: note: template<class X> process::Future<X> process::Future::then(const std::tr1::function<process::Future<X>(const T&)>&) const [with X = X, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:316:13: note: template<class X> process::Future<X> process::Future::then(const std::tr1::function<X(const T&)>&) const [with X = X, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:319:13: note: template<class X> process::Future<X> process::Future::then(const std::tr1::function<process::Future<X>()>&) const [with X = X, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:325:13: note: template<class X> process::Future<X> process::Future::then(const std::tr1::function<X()>&) const [with X = X, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:370:13: note: template<class X> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*())()>&) const [with X = X, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:386:1: note: template<class X, class P0, class A0> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*(A0))(P0)>&) const [with X = X, P0 = P0, A0 = A0, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:386:1: note: template<class X, class P0, class P1, class A0, class A1> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*(A0, A1))(P0, P1)>&) const [with X = X, P0 = P0, P1 = P1, A0 = A0, A1 = A1, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:386:1: note: template<class X, class P0, class P1, class P2, class A0, class A1, class A2> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*(A0, A1, A2))(P0, P1, P2)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, A0 = A0, A1 = A1, A2 = A2, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:386:1: note: template<class X, class P0, class P1, class P2, class P3, class A0, class A1, class A2, class A3> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*(A0, A1, A2, A3))(P0, P1, P2, P3)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, A0 = A0, A1 = A1, A2 = A2, A3 = A3, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:386:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class A0, class A1, class A2, class A3, class A4> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*(A0, A1, A2, A3, A4))(P0, P1, P2, P3, P4)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:386:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class P5, class A0, class A1, class A2, class A3, class A4, class A5> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*(A0, A1, A2, A3, A4, A5))(P0, P1, P2, P3, P4, P5)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:386:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class A0, class A1, class A2, class A3, class A4, class A5, class A6> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*(A0, A1, A2, A3, A4, A5, A6))(P0, P1, P2, P3, P4, P5, P6)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:386:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*(A0, A1, A2, A3, A4, A5, A6, A7))(P0, P1, P2, P3, P4, P5, P6, P7)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:386:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*(A0, A1, A2, A3, A4, A5, A6, A7, A8))(P0, P1, P2, P3, P4, P5, P6, P7, P8)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, P8 = P8, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, A8 = A8, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:386:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> process::Future<X> process::Future::then(const std::tr1::_Bind<X (*(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9))(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, P8 = P8, P9 = P9, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, A8 = A8, A9 = A9, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:390:13: note: template<class X> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*())()>&) const [with X = X, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:406:1: note: template<class X, class P0, class A0> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*(A0))(P0)>&) const [with X = X, P0 = P0, A0 = A0, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:406:1: note: template<class X, class P0, class P1, class A0, class A1> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*(A0, A1))(P0, P1)>&) const [with X = X, P0 = P0, P1 = P1, A0 = A0, A1 = A1, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:406:1: note: template<class X, class P0, class P1, class P2, class A0, class A1, class A2> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*(A0, A1, A2))(P0, P1, P2)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, A0 = A0, A1 = A1, A2 = A2, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:406:1: note: template<class X, class P0, class P1, class P2, class P3, class A0, class A1, class A2, class A3> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*(A0, A1, A2, A3))(P0, P1, P2, P3)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, A0 = A0, A1 = A1, A2 = A2, A3 = A3, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:406:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class A0, class A1, class A2, class A3, class A4> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*(A0, A1, A2, A3, A4))(P0, P1, P2, P3, P4)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:406:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class P5, class A0, class A1, class A2, class A3, class A4, class A5> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*(A0, A1, A2, A3, A4, A5))(P0, P1, P2, P3, P4, P5)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:406:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class A0, class A1, class A2, class A3, class A4, class A5, class A6> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*(A0, A1, A2, A3, A4, A5, A6))(P0, P1, P2, P3, P4, P5, P6)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:406:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*(A0, A1, A2, A3, A4, A5, A6, A7))(P0, P1, P2, P3, P4, P5, P6, P7)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:406:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*(A0, A1, A2, A3, A4, A5, A6, A7, A8))(P0, P1, P2, P3, P4, P5, P6, P7, P8)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, P8 = P8, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, A8 = A8, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:406:1: note: template<class X, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> process::Future<X> process::Future::then(const std::tr1::_Bind<process::Future<X> (*(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9))(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9)>&) const [with X = X, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, P8 = P8, P9 = P9, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, A8 = A8, A9 = A9, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:411:13: note: template<class X, class U> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)()))(const process::PID<U>&, X (U::*)())>&) const [with X = X, U = U, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:433:1: note: template<class X, class U, class P0, class A0> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)(P0), A0))(const process::PID<U>&, X (U::*)(P0), P0)>&) const [with X = X, U = U, P0 = P0, A0 = A0, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:433:1: note: template<class X, class U, class P0, class P1, class A0, class A1> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)(P0, P1), A0, A1))(const process::PID<U>&, X (U::*)(P0, P1), P0, P1)>&) const [with X = X, U = U, P0 = P0, P1 = P1, A0 = A0, A1 = A1, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:433:1: note: template<class X, class U, class P0, class P1, class P2, class A0, class A1, class A2> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)(P0, P1, P2), A0, A1, A2))(const process::PID<U>&, X (U::*)(P0, P1, P2), P0, P1, P2)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, A0 = A0, A1 = A1, A2 = A2, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:433:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class A0, class A1, class A2, class A3> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)(P0, P1, P2, P3), A0, A1, A2, A3))(const process::PID<U>&, X (U::*)(P0, P1, P2, P3), P0, P1, P2, P3)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, A0 = A0, A1 = A1, A2 = A2, A3 = A3, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:433:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class A0, class A1, class A2, class A3, class A4> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)(P0, P1, P2, P3, P4), A0, A1, A2, A3, A4))(const process::PID<U>&, X (U::*)(P0, P1, P2, P3, P4), P0, P1, P2, P3, P4)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:433:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class P5, class A0, class A1, class A2, class A3, class A4, class A5> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)(P0, P1, P2, P3, P4, P5), A0, A1, A2, A3, A4, A5))(const process::PID<U>&, X (U::*)(P0, P1, P2, P3, P4, P5), P0, P1, P2, P3, P4, P5)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:433:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class A0, class A1, class A2, class A3, class A4, class A5, class A6> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)(P0, P1, P2, P3, P4, P5, P6), A0, A1, A2, A3, A4, A5, A6))(const process::PID<U>&, X (U::*)(P0, P1, P2, P3, P4, P5, P6), P0, P1, P2, P3, P4, P5, P6)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:433:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)(P0, P1, P2, P3, P4, P5, P6, P7), A0, A1, A2, A3, A4, A5, A6, A7))(const process::PID<U>&, X (U::*)(P0, P1, P2, P3, P4, P5, P6, P7), P0, P1, P2, P3, P4, P5, P6, P7)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:433:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)(P0, P1, P2, P3, P4, P5, P6, P7, P8), A0, A1, A2, A3, A4, A5, A6, A7, A8))(const process::PID<U>&, X (U::*)(P0, P1, P2, P3, P4, P5, P6, P7, P8), P0, P1, P2, P3, P4, P5, P6, P7, P8)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, P8 = P8, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, A8 = A8, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:433:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, X (U::*)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9), A0, A1, A2, A3, A4, A5, A6, A7, A8, A9))(const process::PID<U>&, X (U::*)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9), P0, P1, P2, P3, P4, P5, P6, P7, P8, P9)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, P8 = P8, P9 = P9, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, A8 = A8, A9 = A9, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:437:13: note: template<class X, class U> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)()))(const process::PID<U>&, process::Future<X> (U::*)())>&) const [with X = X, U = U, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:459:1: note: template<class X, class U, class P0, class A0> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)(P0), A0))(const process::PID<U>&, process::Future<X> (U::*)(P0), P0)>&) const [with X = X, U = U, P0 = P0, A0 = A0, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:459:1: note: template<class X, class U, class P0, class P1, class A0, class A1> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)(P0, P1), A0, A1))(const process::PID<U>&, process::Future<X> (U::*)(P0, P1), P0, P1)>&) const [with X = X, U = U, P0 = P0, P1 = P1, A0 = A0, A1 = A1, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:459:1: note: template<class X, class U, class P0, class P1, class P2, class A0, class A1, class A2> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)(P0, P1, P2), A0, A1, A2))(const process::PID<U>&, process::Future<X> (U::*)(P0, P1, P2), P0, P1, P2)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, A0 = A0, A1 = A1, A2 = A2, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:459:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class A0, class A1, class A2, class A3> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)(P0, P1, P2, P3), A0, A1, A2, A3))(const process::PID<U>&, process::Future<X> (U::*)(P0, P1, P2, P3), P0, P1, P2, P3)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, A0 = A0, A1 = A1, A2 = A2, A3 = A3, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:459:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class A0, class A1, class A2, class A3, class A4> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)(P0, P1, P2, P3, P4), A0, A1, A2, A3, A4))(const process::PID<U>&, process::Future<X> (U::*)(P0, P1, P2, P3, P4), P0, P1, P2, P3, P4)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:459:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class P5, class A0, class A1, class A2, class A3, class A4, class A5> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)(P0, P1, P2, P3, P4, P5), A0, A1, A2, A3, A4, A5))(const process::PID<U>&, process::Future<X> (U::*)(P0, P1, P2, P3, P4, P5), P0, P1, P2, P3, P4, P5)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:459:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class A0, class A1, class A2, class A3, class A4, class A5, class A6> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)(P0, P1, P2, P3, P4, P5, P6), A0, A1, A2, A3, A4, A5, A6))(const process::PID<U>&, process::Future<X> (U::*)(P0, P1, P2, P3, P4, P5, P6), P0, P1, P2, P3, P4, P5, P6)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:459:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)(P0, P1, P2, P3, P4, P5, P6, P7), A0, A1, A2, A3, A4, A5, A6, A7))(const process::PID<U>&, process::Future<X> (U::*)(P0, P1, P2, P3, P4, P5, P6, P7), P0, P1, P2, P3, P4, P5, P6, P7)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:459:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)(P0, P1, P2, P3, P4, P5, P6, P7, P8), A0, A1, A2, A3, A4, A5, A6, A7, A8))(const process::PID<U>&, process::Future<X> (U::*)(P0, P1, P2, P3, P4, P5, P6, P7, P8), P0, P1, P2, P3, P4, P5, P6, P7, P8)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, P8 = P8, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, A8 = A8, T = Option<int>]
../../3rdparty/libprocess/include/process/future.hpp:459:1: note: template<class X, class U, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class A0, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> process::Future<X> process::Future::then(const process::_Defer<process::Future<X> (*(process::PID<U>, process::Future<X> (U::*)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9), A0, A1, A2, A3, A4, A5, A6, A7, A8, A9))(const process::PID<U>&, process::Future<X> (U::*)(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9), P0, P1, P2, P3, P4, P5, P6, P7, P8, P9)>&) const [with X = X, U = U, P0 = P0, P1 = P1, P2 = P2, P3 = P3, P4 = P4, P5 = P5, P6 = P6, P7 = P7, P8 = P8, P9 = P9, A0 = A0, A1 = A1, A2 = A2, A3 = A3, A4 = A4, A5 = A5, A6 = A6, A7 = A7, A8 = A8, A9 = A9, T = Option<int>]
../../src/slave/containerizer/cgroups_launcher.cpp:277:1: error: control reaches end of non-void function [-Werror=return-type]
../../src/slave/containerizer/cgroups_launcher.cpp: In member function 'virtual process::Future<Nothing> mesos::internal::slave::CgroupsLauncher::recover(const std::list<mesos::internal::slave::state::RunState, std::allocator<mesos::internal::slave::state::RunState> >&)':
../../src/slave/containerizer/cgroups_launcher.cpp:146:1: error: control reaches end of non-void function [-Werror=return-type]
cc1plus: all warnings being treated as errors
make[3]: *** [slave/containerizer/libmesos_no_3rdparty_la-cgroups_launcher.lo] Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [distcheck] Error 1
- Mesos ReviewBot
On April 16, 2014, 10:11 p.m., Ian Downes wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/20429/
> -----------------------------------------------------------
>
> (Updated April 16, 2014, 10:11 p.m.)
>
>
> Review request for mesos, Ben Mahler, Jie Yu, and Vinod Kone.
>
>
> Repository: mesos-git
>
>
> Description
> -------
>
> A process that is killed will move out of a cgroup, so cgroups::destroy will see the cgroup as empty and complete, but the process may not have been reaped. This patch ensures that all processes are reaped before the launcher declares a container destroyed.
>
>
> Diffs
> -----
>
> src/slave/containerizer/cgroups_launcher.hpp db61107141f60dd13cfa13278a7daab16f0d108c
> src/slave/containerizer/cgroups_launcher.cpp 39f0e4c3baaed3403da160ba63dada4a53d9af09
> src/slave/containerizer/launcher.hpp dee526f254d56a7a974a70522cd0ca059814fb6d
> src/slave/containerizer/launcher.cpp c83327b2f13f0511c8e4e0e9902bc6a1e1328283
> src/slave/containerizer/mesos_containerizer.hpp ee1fd3010b4a178a6abcbd813af5eba4d564be00
> src/slave/containerizer/mesos_containerizer.cpp 1ce41d71eb13582b46d240d48f0508bdc3e7ef10
>
> Diff: https://reviews.apache.org/r/20429/diff/
>
>
> Testing
> -------
>
> make check # Linux
>
>
> Thanks,
>
> Ian Downes
>
>