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
 {