You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2016/01/14 23:46:25 UTC
[7/7] mesos git commit: Populated ContainerConfig in
MesosContainerizer.
Populated ContainerConfig in MesosContainerizer.
Review: https://reviews.apache.org/r/41816/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/4f1d08c8
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/4f1d08c8
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/4f1d08c8
Branch: refs/heads/master
Commit: 4f1d08c821e8c04f51280622504477e86ff2dfa8
Parents: d6a5e96
Author: Gilbert Song <so...@gmail.com>
Authored: Thu Jan 14 13:20:54 2016 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Thu Jan 14 14:45:43 2016 -0800
----------------------------------------------------------------------
src/slave/containerizer/mesos/containerizer.cpp | 56 +++++++++++++++++---
src/slave/containerizer/mesos/containerizer.hpp | 7 ++-
2 files changed, 56 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/4f1d08c8/src/slave/containerizer/mesos/containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp
index 4070e6c..c2215fd 100644
--- a/src/slave/containerizer/mesos/containerizer.cpp
+++ b/src/slave/containerizer/mesos/containerizer.cpp
@@ -90,6 +90,7 @@ namespace slave {
using mesos::modules::ModuleManager;
+using mesos::slave::ContainerConfig;
using mesos::slave::ContainerLimitation;
using mesos::slave::ContainerLogger;
using mesos::slave::ContainerPrepareInfo;
@@ -624,7 +625,14 @@ Future<bool> MesosContainerizerProcess::launch(
containers_.put(containerId, Owned<Container>(container));
- return prepare(containerId, executorInfo, directory, user)
+ return provision(containerId, executorInfo)
+ .then(defer(self(),
+ &Self::prepare,
+ containerId,
+ executorInfo,
+ directory,
+ user,
+ lambda::_1))
.then(defer(self(),
&Self::_launch,
containerId,
@@ -638,6 +646,31 @@ Future<bool> MesosContainerizerProcess::launch(
}
+Future<Option<ProvisionInfo>> MesosContainerizerProcess::provision(
+ const ContainerID& containerId,
+ const ExecutorInfo& executorInfo)
+{
+ if (!executorInfo.has_container()) {
+ return None();
+ }
+
+ // Provision the root filesystem if needed.
+ CHECK_EQ(executorInfo.container().type(), ContainerInfo::MESOS);
+
+ if (!executorInfo.container().mesos().has_image()) {
+ return None();
+ }
+
+ const Image& image = executorInfo.container().mesos().image();
+
+ return provisioner->provision(containerId, image)
+ .then([](const ProvisionInfo& provisionInfo)
+ -> Future<Option<ProvisionInfo>> {
+ return provisionInfo;
+ });
+}
+
+
static list<Option<ContainerPrepareInfo>> accumulate(
list<Option<ContainerPrepareInfo>> l,
const Option<ContainerPrepareInfo>& e)
@@ -651,8 +684,7 @@ static Future<list<Option<ContainerPrepareInfo>>> _prepare(
const Owned<Isolator>& isolator,
const ContainerID& containerId,
const ExecutorInfo& executorInfo,
- const string& directory,
- const Option<string>& user,
+ const ContainerConfig& containerConfig,
const list<Option<ContainerPrepareInfo>> prepareInfos)
{
// Propagate any failure.
@@ -665,10 +697,23 @@ Future<list<Option<ContainerPrepareInfo>>> MesosContainerizerProcess::prepare(
const ContainerID& containerId,
const ExecutorInfo& executorInfo,
const string& directory,
- const Option<string>& user)
+ const Option<string>& user,
+ const Option<ProvisionInfo>& provisionInfo)
{
CHECK(containers_.contains(containerId));
+ // Construct ContainerConfig.
+ ContainerConfig containerConfig;
+ containerConfig.set_directory(directory);
+
+ if (user.isSome()) {
+ containerConfig.set_user(user.get());
+ }
+
+ if (provisionInfo.isSome()) {
+ containerConfig.set_rootfs(provisionInfo.get().rootfs);
+ }
+
// We prepare the isolators sequentially according to their ordering
// to permit basic dependency specification, e.g., preparing a
// filesystem isolator before other isolators.
@@ -681,8 +726,7 @@ Future<list<Option<ContainerPrepareInfo>>> MesosContainerizerProcess::prepare(
isolator,
containerId,
executorInfo,
- directory,
- user,
+ containerConfig,
lambda::_1));
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/4f1d08c8/src/slave/containerizer/mesos/containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.hpp b/src/slave/containerizer/mesos/containerizer.hpp
index 9afe9f7..48bdd4f 100644
--- a/src/slave/containerizer/mesos/containerizer.hpp
+++ b/src/slave/containerizer/mesos/containerizer.hpp
@@ -175,11 +175,16 @@ private:
const std::list<mesos::slave::ContainerState>& recovered,
const hashset<ContainerID>& orphans);
+ process::Future<Option<ProvisionInfo>> provision(
+ const ContainerID& containerId,
+ const ExecutorInfo& executorInfo);
+
process::Future<std::list<Option<mesos::slave::ContainerPrepareInfo>>>
prepare(const ContainerID& containerId,
const ExecutorInfo& executorInfo,
const std::string& directory,
- const Option<std::string>& user);
+ const Option<std::string>& user,
+ const Option<ProvisionInfo>& provisionInfo);
process::Future<Nothing> fetch(
const ContainerID& containerId,