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/02 05:20:17 UTC
mesos git commit: Implemented `CgroupsIsolatorProcess::cleanup`.
Repository: mesos
Updated Branches:
refs/heads/master 08dfd59bb -> 9567fb420
Implemented `CgroupsIsolatorProcess::cleanup`.
Review: https://reviews.apache.org/r/49827/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/9567fb42
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/9567fb42
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/9567fb42
Branch: refs/heads/master
Commit: 9567fb42062774ca841da8cbfb45119bc30a0a4d
Parents: 08dfd59
Author: haosdent huang <ha...@gmail.com>
Authored: Mon Aug 1 22:03:41 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Mon Aug 1 22:19:38 2016 -0700
----------------------------------------------------------------------
.../mesos/isolators/cgroups/cgroups.cpp | 87 +++++++++++++++++++-
.../mesos/isolators/cgroups/cgroups.hpp | 21 +++--
2 files changed, 101 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/9567fb42/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp b/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp
index bd20631..c304e2a 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp
@@ -346,7 +346,92 @@ Future<ContainerStatus> CgroupsIsolatorProcess::status(
Future<Nothing> CgroupsIsolatorProcess::cleanup(
const ContainerID& containerId)
{
- return Failure("Not implemented.");
+ // Multiple calls may occur during test clean up.
+ if (!infos.contains(containerId)) {
+ VLOG(1) << "Ignoring cleanup request for unknown container: "
+ << containerId;
+
+ return Nothing();
+ }
+
+ list<Future<Nothing>> cleanups;
+ foreachvalue (const Owned<Subsystem>& subsystem, subsystems) {
+ cleanups.push_back(subsystem->cleanup(containerId));
+ }
+
+ return await(cleanups)
+ .then(defer(
+ PID<CgroupsIsolatorProcess>(this),
+ &CgroupsIsolatorProcess::_cleanup,
+ containerId,
+ lambda::_1));
+}
+
+
+Future<Nothing> CgroupsIsolatorProcess::_cleanup(
+ const ContainerID& containerId,
+ const list<Future<Nothing>>& futures)
+{
+ CHECK(infos.contains(containerId));
+
+ vector<string> errors;
+ foreach (const Future<Nothing>& future, futures) {
+ if (!future.isReady()) {
+ errors.push_back((future.isFailed()
+ ? future.failure()
+ : "discarded"));
+ }
+ }
+
+ if (errors.size() > 0) {
+ return Failure(
+ "Failed to cleanup subsystems: " +
+ strings::join(";", errors));
+ }
+
+ list<Future<Nothing>> destroys;
+
+ // TODO(haosdent): Use foreachkey once MESOS-5037 is resolved.
+ foreach (const string& hierarchy, subsystems.keys()) {
+ destroys.push_back(cgroups::destroy(
+ hierarchy,
+ infos[containerId]->cgroup,
+ cgroups::DESTROY_TIMEOUT));
+ }
+
+ return await(destroys)
+ .then(defer(
+ PID<CgroupsIsolatorProcess>(this),
+ &CgroupsIsolatorProcess::__cleanup,
+ containerId,
+ lambda::_1));
+}
+
+
+Future<Nothing> CgroupsIsolatorProcess::__cleanup(
+ const ContainerID& containerId,
+ const list<Future<Nothing>>& futures)
+{
+ CHECK(infos.contains(containerId));
+
+ vector<string> errors;
+ foreach (const Future<Nothing>& future, futures) {
+ if (!future.isReady()) {
+ errors.push_back((future.isFailed()
+ ? future.failure()
+ : "discarded"));
+ }
+ }
+
+ if (errors.size() > 0) {
+ return Failure(
+ "Failed to destroy cgroups: " +
+ strings::join(";", errors));
+ }
+
+ infos.erase(containerId);
+
+ return Nothing();
}
} // namespace slave {
http://git-wip-us.apache.org/repos/asf/mesos/blob/9567fb42/src/slave/containerizer/mesos/isolators/cgroups/cgroups.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/isolators/cgroups/cgroups.hpp b/src/slave/containerizer/mesos/isolators/cgroups/cgroups.hpp
index 422b465..8814299 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/cgroups.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/cgroups.hpp
@@ -79,12 +79,8 @@ public:
const ContainerID& containerId);
private:
- CgroupsIsolatorProcess(
- const Flags& _flags,
- const hashmap<std::string, std::string>& _hierarchies,
- const multihashmap<std::string, process::Owned<Subsystem>>& _subsystems);
-
- struct Info {
+ struct Info
+ {
Info(const ContainerID& _containerId, const std::string& _cgroup)
: containerId(_containerId), cgroup(_cgroup) {}
@@ -96,6 +92,19 @@ private:
process::Promise<mesos::slave::ContainerLimitation> limitation;
};
+ CgroupsIsolatorProcess(
+ const Flags& _flags,
+ const hashmap<std::string, std::string>& _hierarchies,
+ const multihashmap<std::string, process::Owned<Subsystem>>& _subsystems);
+
+ process::Future<Nothing> _cleanup(
+ const ContainerID& containerId,
+ const std::list<process::Future<Nothing>>& futures);
+
+ process::Future<Nothing> __cleanup(
+ const ContainerID& containerId,
+ const std::list<process::Future<Nothing>>& futures);
+
const Flags flags;
// Map from subsystem name to hierarchy path.