Skip to content

Cats Effect 2 executor doesn't shift back to the compute pool #2445

Open
@pjurczenko

Description

The current implementation of Cats Effect 2 executor relies solely on Async.async method, which doesn't shift the execution back to the compute pool. This means that operations subsequent to the ElasticSearch queries will be performed on the dispatcher threads used for the non-blocking I/O, which is definitely undesirable. This is how the executor could look like to prevent this:

import cats.syntax.apply._

class CatsEffectExecutor[F[_]: Async: ContextShift] extends Executor[F] {
  override def exec(client: HttpClient, request: ElasticRequest): F[HttpResponse] =
    Async[F].async(cb => client.send(request, cb)) <* ContextShift[F].shift
}

However, such a change would be breaking the binary compatibility.

@sksamuel how do you approach such breaking changes in the elastic4s releases?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions