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