There are about 90 usages of Future.get() (both forms) in the codebase. I
didn't check any of them (except just one - see below), but I suspect that
in a lot of those places Futures.getUnchecked() could have been called to
clarify or even improve the logic.

That one occurrence that I've run into was
https://github.com/apache/incubator-druid/blob/a0afd7931d542fdd7149f0b02c0007e3e1fa8c65/server/src/main/java/org/apache/druid/server/coordinator/CostBalancerStrategy.java#L234-L246
- I thought that particular way to handle exceptions from a Future is bad,
started to look for alternatives, and stumbled upon Futures.getUnchecked().

There are zero usages of Uninterruptibles and Futures.getUnchecked() in the
repository so far (Uninterruptibles will first appear here:
https://github.com/apache/incubator-druid/pull/7038/files#diff-95b2c7998c679f4ebc744597fc699fc5R491),
I suspect, because nobody among Druid developers is aware of those tools
(as well as I wasn't aware of them 2 weeks ago.) So I wrote this message to
raise the developers' awareness about such tools at their hand if they need
them instead of writing next `catch (InterruptedException e) { throw new
RuntimeException(e); }`

I think this is a good idea to write such knowledge-sharing messages and
would like to see them coming from other people too.

On Thu, 28 Feb 2019 at 20:07, Gian Merlino <g...@apache.org> wrote:

> Have you got sections in mind in Druid code that would be improved by using
> these?
>
> On Tue, Feb 26, 2019 at 3:04 PM Roman Leventov <leven...@apache.org>
> wrote:
>
> > I've recently discovered two utilities in Guava that are very useful in
> > combating InterruptedExceptions that contaminate business logic of code:
> >
> >  - Uninterruptibles:
> >
> >
> https://google.github.io/guava/releases/21.0/api/docs/com/google/common/util/concurrent/Uninterruptibles.html
> > .
> > It has methods that substitute typical interruptible blocking code with a
> > loop that ignores an InterruptedException, as recommended in the "Java
> > Concurrency in Practice" book. It's recommended to try to resort to this
> > utility when you don't expect interruption or don't want to deal with it
> > and do something like wrapping into a RuntimeException or logging to get
> > rid of it.
> >  Futures.getUnchecked():
> >
> >
> https://google.github.io/guava/releases/21.0/api/docs/com/google/common/util/concurrent/Futures.html#getUnchecked-java.util.concurrent.Future-
> > similar to Uninterruptibles, but additionally "washes" a Future.get()
> call
> > off ExecutionException and a CancellationException.
> >
>

Reply via email to