Repository: mesos Updated Branches: refs/heads/master c8598f7f5 -> aca54a479
Fix OsTest.killtreeNoRoot check for reparenting. Reparenting does not always assign to pid 1 (/sbin/init). If there is a user init such as init --user with some other pid, this will be the new parent. Modify os_tests to check that the subtree has been reparented to a process different from its original parent (a.k.a. child) and that it is not a zombie. Review: https://reviews.apache.org/r/27461 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/aca54a47 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/aca54a47 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/aca54a47 Branch: refs/heads/master Commit: aca54a4799882812b80ed3d0ff822f52d2833555 Parents: c8598f7 Author: Joris Van Remoortere <[email protected]> Authored: Tue Nov 4 12:05:13 2014 -0800 Committer: Ian Downes <[email protected]> Committed: Tue Nov 4 12:05:13 2014 -0800 ---------------------------------------------------------------------- .../libprocess/3rdparty/stout/tests/os_tests.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/aca54a47/3rdparty/libprocess/3rdparty/stout/tests/os_tests.cpp ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/3rdparty/stout/tests/os_tests.cpp b/3rdparty/libprocess/3rdparty/stout/tests/os_tests.cpp index 3f39017..3033b7d 100644 --- a/3rdparty/libprocess/3rdparty/stout/tests/os_tests.cpp +++ b/3rdparty/libprocess/3rdparty/stout/tests/os_tests.cpp @@ -646,9 +646,9 @@ TEST_F(OsTest, killtreeNoRoot) // \-+- grandchild sleep 100 // \-+- great grandchild sleep 100 // - // And gets reparented to init when we reap the child: + // And gets reparented when we reap the child: // - // -+- init (pid 1) + // -+- new parent // \-+- grandchild sleep 100 // \-+- great grandchild sleep 100 @@ -687,10 +687,21 @@ TEST_F(OsTest, killtreeNoRoot) ASSERT_TRUE(os::exists(grandchild)); ASSERT_TRUE(os::exists(greatGrandchild)); - // Check the subtree has been reparented by init. + // Check the subtree has been reparented: the parent is no longer + // child (the root of the tree), and that the process is not a + // zombie. This is done because some systems run a secondary init + // process for the user (init --user) that does not have pid 1, + // meaning we can't just check that the parent pid == 1. Result<os::Process> _grandchild = os::process(grandchild); ASSERT_SOME(_grandchild); - ASSERT_EQ(1, _grandchild.get().parent); + ASSERT_NE(child, _grandchild.get().parent); + ASSERT_FALSE(_grandchild.get().zombie); + + // Check that grandchild's parent is also not a zombie. + Result<os::Process> currentParent = os::process(_grandchild.get().parent); + ASSERT_SOME(currentParent); + ASSERT_FALSE(currentParent.get().zombie); + // Kill the process tree. Even though the root process has exited, // we specify to follow sessions and groups which should kill the
