IDIEP-51
Author
Sponsor
Created

  

Status

COMLETED


Motivation

Do not block user threads when performing async thin client operations.

IEP-51 introduced async API to the Java thin client, but socket writes are still performed on the user thread and are potentially blocking.

Description

Potential approaches to this are:

  1. GridNioServer
    • Pros:
      • Easy to use, provides Future-based API
      • No extra dependencies
      • Supports multiplexing (shared worker thread group across multiple connections)
    • Cons:
      • Possibly not future proof - Ignite 3.0 may change how GridNioServer works and/or switch to Netty
  2. Netty
    • Pros:
      • Easy to use, provides Future-based API
      • Supports multiplexing (shared worker thread group (EventLoopGroup) across multiple connections)
      • Proven performance
    • Cons:
      • New dependency in core module
  3. Perform writes in a separate thread (use dedicated thread or ForkJoinPool.commonPool)
    • Pros:
      • No dependencies
    • Cons:
      • Increased resource usage,
      • More manual thread management - hard to get right and fast
  4. AsynchronousSocketChannel

As a result of dev list discussions (see links below), it is decided to use GridNioServer. To make the integration clean and easy to replace with a different implementation, a couple of facade interfaces are introduced:

  • ClientConnectionMultiplexer
    • void start()
    • void stop()
    • ClientConnection open(InetSocketAddress addr, Consumer<ByteBuffer> hnd)
  • ClientConnection
    • CompletableFuture sendAsync(ByteBuffer msg)

Discussion Links

Tickets


Unable to render Jira issues macro, execution error.

  • No labels