Конвертация фьючерсов на Guava в Twitter - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть приложение Finatra, которое обращается к Cassandra с помощью драйвера Datastax, который выдает Guava Futures. Преобразование осуществляется с помощью следующего кода

import com.google.common.util.concurrent.{FutureCallback, Futures, ListenableFuture}
import com.twitter.util.{Future, Promise}

implicit def toTwitterFuture[A](f: ListenableFuture[A]): Future[A] = {
  val p = Promise[A]()

  val callback = new FutureCallback[A] {
    override def onSuccess(result: A): Unit = p.setValue(result)

    override def onFailure(t: Throwable): Unit = p.setException(t)
  }

  Futures.addCallback(f, callback)
  p
}

Проблема в том, что после этого преобразования остальная часть обработки запроса происходит в пуле потоков, созданном драйвером Cassandra, потенциально блокирующим другие задачи ввода-вывода. Как я могу получить доступ к исполнителю Finagle, где должна выполняться такая нагрузка на процессор?

...