There're 3 stages in ProportionalCapacityPreemptionPolicy,
- Recursively calculate ideal_assigned for queue. This is depends on available resource, resource used/pending in each queue and guaranteed capacity of each queue.
- Mark to-be preempted containers: For each over-satisfied queue, it will mark some containers will be preempted.
- Notify scheduler about to-be preempted container.
We need respect labels in the cluster for both #1 and #2:
For #1, when calculating ideal_assigned for each queue, we need get by-partition-ideal-assigned according to queue's guaranteed/maximum/used/pending resource on specific partition.
For #2, when we make decision about whether we need preempt a container, we need make sure, resource this container is possibly usable by a queue which is under-satisfied and has pending resource.
In addition, we need to handle ignore_partition_exclusivity case, when we need to preempt containers from a queue's partition, we will first preempt ignore_partition_exclusivity allocated containers.