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