You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2019/07/11 19:45:28 UTC

[mesos] 02/05: Added Role::reserved, Role::allocated, Role::offered to master.

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

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

commit d6738bcc86525e1ac661d2027a1934134426255f
Author: Benjamin Mahler <bm...@apache.org>
AuthorDate: Wed Jul 10 19:36:54 2019 -0400

    Added Role::reserved, Role::allocated, Role::offered to master.
    
    This provides a breakdown of resource quantities on a per-role
    basis, that would aid debugging if shown in the endpoints and
    roles table in the ui.
    
    Review: https://reviews.apache.org/r/71050
---
 src/master/master.hpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/src/master/master.hpp b/src/master/master.hpp
index a44caa4..e8def83 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -2779,6 +2779,72 @@ struct Role
     return resources;
   }
 
+  ResourceQuantities reserved() const
+  {
+    const std::string& role = this->role; // For cleaner captures.
+
+    ResourceQuantities total;
+
+    auto reservedToRoleSubtree = [&role](const Resource& r) {
+      return Resources::isReserved(r) &&
+        (Resources::reservationRole(r) == role ||
+         roles::isStrictSubroleOf(Resources::reservationRole(r), role));
+    };
+
+    foreachvalue (Slave* slave, master->slaves.registered) {
+      total += ResourceQuantities::fromResources(
+          slave->totalResources.filter(reservedToRoleSubtree));
+    }
+
+    return total;
+  }
+
+  ResourceQuantities allocated() const
+  {
+    const std::string& role = this->role; // For cleaner captures.
+
+    ResourceQuantities total;
+
+    auto allocatedToRoleSubtree = [&role](const Resource& r) {
+      CHECK(r.has_allocation_info());
+      return r.allocation_info().role() == role ||
+        roles::isStrictSubroleOf(r.allocation_info().role(), role);
+    };
+
+    // Loop over all frameworks since `frameworks` only tracks
+    // those that are directly subscribed to this role, and we
+    // need to sum all descendant role allocations.
+    foreachvalue (Framework* framework, master->frameworks.registered) {
+      total += ResourceQuantities::fromResources(
+          framework->totalUsedResources.filter(allocatedToRoleSubtree));
+    }
+
+    return total;
+  }
+
+  ResourceQuantities offered() const
+  {
+    const std::string& role = this->role; // For cleaner captures.
+
+    ResourceQuantities total;
+
+    auto allocatedToRoleSubtree = [&role](const Resource& r) {
+      CHECK(r.has_allocation_info());
+      return r.allocation_info().role() == role ||
+        roles::isStrictSubroleOf(r.allocation_info().role(), role);
+    };
+
+    // Loop over all frameworks since `frameworks` only tracks
+    // those that are directly subscribed to this role, and we
+    // need to sum all descendant role allocations.
+    foreachvalue (Framework* framework, master->frameworks.registered) {
+      total += ResourceQuantities::fromResources(
+          framework->totalOfferedResources.filter(allocatedToRoleSubtree));
+    }
+
+    return total;
+  }
+
   const Master* master;
   const std::string role;