concurrent/src/main/java/io/airlift/concurrent/MoreFutures.java
public static <T> void addExceptionCallback(ListenableFuture<T> future, Consumer<Throwable> exceptionCallback)
    {
        addExceptionCallback(future, exceptionCallback, directExecutor());
    }
public static <T> void addExceptionCallback(ListenableFuture<T> future, Consumer<Throwable> exceptionCallback)
    {
        addExceptionCallback(future, exceptionCallback, directExecutor());
    }
Invokes the callback if the future fails. Note, this uses the direct
executor, so the callback should not be resource intensive.