If a role has more reservation than its quota, the current quota headroom calculation is insufficient in guaranteeing quota allocation.
Consider, role `A` with 100 (units of resource, same below) reservation and 10 quota and role `B` with no reservation and 90 quota. Let's say there is no allocation yet. The existing allocator would calculate that the required headroom is 100. And since unallocated quota role reserved resource is also 100, no additional resources would be held back for the headroom.
While role `A` would have no problem getting its quota satisfied. Role `B` may have difficulty getting any resources because the "headroom" can only be allocated to `A`.
The solution is to calculate per-role headroom before aggregating the quantity. And unallocated reservations should not count towards quota headroom. In the above case. The headroom for role `A` should be zero, the headroom for role `B` should be 90. Thus the aggregated headroom will be `90`.