You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mz...@apache.org on 2019/07/23 22:04:42 UTC

[mesos] 01/06: Added helpers to return resources allocated/reserved to a role subtree.

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

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

commit e9de5e945843649ac2a7a2a08463b70760370e7a
Author: Meng Zhu <mz...@mesosphere.io>
AuthorDate: Wed Jul 17 15:35:05 2019 -0700

    Added helpers to return resources allocated/reserved to a role subtree.
    
    Review: https://reviews.apache.org/r/71109
---
 include/mesos/resources.hpp    | 18 ++++++++++++++++++
 include/mesos/v1/resources.hpp | 18 ++++++++++++++++++
 src/common/resources.cpp       | 35 +++++++++++++++++++++++++++++++++++
 src/v1/resources.cpp           | 35 +++++++++++++++++++++++++++++++++++
 4 files changed, 106 insertions(+)

diff --git a/include/mesos/resources.hpp b/include/mesos/resources.hpp
index 3fc2c34..a6a052b 100644
--- a/include/mesos/resources.hpp
+++ b/include/mesos/resources.hpp
@@ -348,6 +348,16 @@ public:
   // Tests if the given Resource object is shared.
   static bool isShared(const Resource& resource);
 
+  // Returns true if the resource is allocated to the role subtree
+  // (i.e. either to the role itself or to its decedents).
+  static bool isAllocatedToRoleSubtree(
+      const Resource& resource, const std::string& role);
+
+  // Returns true if the resource is reserved to the role subtree
+  // (i.e. either to the role itself or to its decedents).
+  static bool isReservedToRoleSubtree(
+      const Resource& resource, const std::string& role);
+
   // Tests if the given Resource object has refined reservations.
   static bool hasRefinedReservations(const Resource& resource);
 
@@ -480,6 +490,14 @@ public:
   // definition of 'allocatableTo'.
   Resources allocatableTo(const std::string& role) const;
 
+  // Returns resources that are allocated to the role subtree
+  // (i.e. either to the role itself or to its decedents).
+  Resources allocatedToRoleSubtree(const std::string& role) const;
+
+  // Returns resources that are reserved to the role subtree
+  // (i.e. either to the role itself or to its decedents).
+  Resources reservedToRoleSubtree(const std::string& role) const;
+
   // Returns the unreserved resources.
   Resources unreserved() const;
 
diff --git a/include/mesos/v1/resources.hpp b/include/mesos/v1/resources.hpp
index 39c0403..e43d1fb 100644
--- a/include/mesos/v1/resources.hpp
+++ b/include/mesos/v1/resources.hpp
@@ -348,6 +348,16 @@ public:
   // Tests if the given Resource object is shared.
   static bool isShared(const Resource& resource);
 
+  // Returns true if the resource is allocated to the role subtree
+  // (i.e. either to the role itself or to its decedents).
+  static bool isAllocatedToRoleSubtree(
+      const Resource& resource, const std::string& role);
+
+  // Returns true if the resource is reserved to the role subtree
+  // (i.e. either to the role itself or to its decedents).
+  static bool isReservedToRoleSubtree(
+      const Resource& resource, const std::string& role);
+
   // Tests if the given Resource object has refined reservations.
   static bool hasRefinedReservations(const Resource& resource);
 
@@ -480,6 +490,14 @@ public:
   // definition of 'allocatableTo'.
   Resources allocatableTo(const std::string& role) const;
 
+  // Returns resources that are allocated to the role subtree
+  // (i.e. either to the role itself or to its decedents).
+  Resources allocatedToRoleSubtree(const std::string& role) const;
+
+  // Returns resources that are reserved to the role subtree
+  // (i.e. either to the role itself or to its decedents).
+  Resources reservedToRoleSubtree(const std::string& role) const;
+
   // Returns the unreserved resources.
   Resources unreserved() const;
 
diff --git a/src/common/resources.cpp b/src/common/resources.cpp
index 6e02d5c..fc7e86b 100644
--- a/src/common/resources.cpp
+++ b/src/common/resources.cpp
@@ -1260,6 +1260,29 @@ bool Resources::isShared(const Resource& resource)
 }
 
 
+bool Resources::isAllocatedToRoleSubtree(
+    const Resource& resource, const string& role)
+{
+  CHECK(!resource.has_role()) << resource;
+  CHECK(!resource.has_reservation()) << resource;
+
+  return resource.allocation_info().role() == role ||
+         roles::isStrictSubroleOf(resource.allocation_info().role(), role);
+}
+
+
+bool Resources::isReservedToRoleSubtree(
+    const Resource& resource, const string& role)
+{
+  CHECK(!resource.has_role()) << resource;
+  CHECK(!resource.has_reservation()) << resource;
+
+  return Resources::isReserved(resource) &&
+         (Resources::reservationRole(resource) == role ||
+          roles::isStrictSubroleOf(Resources::reservationRole(resource), role));
+}
+
+
 bool Resources::hasRefinedReservations(const Resource& resource)
 {
   CHECK(!resource.has_role()) << resource;
@@ -1631,6 +1654,18 @@ Resources Resources::allocatableTo(const string& role) const
 }
 
 
+Resources Resources::allocatedToRoleSubtree(const string& role) const
+{
+  return filter(lambda::bind(isAllocatedToRoleSubtree, lambda::_1, role));
+}
+
+
+Resources Resources::reservedToRoleSubtree(const string& role) const
+{
+  return filter(lambda::bind(isReservedToRoleSubtree, lambda::_1, role));
+}
+
+
 Resources Resources::unreserved() const
 {
   return filter(isUnreserved);
diff --git a/src/v1/resources.cpp b/src/v1/resources.cpp
index 25fb213..88da0a1 100644
--- a/src/v1/resources.cpp
+++ b/src/v1/resources.cpp
@@ -1280,6 +1280,29 @@ bool Resources::isShared(const Resource& resource)
 }
 
 
+bool Resources::isAllocatedToRoleSubtree(
+    const Resource& resource, const string& role)
+{
+  CHECK(!resource.has_role()) << resource;
+  CHECK(!resource.has_reservation()) << resource;
+
+  return resource.allocation_info().role() == role ||
+         roles::isStrictSubroleOf(resource.allocation_info().role(), role);
+}
+
+
+bool Resources::isReservedToRoleSubtree(
+    const Resource& resource, const string& role)
+{
+  CHECK(!resource.has_role()) << resource;
+  CHECK(!resource.has_reservation()) << resource;
+
+  return Resources::isReserved(resource) &&
+         (Resources::reservationRole(resource) == role ||
+          roles::isStrictSubroleOf(Resources::reservationRole(resource), role));
+}
+
+
 bool Resources::hasRefinedReservations(const Resource& resource)
 {
   CHECK(!resource.has_role()) << resource;
@@ -1649,6 +1672,18 @@ Resources Resources::allocatableTo(const string& role) const
 }
 
 
+Resources Resources::allocatedToRoleSubtree(const string& role) const
+{
+  return filter(lambda::bind(isAllocatedToRoleSubtree, lambda::_1, role));
+}
+
+
+Resources Resources::reservedToRoleSubtree(const string& role) const
+{
+  return filter(lambda::bind(isReservedToRoleSubtree, lambda::_1, role));
+}
+
+
 Resources Resources::unreserved() const
 {
   return filter(isUnreserved);