Repository: mesos Updated Branches: refs/heads/master 08f00e786 -> 610d4fffd
Add container rootfs to Isolator::prepare(). Review: https://reviews.apache.org/r/34134 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/610d4fff Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/610d4fff Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/610d4fff Branch: refs/heads/master Commit: 610d4fffd0511d7ddce286ae987264cc5892f76c Parents: 08f00e7 Author: Ian Downes <[email protected]> Authored: Thu May 7 14:28:46 2015 -0700 Committer: Ian Downes <[email protected]> Committed: Mon Jun 1 14:51:27 2015 -0700 ---------------------------------------------------------------------- include/mesos/slave/isolator.hpp | 2 ++ src/slave/containerizer/isolator.cpp | 2 ++ .../containerizer/isolators/cgroups/cpushare.cpp | 1 + .../containerizer/isolators/cgroups/cpushare.hpp | 7 ++++--- src/slave/containerizer/isolators/cgroups/mem.cpp | 1 + src/slave/containerizer/isolators/cgroups/mem.hpp | 3 ++- .../containerizer/isolators/cgroups/perf_event.cpp | 1 + .../containerizer/isolators/cgroups/perf_event.hpp | 5 +++-- .../containerizer/isolators/filesystem/shared.cpp | 1 + .../containerizer/isolators/filesystem/shared.hpp | 1 + .../containerizer/isolators/namespaces/pid.cpp | 1 + .../containerizer/isolators/namespaces/pid.hpp | 1 + src/slave/containerizer/isolators/posix.hpp | 1 + src/slave/containerizer/isolators/posix/disk.cpp | 1 + src/slave/containerizer/isolators/posix/disk.hpp | 1 + src/slave/containerizer/mesos/containerizer.cpp | 4 +++- src/tests/containerizer_tests.cpp | 16 +++++++++------- src/tests/isolator.hpp | 3 ++- src/tests/isolator_tests.cpp | 11 +++++++++++ 19 files changed, 48 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/include/mesos/slave/isolator.hpp ---------------------------------------------------------------------- diff --git a/include/mesos/slave/isolator.hpp b/include/mesos/slave/isolator.hpp index b4fe1ff..18edc03 100644 --- a/include/mesos/slave/isolator.hpp +++ b/include/mesos/slave/isolator.hpp @@ -98,6 +98,7 @@ public: const ContainerID& containerId, const ExecutorInfo& executorInfo, const std::string& directory, + const Option<std::string>& rootfs, const Option<std::string>& user); // Isolate the executor. @@ -144,6 +145,7 @@ public: const ContainerID& containerId, const ExecutorInfo& executorInfo, const std::string& directory, + const Option<std::string>& rootfs, const Option<std::string>& user) = 0; virtual process::Future<Nothing> isolate( http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolator.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolator.cpp b/src/slave/containerizer/isolator.cpp index d99f47e..d51ecc9 100644 --- a/src/slave/containerizer/isolator.cpp +++ b/src/slave/containerizer/isolator.cpp @@ -57,6 +57,7 @@ Future<Option<CommandInfo>> Isolator::prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const string& directory, + const Option<string>& rootfs, const Option<string>& user) { return dispatch(process.get(), @@ -64,6 +65,7 @@ Future<Option<CommandInfo>> Isolator::prepare( containerId, executorInfo, directory, + rootfs, user); } http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/cgroups/cpushare.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/cgroups/cpushare.cpp b/src/slave/containerizer/isolators/cgroups/cpushare.cpp index 214ba23..5bd3525 100644 --- a/src/slave/containerizer/isolators/cgroups/cpushare.cpp +++ b/src/slave/containerizer/isolators/cgroups/cpushare.cpp @@ -255,6 +255,7 @@ Future<Option<CommandInfo>> CgroupsCpushareIsolatorProcess::prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const string& directory, + const Option<string>& rootfs, const Option<string>& user) { if (infos.contains(containerId)) { http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/cgroups/cpushare.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/cgroups/cpushare.hpp b/src/slave/containerizer/isolators/cgroups/cpushare.hpp index 14adf0a..2118c97 100644 --- a/src/slave/containerizer/isolators/cgroups/cpushare.hpp +++ b/src/slave/containerizer/isolators/cgroups/cpushare.hpp @@ -48,10 +48,11 @@ public: const std::list<mesos::slave::ExecutorRunState>& states, const hashset<ContainerID>& orphans); - virtual process::Future<Option<CommandInfo> > prepare( + virtual process::Future<Option<CommandInfo>> prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const std::string& directory, + const Option<std::string>& rootfs, const Option<std::string>& user); virtual process::Future<Nothing> isolate( @@ -77,9 +78,9 @@ private: const hashmap<std::string, std::string>& hierarchies, const std::vector<std::string>& subsystems); - virtual process::Future<std::list<Nothing> > _cleanup( + virtual process::Future<std::list<Nothing>> _cleanup( const ContainerID& containerId, - const process::Future<std::list<Nothing> >& future); + const process::Future<std::list<Nothing>>& future); struct Info { http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/cgroups/mem.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/cgroups/mem.cpp b/src/slave/containerizer/isolators/cgroups/mem.cpp index d3b77d4..9647e79 100644 --- a/src/slave/containerizer/isolators/cgroups/mem.cpp +++ b/src/slave/containerizer/isolators/cgroups/mem.cpp @@ -236,6 +236,7 @@ Future<Option<CommandInfo>> CgroupsMemIsolatorProcess::prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const string& directory, + const Option<string>& rootfs, const Option<string>& user) { if (infos.contains(containerId)) { http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/cgroups/mem.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/cgroups/mem.hpp b/src/slave/containerizer/isolators/cgroups/mem.hpp index c8e1ba1..dc75201 100644 --- a/src/slave/containerizer/isolators/cgroups/mem.hpp +++ b/src/slave/containerizer/isolators/cgroups/mem.hpp @@ -48,10 +48,11 @@ public: const std::list<mesos::slave::ExecutorRunState>& states, const hashset<ContainerID>& orphans); - virtual process::Future<Option<CommandInfo> > prepare( + virtual process::Future<Option<CommandInfo>> prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const std::string& directory, + const Option<std::string>& rootfs, const Option<std::string>& user); virtual process::Future<Nothing> isolate( http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/cgroups/perf_event.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/cgroups/perf_event.cpp b/src/slave/containerizer/isolators/cgroups/perf_event.cpp index 37967b5..3e5153f 100644 --- a/src/slave/containerizer/isolators/cgroups/perf_event.cpp +++ b/src/slave/containerizer/isolators/cgroups/perf_event.cpp @@ -225,6 +225,7 @@ Future<Option<CommandInfo>> CgroupsPerfEventIsolatorProcess::prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const string& directory, + const Option<string>& rootfs, const Option<string>& user) { if (infos.contains(containerId)) { http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/cgroups/perf_event.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/cgroups/perf_event.hpp b/src/slave/containerizer/isolators/cgroups/perf_event.hpp index 6679719..560cd03 100644 --- a/src/slave/containerizer/isolators/cgroups/perf_event.hpp +++ b/src/slave/containerizer/isolators/cgroups/perf_event.hpp @@ -46,10 +46,11 @@ public: const std::list<mesos::slave::ExecutorRunState>& states, const hashset<ContainerID>& orphans); - virtual process::Future<Option<CommandInfo> > prepare( + virtual process::Future<Option<CommandInfo>> prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const std::string& directory, + const Option<std::string>& rootfs, const Option<std::string>& user); virtual process::Future<Nothing> isolate( @@ -81,7 +82,7 @@ private: void _sample( const process::Time& next, - const process::Future<hashmap<std::string, PerfStatistics> >& statistics); + const process::Future<hashmap<std::string, PerfStatistics>>& statistics); virtual process::Future<Nothing> _cleanup(const ContainerID& containerId); http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/filesystem/shared.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/filesystem/shared.cpp b/src/slave/containerizer/isolators/filesystem/shared.cpp index 101d6da..5049306 100644 --- a/src/slave/containerizer/isolators/filesystem/shared.cpp +++ b/src/slave/containerizer/isolators/filesystem/shared.cpp @@ -76,6 +76,7 @@ Future<Option<CommandInfo>> SharedFilesystemIsolatorProcess::prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const string& directory, + const Option<string>& rootfs, const Option<string>& user) { if (executorInfo.has_container() && http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/filesystem/shared.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/filesystem/shared.hpp b/src/slave/containerizer/isolators/filesystem/shared.hpp index 68ed54d..08c6ffe 100644 --- a/src/slave/containerizer/isolators/filesystem/shared.hpp +++ b/src/slave/containerizer/isolators/filesystem/shared.hpp @@ -47,6 +47,7 @@ public: const ContainerID& containerId, const ExecutorInfo& executorInfo, const std::string& directory, + const Option<std::string>& rootfs, const Option<std::string>& user); virtual process::Future<Nothing> isolate( http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/namespaces/pid.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/namespaces/pid.cpp b/src/slave/containerizer/isolators/namespaces/pid.cpp index b426d08..c6b28aa 100644 --- a/src/slave/containerizer/isolators/namespaces/pid.cpp +++ b/src/slave/containerizer/isolators/namespaces/pid.cpp @@ -157,6 +157,7 @@ Future<Option<CommandInfo>> NamespacesPidIsolatorProcess::prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const string& directory, + const Option<string>& rootfs, const Option<string>& user) { list<string> commands; http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/namespaces/pid.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/namespaces/pid.hpp b/src/slave/containerizer/isolators/namespaces/pid.hpp index 187cbe8..6b24e29 100644 --- a/src/slave/containerizer/isolators/namespaces/pid.hpp +++ b/src/slave/containerizer/isolators/namespaces/pid.hpp @@ -64,6 +64,7 @@ public: const ContainerID& containerId, const ExecutorInfo& executorInfo, const std::string& directory, + const Option<std::string>& rootfs, const Option<std::string>& user); virtual process::Future<Nothing> isolate( http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/posix.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/posix.hpp b/src/slave/containerizer/isolators/posix.hpp index 9b43f02..271061e 100644 --- a/src/slave/containerizer/isolators/posix.hpp +++ b/src/slave/containerizer/isolators/posix.hpp @@ -66,6 +66,7 @@ public: const ContainerID& containerId, const ExecutorInfo& executorInfo, const std::string& directory, + const Option<std::string>& rootfs, const Option<std::string>& user) { if (promises.contains(containerId)) { http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/posix/disk.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/posix/disk.cpp b/src/slave/containerizer/isolators/posix/disk.cpp index caf81e8..b2f995c 100644 --- a/src/slave/containerizer/isolators/posix/disk.cpp +++ b/src/slave/containerizer/isolators/posix/disk.cpp @@ -105,6 +105,7 @@ Future<Option<CommandInfo>> PosixDiskIsolatorProcess::prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const string& directory, + const Option<string>& rootfs, const Option<string>& user) { if (infos.contains(containerId)) { http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/isolators/posix/disk.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/isolators/posix/disk.hpp b/src/slave/containerizer/isolators/posix/disk.hpp index f3f79d8..5dfa815 100644 --- a/src/slave/containerizer/isolators/posix/disk.hpp +++ b/src/slave/containerizer/isolators/posix/disk.hpp @@ -85,6 +85,7 @@ public: const ContainerID& containerId, const ExecutorInfo& executorInfo, const std::string& directory, + const Option<std::string>& rootfs, const Option<std::string>& user); virtual process::Future<Nothing> isolate( http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/slave/containerizer/mesos/containerizer.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp index c363605..8c102fb 100644 --- a/src/slave/containerizer/mesos/containerizer.cpp +++ b/src/slave/containerizer/mesos/containerizer.cpp @@ -607,11 +607,12 @@ static Future<list<Option<CommandInfo>>> _prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const string& directory, + const Option<string>& rootfs, const Option<string>& user, const list<Option<CommandInfo>> commands) { // Propagate any failure. - return isolator->prepare(containerId, executorInfo, directory, user) + return isolator->prepare(containerId, executorInfo, directory, rootfs, user) .then(lambda::bind(&accumulate, commands, lambda::_1)); } @@ -636,6 +637,7 @@ Future<list<Option<CommandInfo>>> MesosContainerizerProcess::prepare( containerId, executorInfo, directory, + containers_[containerId]->rootfs, user, lambda::_1)); } http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/tests/containerizer_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/containerizer_tests.cpp b/src/tests/containerizer_tests.cpp index 3c9f958..0cdb2d2 100644 --- a/src/tests/containerizer_tests.cpp +++ b/src/tests/containerizer_tests.cpp @@ -73,9 +73,9 @@ public: // 'prepare' command(s). Try<MesosContainerizer*> CreateContainerizer( Fetcher* fetcher, - const vector<Option<CommandInfo> >& prepares) + const vector<Option<CommandInfo>>& prepares) { - vector<Owned<Isolator> > isolators; + vector<Owned<Isolator>> isolators; foreach (const Option<CommandInfo>& prepare, prepares) { Try<Isolator*> isolator = tests::TestIsolatorProcess::create(prepare); @@ -107,7 +107,7 @@ public: Fetcher* fetcher, const Option<CommandInfo>& prepare) { - vector<Option<CommandInfo> > prepares; + vector<Option<CommandInfo>> prepares; prepares.push_back(prepare); return CreateContainerizer(fetcher, prepares); @@ -218,7 +218,7 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, MultipleScripts) string file1 = path::join(directory, "child.script.executed.1"); string file2 = path::join(directory, "child.script.executed.2"); - vector<Option<CommandInfo> > prepares; + vector<Option<CommandInfo>> prepares; // This isolator prepare command one will succeed if called first, otherwise // it won't get run. prepares.push_back(CREATE_COMMAND_INFO("touch " + file1 + " && exit 0")); @@ -376,7 +376,7 @@ public: EXPECT_CALL(*this, cleanup(_)) .WillRepeatedly(Return(Nothing())); - EXPECT_CALL(*this, prepare(_, _, _, _)) + EXPECT_CALL(*this, prepare(_, _, _, _, _)) .WillRepeatedly(Invoke(this, &MockIsolatorProcess::_prepare)); } @@ -386,18 +386,20 @@ public: const list<mesos::slave::ExecutorRunState>&, const hashset<ContainerID>&)); - MOCK_METHOD4( + MOCK_METHOD5( prepare, process::Future<Option<CommandInfo>>( const ContainerID&, const ExecutorInfo&, const string&, + const Option<string>&, const Option<string>&)); virtual process::Future<Option<CommandInfo>> _prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const string& directory, + const Option<string>& rootfs, const Option<string>& user) { return None(); @@ -501,7 +503,7 @@ TEST_F(MesosContainerizerDestroyTest, DestroyWhilePreparing) Future<Nothing> prepare; Promise<Option<CommandInfo>> promise; // Simulate a long prepare from the isolator. - EXPECT_CALL(*isolatorProcess, prepare(_, _, _, _)) + EXPECT_CALL(*isolatorProcess, prepare(_, _, _, _, _)) .WillOnce(DoAll(FutureSatisfy(&prepare), Return(promise.future()))); http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/tests/isolator.hpp ---------------------------------------------------------------------- diff --git a/src/tests/isolator.hpp b/src/tests/isolator.hpp index 7db13cd..fd6aec7 100644 --- a/src/tests/isolator.hpp +++ b/src/tests/isolator.hpp @@ -45,10 +45,11 @@ public: const std::list<mesos::slave::ExecutorRunState>&, const hashset<ContainerID>&)); - virtual process::Future<Option<CommandInfo> > prepare( + virtual process::Future<Option<CommandInfo>> prepare( const ContainerID& containerId, const ExecutorInfo& executorInfo, const std::string& directory, + const Option<std::string>& rootfs, const Option<std::string>& user) { return commandInfo; http://git-wip-us.apache.org/repos/asf/mesos/blob/610d4fff/src/tests/isolator_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/isolator_tests.cpp b/src/tests/isolator_tests.cpp index acb1404..c635a4d 100644 --- a/src/tests/isolator_tests.cpp +++ b/src/tests/isolator_tests.cpp @@ -172,6 +172,7 @@ TYPED_TEST(CpuIsolatorTest, UserCpuUsage) containerId, executorInfo, dir.get(), + None(), None())); const string& file = path::join(dir.get(), "mesos_isolator_test_ready"); @@ -281,6 +282,7 @@ TYPED_TEST(CpuIsolatorTest, SystemCpuUsage) containerId, executorInfo, dir.get(), + None(), None())); const string& file = path::join(dir.get(), "mesos_isolator_test_ready"); @@ -392,6 +394,7 @@ TEST_F(RevocableCpuIsolatorTest, ROOT_CGROUPS_RevocableCpu) containerId, executorInfo, os::getcwd(), + None(), None())); vector<string> argv{"sleep", "100"}; @@ -463,6 +466,7 @@ TEST_F(LimitedCpuIsolatorTest, ROOT_CGROUPS_Cfs) containerId, executorInfo, dir.get(), + None(), None())); // Generate random numbers to max out a single core. We'll run this for 0.5 @@ -573,6 +577,7 @@ TEST_F(LimitedCpuIsolatorTest, ROOT_CGROUPS_Cfs_Big_Quota) containerId, executorInfo, dir.get(), + None(), None())); int pipes[2]; @@ -655,6 +660,7 @@ TEST_F(LimitedCpuIsolatorTest, ROOT_CGROUPS_Pids_and_Tids) containerId, executorInfo, dir.get(), + None(), None())); // Right after the creation of the cgroup, which happens in @@ -778,6 +784,7 @@ TYPED_TEST(MemIsolatorTest, MemUsage) containerId, executorInfo, dir.get(), + None(), None())); MemoryTestHelper helper; @@ -840,6 +847,7 @@ TEST_F(PerfEventIsolatorTest, ROOT_CGROUPS_Sample) containerId, executorInfo, dir.get(), + None(), None())); // This first sample is likely to be empty because perf hasn't @@ -931,6 +939,7 @@ TEST_F(SharedFilesystemIsolatorTest, ROOT_RelativeVolume) containerId, executorInfo, flags.work_dir, + None(), None()); AWAIT_READY(prepare); @@ -1028,6 +1037,7 @@ TEST_F(SharedFilesystemIsolatorTest, ROOT_AbsoluteVolume) containerId, executorInfo, flags.work_dir, + None(), None()); AWAIT_READY(prepare); @@ -1195,6 +1205,7 @@ TYPED_TEST(UserCgroupIsolatorTest, ROOT_CGROUPS_UserCgroup) containerId, executorInfo, os::getcwd(), + None(), UNPRIVILEGED_USERNAME)); // Isolators don't provide a way to determine the cgroups they use
