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 <[email protected]>
Authored: Tue Feb 9 07:25:37 2016 -0800
Committer: Jie Yu <[email protected]>
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);
 

Reply via email to