When we allocate resources to a role, we'll "chop" the available resources of the agent up to the quota limit for the role (per
MESOS-7099). This prevents the role from exceeding its quota limit.
This has the unintended consequence of creating cpu-only and memory-only offers.
Consider agents with 10 cpus and 100 GB mem and roles with quota guarantee/limit of 5 cpus, 10 GB mem. The following allocations will occur:
r1 -> 5 cpus 10GB mem
r2 -> 5 cpus 10GB mem
r3 -> 0 cpus 10GB mem (quota allocates even if it can make progress towards a single resource and
MESOS-1688 allows this)
r4 -> 0 cpus 10GB mem
r10 -> 0 cpus 10GB mem
r3 -> 5 cpus 0GB mem (r3 is already at its 10GB mem limit)
r4 -> 5 cpus 0GB mem
r11 -> 0 cpus 10GB mem
r20 -> 0 cpus 10GB mem
Here, roles 3-20 receive memory only and cpu only offers. This gets further exacerbated if DRF chooses the same ordering between roles across cycles.