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,