This is an automated email from the ASF dual-hosted git repository.
bmahler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
The following commit(s) were added to refs/heads/master by this push:
new 49ab7d382 [cgroups2] Recover device manager with cgroups2 isolator.
49ab7d382 is described below
commit 49ab7d382f4b3d694093f255217dc2783fe73cb7
Author: Jason Zhou <[email protected]>
AuthorDate: Mon Aug 12 17:39:51 2024 -0400
[cgroups2] Recover device manager with cgroups2 isolator.
This patch lets us call the device manager's recovery function after
the containers from recovery_state have been successfully recovered.
Allowing us to begin recovering the cgroup device access state for each
recovered non-orphan container.
Review: https://reviews.apache.org/r/75149/
---
.../mesos/isolators/cgroups2/cgroups2.cpp | 50 ++++++++++++----------
.../mesos/isolators/cgroups2/cgroups2.hpp | 10 +++--
2 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
index fa164f3d6..c9162c4ad 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
@@ -69,10 +69,12 @@ namespace cgroups2_paths = containerizer::paths::cgroups2;
Cgroups2IsolatorProcess::Cgroups2IsolatorProcess(
const Flags& _flags,
- const hashmap<string, Owned<Controller>>& _controllers)
+ const hashmap<string, Owned<Controller>>& _controllers,
+ const process::Owned<DeviceManager>& _deviceManager)
: ProcessBase(process::ID::generate("cgroups2-isolator")),
flags(_flags),
- controllers(_controllers) {}
+ controllers(_controllers),
+ deviceManager(_deviceManager) {}
Cgroups2IsolatorProcess::~Cgroups2IsolatorProcess() {}
@@ -152,7 +154,7 @@ Try<Isolator*> Cgroups2IsolatorProcess::create(
Owned<MesosIsolatorProcess> process(
- new Cgroups2IsolatorProcess(flags, controllers));
+ new Cgroups2IsolatorProcess(flags, controllers, deviceManager));
return new MesosIsolator(process);
}
@@ -373,30 +375,34 @@ Future<Nothing> Cgroups2IsolatorProcess::recover(
// Then recover containers we find in the cgroups hierarchy:
return await(recovers)
- .then(defer(
- PID<Cgroups2IsolatorProcess>(this),
- &Cgroups2IsolatorProcess::_recover,
- orphans,
- lambda::_1));
+ .then(defer(self(), [=](const vector<Future<Nothing>>& futures)
+ -> Future<Nothing> {
+ vector<string> errors;
+ foreach (const Future<Nothing>& future, futures) {
+ if (!future.isReady()) {
+ errors.push_back(future.isFailed() ? future.failure() : "discarded");
+ }
+ }
+
+ if (!errors.empty()) {
+ return Failure("Failed to recover active containers: "
+ + strings::join(", ", errors));
+ }
+
+ vector<Future<Nothing>> recovers = {
+ _recover(orphans),
+ deviceManager->recover(states)
+ };
+
+ return collect(recovers)
+ .then([]() { return Nothing(); });
+ }));
}
Future<Nothing> Cgroups2IsolatorProcess::_recover(
- const hashset<ContainerID>& orphans,
- const vector<Future<Nothing>>& futures)
+ const hashset<ContainerID>& orphans)
{
- vector<string> errors;
- foreach (const Future<Nothing>& future, futures) {
- if (!future.isReady()) {
- errors.push_back(future.isFailed() ? future.failure() : "discarded");
- }
- }
-
- if (!errors.empty()) {
- return Failure("Failed to recover active containers: "
- + strings::join(", ", errors));
- }
-
hashset<ContainerID> knownOrphans;
hashset<ContainerID> unknownOrphans;
diff --git a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.hpp
b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.hpp
index 2446e064a..07eb03681 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.hpp
@@ -122,7 +122,8 @@ private:
Cgroups2IsolatorProcess(
const Flags& flags,
- const hashmap<std::string, process::Owned<Controller>>& controllers);
+ const hashmap<std::string, process::Owned<Controller>>& controllers,
+ const process::Owned<DeviceManager>& deviceManager);
process::Future<Option<mesos::slave::ContainerLaunchInfo>> _prepare(
const ContainerID& containerId,
@@ -134,8 +135,7 @@ private:
const mesos::slave::ContainerConfig& containerConfig);
process::Future<Nothing> _recover(
- const hashset<ContainerID>& orphans,
- const std::vector<process::Future<Nothing>>& futures);
+ const hashset<ContainerID>& orphans);
process::Future<Nothing> __recover(
const hashset<ContainerID>& unknownOrphans,
@@ -179,10 +179,12 @@ private:
// Associates a container with the information to access its controllers.
hashmap<ContainerID, process::Owned<Info>> infos;
+
+ const process::Owned<DeviceManager> deviceManager;
};
} // namespace slave {
} // namespace internal {
} // namespace mesos {
-#endif
+#endif
\ No newline at end of file