You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@mesos.apache.org by Benjamin Bannier <be...@mesosphere.io> on 2019/01/23 12:12:34 UTC

Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

Review request for mesos, Benjamin Mahler and Meng Zhu.


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its options, it now inspects a dynamically
calculated set of minimal allocatable resources. This set is populated
with any minimal allocatable resources specified in the allocator's
options and any framework's minimal allocatable resources. For a
resource to be allocatable it needs to contain any of these minimal
requirements.

If a framework does not specify minimal allocatable resource
requirements, its minimal requirements are set to the globally
configured option.

We also adjust the allocator to take a framework's minimal resource
requirements into account when checking whether a resource can be
allocated to a particular framework. The check is performed at the same
time we check whether a framework filtered a particular resource. This
avoids offering resources to frameworks which the framework would never
have considered allocatable itself (e.g., given the global option of the
allocator).


Diffs
-----

  src/master/allocator/mesos/hierarchical.hpp ca1638390d89e2a81efd9d6d4a28b863c79723c4 
  src/master/allocator/mesos/hierarchical.cpp f1f3894058a8e3f008013cb269744bd36c0e31b3 
  src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 


Diff: https://reviews.apache.org/r/69821/diff/1/


Testing
-------

`make check`


Thanks,

Benjamin Bannier


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Mesos Reviewbot Windows <re...@mesos.apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212240
-----------------------------------------------------------



PASS: Mesos patch 69821 was successfully built and tested.

Reviews applied: `['69818', '69819', '69820', '69821']`

All the build artifacts available at: http://dcos-win.westus2.cloudapp.azure.com/artifacts/mesos-reviewbot-testing/2811/mesos-review-69821

- Mesos Reviewbot Windows


On Jan. 23, 2019, 12:12 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Jan. 23, 2019, 12:12 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its options, it now inspects a dynamically
> calculated set of minimal allocatable resources. This set is populated
> with any minimal allocatable resources specified in the allocator's
> options and any framework's minimal allocatable resources. For a
> resource to be allocatable it needs to contain any of these minimal
> requirements.
> 
> If a framework does not specify minimal allocatable resource
> requirements, its minimal requirements are set to the globally
> configured option.
> 
> We also adjust the allocator to take a framework's minimal resource
> requirements into account when checking whether a resource can be
> allocated to a particular framework. The check is performed at the same
> time we check whether a framework filtered a particular resource. This
> avoids offering resources to frameworks which the framework would never
> have considered allocatable itself (e.g., given the global option of the
> allocator).
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp ca1638390d89e2a81efd9d6d4a28b863c79723c4 
>   src/master/allocator/mesos/hierarchical.cpp f1f3894058a8e3f008013cb269744bd36c0e31b3 
>   src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/1/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Mahler <bm...@apache.org>.

> On Jan. 29, 2019, 8:37 p.m., Benjamin Mahler wrote:
> > src/tests/hierarchical_allocator_tests.cpp
> > Lines 2336 (patched)
> > <https://reviews.apache.org/r/69821/diff/2/?file=2123197#file2123197line2336>
> >
> >     FrameworkEmptyMinAllocatable
> 
> Benjamin Bannier wrote:
>     ????????

This and the one above are naming suggestions


- Benjamin


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212421
-----------------------------------------------------------


On Jan. 31, 2019, 3:16 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Jan. 31, 2019, 3:16 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
>   src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/4/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.

> On Jan. 29, 2019, 9:37 p.m., Benjamin Mahler wrote:
> > The commit description makes it sound like the filter is using the **union** of the flag and the per-framework/role override:
> > 
> > > This set is populated with any minimal allocatable resources specified in the allocator's options and any framework's minimal allocatable resources.
> > 
> > However, it should be an override (which is what the patch correctly does AFAICT). Probably, just using "override" in the explanation would make this very clear to the reader.
> > 
> > IMO, we only really need the first paragraph of the description:
> > 
> > > This patch modifies the hierarchical allocator to take framework-specified minimal allocatable resources into account.
> > 
> > We could make it a bit clearer:
> > 
> > > This patch modifies the allocator to take the framework-specified minimum allocatable resources into account. These act as an override of the existing `min_allocatable_resources` flag.
> > 
> > What more needs to be said?

Sorry for not updating the commit message when posting my WIP result; updated now.


> On Jan. 29, 2019, 9:37 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Lines 1952-1968 (original), 1978-1987 (patched)
> > <https://reviews.apache.org/r/69821/diff/2/?file=2123196#file2123196line1978>
> >
> >     This makes it look like we should consolidate into the `isFiltered` function?

See below.


> On Jan. 29, 2019, 9:37 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Line 2069 (original), 2082 (patched)
> > <https://reviews.apache.org/r/69821/diff/2/?file=2123196#file2123196line2095>
> >
> >     Now that this is a continue instead of a break, it seems they can be consolidated into 1 below?
> >     
> >     Also, can you post the benchmark numbers before and after this patch to make sure we're not accidentally regressing pretty badly on performance?

Let's keep this separated from the filtering step, if only to be able to document it more explicitly.

After our offline discussion I added an additional check just before this one which triggers a `continue` if `toAllocate.empty()`. This does prevent some useless work.

As a benchmark I ran `SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test.DeclineOffers/4` (1000 agents, 500 frameworks). I patched the test to only execute `num_frameworks` allocation rounds, and also printed timings in `ms` instead of pretty-printing. The logs from an optimized build are:

1) `9f6ccbd41a55846e54297ecb31fddbeee3be50c9`
```
[ RUN      ] SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test.DeclineOffers/4
Using 1000 agents and 500 frameworks
Added 500 frameworks in 15.6022ms
Added 1000 agents in 82.2129ms
round 0 allocate() took 43.379ms to make 1000 offers after filtering 1000 offers
round 1 allocate() took 44.7003ms to make 1000 offers after filtering 2000 offers
round 2 allocate() took 40.1724ms to make 1000 offers after filtering 3000 offers
round 3 allocate() took 56.499ms to make 1000 offers after filtering 4000 offers
round 4 allocate() took 42.4679ms to make 1000 offers after filtering 5000 offers
round 5 allocate() took 43.2156ms to make 1000 offers after filtering 6000 offers
round 6 allocate() took 45.9366ms to make 1000 offers after filtering 7000 offers
round 7 allocate() took 40.4537ms to make 1000 offers after filtering 8000 offers
round 8 allocate() took 48.6968ms to make 1000 offers after filtering 9000 offers
round 9 allocate() took 43.5264ms to make 1000 offers after filtering 10000 offers
round 10 allocate() took 42.1773ms to make 1000 offers after filtering 11000 offers
round 11 allocate() took 37.3388ms to make 1000 offers after filtering 12000 offers
round 12 allocate() took 40.3328ms to make 1000 offers after filtering 13000 offers
round 13 allocate() took 43.9844ms to make 1000 offers after filtering 14000 offers
round 14 allocate() took 36.8533ms to make 1000 offers after filtering 15000 offers
round 15 allocate() took 41.1868ms to make 1000 offers after filtering 16000 offers
round 16 allocate() took 44.1921ms to make 1000 offers after filtering 17000 offers
round 17 allocate() took 44.6911ms to make 1000 offers after filtering 18000 offers
round 18 allocate() took 40.2239ms to make 1000 offers after filtering 19000 offers
round 19 allocate() took 46.5701ms to make 1000 offers after filtering 20000 offers
round 20 allocate() took 41.5735ms to make 1000 offers after filtering 21000 offers
round 21 allocate() took 44.3456ms to make 1000 offers after filtering 22000 offers
round 22 allocate() took 42.7894ms to make 1000 offers after filtering 23000 offers
round 23 allocate() took 39.352ms to make 1000 offers after filtering 24000 offers
round 24 allocate() took 40.5653ms to make 1000 offers after filtering 25000 offers
round 25 allocate() took 46.8886ms to make 1000 offers after filtering 26000 offers
round 26 allocate() took 39.9539ms to make 1000 offers after filtering 27000 offers
round 27 allocate() took 41.6405ms to make 1000 offers after filtering 28000 offers
round 28 allocate() took 40.2024ms to make 1000 offers after filtering 29000 offers
round 29 allocate() took 40.0754ms to make 1000 offers after filtering 30000 offers
round 30 allocate() took 42.2118ms to make 1000 offers after filtering 31000 offers
round 31 allocate() took 40.0735ms to make 1000 offers after filtering 32000 offers
round 32 allocate() took 41.1366ms to make 1000 offers after filtering 33000 offers
round 33 allocate() took 39.5ms to make 1000 offers after filtering 34000 offers
round 34 allocate() took 41.9594ms to make 1000 offers after filtering 35000 offers
round 35 allocate() took 49.4858ms to make 1000 offers after filtering 36000 offers
round 36 allocate() took 40.4156ms to make 1000 offers after filtering 37000 offers
round 37 allocate() took 37.1299ms to make 1000 offers after filtering 38000 offers
round 38 allocate() took 44.5638ms to make 1000 offers after filtering 39000 offers
round 39 allocate() took 43.6203ms to make 1000 offers after filtering 40000 offers
round 40 allocate() took 44.9227ms to make 1000 offers after filtering 41000 offers
round 41 allocate() took 45.0713ms to make 1000 offers after filtering 42000 offers
round 42 allocate() took 44.9159ms to make 1000 offers after filtering 43000 offers
round 43 allocate() took 40.4659ms to make 1000 offers after filtering 44000 offers
round 44 allocate() took 41.5586ms to make 1000 offers after filtering 45000 offers
round 45 allocate() took 40.8119ms to make 1000 offers after filtering 46000 offers
round 46 allocate() took 40.719ms to make 1000 offers after filtering 47000 offers
round 47 allocate() took 45.5008ms to make 1000 offers after filtering 48000 offers
round 48 allocate() took 41.6095ms to make 1000 offers after filtering 49000 offers
round 49 allocate() took 49.6347ms to make 1000 offers after filtering 50000 offers
round 50 allocate() took 40.6466ms to make 1000 offers after filtering 51000 offers
round 51 allocate() took 48.1745ms to make 1000 offers after filtering 52000 offers
round 52 allocate() took 42.0721ms to make 1000 offers after filtering 53000 offers
round 53 allocate() took 40.2583ms to make 1000 offers after filtering 54000 offers
round 54 allocate() took 49.3955ms to make 1000 offers after filtering 55000 offers
round 55 allocate() took 41.0407ms to make 1000 offers after filtering 56000 offers
round 56 allocate() took 41.6122ms to make 1000 offers after filtering 57000 offers
round 57 allocate() took 41.3759ms to make 1000 offers after filtering 58000 offers
round 58 allocate() took 43.2541ms to make 1000 offers after filtering 59000 offers
round 59 allocate() took 49.5271ms to make 1000 offers after filtering 60000 offers
round 60 allocate() took 41.2492ms to make 1000 offers after filtering 61000 offers
round 61 allocate() took 36.9911ms to make 1000 offers after filtering 62000 offers
round 62 allocate() took 49.6439ms to make 1000 offers after filtering 63000 offers
round 63 allocate() took 43.5561ms to make 1000 offers after filtering 64000 offers
round 64 allocate() took 43.3742ms to make 1000 offers after filtering 65000 offers
round 65 allocate() took 48.0535ms to make 1000 offers after filtering 66000 offers
round 66 allocate() took 42.6492ms to make 1000 offers after filtering 67000 offers
round 67 allocate() took 46.4883ms to make 1000 offers after filtering 68000 offers
round 68 allocate() took 42.4521ms to make 1000 offers after filtering 69000 offers
round 69 allocate() took 44.1942ms to make 1000 offers after filtering 70000 offers
round 70 allocate() took 47.6116ms to make 1000 offers after filtering 71000 offers
round 71 allocate() took 44.7905ms to make 1000 offers after filtering 72000 offers
round 72 allocate() took 42.7777ms to make 1000 offers after filtering 73000 offers
round 73 allocate() took 48.8829ms to make 1000 offers after filtering 74000 offers
round 74 allocate() took 41.238ms to make 1000 offers after filtering 75000 offers
round 75 allocate() took 43.8349ms to make 1000 offers after filtering 76000 offers
round 76 allocate() took 45.572ms to make 1000 offers after filtering 77000 offers
round 77 allocate() took 41.4422ms to make 1000 offers after filtering 78000 offers
round 78 allocate() took 49.0392ms to make 1000 offers after filtering 79000 offers
round 79 allocate() took 44.7469ms to make 1000 offers after filtering 80000 offers
round 80 allocate() took 53.4459ms to make 1000 offers after filtering 81000 offers
round 81 allocate() took 51.1132ms to make 1000 offers after filtering 82000 offers
round 82 allocate() took 45.5509ms to make 1000 offers after filtering 83000 offers
round 83 allocate() took 50.7289ms to make 1000 offers after filtering 84000 offers
round 84 allocate() took 43.3636ms to make 1000 offers after filtering 85000 offers
round 85 allocate() took 47.5747ms to make 1000 offers after filtering 86000 offers
round 86 allocate() took 43.3862ms to make 1000 offers after filtering 87000 offers
round 87 allocate() took 44.4346ms to make 1000 offers after filtering 88000 offers
round 88 allocate() took 43.3714ms to make 1000 offers after filtering 89000 offers
round 89 allocate() took 48.0617ms to make 1000 offers after filtering 90000 offers
round 90 allocate() took 48.3744ms to make 1000 offers after filtering 91000 offers
round 91 allocate() took 41.4978ms to make 1000 offers after filtering 92000 offers
round 92 allocate() took 45.5325ms to make 1000 offers after filtering 93000 offers
round 93 allocate() took 48.5243ms to make 1000 offers after filtering 94000 offers
round 94 allocate() took 47.5721ms to make 1000 offers after filtering 95000 offers
round 95 allocate() took 46.9302ms to make 1000 offers after filtering 96000 offers
round 96 allocate() took 45.2669ms to make 1000 offers after filtering 97000 offers
round 97 allocate() took 46.111ms to make 1000 offers after filtering 98000 offers
round 98 allocate() took 44.9205ms to make 1000 offers after filtering 99000 offers
round 99 allocate() took 44.5762ms to make 1000 offers after filtering 100000 offers
round 100 allocate() took 48.1169ms to make 1000 offers after filtering 101000 offers
round 101 allocate() took 45.0201ms to make 1000 offers after filtering 102000 offers
round 102 allocate() took 42.9174ms to make 1000 offers after filtering 103000 offers
round 103 allocate() took 52.5127ms to make 1000 offers after filtering 104000 offers
round 104 allocate() took 44.2054ms to make 1000 offers after filtering 105000 offers
round 105 allocate() took 47.2304ms to make 1000 offers after filtering 106000 offers
round 106 allocate() took 44.1472ms to make 1000 offers after filtering 107000 offers
round 107 allocate() took 40.484ms to make 1000 offers after filtering 108000 offers
round 108 allocate() took 44.1042ms to make 1000 offers after filtering 109000 offers
round 109 allocate() took 46.3012ms to make 1000 offers after filtering 110000 offers
round 110 allocate() took 46.858ms to make 1000 offers after filtering 111000 offers
round 111 allocate() took 45.4239ms to make 1000 offers after filtering 112000 offers
round 112 allocate() took 47.6514ms to make 1000 offers after filtering 113000 offers
round 113 allocate() took 55.0673ms to make 1000 offers after filtering 114000 offers
round 114 allocate() took 44.6646ms to make 1000 offers after filtering 115000 offers
round 115 allocate() took 50.6825ms to make 1000 offers after filtering 116000 offers
round 116 allocate() took 44.4773ms to make 1000 offers after filtering 117000 offers
round 117 allocate() took 46.7083ms to make 1000 offers after filtering 118000 offers
round 118 allocate() took 47.7741ms to make 1000 offers after filtering 119000 offers
round 119 allocate() took 50.185ms to make 1000 offers after filtering 120000 offers
round 120 allocate() took 46.0032ms to make 1000 offers after filtering 121000 offers
round 121 allocate() took 42.014ms to make 1000 offers after filtering 122000 offers
round 122 allocate() took 44.9489ms to make 1000 offers after filtering 123000 offers
round 123 allocate() took 44.4353ms to make 1000 offers after filtering 124000 offers
round 124 allocate() took 49.3886ms to make 1000 offers after filtering 125000 offers
round 125 allocate() took 45.6761ms to make 1000 offers after filtering 126000 offers
round 126 allocate() took 48.6306ms to make 1000 offers after filtering 127000 offers
round 127 allocate() took 49.0563ms to make 1000 offers after filtering 128000 offers
round 128 allocate() took 44.816ms to make 1000 offers after filtering 129000 offers
round 129 allocate() took 49.7764ms to make 1000 offers after filtering 130000 offers
round 130 allocate() took 46.4268ms to make 1000 offers after filtering 131000 offers
round 131 allocate() took 48.0163ms to make 1000 offers after filtering 132000 offers
round 132 allocate() took 43.768ms to make 1000 offers after filtering 133000 offers
round 133 allocate() took 47.8291ms to make 1000 offers after filtering 134000 offers
round 134 allocate() took 47.3716ms to make 1000 offers after filtering 135000 offers
round 135 allocate() took 46.2753ms to make 1000 offers after filtering 136000 offers
round 136 allocate() took 46.3543ms to make 1000 offers after filtering 137000 offers
round 137 allocate() took 53.9863ms to make 1000 offers after filtering 138000 offers
round 138 allocate() took 49.8041ms to make 1000 offers after filtering 139000 offers
round 139 allocate() took 50.954ms to make 1000 offers after filtering 140000 offers
round 140 allocate() took 44.1232ms to make 1000 offers after filtering 141000 offers
round 141 allocate() took 46.1515ms to make 1000 offers after filtering 142000 offers
round 142 allocate() took 49.4546ms to make 1000 offers after filtering 143000 offers
round 143 allocate() took 47.867ms to make 1000 offers after filtering 144000 offers
round 144 allocate() took 43.0991ms to make 1000 offers after filtering 145000 offers
round 145 allocate() took 43.8772ms to make 1000 offers after filtering 146000 offers
round 146 allocate() took 45.458ms to make 1000 offers after filtering 147000 offers
round 147 allocate() took 45.6885ms to make 1000 offers after filtering 148000 offers
round 148 allocate() took 48.7958ms to make 1000 offers after filtering 149000 offers
round 149 allocate() took 41.555ms to make 1000 offers after filtering 150000 offers
round 150 allocate() took 51.497ms to make 1000 offers after filtering 151000 offers
round 151 allocate() took 53.1233ms to make 1000 offers after filtering 152000 offers
round 152 allocate() took 49.4516ms to make 1000 offers after filtering 153000 offers
round 153 allocate() took 50.3223ms to make 1000 offers after filtering 154000 offers
round 154 allocate() took 44.0316ms to make 1000 offers after filtering 155000 offers
round 155 allocate() took 52.9394ms to make 1000 offers after filtering 156000 offers
round 156 allocate() took 46.1572ms to make 1000 offers after filtering 157000 offers
round 157 allocate() took 49.5107ms to make 1000 offers after filtering 158000 offers
round 158 allocate() took 49.259ms to make 1000 offers after filtering 159000 offers
round 159 allocate() took 50.1442ms to make 1000 offers after filtering 160000 offers
round 160 allocate() took 49.8259ms to make 1000 offers after filtering 161000 offers
round 161 allocate() took 50.7864ms to make 1000 offers after filtering 162000 offers
round 162 allocate() took 44.3764ms to make 1000 offers after filtering 163000 offers
round 163 allocate() took 52.9589ms to make 1000 offers after filtering 164000 offers
round 164 allocate() took 51.9388ms to make 1000 offers after filtering 165000 offers
round 165 allocate() took 46.4587ms to make 1000 offers after filtering 166000 offers
round 166 allocate() took 52.7674ms to make 1000 offers after filtering 167000 offers
round 167 allocate() took 56.5814ms to make 1000 offers after filtering 168000 offers
round 168 allocate() took 51.4663ms to make 1000 offers after filtering 169000 offers
round 169 allocate() took 46.2037ms to make 1000 offers after filtering 170000 offers
round 170 allocate() took 47.0337ms to make 1000 offers after filtering 171000 offers
round 171 allocate() took 52.8302ms to make 1000 offers after filtering 172000 offers
round 172 allocate() took 47.099ms to make 1000 offers after filtering 173000 offers
round 173 allocate() took 48.4415ms to make 1000 offers after filtering 174000 offers
round 174 allocate() took 46.2016ms to make 1000 offers after filtering 175000 offers
round 175 allocate() took 47.8211ms to make 1000 offers after filtering 176000 offers
round 176 allocate() took 52.8813ms to make 1000 offers after filtering 177000 offers
round 177 allocate() took 52.5591ms to make 1000 offers after filtering 178000 offers
round 178 allocate() took 46.1184ms to make 1000 offers after filtering 179000 offers
round 179 allocate() took 52.652ms to make 1000 offers after filtering 180000 offers
round 180 allocate() took 46.0045ms to make 1000 offers after filtering 181000 offers
round 181 allocate() took 48.9528ms to make 1000 offers after filtering 182000 offers
round 182 allocate() took 45.4286ms to make 1000 offers after filtering 183000 offers
round 183 allocate() took 47.5286ms to make 1000 offers after filtering 184000 offers
round 184 allocate() took 48.5917ms to make 1000 offers after filtering 185000 offers
round 185 allocate() took 47.0747ms to make 1000 offers after filtering 186000 offers
round 186 allocate() took 52.4931ms to make 1000 offers after filtering 187000 offers
round 187 allocate() took 45.8298ms to make 1000 offers after filtering 188000 offers
round 188 allocate() took 46.9473ms to make 1000 offers after filtering 189000 offers
round 189 allocate() took 49.1067ms to make 1000 offers after filtering 190000 offers
round 190 allocate() took 46.0482ms to make 1000 offers after filtering 191000 offers
round 191 allocate() took 54.0377ms to make 1000 offers after filtering 192000 offers
round 192 allocate() took 48.6816ms to make 1000 offers after filtering 193000 offers
round 193 allocate() took 46.547ms to make 1000 offers after filtering 194000 offers
round 194 allocate() took 48.6652ms to make 1000 offers after filtering 195000 offers
round 195 allocate() took 52.9071ms to make 1000 offers after filtering 196000 offers
round 196 allocate() took 50.4669ms to make 1000 offers after filtering 197000 offers
round 197 allocate() took 48.9077ms to make 1000 offers after filtering 198000 offers
round 198 allocate() took 47.0762ms to make 1000 offers after filtering 199000 offers
round 199 allocate() took 53.5286ms to make 1000 offers after filtering 200000 offers
round 200 allocate() took 50.3092ms to make 1000 offers after filtering 201000 offers
round 201 allocate() took 53.1978ms to make 1000 offers after filtering 202000 offers
round 202 allocate() took 46.7309ms to make 1000 offers after filtering 203000 offers
round 203 allocate() took 47.197ms to make 1000 offers after filtering 204000 offers
round 204 allocate() took 47.9644ms to make 1000 offers after filtering 205000 offers
round 205 allocate() took 52.5824ms to make 1000 offers after filtering 206000 offers
round 206 allocate() took 52.7134ms to make 1000 offers after filtering 207000 offers
round 207 allocate() took 48.2553ms to make 1000 offers after filtering 208000 offers
round 208 allocate() took 57.6812ms to make 1000 offers after filtering 209000 offers
round 209 allocate() took 53.9594ms to make 1000 offers after filtering 210000 offers
round 210 allocate() took 48.2127ms to make 1000 offers after filtering 211000 offers
round 211 allocate() took 47.3254ms to make 1000 offers after filtering 212000 offers
round 212 allocate() took 50.2534ms to make 1000 offers after filtering 213000 offers
round 213 allocate() took 57.9581ms to make 1000 offers after filtering 214000 offers
round 214 allocate() took 63.6734ms to make 1000 offers after filtering 215000 offers
round 215 allocate() took 61.2235ms to make 1000 offers after filtering 216000 offers
round 216 allocate() took 53.5099ms to make 1000 offers after filtering 217000 offers
round 217 allocate() took 50.4939ms to make 1000 offers after filtering 218000 offers
round 218 allocate() took 54.4549ms to make 1000 offers after filtering 219000 offers
round 219 allocate() took 58.4072ms to make 1000 offers after filtering 220000 offers
round 220 allocate() took 53.847ms to make 1000 offers after filtering 221000 offers
round 221 allocate() took 54.1096ms to make 1000 offers after filtering 222000 offers
round 222 allocate() took 56.0966ms to make 1000 offers after filtering 223000 offers
round 223 allocate() took 53.592ms to make 1000 offers after filtering 224000 offers
round 224 allocate() took 55.2486ms to make 1000 offers after filtering 225000 offers
round 225 allocate() took 51.5048ms to make 1000 offers after filtering 226000 offers
round 226 allocate() took 51.9086ms to make 1000 offers after filtering 227000 offers
round 227 allocate() took 53.3552ms to make 1000 offers after filtering 228000 offers
round 228 allocate() took 51.9485ms to make 1000 offers after filtering 229000 offers
round 229 allocate() took 58.4765ms to make 1000 offers after filtering 230000 offers
round 230 allocate() took 58.9554ms to make 1000 offers after filtering 231000 offers
round 231 allocate() took 58.2673ms to make 1000 offers after filtering 232000 offers
round 232 allocate() took 60.6808ms to make 1000 offers after filtering 233000 offers
round 233 allocate() took 55.9027ms to make 1000 offers after filtering 234000 offers
round 234 allocate() took 52.3278ms to make 1000 offers after filtering 235000 offers
round 235 allocate() took 65.6062ms to make 1000 offers after filtering 236000 offers
round 236 allocate() took 54.8625ms to make 1000 offers after filtering 237000 offers
round 237 allocate() took 55.4922ms to make 1000 offers after filtering 238000 offers
round 238 allocate() took 59.7203ms to make 1000 offers after filtering 239000 offers
round 239 allocate() took 56.8822ms to make 1000 offers after filtering 240000 offers
round 240 allocate() took 54.9492ms to make 1000 offers after filtering 241000 offers
round 241 allocate() took 57.1337ms to make 1000 offers after filtering 242000 offers
round 242 allocate() took 53.6834ms to make 1000 offers after filtering 243000 offers
round 243 allocate() took 59.0367ms to make 1000 offers after filtering 244000 offers
round 244 allocate() took 57.7153ms to make 1000 offers after filtering 245000 offers
round 245 allocate() took 54.9644ms to make 1000 offers after filtering 246000 offers
round 246 allocate() took 58.2957ms to make 1000 offers after filtering 247000 offers
round 247 allocate() took 59.3979ms to make 1000 offers after filtering 248000 offers
round 248 allocate() took 66.781ms to make 1000 offers after filtering 249000 offers
round 249 allocate() took 54.285ms to make 1000 offers after filtering 250000 offers
round 250 allocate() took 55.0947ms to make 1000 offers after filtering 251000 offers
round 251 allocate() took 54.8685ms to make 1000 offers after filtering 252000 offers
round 252 allocate() took 54.35ms to make 1000 offers after filtering 253000 offers
round 253 allocate() took 54.9059ms to make 1000 offers after filtering 254000 offers
round 254 allocate() took 59.597ms to make 1000 offers after filtering 255000 offers
round 255 allocate() took 55.5525ms to make 1000 offers after filtering 256000 offers
round 256 allocate() took 59.9379ms to make 1000 offers after filtering 257000 offers
round 257 allocate() took 55.562ms to make 1000 offers after filtering 258000 offers
round 258 allocate() took 56.2249ms to make 1000 offers after filtering 259000 offers
round 259 allocate() took 59.7883ms to make 1000 offers after filtering 260000 offers
round 260 allocate() took 55.2769ms to make 1000 offers after filtering 261000 offers
round 261 allocate() took 52.7732ms to make 1000 offers after filtering 262000 offers
round 262 allocate() took 59.3481ms to make 1000 offers after filtering 263000 offers
round 263 allocate() took 59.6143ms to make 1000 offers after filtering 264000 offers
round 264 allocate() took 53.5964ms to make 1000 offers after filtering 265000 offers
round 265 allocate() took 54.7894ms to make 1000 offers after filtering 266000 offers
round 266 allocate() took 59.6638ms to make 1000 offers after filtering 267000 offers
round 267 allocate() took 60.3564ms to make 1000 offers after filtering 268000 offers
round 268 allocate() took 59.8669ms to make 1000 offers after filtering 269000 offers
round 269 allocate() took 53.7101ms to make 1000 offers after filtering 270000 offers
round 270 allocate() took 61.6155ms to make 1000 offers after filtering 271000 offers
round 271 allocate() took 65.0929ms to make 1000 offers after filtering 272000 offers
round 272 allocate() took 61.5197ms to make 1000 offers after filtering 273000 offers
round 273 allocate() took 57.6912ms to make 1000 offers after filtering 274000 offers
round 274 allocate() took 56.9268ms to make 1000 offers after filtering 275000 offers
round 275 allocate() took 54.51ms to make 1000 offers after filtering 276000 offers
round 276 allocate() took 56.9848ms to make 1000 offers after filtering 277000 offers
round 277 allocate() took 63.9871ms to make 1000 offers after filtering 278000 offers
round 278 allocate() took 59.9088ms to make 1000 offers after filtering 279000 offers
round 279 allocate() took 57.7531ms to make 1000 offers after filtering 280000 offers
round 280 allocate() took 68.9986ms to make 1000 offers after filtering 281000 offers
round 281 allocate() took 64.2633ms to make 1000 offers after filtering 282000 offers
round 282 allocate() took 58.2183ms to make 1000 offers after filtering 283000 offers
round 283 allocate() took 63.3825ms to make 1000 offers after filtering 284000 offers
round 284 allocate() took 57.9046ms to make 1000 offers after filtering 285000 offers
round 285 allocate() took 64.4061ms to make 1000 offers after filtering 286000 offers
round 286 allocate() took 55.5097ms to make 1000 offers after filtering 287000 offers
round 287 allocate() took 62.9108ms to make 1000 offers after filtering 288000 offers
round 288 allocate() took 59.2798ms to make 1000 offers after filtering 289000 offers
round 289 allocate() took 57.3862ms to make 1000 offers after filtering 290000 offers
round 290 allocate() took 62.5193ms to make 1000 offers after filtering 291000 offers
round 291 allocate() took 63.9871ms to make 1000 offers after filtering 292000 offers
round 292 allocate() took 62.8136ms to make 1000 offers after filtering 293000 offers
round 293 allocate() took 59.3041ms to make 1000 offers after filtering 294000 offers
round 294 allocate() took 63.9267ms to make 1000 offers after filtering 295000 offers
round 295 allocate() took 64.1519ms to make 1000 offers after filtering 296000 offers
round 296 allocate() took 65.9135ms to make 1000 offers after filtering 297000 offers
round 297 allocate() took 67.2918ms to make 1000 offers after filtering 298000 offers
round 298 allocate() took 59.3885ms to make 1000 offers after filtering 299000 offers
round 299 allocate() took 59.6041ms to make 1000 offers after filtering 300000 offers
round 300 allocate() took 69.324ms to make 1000 offers after filtering 301000 offers
round 301 allocate() took 64.2583ms to make 1000 offers after filtering 302000 offers
round 302 allocate() took 64.9007ms to make 1000 offers after filtering 303000 offers
round 303 allocate() took 63.8561ms to make 1000 offers after filtering 304000 offers
round 304 allocate() took 68.6028ms to make 1000 offers after filtering 305000 offers
round 305 allocate() took 67.1413ms to make 1000 offers after filtering 306000 offers
round 306 allocate() took 68.6673ms to make 1000 offers after filtering 307000 offers
round 307 allocate() took 68.9406ms to make 1000 offers after filtering 308000 offers
round 308 allocate() took 63.6815ms to make 1000 offers after filtering 309000 offers
round 309 allocate() took 69.0234ms to make 1000 offers after filtering 310000 offers
round 310 allocate() took 63.2273ms to make 1000 offers after filtering 311000 offers
round 311 allocate() took 67.1414ms to make 1000 offers after filtering 312000 offers
round 312 allocate() took 63.4983ms to make 1000 offers after filtering 313000 offers
round 313 allocate() took 62.2387ms to make 1000 offers after filtering 314000 offers
round 314 allocate() took 68.5613ms to make 1000 offers after filtering 315000 offers
round 315 allocate() took 62.5667ms to make 1000 offers after filtering 316000 offers
round 316 allocate() took 74.5411ms to make 1000 offers after filtering 317000 offers
round 317 allocate() took 64.7132ms to make 1000 offers after filtering 318000 offers
round 318 allocate() took 70.9544ms to make 1000 offers after filtering 319000 offers
round 319 allocate() took 70.9717ms to make 1000 offers after filtering 320000 offers
round 320 allocate() took 73.0904ms to make 1000 offers after filtering 321000 offers
round 321 allocate() took 70.3279ms to make 1000 offers after filtering 322000 offers
round 322 allocate() took 64.6519ms to make 1000 offers after filtering 323000 offers
round 323 allocate() took 66.5118ms to make 1000 offers after filtering 324000 offers
round 324 allocate() took 81.1093ms to make 1000 offers after filtering 325000 offers
round 325 allocate() took 81.8696ms to make 1000 offers after filtering 326000 offers
round 326 allocate() took 78.0062ms to make 1000 offers after filtering 327000 offers
round 327 allocate() took 79.5439ms to make 1000 offers after filtering 328000 offers
round 328 allocate() took 78.1366ms to make 1000 offers after filtering 329000 offers
round 329 allocate() took 82.1965ms to make 1000 offers after filtering 330000 offers
round 330 allocate() took 74.5939ms to make 1000 offers after filtering 331000 offers
round 331 allocate() took 76.6423ms to make 1000 offers after filtering 332000 offers
round 332 allocate() took 75.5452ms to make 1000 offers after filtering 333000 offers
round 333 allocate() took 75.7285ms to make 1000 offers after filtering 334000 offers
round 334 allocate() took 70.2246ms to make 1000 offers after filtering 335000 offers
round 335 allocate() took 79.8553ms to make 1000 offers after filtering 336000 offers
round 336 allocate() took 80.9663ms to make 1000 offers after filtering 337000 offers
round 337 allocate() took 75.7493ms to make 1000 offers after filtering 338000 offers
round 338 allocate() took 77.8515ms to make 1000 offers after filtering 339000 offers
round 339 allocate() took 69.8719ms to make 1000 offers after filtering 340000 offers
round 340 allocate() took 75.2373ms to make 1000 offers after filtering 341000 offers
round 341 allocate() took 70.5976ms to make 1000 offers after filtering 342000 offers
round 342 allocate() took 78.1957ms to make 1000 offers after filtering 343000 offers
round 343 allocate() took 80.2471ms to make 1000 offers after filtering 344000 offers
round 344 allocate() took 80.1235ms to make 1000 offers after filtering 345000 offers
round 345 allocate() took 77.7974ms to make 1000 offers after filtering 346000 offers
round 346 allocate() took 81.5935ms to make 1000 offers after filtering 347000 offers
round 347 allocate() took 75.9347ms to make 1000 offers after filtering 348000 offers
round 348 allocate() took 79.2547ms to make 1000 offers after filtering 349000 offers
round 349 allocate() took 78.2816ms to make 1000 offers after filtering 350000 offers
round 350 allocate() took 76.8709ms to make 1000 offers after filtering 351000 offers
round 351 allocate() took 82.6057ms to make 1000 offers after filtering 352000 offers
round 352 allocate() took 82.1843ms to make 1000 offers after filtering 353000 offers
round 353 allocate() took 89.666ms to make 1000 offers after filtering 354000 offers
round 354 allocate() took 83.3957ms to make 1000 offers after filtering 355000 offers
round 355 allocate() took 76.816ms to make 1000 offers after filtering 356000 offers
round 356 allocate() took 83.0263ms to make 1000 offers after filtering 357000 offers
round 357 allocate() took 84.5107ms to make 1000 offers after filtering 358000 offers
round 358 allocate() took 84.4714ms to make 1000 offers after filtering 359000 offers
round 359 allocate() took 85.2971ms to make 1000 offers after filtering 360000 offers
round 360 allocate() took 82.0539ms to make 1000 offers after filtering 361000 offers
round 361 allocate() took 78.6038ms to make 1000 offers after filtering 362000 offers
round 362 allocate() took 87.049ms to make 1000 offers after filtering 363000 offers
round 363 allocate() took 82.9083ms to make 1000 offers after filtering 364000 offers
round 364 allocate() took 84.5083ms to make 1000 offers after filtering 365000 offers
round 365 allocate() took 82.7553ms to make 1000 offers after filtering 366000 offers
round 366 allocate() took 85.3396ms to make 1000 offers after filtering 367000 offers
round 367 allocate() took 95.0262ms to make 1000 offers after filtering 368000 offers
round 368 allocate() took 92.0614ms to make 1000 offers after filtering 369000 offers
round 369 allocate() took 93.5387ms to make 1000 offers after filtering 370000 offers
round 370 allocate() took 91.826ms to make 1000 offers after filtering 371000 offers
round 371 allocate() took 88.7365ms to make 1000 offers after filtering 372000 offers
round 372 allocate() took 92.8509ms to make 1000 offers after filtering 373000 offers
round 373 allocate() took 87.5227ms to make 1000 offers after filtering 374000 offers
round 374 allocate() took 99.0992ms to make 1000 offers after filtering 375000 offers
round 375 allocate() took 90.7155ms to make 1000 offers after filtering 376000 offers
round 376 allocate() took 90.7619ms to make 1000 offers after filtering 377000 offers
round 377 allocate() took 99.588ms to make 1000 offers after filtering 378000 offers
round 378 allocate() took 92.5583ms to make 1000 offers after filtering 379000 offers
round 379 allocate() took 99.9011ms to make 1000 offers after filtering 380000 offers
round 380 allocate() took 96.3832ms to make 1000 offers after filtering 381000 offers
round 381 allocate() took 103.714ms to make 1000 offers after filtering 382000 offers
round 382 allocate() took 94.2026ms to make 1000 offers after filtering 383000 offers
round 383 allocate() took 105.897ms to make 1000 offers after filtering 384000 offers
round 384 allocate() took 102.864ms to make 1000 offers after filtering 385000 offers
round 385 allocate() took 97.5296ms to make 1000 offers after filtering 386000 offers
round 386 allocate() took 97.1741ms to make 1000 offers after filtering 387000 offers
round 387 allocate() took 98.6521ms to make 1000 offers after filtering 388000 offers
round 388 allocate() took 101.869ms to make 1000 offers after filtering 389000 offers
round 389 allocate() took 98.4426ms to make 1000 offers after filtering 390000 offers
round 390 allocate() took 105.741ms to make 1000 offers after filtering 391000 offers
round 391 allocate() took 108.668ms to make 1000 offers after filtering 392000 offers
round 392 allocate() took 115.337ms to make 1000 offers after filtering 393000 offers
round 393 allocate() took 103.518ms to make 1000 offers after filtering 394000 offers
round 394 allocate() took 109.81ms to make 1000 offers after filtering 395000 offers
round 395 allocate() took 107.036ms to make 1000 offers after filtering 396000 offers
round 396 allocate() took 105.338ms to make 1000 offers after filtering 397000 offers
round 397 allocate() took 105.576ms to make 1000 offers after filtering 398000 offers
round 398 allocate() took 114.354ms to make 1000 offers after filtering 399000 offers
round 399 allocate() took 114.78ms to make 1000 offers after filtering 400000 offers
round 400 allocate() took 128.764ms to make 1000 offers after filtering 401000 offers
round 401 allocate() took 117.37ms to make 1000 offers after filtering 402000 offers
round 402 allocate() took 120.953ms to make 1000 offers after filtering 403000 offers
round 403 allocate() took 130.353ms to make 1000 offers after filtering 404000 offers
round 404 allocate() took 164.708ms to make 1000 offers after filtering 405000 offers
round 405 allocate() took 139.55ms to make 1000 offers after filtering 406000 offers
round 406 allocate() took 150.352ms to make 1000 offers after filtering 407000 offers
round 407 allocate() took 147.875ms to make 1000 offers after filtering 408000 offers
round 408 allocate() took 169.377ms to make 1000 offers after filtering 409000 offers
round 409 allocate() took 133.379ms to make 1000 offers after filtering 410000 offers
round 410 allocate() took 140.929ms to make 1000 offers after filtering 411000 offers
round 411 allocate() took 136.794ms to make 1000 offers after filtering 412000 offers
round 412 allocate() took 137.735ms to make 1000 offers after filtering 413000 offers
round 413 allocate() took 194.353ms to make 1000 offers after filtering 414000 offers
round 414 allocate() took 133.945ms to make 1000 offers after filtering 415000 offers
round 415 allocate() took 135.624ms to make 1000 offers after filtering 416000 offers
round 416 allocate() took 188.676ms to make 1000 offers after filtering 417000 offers
round 417 allocate() took 172.045ms to make 1000 offers after filtering 418000 offers
round 418 allocate() took 166.023ms to make 1000 offers after filtering 419000 offers
round 419 allocate() took 155.177ms to make 1000 offers after filtering 420000 offers
round 420 allocate() took 154.241ms to make 1000 offers after filtering 421000 offers
round 421 allocate() took 161.956ms to make 1000 offers after filtering 422000 offers
round 422 allocate() took 165.201ms to make 1000 offers after filtering 423000 offers
round 423 allocate() took 141.996ms to make 1000 offers after filtering 424000 offers
round 424 allocate() took 159.023ms to make 1000 offers after filtering 425000 offers
round 425 allocate() took 183.697ms to make 1000 offers after filtering 426000 offers
round 426 allocate() took 182.128ms to make 1000 offers after filtering 427000 offers
round 427 allocate() took 167.881ms to make 1000 offers after filtering 428000 offers
round 428 allocate() took 167.875ms to make 1000 offers after filtering 429000 offers
round 429 allocate() took 179.076ms to make 1000 offers after filtering 430000 offers
round 430 allocate() took 155.26ms to make 1000 offers after filtering 431000 offers
round 431 allocate() took 167.543ms to make 1000 offers after filtering 432000 offers
round 432 allocate() took 170.75ms to make 1000 offers after filtering 433000 offers
round 433 allocate() took 174.551ms to make 1000 offers after filtering 434000 offers
round 434 allocate() took 175.726ms to make 1000 offers after filtering 435000 offers
round 435 allocate() took 189.921ms to make 1000 offers after filtering 436000 offers
round 436 allocate() took 204.84ms to make 1000 offers after filtering 437000 offers
round 437 allocate() took 200.174ms to make 1000 offers after filtering 438000 offers
round 438 allocate() took 192.34ms to make 1000 offers after filtering 439000 offers
round 439 allocate() took 190.289ms to make 1000 offers after filtering 440000 offers
round 440 allocate() took 188.914ms to make 1000 offers after filtering 441000 offers
round 441 allocate() took 192.17ms to make 1000 offers after filtering 442000 offers
round 442 allocate() took 195.385ms to make 1000 offers after filtering 443000 offers
round 443 allocate() took 210.42ms to make 1000 offers after filtering 444000 offers
round 444 allocate() took 207.173ms to make 1000 offers after filtering 445000 offers
round 445 allocate() took 204.144ms to make 1000 offers after filtering 446000 offers
round 446 allocate() took 208.471ms to make 1000 offers after filtering 447000 offers
round 447 allocate() took 221.676ms to make 1000 offers after filtering 448000 offers
round 448 allocate() took 222.286ms to make 1000 offers after filtering 449000 offers
round 449 allocate() took 221.566ms to make 1000 offers after filtering 450000 offers
round 450 allocate() took 239.995ms to make 1000 offers after filtering 451000 offers
round 451 allocate() took 244.494ms to make 1000 offers after filtering 452000 offers
round 452 allocate() took 226.159ms to make 1000 offers after filtering 453000 offers
round 453 allocate() took 255.145ms to make 1000 offers after filtering 454000 offers
round 454 allocate() took 255.047ms to make 1000 offers after filtering 455000 offers
round 455 allocate() took 267.907ms to make 1000 offers after filtering 456000 offers
round 456 allocate() took 271.945ms to make 1000 offers after filtering 457000 offers
round 457 allocate() took 257.02ms to make 1000 offers after filtering 458000 offers
round 458 allocate() took 266.546ms to make 1000 offers after filtering 459000 offers
round 459 allocate() took 300.27ms to make 1000 offers after filtering 460000 offers
round 460 allocate() took 279.867ms to make 1000 offers after filtering 461000 offers
round 461 allocate() took 289.722ms to make 1000 offers after filtering 462000 offers
round 462 allocate() took 306.197ms to make 1000 offers after filtering 463000 offers
round 463 allocate() took 310.402ms to make 1000 offers after filtering 464000 offers
round 464 allocate() took 315.617ms to make 1000 offers after filtering 465000 offers
round 465 allocate() took 331.05ms to make 1000 offers after filtering 466000 offers
round 466 allocate() took 326.992ms to make 1000 offers after filtering 467000 offers
round 467 allocate() took 383.029ms to make 1000 offers after filtering 468000 offers
round 468 allocate() took 377.97ms to make 1000 offers after filtering 469000 offers
round 469 allocate() took 385.744ms to make 1000 offers after filtering 470000 offers
round 470 allocate() took 386.417ms to make 1000 offers after filtering 471000 offers
round 471 allocate() took 368.315ms to make 1000 offers after filtering 472000 offers
round 472 allocate() took 474.101ms to make 1000 offers after filtering 473000 offers
round 473 allocate() took 411.344ms to make 1000 offers after filtering 474000 offers
round 474 allocate() took 410.315ms to make 1000 offers after filtering 475000 offers
round 475 allocate() took 399.043ms to make 1000 offers after filtering 476000 offers
round 476 allocate() took 409.796ms to make 1000 offers after filtering 477000 offers
round 477 allocate() took 375.789ms to make 1000 offers after filtering 478000 offers
round 478 allocate() took 458.395ms to make 1000 offers after filtering 479000 offers
round 479 allocate() took 477.515ms to make 1000 offers after filtering 480000 offers
round 480 allocate() took 437.423ms to make 1000 offers after filtering 481000 offers
round 481 allocate() took 437.347ms to make 1000 offers after filtering 482000 offers
round 482 allocate() took 498.898ms to make 1000 offers after filtering 483000 offers
round 483 allocate() took 482.352ms to make 1000 offers after filtering 484000 offers
round 484 allocate() took 470.363ms to make 1000 offers after filtering 485000 offers
round 485 allocate() took 491.267ms to make 1000 offers after filtering 486000 offers
round 486 allocate() took 498.423ms to make 1000 offers after filtering 487000 offers
round 487 allocate() took 520.17ms to make 1000 offers after filtering 488000 offers
round 488 allocate() took 564.598ms to make 1000 offers after filtering 489000 offers
round 489 allocate() took 581.649ms to make 1000 offers after filtering 490000 offers
round 490 allocate() took 575.418ms to make 1000 offers after filtering 491000 offers
round 491 allocate() took 643.322ms to make 1000 offers after filtering 492000 offers
round 492 allocate() took 694.066ms to make 1000 offers after filtering 493000 offers
round 493 allocate() took 692.645ms to make 1000 offers after filtering 494000 offers
round 494 allocate() took 789.98ms to make 1000 offers after filtering 495000 offers
round 495 allocate() took 871.893ms to make 1000 offers after filtering 496000 offers
round 496 allocate() took 1013.3ms to make 1000 offers after filtering 497000 offers
round 497 allocate() took 1340.32ms to make 1000 offers after filtering 498000 offers
round 498 allocate() took 1470.92ms to make 1000 offers after filtering 499000 offers
round 499 allocate() took 4329.82ms to make 0 offers after filtering 500000 offers
[       OK ] SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test.DeclineOffers/4 (86165 ms)
```

2) this patch
```
[ RUN      ] SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test.DeclineOffers/4
Using 1000 agents and 500 frameworks
Added 500 frameworks in 16.4873ms
Added 1000 agents in 81.0583ms
round 0 allocate() took 41.7778ms to make 1000 offers after filtering 1000 offers
round 1 allocate() took 44.5227ms to make 1000 offers after filtering 2000 offers
round 2 allocate() took 44.5248ms to make 1000 offers after filtering 3000 offers
round 3 allocate() took 55.67ms to make 1000 offers after filtering 4000 offers
round 4 allocate() took 41.5302ms to make 1000 offers after filtering 5000 offers
round 5 allocate() took 43.9274ms to make 1000 offers after filtering 6000 offers
round 6 allocate() took 46.8593ms to make 1000 offers after filtering 7000 offers
round 7 allocate() took 38.2174ms to make 1000 offers after filtering 8000 offers
round 8 allocate() took 54.2078ms to make 1000 offers after filtering 9000 offers
round 9 allocate() took 39.6176ms to make 1000 offers after filtering 10000 offers
round 10 allocate() took 40.6607ms to make 1000 offers after filtering 11000 offers
round 11 allocate() took 40.9309ms to make 1000 offers after filtering 12000 offers
round 12 allocate() took 40.5603ms to make 1000 offers after filtering 13000 offers
round 13 allocate() took 40.1238ms to make 1000 offers after filtering 14000 offers
round 14 allocate() took 44.733ms to make 1000 offers after filtering 15000 offers
round 15 allocate() took 42.1137ms to make 1000 offers after filtering 16000 offers
round 16 allocate() took 44.0295ms to make 1000 offers after filtering 17000 offers
round 17 allocate() took 42.209ms to make 1000 offers after filtering 18000 offers
round 18 allocate() took 44.5247ms to make 1000 offers after filtering 19000 offers
round 19 allocate() took 46.5887ms to make 1000 offers after filtering 20000 offers
round 20 allocate() took 40.1949ms to make 1000 offers after filtering 21000 offers
round 21 allocate() took 40.5234ms to make 1000 offers after filtering 22000 offers
round 22 allocate() took 39.5232ms to make 1000 offers after filtering 23000 offers
round 23 allocate() took 39.9007ms to make 1000 offers after filtering 24000 offers
round 24 allocate() took 57.5847ms to make 1000 offers after filtering 25000 offers
round 25 allocate() took 42.8214ms to make 1000 offers after filtering 26000 offers
round 26 allocate() took 44.9137ms to make 1000 offers after filtering 27000 offers
round 27 allocate() took 45.83ms to make 1000 offers after filtering 28000 offers
round 28 allocate() took 41.8177ms to make 1000 offers after filtering 29000 offers
round 29 allocate() took 50.1399ms to make 1000 offers after filtering 30000 offers
round 30 allocate() took 39.4904ms to make 1000 offers after filtering 31000 offers
round 31 allocate() took 36.9673ms to make 1000 offers after filtering 32000 offers
round 32 allocate() took 42.4145ms to make 1000 offers after filtering 33000 offers
round 33 allocate() took 41.0312ms to make 1000 offers after filtering 34000 offers
round 34 allocate() took 41.4932ms to make 1000 offers after filtering 35000 offers
round 35 allocate() took 44.8463ms to make 1000 offers after filtering 36000 offers
round 36 allocate() took 40.3809ms to make 1000 offers after filtering 37000 offers
round 37 allocate() took 40.9504ms to make 1000 offers after filtering 38000 offers
round 38 allocate() took 45.9359ms to make 1000 offers after filtering 39000 offers
round 39 allocate() took 44.8781ms to make 1000 offers after filtering 40000 offers
round 40 allocate() took 47.8755ms to make 1000 offers after filtering 41000 offers
round 41 allocate() took 40.1225ms to make 1000 offers after filtering 42000 offers
round 42 allocate() took 45.1798ms to make 1000 offers after filtering 43000 offers
round 43 allocate() took 44.7383ms to make 1000 offers after filtering 44000 offers
round 44 allocate() took 40.2019ms to make 1000 offers after filtering 45000 offers
round 45 allocate() took 40.7632ms to make 1000 offers after filtering 46000 offers
round 46 allocate() took 41.5674ms to make 1000 offers after filtering 47000 offers
round 47 allocate() took 39.7773ms to make 1000 offers after filtering 48000 offers
round 48 allocate() took 42.0012ms to make 1000 offers after filtering 49000 offers
round 49 allocate() took 41.6746ms to make 1000 offers after filtering 50000 offers
round 50 allocate() took 45.0609ms to make 1000 offers after filtering 51000 offers
round 51 allocate() took 47.7509ms to make 1000 offers after filtering 52000 offers
round 52 allocate() took 46.9355ms to make 1000 offers after filtering 53000 offers
round 53 allocate() took 44.804ms to make 1000 offers after filtering 54000 offers
round 54 allocate() took 37.5781ms to make 1000 offers after filtering 55000 offers
round 55 allocate() took 43.6815ms to make 1000 offers after filtering 56000 offers
round 56 allocate() took 45.4468ms to make 1000 offers after filtering 57000 offers
round 57 allocate() took 50.7323ms to make 1000 offers after filtering 58000 offers
round 58 allocate() took 43.6692ms to make 1000 offers after filtering 59000 offers
round 59 allocate() took 47.5851ms to make 1000 offers after filtering 60000 offers
round 60 allocate() took 43.6564ms to make 1000 offers after filtering 61000 offers
round 61 allocate() took 48.1349ms to make 1000 offers after filtering 62000 offers
round 62 allocate() took 51.6804ms to make 1000 offers after filtering 63000 offers
round 63 allocate() took 43.0078ms to make 1000 offers after filtering 64000 offers
round 64 allocate() took 46.7052ms to make 1000 offers after filtering 65000 offers
round 65 allocate() took 44.855ms to make 1000 offers after filtering 66000 offers
round 66 allocate() took 42.1539ms to make 1000 offers after filtering 67000 offers
round 67 allocate() took 48.4541ms to make 1000 offers after filtering 68000 offers
round 68 allocate() took 44.5711ms to make 1000 offers after filtering 69000 offers
round 69 allocate() took 42.9009ms to make 1000 offers after filtering 70000 offers
round 70 allocate() took 42.2619ms to make 1000 offers after filtering 71000 offers
round 71 allocate() took 44.4746ms to make 1000 offers after filtering 72000 offers
round 72 allocate() took 56.8473ms to make 1000 offers after filtering 73000 offers
round 73 allocate() took 45.4119ms to make 1000 offers after filtering 74000 offers
round 74 allocate() took 42.881ms to make 1000 offers after filtering 75000 offers
round 75 allocate() took 41.3894ms to make 1000 offers after filtering 76000 offers
round 76 allocate() took 41.5492ms to make 1000 offers after filtering 77000 offers
round 77 allocate() took 51.9409ms to make 1000 offers after filtering 78000 offers
round 78 allocate() took 47.2258ms to make 1000 offers after filtering 79000 offers
round 79 allocate() took 46.9158ms to make 1000 offers after filtering 80000 offers
round 80 allocate() took 44.0292ms to make 1000 offers after filtering 81000 offers
round 81 allocate() took 43.5527ms to make 1000 offers after filtering 82000 offers
round 82 allocate() took 44.8989ms to make 1000 offers after filtering 83000 offers
round 83 allocate() took 43.791ms to make 1000 offers after filtering 84000 offers
round 84 allocate() took 43.1034ms to make 1000 offers after filtering 85000 offers
round 85 allocate() took 44.0385ms to make 1000 offers after filtering 86000 offers
round 86 allocate() took 41.9909ms to make 1000 offers after filtering 87000 offers
round 87 allocate() took 43.1027ms to make 1000 offers after filtering 88000 offers
round 88 allocate() took 46.4567ms to make 1000 offers after filtering 89000 offers
round 89 allocate() took 43.946ms to make 1000 offers after filtering 90000 offers
round 90 allocate() took 43.2952ms to make 1000 offers after filtering 91000 offers
round 91 allocate() took 46.274ms to make 1000 offers after filtering 92000 offers
round 92 allocate() took 45.3235ms to make 1000 offers after filtering 93000 offers
round 93 allocate() took 53.0461ms to make 1000 offers after filtering 94000 offers
round 94 allocate() took 46.7041ms to make 1000 offers after filtering 95000 offers
round 95 allocate() took 48.0469ms to make 1000 offers after filtering 96000 offers
round 96 allocate() took 46.9947ms to make 1000 offers after filtering 97000 offers
round 97 allocate() took 52.4771ms to make 1000 offers after filtering 98000 offers
round 98 allocate() took 45.9957ms to make 1000 offers after filtering 99000 offers
round 99 allocate() took 49.3076ms to make 1000 offers after filtering 100000 offers
round 100 allocate() took 50.3469ms to make 1000 offers after filtering 101000 offers
round 101 allocate() took 46.8658ms to make 1000 offers after filtering 102000 offers
round 102 allocate() took 49.7557ms to make 1000 offers after filtering 103000 offers
round 103 allocate() took 42.7787ms to make 1000 offers after filtering 104000 offers
round 104 allocate() took 46.4922ms to make 1000 offers after filtering 105000 offers
round 105 allocate() took 52.1817ms to make 1000 offers after filtering 106000 offers
round 106 allocate() took 48.062ms to make 1000 offers after filtering 107000 offers
round 107 allocate() took 42.7622ms to make 1000 offers after filtering 108000 offers
round 108 allocate() took 46.5593ms to make 1000 offers after filtering 109000 offers
round 109 allocate() took 50.6869ms to make 1000 offers after filtering 110000 offers
round 110 allocate() took 51.2224ms to make 1000 offers after filtering 111000 offers
round 111 allocate() took 46.8986ms to make 1000 offers after filtering 112000 offers
round 112 allocate() took 44.2902ms to make 1000 offers after filtering 113000 offers
round 113 allocate() took 44.7367ms to make 1000 offers after filtering 114000 offers
round 114 allocate() took 47.1476ms to make 1000 offers after filtering 115000 offers
round 115 allocate() took 47.6537ms to make 1000 offers after filtering 116000 offers
round 116 allocate() took 47.3911ms to make 1000 offers after filtering 117000 offers
round 117 allocate() took 44.0588ms to make 1000 offers after filtering 118000 offers
round 118 allocate() took 47.8907ms to make 1000 offers after filtering 119000 offers
round 119 allocate() took 45.273ms to make 1000 offers after filtering 120000 offers
round 120 allocate() took 61.2225ms to make 1000 offers after filtering 121000 offers
round 121 allocate() took 49.7682ms to make 1000 offers after filtering 122000 offers
round 122 allocate() took 46.3266ms to make 1000 offers after filtering 123000 offers
round 123 allocate() took 44.6682ms to make 1000 offers after filtering 124000 offers
round 124 allocate() took 43.9654ms to make 1000 offers after filtering 125000 offers
round 125 allocate() took 45.2944ms to make 1000 offers after filtering 126000 offers
round 126 allocate() took 47.8649ms to make 1000 offers after filtering 127000 offers
round 127 allocate() took 42.3189ms to make 1000 offers after filtering 128000 offers
round 128 allocate() took 45.1303ms to make 1000 offers after filtering 129000 offers
round 129 allocate() took 43.8637ms to make 1000 offers after filtering 130000 offers
round 130 allocate() took 48.1541ms to make 1000 offers after filtering 131000 offers
round 131 allocate() took 48.3953ms to make 1000 offers after filtering 132000 offers
round 132 allocate() took 44.4208ms to make 1000 offers after filtering 133000 offers
round 133 allocate() took 49.7805ms to make 1000 offers after filtering 134000 offers
round 134 allocate() took 46.1338ms to make 1000 offers after filtering 135000 offers
round 135 allocate() took 47.4951ms to make 1000 offers after filtering 136000 offers
round 136 allocate() took 48.5481ms to make 1000 offers after filtering 137000 offers
round 137 allocate() took 47.127ms to make 1000 offers after filtering 138000 offers
round 138 allocate() took 49.8715ms to make 1000 offers after filtering 139000 offers
round 139 allocate() took 49.8043ms to make 1000 offers after filtering 140000 offers
round 140 allocate() took 50.6905ms to make 1000 offers after filtering 141000 offers
round 141 allocate() took 48.438ms to make 1000 offers after filtering 142000 offers
round 142 allocate() took 49.9246ms to make 1000 offers after filtering 143000 offers
round 143 allocate() took 45.3852ms to make 1000 offers after filtering 144000 offers
round 144 allocate() took 48.4808ms to make 1000 offers after filtering 145000 offers
round 145 allocate() took 49.4795ms to make 1000 offers after filtering 146000 offers
round 146 allocate() took 46.4664ms to make 1000 offers after filtering 147000 offers
round 147 allocate() took 45.796ms to make 1000 offers after filtering 148000 offers
round 148 allocate() took 50.8549ms to make 1000 offers after filtering 149000 offers
round 149 allocate() took 47.307ms to make 1000 offers after filtering 150000 offers
round 150 allocate() took 50.3633ms to make 1000 offers after filtering 151000 offers
round 151 allocate() took 44.0746ms to make 1000 offers after filtering 152000 offers
round 152 allocate() took 50.5557ms to make 1000 offers after filtering 153000 offers
round 153 allocate() took 49.0232ms to make 1000 offers after filtering 154000 offers
round 154 allocate() took 50.4216ms to make 1000 offers after filtering 155000 offers
round 155 allocate() took 49.1707ms to make 1000 offers after filtering 156000 offers
round 156 allocate() took 46.3999ms to make 1000 offers after filtering 157000 offers
round 157 allocate() took 55.3348ms to make 1000 offers after filtering 158000 offers
round 158 allocate() took 46.5126ms to make 1000 offers after filtering 159000 offers
round 159 allocate() took 48.4435ms to make 1000 offers after filtering 160000 offers
round 160 allocate() took 51.8479ms to make 1000 offers after filtering 161000 offers
round 161 allocate() took 48.0845ms to make 1000 offers after filtering 162000 offers
round 162 allocate() took 51.2825ms to make 1000 offers after filtering 163000 offers
round 163 allocate() took 52.404ms to make 1000 offers after filtering 164000 offers
round 164 allocate() took 51.8101ms to make 1000 offers after filtering 165000 offers
round 165 allocate() took 48.5931ms to make 1000 offers after filtering 166000 offers
round 166 allocate() took 54.2642ms to make 1000 offers after filtering 167000 offers
round 167 allocate() took 51.5216ms to make 1000 offers after filtering 168000 offers
round 168 allocate() took 52.9872ms to make 1000 offers after filtering 169000 offers
round 169 allocate() took 50.1876ms to make 1000 offers after filtering 170000 offers
round 170 allocate() took 48.3152ms to make 1000 offers after filtering 171000 offers
round 171 allocate() took 50.1136ms to make 1000 offers after filtering 172000 offers
round 172 allocate() took 48.0973ms to make 1000 offers after filtering 173000 offers
round 173 allocate() took 54.444ms to make 1000 offers after filtering 174000 offers
round 174 allocate() took 50.5152ms to make 1000 offers after filtering 175000 offers
round 175 allocate() took 45.3613ms to make 1000 offers after filtering 176000 offers
round 176 allocate() took 51.7628ms to make 1000 offers after filtering 177000 offers
round 177 allocate() took 52.1021ms to make 1000 offers after filtering 178000 offers
round 178 allocate() took 50.2592ms to make 1000 offers after filtering 179000 offers
round 179 allocate() took 52.5312ms to make 1000 offers after filtering 180000 offers
round 180 allocate() took 47.6698ms to make 1000 offers after filtering 181000 offers
round 181 allocate() took 52.2107ms to make 1000 offers after filtering 182000 offers
round 182 allocate() took 49.881ms to make 1000 offers after filtering 183000 offers
round 183 allocate() took 52.3005ms to make 1000 offers after filtering 184000 offers
round 184 allocate() took 47.7453ms to make 1000 offers after filtering 185000 offers
round 185 allocate() took 53.0344ms to make 1000 offers after filtering 186000 offers
round 186 allocate() took 53.6779ms to make 1000 offers after filtering 187000 offers
round 187 allocate() took 53.3131ms to make 1000 offers after filtering 188000 offers
round 188 allocate() took 53.8281ms to make 1000 offers after filtering 189000 offers
round 189 allocate() took 52.3641ms to make 1000 offers after filtering 190000 offers
round 190 allocate() took 51.992ms to make 1000 offers after filtering 191000 offers
round 191 allocate() took 50.2624ms to make 1000 offers after filtering 192000 offers
round 192 allocate() took 66.0229ms to make 1000 offers after filtering 193000 offers
round 193 allocate() took 54.5283ms to make 1000 offers after filtering 194000 offers
round 194 allocate() took 48.5434ms to make 1000 offers after filtering 195000 offers
round 195 allocate() took 46.7207ms to make 1000 offers after filtering 196000 offers
round 196 allocate() took 53.0438ms to make 1000 offers after filtering 197000 offers
round 197 allocate() took 49.0459ms to make 1000 offers after filtering 198000 offers
round 198 allocate() took 50.0324ms to make 1000 offers after filtering 199000 offers
round 199 allocate() took 46.2716ms to make 1000 offers after filtering 200000 offers
round 200 allocate() took 52.332ms to make 1000 offers after filtering 201000 offers
round 201 allocate() took 53.488ms to make 1000 offers after filtering 202000 offers
round 202 allocate() took 52.0786ms to make 1000 offers after filtering 203000 offers
round 203 allocate() took 55.5281ms to make 1000 offers after filtering 204000 offers
round 204 allocate() took 52.5077ms to make 1000 offers after filtering 205000 offers
round 205 allocate() took 60.0233ms to make 1000 offers after filtering 206000 offers
round 206 allocate() took 49.8637ms to make 1000 offers after filtering 207000 offers
round 207 allocate() took 50.9123ms to make 1000 offers after filtering 208000 offers
round 208 allocate() took 57.8844ms to make 1000 offers after filtering 209000 offers
round 209 allocate() took 54.0757ms to make 1000 offers after filtering 210000 offers
round 210 allocate() took 57.3428ms to make 1000 offers after filtering 211000 offers
round 211 allocate() took 54.9045ms to make 1000 offers after filtering 212000 offers
round 212 allocate() took 53.7657ms to make 1000 offers after filtering 213000 offers
round 213 allocate() took 53.1281ms to make 1000 offers after filtering 214000 offers
round 214 allocate() took 54.8563ms to make 1000 offers after filtering 215000 offers
round 215 allocate() took 50.8815ms to make 1000 offers after filtering 216000 offers
round 216 allocate() took 50.6735ms to make 1000 offers after filtering 217000 offers
round 217 allocate() took 59.0934ms to make 1000 offers after filtering 218000 offers
round 218 allocate() took 53.812ms to make 1000 offers after filtering 219000 offers
round 219 allocate() took 52.406ms to make 1000 offers after filtering 220000 offers
round 220 allocate() took 50.8577ms to make 1000 offers after filtering 221000 offers
round 221 allocate() took 49.9648ms to make 1000 offers after filtering 222000 offers
round 222 allocate() took 53.9701ms to make 1000 offers after filtering 223000 offers
round 223 allocate() took 55.0261ms to make 1000 offers after filtering 224000 offers
round 224 allocate() took 49.8903ms to make 1000 offers after filtering 225000 offers
round 225 allocate() took 56.6535ms to make 1000 offers after filtering 226000 offers
round 226 allocate() took 55.405ms to make 1000 offers after filtering 227000 offers
round 227 allocate() took 56.8477ms to make 1000 offers after filtering 228000 offers
round 228 allocate() took 56.2507ms to make 1000 offers after filtering 229000 offers
round 229 allocate() took 74.023ms to make 1000 offers after filtering 230000 offers
round 230 allocate() took 60.1671ms to make 1000 offers after filtering 231000 offers
round 231 allocate() took 63.4994ms to make 1000 offers after filtering 232000 offers
round 232 allocate() took 54.0506ms to make 1000 offers after filtering 233000 offers
round 233 allocate() took 65.1516ms to make 1000 offers after filtering 234000 offers
round 234 allocate() took 62.9092ms to make 1000 offers after filtering 235000 offers
round 235 allocate() took 63.1723ms to make 1000 offers after filtering 236000 offers
round 236 allocate() took 64.0823ms to make 1000 offers after filtering 237000 offers
round 237 allocate() took 61.7044ms to make 1000 offers after filtering 238000 offers
round 238 allocate() took 62.7199ms to make 1000 offers after filtering 239000 offers
round 239 allocate() took 57.2652ms to make 1000 offers after filtering 240000 offers
round 240 allocate() took 68.0861ms to make 1000 offers after filtering 241000 offers
round 241 allocate() took 65.3346ms to make 1000 offers after filtering 242000 offers
round 242 allocate() took 56.1819ms to make 1000 offers after filtering 243000 offers
round 243 allocate() took 56.3008ms to make 1000 offers after filtering 244000 offers
round 244 allocate() took 61.102ms to make 1000 offers after filtering 245000 offers
round 245 allocate() took 59.6332ms to make 1000 offers after filtering 246000 offers
round 246 allocate() took 61.6356ms to make 1000 offers after filtering 247000 offers
round 247 allocate() took 61.4362ms to make 1000 offers after filtering 248000 offers
round 248 allocate() took 53.8474ms to make 1000 offers after filtering 249000 offers
round 249 allocate() took 52.8345ms to make 1000 offers after filtering 250000 offers
round 250 allocate() took 59.6213ms to make 1000 offers after filtering 251000 offers
round 251 allocate() took 54.8179ms to make 1000 offers after filtering 252000 offers
round 252 allocate() took 58.3169ms to make 1000 offers after filtering 253000 offers
round 253 allocate() took 60.5552ms to make 1000 offers after filtering 254000 offers
round 254 allocate() took 56.5472ms to make 1000 offers after filtering 255000 offers
round 255 allocate() took 69.2071ms to make 1000 offers after filtering 256000 offers
round 256 allocate() took 54.4318ms to make 1000 offers after filtering 257000 offers
round 257 allocate() took 59.9878ms to make 1000 offers after filtering 258000 offers
round 258 allocate() took 61.0531ms to make 1000 offers after filtering 259000 offers
round 259 allocate() took 58.1038ms to make 1000 offers after filtering 260000 offers
round 260 allocate() took 60.3954ms to make 1000 offers after filtering 261000 offers
round 261 allocate() took 58.6118ms to make 1000 offers after filtering 262000 offers
round 262 allocate() took 54.1498ms to make 1000 offers after filtering 263000 offers
round 263 allocate() took 58.3219ms to make 1000 offers after filtering 264000 offers
round 264 allocate() took 58.4455ms to make 1000 offers after filtering 265000 offers
round 265 allocate() took 61.308ms to make 1000 offers after filtering 266000 offers
round 266 allocate() took 58.1951ms to make 1000 offers after filtering 267000 offers
round 267 allocate() took 53.3768ms to make 1000 offers after filtering 268000 offers
round 268 allocate() took 55.8097ms to make 1000 offers after filtering 269000 offers
round 269 allocate() took 55.7061ms to make 1000 offers after filtering 270000 offers
round 270 allocate() took 59.2165ms to make 1000 offers after filtering 271000 offers
round 271 allocate() took 58.9237ms to make 1000 offers after filtering 272000 offers
round 272 allocate() took 61.3869ms to make 1000 offers after filtering 273000 offers
round 273 allocate() took 61.8158ms to make 1000 offers after filtering 274000 offers
round 274 allocate() took 60.8892ms to make 1000 offers after filtering 275000 offers
round 275 allocate() took 63.0093ms to make 1000 offers after filtering 276000 offers
round 276 allocate() took 61.137ms to make 1000 offers after filtering 277000 offers
round 277 allocate() took 57.0159ms to make 1000 offers after filtering 278000 offers
round 278 allocate() took 60.8722ms to make 1000 offers after filtering 279000 offers
round 279 allocate() took 60.0379ms to make 1000 offers after filtering 280000 offers
round 280 allocate() took 57.8231ms to make 1000 offers after filtering 281000 offers
round 281 allocate() took 62.3983ms to make 1000 offers after filtering 282000 offers
round 282 allocate() took 64.023ms to make 1000 offers after filtering 283000 offers
round 283 allocate() took 64.8685ms to make 1000 offers after filtering 284000 offers
round 284 allocate() took 62.5301ms to make 1000 offers after filtering 285000 offers
round 285 allocate() took 55.9546ms to make 1000 offers after filtering 286000 offers
round 286 allocate() took 63.0944ms to make 1000 offers after filtering 287000 offers
round 287 allocate() took 59.6808ms to make 1000 offers after filtering 288000 offers
round 288 allocate() took 74.7162ms to make 1000 offers after filtering 289000 offers
round 289 allocate() took 77.3274ms to make 1000 offers after filtering 290000 offers
round 290 allocate() took 75.3333ms to make 1000 offers after filtering 291000 offers
round 291 allocate() took 62.4031ms to make 1000 offers after filtering 292000 offers
round 292 allocate() took 68.3909ms to make 1000 offers after filtering 293000 offers
round 293 allocate() took 70.0587ms to make 1000 offers after filtering 294000 offers
round 294 allocate() took 71.2835ms to make 1000 offers after filtering 295000 offers
round 295 allocate() took 70.9114ms to make 1000 offers after filtering 296000 offers
round 296 allocate() took 72.9122ms to make 1000 offers after filtering 297000 offers
round 297 allocate() took 60.7703ms to make 1000 offers after filtering 298000 offers
round 298 allocate() took 69.9671ms to make 1000 offers after filtering 299000 offers
round 299 allocate() took 74.8219ms to make 1000 offers after filtering 300000 offers
round 300 allocate() took 68.2744ms to make 1000 offers after filtering 301000 offers
round 301 allocate() took 70.5552ms to make 1000 offers after filtering 302000 offers
round 302 allocate() took 65.0067ms to make 1000 offers after filtering 303000 offers
round 303 allocate() took 72.0208ms to make 1000 offers after filtering 304000 offers
round 304 allocate() took 76.8248ms to make 1000 offers after filtering 305000 offers
round 305 allocate() took 74.9493ms to make 1000 offers after filtering 306000 offers
round 306 allocate() took 81.5447ms to make 1000 offers after filtering 307000 offers
round 307 allocate() took 77.949ms to make 1000 offers after filtering 308000 offers
round 308 allocate() took 76.6079ms to make 1000 offers after filtering 309000 offers
round 309 allocate() took 74.3411ms to make 1000 offers after filtering 310000 offers
round 310 allocate() took 66.6751ms to make 1000 offers after filtering 311000 offers
round 311 allocate() took 66.7913ms to make 1000 offers after filtering 312000 offers
round 312 allocate() took 73.7461ms to make 1000 offers after filtering 313000 offers
round 313 allocate() took 72.1125ms to make 1000 offers after filtering 314000 offers
round 314 allocate() took 78.8456ms to make 1000 offers after filtering 315000 offers
round 315 allocate() took 64.3293ms to make 1000 offers after filtering 316000 offers
round 316 allocate() took 72.4045ms to make 1000 offers after filtering 317000 offers
round 317 allocate() took 66.9968ms to make 1000 offers after filtering 318000 offers
round 318 allocate() took 70.4469ms to make 1000 offers after filtering 319000 offers
round 319 allocate() took 68.3307ms to make 1000 offers after filtering 320000 offers
round 320 allocate() took 72.4486ms to make 1000 offers after filtering 321000 offers
round 321 allocate() took 75.7555ms to make 1000 offers after filtering 322000 offers
round 322 allocate() took 69.0754ms to make 1000 offers after filtering 323000 offers
round 323 allocate() took 74.8703ms to make 1000 offers after filtering 324000 offers
round 324 allocate() took 73.7952ms to make 1000 offers after filtering 325000 offers
round 325 allocate() took 76.2883ms to make 1000 offers after filtering 326000 offers
round 326 allocate() took 68.6875ms to make 1000 offers after filtering 327000 offers
round 327 allocate() took 71.121ms to make 1000 offers after filtering 328000 offers
round 328 allocate() took 70.3335ms to make 1000 offers after filtering 329000 offers
round 329 allocate() took 68.0637ms to make 1000 offers after filtering 330000 offers
round 330 allocate() took 76.386ms to make 1000 offers after filtering 331000 offers
round 331 allocate() took 75.1233ms to make 1000 offers after filtering 332000 offers
round 332 allocate() took 79.4195ms to make 1000 offers after filtering 333000 offers
round 333 allocate() took 74.3742ms to make 1000 offers after filtering 334000 offers
round 334 allocate() took 74.7608ms to make 1000 offers after filtering 335000 offers
round 335 allocate() took 75.1096ms to make 1000 offers after filtering 336000 offers
round 336 allocate() took 75.8252ms to make 1000 offers after filtering 337000 offers
round 337 allocate() took 78.2447ms to make 1000 offers after filtering 338000 offers
round 338 allocate() took 75.4693ms to make 1000 offers after filtering 339000 offers
round 339 allocate() took 73.4176ms to make 1000 offers after filtering 340000 offers
round 340 allocate() took 75.0436ms to make 1000 offers after filtering 341000 offers
round 341 allocate() took 72.1833ms to make 1000 offers after filtering 342000 offers
round 342 allocate() took 75.8582ms to make 1000 offers after filtering 343000 offers
round 343 allocate() took 85.0995ms to make 1000 offers after filtering 344000 offers
round 344 allocate() took 78.8433ms to make 1000 offers after filtering 345000 offers
round 345 allocate() took 83.115ms to make 1000 offers after filtering 346000 offers
round 346 allocate() took 80.5135ms to make 1000 offers after filtering 347000 offers
round 347 allocate() took 82.9217ms to make 1000 offers after filtering 348000 offers
round 348 allocate() took 73.8033ms to make 1000 offers after filtering 349000 offers
round 349 allocate() took 82.5932ms to make 1000 offers after filtering 350000 offers
round 350 allocate() took 75.9056ms to make 1000 offers after filtering 351000 offers
round 351 allocate() took 87.0434ms to make 1000 offers after filtering 352000 offers
round 352 allocate() took 82.3068ms to make 1000 offers after filtering 353000 offers
round 353 allocate() took 83.9715ms to make 1000 offers after filtering 354000 offers
round 354 allocate() took 109.859ms to make 1000 offers after filtering 355000 offers
round 355 allocate() took 82.8202ms to make 1000 offers after filtering 356000 offers
round 356 allocate() took 87.9937ms to make 1000 offers after filtering 357000 offers
round 357 allocate() took 85.5557ms to make 1000 offers after filtering 358000 offers
round 358 allocate() took 88.6185ms to make 1000 offers after filtering 359000 offers
round 359 allocate() took 82.1789ms to make 1000 offers after filtering 360000 offers
round 360 allocate() took 85.2816ms to make 1000 offers after filtering 361000 offers
round 361 allocate() took 86.9197ms to make 1000 offers after filtering 362000 offers
round 362 allocate() took 83.4324ms to make 1000 offers after filtering 363000 offers
round 363 allocate() took 84.1309ms to make 1000 offers after filtering 364000 offers
round 364 allocate() took 85.9331ms to make 1000 offers after filtering 365000 offers
round 365 allocate() took 94.0053ms to make 1000 offers after filtering 366000 offers
round 366 allocate() took 90.5514ms to make 1000 offers after filtering 367000 offers
round 367 allocate() took 94.5562ms to make 1000 offers after filtering 368000 offers
round 368 allocate() took 88.5705ms to make 1000 offers after filtering 369000 offers
round 369 allocate() took 97.0825ms to make 1000 offers after filtering 370000 offers
round 370 allocate() took 87.8231ms to make 1000 offers after filtering 371000 offers
round 371 allocate() took 97.189ms to make 1000 offers after filtering 372000 offers
round 372 allocate() took 98.5036ms to make 1000 offers after filtering 373000 offers
round 373 allocate() took 99.4369ms to make 1000 offers after filtering 374000 offers
round 374 allocate() took 114.533ms to make 1000 offers after filtering 375000 offers
round 375 allocate() took 101.366ms to make 1000 offers after filtering 376000 offers
round 376 allocate() took 99.414ms to make 1000 offers after filtering 377000 offers
round 377 allocate() took 113.102ms to make 1000 offers after filtering 378000 offers
round 378 allocate() took 116.005ms to make 1000 offers after filtering 379000 offers
round 379 allocate() took 124.245ms to make 1000 offers after filtering 380000 offers
round 380 allocate() took 132.603ms to make 1000 offers after filtering 381000 offers
round 381 allocate() took 126.536ms to make 1000 offers after filtering 382000 offers
round 382 allocate() took 105.934ms to make 1000 offers after filtering 383000 offers
round 383 allocate() took 123.358ms to make 1000 offers after filtering 384000 offers
round 384 allocate() took 105.557ms to make 1000 offers after filtering 385000 offers
round 385 allocate() took 138.488ms to make 1000 offers after filtering 386000 offers
round 386 allocate() took 119.339ms to make 1000 offers after filtering 387000 offers
round 387 allocate() took 108.765ms to make 1000 offers after filtering 388000 offers
round 388 allocate() took 113.331ms to make 1000 offers after filtering 389000 offers
round 389 allocate() took 112.462ms to make 1000 offers after filtering 390000 offers
round 390 allocate() took 154.263ms to make 1000 offers after filtering 391000 offers
round 391 allocate() took 116.572ms to make 1000 offers after filtering 392000 offers
round 392 allocate() took 133.71ms to make 1000 offers after filtering 393000 offers
round 393 allocate() took 124.824ms to make 1000 offers after filtering 394000 offers
round 394 allocate() took 128.796ms to make 1000 offers after filtering 395000 offers
round 395 allocate() took 142.296ms to make 1000 offers after filtering 396000 offers
round 396 allocate() took 143.066ms to make 1000 offers after filtering 397000 offers
round 397 allocate() took 118.412ms to make 1000 offers after filtering 398000 offers
round 398 allocate() took 129.187ms to make 1000 offers after filtering 399000 offers
round 399 allocate() took 121.089ms to make 1000 offers after filtering 400000 offers
round 400 allocate() took 136.114ms to make 1000 offers after filtering 401000 offers
round 401 allocate() took 135.352ms to make 1000 offers after filtering 402000 offers
round 402 allocate() took 138.745ms to make 1000 offers after filtering 403000 offers
round 403 allocate() took 135.666ms to make 1000 offers after filtering 404000 offers
round 404 allocate() took 131.106ms to make 1000 offers after filtering 405000 offers
round 405 allocate() took 132.718ms to make 1000 offers after filtering 406000 offers
round 406 allocate() took 134.443ms to make 1000 offers after filtering 407000 offers
round 407 allocate() took 129.356ms to make 1000 offers after filtering 408000 offers
round 408 allocate() took 133.507ms to make 1000 offers after filtering 409000 offers
round 409 allocate() took 136.21ms to make 1000 offers after filtering 410000 offers
round 410 allocate() took 130.856ms to make 1000 offers after filtering 411000 offers
round 411 allocate() took 129.093ms to make 1000 offers after filtering 412000 offers
round 412 allocate() took 136.277ms to make 1000 offers after filtering 413000 offers
round 413 allocate() took 139.616ms to make 1000 offers after filtering 414000 offers
round 414 allocate() took 138.172ms to make 1000 offers after filtering 415000 offers
round 415 allocate() took 134.04ms to make 1000 offers after filtering 416000 offers
round 416 allocate() took 145.244ms to make 1000 offers after filtering 417000 offers
round 417 allocate() took 146.887ms to make 1000 offers after filtering 418000 offers
round 418 allocate() took 146.104ms to make 1000 offers after filtering 419000 offers
round 419 allocate() took 147.044ms to make 1000 offers after filtering 420000 offers
round 420 allocate() took 152.445ms to make 1000 offers after filtering 421000 offers
round 421 allocate() took 142.891ms to make 1000 offers after filtering 422000 offers
round 422 allocate() took 153.533ms to make 1000 offers after filtering 423000 offers
round 423 allocate() took 149.142ms to make 1000 offers after filtering 424000 offers
round 424 allocate() took 153.139ms to make 1000 offers after filtering 425000 offers
round 425 allocate() took 158.203ms to make 1000 offers after filtering 426000 offers
round 426 allocate() took 163.556ms to make 1000 offers after filtering 427000 offers
round 427 allocate() took 158.038ms to make 1000 offers after filtering 428000 offers
round 428 allocate() took 165.972ms to make 1000 offers after filtering 429000 offers
round 429 allocate() took 175.71ms to make 1000 offers after filtering 430000 offers
round 430 allocate() took 166.335ms to make 1000 offers after filtering 431000 offers
round 431 allocate() took 183.679ms to make 1000 offers after filtering 432000 offers
round 432 allocate() took 172.698ms to make 1000 offers after filtering 433000 offers
round 433 allocate() took 180.058ms to make 1000 offers after filtering 434000 offers
round 434 allocate() took 185.178ms to make 1000 offers after filtering 435000 offers
round 435 allocate() took 190.323ms to make 1000 offers after filtering 436000 offers
round 436 allocate() took 200.982ms to make 1000 offers after filtering 437000 offers
round 437 allocate() took 198.275ms to make 1000 offers after filtering 438000 offers
round 438 allocate() took 198.384ms to make 1000 offers after filtering 439000 offers
round 439 allocate() took 205.042ms to make 1000 offers after filtering 440000 offers
round 440 allocate() took 207.848ms to make 1000 offers after filtering 441000 offers
round 441 allocate() took 230.639ms to make 1000 offers after filtering 442000 offers
round 442 allocate() took 221.931ms to make 1000 offers after filtering 443000 offers
round 443 allocate() took 232.058ms to make 1000 offers after filtering 444000 offers
round 444 allocate() took 228.704ms to make 1000 offers after filtering 445000 offers
round 445 allocate() took 233.468ms to make 1000 offers after filtering 446000 offers
round 446 allocate() took 221.769ms to make 1000 offers after filtering 447000 offers
round 447 allocate() took 242.821ms to make 1000 offers after filtering 448000 offers
round 448 allocate() took 243.381ms to make 1000 offers after filtering 449000 offers
round 449 allocate() took 243.075ms to make 1000 offers after filtering 450000 offers
round 450 allocate() took 245.789ms to make 1000 offers after filtering 451000 offers
round 451 allocate() took 258.389ms to make 1000 offers after filtering 452000 offers
round 452 allocate() took 284.374ms to make 1000 offers after filtering 453000 offers
round 453 allocate() took 281.546ms to make 1000 offers after filtering 454000 offers
round 454 allocate() took 274.86ms to make 1000 offers after filtering 455000 offers
round 455 allocate() took 288.194ms to make 1000 offers after filtering 456000 offers
round 456 allocate() took 285.424ms to make 1000 offers after filtering 457000 offers
round 457 allocate() took 266.685ms to make 1000 offers after filtering 458000 offers
round 458 allocate() took 287.669ms to make 1000 offers after filtering 459000 offers
round 459 allocate() took 299.513ms to make 1000 offers after filtering 460000 offers
round 460 allocate() took 303.283ms to make 1000 offers after filtering 461000 offers
round 461 allocate() took 285.474ms to make 1000 offers after filtering 462000 offers
round 462 allocate() took 342.471ms to make 1000 offers after filtering 463000 offers
round 463 allocate() took 357.079ms to make 1000 offers after filtering 464000 offers
round 464 allocate() took 352.112ms to make 1000 offers after filtering 465000 offers
round 465 allocate() took 350.205ms to make 1000 offers after filtering 466000 offers
round 466 allocate() took 346.204ms to make 1000 offers after filtering 467000 offers
round 467 allocate() took 362.89ms to make 1000 offers after filtering 468000 offers
round 468 allocate() took 366.047ms to make 1000 offers after filtering 469000 offers
round 469 allocate() took 364.66ms to make 1000 offers after filtering 470000 offers
round 470 allocate() took 411.534ms to make 1000 offers after filtering 471000 offers
round 471 allocate() took 382.851ms to make 1000 offers after filtering 472000 offers
round 472 allocate() took 396.678ms to make 1000 offers after filtering 473000 offers
round 473 allocate() took 558.723ms to make 1000 offers after filtering 474000 offers
round 474 allocate() took 521.2ms to make 1000 offers after filtering 475000 offers
round 475 allocate() took 444.368ms to make 1000 offers after filtering 476000 offers
round 476 allocate() took 449.906ms to make 1000 offers after filtering 477000 offers
round 477 allocate() took 437.08ms to make 1000 offers after filtering 478000 offers
round 478 allocate() took 451.266ms to make 1000 offers after filtering 479000 offers
round 479 allocate() took 478.493ms to make 1000 offers after filtering 480000 offers
round 480 allocate() took 463.89ms to make 1000 offers after filtering 481000 offers
round 481 allocate() took 479.52ms to make 1000 offers after filtering 482000 offers
round 482 allocate() took 476.591ms to make 1000 offers after filtering 483000 offers
round 483 allocate() took 531.664ms to make 1000 offers after filtering 484000 offers
round 484 allocate() took 532.211ms to make 1000 offers after filtering 485000 offers
round 485 allocate() took 540.852ms to make 1000 offers after filtering 486000 offers
round 486 allocate() took 528.631ms to make 1000 offers after filtering 487000 offers
round 487 allocate() took 564.454ms to make 1000 offers after filtering 488000 offers
round 488 allocate() took 587.032ms to make 1000 offers after filtering 489000 offers
round 489 allocate() took 598.338ms to make 1000 offers after filtering 490000 offers
round 490 allocate() took 660.289ms to make 1000 offers after filtering 491000 offers
round 491 allocate() took 709.551ms to make 1000 offers after filtering 492000 offers
round 492 allocate() took 703.577ms to make 1000 offers after filtering 493000 offers
round 493 allocate() took 754.889ms to make 1000 offers after filtering 494000 offers
round 494 allocate() took 821.859ms to make 1000 offers after filtering 495000 offers
round 495 allocate() took 897.899ms to make 1000 offers after filtering 496000 offers
round 496 allocate() took 1038.69ms to make 1000 offers after filtering 497000 offers
round 497 allocate() took 1493.36ms to make 1000 offers after filtering 498000 offers
round 498 allocate() took 1566.04ms to make 1000 offers after filtering 499000 offers
round 499 allocate() took 4418.08ms to make 0 offers after filtering 500000 offers
[       OK ] SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test.DeclineOffers/4 (85538 ms)
```

With this patch the parts excercised in that benchmark seem to take _on average_ 3% more time but with about a 10% spread (i.e., some scenarios become faster which this patch, some slower). I attached a maybe easier to digest plot to this patch.


> On Jan. 29, 2019, 9:37 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Lines 2400-2409 (patched)
> > <https://reviews.apache.org/r/69821/diff/2/?file=2123196#file2123196line2415>
> >
> >     Hm.. what's this? Are you suggesting that the allocatable check should be moved within isFiltered? (seems like a good idea to me)

This was some work-in-progress code I didn't remove. It is gone now and not needed here.

Re: merging `isFiltered` and `allocatable`, while they both act as filters, they work differently. While filters during the offer cycle change over time, the constraints from `allocatable` are static. For that reason it seems to make more sense to keep them separate for now.


> On Jan. 29, 2019, 9:37 p.m., Benjamin Mahler wrote:
> > src/tests/hierarchical_allocator_tests.cpp
> > Lines 2287-2289 (patched)
> > <https://reviews.apache.org/r/69821/diff/2/?file=2123197#file2123197line2287>
> >
> >     Can you pull the tests into a separate review to simplify reviewing?

I'd prefer to the change with the test. I do believe this makes it easier to review this patch (now or in the future) as one can see both the implementation changes and their intended behavior.


> On Jan. 29, 2019, 9:37 p.m., Benjamin Mahler wrote:
> > src/tests/hierarchical_allocator_tests.cpp
> > Lines 2289 (patched)
> > <https://reviews.apache.org/r/69821/diff/2/?file=2123197#file2123197line2289>
> >
> >     FrameworkMinAllocatable

????????


> On Jan. 29, 2019, 9:37 p.m., Benjamin Mahler wrote:
> > src/tests/hierarchical_allocator_tests.cpp
> > Lines 2336 (patched)
> > <https://reviews.apache.org/r/69821/diff/2/?file=2123197#file2123197line2336>
> >
> >     FrameworkEmptyMinAllocatable

????????


> On Jan. 29, 2019, 9:37 p.m., Benjamin Mahler wrote:
> > src/tests/hierarchical_allocator_tests.cpp
> > Lines 2378 (patched)
> > <https://reviews.apache.org/r/69821/diff/2/?file=2123197#file2123197line2378>
> >
> >     Hm.. this doesn't quite look right to me, it seems if a framework is setting the `min_allocatable_resources` field, it should override, but that's not happening here?

The test checks that a framework setting overrides; the agent resources are not `allocatable` in the default sense.

Dropping.


- Benjamin


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212421
-----------------------------------------------------------


On Jan. 31, 2019, 4:16 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Jan. 31, 2019, 4:16 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
>   src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/4/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Mahler <bm...@apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212421
-----------------------------------------------------------



The commit description makes it sound like the filter is using the **union** of the flag and the per-framework/role override:

> This set is populated with any minimal allocatable resources specified in the allocator's options and any framework's minimal allocatable resources.

However, it should be an override (which is what the patch correctly does AFAICT). Probably, just using "override" in the explanation would make this very clear to the reader.

IMO, we only really need the first paragraph of the description:

> This patch modifies the hierarchical allocator to take framework-specified minimal allocatable resources into account.

We could make it a bit clearer:

> This patch modifies the allocator to take the framework-specified minimum allocatable resources into account. These act as an override of the existing `min_allocatable_resources` flag.

What more needs to be said?


src/master/allocator/mesos/hierarchical.cpp
Lines 1952-1968 (original), 1978-1987 (patched)
<https://reviews.apache.org/r/69821/#comment298189>

    This makes it look like we should consolidate into the `isFiltered` function?



src/master/allocator/mesos/hierarchical.cpp
Line 2069 (original), 2082 (patched)
<https://reviews.apache.org/r/69821/#comment298188>

    Now that this is a continue instead of a break, it seems they can be consolidated into 1 below?
    
    Also, can you post the benchmark numbers before and after this patch to make sure we're not accidentally regressing pretty badly on performance?



src/master/allocator/mesos/hierarchical.cpp
Lines 2400-2409 (patched)
<https://reviews.apache.org/r/69821/#comment298186>

    Hm.. what's this? Are you suggesting that the allocatable check should be moved within isFiltered? (seems like a good idea to me)



src/tests/hierarchical_allocator_tests.cpp
Lines 2287-2289 (patched)
<https://reviews.apache.org/r/69821/#comment298187>

    Can you pull the tests into a separate review to simplify reviewing?



src/tests/hierarchical_allocator_tests.cpp
Lines 2289 (patched)
<https://reviews.apache.org/r/69821/#comment298190>

    FrameworkMinAllocatable



src/tests/hierarchical_allocator_tests.cpp
Lines 2336 (patched)
<https://reviews.apache.org/r/69821/#comment298191>

    FrameworkEmptyMinAllocatable



src/tests/hierarchical_allocator_tests.cpp
Lines 2378 (patched)
<https://reviews.apache.org/r/69821/#comment298192>

    Hm.. this doesn't quite look right to me, it seems if a framework is setting the `min_allocatable_resources` field, it should override, but that's not happening here?


- Benjamin Mahler


On Jan. 29, 2019, 4:20 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Jan. 29, 2019, 4:20 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its options, it now inspects a dynamically
> calculated set of minimal allocatable resources. This set is populated
> with any minimal allocatable resources specified in the allocator's
> options and any framework's minimal allocatable resources. For a
> resource to be allocatable it needs to contain any of these minimal
> requirements.
> 
> If a framework does not specify minimal allocatable resource
> requirements, its minimal requirements are set to the globally
> configured option.
> 
> We also adjust the allocator to take a framework's minimal resource
> requirements into account when checking whether a resource can be
> allocated to a particular framework. The check is performed at the same
> time we check whether a framework filtered a particular resource. This
> avoids offering resources to frameworks which the framework would never
> have considered allocatable itself (e.g., given the global option of the
> allocator).
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp ca1638390d89e2a81efd9d6d4a28b863c79723c4 
>   src/master/allocator/mesos/hierarchical.cpp f1f3894058a8e3f008013cb269744bd36c0e31b3 
>   src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/2/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Mesos Reviewbot <re...@mesos.apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212450
-----------------------------------------------------------



Patch looks great!

Reviews applied: [69818, 69819, 69820, 69821]

Passed command: export OS='ubuntu:14.04' BUILDTOOL='autotools' COMPILER='gcc' CONFIGURATION='--verbose --disable-libtool-wrappers --disable-parallel-test-execution' ENVIRONMENT='GLOG_v=1 MESOS_VERBOSE=1'; ./support/docker-build.sh

- Mesos Reviewbot


On Jan. 29, 2019, 4:20 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Jan. 29, 2019, 4:20 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its options, it now inspects a dynamically
> calculated set of minimal allocatable resources. This set is populated
> with any minimal allocatable resources specified in the allocator's
> options and any framework's minimal allocatable resources. For a
> resource to be allocatable it needs to contain any of these minimal
> requirements.
> 
> If a framework does not specify minimal allocatable resource
> requirements, its minimal requirements are set to the globally
> configured option.
> 
> We also adjust the allocator to take a framework's minimal resource
> requirements into account when checking whether a resource can be
> allocated to a particular framework. The check is performed at the same
> time we check whether a framework filtered a particular resource. This
> avoids offering resources to frameworks which the framework would never
> have considered allocatable itself (e.g., given the global option of the
> allocator).
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp ca1638390d89e2a81efd9d6d4a28b863c79723c4 
>   src/master/allocator/mesos/hierarchical.cpp f1f3894058a8e3f008013cb269744bd36c0e31b3 
>   src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/2/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Mesos Reviewbot Windows <re...@mesos.apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212417
-----------------------------------------------------------



PASS: Mesos patch 69821 was successfully built and tested.

Reviews applied: `['69818', '69819', '69820', '69821']`

All the build artifacts available at: http://dcos-win.westus2.cloudapp.azure.com/artifacts/mesos-reviewbot-testing/2826/mesos-review-69821

- Mesos Reviewbot Windows


On Jan. 29, 2019, 4:20 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Jan. 29, 2019, 4:20 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its options, it now inspects a dynamically
> calculated set of minimal allocatable resources. This set is populated
> with any minimal allocatable resources specified in the allocator's
> options and any framework's minimal allocatable resources. For a
> resource to be allocatable it needs to contain any of these minimal
> requirements.
> 
> If a framework does not specify minimal allocatable resource
> requirements, its minimal requirements are set to the globally
> configured option.
> 
> We also adjust the allocator to take a framework's minimal resource
> requirements into account when checking whether a resource can be
> allocated to a particular framework. The check is performed at the same
> time we check whether a framework filtered a particular resource. This
> avoids offering resources to frameworks which the framework would never
> have considered allocatable itself (e.g., given the global option of the
> allocator).
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp ca1638390d89e2a81efd9d6d4a28b863c79723c4 
>   src/master/allocator/mesos/hierarchical.cpp f1f3894058a8e3f008013cb269744bd36c0e31b3 
>   src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/2/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.

> On Feb. 4, 2019, 9:58 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Lines 2041-2042 (original), 2075-2076 (patched)
> > <https://reviews.apache.org/r/69821/diff/5/?file=2123824#file2123824line2084>
> >
> >     Hm.. isn't the framework capability stripping messing with our break condition?

Hmm, it seems like it, yes. This should be an issue already now where we `break` in even more scenarios. This should be fixed outside of this change. I created https://issues.apache.org/jira/browse/MESOS-9554.

Dropping here.


> On Feb. 4, 2019, 9:58 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Lines 2058-2060 (original), 2092-2094 (patched)
> > <https://reviews.apache.org/r/69821/diff/5/?file=2123824#file2123824line2101>
> >
> >     We lost the comment here about why it's safe to break? It still seems relevant

Hmm, not sure what you are after. My patch `continue`s instead of `break`s. The way the code is structured now we cannot `break` here, but instead must iterate over all frameworks. We could `break` if we'd e.g., made `allocatable` independent of framework settings like before (e.g., by computing a minimal allocatable resources given all framework information), but we'd likely reject many allocation decision last minute that way in the same spot where we currently check filters. The code as proposed here looks simpler to me.

Can we drop this?


> On Feb. 4, 2019, 9:58 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Lines 2064-2070 (original), 2096-2102 (patched)
> > <https://reviews.apache.org/r/69821/diff/5/?file=2123824#file2123824line2107>
> >
> >     I'm left confused by the two checks now that they both continue, and I think the comment is now inaccurate and confusing? It is written based on break vs continue

I went over all the comments around resource emptiness and `allocatable` checks.


> On Feb. 4, 2019, 9:58 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Lines 2090-2091 (original), 2122-2125 (patched)
> > <https://reviews.apache.org/r/69821/diff/5/?file=2123824#file2123824line2133>
> >
> >     It seems more readable if this is a member function of `Framework`

In that case we'd have to pass in the allocator's `minAllocatableResources` (either here, or if they could change here). I'd suggest to keep this as is.

Dropping for now, feel free to reopen if you think this requires more discussion.


- Benjamin


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212523
-----------------------------------------------------------


On Feb. 5, 2019, 5:38 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 5, 2019, 5:38 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/8/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.

> On Feb. 4, 2019, 9:58 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Lines 2058-2060 (original), 2092-2094 (patched)
> > <https://reviews.apache.org/r/69821/diff/5/?file=2123824#file2123824line2101>
> >
> >     We lost the comment here about why it's safe to break? It still seems relevant
> 
> Benjamin Bannier wrote:
>     Hmm, not sure what you are after. My patch `continue`s instead of `break`s. The way the code is structured now we cannot `break` here, but instead must iterate over all frameworks. We could `break` if we'd e.g., made `allocatable` independent of framework settings like before (e.g., by computing a minimal allocatable resources given all framework information), but we'd likely reject many allocation decision last minute that way in the same spot where we currently check filters. The code as proposed here looks simpler to me.
>     
>     Can we drop this?

Dropping.


- Benjamin


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212523
-----------------------------------------------------------


On Feb. 8, 2019, 12:32 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 8, 2019, 12:32 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/9/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.

> On Feb. 4, 2019, 9:58 p.m., Benjamin Mahler wrote:
> > Can you split this change apart so that I can review more easily and we can land it faster?
> > 
> > (1) The plumbing and storage of the information: this is an easy change that doesn't require much thought, it looks good and can be shipped.
> > 
> > (2) The update to the allocation / allocatable logic: this is a harder change that warrants careful thought about the existing allocation code and I'd like to review it in isolation from the other changes in the current patch. Left some comments in the second stage that also apply to the first stage.
> > 
> > (3) Tests: also a rather easy change and would be good to ship in isolation. Haven't review this yet (would prefer to review in isolation since the review load is too high in this patch).

Done, created https://reviews.apache.org/r/69889/ and https://reviews.apache.org/r/69890/ which bracket this patch.

I fixed small issues in https://reviews.apache.org/r/69889/, which I didn't see in the bigger patch, so I have to agree with you that the patches where hard to review :/

Since you left a couple of allocator-related issues here already, I am reusing this RR for the allocator changes.


- Benjamin


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212523
-----------------------------------------------------------


On Feb. 4, 2019, 11:05 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 4, 2019, 11:05 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/7/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Mahler <bm...@apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212523
-----------------------------------------------------------



Can you split this change apart so that I can review more easily and we can land it faster?

(1) The plumbing and storage of the information: this is an easy change that doesn't require much thought, it looks good and can be shipped.

(2) The update to the allocation / allocatable logic: this is a harder change that warrants careful thought about the existing allocation code and I'd like to review it in isolation from the other changes in the current patch. Left some comments in the second stage that also apply to the first stage.

(3) Tests: also a rather easy change and would be good to ship in isolation. Haven't review this yet (would prefer to review in isolation since the review load is too high in this patch).


src/master/allocator/mesos/hierarchical.cpp
Lines 2041-2042 (original), 2075-2076 (patched)
<https://reviews.apache.org/r/69821/#comment298332>

    Hm.. isn't the framework capability stripping messing with our break condition?



src/master/allocator/mesos/hierarchical.cpp
Lines 2058-2060 (original), 2092-2094 (patched)
<https://reviews.apache.org/r/69821/#comment298329>

    We lost the comment here about why it's safe to break? It still seems relevant



src/master/allocator/mesos/hierarchical.cpp
Lines 2064-2070 (original), 2096-2102 (patched)
<https://reviews.apache.org/r/69821/#comment298330>

    I'm left confused by the two checks now that they both continue, and I think the comment is now inaccurate and confusing? It is written based on break vs continue



src/master/allocator/mesos/hierarchical.cpp
Lines 2090-2091 (original), 2122-2125 (patched)
<https://reviews.apache.org/r/69821/#comment298328>

    It seems more readable if this is a member function of `Framework`



src/master/allocator/mesos/hierarchical.cpp
Lines 2455 (patched)
<https://reviews.apache.org/r/69821/#comment298327>

    We already have the `Framework` in hand whenever we call this (and that's what I would expect), so can we simplify this? If we pass the `Framework` we can avoid having the contains guard and framework lookup logic.



src/master/framework.cpp
Lines 504 (patched)
<https://reviews.apache.org/r/69821/#comment298325>

    Ah, here it is, should be in the earlier review?


- Benjamin Mahler


On Feb. 4, 2019, 8:37 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 4, 2019, 8:37 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
>   src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/6/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Mesos Reviewbot Windows <re...@mesos.apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212536
-----------------------------------------------------------



PASS: Mesos patch 69821 was successfully built and tested.

Reviews applied: `['69818', '69862', '69889', '69821']`

All the build artifacts available at: http://dcos-win.westus2.cloudapp.azure.com/artifacts/mesos-reviewbot-testing/2847/mesos-review-69821

- Mesos Reviewbot Windows


On Feb. 4, 2019, 10:05 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 4, 2019, 10:05 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/7/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Mahler <bm...@apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212804
-----------------------------------------------------------


Ship it!




Ship It!

- Benjamin Mahler


On Feb. 13, 2019, 3:44 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 13, 2019, 3:44 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp 862dbb90bdfa39ead4b185104a308eabe249d734 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/12/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

(Updated Feb. 13, 2019, 4:44 p.m.)


Review request for mesos, Benjamin Mahler and Meng Zhu.


Changes
-------

Fix rebased errors


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its global options, it can now also inspects
framework-specific resource requirements. With that frameworks can e.g.,
configure resource requirements above the default minimal allocatable
resource, or opt into receiving resources considered too small to be
allocatable by the allocator in its default behavior.

For that we change the hierarchical allocator's `allocatable` function
to be framework and role-specific. As that does in some places not allow
us to abort iterating over candidate resource consumers like before an
additional check on whether any resources are left in an allocation
cycle is added as a break condition.


Diffs (updated)
-----

  src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
  src/master/allocator/mesos/hierarchical.cpp 862dbb90bdfa39ead4b185104a308eabe249d734 


Diff: https://reviews.apache.org/r/69821/diff/12/

Changes: https://reviews.apache.org/r/69821/diff/11-12/


Testing
-------

`make check`


File Attachments
----------------

Ratio new/old timings
  https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png


Thanks,

Benjamin Bannier


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Mahler <bm...@apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212759
-----------------------------------------------------------




src/master/allocator/mesos/hierarchical.cpp
Lines 2072-2074 (original)
<https://reviews.apache.org/r/69821/#comment298666>

    Hm.. the first loop looks like a clean change, but this one removes the break condition?
    
    (I guess this is because of the last suggestions + rebase?)



src/master/allocator/mesos/hierarchical.cpp
Lines 2085-2087 (patched)
<https://reviews.apache.org/r/69821/#comment298667>

    Hm.. why don't we remove this and just let the continue happen below?



src/master/allocator/mesos/hierarchical.cpp
Line 2113 (original), 2113-2116 (patched)
<https://reviews.apache.org/r/69821/#comment298668>

    Hm.. this seems to be moving the break from above down to here. Can we move it back up so that this diff is very minimal (i.e. like the changes in the quota loop above)


- Benjamin Mahler


On Feb. 11, 2019, 3:46 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 11, 2019, 3:46 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/11/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

(Updated Feb. 11, 2019, 4:46 p.m.)


Review request for mesos, Benjamin Mahler and Meng Zhu.


Changes
-------

Rebase; address comments from Ben


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its global options, it can now also inspects
framework-specific resource requirements. With that frameworks can e.g.,
configure resource requirements above the default minimal allocatable
resource, or opt into receiving resources considered too small to be
allocatable by the allocator in its default behavior.

For that we change the hierarchical allocator's `allocatable` function
to be framework and role-specific. As that does in some places not allow
us to abort iterating over candidate resource consumers like before an
additional check on whether any resources are left in an allocation
cycle is added as a break condition.


Diffs (updated)
-----

  src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
  src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 


Diff: https://reviews.apache.org/r/69821/diff/10/

Changes: https://reviews.apache.org/r/69821/diff/9-10/


Testing
-------

`make check`


File Attachments
----------------

Ratio new/old timings
  https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png


Thanks,

Benjamin Bannier


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.

> On Feb. 8, 2019, 10:05 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Lines 1886-1888 (patched)
> > <https://reviews.apache.org/r/69821/diff/9/?file=2124578#file2124578line1886>
> >
> >     Ditto the comment left below for the equivalent check in the second loop

Removed for now.


> On Feb. 8, 2019, 10:05 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Lines 2110-2112 (patched)
> > <https://reviews.apache.org/r/69821/diff/9/?file=2124578#file2124578line2110>
> >
> >     Hm.. why bother with this? Seems correct without it and this doesn't seem to save much in terms of cost? It also seems like an orthogonal change?
> >     
> >     It seems ok to add this one and the one above, but seems cleaner to do that in a follow up change that measures the performance impact? The quota one does seem to potentially save some expensive work

Removed for now.


> On Feb. 8, 2019, 10:05 p.m., Benjamin Mahler wrote:
> > src/master/allocator/mesos/hierarchical.cpp
> > Line 2125 (original), 2138-2141 (patched)
> > <https://reviews.apache.org/r/69821/diff/9/?file=2124578#file2124578line2138>
> >
> >     Let's not bother with this additional check? If `toAllocate` is empty, we'll continue from the check below (allocatable always is false for no resources), followed by the top of this loop breaking because there's nothing left for the role. So this only saves having to execute a few lines at the top of the loop? Doesn't seem worth it?

Removed.


- Benjamin


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212679
-----------------------------------------------------------


On Feb. 11, 2019, 4:46 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 11, 2019, 4:46 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/11/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Mahler <bm...@apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212679
-----------------------------------------------------------



Looks good, just some minor comments. I suppose you'll need to rebase this off my updated patch (which I hope to get to today).


src/master/allocator/mesos/hierarchical.cpp
Lines 1886-1888 (patched)
<https://reviews.apache.org/r/69821/#comment298529>

    Ditto the comment left below for the equivalent check in the second loop



src/master/allocator/mesos/hierarchical.cpp
Lines 2110-2112 (patched)
<https://reviews.apache.org/r/69821/#comment298528>

    Hm.. why bother with this? Seems correct without it and this doesn't seem to save much in terms of cost? It also seems like an orthogonal change?
    
    It seems ok to add this one and the one above, but seems cleaner to do that in a follow up change that measures the performance impact? The quota one does seem to potentially save some expensive work



src/master/allocator/mesos/hierarchical.cpp
Line 2125 (original), 2138-2141 (patched)
<https://reviews.apache.org/r/69821/#comment298527>

    Let's not bother with this additional check? If `toAllocate` is empty, we'll continue from the check below (allocatable always is false for no resources), followed by the top of this loop breaking because there's nothing left for the role. So this only saves having to execute a few lines at the top of the loop? Doesn't seem worth it?


- Benjamin Mahler


On Feb. 8, 2019, 11:32 a.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 8, 2019, 11:32 a.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/9/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

(Updated Feb. 8, 2019, 12:32 p.m.)


Review request for mesos, Benjamin Mahler and Meng Zhu.


Changes
-------

Rebase onto https://reviews.apache.org/r/69902/


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its global options, it can now also inspects
framework-specific resource requirements. With that frameworks can e.g.,
configure resource requirements above the default minimal allocatable
resource, or opt into receiving resources considered too small to be
allocatable by the allocator in its default behavior.

For that we change the hierarchical allocator's `allocatable` function
to be framework and role-specific. As that does in some places not allow
us to abort iterating over candidate resource consumers like before an
additional check on whether any resources are left in an allocation
cycle is added as a break condition.


Diffs (updated)
-----

  src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
  src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 


Diff: https://reviews.apache.org/r/69821/diff/9/

Changes: https://reviews.apache.org/r/69821/diff/8-9/


Testing
-------

`make check`


File Attachments
----------------

Ratio new/old timings
  https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png


Thanks,

Benjamin Bannier


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Mahler <bm...@apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212573
-----------------------------------------------------------



Much appreciated for having split out the changes! This is nice and small now :)

I had a hard time figuring out what the logic should be if MESOS-9554 isn't addressed by this patch, so I ended up pulling out a fix:

https://reviews.apache.org/r/69902/ (note the 1 small dependency patch in front of it)

We can base this patch on this fixed version of the code and it should be pretty clear. If we can land the fix quickly then we could just commit it and rebase this patch.


src/master/allocator/mesos/hierarchical.cpp
Lines 1985-1996 (original), 1985-1988 (patched)
<https://reviews.apache.org/r/69821/#comment298401>

    It's hard to review this logic without fixing MESOS-9554, so I've put up a patch:
    
    https://reviews.apache.org/r/69902/
    
    Note that there's a small dependency pulled out in front of it to make it a smaller change. We can make this review depend on it, or probably easier, land that patch and then rebase this against master.


- Benjamin Mahler


On Feb. 5, 2019, 4:38 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 5, 2019, 4:38 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/8/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

(Updated Feb. 5, 2019, 5:38 p.m.)


Review request for mesos, Benjamin Mahler and Meng Zhu.


Changes
-------

Adress a couple issues raised by Ben


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its global options, it can now also inspects
framework-specific resource requirements. With that frameworks can e.g.,
configure resource requirements above the default minimal allocatable
resource, or opt into receiving resources considered too small to be
allocatable by the allocator in its default behavior.

For that we change the hierarchical allocator's `allocatable` function
to be framework and role-specific. As that does in some places not allow
us to abort iterating over candidate resource consumers like before an
additional check on whether any resources are left in an allocation
cycle is added as a break condition.


Diffs (updated)
-----

  src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
  src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 


Diff: https://reviews.apache.org/r/69821/diff/8/

Changes: https://reviews.apache.org/r/69821/diff/7-8/


Testing
-------

`make check`


File Attachments
----------------

Ratio new/old timings
  https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png


Thanks,

Benjamin Bannier


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

(Updated Feb. 4, 2019, 11:05 p.m.)


Review request for mesos, Benjamin Mahler and Meng Zhu.


Changes
-------

Break out storage and test into https://reviews.apache.org/r/69889/ and https://reviews.apache.org/r/69890/, respectively


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its global options, it can now also inspects
framework-specific resource requirements. With that frameworks can e.g.,
configure resource requirements above the default minimal allocatable
resource, or opt into receiving resources considered too small to be
allocatable by the allocator in its default behavior.

For that we change the hierarchical allocator's `allocatable` function
to be framework and role-specific. As that does in some places not allow
us to abort iterating over candidate resource consumers like before an
additional check on whether any resources are left in an allocation
cycle is added as a break condition.


Diffs (updated)
-----

  src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
  src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 


Diff: https://reviews.apache.org/r/69821/diff/7/

Changes: https://reviews.apache.org/r/69821/diff/6-7/


Testing
-------

`make check`


File Attachments
----------------

Ratio new/old timings
  https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png


Thanks,

Benjamin Bannier


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

(Updated Feb. 4, 2019, 9:37 p.m.)


Review request for mesos, Benjamin Mahler and Meng Zhu.


Changes
-------

Move a comment to https://reviews.apache.org/r/69818/


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its global options, it can now also inspects
framework-specific resource requirements. With that frameworks can e.g.,
configure resource requirements above the default minimal allocatable
resource, or opt into receiving resources considered too small to be
allocatable by the allocator in its default behavior.

For that we change the hierarchical allocator's `allocatable` function
to be framework and role-specific. As that does in some places not allow
us to abort iterating over candidate resource consumers like before an
additional check on whether any resources are left in an allocation
cycle is added as a break condition.


Diffs (updated)
-----

  src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
  src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
  src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 


Diff: https://reviews.apache.org/r/69821/diff/6/

Changes: https://reviews.apache.org/r/69821/diff/5-6/


Testing
-------

`make check`


File Attachments
----------------

Ratio new/old timings
  https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png


Thanks,

Benjamin Bannier


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Mesos Reviewbot Windows <re...@mesos.apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212516
-----------------------------------------------------------



FAIL: Some of the unit tests failed. Please check the relevant logs.

Reviews applied: `['69818', '69862', '69821']`

Failed command: `Start-MesosCITesting`

All the build artifacts available at: http://dcos-win.westus2.cloudapp.azure.com/artifacts/mesos-reviewbot-testing/2844/mesos-review-69821

Relevant logs:

- [mesos-tests.log](http://dcos-win.westus2.cloudapp.azure.com/artifacts/mesos-reviewbot-testing/2844/mesos-review-69821/logs/mesos-tests.log):

```
W0204 12:23:02.096771 32304 slave.cpp:3934] Ignoring shutdown framework 549ca5ea-b22e-492b-a25d-34e375705140-0000 because it is terminating
I0204 12:23:02.098772 29556 master.cpp:1269] Agent 549ca5ea-b22e-492b-a25d-34e375705140-S0 at slave(477)@192.10.1.6:64813 (windows-02.chtsmhjxogyevckjfayqqcnjda.xx.internal.cloudapp.net) disconnected
I0204 12:23:02.098772 29556 master.cpp:3272] Disconnecting agent 549ca5ea-b22e-492b-a25d-34e375705140-S0 at slave(477)@192.10.1.6:64813 (windows-02.chtsmhjxogyevckjfayqqcnjda.xx.internal.cloudapp.net)
I0204 12:23:02.099773 29556 master.cpp:3291] Deactivating agent 549ca5ea-b22e-492b-a25d-34e375705140-S0 at slave(477)@192.10.1.6:64813 (windows-02.chtsmhjxogyevckjfayqqcnjda.xx.internal.cloudapp.net)
I0204 12:23:02.099773 23200 hierarchical.cpp:395] Removed framework 549ca5ea-b22e-492b-a25d-34e375705140-0000
I0204 12:23:02.099773 23200 hierarchical.cpp:830] Agent 549ca5ea-b22e-492b-a25d-34e375705140-S0 deactivated
I0204 12:23:02.100780 23200 containerizer.cpp:2477] Destroying container e4bb3083-bbec-4218-875e-29d9d952976e in RUNNING state
I0204 12:23:02.100780 23200 containerizer.cpp:3144] Transitioning the state of container e4bb3083-bbec-4218-875e-29d9d952976e from RUNNING to DESTROYING
I0204 12:23:02.101773 23200 launcher.cpp:161] Asked to destroy container e4bb3083-bbec-4218-875e-29d9d952976e
W0204 12:23:02.102820 32144 process.cpp:838] Failed to recv on socket WindowsFD::Type::SOCKET=12116 to peer '192.10.1.6:50327': IO failed with error code: The specified network name is no longer available.

W0204 12:23:02.102820 32144 process.cpp:1423] Failed to recv on socket WindowsFD::Type::SOCKET=11820 to peer '192.10.1.6:50326': IO failed with error code: The specified network name is no longer available.

I0204 12:23:02.188532 29556 containerizer.cpp:2983] Container e4bb3083-bbec-4218-875e-29d9d952976e has exited
I0204 12:23:02.217483 26532 master.cpp:1109] Ma[       OK ] IsolationFlag/MemoryIsolatorTest.ROOT_MemUsage/0 (682 ms)
[----------] 1 test from IsolationFlag/MemoryIsolatorTest (698 ms total)

[----------] Global test environment tear-down
[==========] 1099 tests from 104 test cases ran. (500835 ms total)
[  PASSED  ] 1098 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] DockerFetcherPluginTest.INTERNET_CURL_FetchImage

 1 FAILED TEST
  YOU HAVE 231 DISABLED TESTS

ster terminating
I0204 12:23:02.219491 20272 hierarchical.cpp:681] Removed agent 549ca5ea-b22e-492b-a25d-34e375705140-S0
I0204 12:23:02.628484 32144 process.cpp:927] Stopped the socket accept loop
```

- Mesos Reviewbot Windows


On Feb. 4, 2019, 11:14 a.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Feb. 4, 2019, 11:14 a.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
>   src/master/framework.cpp 4089cf4dfc65ac4dc5a092c04f4c2022ed8a1587 
>   src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/5/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

(Updated Feb. 4, 2019, 12:14 p.m.)


Review request for mesos, Benjamin Mahler and Meng Zhu.


Changes
-------

Add a clarifying comment


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its global options, it can now also inspects
framework-specific resource requirements. With that frameworks can e.g.,
configure resource requirements above the default minimal allocatable
resource, or opt into receiving resources considered too small to be
allocatable by the allocator in its default behavior.

For that we change the hierarchical allocator's `allocatable` function
to be framework and role-specific. As that does in some places not allow
us to abort iterating over candidate resource consumers like before an
additional check on whether any resources are left in an allocation
cycle is added as a break condition.


Diffs (updated)
-----

  src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
  src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
  src/master/framework.cpp 4089cf4dfc65ac4dc5a092c04f4c2022ed8a1587 
  src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 


Diff: https://reviews.apache.org/r/69821/diff/5/

Changes: https://reviews.apache.org/r/69821/diff/4-5/


Testing
-------

`make check`


File Attachments
----------------

Ratio new/old timings
  https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png


Thanks,

Benjamin Bannier


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Mesos Reviewbot Windows <re...@mesos.apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212484
-----------------------------------------------------------



PASS: Mesos patch 69821 was successfully built and tested.

Reviews applied: `['69818', '69862', '69821']`

All the build artifacts available at: http://dcos-win.westus2.cloudapp.azure.com/artifacts/mesos-reviewbot-testing/2840/mesos-review-69821

- Mesos Reviewbot Windows


On Jan. 31, 2019, 3:16 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Jan. 31, 2019, 3:16 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its global options, it can now also inspects
> framework-specific resource requirements. With that frameworks can e.g.,
> configure resource requirements above the default minimal allocatable
> resource, or opt into receiving resources considered too small to be
> allocatable by the allocator in its default behavior.
> 
> For that we change the hierarchical allocator's `allocatable` function
> to be framework and role-specific. As that does in some places not allow
> us to abort iterating over candidate resource consumers like before an
> additional check on whether any resources are left in an allocation
> cycle is added as a break condition.
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
>   src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
>   src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/4/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> File Attachments
> ----------------
> 
> Ratio new/old timings
>   https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

(Updated Jan. 31, 2019, 4:16 p.m.)


Review request for mesos, Benjamin Mahler and Meng Zhu.


Changes
-------

Addressed comments from Ben here and offline.


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description (updated)
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its global options, it can now also inspects
framework-specific resource requirements. With that frameworks can e.g.,
configure resource requirements above the default minimal allocatable
resource, or opt into receiving resources considered too small to be
allocatable by the allocator in its default behavior.

For that we change the hierarchical allocator's `allocatable` function
to be framework and role-specific. As that does in some places not allow
us to abort iterating over candidate resource consumers like before an
additional check on whether any resources are left in an allocation
cycle is added as a break condition.


Diffs (updated)
-----

  src/master/allocator/mesos/hierarchical.hpp 1420c2638786d85f7b04379e5d79e59990c3e6cf 
  src/master/allocator/mesos/hierarchical.cpp bb9a9c95979f36c0564af5b3babb1c43077a363b 
  src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 


Diff: https://reviews.apache.org/r/69821/diff/4/

Changes: https://reviews.apache.org/r/69821/diff/3-4/


Testing
-------

`make check`


File Attachments (updated)
----------------

Ratio new/old timings
  https://reviews.apache.org/media/uploaded/files/2019/01/31/d76189de-8882-4aff-956b-090dab729358__new_over_old.png


Thanks,

Benjamin Bannier


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Mesos Reviewbot Windows <re...@mesos.apache.org>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/#review212456
-----------------------------------------------------------



PASS: Mesos patch 69821 was successfully built and tested.

Reviews applied: `['69861', '69818', '69862', '69821']`

All the build artifacts available at: http://dcos-win.westus2.cloudapp.azure.com/artifacts/mesos-reviewbot-testing/2833/mesos-review-69821

- Mesos Reviewbot Windows


On Jan. 30, 2019, 4:08 p.m., Benjamin Bannier wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69821/
> -----------------------------------------------------------
> 
> (Updated Jan. 30, 2019, 4:08 p.m.)
> 
> 
> Review request for mesos, Benjamin Mahler and Meng Zhu.
> 
> 
> Bugs: MESOS-9523
>     https://issues.apache.org/jira/browse/MESOS-9523
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> This patch modifies the hierarchical allocator to take
> framework-specified minimal allocatable resources into account.
> 
> While previously the allocator was inspecting the minimal allocatable
> resources specified in its options, it now inspects a dynamically
> calculated set of minimal allocatable resources. This set is populated
> with any minimal allocatable resources specified in the allocator's
> options and any framework's minimal allocatable resources. For a
> resource to be allocatable it needs to contain any of these minimal
> requirements.
> 
> If a framework does not specify minimal allocatable resource
> requirements, its minimal requirements are set to the globally
> configured option.
> 
> We also adjust the allocator to take a framework's minimal resource
> requirements into account when checking whether a resource can be
> allocated to a particular framework. The check is performed at the same
> time we check whether a framework filtered a particular resource. This
> avoids offering resources to frameworks which the framework would never
> have considered allocatable itself (e.g., given the global option of the
> allocator).
> 
> 
> Diffs
> -----
> 
>   src/master/allocator/mesos/hierarchical.hpp ca1638390d89e2a81efd9d6d4a28b863c79723c4 
>   src/master/allocator/mesos/hierarchical.cpp f1f3894058a8e3f008013cb269744bd36c0e31b3 
>   src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 
> 
> 
> Diff: https://reviews.apache.org/r/69821/diff/3/
> 
> 
> Testing
> -------
> 
> `make check`
> 
> 
> Thanks,
> 
> Benjamin Bannier
> 
>


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

(Updated Jan. 30, 2019, 4:08 p.m.)


Review request for mesos, Benjamin Mahler and Meng Zhu.


Changes
-------

WIP.


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its options, it now inspects a dynamically
calculated set of minimal allocatable resources. This set is populated
with any minimal allocatable resources specified in the allocator's
options and any framework's minimal allocatable resources. For a
resource to be allocatable it needs to contain any of these minimal
requirements.

If a framework does not specify minimal allocatable resource
requirements, its minimal requirements are set to the globally
configured option.

We also adjust the allocator to take a framework's minimal resource
requirements into account when checking whether a resource can be
allocated to a particular framework. The check is performed at the same
time we check whether a framework filtered a particular resource. This
avoids offering resources to frameworks which the framework would never
have considered allocatable itself (e.g., given the global option of the
allocator).


Diffs (updated)
-----

  src/master/allocator/mesos/hierarchical.hpp ca1638390d89e2a81efd9d6d4a28b863c79723c4 
  src/master/allocator/mesos/hierarchical.cpp f1f3894058a8e3f008013cb269744bd36c0e31b3 
  src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 


Diff: https://reviews.apache.org/r/69821/diff/3/

Changes: https://reviews.apache.org/r/69821/diff/2-3/


Testing
-------

`make check`


Thanks,

Benjamin Bannier


Re: Review Request 69821: Enforced minimal allocatable resources in the hierarchical allocator.

Posted by Benjamin Bannier <be...@mesosphere.io>.
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69821/
-----------------------------------------------------------

(Updated Jan. 29, 2019, 5:20 p.m.)


Review request for mesos, Benjamin Mahler and Meng Zhu.


Changes
-------

Rebased.


Bugs: MESOS-9523
    https://issues.apache.org/jira/browse/MESOS-9523


Repository: mesos


Description
-------

This patch modifies the hierarchical allocator to take
framework-specified minimal allocatable resources into account.

While previously the allocator was inspecting the minimal allocatable
resources specified in its options, it now inspects a dynamically
calculated set of minimal allocatable resources. This set is populated
with any minimal allocatable resources specified in the allocator's
options and any framework's minimal allocatable resources. For a
resource to be allocatable it needs to contain any of these minimal
requirements.

If a framework does not specify minimal allocatable resource
requirements, its minimal requirements are set to the globally
configured option.

We also adjust the allocator to take a framework's minimal resource
requirements into account when checking whether a resource can be
allocated to a particular framework. The check is performed at the same
time we check whether a framework filtered a particular resource. This
avoids offering resources to frameworks which the framework would never
have considered allocatable itself (e.g., given the global option of the
allocator).


Diffs (updated)
-----

  src/master/allocator/mesos/hierarchical.hpp ca1638390d89e2a81efd9d6d4a28b863c79723c4 
  src/master/allocator/mesos/hierarchical.cpp f1f3894058a8e3f008013cb269744bd36c0e31b3 
  src/tests/hierarchical_allocator_tests.cpp cc88afbad1b4e6bf707cb13b50c964aa01f9a3ee 


Diff: https://reviews.apache.org/r/69821/diff/2/

Changes: https://reviews.apache.org/r/69821/diff/1-2/


Testing
-------

`make check`


Thanks,

Benjamin Bannier