This is an automated email from the ASF dual-hosted git repository.

qianzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git

commit dbcde7be224595a21235e59ddb4c18c1ee66e80f
Author: Qian Zhang <zhq527...@gmail.com>
AuthorDate: Thu Dec 5 15:23:04 2019 +0800

    Updated the `update()` method of subsystem to handle resource limits.
    
    Review: https://reviews.apache.org/r/71885
---
 src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp      | 3 ++-
 src/slave/containerizer/mesos/isolators/cgroups/subsystem.cpp    | 9 ++++++---
 src/slave/containerizer/mesos/isolators/cgroups/subsystem.hpp    | 8 ++++++--
 .../containerizer/mesos/isolators/cgroups/subsystems/cpu.cpp     | 9 +++++----
 .../containerizer/mesos/isolators/cgroups/subsystems/cpu.hpp     | 4 +++-
 .../containerizer/mesos/isolators/cgroups/subsystems/memory.cpp  | 7 ++++---
 .../containerizer/mesos/isolators/cgroups/subsystems/memory.hpp  | 4 +++-
 7 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp 
b/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp
index 52d1479..8e858f4 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/cgroups.cpp
@@ -872,7 +872,8 @@ Future<Nothing> CgroupsIsolatorProcess::update(
       updates.push_back(subsystem->update(
           containerId,
           infos[containerId]->cgroup,
-          resourceRequests));
+          resourceRequests,
+          resourceLimits));
     }
   }
 
diff --git a/src/slave/containerizer/mesos/isolators/cgroups/subsystem.cpp 
b/src/slave/containerizer/mesos/isolators/cgroups/subsystem.cpp
index dc6c7aa..d9c8fa7 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/subsystem.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/subsystem.cpp
@@ -155,14 +155,16 @@ Future<mesos::slave::ContainerLimitation> 
Subsystem::watch(
 Future<Nothing> Subsystem::update(
     const ContainerID& containerId,
     const string& cgroup,
-    const Resources& resources)
+    const Resources& resourceRequests,
+    const google::protobuf::Map<string, Value::Scalar>& resourceLimits)
 {
   return process::dispatch(
       process.get(),
       &SubsystemProcess::update,
       containerId,
       cgroup,
-      resources);
+      resourceRequests,
+      resourceLimits);
 }
 
 
@@ -245,7 +247,8 @@ Future<ContainerLimitation> SubsystemProcess::watch(
 Future<Nothing> SubsystemProcess::update(
     const ContainerID& containerId,
     const string& cgroup,
-    const Resources& resources)
+    const Resources& resourceRequests,
+    const google::protobuf::Map<string, Value::Scalar>& resourceLimits)
 {
   return Nothing();
 }
diff --git a/src/slave/containerizer/mesos/isolators/cgroups/subsystem.hpp 
b/src/slave/containerizer/mesos/isolators/cgroups/subsystem.hpp
index a311ab4..088d417 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/subsystem.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/subsystem.hpp
@@ -133,7 +133,9 @@ public:
   process::Future<Nothing> update(
       const ContainerID& containerId,
       const std::string& cgroup,
-      const Resources& resources);
+      const Resources& resourceRequests,
+      const google::protobuf::Map<
+          std::string, Value::Scalar>& resourceLimits = {});
 
   /**
    * Gather resource usage statistics of the cgroups subsystem for the
@@ -210,7 +212,9 @@ public:
   virtual process::Future<Nothing> update(
       const ContainerID& containerId,
       const std::string& cgroup,
-      const Resources& resources);
+      const Resources& resourceRequests,
+      const google::protobuf::Map<
+          std::string, Value::Scalar>& resourceLimits = {});
 
   virtual process::Future<ResourceStatistics> usage(
       const ContainerID& containerId,
diff --git a/src/slave/containerizer/mesos/isolators/cgroups/subsystems/cpu.cpp 
b/src/slave/containerizer/mesos/isolators/cgroups/subsystems/cpu.cpp
index 960bd14..b3735f3 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/subsystems/cpu.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/subsystems/cpu.cpp
@@ -59,21 +59,22 @@ CpuSubsystemProcess::CpuSubsystemProcess(
 Future<Nothing> CpuSubsystemProcess::update(
     const ContainerID& containerId,
     const string& cgroup,
-    const Resources& resources)
+    const Resources& resourceRequests,
+    const google::protobuf::Map<string, Value::Scalar>& resourceLimits)
 {
-  if (resources.cpus().isNone()) {
+  if (resourceRequests.cpus().isNone()) {
     return Failure(
         "Failed to update subsystem '" + name() + "': "
         "No cpus resource given");
   }
 
-  double cpus = resources.cpus().get();
+  double cpus = resourceRequests.cpus().get();
 
   // Always set cpu.shares.
   uint64_t shares;
 
   if (flags.revocable_cpu_low_priority &&
-      resources.revocable().cpus().isSome()) {
+      resourceRequests.revocable().cpus().isSome()) {
     shares = std::max(
         (uint64_t) (CPU_SHARES_PER_CPU_REVOCABLE * cpus),
         MIN_CPU_SHARES);
diff --git a/src/slave/containerizer/mesos/isolators/cgroups/subsystems/cpu.hpp 
b/src/slave/containerizer/mesos/isolators/cgroups/subsystems/cpu.hpp
index 02e7163..b8f271b 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/subsystems/cpu.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/subsystems/cpu.hpp
@@ -52,7 +52,9 @@ public:
   process::Future<Nothing> update(
       const ContainerID& containerId,
       const std::string& cgroup,
-      const Resources& resources) override;
+      const Resources& resourceRequests,
+      const google::protobuf::Map<
+          std::string, Value::Scalar>& resourceLimits = {}) override;
 
   process::Future<ResourceStatistics> usage(
       const ContainerID& containerId,
diff --git 
a/src/slave/containerizer/mesos/isolators/cgroups/subsystems/memory.cpp 
b/src/slave/containerizer/mesos/isolators/cgroups/subsystems/memory.cpp
index 0896d37..88329f7 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/subsystems/memory.cpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/subsystems/memory.cpp
@@ -165,7 +165,8 @@ Future<ContainerLimitation> MemorySubsystemProcess::watch(
 Future<Nothing> MemorySubsystemProcess::update(
     const ContainerID& containerId,
     const string& cgroup,
-    const Resources& resources)
+    const Resources& resourceRequests,
+    const google::protobuf::Map<string, Value::Scalar>& resourceLimits)
 {
   if (!infos.contains(containerId)) {
     return Failure(
@@ -173,14 +174,14 @@ Future<Nothing> MemorySubsystemProcess::update(
         ": Unknown container");
   }
 
-  if (resources.mem().isNone()) {
+  if (resourceRequests.mem().isNone()) {
     return Failure(
         "Failed to update subsystem '" + name() + "'"
         ": No memory resource given");
   }
 
   // New limit.
-  Bytes mem = resources.mem().get();
+  Bytes mem = resourceRequests.mem().get();
   Bytes limit = std::max(mem, MIN_MEMORY);
 
   // Always set the soft limit.
diff --git 
a/src/slave/containerizer/mesos/isolators/cgroups/subsystems/memory.hpp 
b/src/slave/containerizer/mesos/isolators/cgroups/subsystems/memory.hpp
index 27d88e9..3bd22c5 100644
--- a/src/slave/containerizer/mesos/isolators/cgroups/subsystems/memory.hpp
+++ b/src/slave/containerizer/mesos/isolators/cgroups/subsystems/memory.hpp
@@ -70,7 +70,9 @@ public:
   process::Future<Nothing> update(
       const ContainerID& containerId,
       const std::string& cgroup,
-      const Resources& resources) override;
+      const Resources& resourceRequests,
+      const google::protobuf::Map<
+          std::string, Value::Scalar>& resourceLimits = {}) override;
 
   process::Future<ResourceStatistics> usage(
       const ContainerID& containerId,

Reply via email to