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 3a83390eb [cgroups2] Report usage statistics for the cgroups v2 
isolator process.
3a83390eb is described below

commit 3a83390ebc118cb5e2837b5cb9eee79a3b8e4d42
Author: Devin Leamy <[email protected]>
AuthorDate: Wed Apr 24 17:39:04 2024 -0400

    [cgroups2] Report usage statistics for the cgroups v2 isolator process.
    
    Overrides `::usage` for the `Cgroups2IsolatorProcess` so the
    MesosContainerizer gets ResourceStatistics reported by the
    cgroups v2 controllers processes, for example the `CpuControllerProcess`.
---
 .../mesos/isolators/cgroups2/cgroups2.cpp          | 36 ++++++++++++++++++++++
 .../mesos/isolators/cgroups2/cgroups2.hpp          |  3 ++
 2 files changed, 39 insertions(+)

diff --git a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp 
b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
index 762e34380..a53e65cfb 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.cpp
@@ -674,6 +674,42 @@ Future<Nothing> Cgroups2IsolatorProcess::_update(
 }
 
 
+Future<ResourceStatistics> Cgroups2IsolatorProcess::usage(
+    const ContainerID& containerId)
+{
+  if (!infos.contains(containerId)) {
+    return Failure("Unknown container");
+  }
+
+  vector<Future<ResourceStatistics>> usages;
+  foreachvalue (const Owned<Controller>& controller, controllers) {
+    if (infos[containerId]->controllers.contains(controller->name())) {
+      usages.push_back(controller->usage(
+          containerId,
+          infos[containerId]->cgroup));
+    }
+  }
+
+  return await(usages)
+    .then([containerId](const vector<Future<ResourceStatistics>>& _usages) {
+      ResourceStatistics result;
+
+      foreach (const Future<ResourceStatistics>& statistics, _usages) {
+        if (statistics.isReady()) {
+          result.MergeFrom(statistics.get());
+        } else {
+          LOG(WARNING) << "Skipping resource statistic for container "
+                       << containerId << " because: "
+                       << (statistics.isFailed() ? statistics.failure()
+                                                 : "discarded");
+        }
+      }
+
+      return result;
+    });
+}
+
+
 Future<ContainerStatus> Cgroups2IsolatorProcess::status(
     const ContainerID& containerId)
 {
diff --git a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.hpp 
b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.hpp
index b2d06b490..9d58b9e7f 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups2/cgroups2.hpp
@@ -82,6 +82,9 @@ public:
       const google::protobuf::Map<
           std::string, Value::Scalar>& resourceLimits = {}) override;
 
+  process::Future<ResourceStatistics> usage(
+      const ContainerID& containerId) override;
+
   process::Future<ContainerStatus> status(
       const ContainerID& containerId) override;
 

Reply via email to