You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by id...@apache.org on 2015/06/02 00:04:18 UTC
mesos git commit: Add container rootfs to Isolator::prepare().
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 <id...@twitter.com>
Authored: Thu May 7 14:28:46 2015 -0700
Committer: Ian Downes <id...@twitter.com>
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