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);