All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.datastax.driver.core.SocketOptions Maven / Gradle / Ivy

/*
 * Copyright DataStax, Inc.
 *
 * This software can be used solely with DataStax Enterprise. Please consult the license at
 * http://www.datastax.com/terms/datastax-dse-driver-license-terms
 */
package com.datastax.driver.core;

/**
 * Options to configure low-level socket options for the connections kept to the Cassandra hosts.
 */
public class SocketOptions {

  /**
   * The default connection timeout in milliseconds if none is set explicitly using {@link
   * #setConnectTimeoutMillis}.
   *
   * 

That default is of 5 seconds. */ public static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = 5000; /** * The default read timeout in milliseconds if none is set explicitly using {@link * #setReadTimeoutMillis}. * *

That default is of 12 seconds so as to be slightly bigger that the default Cassandra * timeout. * * @see #getReadTimeoutMillis for more details on this timeout. */ public static final int DEFAULT_READ_TIMEOUT_MILLIS = 12000; private volatile int connectTimeoutMillis = DEFAULT_CONNECT_TIMEOUT_MILLIS; private volatile int readTimeoutMillis = DEFAULT_READ_TIMEOUT_MILLIS; private volatile Boolean keepAlive; private volatile Boolean reuseAddress; private volatile Integer soLinger; private volatile Boolean tcpNoDelay = Boolean.TRUE; private volatile Integer receiveBufferSize; private volatile Integer sendBufferSize; /** Creates a new {@code SocketOptions} instance with default values. */ public SocketOptions() {} /** * The connection timeout in milliseconds. * *

As the name implies, the connection timeout defines how long the driver waits to establish a * new connection to a Cassandra node before giving up. * * @return the connection timeout in milliseconds */ public int getConnectTimeoutMillis() { return connectTimeoutMillis; } /** * Sets the connection timeout in milliseconds. * *

The default value is {@link #DEFAULT_CONNECT_TIMEOUT_MILLIS}. * * @param connectTimeoutMillis the timeout to set. * @return this {@code SocketOptions}. */ public SocketOptions setConnectTimeoutMillis(int connectTimeoutMillis) { this.connectTimeoutMillis = connectTimeoutMillis; return this; } /** * The per-host read timeout in milliseconds. * *

This defines how long the driver will wait for a given Cassandra node to answer a query. * *

Please note that this is not the maximum time a call to {@link Session#execute} may block; * this is the maximum time that a call will wait for one particular Cassandra host, but other * hosts could be tried if one of them times out, depending on the {@link * com.datastax.driver.core.policies.RetryPolicy} in use. In other words, a {@link * Session#execute} call may theoretically wait up to {@code getReadTimeoutMillis() * * } (though the total number of hosts tried for a given query also * depends on the {@link com.datastax.driver.core.policies.LoadBalancingPolicy} in use). If you * want to control how long to wait for a query, use {@link Session#executeAsync} and the {@code * ResultSetFuture#get(long, TimeUnit)} method. * *

Also note that for efficiency reasons, this read timeout is approximate: it has an accuracy * of up to 100 milliseconds (i.e. it may fire up to 100 milliseconds late). It is not meant to be * used for precise timeout, but rather as a protection against misbehaving Cassandra nodes. * *

* * @return the read timeout in milliseconds. */ public int getReadTimeoutMillis() { return readTimeoutMillis; } /** * Sets the per-host read timeout in milliseconds. * *

When setting this value, keep in mind the following: * *

    *
  • it should be higher than the timeout settings used on the Cassandra side ({@code * *_request_timeout_in_ms} in {@code cassandra.yaml}). *
  • the read timeout is only approximate and only control the timeout to one Cassandra host, * not the full query (see {@link #getReadTimeoutMillis} for more details). If a high level * of precision on the timeout to a request is required, you should use the {@link * ResultSetFuture#get(long, java.util.concurrent.TimeUnit)} method. *
* *

If you don't call this method, the default value is {@link #DEFAULT_READ_TIMEOUT_MILLIS}. * * @param readTimeoutMillis the timeout to set. If it is less than or equal to 0, read timeouts * are disabled. * @return this {@code SocketOptions}. */ public SocketOptions setReadTimeoutMillis(int readTimeoutMillis) { this.readTimeoutMillis = readTimeoutMillis; return this; } /** * Returns whether TCP keepalive is enabled. * * @return the value of the option, or {@code null} if it is not set. * @see #setKeepAlive(boolean) */ public Boolean getKeepAlive() { return keepAlive; } /** * Sets whether to enable TCP keepalive. * *

By default, this option is not set by the driver. The actual value will be the default from * the underlying Netty transport (Java NIO or native epoll). * * @param keepAlive whether to enable or disable the option. * @return this {@code SocketOptions}. * @see java.net.SocketOptions#TCP_NODELAY */ public SocketOptions setKeepAlive(boolean keepAlive) { this.keepAlive = keepAlive; return this; } /** * Returns whether reuse-address is enabled. * * @return the value of the option, or {@code null} if it is not set. * @see #setReuseAddress(boolean) */ public Boolean getReuseAddress() { return reuseAddress; } /** * Sets whether to enable reuse-address. * *

By default, this option is not set by the driver. The actual value will be the default from * the underlying Netty transport (Java NIO or native epoll). * * @param reuseAddress whether to enable or disable the option. * @return this {@code SocketOptions}. * @see java.net.SocketOptions#SO_REUSEADDR */ public SocketOptions setReuseAddress(boolean reuseAddress) { this.reuseAddress = reuseAddress; return this; } /** * Returns the linger-on-close timeout. * * @return the value of the option, or {@code null} if it is not set. * @see #setSoLinger(int) */ public Integer getSoLinger() { return soLinger; } /** * Sets the linger-on-close timeout. * *

By default, this option is not set by the driver. The actual value will be the default from * the underlying Netty transport (Java NIO or native epoll). * * @param soLinger the new value. * @return this {@code SocketOptions}. * @see java.net.SocketOptions#SO_LINGER */ public SocketOptions setSoLinger(int soLinger) { this.soLinger = soLinger; return this; } /** * Returns whether Nagle's algorithm is disabled. * * @return the value of the option ({@code true} means Nagle is disabled), or {@code null} if it * is not set. * @see #setTcpNoDelay(boolean) */ public Boolean getTcpNoDelay() { return tcpNoDelay; } /** * Sets whether to disable Nagle's algorithm. * *

By default, this option is set to {@code true} (Nagle disabled). * * @param tcpNoDelay whether to enable or disable the option. * @return this {@code SocketOptions}. * @see java.net.SocketOptions#TCP_NODELAY */ public SocketOptions setTcpNoDelay(boolean tcpNoDelay) { this.tcpNoDelay = tcpNoDelay; return this; } /** * Returns the hint to the size of the underlying buffers for incoming network I/O. * * @return the value of the option, or {@code null} if it is not set. * @see #setReceiveBufferSize(int) */ public Integer getReceiveBufferSize() { return receiveBufferSize; } /** * Sets a hint to the size of the underlying buffers for incoming network I/O. * *

By default, this option is not set by the driver. The actual value will be the default from * the underlying Netty transport (Java NIO or native epoll). * * @param receiveBufferSize the new value. * @return this {@code SocketOptions}. * @see java.net.SocketOptions#SO_RCVBUF */ public SocketOptions setReceiveBufferSize(int receiveBufferSize) { this.receiveBufferSize = receiveBufferSize; return this; } /** * Returns the hint to the size of the underlying buffers for outgoing network I/O. * * @return the value of the option, or {@code null} if it is not set. * @see #setSendBufferSize(int) */ public Integer getSendBufferSize() { return sendBufferSize; } /** * Sets a hint to the size of the underlying buffers for outgoing network I/O. * *

By default, this option is not set by the driver. The actual value will be the default from * the underlying Netty transport (Java NIO or native epoll). * * @param sendBufferSize the new value. * @return this {@code SocketOptions}. * @see java.net.SocketOptions#SO_SNDBUF */ public SocketOptions setSendBufferSize(int sendBufferSize) { this.sendBufferSize = sendBufferSize; return this; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy