com.datastax.driver.core.SocketOptions Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cassandra-driver-core Show documentation
Show all versions of cassandra-driver-core Show documentation
A driver for Apache Cassandra 1.2+ that works exclusively with the Cassandra Query Language version 3
(CQL3) and Cassandra's binary protocol.
/*
* Copyright (C) 2012-2017 DataStax Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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;
}
}