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

Reply via email to