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/02/09 19:12:49 UTC

[1/3] mesos git commit: Implemented the `status` method in CgroupNetClsIsolatorProcess.

Repository: mesos
Updated Branches:
  refs/heads/master 3ca369141 -> 5418b0ab9


Implemented the `status` method in CgroupNetClsIsolatorProcess.

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


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

Branch: refs/heads/master
Commit: 0649443e74b83079d509073b715205ccd9147e59
Parents: 3ca3691
Author: Avinash sridharan <av...@mesosphere.io>
Authored: Tue Feb 9 07:19:38 2016 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Tue Feb 9 07:22:02 2016 -0800

----------------------------------------------------------------------
 .../mesos/isolators/cgroups/net_cls.cpp         | 22 ++++++++++++++++++++
 .../mesos/isolators/cgroups/net_cls.hpp         |  3 +++
 2 files changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/0649443e/src/slave/containerizer/mesos/isolators/cgroups/net_cls.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/isolators/cgroups/net_cls.cpp b/src/slave/containerizer/mesos/isolators/cgroups/net_cls.cpp
index f8eb587..2fc7997 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/net_cls.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/net_cls.cpp
@@ -397,6 +397,28 @@ Future<ResourceStatistics> CgroupsNetClsIsolatorProcess::usage(
 }
 
 
+Future<ContainerStatus> CgroupsNetClsIsolatorProcess::status(
+    const ContainerID& containerId)
+{
+  if (!infos.contains(containerId)) {
+    return Failure("Unknown container");
+  }
+
+  const Info& info = infos.at(containerId);
+
+  ContainerStatus status;
+
+  if (info.handle.isSome()) {
+    CgroupInfo* cgroupInfo = status.mutable_cgroup_info();
+    CgroupInfo::NetCls* netCls = cgroupInfo->mutable_net_cls();
+
+    netCls->set_classid(info.handle->get());
+  }
+
+  return status;
+}
+
+
 Future<Option<ContainerLaunchInfo>> CgroupsNetClsIsolatorProcess::prepare(
     const ContainerID& containerId,
     const ContainerConfig& containerConfig)

http://git-wip-us.apache.org/repos/asf/mesos/blob/0649443e/src/slave/containerizer/mesos/isolators/cgroups/net_cls.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/isolators/cgroups/net_cls.hpp b/src/slave/containerizer/mesos/isolators/cgroups/net_cls.hpp
index 3f8d07c..b22b9f6 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/net_cls.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/net_cls.hpp
@@ -145,6 +145,9 @@ public:
   virtual process::Future<ResourceStatistics> usage(
       const ContainerID& containerId);
 
+  virtual process::Future<ContainerStatus> status(
+      const ContainerID& containerId);
+
   virtual process::Future<Nothing> cleanup(
       const ContainerID& containerId);
 


[2/3] mesos git commit: Defined a virtual `status` method for Containerizer.

Posted by ji...@apache.org.
Defined a virtual `status` method for Containerizer.

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


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

Branch: refs/heads/master
Commit: 360142c3a0acb0a6f73841f9148b798a5ec950ac
Parents: 0649443
Author: Avinash sridharan <av...@mesosphere.io>
Authored: Tue Feb 9 07:23:13 2016 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Tue Feb 9 07:24:24 2016 -0800

----------------------------------------------------------------------
 src/slave/containerizer/containerizer.hpp | 52 ++++++++++++++++----------
 1 file changed, 33 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/360142c3/src/slave/containerizer/containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/containerizer.hpp b/src/slave/containerizer/containerizer.hpp
index 08d1ed3..ff78b4d 100644
--- a/src/slave/containerizer/containerizer.hpp
+++ b/src/slave/containerizer/containerizer.hpp
@@ -48,29 +48,32 @@ namespace state {
 struct SlaveState;
 } // namespace state {
 
-// An abstraction of a Containerizer that will contain an executor and its
-// tasks.
+
+// An abstraction of a Containerizer that will contain an executor and
+// its tasks.
 class Containerizer
 {
 public:
-  // Attempts to create a containerizer as specified by 'isolation' in flags.
+  // Attempts to create a containerizer as specified by 'isolation' in
+  // flags.
   static Try<Containerizer*> create(
       const Flags& flags,
       bool local,
       Fetcher* fetcher);
 
-  // Determine slave resources from flags, probing the system or querying a
-  // delegate.
-  // TODO(idownes): Consider making this non-static and moving to containerizer
-  // implementations to enable a containerizer to best determine the resources,
-  // particularly if containerizeration is delegated.
+  // Determine slave resources from flags, probing the system or
+  // querying a delegate.
+  // TODO(idownes): Consider making this non-static and moving to
+  // containerizer implementations to enable a containerizer to best
+  // determine the resources, particularly if containerizeration is
+  // delegated.
   static Try<Resources> resources(const Flags& flags);
 
   virtual ~Containerizer() {}
 
-  // Recover all containerized executors specified in state. Any containerized
-  // executors present on the system but not included in state (or state is
-  // None) will be terminated and cleaned up.
+  // Recover all containerized executors specified in state. Any
+  // containerized executors present on the system but not included in
+  // state (or state is None) will be terminated and cleaned up.
   virtual process::Future<Nothing> recover(
       const Option<state::SlaveState>& state) = 0;
 
@@ -110,17 +113,28 @@ public:
   virtual process::Future<ResourceStatistics> usage(
       const ContainerID& containerId) = 0;
 
-  // Wait on the container's 'Termination'. If the executor terminates, the
-  // containerizer should also destroy the containerized context. The future
-  // may be failed if an error occurs during termination of the executor or
-  // destruction of the container.
+  // Retrieve the run-time state of various isolator properties
+  // associated with the container. Unlike other methods in this class
+  // we are not making this pure virtual, since a `Containerizer`
+  // doesn't necessarily need to return the status of a container.
+  virtual process::Future<ContainerStatus> status(
+      const ContainerID &containerId)
+  {
+    return ContainerStatus();
+  }
+
+  // Wait on the container's 'Termination'. If the executor
+  // terminates, the containerizer should also destroy the
+  // containerized context. The future may be failed if an error
+  // occurs during termination of the executor or destruction of the
+  // container.
   virtual process::Future<containerizer::Termination> wait(
       const ContainerID& containerId) = 0;
 
-  // Destroy a running container, killing all processes and releasing all
-  // resources.
-  // NOTE: You cannot wait() on containers that have been destroyed, so you
-  // should always call wait() before destroy().
+  // Destroy a running container, killing all processes and releasing
+  // all resources.
+  // NOTE: You cannot wait() on containers that have been destroyed,
+  // so you should always call wait() before destroy().
   virtual void destroy(const ContainerID& containerId) = 0;
 
   virtual process::Future<hashset<ContainerID>> containers() = 0;


[3/3] mesos git commit: Implemented the `status` method in MesosContainerizer.

Posted by ji...@apache.org.
Implemented the `status` method in MesosContainerizer.

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


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

Branch: refs/heads/master
Commit: 5418b0ab9685a0ec172f5b3b3f9e2fdb2fa1087c
Parents: 360142c
Author: Avinash sridharan <av...@mesosphere.io>
Authored: Tue Feb 9 07:25:37 2016 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Tue Feb 9 07:25:37 2016 -0800

----------------------------------------------------------------------
 src/slave/containerizer/mesos/containerizer.cpp | 51 ++++++++++++++++++++
 src/slave/containerizer/mesos/containerizer.hpp |  6 +++
 2 files changed, 57 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/5418b0ab/src/slave/containerizer/mesos/containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp
index 1e362d2..b484630 100644
--- a/src/slave/containerizer/mesos/containerizer.cpp
+++ b/src/slave/containerizer/mesos/containerizer.cpp
@@ -369,6 +369,16 @@ Future<ResourceStatistics> MesosContainerizer::usage(
 }
 
 
+Future<ContainerStatus> MesosContainerizer::status(
+    const ContainerID& containerId)
+{
+  return dispatch(
+      process.get(),
+      &MesosContainerizerProcess::status,
+      containerId);
+}
+
+
 Future<containerizer::Termination> MesosContainerizer::wait(
     const ContainerID& containerId)
 {
@@ -1300,6 +1310,47 @@ Future<ResourceStatistics> MesosContainerizerProcess::usage(
 }
 
 
+Future<ContainerStatus> _status(
+    const ContainerID& containerId,
+    const list<Future<ContainerStatus>>& statuses)
+{
+  ContainerStatus result;
+
+  foreach (const Future<ContainerStatus>& status, statuses) {
+    if (status.isReady()) {
+      result.MergeFrom(status.get());
+    } else {
+      LOG(WARNING) << "Skipping status for container "
+                   << containerId << " because: "
+                   << (status.isFailed() ? status.failure()
+                                            : "discarded");
+    }
+  }
+
+  VLOG(2) << "Aggregating status for container: " << containerId;
+
+  return result;
+}
+
+
+Future<ContainerStatus> MesosContainerizerProcess::status(
+    const ContainerID& containerId)
+{
+  if (!containers_.contains(containerId)) {
+    return Failure("Unknown container: " + stringify(containerId));
+  }
+
+  list<Future<ContainerStatus>> futures;
+  foreach (const Owned<Isolator>& isolator, isolators) {
+    futures.push_back(isolator->status(containerId));
+  }
+
+  // Using `await()` here so we can return partial status.
+  return await(futures).then(
+      lambda::bind(_status, containerId, lambda::_1));
+}
+
+
 void MesosContainerizerProcess::destroy(
     const ContainerID& containerId)
 {

http://git-wip-us.apache.org/repos/asf/mesos/blob/5418b0ab/src/slave/containerizer/mesos/containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.hpp b/src/slave/containerizer/mesos/containerizer.hpp
index 811ab79..7aa53f6 100644
--- a/src/slave/containerizer/mesos/containerizer.hpp
+++ b/src/slave/containerizer/mesos/containerizer.hpp
@@ -96,6 +96,9 @@ public:
   virtual process::Future<ResourceStatistics> usage(
       const ContainerID& containerId);
 
+  virtual process::Future<ContainerStatus> status(
+      const ContainerID& containerId);
+
   virtual process::Future<containerizer::Termination> wait(
       const ContainerID& containerId);
 
@@ -150,6 +153,9 @@ public:
   virtual process::Future<ResourceStatistics> usage(
       const ContainerID& containerId);
 
+  virtual process::Future<ContainerStatus> status(
+      const ContainerID& containerId);
+
   virtual process::Future<containerizer::Termination> wait(
       const ContainerID& containerId);