if (bucket == null) {
bucket = new Bucket();
rackBuckets.put(datanode.getParent(), bucket);
}
// Put DataNode into chosen bucket
BalancerDatanode datanodeS;
if (getRemaining(datanode) < avgRemaining) {
// Above average utilized
datanodeS = balancer.getSource(datanode, avgRemaining);
bucket.addSource((Source) datanodeS);
clusterBucket.addSource((Source) datanodeS);
if (isOverUtilized(datanodeS)) {
overLoadedBytes += (long) ((lowerRemainingThreshold - datanodeS.getCurrentRemaining())
* datanodeS.getDatanode().getCapacity() / PERCENTAGE_BASE);
}
} else {
// Below average utilized
datanodeS = new Target(datanode, avgRemaining);
bucket.addTarget((Target) datanodeS);
clusterBucket.addTarget((Target) datanodeS);
if (isUnderUtilized(datanodeS)) {
underLoadedBytes += (long) ((datanodeS.getCurrentRemaining() - upperRemainingThreshold)
* datanodeS.getDatanode().getCapacity() / PERCENTAGE_BASE);
}
}
// Update all DataNodes list
this.datanodes.put(datanode.getStorageID(), datanodeS);
}