http://git-wip-us.apache.org/repos/asf/mesos-site/blob/7f5f1e4a/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 2e454d0..224b150 100644 --- a/content/api/latest/c++/hierarchical_8hpp_source.html +++ b/content/api/latest/c++/hierarchical_8hpp_source.html @@ -507,157 +507,185 @@ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <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>  <a class="code" href="classhashmap.html">hashmap<std::string, Quota></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> </div> -<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="comment">// Slaves to send offers for.</span></div> -<div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a65468666990c8079dc0f3e716abb82b8"> 457</a></span>  <a class="code" href="classOption.html">Option<hashset<std::string></a>> <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="l00458"></a><span class="lineno"> 458</span> </div> -<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="comment">// Resources (by name) that will be excluded from a role's fair share.</span></div> -<div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a650088517da5692657a58ab961376d77"> 460</a></span>  <a class="code" href="classOption.html">Option<std::set<std::string></a>> <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="l00461"></a><span class="lineno"> 461</span> </div> -<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="comment">// Filter GPU resources based on the `GPU_RESOURCES` framework capability.</span></div> -<div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a5b569bbf8a0b8a07d3219ae7718828ca"> 463</a></span>  <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="l00464"></a><span class="lineno"> 464</span> </div> -<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="comment">// The master's domain, if any.</span></div> -<div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a64b69bd952f0b6768c115cfbc36a8b87"> 466</a></span>  <a class="code" href="classOption.html">Option<DomainInfo></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="l00467"></a><span class="lineno"> 467</span> </div> -<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="comment">// There are two stages of allocation. During the first stage resources</span></div> -<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="comment">// are allocated only to frameworks under roles with quota set. During</span></div> -<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// the second stage remaining resources that would not be required to</span></div> -<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="comment">// satisfy un-allocated quota are then allocated to frameworks under</span></div> -<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="comment">// roles with no quota set.</span></div> -<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="comment">// Each stage comprises two levels of sorting, hence "hierarchical".</span></div> -<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="comment">// Level 1 sorts across roles:</span></div> -<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="comment">// Currently, only the allocated portion of the reserved resources are</span></div> -<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="comment">// accounted for fairness calculation.</span></div> -<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="comment">// TODO(mpark): Reserved resources should be accounted for fairness</span></div> -<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="comment">// calculation whether they are allocated or not, since they model a long or</span></div> -<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="comment">// forever running task. That is, the effect of reserving resources is</span></div> -<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="comment">// equivalent to launching a task in that the resources that make up the</span></div> -<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="comment">// reservation are not available to other roles as non-revocable.</span></div> -<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="comment">// Level 2 sorts across frameworks within a particular role:</span></div> -<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="comment">// Reserved resources at this level are, and should be accounted for</span></div> -<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="comment">// fairness calculation only if they are allocated. This is because</span></div> -<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="comment">// reserved resources are fairly shared across the frameworks in the role.</span></div> -<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="comment">// The allocator relies on `Sorter`s to employ a particular sorting</span></div> -<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="comment">// algorithm. Each level has its own sorter and hence may have different</span></div> -<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="comment">// fairness calculations.</span></div> -<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="comment">// NOTE: The hierarchical allocator considers revocable resources as</span></div> -<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="comment">// regular resources when doing fairness calculations.</span></div> -<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="comment">// TODO(vinod): Consider using a different fairness algorithm for</span></div> -<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="comment">// revocable resources.</span></div> -<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div> -<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="comment">// A sorter for active roles. This sorter determines the order in which</span></div> -<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="comment">// roles are allocated resources during Level 1 of the second stage.</span></div> -<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="comment">// The total cluster resources are used as the resource pool.</span></div> -<div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a890bb44d4f46f708e8df0514036d44ca"> 503</a></span>  <a class="code" href="classprocess_1_1Owned.html">process::Owned<Sorter></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="l00504"></a><span class="lineno"> 504</span> </div> -<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="comment">// A dedicated sorter for roles for which quota is set. This sorter</span></div> -<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="comment">// determines the order in which quota'ed roles are allocated resources</span></div> -<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="comment">// during Level 1 of the first stage. Quota'ed roles have resources</span></div> -<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="comment">// allocated up to their allocated quota (the first stage) prior to</span></div> -<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="comment">// non-quota'ed roles (the second stage). Since only non-revocable</span></div> -<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="comment">// resources are available for quota, the total cluster non-revocable</span></div> -<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="comment">// resoures are used as the resource pool.</span></div> -<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="comment">// NOTE: A role appears in `quotaRoleSorter` if it has a quota (even if</span></div> -<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="comment">// no frameworks are currently registered in that role). In contrast,</span></div> -<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="comment">// `roleSorter` only contains entries for roles with one or more</span></div> -<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="comment">// registered frameworks.</span></div> -<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="comment">// NOTE: We do not include revocable resources in the quota role sorter,</span></div> -<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="comment">// because the quota role sorter's job is to perform fair sharing between</span></div> -<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="comment">// the quota roles as it pertains to their level of quota satisfaction.</span></div> -<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="comment">// Since revocable resources do not increase a role's level of satisfaction</span></div> -<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="comment">// toward its quota, we choose to exclude them from the quota role sorter.</span></div> -<div class="line"><a name="l00523"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#adc8f37c1d8b0394cc23178491d44c2e2"> 523</a></span>  <a class="code" href="classprocess_1_1Owned.html">process::Owned<Sorter></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="l00524"></a><span class="lineno"> 524</span> </div> -<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">// A collection of sorters, one per active role. Each sorter determines</span></div> -<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="comment">// the order in which frameworks that belong to the same role are allocated</span></div> -<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="comment">// resources inside the role's share. These sorters are used during Level 2</span></div> -<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="comment">// for both the first and the second stages. Since frameworks are sharing</span></div> -<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="comment">// the resources allocated to a role, the role's allocation is used as</span></div> -<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="comment">// the resource pool for each role specific framework 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#a286878cde1e175a044fb6bb934a9b941"> 531</a></span>  <a class="code" href="classhashmap.html">hashmap<std::string, process::Owned<Sorter></a>> <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="l00456"></a><span class="lineno"> 456</span>  <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>  <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>  <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>  <span class="comment">// reservations for quota limit.</span></div> +<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <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>  <a class="code" href="classhashmap.html">hashmap<std::string, Resources></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="l00463"></a><span class="lineno"> 463</span> </div> +<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <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>  <a class="code" href="classOption.html">Option<hashset<std::string></a>> <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="l00466"></a><span class="lineno"> 466</span> </div> +<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="comment">// Resources (by name) that will be excluded from a role'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>  <a class="code" href="classOption.html">Option<std::set<std::string></a>> <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="l00469"></a><span class="lineno"> 469</span> </div> +<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <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>  <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> </div> +<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="comment">// The master'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>  <a class="code" href="classOption.html">Option<DomainInfo></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> </div> +<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <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>  <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>  <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>  <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>  <span class="comment">// roles with no quota set.</span></div> +<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="comment">// Each stage comprises two levels of sorting, hence "hierarchical".</span></div> +<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="comment">// Level 1 sorts across roles:</span></div> +<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <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>  <span class="comment">// accounted for fairness calculation.</span></div> +<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <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>  <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>  <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>  <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>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <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>  <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>  <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>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <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>  <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>  <span class="comment">// fairness calculations.</span></div> +<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <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>  <span class="comment">// regular resources when doing fairness calculations.</span></div> +<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <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>  <span class="comment">// revocable resources.</span></div> +<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div> +<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <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>  <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>  <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>  <a class="code" href="classprocess_1_1Owned.html">process::Owned<Sorter></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> </div> +<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <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>  <span class="comment">// determines the order in which quota'ed roles are allocated resources</span></div> +<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="comment">// during Level 1 of the first stage. Quota'ed roles have resources</span></div> +<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <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>  <span class="comment">// non-quota'ed roles (the second stage). Since only non-revocable</span></div> +<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <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>  <span class="comment">// resoures are used as the resource pool.</span></div> +<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <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>  <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>  <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>  <span class="comment">// registered frameworks.</span></div> +<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <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>  <span class="comment">// because the quota role sorter's job is to perform fair sharing between</span></div> +<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <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>  <span class="comment">// Since revocable resources do not increase a role's level of satisfaction</span></div> +<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <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>  <a class="code" href="classprocess_1_1Owned.html">process::Owned<Sorter></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> </div> -<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="comment">// Factory function for framework sorters.</span></div> -<div class="line"><a name="l00534"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a4612ef1ebd4f96f80e35a216a79e6a8d"> 534</a></span>  <span class="keyword">const</span> std::function<Sorter*()> <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="l00535"></a><span class="lineno"> 535</span> </div> -<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keyword">private</span>:</div> -<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordtype">bool</span> isFrameworkTrackedUnderRole(</div> -<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keyword">const</span> FrameworkID& frameworkId,</div> -<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keyword">const</span> std::string& role) <span class="keyword">const</span>;</div> +<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <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>  <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>  <span class="comment">// resources inside the role's share. These sorters are used during Level 2</span></div> +<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <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>  <span class="comment">// the resources allocated to a role, the role's allocation is used as</span></div> +<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <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>  <a class="code" href="classhashmap.html">hashmap<std::string, process::Owned<Sorter></a>> <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> </div> -<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keywordtype">void</span> trackFrameworkUnderRole(</div> -<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keyword">const</span> FrameworkID& frameworkId,</div> -<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="keyword">const</span> std::string& role);</div> -<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div> -<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keywordtype">void</span> untrackFrameworkUnderRole(</div> +<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <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>  <span class="keyword">const</span> std::function<Sorter*()> <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> </div> +<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="keyword">private</span>:</div> +<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keywordtype">bool</span> isFrameworkTrackedUnderRole(</div> <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keyword">const</span> FrameworkID& frameworkId,</div> -<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keyword">const</span> std::string& role);</div> +<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keyword">const</span> std::string& role) <span class="keyword">const</span>;</div> <div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div> -<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="comment">// Helper to update the agent's total resources maintained in the allocator</span></div> -<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="comment">// and the role and quota sorters (whose total resources match the agent's</span></div> -<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="comment">// total resources). Returns true iff the stored agent total was changed.</span></div> -<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keywordtype">bool</span> updateSlaveTotal(<span class="keyword">const</span> SlaveID& slaveId, <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>& total);</div> -<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> </div> -<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="comment">// Helper that returns true if the given agent is located in a</span></div> -<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="comment">// different region than the master. This can only be the case if</span></div> -<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="comment">// the agent and the master are both configured with a fault domain.</span></div> -<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <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>& slave) <span class="keyword">const</span>;</div> -<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div> -<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="comment">// Helper to track allocated resources on an agent.</span></div> -<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordtype">void</span> trackAllocatedResources(</div> -<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keyword">const</span> SlaveID& slaveId,</div> -<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="keyword">const</span> FrameworkID& frameworkId,</div> -<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>& allocated);</div> -<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div> -<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="comment">// Helper to untrack resources that are no longer allocated on an agent.</span></div> -<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordtype">void</span> untrackAllocatedResources(</div> -<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keyword">const</span> SlaveID& slaveId,</div> -<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keyword">const</span> FrameworkID& frameworkId,</div> -<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>& allocated);</div> -<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div> -<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="comment">// Helper that removes all existing offer filters for the given slave</span></div> -<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="comment">// id.</span></div> -<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordtype">void</span> removeFilters(<span class="keyword">const</span> SlaveID& slaveId);</div> -<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> };</div> -<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div> +<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordtype">void</span> trackFrameworkUnderRole(</div> +<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keyword">const</span> FrameworkID& frameworkId,</div> +<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keyword">const</span> std::string& role);</div> +<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div> +<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordtype">void</span> untrackFrameworkUnderRole(</div> +<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keyword">const</span> FrameworkID& frameworkId,</div> +<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keyword">const</span> std::string& role);</div> +<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div> +<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="comment">// `trackReservations` and `untrackReservations` are helpers</span></div> +<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <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>  <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>  <span class="comment">// in the presence of unallocated reservations. See MESOS-4527.</span></div> +<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <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>  <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>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <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>  <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>  <span class="comment">//</span></div> +<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <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>  <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>  <span class="keywordtype">void</span> trackReservations(</div> +<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keyword">const</span> <a class="code" href="classhashmap.html">hashmap<std::string, Resources></a>& reservations);</div> +<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div> +<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordtype">void</span> untrackReservations(</div> +<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keyword">const</span> <a class="code" href="classhashmap.html">hashmap<std::string, Resources></a>& reservations);</div> <div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div> -<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> } <span class="comment">// namespace internal {</span></div> -<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div> -<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div> -<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment">// We map the templatized version of the `HierarchicalAllocatorProcess` to one</span></div> -<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="comment">// that relies on sorter factories in the internal namespace. This allows us</span></div> -<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="comment">// to keep the implementation of the allocator in the implementation file.</span></div> -<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keyword">template</span> <</div> -<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keyword">typename</span> RoleSorter,</div> -<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keyword">typename</span> FrameworkSorter,</div> -<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keyword">typename</span> QuotaRoleSorter></div> -<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <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="l00588"></a><span class="lineno"> 588</span>  : <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="l00589"></a><span class="lineno"> 589</span> {</div> -<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keyword">public</span>:</div> -<div class="line"><a name="l00591"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html#af1ad7f99497807e029ac8d2654abaa4f"> 591</a></span>  <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html#af1ad7f99497807e029ac8d2654abaa4f">HierarchicalAllocatorProcess</a>()</div> -<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  : <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">"hierarchical-allocator"</span>)),</div> -<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  internal::<a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1HierarchicalAllocatorProcess.html">HierarchicalAllocatorProcess</a>(</div> -<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  [this]() -> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1Sorter.html">Sorter</a>* {</div> -<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> RoleSorter(this-><span class="keyword">self</span>(), <span class="stringliteral">"allocator/mesos/roles/"</span>);</div> -<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  },</div> -<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  []() -> <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="l00598"></a><span class="lineno"> 598</span>  []() -> Sorter* { <span class="keywordflow">return</span> <span class="keyword">new</span> QuotaRoleSorter(); }) {}</div> -<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> };</div> -<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div> -<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> } <span class="comment">// namespace allocator {</span></div> -<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> } <span class="comment">// namespace master {</span></div> -<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> } <span class="comment">// namespace internal {</span></div> -<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> } <span class="comment">// namespace mesos {</span></div> -<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div> -<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor">#endif // __MASTER_ALLOCATOR_MESOS_HIERARCHICAL_HPP__</span></div> +<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="comment">// Helper to update the agent's total resources maintained in the allocator</span></div> +<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="comment">// and the role and quota sorters (whose total resources match the agent's</span></div> +<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <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>  <span class="keywordtype">bool</span> updateSlaveTotal(<span class="keyword">const</span> SlaveID& slaveId, <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>& total);</div> +<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div> +<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <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>  <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>  <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>  <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>& slave) <span class="keyword">const</span>;</div> +<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div> +<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <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>  <span class="keywordtype">void</span> trackAllocatedResources(</div> +<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keyword">const</span> SlaveID& slaveId,</div> +<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keyword">const</span> FrameworkID& frameworkId,</div> +<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>& allocated);</div> +<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> </div> +<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <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>  <span class="keywordtype">void</span> untrackAllocatedResources(</div> +<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keyword">const</span> SlaveID& slaveId,</div> +<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keyword">const</span> FrameworkID& frameworkId,</div> +<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>& allocated);</div> +<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div> +<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <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>  <span class="comment">// id.</span></div> +<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordtype">void</span> removeFilters(<span class="keyword">const</span> SlaveID& slaveId);</div> +<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> };</div> +<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> </div> +<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div> +<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> } <span class="comment">// namespace internal {</span></div> +<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div> +<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> </div> +<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <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> <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> <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> <span class="keyword">template</span> <</div> +<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keyword">typename</span> RoleSorter,</div> +<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keyword">typename</span> FrameworkSorter,</div> +<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keyword">typename</span> QuotaRoleSorter></div> +<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <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>  : <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> {</div> +<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <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>  <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>  : <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">"hierarchical-allocator"</span>)),</div> +<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  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>  [this]() -> <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>  <span class="keywordflow">return</span> <span class="keyword">new</span> RoleSorter(this-><span class="keyword">self</span>(), <span class="stringliteral">"allocator/mesos/roles/"</span>);</div> +<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  },</div> +<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  []() -> <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>  []() -> 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> };</div> +<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> </div> +<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> } <span class="comment">// namespace allocator {</span></div> +<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> } <span class="comment">// namespace master {</span></div> +<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> } <span class="comment">// namespace internal {</span></div> +<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> } <span class="comment">// namespace mesos {</span></div> +<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> </div> +<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <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< process::Future< Nothing > > 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 &frameworkId, const SlaveID &slaveId, const Resources &resources, const Option< Filters > &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< DRFSorter, DRFSorter, DRFSorter > HierarchicalDRFAllocatorProcess</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:55</div></div> @@ -667,7 +695,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 &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:463</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="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< std::string, hashmap< SlaveID, hashset< OfferFilter * > > > 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< FrameworkID > offersOutstanding</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:421</div></div> @@ -677,7 +705,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 &frameworkId, const std::set< std::string > &roles)</div></div> <div class="ttc" id="classhashset_html"><div class="ttname"><a href="classhashset.html">hashset< std::string ></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< std::string, process::Owned< Sorter > > frameworkSorters</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_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< std::string, process::Owned< Sorter > > 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_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 &frameworkId, const SlaveID &slaveId, const Resources &offeredResources, const std::vector< ResourceConversion > &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:246</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 &frameworkId)</div></div> @@ -687,7 +715,7 @@ <div class="ttc" id="namespaceproc_html_a34396c6140a28f583dc13fee3c3c35d4"><div class="ttname"><a href="namespaceproc.html#a34396c6140a28f583dc13fee3c3c35d4">proc::status</a></div><div class="ttdeci">Result< ProcessStatus > 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< int > 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:591</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="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< SlaveID, Slave > slaves</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:430</div></div> @@ -697,12 +725,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 &frameworkId, const std::string &role, const SlaveID &slaveId, const Resources &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< Sorter > quotaRoleSorter</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:523</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< Sorter > 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_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< HierarchicalDRFAllocatorProcess > 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< Sorter *()> frameworkSorterFactory</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:534</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< Sorter *()> frameworkSorterFactory</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:542</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 &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 &frameworkId, const std::vector< Request > &requests)</div></div> @@ -713,7 +741,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< Nothing > unavailability(const Unavailability &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 &slaveId, const Option< Unavailability > &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< Sorter > roleSorter</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:503</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< Sorter > 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_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 &frameworkId, const std::string &role, const SlaveID &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">Result< std::vector< Filter< Classifier > > > filters(const std::string &_link, const Handle &parent)</div><div class="ttdef"><b>Definition:</b> internal.hpp:776</div></div> <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_ad50746d75024b2b7dbf7ebfca00655e8"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#ad50746d75024b2b7dbf7ebfca00655e8">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::allocate</a></div><div class="ttdeci">process::Future< Nothing > allocate()</div></div> @@ -737,13 +765,13 @@ <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a74891dae6edb8e7b6283c82886141dd5"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a74891dae6edb8e7b6283c82886141dd5">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::addFramework</a></div><div class="ttdeci">void addFramework(const FrameworkID &frameworkId, const FrameworkInfo &frameworkInfo, const hashmap< SlaveID, Resources > &used, bool active, const std::set< std::string > &suppressedRoles)</div></div> <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a575252272c6d0e24e9e79409d52ec493"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a575252272c6d0e24e9e79409d52ec493">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::updateWeights</a></div><div class="ttdeci">void updateWeights(const std::vector< WeightInfo > &weightInfos)</div></div> <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a652ffc5a1de704b592ecea187b812203"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a652ffc5a1de704b592ecea187b812203">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::_resources_offered_or_allocated</a></div><div class="ttdeci">double _resources_offered_or_allocated(const std::string &resource)</div></div> -<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a650088517da5692657a58ab961376d77"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a650088517da5692657a58ab961376d77">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::fairnessExcludeResourceNames</a></div><div class="ttdeci">Option< std::set< std::string > > fairnessExcludeResourceNames</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:460</div></div> +<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a650088517da5692657a58ab961376d77"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a650088517da5692657a58ab961376d77">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::fairnessExcludeResourceNames</a></div><div class="ttdeci">Option< std::set< std::string > > fairnessExcludeResourceNames</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:468</div></div> <div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_html_ac7bd2807238e975c3dd11578ab827138"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave.html#ac7bd2807238e975c3dd11578ab827138">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::Slave::available</a></div><div class="ttdeci">Resources available() const </div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:373</div></div> -<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a65468666990c8079dc0f3e716abb82b8"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a65468666990c8079dc0f3e716abb82b8">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::whitelist</a></div><div class="ttdeci">Option< hashset< std::string > > whitelist</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:457</div></div> +<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a65468666990c8079dc0f3e716abb82b8"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a65468666990c8079dc0f3e716abb82b8">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::whitelist</a></div><div class="ttdeci">Option< hashset< std::string > > whitelist</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:465</div></div> <div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_html"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave.html">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::Slave</a></div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:348</div></div> <div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_1_1Maintenance_html_aa906fa2e646a01c43c4387060c447cd8"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_1_1Maintenance.html#aa906fa2e646a01c43c4387060c447cd8">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::Slave::Maintenance::unavailability</a></div><div class="ttdeci">Unavailability unavailability</div><div class="ttdef"><b>Definition:</b> hierarchical.hpp:405</div></div> <div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_html_a16c7474e21fd5aa3d219a0e46341038d"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html#a16c7474e21fd5aa3d219a0e46341038d">mesos::internal::master::allocator::internal::HierarchicalAllocatorProcess::roles</a></div><div class="ttdeci">hashmap< std::string, hashset< FrameworkID > > roles</div><div class="ttdef"><b>Definition:<
<TRUNCATED>
