Repository: mesos Updated Branches: refs/heads/master 209f8e7fd -> b5ba2b8dd
Added test for nested container agent reboot case. Review: https://reviews.apache.org/r/56809/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/b5ba2b8d Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/b5ba2b8d Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/b5ba2b8d Branch: refs/heads/master Commit: b5ba2b8dd65518a45e847b79b24f48cf5a779353 Parents: 209f8e7 Author: Gilbert Song <[email protected]> Authored: Wed Feb 22 18:48:59 2017 -0800 Committer: Jie Yu <[email protected]> Committed: Wed Feb 22 18:48:59 2017 -0800 ---------------------------------------------------------------------- .../containerizer/provisioner_docker_tests.cpp | 46 ++++++++++++++++++++ 1 file changed, 46 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/b5ba2b8d/src/tests/containerizer/provisioner_docker_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/containerizer/provisioner_docker_tests.cpp b/src/tests/containerizer/provisioner_docker_tests.cpp index ce57c06..01c0682 100644 --- a/src/tests/containerizer/provisioner_docker_tests.cpp +++ b/src/tests/containerizer/provisioner_docker_tests.cpp @@ -33,6 +33,7 @@ #endif #include "slave/containerizer/mesos/provisioner/constants.hpp" +#include "slave/containerizer/mesos/provisioner/paths.hpp" #include "slave/containerizer/mesos/provisioner/docker/metadata_manager.hpp" #include "slave/containerizer/mesos/provisioner/docker/paths.hpp" @@ -66,6 +67,7 @@ using master::Master; using mesos::internal::slave::AUFS_BACKEND; using mesos::internal::slave::COPY_BACKEND; using mesos::internal::slave::OVERLAY_BACKEND; +using mesos::internal::slave::Provisioner; using mesos::master::detector::MasterDetector; @@ -865,6 +867,50 @@ TEST_F(ProvisionerDockerPullerTest, ROOT_INTERNET_CURL_ImageDigest) driver.join(); } + +// This test simulate the case that after the agent reboots the +// container runtime directory is gone while the provisioner +// directory still survives. The recursive `provisioner::destroy()` +// can make sure that a child container is always cleaned up +// before its parent container. +TEST_F(ProvisionerDockerPullerTest, ROOT_RecoverNestedOnReboot) +{ + const string directory = path::join(os::getcwd(), "archives"); + + Future<Nothing> testImage = DockerArchive::create(directory, "alpine"); + AWAIT_READY(testImage); + + slave::Flags flags = CreateSlaveFlags(); + flags.isolation = "docker/runtime,filesystem/linux"; + flags.image_providers = "docker"; + + Try<Owned<Provisioner>> provisioner = Provisioner::create(flags); + ASSERT_SOME(provisioner); + + ContainerID containerId; + containerId.set_value(UUID::random().toString()); + + ContainerID nestedContainerId; + nestedContainerId.mutable_parent()->CopyFrom(containerId); + nestedContainerId.set_value(UUID::random().toString()); + + Image image; + image.set_type(Image::DOCKER); + image.mutable_docker()->set_name("alpine"); + + AWAIT_READY(provisioner.get()->provision(nestedContainerId, image)); + + // Passing an empty hashset to `provisioner::recover()` to + // simulate the agent reboot scenario. + AWAIT_READY(provisioner.get()->recover({})); + + const string containerDir = slave::provisioner::paths::getContainerDir( + slave::paths::getProvisionerDir(flags.work_dir), + containerId); + + EXPECT_FALSE(os::exists(containerDir)); +} + #endif } // namespace tests {
