in src/main/java/com/spotify/futures/ConcurrencyLimiter.java [178:212]
private void invoke(
final SettableFuture<T> response, Callable<? extends ListenableFuture<T>> callable) {
final ListenableFuture<T> future;
try {
future = callable.call();
if (future == null) {
limit.release();
response.setException(new NullPointerException());
return;
}
} catch (Throwable e) {
limit.release();
response.setException(e);
return;
}
Futures.addCallback(
future,
new FutureCallback<T>() {
@Override
public void onSuccess(T result) {
limit.release();
response.set(result);
pump();
}
@Override
public void onFailure(Throwable t) {
limit.release();
response.setException(t);
pump();
}
},
executor);
}