NIOServerCnxnFactory (Apache ZooKeeper - Server 3.7.0 API)
Date: 2021-03-17

org.apache.zookeeper.server

## Class NIOServerCnxnFactory

- java.lang.Object
- - org.apache.zookeeper.server.ServerCnxnFactory
  - - org.apache.zookeeper.server.NIOServerCnxnFactory

- Direct Known Subclasses:
    ControllableConnectionFactory

      public class NIOServerCnxnFactory
      extends ServerCnxnFactory

  NIOServerCnxnFactory implements a multi-threaded ServerCnxnFactory using NIO non-blocking socket calls. Communication between threads is handled via queues. - 1 accept thread, which accepts new connections and assigns to a selector thread - 1-N selector threads, each of which selects on 1/N of the connections. The reason the factory supports more than one selector thread is that with large numbers of connections, select() itself can become a performance bottleneck. - 0-M socket I/O worker threads, which perform basic socket reads and writes. If configured with 0 worker threads, the selector threads do the socket I/O directly. - 1 connection expiration thread, which closes idle connections; this is necessary to expire connections on which no session is established. Typical (default) thread counts are: on a 32 core machine, 1 accept thread, 1 connection expiration thread, 4 selector threads, and 64 worker threads.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `class` | `NIOServerCnxnFactory.SelectorThread` The SelectorThread receives newly accepted connections from the AcceptThread and is responsible for selecting for I/O readiness across the connections.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected int` | `maxClientCnxns`
    `protected WorkerService` | `workerPool`
    `static String` | `ZOOKEEPER_NIO_DIRECT_BUFFER_BYTES` Default: 64kB
    `static String` | `ZOOKEEPER_NIO_NUM_SELECTOR_THREADS` With 500 connections to an observer with watchers firing on each, is unable to exceed 1GigE rates with only 1 selector.
    `static String` | `ZOOKEEPER_NIO_NUM_WORKER_THREADS` Default: 2 * numCores
    `static String` | `ZOOKEEPER_NIO_SESSIONLESS_CNXN_TIMEOUT` Default sessionless connection timeout in ms: 10000 (10s)
    `static String` | `ZOOKEEPER_NIO_SHUTDOWN_TIMEOUT` Default worker pool shutdown timeout in ms: 5000 (5s)

    - ### Fields inherited from class org.apache.zookeeper.server.ServerCnxnFactory

      `cnxns, login, maxCnxns, saslServerCallbackHandler, secure, zkServer, ZOOKEEPER_MAX_CONNECTION_DEFAULT, ZOOKEEPER_SERVER_CNXN_FACTORY`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `NIOServerCnxnFactory()` Construct a new server connection factory which will accept an unlimited number of concurrent connections from each client (up to the file descriptor limits of the operating system).

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `closeAll(ServerCnxn.DisconnectReason reason)` clear all the connections in the selector
    `void` | `configure(InetSocketAddress addr, int maxcc, int backlog, boolean secure)`
    `protected NIOServerCnxn` | `createConnection(SocketChannel sock, SelectionKey sk, NIOServerCnxnFactory.SelectorThread selectorThread)`
    `void` | `dumpConnections(PrintWriter pwriter)`
    `Iterable<Map<String,Object>>` | `getAllConnectionInfo(boolean brief)`
    `Iterable<ServerCnxn>` | `getConnections()`
    `static ByteBuffer` | `getDirectBuffer()`
    `InetSocketAddress` | `getLocalAddress()`
    `int` | `getLocalPort()`
    `int` | `getMaxClientCnxnsPerHost()` Maximum number of connections allowed from particular host (ip)
    `int` | `getSocketListenBacklog()` The maximum queue length of the ZooKeeper server's socket
    `void` | `join()`
    `void` | `reconfigure(InetSocketAddress addr)`
    `boolean` | `removeCnxn(NIOServerCnxn cnxn)` De-registers the connection from the various mappings maintained by the factory.
    `void` | `resetAllConnectionStats()`
    `void` | `setMaxClientCnxnsPerHost(int max)` Maximum number of connections allowed from particular host (ip)
    `void` | `shutdown()`
    `void` | `start()`
    `void` | `startup(ZooKeeperServer zks, boolean startServer)`
    `void` | `stop()`
    `void` | `touchCnxn(NIOServerCnxn cnxn)` Add or update cnxn in our cnxnExpiryQueue

    - ### Methods inherited from class org.apache.zookeeper.server.ServerCnxnFactory

      `addSession, closeSession, configure, configure, configureSaslLogin, createFactory, createFactory, createFactory, createFactory, createFactory, getMaxCnxns, getNumAliveConnections, getUserName, getZooKeeperServer, initMaxCnxns, isSecure, limitTotalNumberOfCnxns, registerConnection, removeCnxnFromSessionMap, setZooKeeperServer, startup, unregisterConnection`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### ZOOKEEPER_NIO_SESSIONLESS_CNXN_TIMEOUT

          public static final String ZOOKEEPER_NIO_SESSIONLESS_CNXN_TIMEOUT

      Default sessionless connection timeout in ms: 10000 (10s)
      See Also:
        Constant Field Values

    - #### ZOOKEEPER_NIO_NUM_SELECTOR_THREADS

          public static final String ZOOKEEPER_NIO_NUM_SELECTOR_THREADS

      With 500 connections to an observer with watchers firing on each, is unable to exceed 1GigE rates with only 1 selector. Defaults to using 2 selector threads with 8 cores and 4 with 32 cores. Expressed as sqrt(numCores/2). Must have at least 1 selector thread.
      See Also:
        Constant Field Values

    - #### ZOOKEEPER_NIO_NUM_WORKER_THREADS

          public static final String ZOOKEEPER_NIO_NUM_WORKER_THREADS

      Default: 2 * numCores
      See Also:
        Constant Field Values

    - #### ZOOKEEPER_NIO_DIRECT_BUFFER_BYTES

          public static final String ZOOKEEPER_NIO_DIRECT_BUFFER_BYTES

      Default: 64kB
      See Also:
        Constant Field Values

    - #### ZOOKEEPER_NIO_SHUTDOWN_TIMEOUT

          public static final String ZOOKEEPER_NIO_SHUTDOWN_TIMEOUT

      Default worker pool shutdown timeout in ms: 5000 (5s)
      See Also:
        Constant Field Values

    - #### maxClientCnxns

          protected int maxClientCnxns

    - #### workerPool

          protected WorkerService workerPool

  - ### Constructor Detail

    - #### NIOServerCnxnFactory

          public NIOServerCnxnFactory()

      Construct a new server connection factory which will accept an unlimited number of concurrent connections from each client (up to the file descriptor limits of the operating system). startup(zks) must be called subsequently.

  - ### Method Detail

    - #### getDirectBuffer

          public static ByteBuffer getDirectBuffer()

    - #### configure

          public void configure(InetSocketAddress addr,
                                int maxcc,
                                int backlog,
                                boolean secure)
                         throws IOException

      Specified by:
        `configure` in class `ServerCnxnFactory`
      Throws:
        `IOException`

    - #### reconfigure

          public void reconfigure(InetSocketAddress addr)

      Specified by:
        `reconfigure` in class `ServerCnxnFactory`

    - #### getMaxClientCnxnsPerHost

          public int getMaxClientCnxnsPerHost()

      Maximum number of connections allowed from particular host (ip)
      Specified by:
        `getMaxClientCnxnsPerHost` in class `ServerCnxnFactory`

    - #### setMaxClientCnxnsPerHost

          public void setMaxClientCnxnsPerHost(int max)

      Maximum number of connections allowed from particular host (ip)
      Specified by:
        `setMaxClientCnxnsPerHost` in class `ServerCnxnFactory`

    - #### getSocketListenBacklog

          public int getSocketListenBacklog()

      The maximum queue length of the ZooKeeper server's socket
      Specified by:
        `getSocketListenBacklog` in class `ServerCnxnFactory`

    - #### start

          public void start()

      Specified by:
        `start` in class `ServerCnxnFactory`

    - #### startup

          public void startup(ZooKeeperServer zks,
                              boolean startServer)
                       throws IOException,
                              InterruptedException

      Specified by:
        `startup` in class `ServerCnxnFactory`
      Throws:
        `IOException`
        `InterruptedException`

    - #### getLocalAddress

          public InetSocketAddress getLocalAddress()

      Specified by:
        `getLocalAddress` in class `ServerCnxnFactory`

    - #### getLocalPort

          public int getLocalPort()

      Specified by:
        `getLocalPort` in class `ServerCnxnFactory`

    - #### removeCnxn

          public boolean removeCnxn(NIOServerCnxn cnxn)

      De-registers the connection from the various mappings maintained by the factory.

    - #### touchCnxn

          public void touchCnxn(NIOServerCnxn cnxn)

      Add or update cnxn in our cnxnExpiryQueue
      Parameters:
        `cnxn` -

    - #### createConnection

          protected NIOServerCnxn createConnection(SocketChannel sock,
                                                   SelectionKey sk,
                                                   NIOServerCnxnFactory.SelectorThread selectorThread)
                                            throws IOException

      Throws:
        `IOException`

    - #### closeAll

          public void closeAll(ServerCnxn.DisconnectReason reason)

      clear all the connections in the selector
      Specified by:
        `closeAll` in class `ServerCnxnFactory`

    - #### stop

          public void stop()

    - #### shutdown

          public void shutdown()

      Specified by:
        `shutdown` in class `ServerCnxnFactory`

    - #### join

          public void join()
                    throws InterruptedException

      Specified by:
        `join` in class `ServerCnxnFactory`
      Throws:
        `InterruptedException`

    - #### getConnections

          public Iterable<ServerCnxn> getConnections()

      Specified by:
        `getConnections` in class `ServerCnxnFactory`

    - #### dumpConnections

          public void dumpConnections(PrintWriter pwriter)

    - #### resetAllConnectionStats

          public void resetAllConnectionStats()

      Specified by:
        `resetAllConnectionStats` in class `ServerCnxnFactory`

    - #### getAllConnectionInfo

          public Iterable<Map<String,Object>> getAllConnectionInfo(boolean brief)

      Specified by:
        `getAllConnectionInfo` in class `ServerCnxnFactory`

Copyright © 2008–2021 The Apache Software Foundation. All rights reserved.