public abstract class TcpTransport<Channel> extends AbstractLifecycleComponent implements Transport
Modifier and Type | Class and Description |
---|---|
static class |
TcpTransport.HttpOnTransportException
A helper exception to mark an incoming connection as potentially being HTTP
so an appropriate error code can be returned
|
class |
TcpTransport.NodeChannels |
class |
TcpTransport.ScheduledPing |
lifecycle
deprecationLogger, logger, settings
TRANSPORT_TCP_COMPRESS
Constructor and Description |
---|
TcpTransport(java.lang.String transportName,
Settings settings,
ThreadPool threadPool,
BigArrays bigArrays,
CircuitBreakerService circuitBreakerService,
NamedWriteableRegistry namedWriteableRegistry,
NetworkService networkService) |
Modifier and Type | Method and Description |
---|---|
TransportAddress[] |
addressesFromString(java.lang.String address,
int perAddressLimit)
Returns an address from its string representation.
|
boolean |
addressSupported(java.lang.Class<? extends TransportAddress> address)
Is the address type supported.
|
protected abstract Channel |
bind(java.lang.String name,
java.net.InetSocketAddress address)
Binds to the given
InetSocketAddress |
protected void |
bindServer(java.lang.String name,
Settings settings) |
protected java.net.InetSocketAddress |
bindToPort(java.lang.String name,
java.net.InetAddress hostAddress,
java.lang.String port) |
BoundTransportAddress |
boundAddress()
The address the transport is bound on.
|
protected java.util.Map<java.lang.String,Settings> |
buildProfileSettings() |
boolean |
canCompress(TransportRequest request) |
protected abstract void |
closeChannels(java.util.List<Channel> channel)
Closes all channels in this list
|
protected abstract TcpTransport.NodeChannels |
connectToChannels(DiscoveryNode node)
Connects to the node in a heavy way.
|
protected abstract TcpTransport.NodeChannels |
connectToChannelsLight(DiscoveryNode node)
Connects to the given node in a light way.
|
void |
connectToNode(DiscoveryNode node)
Connects to the given node, if already connected, does nothing.
|
void |
connectToNode(DiscoveryNode node,
boolean light) |
void |
connectToNodeLight(DiscoveryNode node)
Connects to a node in a light manner.
|
void |
disconnectFromNode(DiscoveryNode node)
Disconnected from the given node, if not connected, will do nothing.
|
protected boolean |
disconnectFromNode(DiscoveryNode node,
Channel channel,
java.lang.String reason)
Disconnects from a node, only if the relevant channel is found to be part of the node channels.
|
protected void |
disconnectFromNodeChannel(Channel channel,
java.lang.Exception failure)
Disconnects from a node if a channel is found as part of that nodes channels.
|
protected void |
doClose() |
protected void |
doStart() |
protected void |
doStop() |
protected Version |
getCurrentVersion() |
CircuitBreaker |
getInFlightRequestBreaker() |
protected abstract java.net.InetSocketAddress |
getLocalAddress(Channel channel)
Returns the channels local address
|
java.util.List<java.lang.String> |
getLocalAddresses() |
protected java.lang.String |
handleRequest(Channel channel,
java.lang.String profileName,
StreamInput stream,
long requestId,
int messageLengthBytes,
Version version,
java.net.InetSocketAddress remoteAddress) |
boolean |
isCompressed() |
protected abstract boolean |
isOpen(Channel channel) |
void |
messageReceived(BytesReference reference,
Channel channel,
java.lang.String profileName,
java.net.InetSocketAddress remoteAddress,
int messageLengthBytes)
This method handles the message receive part for both request and responses
|
protected Channel |
nodeChannel(DiscoveryNode node,
TransportRequestOptions options) |
boolean |
nodeConnected(DiscoveryNode node)
Returns true if the node is connected.
|
protected void |
onException(Channel channel,
java.lang.Exception e) |
java.util.Map<java.lang.String,BoundTransportAddress> |
profileBoundAddresses()
Further profile bound addresses
|
static int |
resolvePublishPort(java.lang.String profileName,
Settings settings,
Settings profileSettings,
java.util.List<java.net.InetSocketAddress> boundAddresses,
java.net.InetAddress publishInetAddress) |
void |
sendErrorResponse(Version nodeVersion,
Channel channel,
java.lang.Exception error,
long requestId,
java.lang.String action)
Sends back an error response to the caller via the given channel
|
protected abstract void |
sendMessage(Channel channel,
BytesReference reference,
java.lang.Runnable sendListener,
boolean close) |
void |
sendRequest(DiscoveryNode node,
long requestId,
java.lang.String action,
TransportRequest request,
TransportRequestOptions options)
Sends the request to the node.
|
void |
sendResponse(Version nodeVersion,
Channel channel,
TransportResponse response,
long requestId,
java.lang.String action,
TransportResponseOptions options)
Sends the response to the given channel.
|
Settings |
settings() |
protected void |
stopInternal()
Called to tear down internal resources
|
void |
transportServiceAdapter(TransportServiceAdapter service) |
static boolean |
validateMessageHeader(BytesReference buffer)
Validates the first N bytes of the message header and returns
false if the message is
a ping message and has no payload ie. |
protected void |
validateRequest(StreamInput stream,
long requestId,
java.lang.String action) |
addLifecycleListener, close, lifecycleState, removeLifecycleListener, start, stop
logDeprecatedSetting, logRemovedSetting, nodeName
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
serverOpen
addLifecycleListener, lifecycleState, removeLifecycleListener, start, stop
close
public static final java.lang.String TRANSPORT_SERVER_WORKER_THREAD_NAME_PREFIX
public static final java.lang.String TRANSPORT_SERVER_BOSS_THREAD_NAME_PREFIX
public static final java.lang.String TRANSPORT_CLIENT_WORKER_THREAD_NAME_PREFIX
public static final java.lang.String TRANSPORT_CLIENT_BOSS_THREAD_NAME_PREFIX
public static final Setting<java.lang.Integer> CONNECTIONS_PER_NODE_RECOVERY
public static final Setting<java.lang.Integer> CONNECTIONS_PER_NODE_BULK
public static final Setting<java.lang.Integer> CONNECTIONS_PER_NODE_REG
public static final Setting<java.lang.Integer> CONNECTIONS_PER_NODE_STATE
public static final Setting<java.lang.Integer> CONNECTIONS_PER_NODE_PING
public static final Setting<java.lang.Boolean> TCP_NO_DELAY
public static final Setting<java.lang.Boolean> TCP_KEEP_ALIVE
public static final Setting<java.lang.Boolean> TCP_REUSE_ADDRESS
public static final Setting<java.lang.Boolean> TCP_BLOCKING_CLIENT
public static final Setting<java.lang.Boolean> TCP_BLOCKING_SERVER
public static final Setting<ByteSizeValue> TCP_SEND_BUFFER_SIZE
public static final Setting<ByteSizeValue> TCP_RECEIVE_BUFFER_SIZE
protected final int connectionsPerNodeRecovery
protected final int connectionsPerNodeBulk
protected final int connectionsPerNodeReg
protected final int connectionsPerNodeState
protected final int connectionsPerNodePing
protected final TimeValue connectTimeout
protected final boolean blockingClient
protected final TcpTransport.ScheduledPing scheduledPing
protected final ThreadPool threadPool
protected final NetworkService networkService
protected volatile TransportServiceAdapter transportServiceAdapter
protected final java.util.concurrent.ConcurrentMap<DiscoveryNode,TcpTransport.NodeChannels> connectedNodes
protected final java.util.Map<java.lang.String,java.util.List<Channel>> serverChannels
protected final java.util.concurrent.ConcurrentMap<java.lang.String,BoundTransportAddress> profileBoundAddresses
protected final KeyedLock<java.lang.String> connectionLock
protected final java.util.concurrent.locks.ReadWriteLock globalLock
protected final boolean compress
protected volatile BoundTransportAddress boundAddress
public TcpTransport(java.lang.String transportName, Settings settings, ThreadPool threadPool, BigArrays bigArrays, CircuitBreakerService circuitBreakerService, NamedWriteableRegistry namedWriteableRegistry, NetworkService networkService)
protected void doStart()
doStart
in class AbstractLifecycleComponent
public CircuitBreaker getInFlightRequestBreaker()
getInFlightRequestBreaker
in interface Transport
public void transportServiceAdapter(TransportServiceAdapter service)
transportServiceAdapter
in interface Transport
public Settings settings()
public boolean isCompressed()
public boolean nodeConnected(DiscoveryNode node)
Transport
nodeConnected
in interface Transport
public void connectToNodeLight(DiscoveryNode node) throws ConnectTransportException
Transport
connectToNodeLight
in interface Transport
ConnectTransportException
public void connectToNode(DiscoveryNode node)
Transport
connectToNode
in interface Transport
public void connectToNode(DiscoveryNode node, boolean light)
protected boolean disconnectFromNode(DiscoveryNode node, Channel channel, java.lang.String reason)
protected final void disconnectFromNodeChannel(Channel channel, java.lang.Exception failure)
protected Channel nodeChannel(DiscoveryNode node, TransportRequestOptions options) throws ConnectTransportException
ConnectTransportException
public void disconnectFromNode(DiscoveryNode node)
Transport
disconnectFromNode
in interface Transport
protected Version getCurrentVersion()
public boolean addressSupported(java.lang.Class<? extends TransportAddress> address)
Transport
addressSupported
in interface Transport
public BoundTransportAddress boundAddress()
Transport
boundAddress
in interface Transport
public java.util.Map<java.lang.String,BoundTransportAddress> profileBoundAddresses()
Transport
profileBoundAddresses
in interface Transport
null
iff profiles are unsupported, otherwise a map with name of profile and its bound transport addressprotected java.util.Map<java.lang.String,Settings> buildProfileSettings()
public java.util.List<java.lang.String> getLocalAddresses()
getLocalAddresses
in interface Transport
protected void bindServer(java.lang.String name, Settings settings)
protected java.net.InetSocketAddress bindToPort(java.lang.String name, java.net.InetAddress hostAddress, java.lang.String port)
public static int resolvePublishPort(java.lang.String profileName, Settings settings, Settings profileSettings, java.util.List<java.net.InetSocketAddress> boundAddresses, java.net.InetAddress publishInetAddress)
public TransportAddress[] addressesFromString(java.lang.String address, int perAddressLimit) throws java.lang.Exception
Transport
addressesFromString
in interface Transport
java.lang.Exception
protected final void doClose()
doClose
in class AbstractLifecycleComponent
protected final void doStop()
doStop
in class AbstractLifecycleComponent
protected void onException(Channel channel, java.lang.Exception e) throws java.io.IOException
java.io.IOException
protected abstract java.net.InetSocketAddress getLocalAddress(Channel channel)
protected abstract Channel bind(java.lang.String name, java.net.InetSocketAddress address) throws java.io.IOException
InetSocketAddress
name
- the profile nameaddress
- the address to bind tojava.io.IOException
protected abstract void closeChannels(java.util.List<Channel> channel) throws java.io.IOException
java.io.IOException
protected abstract TcpTransport.NodeChannels connectToChannelsLight(DiscoveryNode node) throws java.io.IOException
java.io.IOException
protected abstract void sendMessage(Channel channel, BytesReference reference, java.lang.Runnable sendListener, boolean close) throws java.io.IOException
java.io.IOException
protected abstract TcpTransport.NodeChannels connectToChannels(DiscoveryNode node) throws java.io.IOException
java.io.IOException
connectToChannelsLight(DiscoveryNode)
protected void stopInternal()
public boolean canCompress(TransportRequest request)
public void sendRequest(DiscoveryNode node, long requestId, java.lang.String action, TransportRequest request, TransportRequestOptions options) throws java.io.IOException, TransportException
Transport
sendRequest
in interface Transport
NodeNotConnectedException
- if the given node is not connectedjava.io.IOException
TransportException
public void sendErrorResponse(Version nodeVersion, Channel channel, java.lang.Exception error, long requestId, java.lang.String action) throws java.io.IOException
nodeVersion
- the caller node versionchannel
- the channel to send the response toerror
- the error to returnrequestId
- the request ID this response replies toaction
- the action this response replies tojava.io.IOException
public void sendResponse(Version nodeVersion, Channel channel, TransportResponse response, long requestId, java.lang.String action, TransportResponseOptions options) throws java.io.IOException
TransportResponse
objects back to the caller.java.io.IOException
for sending back errors to the caller
public static boolean validateMessageHeader(BytesReference buffer) throws java.io.IOException
false
if the message is
a ping message and has no payload ie. isn't a real user level message.java.lang.IllegalStateException
- if the message is too short, less than the header or less that the header plus the message sizeTcpTransport.HttpOnTransportException
- if the message has no valid header and appears to be a HTTP messagejava.lang.IllegalArgumentException
- if the message is greater that the maximum allowed frame size. This is dependent on the available
memory.java.io.IOException
protected abstract boolean isOpen(Channel channel)
public final void messageReceived(BytesReference reference, Channel channel, java.lang.String profileName, java.net.InetSocketAddress remoteAddress, int messageLengthBytes) throws java.io.IOException
java.io.IOException
protected java.lang.String handleRequest(Channel channel, java.lang.String profileName, StreamInput stream, long requestId, int messageLengthBytes, Version version, java.net.InetSocketAddress remoteAddress) throws java.io.IOException
java.io.IOException
protected void validateRequest(StreamInput stream, long requestId, java.lang.String action) throws java.io.IOException
java.io.IOException