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);