Javadoc
Algorithm for calculating idealAssigned is as follows:
For each partition:
Q.reassignable = Q.used - Q.selected;
# By default set ideal assigned 0 for app.
app.idealAssigned as 0
# get user limit from scheduler.
userLimitRes = Q.getUserLimit(userName)
# initial all value to 0
Map userToAllocated
# Loop from highest priority to lowest priority app to calculate ideal
for app in sorted-by(priority) {
if Q.reassignable < 0:
break;
if (user-to-allocated.get(app.user) < userLimitRes) {
idealAssigned = min((userLimitRes - userToAllocated.get(app.user)),
(app.used + app.pending - app.selected))
app.idealAssigned = min(Q.reassignable, idealAssigned)
userToAllocated.get(app.user) += app.idealAssigned;
} else {
// skip this app because user-limit reached
}
Q.reassignable -= app.idealAssigned
}