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 16:35:28 UTC
mesos git commit: Used `await` instead of `collect` on `Subsystem`
operations.
Repository: mesos
Updated Branches:
refs/heads/master 59a61a4b3 -> 58a1bd139
Used `await` instead of `collect` on `Subsystem` operations.
In order to get the error message for each subsystem, this patch changes
to use `await` on `Subsystem` operations and combines every unready
`Future` error message.
Review: https://reviews.apache.org/r/50627/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/58a1bd13
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/58a1bd13
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/58a1bd13
Branch: refs/heads/master
Commit: 58a1bd1396f7f124537dd21812bcb65ee6802452
Parents: 59a61a4
Author: haosdent huang <ha...@gmail.com>
Authored: Tue Aug 2 09:18:30 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Tue Aug 2 09:35:15 2016 -0700
----------------------------------------------------------------------
.../mesos/isolators/cgroups/cgroups.cpp | 97 +++++++++++++++++---
.../mesos/isolators/cgroups/cgroups.hpp | 11 +++
2 files changed, 97 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/58a1bd13/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 c304e2a..5a50a62 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp
@@ -201,18 +201,41 @@ Future<Option<ContainerLaunchInfo>> CgroupsIsolatorProcess::prepare(
prepares.push_back(subsystem->prepare(containerId));
}
- // TODO(haosdent): Here we assume the command executor's resources
- // include the task's resources. Revisit here if this semantics
- // changes.
- return collect(prepares)
+ return await(prepares)
.then(defer(
PID<CgroupsIsolatorProcess>(this),
- &CgroupsIsolatorProcess::update,
+ &CgroupsIsolatorProcess::_prepare,
containerId,
- containerConfig.executor_info().resources()))
- .then([]() -> Future<Option<ContainerLaunchInfo>> {
- return None();
- });
+ containerConfig,
+ lambda::_1));
+}
+
+
+Future<Option<ContainerLaunchInfo>> CgroupsIsolatorProcess::_prepare(
+ const ContainerID& containerId,
+ const ContainerConfig& containerConfig,
+ const list<Future<Nothing>>& futures)
+{
+ 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 prepare subsystems: " +
+ strings::join(";", errors));
+ }
+
+ // TODO(haosdent): Here we assume the command executor's resources
+ // include the task's resources. Revisit here if this semantics
+ // changes.
+ return update(containerId, containerConfig.executor_info().resources())
+ .then([]() { return Option<ContainerLaunchInfo>::none(); });
}
@@ -248,7 +271,33 @@ Future<Nothing> CgroupsIsolatorProcess::isolate(
isolates.push_back(subsystem->isolate(containerId, pid));
}
- return collect(isolates).then([]() { return Nothing(); });
+ return await(isolates)
+ .then(defer(
+ PID<CgroupsIsolatorProcess>(this),
+ &CgroupsIsolatorProcess::_isolate,
+ lambda::_1));
+}
+
+
+Future<Nothing> CgroupsIsolatorProcess::_isolate(
+ const list<Future<Nothing>>& futures)
+{
+ 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 isolate subsystems: " +
+ strings::join(";", errors));
+ }
+
+ return Nothing();
}
@@ -276,7 +325,33 @@ Future<Nothing> CgroupsIsolatorProcess::update(
updates.push_back(subsystem->update(containerId, resources));
}
- return collect(updates).then([]() { return Nothing(); });
+ return await(updates)
+ .then(defer(
+ PID<CgroupsIsolatorProcess>(this),
+ &CgroupsIsolatorProcess::_update,
+ lambda::_1));
+}
+
+
+Future<Nothing> CgroupsIsolatorProcess::_update(
+ const list<Future<Nothing>>& futures)
+{
+ 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 update subsystems: " +
+ strings::join(";", errors));
+ }
+
+ return Nothing();
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/58a1bd13/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 8814299..1477b5e 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/cgroups.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/cgroups.hpp
@@ -97,6 +97,17 @@ private:
const hashmap<std::string, std::string>& _hierarchies,
const multihashmap<std::string, process::Owned<Subsystem>>& _subsystems);
+ process::Future<Option<mesos::slave::ContainerLaunchInfo>> _prepare(
+ const ContainerID& containerId,
+ const mesos::slave::ContainerConfig& containerConfig,
+ const std::list<process::Future<Nothing>>& futures);
+
+ process::Future<Nothing> _isolate(
+ const std::list<process::Future<Nothing>>& futures);
+
+ process::Future<Nothing> _update(
+ const std::list<process::Future<Nothing>>& futures);
+
process::Future<Nothing> _cleanup(
const ContainerID& containerId,
const std::list<process::Future<Nothing>>& futures);