You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by gi...@apache.org on 2018/03/05 23:19:01 UTC

[2/3] mesos-site git commit: Updated the website built from mesos SHA: 8f4552e.

http://git-wip-us.apache.org/repos/asf/mesos-site/blob/c6a7f738/content/api/latest/c++/hierarchical_8hpp_source.html
----------------------------------------------------------------------
diff --git a/content/api/latest/c++/hierarchical_8hpp_source.html b/content/api/latest/c++/hierarchical_8hpp_source.html
index 5e6e008..c67b385 100644
--- a/content/api/latest/c++/hierarchical_8hpp_source.html
+++ b/content/api/latest/c++/hierarchical_8hpp_source.html
@@ -498,194 +498,190 @@
 <div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;  <span class="comment">// (e.g. some tasks and/or executors are consuming resources under the role).</span></div>
 <div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a16c7474e21fd5aa3d219a0e46341038d">  445</a></span>&#160;  <a class="code" href="classhashmap.html">hashmap&lt;std::string, hashset&lt;FrameworkID&gt;</a>&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a16c7474e21fd5aa3d219a0e46341038d">roles</a>;</div>
 <div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;</div>
-<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;  <span class="comment">// Configured quota for each role, if any. Setting quota for a role</span></div>
-<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;  <span class="comment">// changes the order that the role&#39;s frameworks are offered</span></div>
-<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;  <span class="comment">// resources. Quota comes before fair share, hence setting quota moves</span></div>
-<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;  <span class="comment">// the role&#39;s frameworks towards the front of the allocation queue.</span></div>
-<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;  <span class="comment">// NOTE: We currently associate quota with roles, but this may</span></div>
-<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;  <span class="comment">// change in the future.</span></div>
-<div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a367074e000559d67efe3a377657d3a9f">  454</a></span>&#160;  <a class="code" href="classhashmap.html">hashmap&lt;std::string, Quota&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a367074e000559d67efe3a377657d3a9f">quotas</a>;</div>
-<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;</div>
-<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;  <span class="comment">// Aggregated resource reservations on all agents tied to a</span></div>
-<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;  <span class="comment">// particular role, if any. These are stripped scalar quantities</span></div>
-<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;  <span class="comment">// that contain no meta-data. Used for accounting resource</span></div>
-<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;  <span class="comment">// reservations for quota limit.</span></div>
-<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;  <span class="comment">// Only roles with non-empty reservations will be stored in the map.</span></div>
-<div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a9ee5817f34f7a0506b67c26a87cd5748">  462</a></span>&#160;  <a class="code" href="classhashmap.html">hashmap&lt;std::string, Resources&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a9ee5817f34f7a0506b67c26a87cd5748">reservationScalarQuantities</a>;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;  <span class="comment">// Configured quota for each role, if any. If a role does not have</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;  <span class="comment">// an entry here it has the default quota of (no guarantee, no limit).</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a367074e000559d67efe3a377657d3a9f">  449</a></span>&#160;  <a class="code" href="classhashmap.html">hashmap&lt;std::string, Quota&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a367074e000559d67efe3a377657d3a9f">quotas</a>;</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;  <span class="comment">// Aggregated resource reservations on all agents tied to a</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;  <span class="comment">// particular role, if any. These are stripped scalar quantities</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;  <span class="comment">// that contain no meta-data.</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;  <span class="comment">// Only roles with non-empty reservations will be stored in the map.</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a9ee5817f34f7a0506b67c26a87cd5748">  456</a></span>&#160;  <a class="code" href="classhashmap.html">hashmap&lt;std::string, Resources&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a9ee5817f34f7a0506b67c26a87cd5748">reservationScalarQuantities</a>;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;  <span class="comment">// Slaves to send offers for.</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a65468666990c8079dc0f3e716abb82b8">  459</a></span>&#160;  <a class="code" href="classOption.html">Option&lt;hashset&lt;std::string&gt;</a>&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a65468666990c8079dc0f3e716abb82b8">whitelist</a>;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;  <span class="comment">// Resources (by name) that will be excluded from a role&#39;s fair share.</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a650088517da5692657a58ab961376d77">  462</a></span>&#160;  <a class="code" href="classOption.html">Option&lt;std::set&lt;std::string&gt;</a>&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a650088517da5692657a58ab961376d77">fairnessExcludeResourceNames</a>;</div>
 <div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;</div>
-<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;  <span class="comment">// Slaves to send offers for.</span></div>
-<div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a65468666990c8079dc0f3e716abb82b8">  465</a></span>&#160;  <a class="code" href="classOption.html">Option&lt;hashset&lt;std::string&gt;</a>&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a65468666990c8079dc0f3e716abb82b8">whitelist</a>;</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;  <span class="comment">// Filter GPU resources based on the `GPU_RESOURCES` framework capability.</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a5b569bbf8a0b8a07d3219ae7718828ca">  465</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a5b569bbf8a0b8a07d3219ae7718828ca">filterGpuResources</a>;</div>
 <div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;</div>
-<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;  <span class="comment">// Resources (by name) that will be excluded from a role&#39;s fair share.</span></div>
-<div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a650088517da5692657a58ab961376d77">  468</a></span>&#160;  <a class="code" href="classOption.html">Option&lt;std::set&lt;std::string&gt;</a>&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a650088517da5692657a58ab961376d77">fairnessExcludeResourceNames</a>;</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;  <span class="comment">// The master&#39;s domain, if any.</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a64b69bd952f0b6768c115cfbc36a8b87">  468</a></span>&#160;  <a class="code" href="classOption.html">Option&lt;DomainInfo&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a64b69bd952f0b6768c115cfbc36a8b87">domain</a>;</div>
 <div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;</div>
-<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;  <span class="comment">// Filter GPU resources based on the `GPU_RESOURCES` framework capability.</span></div>
-<div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a5b569bbf8a0b8a07d3219ae7718828ca">  471</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a5b569bbf8a0b8a07d3219ae7718828ca">filterGpuResources</a>;</div>
-<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;</div>
-<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;  <span class="comment">// The master&#39;s domain, if any.</span></div>
-<div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a64b69bd952f0b6768c115cfbc36a8b87">  474</a></span>&#160;  <a class="code" href="classOption.html">Option&lt;DomainInfo&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a64b69bd952f0b6768c115cfbc36a8b87">domain</a>;</div>
-<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;</div>
-<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;  <span class="comment">// There are two stages of allocation. During the first stage resources</span></div>
-<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;  <span class="comment">// are allocated only to frameworks under roles with quota set. During</span></div>
-<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;  <span class="comment">// the second stage remaining resources that would not be required to</span></div>
-<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;  <span class="comment">// satisfy un-allocated quota are then allocated to frameworks under</span></div>
-<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;  <span class="comment">// roles with no quota set.</span></div>
-<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;  <span class="comment">// Each stage comprises two levels of sorting, hence &quot;hierarchical&quot;.</span></div>
-<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;  <span class="comment">// Level 1 sorts across roles:</span></div>
-<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;  <span class="comment">//   Currently, only the allocated portion of the reserved resources are</span></div>
-<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;  <span class="comment">//   accounted for fairness calculation.</span></div>
-<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;  <span class="comment">// TODO(mpark): Reserved resources should be accounted for fairness</span></div>
-<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;  <span class="comment">// calculation whether they are allocated or not, since they model a long or</span></div>
-<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;  <span class="comment">// forever running task. That is, the effect of reserving resources is</span></div>
-<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;  <span class="comment">// equivalent to launching a task in that the resources that make up the</span></div>
-<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;  <span class="comment">// reservation are not available to other roles as non-revocable.</span></div>
-<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;  <span class="comment">// Level 2 sorts across frameworks within a particular role:</span></div>
-<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;  <span class="comment">//   Reserved resources at this level are, and should be accounted for</span></div>
-<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;  <span class="comment">//   fairness calculation only if they are allocated. This is because</span></div>
-<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;  <span class="comment">//   reserved resources are fairly shared across the frameworks in the role.</span></div>
-<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;  <span class="comment">// The allocator relies on `Sorter`s to employ a particular sorting</span></div>
-<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;  <span class="comment">// algorithm. Each level has its own sorter and hence may have different</span></div>
-<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;  <span class="comment">// fairness calculations.</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;  <span class="comment">// There are two stages of allocation:</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;  <span class="comment">//   Stage 1: Allocate to satisfy quota guarantees.</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;  <span class="comment">//   Stage 2: Allocate above quota guarantees up to quota limits.</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;  <span class="comment">//            Note that we need to hold back enough &quot;headroom&quot;</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;  <span class="comment">//            to ensure that any unsatisfied quota can be</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;  <span class="comment">//            satisfied later.</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;  <span class="comment">// Each stage comprises two levels of sorting, hence &quot;hierarchical&quot;.</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;  <span class="comment">// Level 1 sorts across roles:</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;  <span class="comment">//   Currently, only the allocated portion of the reserved resources are</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;  <span class="comment">//   accounted for fairness calculation.</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;  <span class="comment">// TODO(mpark): Reserved resources should be accounted for fairness</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;  <span class="comment">// calculation whether they are allocated or not, since they model a long or</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;  <span class="comment">// forever running task. That is, the effect of reserving resources is</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;  <span class="comment">// equivalent to launching a task in that the resources that make up the</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;  <span class="comment">// reservation are not available to other roles as non-revocable.</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;  <span class="comment">// Level 2 sorts across frameworks within a particular role:</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;  <span class="comment">//   Reserved resources at this level are, and should be accounted for</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;  <span class="comment">//   fairness calculation only if they are allocated. This is because</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;  <span class="comment">//   reserved resources are fairly shared across the frameworks in the role.</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;  <span class="comment">// The allocator relies on `Sorter`s to employ a particular sorting</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;  <span class="comment">// algorithm. Each level has its own sorter and hence may have different</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;  <span class="comment">// fairness calculations.</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;  <span class="comment">// NOTE: The hierarchical allocator considers revocable resources as</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;  <span class="comment">// regular resources when doing fairness calculations.</span></div>
 <div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;  <span class="comment">// NOTE: The hierarchical allocator considers revocable resources as</span></div>
-<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;  <span class="comment">// regular resources when doing fairness calculations.</span></div>
-<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;  <span class="comment">// TODO(vinod): Consider using a different fairness algorithm for</span></div>
-<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;  <span class="comment">// revocable resources.</span></div>
-<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;</div>
-<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;  <span class="comment">// A sorter for active roles. This sorter determines the order in which</span></div>
-<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;  <span class="comment">// roles are allocated resources during Level 1 of the second stage.</span></div>
-<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;  <span class="comment">// The total cluster resources are used as the resource pool.</span></div>
-<div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a890bb44d4f46f708e8df0514036d44ca">  511</a></span>&#160;  <a class="code" href="classprocess_1_1Owned.html">process::Owned&lt;Sorter&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a890bb44d4f46f708e8df0514036d44ca">roleSorter</a>;</div>
-<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;</div>
-<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;  <span class="comment">// A dedicated sorter for roles for which quota is set. This sorter</span></div>
-<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;  <span class="comment">// determines the order in which quota&#39;ed roles are allocated resources</span></div>
-<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;  <span class="comment">// during Level 1 of the first stage. Quota&#39;ed roles have resources</span></div>
-<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;  <span class="comment">// allocated up to their allocated quota (the first stage) prior to</span></div>
-<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;  <span class="comment">// non-quota&#39;ed roles (the second stage). Since only non-revocable</span></div>
-<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;  <span class="comment">// resources are available for quota, the total cluster non-revocable</span></div>
-<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;  <span class="comment">// resoures are used as the resource pool.</span></div>
-<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;  <span class="comment">// NOTE: A role appears in `quotaRoleSorter` if it has a quota (even if</span></div>
-<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;  <span class="comment">// no frameworks are currently registered in that role). In contrast,</span></div>
-<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;  <span class="comment">// `roleSorter` only contains entries for roles with one or more</span></div>
-<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;  <span class="comment">// registered frameworks.</span></div>
-<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;  <span class="comment">// NOTE: We do not include revocable resources in the quota role sorter,</span></div>
-<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;  <span class="comment">// because the quota role sorter&#39;s job is to perform fair sharing between</span></div>
-<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;  <span class="comment">// the quota roles as it pertains to their level of quota satisfaction.</span></div>
-<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;  <span class="comment">// Since revocable resources do not increase a role&#39;s level of satisfaction</span></div>
-<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;  <span class="comment">// toward its quota, we choose to exclude them from the quota role sorter.</span></div>
-<div class="line"><a name="l00531"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#adc8f37c1d8b0394cc23178491d44c2e2">  531</a></span>&#160;  <a class="code" href="classprocess_1_1Owned.html">process::Owned&lt;Sorter&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#adc8f37c1d8b0394cc23178491d44c2e2">quotaRoleSorter</a>;</div>
-<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;</div>
-<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;  <span class="comment">// A collection of sorters, one per active role. Each sorter determines</span></div>
-<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;  <span class="comment">// the order in which frameworks that belong to the same role are allocated</span></div>
-<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;  <span class="comment">// resources inside the role&#39;s share. These sorters are used during Level 2</span></div>
-<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;  <span class="comment">// for both the first and the second stages. Since frameworks are sharing</span></div>
-<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;  <span class="comment">// the resources allocated to a role, the role&#39;s allocation is used as</span></div>
-<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;  <span class="comment">// the resource pool for each role specific framework sorter.</span></div>
-<div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a286878cde1e175a044fb6bb934a9b941">  539</a></span>&#160;  <a class="code" href="classhashmap.html">hashmap&lt;std::string, process::Owned&lt;Sorter&gt;</a>&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a286878cde1e175a044fb6bb934a9b941">frameworkSorters</a>;</div>
-<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;</div>
-<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;  <span class="comment">// Factory function for framework sorters.</span></div>
-<div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a4612ef1ebd4f96f80e35a216a79e6a8d">  542</a></span>&#160;  <span class="keyword">const</span> std::function&lt;Sorter*()&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a4612ef1ebd4f96f80e35a216a79e6a8d">frameworkSorterFactory</a>;</div>
-<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;</div>
-<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;<span class="keyword">private</span>:</div>
-<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;  <span class="keywordtype">bool</span> isFrameworkTrackedUnderRole(</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;  <span class="comment">// TODO(vinod): Consider using a different fairness algorithm for</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;  <span class="comment">// revocable resources.</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;  <span class="comment">// A sorter for active roles. This sorter determines the order in which</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;  <span class="comment">// roles are allocated resources during Level 1 of the second stage.</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;  <span class="comment">// The total cluster resources are used as the resource pool.</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a890bb44d4f46f708e8df0514036d44ca">  508</a></span>&#160;  <a class="code" href="classprocess_1_1Owned.html">process::Owned&lt;Sorter&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a890bb44d4f46f708e8df0514036d44ca">roleSorter</a>;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;  <span class="comment">// TODO(bmahler): Remove this in favor of either using the same sorting</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;  <span class="comment">// between satisfying guarantees and bursting above guarantees up to</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;  <span class="comment">// limits, or have a different sorting technique specifically for</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;  <span class="comment">// satisfying guarantees (e.g. MESOS-8026). This is tech debt from</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;  <span class="comment">// when a &quot;quota role&quot; was considered different from a &quot;non-quota&quot;</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;  <span class="comment">// role. However, they are the same, one just has a default quota.</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;  <span class="comment">// A dedicated sorter for roles that have a non-default quota.</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;  <span class="comment">// This sorter determines the order in which guarantees are allocated</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;  <span class="comment">// during Level 1 of the first stage. Since only non-revocable</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;  <span class="comment">// resources are available for quota, the total cluster non-revocable</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;  <span class="comment">// resources are used as the resource pool.</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;  <span class="comment">// NOTE: A role appears in `quotaRoleSorter` if it has a non-default</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;  <span class="comment">// quota (even if no frameworks are currently registered in that role).</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;  <span class="comment">// In contrast, `roleSorter` only contains entries for roles with one</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;  <span class="comment">// or more registered frameworks.</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#adc8f37c1d8b0394cc23178491d44c2e2">  527</a></span>&#160;  <a class="code" href="classprocess_1_1Owned.html">process::Owned&lt;Sorter&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#adc8f37c1d8b0394cc23178491d44c2e2">quotaRoleSorter</a>;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;  <span class="comment">// A collection of sorters, one per active role. Each sorter determines</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;  <span class="comment">// the order in which frameworks that belong to the same role are allocated</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;  <span class="comment">// resources inside the role&#39;s share. These sorters are used during Level 2</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;  <span class="comment">// for both the first and the second stages. Since frameworks are sharing</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;  <span class="comment">// the resources allocated to a role, the role&#39;s allocation is used as</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;  <span class="comment">// the resource pool for each role specific framework sorter.</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a286878cde1e175a044fb6bb934a9b941">  535</a></span>&#160;  <a class="code" href="classhashmap.html">hashmap&lt;std::string, process::Owned&lt;Sorter&gt;</a>&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a286878cde1e175a044fb6bb934a9b941">frameworkSorters</a>;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;  <span class="comment">// Factory function for framework sorters.</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a4612ef1ebd4f96f80e35a216a79e6a8d">  538</a></span>&#160;  <span class="keyword">const</span> std::function&lt;Sorter*()&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a4612ef1ebd4f96f80e35a216a79e6a8d">frameworkSorterFactory</a>;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;  <span class="keywordtype">bool</span> isFrameworkTrackedUnderRole(</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;      <span class="keyword">const</span> FrameworkID&amp; frameworkId,</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;      <span class="keyword">const</span> std::string&amp; role) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;  <span class="keywordtype">void</span> trackFrameworkUnderRole(</div>
 <div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;      <span class="keyword">const</span> FrameworkID&amp; frameworkId,</div>
-<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;      <span class="keyword">const</span> std::string&amp; role) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;      <span class="keyword">const</span> std::string&amp; role);</div>
 <div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;</div>
-<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;  <span class="keywordtype">void</span> trackFrameworkUnderRole(</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;  <span class="keywordtype">void</span> untrackFrameworkUnderRole(</div>
 <div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;      <span class="keyword">const</span> FrameworkID&amp; frameworkId,</div>
 <div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;      <span class="keyword">const</span> std::string&amp; role);</div>
 <div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;</div>
-<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;  <span class="keywordtype">void</span> untrackFrameworkUnderRole(</div>
-<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;      <span class="keyword">const</span> FrameworkID&amp; frameworkId,</div>
-<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;      <span class="keyword">const</span> std::string&amp; role);</div>
-<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;</div>
-<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;  <span class="comment">// `trackReservations` and `untrackReservations` are helpers</span></div>
-<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;  <span class="comment">// to track role resource reservations. We need to keep</span></div>
-<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;  <span class="comment">// track of reservations to enforce role quota limit</span></div>
-<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;  <span class="comment">// in the presence of unallocated reservations. See MESOS-4527.</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;  <span class="comment">// `trackReservations` and `untrackReservations` are helpers</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;  <span class="comment">// to track role resource reservations. We need to keep</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;  <span class="comment">// track of reservations to enforce role quota limit</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;  <span class="comment">// in the presence of unallocated reservations. See MESOS-4527.</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;  <span class="comment">// TODO(mzhu): Ideally, we want these helpers to instead track the</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;  <span class="comment">// reservations as *allocated* in the sorters even when the</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;  <span class="comment">// reservations have not been allocated yet. This will help to:</span></div>
 <div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;  <span class="comment">// TODO(mzhu): Ideally, we want these helpers to instead track the</span></div>
-<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;  <span class="comment">// reservations as *allocated* in the sorters even when the</span></div>
-<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;  <span class="comment">// reservations have not been allocated yet. This will help to:</span></div>
-<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  <span class="comment">//   (1) Solve the fairness issue when roles with unallocated</span></div>
-<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;  <span class="comment">//       reservations may game the allocator (See MESOS-8299).</span></div>
-<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;  <span class="comment">//</span></div>
-<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;  <span class="comment">//   (2) Simplify the quota enforcement logic -- the allocator</span></div>
-<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;  <span class="comment">//       would no longer need to track reservations separately.</span></div>
-<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;  <span class="keywordtype">void</span> trackReservations(</div>
-<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;      <span class="keyword">const</span> <a class="code" href="classhashmap.html">hashmap&lt;std::string, Resources&gt;</a>&amp; reservations);</div>
-<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;</div>
-<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;  <span class="keywordtype">void</span> untrackReservations(</div>
-<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;      <span class="keyword">const</span> <a class="code" href="classhashmap.html">hashmap&lt;std::string, Resources&gt;</a>&amp; reservations);</div>
-<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;</div>
-<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;  <span class="comment">// Helper to update the agent&#39;s total resources maintained in the allocator</span></div>
-<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;  <span class="comment">// and the role and quota sorters (whose total resources match the agent&#39;s</span></div>
-<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;  <span class="comment">// total resources). Returns true iff the stored agent total was changed.</span></div>
-<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;  <span class="keywordtype">bool</span> updateSlaveTotal(<span class="keyword">const</span> SlaveID&amp; slaveId, <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; total);</div>
-<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;</div>
-<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;  <span class="comment">// Helper that returns true if the given agent is located in a</span></div>
-<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;  <span class="comment">// different region than the master. This can only be the case if</span></div>
-<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;  <span class="comment">// the agent and the master are both configured with a fault domain.</span></div>
-<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;  <span class="keywordtype">bool</span> isRemoteSlave(<span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave.html">Slave</a>&amp; slave) <span class="keyword">const</span>;</div>
-<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;</div>
-<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;  <span class="comment">// Helper to track allocated resources on an agent.</span></div>
-<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;  <span class="keywordtype">void</span> trackAllocatedResources(</div>
-<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;      <span class="keyword">const</span> SlaveID&amp; slaveId,</div>
-<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;      <span class="keyword">const</span> FrameworkID&amp; frameworkId,</div>
-<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; allocated);</div>
-<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;</div>
-<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;  <span class="comment">// Helper to untrack resources that are no longer allocated on an agent.</span></div>
-<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;  <span class="keywordtype">void</span> untrackAllocatedResources(</div>
-<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;      <span class="keyword">const</span> SlaveID&amp; slaveId,</div>
-<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;      <span class="keyword">const</span> FrameworkID&amp; frameworkId,</div>
-<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; allocated);</div>
-<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;</div>
-<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;  <span class="comment">// Helper that removes all existing offer filters for the given slave</span></div>
-<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;  <span class="comment">// id.</span></div>
-<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;  <span class="keywordtype">void</span> removeFilters(<span class="keyword">const</span> SlaveID&amp; slaveId);</div>
-<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;};</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;  <span class="comment">//   (1) Solve the fairness issue when roles with unallocated</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;  <span class="comment">//       reservations may game the allocator (See MESOS-8299).</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;  <span class="comment">//</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;  <span class="comment">//   (2) Simplify the quota enforcement logic -- the allocator</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  <span class="comment">//       would no longer need to track reservations separately.</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;  <span class="keywordtype">void</span> trackReservations(</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;      <span class="keyword">const</span> <a class="code" href="classhashmap.html">hashmap&lt;std::string, Resources&gt;</a>&amp; reservations);</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;  <span class="keywordtype">void</span> untrackReservations(</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;      <span class="keyword">const</span> <a class="code" href="classhashmap.html">hashmap&lt;std::string, Resources&gt;</a>&amp; reservations);</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;  <span class="comment">// Helper to update the agent&#39;s total resources maintained in the allocator</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;  <span class="comment">// and the role and quota sorters (whose total resources match the agent&#39;s</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;  <span class="comment">// total resources). Returns true iff the stored agent total was changed.</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;  <span class="keywordtype">bool</span> updateSlaveTotal(<span class="keyword">const</span> SlaveID&amp; slaveId, <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; total);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;  <span class="comment">// Helper that returns true if the given agent is located in a</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;  <span class="comment">// different region than the master. This can only be the case if</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;  <span class="comment">// the agent and the master are both configured with a fault domain.</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;  <span class="keywordtype">bool</span> isRemoteSlave(<span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave.html">Slave</a>&amp; slave) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;  <span class="comment">// Helper to track allocated resources on an agent.</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;  <span class="keywordtype">void</span> trackAllocatedResources(</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;      <span class="keyword">const</span> SlaveID&amp; slaveId,</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;      <span class="keyword">const</span> FrameworkID&amp; frameworkId,</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; allocated);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;  <span class="comment">// Helper to untrack resources that are no longer allocated on an agent.</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;  <span class="keywordtype">void</span> untrackAllocatedResources(</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;      <span class="keyword">const</span> SlaveID&amp; slaveId,</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;      <span class="keyword">const</span> FrameworkID&amp; frameworkId,</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; allocated);</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;  <span class="comment">// Helper that removes all existing offer filters for the given slave</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;  <span class="comment">// id.</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;  <span class="keywordtype">void</span> removeFilters(<span class="keyword">const</span> SlaveID&amp; slaveId);</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;};</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;} <span class="comment">// namespace internal {</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;</div>
 <div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;</div>
-<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;</div>
-<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;} <span class="comment">// namespace internal {</span></div>
-<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;</div>
-<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;</div>
-<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;<span class="comment">// We map the templatized version of the `HierarchicalAllocatorProcess` to one</span></div>
-<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;<span class="comment">// that relies on sorter factories in the internal namespace. This allows us</span></div>
-<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;<span class="comment">// to keep the implementation of the allocator in the implementation file.</span></div>
-<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="keyword">template</span> &lt;</div>
-<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    <span class="keyword">typename</span> RoleSorter,</div>
-<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    <span class="keyword">typename</span> FrameworkSorter,</div>
-<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    <span class="keyword">typename</span> QuotaRoleSorter&gt;</div>
-<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;<span class="keyword">class </span><a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html">HierarchicalAllocatorProcess</a></div>
-<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;  : <span class="keyword">public</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html">internal::HierarchicalAllocatorProcess</a></div>
-<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;{</div>
-<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html#af1ad7f99497807e029ac8d2654abaa4f">  619</a></span>&#160;  <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html#af1ad7f99497807e029ac8d2654abaa4f">HierarchicalAllocatorProcess</a>()</div>
-<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    : <a class="code" href="classprocess_1_1ProcessBase.html#a318038bacd95e4260864533f7cfe12fd">ProcessBase</a>(<a class="code" href="namespaceos.html#ae19e4161a51b86a1f330f3bf1dc75389">process</a>::ID::<a class="code" href="namespaceprocess_1_1ID.html#aeb11a48c9def1da169d8455a30d0ee39">generate</a>(<span class="stringliteral">&quot;hierarchical-allocator&quot;</span>)),</div>
-<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;      internal::<a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html">HierarchicalAllocatorProcess</a>(</div>
-<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;          [this]() -&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1Sorter.html">Sorter</a>* {</div>
-<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">new</span> RoleSorter(this-&gt;<span class="keyword">self</span>(), <span class="stringliteral">&quot;allocator/mesos/roles/&quot;</span>);</div>
-<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;          },</div>
-<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;          []() -&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1Sorter.html">Sorter</a>* { <span class="keywordflow">return</span> <span class="keyword">new</span> FrameworkSorter(); },</div>
-<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;          []() -&gt; Sorter* { <span class="keywordflow">return</span> <span class="keyword">new</span> QuotaRoleSorter(); }) {}</div>
-<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;};</div>
-<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;</div>
-<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;} <span class="comment">// namespace allocator {</span></div>
-<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;} <span class="comment">// namespace master {</span></div>
-<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;} <span class="comment">// namespace internal {</span></div>
-<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;} <span class="comment">// namespace mesos {</span></div>
-<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;</div>
-<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;<span class="preprocessor">#endif // __MASTER_ALLOCATOR_MESOS_HIERARCHICAL_HPP__</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;<span class="comment">// We map the templatized version of the `HierarchicalAllocatorProcess` to one</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;<span class="comment">// that relies on sorter factories in the internal namespace. This allows us</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;<span class="comment">// to keep the implementation of the allocator in the implementation file.</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;<span class="keyword">template</span> &lt;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    <span class="keyword">typename</span> RoleSorter,</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <span class="keyword">typename</span> FrameworkSorter,</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;    <span class="keyword">typename</span> QuotaRoleSorter&gt;</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="keyword">class </span><a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html">HierarchicalAllocatorProcess</a></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;  : <span class="keyword">public</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html">internal::HierarchicalAllocatorProcess</a></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;{</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00615"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html#af1ad7f99497807e029ac8d2654abaa4f">  615</a></span>&#160;  <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html#af1ad7f99497807e029ac8d2654abaa4f">HierarchicalAllocatorProcess</a>()</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    : <a class="code" href="classprocess_1_1ProcessBase.html#a318038bacd95e4260864533f7cfe12fd">ProcessBase</a>(<a class="code" href="namespaceos.html#ae19e4161a51b86a1f330f3bf1dc75389">process</a>::ID::<a class="code" href="namespaceprocess_1_1ID.html#aeb11a48c9def1da169d8455a30d0ee39">generate</a>(<span class="stringliteral">&quot;hierarchical-allocator&quot;</span>)),</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;      internal::<a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html">HierarchicalAllocatorProcess</a>(</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;          [this]() -&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1Sorter.html">Sorter</a>* {</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">new</span> RoleSorter(this-&gt;<span class="keyword">self</span>(), <span class="stringliteral">&quot;allocator/mesos/roles/&quot;</span>);</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;          },</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;          []() -&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1Sorter.html">Sorter</a>* { <span class="keywordflow">return</span> <span class="keyword">new</span> FrameworkSorter(); },</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;          []() -&gt; Sorter* { <span class="keywordflow">return</span> <span class="keyword">new</span> QuotaRoleSorter(); }) {}</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;};</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;} <span class="comment">// namespace allocator {</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;} <span class="comment">// namespace master {</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;} <span class="comment">// namespace internal {</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;} <span class="comment">// namespace mesos {</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;<span class="preprocessor">#endif // __MASTER_ALLOCATOR_MESOS_HIERARCHICAL_HPP__</span></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a2b43be40bc7ad484b83b055d13cf65b4"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a2b43be40bc7ad484b83b055d13cf65b4">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::allocation</a></div><div class="ttdeci">Option&lt; process::Future&lt; Nothing &gt; &gt; allocation</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:439</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_ab4dcf0920448f674bd9c71d4eb40dd6b"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#ab4dcf0920448f674bd9c71d4eb40dd6b">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::recoverResources</a></div><div class="ttdeci">void recoverResources(const FrameworkID &amp;frameworkId, const SlaveID &amp;slaveId, const Resources &amp;resources, const Option&lt; Filters &gt; &amp;filters)</div></div>
 <div class="ttc" id="namespacemesos_1_1internal_1_1master_1_1allocator_html_afd3f57eb292f0dcfaf611c06f874ec7f"><div class="ttname"><a href="namespacemesos_1_1internal_1_1master_1_1allocator.html#afd3f57eb292f0dcfaf611c06f874ec7f">mesos::internal::master::allocator::HierarchicalDRFAllocatorProcess</a></div><div class="ttdeci">HierarchicalAllocatorProcess&lt; DRFSorter, DRFSorter, DRFSorter &gt; HierarchicalDRFAllocatorProcess</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:55</div></div>
@@ -695,7 +691,7 @@
 <div class="ttc" id="structNothing_html"><div class="ttname"><a href="structNothing.html">Nothing</a></div><div class="ttdef"><b>Definition:</b> nothing.hpp:16</div></div>
 <div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_1_1Maintenance_html"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_1_1Maintenance.html">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::Slave::Maintenance</a></div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:399</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a7f494dfbf653c87d3c88089841404762"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a7f494dfbf653c87d3c88089841404762">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::removeFramework</a></div><div class="ttdeci">void removeFramework(const FrameworkID &amp;frameworkId)</div></div>
-<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a5b569bbf8a0b8a07d3219ae7718828ca"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a5b569bbf8a0b8a07d3219ae7718828ca">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::filterGpuResources</a></div><div class="ttdeci">bool filterGpuResources</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:471</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a5b569bbf8a0b8a07d3219ae7718828ca"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a5b569bbf8a0b8a07d3219ae7718828ca">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::filterGpuResources</a></div><div class="ttdeci">bool filterGpuResources</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:465</div></div>
 <div class="ttc" id="classOption_html"><div class="ttname"><a href="classOption.html">Option</a></div><div class="ttdef"><b>Definition:</b> option.hpp:28</div></div>
 <div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Framework_html_a56b6fba37d8c466ad48c0e50ab1ce92d"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Framework.html#a56b6fba37d8c466ad48c0e50ab1ce92d">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::Framework::offerFilters</a></div><div class="ttdeci">hashmap&lt; std::string, hashmap&lt; SlaveID, hashset&lt; OfferFilter * &gt; &gt; &gt; offerFilters</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:322</div></div>
 <div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_1_1Maintenance_html_a0b9b6570de9c59236995ff57e3f5b75a"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_1_1Maintenance.html#a0b9b6570de9c59236995ff57e3f5b75a">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::Slave::Maintenance::offersOutstanding</a></div><div class="ttdeci">hashset&lt; FrameworkID &gt; offersOutstanding</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:421</div></div>
@@ -705,7 +701,7 @@
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_ac6adbe7f44a82c49396888a88b8073d4"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#ac6adbe7f44a82c49396888a88b8073d4">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::suppressOffers</a></div><div class="ttdeci">void suppressOffers(const FrameworkID &amp;frameworkId, const std::set&lt; std::string &gt; &amp;roles)</div></div>
 <div class="ttc" id="classhashset_html"><div class="ttname"><a href="classhashset.html">hashset&lt; std::string &gt;</a></div></div>
 <div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_html_a48c1b27dd3c249141df18a3bd346a36d"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave.html#a48c1b27dd3c249141df18a3bd346a36d">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::Slave::info</a></div><div class="ttdeci">SlaveInfo info</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:389</div></div>
-<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a286878cde1e175a044fb6bb934a9b941"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a286878cde1e175a044fb6bb934a9b941">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::frameworkSorters</a></div><div class="ttdeci">hashmap&lt; std::string, process::Owned&lt; Sorter &gt; &gt; frameworkSorters</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:539</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a286878cde1e175a044fb6bb934a9b941"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a286878cde1e175a044fb6bb934a9b941">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::frameworkSorters</a></div><div class="ttdeci">hashmap&lt; std::string, process::Owned&lt; Sorter &gt; &gt; frameworkSorters</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:535</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_aaa1ce6cba8a90007ee2c9d2f87dae895"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#aaa1ce6cba8a90007ee2c9d2f87dae895">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::updateAllocation</a></div><div class="ttdeci">void updateAllocation(const FrameworkID &amp;frameworkId, const SlaveID &amp;slaveId, const Resources &amp;offeredResources, const std::vector&lt; ResourceConversion &gt; &amp;conversions)</div></div>
 <div class="ttc" id="structmesos_1_1internal_1_1protobuf_1_1slave_1_1Capabilities_html"><div class="ttname"><a href="structmesos_1_1internal_1_1protobuf_1_1slave_1_1Capabilities.html">mesos::internal::protobuf::slave::Capabilities</a></div><div class="ttdef"><b>Definition:</b> protobuf_utils.hpp:253</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a3ad2f1c1ed3395ca6e5d4668f7d65b16"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a3ad2f1c1ed3395ca6e5d4668f7d65b16">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::activateFramework</a></div><div class="ttdeci">void activateFramework(const FrameworkID &amp;frameworkId)</div></div>
@@ -715,7 +711,7 @@
 <div class="ttc" id="namespaceproc_html_a34396c6140a28f583dc13fee3c3c35d4"><div class="ttname"><a href="namespaceproc.html#a34396c6140a28f583dc13fee3c3c35d4">proc::status</a></div><div class="ttdeci">Result&lt; ProcessStatus &gt; status(pid_t pid)</div><div class="ttdef"><b>Definition:</b> proc.hpp:166</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a9487bd3b10f4c8c3837551c961497bf6"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a9487bd3b10f4c8c3837551c961497bf6">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::expectedAgentCount</a></div><div class="ttdeci">Option&lt; int &gt; expectedAgentCount</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:289</div></div>
 <div class="ttc" id="classmesos_1_1Resources_html"><div class="ttname"><a href="classmesos_1_1Resources.html">mesos::Resources</a></div><div class="ttdef"><b>Definition:</b> resources.hpp:79</div></div>
-<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess_html_af1ad7f99497807e029ac8d2654abaa4f"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html#af1ad7f99497807e029ac8d2654abaa4f">mesos::internal::master::allocator::HierarchicalAllocatorProcess::HierarchicalAllocatorProcess</a></div><div class="ttdeci">HierarchicalAllocatorProcess()</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:619</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess_html_af1ad7f99497807e029ac8d2654abaa4f"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html#af1ad7f99497807e029ac8d2654abaa4f">mesos::internal::master::allocator::HierarchicalAllocatorProcess::HierarchicalAllocatorProcess</a></div><div class="ttdeci">HierarchicalAllocatorProcess()</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:615</div></div>
 <div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_html_a8ba5026ba665b3c0f8c52ea3f101c24d"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave.html#a8ba5026ba665b3c0f8c52ea3f101c24d">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::Slave::activated</a></div><div class="ttdeci">bool activated</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:383</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a9e122112ca8eca4b89e0597ebafb6056"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a9e122112ca8eca4b89e0597ebafb6056">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::resume</a></div><div class="ttdeci">void resume()</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_abf75366546bda737ba22d994b6a7fb20"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#abf75366546bda737ba22d994b6a7fb20">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::slaves</a></div><div class="ttdeci">hashmap&lt; SlaveID, Slave &gt; slaves</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:430</div></div>
@@ -725,12 +721,12 @@
 <div class="ttc" id="classDuration_html"><div class="ttname"><a href="classDuration.html">Duration</a></div><div class="ttdef"><b>Definition:</b> duration.hpp:32</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a71547c982e85db6b83e562732107f578"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a71547c982e85db6b83e562732107f578">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::isFiltered</a></div><div class="ttdeci">bool isFiltered(const FrameworkID &amp;frameworkId, const std::string &amp;role, const SlaveID &amp;slaveId, const Resources &amp;resources) const </div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1MesosAllocator_html"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1MesosAllocator.html">mesos::internal::master::allocator::MesosAllocator</a></div><div class="ttdef"><b>Definition:</b> allocator.hpp:41</div></div>
-<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_adc8f37c1d8b0394cc23178491d44c2e2"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#adc8f37c1d8b0394cc23178491d44c2e2">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::quotaRoleSorter</a></div><div class="ttdeci">process::Owned&lt; Sorter &gt; quotaRoleSorter</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:531</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_adc8f37c1d8b0394cc23178491d44c2e2"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#adc8f37c1d8b0394cc23178491d44c2e2">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::quotaRoleSorter</a></div><div class="ttdeci">process::Owned&lt; Sorter &gt; quotaRoleSorter</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:527</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a0e5859a3d12ed5e1ef6bf5ae1efe7525"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a0e5859a3d12ed5e1ef6bf5ae1efe7525">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::pause</a></div><div class="ttdeci">void pause()</div></div>
 <div class="ttc" id="lambda_8hpp_html"><div class="ttname"><a href="lambda_8hpp.html">lambda.hpp</a></div></div>
 <div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_html_aa1d48cbee5fd1c7d1764b8e37fe4d4e9"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave.html#aa1d48cbee5fd1c7d1764b8e37fe4d4e9">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::Slave::total</a></div><div class="ttdeci">Resources total</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:351</div></div>
 <div class="ttc" id="namespacemesos_1_1internal_1_1master_1_1allocator_html_a2697b55e9bb55b527e433d5e378ea4ba"><div class="ttname"><a href="namespacemesos_1_1internal_1_1master_1_1allocator.html#a2697b55e9bb55b527e433d5e378ea4ba">mesos::internal::master::allocator::HierarchicalDRFAllocator</a></div><div class="ttdeci">MesosAllocator&lt; HierarchicalDRFAllocatorProcess &gt; HierarchicalDRFAllocator</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:61</div></div>
-<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a4612ef1ebd4f96f80e35a216a79e6a8d"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a4612ef1ebd4f96f80e35a216a79e6a8d">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::frameworkSorterFactory</a></div><div class="ttdeci">const std::function&lt; Sorter *()&gt; frameworkSorterFactory</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:542</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a4612ef1ebd4f96f80e35a216a79e6a8d"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a4612ef1ebd4f96f80e35a216a79e6a8d">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::frameworkSorterFactory</a></div><div class="ttdeci">const std::function&lt; Sorter *()&gt; frameworkSorterFactory</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:538</div></div>
 <div class="ttc" id="classhashmap_html"><div class="ttname"><a href="classhashmap.html">hashmap</a></div><div class="ttdef"><b>Definition:</b> hashmap.hpp:38</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a967e320b1d5dd56a1dec05dc3aaa58a2"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a967e320b1d5dd56a1dec05dc3aaa58a2">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::_offer_filters_active</a></div><div class="ttdeci">double _offer_filters_active(const std::string &amp;role)</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a95e4fd793218cdaa228b89c10bef2343"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a95e4fd793218cdaa228b89c10bef2343">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::requestResources</a></div><div class="ttdeci">void requestResources(const FrameworkID &amp;frameworkId, const std::vector&lt; Request &gt; &amp;requests)</div></div>
@@ -741,7 +737,7 @@
 <div class="ttc" id="namespacemesos_1_1internal_1_1master_1_1maintenance_1_1validation_html_a766d3749f894fce457b084746f0ba868"><div class="ttname"><a href="namespacemesos_1_1internal_1_1master_1_1maintenance_1_1validation.html#a766d3749f894fce457b084746f0ba868">mesos::internal::master::maintenance::validation::unavailability</a></div><div class="ttdeci">Try&lt; Nothing &gt; unavailability(const Unavailability &amp;unavailability)</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_abe0733932a78d03ec3c94ae0d71605ba"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#abe0733932a78d03ec3c94ae0d71605ba">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::updateUnavailability</a></div><div class="ttdeci">void updateUnavailability(const SlaveID &amp;slaveId, const Option&lt; Unavailability &gt; &amp;unavailability)</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess</a></div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:73</div></div>
-<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a890bb44d4f46f708e8df0514036d44ca"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a890bb44d4f46f708e8df0514036d44ca">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::roleSorter</a></div><div class="ttdeci">process::Owned&lt; Sorter &gt; roleSorter</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:511</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a890bb44d4f46f708e8df0514036d44ca"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a890bb44d4f46f708e8df0514036d44ca">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::roleSorter</a></div><div class="ttdeci">process::Owned&lt; Sorter &gt; roleSorter</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:508</div></div>
 <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a2928f839fd010669924789c6cccd0829"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a2928f839fd010669924789c6cccd0829">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::expire</a></div><div class="ttdeci">void expire(const FrameworkID &amp;frameworkId, const std::string &amp;role, const SlaveID &amp;slaveId, OfferFilter *offerFilter)</div></div>
 <div class="ttc" id="namespacerouting_1_1filter_1_1internal_html_a646d4e3238d83329525957b5a5586be2"><div class="ttname"><a href="namespacerouting_1_1filter_1_1internal.html#a646d4e3238d83329525957b5a5586be2">routing::filter::internal::filters</a></div><div class="ttdeci"

<TRUNCATED>