in src/main/java/org/apache/commons/pool3/impl/GenericKeyedObjectPool.java [1545:1576]
private void reuseCapacity() {
final int maxTotalPerKeySave = getMaxTotalPerKey();
int maxQueueLength = 0;
LinkedBlockingDeque<PooledObject<T>> mostLoadedPool = null;
K mostLoadedKey = null;
// Find the most loaded pool that could take a new instance
for (final Map.Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) {
final K k = entry.getKey();
final LinkedBlockingDeque<PooledObject<T>> pool = entry.getValue().getIdleObjects();
final int queueLength = pool.getTakeQueueLength();
if (getNumActive(k) < maxTotalPerKeySave && queueLength > maxQueueLength) {
maxQueueLength = queueLength;
mostLoadedPool = pool;
mostLoadedKey = k;
}
}
// Attempt to add an instance to the most loaded pool.
if (mostLoadedPool != null) {
register(mostLoadedKey);
try {
// If there is no capacity to add, create will return null
// and addIdleObject will no-op.
addIdleObject(mostLoadedKey, create(mostLoadedKey));
} catch (final Exception e) {
swallowException(e);
} finally {
deregister(mostLoadedKey);
}
}
}