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,