You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by jo...@apache.org on 2017/05/26 01:41:00 UTC

[09/16] mesos git commit: Combined launch paths in ComposingContainerizer.

Combined launch paths in ComposingContainerizer.

This eliminates one of the entrypoints for launching a container
in the `ComposingContainerizer`.  Nested and non-nested containers
are still launched the same way, where nested containers get launched
using their root container's containerizer.

Review: https://reviews.apache.org/r/58904


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/70150975
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/70150975
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/70150975

Branch: refs/heads/master
Commit: 7015097559189b4497d3888d53f2f4ad825f2ea8
Parents: 17ffb97
Author: Joseph Wu <jo...@apache.org>
Authored: Mon Apr 10 18:17:27 2017 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Thu May 25 18:37:07 2017 -0700

----------------------------------------------------------------------
 src/slave/containerizer/composing.cpp | 179 ++++++++---------------------
 src/slave/containerizer/composing.hpp |  19 +--
 2 files changed, 55 insertions(+), 143 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/70150975/src/slave/containerizer/composing.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/composing.cpp b/src/slave/containerizer/composing.cpp
index 0b6c76b..c6b6ddf 100644
--- a/src/slave/containerizer/composing.cpp
+++ b/src/slave/containerizer/composing.cpp
@@ -43,6 +43,7 @@ using std::string;
 using std::vector;
 
 using mesos::slave::ContainerClass;
+using mesos::slave::ContainerConfig;
 using mesos::slave::ContainerTermination;
 
 namespace mesos {
@@ -66,21 +67,9 @@ public:
 
   Future<bool> launch(
       const ContainerID& containerId,
-      const Option<TaskInfo>& taskInfo,
-      const ExecutorInfo& executorInfo,
-      const string& directory,
-      const Option<string>& user,
-      const SlaveID& slaveId,
+      const ContainerConfig& config,
       const map<string, string>& environment,
-      bool checkpoint);
-
-  Future<bool> launch(
-      const ContainerID& containerId,
-      const CommandInfo& commandInfo,
-      const Option<ContainerInfo>& containerInfo,
-      const Option<string>& user,
-      const SlaveID& slaveId,
-      const Option<ContainerClass>& containerClass);
+      const Option<std::string>& pidCheckpointPath);
 
   Future<http::Connection> attach(
       const ContainerID& containerId);
@@ -114,16 +103,13 @@ private:
 
   Future<bool> _launch(
       const ContainerID& containerId,
-      const Option<TaskInfo>& taskInfo,
-      const ExecutorInfo& executorInfo,
-      const string& directory,
-      const Option<string>& user,
-      const SlaveID& slaveId,
+      const ContainerConfig& config,
       const map<string, string>& environment,
-      bool checkpoint,
+      const Option<std::string>& pidCheckpointPath,
       vector<Containerizer*>::iterator containerizer,
       bool launched);
 
+  // Continuation for nested containers.
   Future<bool> _launch(
       const ContainerID& containerId,
       bool launched);
@@ -184,43 +170,16 @@ Future<Nothing> ComposingContainerizer::recover(
 
 Future<bool> ComposingContainerizer::launch(
     const ContainerID& containerId,
-    const Option<TaskInfo>& taskInfo,
-    const ExecutorInfo& executorInfo,
-    const string& directory,
-    const Option<string>& user,
-    const SlaveID& slaveId,
+    const ContainerConfig& containerConfig,
     const map<string, string>& environment,
-    bool checkpoint)
+    const Option<std::string>& pidCheckpointPath)
 {
   return dispatch(process,
                   &ComposingContainerizerProcess::launch,
                   containerId,
-                  taskInfo,
-                  executorInfo,
-                  directory,
-                  user,
-                  slaveId,
+                  containerConfig,
                   environment,
-                  checkpoint);
-}
-
-
-Future<bool> ComposingContainerizer::launch(
-    const ContainerID& containerId,
-    const CommandInfo& commandInfo,
-    const Option<ContainerInfo>& containerInfo,
-    const Option<string>& user,
-    const SlaveID& slaveId,
-    const Option<ContainerClass>& containerClass)
-{
-  return dispatch(process,
-                  &ComposingContainerizerProcess::launch,
-                  containerId,
-                  commandInfo,
-                  containerInfo,
-                  user,
-                  slaveId,
-                  containerClass);
+                  pidCheckpointPath);
 }
 
 
@@ -351,13 +310,9 @@ Future<Nothing> ComposingContainerizerProcess::___recover()
 
 Future<bool> ComposingContainerizerProcess::_launch(
     const ContainerID& containerId,
-    const Option<TaskInfo>& taskInfo,
-    const ExecutorInfo& executorInfo,
-    const string& directory,
-    const Option<string>& user,
-    const SlaveID& slaveId,
+    const ContainerConfig& containerConfig,
     const map<string, string>& environment,
-    bool checkpoint,
+    const Option<std::string>& pidCheckpointPath,
     vector<Containerizer*>::iterator containerizer,
     bool launched)
 {
@@ -424,24 +379,16 @@ Future<bool> ComposingContainerizerProcess::_launch(
 
   return (*containerizer)->launch(
       containerId,
-      taskInfo,
-      executorInfo,
-      directory,
-      user,
-      slaveId,
+      containerConfig,
       environment,
-      checkpoint)
+      pidCheckpointPath)
     .then(defer(
         self(),
         &Self::_launch,
         containerId,
-        taskInfo,
-        executorInfo,
-        directory,
-        user,
-        slaveId,
+        containerConfig,
         environment,
-        checkpoint,
+        pidCheckpointPath,
         containerizer,
         lambda::_1));
 }
@@ -449,85 +396,61 @@ Future<bool> ComposingContainerizerProcess::_launch(
 
 Future<bool> ComposingContainerizerProcess::launch(
     const ContainerID& containerId,
-    const Option<TaskInfo>& taskInfo,
-    const ExecutorInfo& executorInfo,
-    const string& directory,
-    const Option<string>& user,
-    const SlaveID& slaveId,
+    const ContainerConfig& containerConfig,
     const map<string, string>& environment,
-    bool checkpoint)
+    const Option<std::string>& pidCheckpointPath)
 {
   if (containers_.contains(containerId)) {
     return Failure("Duplicate container found");
   }
 
-  // Try each containerizer. If none of them handle the
-  // TaskInfo/ExecutorInfo then return a Failure.
-  vector<Containerizer*>::iterator containerizer = containerizers_.begin();
-
   Container* container = new Container();
   container->state = LAUNCHING;
-  container->containerizer = *containerizer;
   containers_[containerId] = container;
 
-  return (*containerizer)->launch(
-      containerId,
-      taskInfo,
-      executorInfo,
-      directory,
-      user,
-      slaveId,
-      environment,
-      checkpoint)
-    .then(defer(self(),
-                &Self::_launch,
-                containerId,
-                taskInfo,
-                executorInfo,
-                directory,
-                user,
-                slaveId,
-                environment,
-                checkpoint,
-                containerizer,
-                lambda::_1));
-}
+  // For nested containers, use the containerizer that launched the
+  // root container. This code path uses a different continuation
+  // function because there is no need to try other containerizers.
+  if (containerId.has_parent()) {
+    ContainerID rootContainerId = protobuf::getRootContainerId(containerId);
+    if (!containers_.contains(rootContainerId)) {
+      return Failure(
+          "Root container " + stringify(rootContainerId) + " not found");
+    }
 
+    Containerizer* containerizer =
+      containers_.at(rootContainerId)->containerizer;
 
-Future<bool> ComposingContainerizerProcess::launch(
-          const ContainerID& containerId,
-          const CommandInfo& commandInfo,
-          const Option<ContainerInfo>& containerInfo,
-          const Option<string>& user,
-          const SlaveID& slaveId,
-          const Option<ContainerClass>& containerClass)
-{
-  ContainerID rootContainerId = protobuf::getRootContainerId(containerId);
+    container->containerizer = containerizer;
 
-  if (!containers_.contains(rootContainerId)) {
-    return Failure(
-        "Root container " + stringify(rootContainerId) + " not found");
+    return containerizer->launch(
+        containerId,
+        containerConfig,
+        environment,
+        pidCheckpointPath)
+      .then(defer(self(),
+                  &Self::_launch,
+                  containerId,
+                  lambda::_1));
   }
 
-  // Use the containerizer that launched the root container to launch
-  // the nested container.
-  Containerizer* containerizer = containers_.at(rootContainerId)->containerizer;
-
-  Container* container = new Container();
-  container->state = LAUNCHING;
-  container->containerizer = containerizer;
-  containers_[containerId] = container;
+  // Try each containerizer. If none of them handle the
+  // TaskInfo/ExecutorInfo then return a Failure.
+  vector<Containerizer*>::iterator containerizer = containerizers_.begin();
+  container->containerizer = *containerizer;
 
-  return containerizer->launch(
+  return (*containerizer)->launch(
       containerId,
-      commandInfo,
-      containerInfo,
-      user,
-      slaveId,
-      containerClass)
+      containerConfig,
+      environment,
+      pidCheckpointPath)
     .then(defer(self(),
                 &Self::_launch,
                 containerId,
+                containerConfig,
+                environment,
+                pidCheckpointPath,
+                containerizer,
                 lambda::_1));
 }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/70150975/src/slave/containerizer/composing.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/composing.hpp b/src/slave/containerizer/composing.hpp
index 8e04bfe..bef6d88 100644
--- a/src/slave/containerizer/composing.hpp
+++ b/src/slave/containerizer/composing.hpp
@@ -26,11 +26,12 @@
 #include <process/http.hpp>
 #include <process/process.hpp>
 
-#include <stout/hashmap.hpp>
 #include <stout/hashset.hpp>
 #include <stout/option.hpp>
 #include <stout/try.hpp>
 
+#include "slave/containerizer/containerizer.hpp"
+
 namespace mesos {
 namespace internal {
 namespace slave {
@@ -55,21 +56,9 @@ public:
 
   virtual process::Future<bool> launch(
       const ContainerID& containerId,
-      const Option<TaskInfo>& taskInfo,
-      const ExecutorInfo& executorInfo,
-      const std::string& directory,
-      const Option<std::string>& user,
-      const SlaveID& slaveId,
+      const mesos::slave::ContainerConfig& containerConfig,
       const std::map<std::string, std::string>& environment,
-      bool checkpoint);
-
-  virtual process::Future<bool> launch(
-      const ContainerID& containerId,
-      const CommandInfo& commandInfo,
-      const Option<ContainerInfo>& containerInfo,
-      const Option<std::string>& user,
-      const SlaveID& slaveId,
-      const Option<mesos::slave::ContainerClass>& containerClass = None());
+      const Option<std::string>& pidCheckpointPath);
 
   virtual process::Future<process::http::Connection> attach(
       const ContainerID& containerId);