private PerRoutePool<T, C> getPool(final T route) { PerRoutePool<T, C> routePool = routeToPool.get(route); if (routePool == null) { final PerRoutePool<T, C> newRoutePool = new PerRoutePool<>( route, defaultMaxPerRoute, timeToLive, policy, this, connPoolListener); routePool = routeToPool.putIfAbsent(route, newRoutePool); if (routePool == null) { routePool = newRoutePool; } } return routePool; }
public void enumAvailable(final Callback<PoolEntry<T, C>> callback) { for (final PerRoutePool<T, C> routePool : routeToPool.values()) { routePool.enumAvailable(callback); } }
public void enumLeased(final Callback<PoolEntry<T, C>> callback) { for (final PerRoutePool<T, C> routePool : routeToPool.values()) { routePool.enumLeased(callback); } }
public void release(final PoolEntry<T, C> releasedEntry, final boolean reusable) { removeLeased(releasedEntry); if (!reusable || releasedEntry.getExpiryDeadline().isExpired()) { releasedEntry.discardConnection(CloseMode.GRACEFUL); leaseRequest.failed(DeadlineTimeoutException.from(deadline)); } else { final PoolEntry<T, C> availableEntry = getAvailableEntry(state); if (availableEntry != null) { addLeased(availableEntry); leaseRequest.completed(availableEntry); } else if (leased.size() < max) { final PoolEntry<T, C> newEntry = new PoolEntry<>(route, timeToLive); addLeased(newEntry); leaseRequest.completed(newEntry);
public void release(final PoolEntry<T, C> releasedEntry, final boolean reusable) { removeLeased(releasedEntry); if (!reusable || releasedEntry.getExpiryDeadline().isExpired()) { releasedEntry.discardConnection(CloseMode.GRACEFUL); leaseRequest.failed(DeadlineTimeoutException.from(deadline)); } else { final PoolEntry<T, C> availableEntry = getAvailableEntry(state); if (availableEntry != null) { addLeased(availableEntry); leaseRequest.completed(availableEntry); } else if (leased.size() < max) { final PoolEntry<T, C> newEntry = new PoolEntry<>(route, timeToLive); addLeased(newEntry); leaseRequest.completed(newEntry);
public Future<PoolEntry<T, C>> lease( final Object state, final Timeout requestTimeout, final FutureCallback<PoolEntry<T, C>> callback) { Asserts.check(!terminated.get(), "Connection pool shut down"); final BasicFuture<PoolEntry<T, C>> future = new BasicFuture<>(callback); final PoolEntry<T, C> availableEntry = getAvailableEntry(state); if (availableEntry != null) { addLeased(availableEntry); future.completed(availableEntry); } else { if (pending.isEmpty() && leased.size() < max) { final PoolEntry<T, C> entry = new PoolEntry<>(route, timeToLive); addLeased(entry); future.completed(entry); } else { pending.add(new LeaseRequest<>(state, requestTimeout, future)); } } return future; }
public Future<PoolEntry<T, C>> lease( final Object state, final Timeout requestTimeout, final FutureCallback<PoolEntry<T, C>> callback) { Asserts.check(!terminated.get(), "Connection pool shut down"); final BasicFuture<PoolEntry<T, C>> future = new BasicFuture<>(callback); final PoolEntry<T, C> availableEntry = getAvailableEntry(state); if (availableEntry != null) { addLeased(availableEntry); future.completed(availableEntry); } else { if (pending.isEmpty() && leased.size() < max) { final PoolEntry<T, C> entry = new PoolEntry<>(route, timeToLive); addLeased(entry); future.completed(entry); } else { pending.add(new LeaseRequest<>(state, requestTimeout, future)); } } return future; }
private PerRoutePool<T, C> getPool(final T route) { PerRoutePool<T, C> routePool = routeToPool.get(route); if (routePool == null) { final PerRoutePool<T, C> newRoutePool = new PerRoutePool<>( route, defaultMaxPerRoute, timeToLive, policy, this, connPoolListener); routePool = routeToPool.putIfAbsent(route, newRoutePool); if (routePool == null) { routePool = newRoutePool; } } return routePool; }
@Override public PoolStats getTotalStats() { int leasedTotal = 0; int pendingTotal = 0; int availableTotal = 0; int maxTotal = 0; for (final PerRoutePool<T, C> routePool : routeToPool.values()) { leasedTotal += routePool.getLeasedCount(); pendingTotal += routePool.getPendingCount(); availableTotal += routePool.getAvailableCount(); maxTotal += routePool.getMax(); } return new PoolStats(leasedTotal, pendingTotal, availableTotal, maxTotal); }
@Override public PoolStats getTotalStats() { int leasedTotal = 0; int pendingTotal = 0; int availableTotal = 0; int maxTotal = 0; for (final PerRoutePool<T, C> routePool : routeToPool.values()) { leasedTotal += routePool.getLeasedCount(); pendingTotal += routePool.getPendingCount(); availableTotal += routePool.getAvailableCount(); maxTotal += routePool.getMax(); } return new PoolStats(leasedTotal, pendingTotal, availableTotal, maxTotal); }
public void enumAvailable(final Callback<PoolEntry<T, C>> callback) { for (final PerRoutePool<T, C> routePool : routeToPool.values()) { routePool.enumAvailable(callback); } }
@Override public Future<PoolEntry<T, C>> lease( final T route, final Object state, final Timeout requestTimeout, final FutureCallback<PoolEntry<T, C>> callback) { Args.notNull(route, "Route"); Asserts.check(!isShutDown.get(), "Connection pool shut down"); final PerRoutePool<T, C> routePool = getPool(route); return routePool.lease(state, requestTimeout, callback); }
@Override public Future<PoolEntry<T, C>> lease( final T route, final Object state, final Timeout requestTimeout, final FutureCallback<PoolEntry<T, C>> callback) { Args.notNull(route, "Route"); Asserts.check(!isShutDown.get(), "Connection pool shut down"); final PerRoutePool<T, C> routePool = getPool(route); return routePool.lease(state, requestTimeout, callback); }
@Override public int getMaxPerRoute(final T route) { Args.notNull(route, "Route"); final PerRoutePool<T, C> routePool = getPool(route); return routePool.getMax(); }
@Override public PoolStats getStats(final T route) { Args.notNull(route, "Route"); final PerRoutePool<T, C> routePool = getPool(route); return new PoolStats( routePool.getLeasedCount(), routePool.getPendingCount(), routePool.getAvailableCount(), routePool.getMax()); }
public void enumLeased(final Callback<PoolEntry<T, C>> callback) { for (final PerRoutePool<T, C> routePool : routeToPool.values()) { routePool.enumLeased(callback); } }
@Override public PoolStats getStats(final T route) { Args.notNull(route, "Route"); final PerRoutePool<T, C> routePool = getPool(route); return new PoolStats( routePool.getLeasedCount(), routePool.getPendingCount(), routePool.getAvailableCount(), routePool.getMax()); }
@Override public int getMaxPerRoute(final T route) { Args.notNull(route, "Route"); final PerRoutePool<T, C> routePool = getPool(route); return routePool.getMax(); }