public void shutdown(final CloseMode closeMode) { if (terminated.compareAndSet(false, true)) { PoolEntry<T, C> availableEntry; while ((availableEntry = available.poll()) != null) { availableEntry.discardConnection(closeMode); } for (final PoolEntry<T, C> entry : leased.keySet()) { entry.discardConnection(closeMode); } leased.clear(); LeaseRequest<T, C> leaseRequest; while ((leaseRequest = pending.poll()) != null) { leaseRequest.cancel(); } } }
public void validatePendingRequests() { final Iterator<LeaseRequest<T, C>> it = pending.iterator(); while (it.hasNext()) { final LeaseRequest<T, C> request = it.next(); final BasicFuture<PoolEntry<T, C>> future = request.getFuture(); if (future.isCancelled() && !request.isDone()) { it.remove(); } else { final Deadline deadline = request.getDeadline(); if (deadline.isExpired()) { request.failed(DeadlineTimeoutException.from(deadline)); } if (request.isDone()) { it.remove(); } } } }
if (leaseRequest.isDone()) { continue; final Object state = leaseRequest.getState(); final Deadline deadline = leaseRequest.getDeadline(); 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);
if (leaseRequest.isDone()) { continue; final Object state = leaseRequest.getState(); final Deadline deadline = leaseRequest.getDeadline(); 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; }
public void validatePendingRequests() { final Iterator<LeaseRequest<T, C>> it = pending.iterator(); while (it.hasNext()) { final LeaseRequest<T, C> request = it.next(); final BasicFuture<PoolEntry<T, C>> future = request.getFuture(); if (future.isCancelled() && !request.isDone()) { it.remove(); } else { final Deadline deadline = request.getDeadline(); if (deadline.isExpired()) { request.failed(DeadlineTimeoutException.from(deadline)); } if (request.isDone()) { it.remove(); } } } }
public void shutdown(final CloseMode closeMode) { if (terminated.compareAndSet(false, true)) { PoolEntry<T, C> availableEntry; while ((availableEntry = available.poll()) != null) { availableEntry.discardConnection(closeMode); } for (final PoolEntry<T, C> entry : leased.keySet()) { entry.discardConnection(closeMode); } leased.clear(); LeaseRequest<T, C> leaseRequest; while ((leaseRequest = pending.poll()) != null) { leaseRequest.cancel(); } } }