Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 51316200CC2 for ; Tue, 20 Jun 2017 11:46:41 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 4FF96160BEF; Tue, 20 Jun 2017 09:46:41 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 51DDF160BF2 for ; Tue, 20 Jun 2017 11:46:40 +0200 (CEST) Received: (qmail 9262 invoked by uid 500); 20 Jun 2017 09:46:39 -0000 Mailing-List: contact commits-help@mesos.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@mesos.apache.org Delivered-To: mailing list commits@mesos.apache.org Received: (qmail 9152 invoked by uid 99); 20 Jun 2017 09:46:39 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Jun 2017 09:46:39 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 55F53E361C; Tue, 20 Jun 2017 09:46:37 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: mpark@apache.org To: commits@mesos.apache.org Date: Tue, 20 Jun 2017 09:46:43 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [07/21] mesos git commit: Introduced a utility function `Resources::reservationRole` [7/20]. archived-at: Tue, 20 Jun 2017 09:46:41 -0000 Introduced a utility function `Resources::reservationRole` [7/20]. Review: https://reviews.apache.org/r/60015 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7877b46f Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7877b46f Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7877b46f Branch: refs/heads/master Commit: 7877b46f74730b61daf5179121139b40df26c2a6 Parents: 76b0f4e Author: Michael Park Authored: Sun Jun 18 21:15:14 2017 -0700 Committer: Michael Park Committed: Tue Jun 20 02:30:33 2017 -0700 ---------------------------------------------------------------------- include/mesos/resources.hpp | 4 ++++ include/mesos/v1/resources.hpp | 4 ++++ src/common/resources.cpp | 34 +++++++++++++++++++++------------- src/v1/resources.cpp | 34 +++++++++++++++++++++------------- 4 files changed, 50 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/7877b46f/include/mesos/resources.hpp ---------------------------------------------------------------------- diff --git a/include/mesos/resources.hpp b/include/mesos/resources.hpp index b6264e2..513b4c3 100644 --- a/include/mesos/resources.hpp +++ b/include/mesos/resources.hpp @@ -306,6 +306,10 @@ public: // Tests if the given Resource object has refined reservations. static bool hasRefinedReservations(const Resource& resource); + // Returns the role to which the given Resource object is reserved for. + // This must be called only when the resource is reserved! + static const std::string& reservationRole(const Resource& resource); + // Returns the summed up Resources given a hashmap. // // NOTE: While scalar resources such as "cpus" sum correctly, http://git-wip-us.apache.org/repos/asf/mesos/blob/7877b46f/include/mesos/v1/resources.hpp ---------------------------------------------------------------------- diff --git a/include/mesos/v1/resources.hpp b/include/mesos/v1/resources.hpp index b7e390c..eb7d70c 100644 --- a/include/mesos/v1/resources.hpp +++ b/include/mesos/v1/resources.hpp @@ -306,6 +306,10 @@ public: // Tests if the given Resource object has refined reservations. static bool hasRefinedReservations(const Resource& resource); + // Returns the role to which the given Resource object is reserved for. + // This must be called only when the resource is reserved! + static const std::string& reservationRole(const Resource& resource); + // Returns the summed up Resources given a hashmap. // // NOTE: While scalar resources such as "cpus" sum correctly, http://git-wip-us.apache.org/repos/asf/mesos/blob/7877b46f/src/common/resources.cpp ---------------------------------------------------------------------- diff --git a/src/common/resources.cpp b/src/common/resources.cpp index d1b9a9e..1dd058f 100644 --- a/src/common/resources.cpp +++ b/src/common/resources.cpp @@ -1080,11 +1080,8 @@ bool Resources::isReserved( CHECK(!resource.has_role()); CHECK(!resource.has_reservation()); - if (role.isSome()) { - return !isUnreserved(resource) && role.get() == resource.role(); - } else { - return !isUnreserved(resource); - } + return !isUnreserved(resource) && + (role.isNone() || role.get() == reservationRole(resource)); } @@ -1096,8 +1093,8 @@ bool Resources::isAllocatableTo( CHECK(!resource.has_reservation()); return isUnreserved(resource) || - role == resource.role() || - roles::isStrictSubroleOf(role, resource.role()); + role == reservationRole(resource) || + roles::isStrictSubroleOf(role, reservationRole(resource)); } @@ -1146,6 +1143,13 @@ bool Resources::hasRefinedReservations(const Resource& resource) return resource.reservations_size() > 1; } + +const string& Resources::reservationRole(const Resource& resource) +{ + CHECK_GE(resource.reservations_size(), 0); + return resource.reservations().rbegin()->role(); +} + ///////////////////////////////////////////////// // Public member functions. ///////////////////////////////////////////////// @@ -1356,7 +1360,7 @@ hashmap Resources::reservations() const foreach (const Resource_& resource_, resources) { if (isReserved(resource_.resource)) { - result[resource_.resource.role()].add(resource_); + result[reservationRole(resource_.resource)].add(resource_); } } @@ -1935,11 +1939,15 @@ Option Resources::find(const Resource& target) const Resources remaining = Resources(target).flatten(); // First look in the target role, then unreserved, then any remaining role. - vector> predicates = { - lambda::bind(isReserved, lambda::_1, target.role()), - isUnreserved, - [](const Resource&) { return true; } - }; + vector> predicates; + + if (isReserved(target)) { + predicates.push_back( + lambda::bind(isReserved, lambda::_1, reservationRole(target))); + } + + predicates.push_back(isUnreserved); + predicates.push_back([](const Resource&) { return true; }); foreach (const auto& predicate, predicates) { foreach (const Resource_& resource_, total.filter(predicate)) { http://git-wip-us.apache.org/repos/asf/mesos/blob/7877b46f/src/v1/resources.cpp ---------------------------------------------------------------------- diff --git a/src/v1/resources.cpp b/src/v1/resources.cpp index a853f80..a9b0233 100644 --- a/src/v1/resources.cpp +++ b/src/v1/resources.cpp @@ -1111,11 +1111,8 @@ bool Resources::isReserved( CHECK(!resource.has_role()); CHECK(!resource.has_reservation()); - if (role.isSome()) { - return !isUnreserved(resource) && role.get() == resource.role(); - } else { - return !isUnreserved(resource); - } + return !isUnreserved(resource) && + (role.isNone() || role.get() == reservationRole(resource)); } @@ -1127,8 +1124,8 @@ bool Resources::isAllocatableTo( CHECK(!resource.has_reservation()); return isUnreserved(resource) || - role == resource.role() || - roles::isStrictSubroleOf(role, resource.role()); + role == reservationRole(resource) || + roles::isStrictSubroleOf(role, reservationRole(resource)); } @@ -1177,6 +1174,13 @@ bool Resources::hasRefinedReservations(const Resource& resource) return resource.reservations_size() > 1; } + +const string& Resources::reservationRole(const Resource& resource) +{ + CHECK_GE(resource.reservations_size(), 0); + return resource.reservations().rbegin()->role(); +} + ///////////////////////////////////////////////// // Public member functions. ///////////////////////////////////////////////// @@ -1387,7 +1391,7 @@ hashmap Resources::reservations() const foreach (const Resource_& resource_, resources) { if (isReserved(resource_.resource)) { - result[resource_.resource.role()].add(resource_); + result[reservationRole(resource_.resource)].add(resource_); } } @@ -1966,11 +1970,15 @@ Option Resources::find(const Resource& target) const Resources remaining = Resources(target).flatten(); // First look in the target role, then unreserved, then any remaining role. - vector> predicates = { - lambda::bind(isReserved, lambda::_1, target.role()), - isUnreserved, - [](const Resource&) { return true; } - }; + vector> predicates; + + if (isReserved(target)) { + predicates.push_back( + lambda::bind(isReserved, lambda::_1, reservationRole(target))); + } + + predicates.push_back(isUnreserved); + predicates.push_back([](const Resource&) { return true; }); foreach (const auto& predicate, predicates) { foreach (const Resource_& resource_, total.filter(predicate)) {