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/08/16 00:38:50 UTC
[1/6] mesos git commit: Removed 'directory' from Container struct in
MesosContainerizer.
Repository: mesos
Updated Branches:
refs/heads/master 40115df30 -> 5c056f5b9
Removed 'directory' from Container struct in MesosContainerizer.
Turns out that it's not used.
Review: https://reviews.apache.org/r/51120
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/5c056f5b
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/5c056f5b
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/5c056f5b
Branch: refs/heads/master
Commit: 5c056f5b9a3cf7bc2ba7e41f7c9a10ed018d7913
Parents: 7c33ecf
Author: Jie Yu <yu...@gmail.com>
Authored: Mon Aug 15 17:12:55 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Mon Aug 15 17:38:44 2016 -0700
----------------------------------------------------------------------
src/slave/containerizer/mesos/containerizer.cpp | 3 ---
src/slave/containerizer/mesos/containerizer.hpp | 3 ---
2 files changed, 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/5c056f5b/src/slave/containerizer/mesos/containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp
index b23a4e1..77a502f 100644
--- a/src/slave/containerizer/mesos/containerizer.cpp
+++ b/src/slave/containerizer/mesos/containerizer.cpp
@@ -673,8 +673,6 @@ Future<Nothing> MesosContainerizerProcess::__recover(
status.onAny(defer(self(), &Self::reaped, containerId));
container->status = status;
- container->directory = run.directory();
-
// We only checkpoint the containerizer pid after the container
// successfully launched, therefore we can assume checkpointed
// containers should be running after recover.
@@ -801,7 +799,6 @@ Future<bool> MesosContainerizerProcess::launch(
<< "' of framework " << executorInfo.framework_id();
Container* container = new Container();
- container->directory = directory;
container->state = PROVISIONING;
container->resources = executorInfo.resources();
http://git-wip-us.apache.org/repos/asf/mesos/blob/5c056f5b/src/slave/containerizer/mesos/containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.hpp b/src/slave/containerizer/mesos/containerizer.hpp
index 19a978a..4993961 100644
--- a/src/slave/containerizer/mesos/containerizer.hpp
+++ b/src/slave/containerizer/mesos/containerizer.hpp
@@ -337,9 +337,6 @@ private:
// ResourceStatistics limits in usage().
Resources resources;
- // The executor's working directory on the host.
- std::string directory;
-
State state;
// Used when `status` needs to be collected from isolators
[6/6] mesos git commit: Replaced a static function for isolator
prepare with lambda.
Posted by ji...@apache.org.
Replaced a static function for isolator prepare with lambda.
Review: https://reviews.apache.org/r/51114
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/5c529fa5
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/5c529fa5
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/5c529fa5
Branch: refs/heads/master
Commit: 5c529fa5f17221001924713c9300ceebbfe7cfd5
Parents: 6bedbb3
Author: Jie Yu <yu...@gmail.com>
Authored: Mon Aug 15 15:52:26 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Mon Aug 15 17:38:44 2016 -0700
----------------------------------------------------------------------
src/slave/containerizer/mesos/containerizer.cpp | 33 +++++---------------
1 file changed, 7 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/5c529fa5/src/slave/containerizer/mesos/containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp
index 31125a4..6df0141 100644
--- a/src/slave/containerizer/mesos/containerizer.cpp
+++ b/src/slave/containerizer/mesos/containerizer.cpp
@@ -970,27 +970,6 @@ Future<bool> MesosContainerizerProcess::_launch(
}
-static list<Option<ContainerLaunchInfo>> accumulate(
- list<Option<ContainerLaunchInfo>> l,
- const Option<ContainerLaunchInfo>& e)
-{
- l.push_back(e);
- return l;
-}
-
-
-static Future<list<Option<ContainerLaunchInfo>>> _prepare(
- const Owned<Isolator>& isolator,
- const ContainerID& containerId,
- const ContainerConfig& containerConfig,
- const list<Option<ContainerLaunchInfo>> launchInfos)
-{
- // Propagate any failure.
- return isolator->prepare(containerId, containerConfig)
- .then(lambda::bind(&accumulate, launchInfos, lambda::_1));
-}
-
-
Future<list<Option<ContainerLaunchInfo>>> MesosContainerizerProcess::prepare(
const ContainerID& containerId,
const Option<TaskInfo>& taskInfo,
@@ -1060,11 +1039,13 @@ Future<list<Option<ContainerLaunchInfo>>> MesosContainerizerProcess::prepare(
foreach (const Owned<Isolator>& isolator, isolators) {
// Chain together preparing each isolator.
- f = f.then(lambda::bind(&_prepare,
- isolator,
- containerId,
- containerConfig,
- lambda::_1));
+ f = f.then([=](list<Option<ContainerLaunchInfo>> launchInfos) {
+ return isolator->prepare(containerId, containerConfig)
+ .then([=](const Option<ContainerLaunchInfo>& launchInfo) mutable {
+ launchInfos.push_back(launchInfo);
+ return launchInfos;
+ });
+ });
}
containers_[containerId]->launchInfos = f;
[5/6] mesos git commit: Added nested Container struct in
MesosContainerizer.
Posted by ji...@apache.org.
Added nested Container struct in MesosContainerizer.
Review: https://reviews.apache.org/r/51116
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7c33ecf3
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7c33ecf3
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7c33ecf3
Branch: refs/heads/master
Commit: 7c33ecf3631134a265a9a8407be99d0a520cffcf
Parents: 19c02f8
Author: Jie Yu <yu...@gmail.com>
Authored: Mon Aug 15 15:55:26 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Mon Aug 15 17:38:44 2016 -0700
----------------------------------------------------------------------
src/slave/containerizer/mesos/containerizer.hpp | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/7c33ecf3/src/slave/containerizer/mesos/containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.hpp b/src/slave/containerizer/mesos/containerizer.hpp
index 8180fea..19a978a 100644
--- a/src/slave/containerizer/mesos/containerizer.hpp
+++ b/src/slave/containerizer/mesos/containerizer.hpp
@@ -346,6 +346,9 @@ private:
// associated with this container. `Sequence` allows us to
// maintain the order of `status` requests for a given container.
process::Sequence sequence;
+
+ // Containers nested under this container.
+ hashmap<ContainerID, process::Owned<Container>> containers;
};
hashmap<ContainerID, process::Owned<Container>> containers_;
[2/6] mesos git commit: Replaced a static isolator cleanup function
with lambda.
Posted by ji...@apache.org.
Replaced a static isolator cleanup function with lambda.
Review: https://reviews.apache.org/r/51115
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/19c02f8a
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/19c02f8a
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/19c02f8a
Branch: refs/heads/master
Commit: 19c02f8aa36dbdadc51b8644dd1ae5fbd0411261
Parents: 5c529fa
Author: Jie Yu <yu...@gmail.com>
Authored: Mon Aug 15 15:54:14 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Mon Aug 15 17:38:44 2016 -0700
----------------------------------------------------------------------
src/slave/containerizer/mesos/containerizer.cpp | 35 ++++++--------------
1 file changed, 11 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/19c02f8a/src/slave/containerizer/mesos/containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp
index 6df0141..b23a4e1 100644
--- a/src/slave/containerizer/mesos/containerizer.cpp
+++ b/src/slave/containerizer/mesos/containerizer.cpp
@@ -1941,26 +1941,6 @@ MesosContainerizerProcess::Metrics::~Metrics()
}
-static Future<list<Future<Nothing>>> _cleanupIsolators(
- const Owned<Isolator>& isolator,
- const ContainerID& containerId,
- list<Future<Nothing>> cleanups)
-{
- // Accumulate but do not propagate any failure.
- Future<Nothing> cleanup = isolator->cleanup(containerId);
- cleanups.push_back(cleanup);
-
- // Wait for the cleanup to complete/fail before returning the list.
- // We use await here to asynchronously wait for the isolator to
- // complete then return cleanups.
- list<Future<Nothing>> cleanup_;
- cleanup_.push_back(cleanup);
-
- return await(cleanup_)
- .then([cleanups]() -> list<Future<Nothing>> { return cleanups; });
-}
-
-
Future<list<Future<Nothing>>> MesosContainerizerProcess::cleanupIsolators(
const ContainerID& containerId)
{
@@ -1973,10 +1953,17 @@ Future<list<Future<Nothing>>> MesosContainerizerProcess::cleanupIsolators(
// complete and continuing if one fails.
// TODO(jieyu): Technically, we cannot bind 'isolator' here
// because the ownership will be transferred after the bind.
- f = f.then(lambda::bind(&_cleanupIsolators,
- isolator,
- containerId,
- lambda::_1));
+ f = f.then([=](list<Future<Nothing>> cleanups) {
+ // Accumulate but do not propagate any failure.
+ Future<Nothing> cleanup = isolator->cleanup(containerId);
+ cleanups.push_back(cleanup);
+
+ // Wait for the cleanup to complete/fail before returning the
+ // list. We use await here to asynchronously wait for the
+ // isolator to complete then return cleanups.
+ return await(list<Future<Nothing>>({cleanup}))
+ .then([cleanups]() { return cleanups; });
+ });
}
return f;
[4/6] mesos git commit: Added non-nesting CHECKs to containerizers.
Posted by ji...@apache.org.
Added non-nesting CHECKs to containerizers.
Review: https://reviews.apache.org/r/51106
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/6bedbb36
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/6bedbb36
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/6bedbb36
Branch: refs/heads/master
Commit: 6bedbb368891690f143d9fe99218ae168c72db58
Parents: 27a21b1
Author: Jie Yu <yu...@gmail.com>
Authored: Mon Aug 15 13:36:32 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Mon Aug 15 17:38:44 2016 -0700
----------------------------------------------------------------------
src/slave/containerizer/docker.cpp | 10 ++++++++++
src/slave/containerizer/mesos/containerizer.cpp | 16 ++++++++++++++++
2 files changed, 26 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/6bedbb36/src/slave/containerizer/docker.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/docker.cpp b/src/slave/containerizer/docker.cpp
index 03668d2..e447c58 100644
--- a/src/slave/containerizer/docker.cpp
+++ b/src/slave/containerizer/docker.cpp
@@ -967,6 +967,8 @@ Future<bool> DockerContainerizerProcess::launch(
const map<string, string>& environment,
bool checkpoint)
{
+ CHECK(!containerId.has_parent());
+
if (containers_.contains(containerId)) {
return Failure("Container already started");
}
@@ -1393,6 +1395,8 @@ Future<Nothing> DockerContainerizerProcess::update(
const Resources& _resources,
bool force)
{
+ CHECK(!containerId.has_parent());
+
if (!containers_.contains(containerId)) {
LOG(WARNING) << "Ignoring updating unknown container: "
<< containerId;
@@ -1623,6 +1627,8 @@ Future<Nothing> DockerContainerizerProcess::__update(
Future<ResourceStatistics> DockerContainerizerProcess::usage(
const ContainerID& containerId)
{
+ CHECK(!containerId.has_parent());
+
#ifndef __linux__
return Failure("Does not support usage() on non-linux platform");
#else
@@ -1776,6 +1782,8 @@ Try<ResourceStatistics> DockerContainerizerProcess::cgroupsStatistics(
Future<containerizer::Termination> DockerContainerizerProcess::wait(
const ContainerID& containerId)
{
+ CHECK(!containerId.has_parent());
+
if (!containers_.contains(containerId)) {
return Failure("Unknown container: " + stringify(containerId));
}
@@ -1788,6 +1796,8 @@ void DockerContainerizerProcess::destroy(
const ContainerID& containerId,
bool killed)
{
+ CHECK(!containerId.has_parent());
+
if (!containers_.contains(containerId)) {
LOG(WARNING) << "Ignoring destroy of unknown container: " << containerId;
return;
http://git-wip-us.apache.org/repos/asf/mesos/blob/6bedbb36/src/slave/containerizer/mesos/containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp
index 9b0cca2..31125a4 100644
--- a/src/slave/containerizer/mesos/containerizer.cpp
+++ b/src/slave/containerizer/mesos/containerizer.cpp
@@ -767,6 +767,8 @@ Future<bool> MesosContainerizerProcess::launch(
const map<string, string>& environment,
bool checkpoint)
{
+ CHECK(!containerId.has_parent());
+
if (containers_.contains(containerId)) {
return Failure("Container already started");
}
@@ -1374,6 +1376,8 @@ Future<bool> MesosContainerizerProcess::isolate(
const ContainerID& containerId,
pid_t _pid)
{
+ CHECK(!containerId.has_parent());
+
if (!containers_.contains(containerId)) {
return Failure("Container destroyed during preparing");
}
@@ -1457,6 +1461,8 @@ Future<Nothing> MesosContainerizerProcess::launch(
Future<containerizer::Termination> MesosContainerizerProcess::wait(
const ContainerID& containerId)
{
+ CHECK(!containerId.has_parent());
+
if (!containers_.contains(containerId)) {
// See the comments in destroy() for race conditions which lead
// to "unknown containers".
@@ -1472,6 +1478,8 @@ Future<Nothing> MesosContainerizerProcess::update(
const ContainerID& containerId,
const Resources& resources)
{
+ CHECK(!containerId.has_parent());
+
if (!containers_.contains(containerId)) {
// It is not considered a failure if the container is not known
// because the slave will attempt to update the container's
@@ -1513,6 +1521,8 @@ Future<ResourceStatistics> _usage(
const Option<Resources>& resources,
const list<Future<ResourceStatistics>>& statistics)
{
+ CHECK(!containerId.has_parent());
+
ResourceStatistics result;
// Set the timestamp now we have all statistics.
@@ -1549,6 +1559,8 @@ Future<ResourceStatistics> _usage(
Future<ResourceStatistics> MesosContainerizerProcess::usage(
const ContainerID& containerId)
{
+ CHECK(!containerId.has_parent());
+
if (!containers_.contains(containerId)) {
return Failure("Unknown container: " + stringify(containerId));
}
@@ -1596,6 +1608,8 @@ Future<ContainerStatus> _status(
Future<ContainerStatus> MesosContainerizerProcess::status(
const ContainerID& containerId)
{
+ CHECK(!containerId.has_parent());
+
if (!containers_.contains(containerId)) {
return Failure("Unknown container: " + stringify(containerId));
}
@@ -1624,6 +1638,8 @@ Future<ContainerStatus> MesosContainerizerProcess::status(
void MesosContainerizerProcess::destroy(
const ContainerID& containerId)
{
+ CHECK(!containerId.has_parent());
+
if (!containers_.contains(containerId)) {
// This can happen due to the race between destroys initiated by
// the launch failure, the terminated executor and the agent so
[3/6] mesos git commit: Updated hash and equality functions for
ContainerID.
Posted by ji...@apache.org.
Updated hash and equality functions for ContainerID.
Review: https://reviews.apache.org/r/51105
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/27a21b10
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/27a21b10
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/27a21b10
Branch: refs/heads/master
Commit: 27a21b1007b3837df876cf7f62088244d9bf6915
Parents: 40115df
Author: Jie Yu <yu...@gmail.com>
Authored: Mon Aug 15 12:33:14 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Mon Aug 15 17:38:44 2016 -0700
----------------------------------------------------------------------
include/mesos/type_utils.hpp | 16 +++++++-----
src/common/type_utils.cpp | 8 ++++++
.../containerizer/mesos_containerizer_tests.cpp | 27 ++++++++++++++++++++
3 files changed, 44 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/27a21b10/include/mesos/type_utils.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/type_utils.hpp b/include/mesos/type_utils.hpp
index d0d2356..5826eff 100644
--- a/include/mesos/type_utils.hpp
+++ b/include/mesos/type_utils.hpp
@@ -47,6 +47,7 @@ namespace mesos {
bool operator==(const CommandInfo& left, const CommandInfo& right);
bool operator==(const CommandInfo::URI& left, const CommandInfo::URI& right);
+bool operator==(const ContainerID& left, const ContainerID& right);
bool operator==(const Credential& left, const Credential& right);
bool operator==(const DiscoveryInfo& left, const DiscoveryInfo& right);
bool operator==(const Environment& left, const Environment& right);
@@ -69,12 +70,6 @@ bool operator!=(const Labels& left, const Labels& right);
bool operator!=(const TaskStatus& left, const TaskStatus& right);
-inline bool operator==(const ContainerID& left, const ContainerID& right)
-{
- return left.value() == right.value();
-}
-
-
inline bool operator==(const ExecutorID& left, const ExecutorID& right)
{
return left.value() == right.value();
@@ -176,7 +171,7 @@ inline bool operator==(const MachineID& left, const MachineID& right)
inline bool operator!=(const ContainerID& left, const ContainerID& right)
{
- return left.value() != right.value();
+ return !(left == right);
}
@@ -364,6 +359,13 @@ struct hash<mesos::ContainerID>
{
size_t seed = 0;
boost::hash_combine(seed, containerId.value());
+
+ if (containerId.has_parent()) {
+ boost::hash_combine(
+ seed,
+ std::hash<mesos::ContainerID>()(containerId.parent()));
+ }
+
return seed;
}
};
http://git-wip-us.apache.org/repos/asf/mesos/blob/27a21b10/src/common/type_utils.cpp
----------------------------------------------------------------------
diff --git a/src/common/type_utils.cpp b/src/common/type_utils.cpp
index 7110d87..a8a9d90 100644
--- a/src/common/type_utils.cpp
+++ b/src/common/type_utils.cpp
@@ -82,6 +82,14 @@ bool operator==(const CommandInfo::URI& left, const CommandInfo::URI& right)
}
+bool operator==(const ContainerID& left, const ContainerID& right)
+{
+ return left.value() == right.value() &&
+ left.has_parent() == right.has_parent() &&
+ (!left.has_parent() || left.parent() == right.parent());
+}
+
+
bool operator==(const Credential& left, const Credential& right)
{
return left.principal() == right.principal() &&
http://git-wip-us.apache.org/repos/asf/mesos/blob/27a21b10/src/tests/containerizer/mesos_containerizer_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/mesos_containerizer_tests.cpp b/src/tests/containerizer/mesos_containerizer_tests.cpp
index b47e569..4a49247 100644
--- a/src/tests/containerizer/mesos_containerizer_tests.cpp
+++ b/src/tests/containerizer/mesos_containerizer_tests.cpp
@@ -89,6 +89,33 @@ namespace mesos {
namespace internal {
namespace tests {
+TEST(MesosContainerizerTest, NestedContainerID)
+{
+ ContainerID id1;
+ id1.set_value(UUID::random().toString());
+
+ ContainerID id2;
+ id2.set_value(UUID::random().toString());
+
+ EXPECT_EQ(id1, id1);
+ EXPECT_NE(id1, id2);
+
+ ContainerID id3 = id1;
+ id3.mutable_parent()->CopyFrom(id2);
+
+ EXPECT_EQ(id3, id3);
+ EXPECT_NE(id3, id1);
+
+ hashset<ContainerID> ids;
+ ids.insert(id2);
+ ids.insert(id3);
+
+ EXPECT_TRUE(ids.contains(id2));
+ EXPECT_TRUE(ids.contains(id3));
+ EXPECT_FALSE(ids.contains(id1));
+}
+
+
class MesosContainerizerIsolatorPreparationTest :
public TemporaryDirectoryTest
{