>
> Will the above example work if instead of session.execute, it was doing
> session.executeAsync()?
>

It will work as executeAsync will not block waiting on behavior in a I/O
thread (that may also happen to be the calling thread), so it is not
susceptible to deadlock.

To be extra safe, you could provide a separate executor as a second
argument to transform, but it isn't necessary in this particular case.


On Sat, Nov 12, 2016 at 6:41 AM Ali Akhtar <ali.rac...@gmail.com> wrote:

> At https://datastax.github.io/java-driver/manual/async/ the docs say to
> not do any blocking operations within the callback of an async operation.
> This example is given as one that can cause a deadlock:
>
> ListenableFuture<ResultSet> resultSet = Futures.transform(session,
>     new Function<Session, ResultSet>() {
>         public ResultSet apply(Session session) {
>             // Synchronous operation in a callback.
>             // DON'T DO THIS! It might deadlock.
>             return session.execute("select release_version from
> system.local");
>         }
>     });
>
> Will the above example work if instead of session.execute, it was doing
> session.executeAsync()?
>

Reply via email to