Package org.elasticsearch.transport
Class TcpTransport
- java.lang.Object
-
- org.elasticsearch.common.component.AbstractComponent
-
- org.elasticsearch.common.component.AbstractLifecycleComponent
-
- org.elasticsearch.transport.TcpTransport
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,LifecycleComponent,Releasable,Transport
public abstract class TcpTransport extends AbstractLifecycleComponent implements Transport
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classTcpTransport.HttpOnTransportExceptionA helper exception to mark an incoming connection as potentially being HTTP so an appropriate error code can be returnedclassTcpTransport.NodeChannelsstatic classTcpTransport.ProfileSettingsRepresentation of a transport profile settings for atransport.profiles.$profilename.*classTcpTransport.ScheduledPing-
Nested classes/interfaces inherited from interface org.elasticsearch.transport.Transport
Transport.Connection, Transport.ResponseContext<T extends TransportResponse>, Transport.ResponseHandlers
-
-
Field Summary
-
Fields inherited from class org.elasticsearch.common.component.AbstractComponent
deprecationLogger, logger, settings
-
Fields inherited from class org.elasticsearch.common.component.AbstractLifecycleComponent
lifecycle
-
Fields inherited from interface org.elasticsearch.transport.Transport
TRANSPORT_TCP_COMPRESS
-
-
Constructor Summary
Constructors Constructor Description TcpTransport(java.lang.String transportName, Settings settings, ThreadPool threadPool, BigArrays bigArrays, CircuitBreakerService circuitBreakerService, NamedWriteableRegistry namedWriteableRegistry, NetworkService networkService)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddConnectionListener(TransportConnectionListener listener)Adds a new event listenerTransportAddress[]addressesFromString(java.lang.String address, int perAddressLimit)Returns an address from its string representation.protected abstract TcpChannelbind(java.lang.String name, java.net.InetSocketAddress address)Binds to the givenInetSocketAddressprotected voidbindServer(TcpTransport.ProfileSettings profileSettings)protected java.net.InetSocketAddressbindToPort(java.lang.String name, java.net.InetAddress hostAddress, java.lang.String port)BoundTransportAddressboundAddress()The address the transport is bound on.booleancanCompress(TransportRequest request)voidconnectToNode(DiscoveryNode node, ConnectionProfile connectionProfile, CheckedBiConsumer<Transport.Connection,ConnectionProfile,java.io.IOException> connectionValidator)Connects to a node with the given connection profile.voiddisconnectFromNode(DiscoveryNode node)Disconnected from the given node, if not connected, will do nothing.protected voiddoClose()protected voiddoStart()protected voiddoStop()protected voidensureOpen()Ensures this transport is still started / openprotected VersionexecuteHandshake(DiscoveryNode node, TcpChannel channel, TimeValue timeout)TcpTransport.NodeChannelsgetConnection(DiscoveryNode node)Returns a connection for the given node if the node is connected.protected VersiongetCurrentVersion()CircuitBreakergetInFlightRequestBreaker()java.util.List<java.lang.String>getLocalAddresses()Returns a list of all local adresses for this transportstatic java.util.Set<TcpTransport.ProfileSettings>getProfileSettings(Settings settings)Returns all profile settings for the given settings objectRequestHandlerRegistrygetRequestHandler(java.lang.String action)Returns the registered request handler registry for the given action ornullif it's not registeredTransport.ResponseHandlersgetResponseHandlers()TransportStatsgetStats()protected java.lang.StringhandleRequest(TcpChannel channel, java.lang.String profileName, StreamInput stream, long requestId, int messageLengthBytes, Version version, java.net.InetSocketAddress remoteAddress, byte status)protected abstract TcpChannelinitiateChannel(DiscoveryNode node, TimeValue connectTimeout, ActionListener<java.lang.Void> connectListener)Initiate a single tcp socket channel to a node.voidmessageReceived(BytesReference reference, TcpChannel channel, java.lang.String profileName, java.net.InetSocketAddress remoteAddress, int messageLengthBytes)This method handles the message receive part for both request and responsesbooleannodeConnected(DiscoveryNode node)Returnstrueif the node is connected.protected voidonException(TcpChannel channel, java.lang.Exception e)TcpTransport.NodeChannelsopenConnection(DiscoveryNode node, ConnectionProfile connectionProfile)Opens a new connection to the given node and returns it.java.util.Map<java.lang.String,BoundTransportAddress>profileBoundAddresses()Further profile bound addresses<Request extends TransportRequest>
voidregisterRequestHandler(RequestHandlerRegistry<Request> reg)Registers a new request handlerbooleanremoveConnectionListener(TransportConnectionListener listener)Removes an event listenerprotected ConnectionProfileresolveConnectionProfile(ConnectionProfile connectionProfile)static intresolvePublishPort(TcpTransport.ProfileSettings profileSettings, java.util.List<java.net.InetSocketAddress> boundAddresses, java.net.InetAddress publishInetAddress)voidsendErrorResponse(Version nodeVersion, java.util.Set<java.lang.String> features, TcpChannel channel, java.lang.Exception error, long requestId, java.lang.String action)Sends back an error response to the caller via the given channelvoidsendResponse(Version nodeVersion, java.util.Set<java.lang.String> features, TcpChannel channel, TransportResponse response, long requestId, java.lang.String action, TransportResponseOptions options)Sends the response to the given channel.protected voidserverAcceptedChannel(TcpChannel channel)protected voidstopInternal()Called to tear down internal resourcesstatic booleanvalidateMessageHeader(BytesReference buffer)Validates the first N bytes of the message header and returnsfalseif the message is a ping message and has no payload ie.protected voidvalidateRequest(StreamInput stream, long requestId, java.lang.String action)-
Methods inherited from class org.elasticsearch.common.component.AbstractComponent
logDeprecatedSetting, logRemovedSetting, nodeName
-
Methods inherited from class org.elasticsearch.common.component.AbstractLifecycleComponent
addLifecycleListener, close, lifecycleState, removeLifecycleListener, start, stop
-
Methods inherited from interface org.elasticsearch.common.component.LifecycleComponent
addLifecycleListener, lifecycleState, removeLifecycleListener, start, stop
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.elasticsearch.common.lease.Releasable
close
-
-
-
-
Field Detail
-
TRANSPORT_SERVER_WORKER_THREAD_NAME_PREFIX
public static final java.lang.String TRANSPORT_SERVER_WORKER_THREAD_NAME_PREFIX
- See Also:
- Constant Field Values
-
TRANSPORT_CLIENT_BOSS_THREAD_NAME_PREFIX
public static final java.lang.String TRANSPORT_CLIENT_BOSS_THREAD_NAME_PREFIX
- See Also:
- Constant Field Values
-
HOST
public static final Setting<java.util.List<java.lang.String>> HOST
-
BIND_HOST
public static final Setting<java.util.List<java.lang.String>> BIND_HOST
-
PUBLISH_HOST
public static final Setting<java.util.List<java.lang.String>> PUBLISH_HOST
-
PORT
public static final Setting<java.lang.String> PORT
-
PUBLISH_PORT
public static final Setting<java.lang.Integer> PUBLISH_PORT
-
DEFAULT_PROFILE
public static final java.lang.String DEFAULT_PROFILE
- See Also:
- Constant Field Values
-
CONNECTIONS_PER_NODE_RECOVERY
public static final Setting<java.lang.Integer> CONNECTIONS_PER_NODE_RECOVERY
-
CONNECTIONS_PER_NODE_BULK
public static final Setting<java.lang.Integer> CONNECTIONS_PER_NODE_BULK
-
CONNECTIONS_PER_NODE_REG
public static final Setting<java.lang.Integer> CONNECTIONS_PER_NODE_REG
-
CONNECTIONS_PER_NODE_STATE
public static final Setting<java.lang.Integer> CONNECTIONS_PER_NODE_STATE
-
CONNECTIONS_PER_NODE_PING
public static final Setting<java.lang.Integer> CONNECTIONS_PER_NODE_PING
-
TCP_NO_DELAY
public static final Setting<java.lang.Boolean> TCP_NO_DELAY
-
TCP_KEEP_ALIVE
public static final Setting<java.lang.Boolean> TCP_KEEP_ALIVE
-
TCP_REUSE_ADDRESS
public static final Setting<java.lang.Boolean> TCP_REUSE_ADDRESS
-
TCP_SEND_BUFFER_SIZE
public static final Setting<ByteSizeValue> TCP_SEND_BUFFER_SIZE
-
TCP_RECEIVE_BUFFER_SIZE
public static final Setting<ByteSizeValue> TCP_RECEIVE_BUFFER_SIZE
-
TCP_NO_DELAY_PROFILE
public static final Setting.AffixSetting<java.lang.Boolean> TCP_NO_DELAY_PROFILE
-
TCP_KEEP_ALIVE_PROFILE
public static final Setting.AffixSetting<java.lang.Boolean> TCP_KEEP_ALIVE_PROFILE
-
TCP_REUSE_ADDRESS_PROFILE
public static final Setting.AffixSetting<java.lang.Boolean> TCP_REUSE_ADDRESS_PROFILE
-
TCP_SEND_BUFFER_SIZE_PROFILE
public static final Setting.AffixSetting<ByteSizeValue> TCP_SEND_BUFFER_SIZE_PROFILE
-
TCP_RECEIVE_BUFFER_SIZE_PROFILE
public static final Setting.AffixSetting<ByteSizeValue> TCP_RECEIVE_BUFFER_SIZE_PROFILE
-
BIND_HOST_PROFILE
public static final Setting.AffixSetting<java.util.List<java.lang.String>> BIND_HOST_PROFILE
-
PUBLISH_HOST_PROFILE
public static final Setting.AffixSetting<java.util.List<java.lang.String>> PUBLISH_HOST_PROFILE
-
PORT_PROFILE
public static final Setting.AffixSetting<java.lang.String> PORT_PROFILE
-
PUBLISH_PORT_PROFILE
public static final Setting.AffixSetting<java.lang.Integer> PUBLISH_PORT_PROFILE
-
PING_DATA_SIZE
public static final int PING_DATA_SIZE
- See Also:
- Constant Field Values
-
FEATURE_PREFIX
public static final java.lang.String FEATURE_PREFIX
- See Also:
- Constant Field Values
-
scheduledPing
protected final TcpTransport.ScheduledPing scheduledPing
-
threadPool
protected final ThreadPool threadPool
-
networkService
protected final NetworkService networkService
-
profileSettings
protected final java.util.Set<TcpTransport.ProfileSettings> profileSettings
-
compress
protected final boolean compress
-
defaultConnectionProfile
protected final ConnectionProfile defaultConnectionProfile
-
-
Constructor Detail
-
TcpTransport
public TcpTransport(java.lang.String transportName, Settings settings, ThreadPool threadPool, BigArrays bigArrays, CircuitBreakerService circuitBreakerService, NamedWriteableRegistry namedWriteableRegistry, NetworkService networkService)
-
-
Method Detail
-
doStart
protected void doStart()
- Specified by:
doStartin classAbstractLifecycleComponent
-
addConnectionListener
public void addConnectionListener(TransportConnectionListener listener)
Description copied from interface:TransportAdds a new event listener- Specified by:
addConnectionListenerin interfaceTransport- Parameters:
listener- the listener to add
-
removeConnectionListener
public boolean removeConnectionListener(TransportConnectionListener listener)
Description copied from interface:TransportRemoves an event listener- Specified by:
removeConnectionListenerin interfaceTransport- Parameters:
listener- the listener to remove- Returns:
trueiff the listener was removed otherwisefalse
-
getInFlightRequestBreaker
public CircuitBreaker getInFlightRequestBreaker()
- Specified by:
getInFlightRequestBreakerin interfaceTransport
-
registerRequestHandler
public <Request extends TransportRequest> void registerRequestHandler(RequestHandlerRegistry<Request> reg)
Description copied from interface:TransportRegisters a new request handler- Specified by:
registerRequestHandlerin interfaceTransport
-
nodeConnected
public boolean nodeConnected(DiscoveryNode node)
Description copied from interface:TransportReturnstrueif the node is connected.- Specified by:
nodeConnectedin interfaceTransport
-
connectToNode
public void connectToNode(DiscoveryNode node, ConnectionProfile connectionProfile, CheckedBiConsumer<Transport.Connection,ConnectionProfile,java.io.IOException> connectionValidator) throws ConnectTransportException
Description copied from interface:TransportConnects to a node with the given connection profile. If the node is already connected this method has no effect. Once a successful is established, it can be validated before being exposed.- Specified by:
connectToNodein interfaceTransport- Throws:
ConnectTransportException
-
resolveConnectionProfile
protected ConnectionProfile resolveConnectionProfile(ConnectionProfile connectionProfile)
-
openConnection
public final TcpTransport.NodeChannels openConnection(DiscoveryNode node, ConnectionProfile connectionProfile)
Description copied from interface:TransportOpens a new connection to the given node and returns it. In contrast toTransport.connectToNode(DiscoveryNode, ConnectionProfile, CheckedBiConsumer)the returned connection is not managed by the transport implementation. This connection must be closed once it's not needed anymore. This connection type can be used to execute a handshake between two nodes before the node will be published viaTransport.connectToNode(DiscoveryNode, ConnectionProfile, CheckedBiConsumer).- Specified by:
openConnectionin interfaceTransport
-
getConnection
public TcpTransport.NodeChannels getConnection(DiscoveryNode node)
Description copied from interface:TransportReturns a connection for the given node if the node is connected. Connections returned from this method must not be closed. The lifecycle of this connection is maintained by the Transport implementation.- Specified by:
getConnectionin interfaceTransport- See Also:
Transport.connectToNode(DiscoveryNode, ConnectionProfile, CheckedBiConsumer)
-
disconnectFromNode
public void disconnectFromNode(DiscoveryNode node)
Description copied from interface:TransportDisconnected from the given node, if not connected, will do nothing.- Specified by:
disconnectFromNodein interfaceTransport
-
getCurrentVersion
protected Version getCurrentVersion()
-
boundAddress
public BoundTransportAddress boundAddress()
Description copied from interface:TransportThe address the transport is bound on.- Specified by:
boundAddressin interfaceTransport
-
profileBoundAddresses
public java.util.Map<java.lang.String,BoundTransportAddress> profileBoundAddresses()
Description copied from interface:TransportFurther profile bound addresses- Specified by:
profileBoundAddressesin interfaceTransport- Returns:
nulliff profiles are unsupported, otherwise a map with name of profile and its bound transport address
-
getLocalAddresses
public java.util.List<java.lang.String> getLocalAddresses()
Description copied from interface:TransportReturns a list of all local adresses for this transport- Specified by:
getLocalAddressesin interfaceTransport
-
bindServer
protected void bindServer(TcpTransport.ProfileSettings profileSettings)
-
bindToPort
protected java.net.InetSocketAddress bindToPort(java.lang.String name, java.net.InetAddress hostAddress, java.lang.String port)
-
resolvePublishPort
public static int resolvePublishPort(TcpTransport.ProfileSettings profileSettings, java.util.List<java.net.InetSocketAddress> boundAddresses, java.net.InetAddress publishInetAddress)
-
addressesFromString
public TransportAddress[] addressesFromString(java.lang.String address, int perAddressLimit) throws java.net.UnknownHostException
Description copied from interface:TransportReturns an address from its string representation.- Specified by:
addressesFromStringin interfaceTransport- Throws:
java.net.UnknownHostException
-
doClose
protected final void doClose()
- Specified by:
doClosein classAbstractLifecycleComponent
-
doStop
protected final void doStop()
- Specified by:
doStopin classAbstractLifecycleComponent
-
onException
protected void onException(TcpChannel channel, java.lang.Exception e)
-
serverAcceptedChannel
protected void serverAcceptedChannel(TcpChannel channel)
-
bind
protected abstract TcpChannel bind(java.lang.String name, java.net.InetSocketAddress address) throws java.io.IOException
Binds to the givenInetSocketAddress- Parameters:
name- the profile nameaddress- the address to bind to- Throws:
java.io.IOException
-
initiateChannel
protected abstract TcpChannel initiateChannel(DiscoveryNode node, TimeValue connectTimeout, ActionListener<java.lang.Void> connectListener) throws java.io.IOException
Initiate a single tcp socket channel to a node. Implementations do not have to observe the connectTimeout. It is provided for synchronous connection implementations.- Parameters:
node- the nodeconnectTimeout- the connection timeoutconnectListener- listener to be called when connection complete- Returns:
- the pending connection
- Throws:
java.io.IOException- if an I/O exception occurs while opening the channel
-
stopInternal
protected void stopInternal()
Called to tear down internal resources
-
canCompress
public boolean canCompress(TransportRequest request)
-
sendErrorResponse
public void sendErrorResponse(Version nodeVersion, java.util.Set<java.lang.String> features, TcpChannel channel, java.lang.Exception error, long requestId, java.lang.String action) throws java.io.IOException
Sends back an error response to the caller via the given channel- Parameters:
nodeVersion- the caller node versionfeatures- the caller featureschannel- the channel to send the response toerror- the error to returnrequestId- the request ID this response replies toaction- the action this response replies to- Throws:
java.io.IOException
-
sendResponse
public void sendResponse(Version nodeVersion, java.util.Set<java.lang.String> features, TcpChannel channel, TransportResponse response, long requestId, java.lang.String action, TransportResponseOptions options) throws java.io.IOException
Sends the response to the given channel. This method should be used to sendTransportResponseobjects back to the caller.- Throws:
java.io.IOException- See Also:
for sending back errors to the caller
-
validateMessageHeader
public static boolean validateMessageHeader(BytesReference buffer) throws java.io.IOException
Validates the first N bytes of the message header and returnsfalseif the message is a ping message and has no payload ie. isn't a real user level message.- Throws:
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
-
messageReceived
public final void messageReceived(BytesReference reference, TcpChannel channel, java.lang.String profileName, java.net.InetSocketAddress remoteAddress, int messageLengthBytes) throws java.io.IOException
This method handles the message receive part for both request and responses- Throws:
java.io.IOException
-
handleRequest
protected java.lang.String handleRequest(TcpChannel channel, java.lang.String profileName, StreamInput stream, long requestId, int messageLengthBytes, Version version, java.net.InetSocketAddress remoteAddress, byte status) throws java.io.IOException
- Throws:
java.io.IOException
-
validateRequest
protected void validateRequest(StreamInput stream, long requestId, java.lang.String action) throws java.io.IOException
- Throws:
java.io.IOException
-
executeHandshake
protected Version executeHandshake(DiscoveryNode node, TcpChannel channel, TimeValue timeout) throws java.io.IOException, java.lang.InterruptedException
- Throws:
java.io.IOExceptionjava.lang.InterruptedException
-
ensureOpen
protected final void ensureOpen()
Ensures this transport is still started / open- Throws:
java.lang.IllegalStateException- if the transport is not started / open
-
getStats
public final TransportStats getStats()
-
getProfileSettings
public static java.util.Set<TcpTransport.ProfileSettings> getProfileSettings(Settings settings)
Returns all profile settings for the given settings object
-
getResponseHandlers
public final Transport.ResponseHandlers getResponseHandlers()
- Specified by:
getResponseHandlersin interfaceTransport
-
getRequestHandler
public final RequestHandlerRegistry getRequestHandler(java.lang.String action)
Description copied from interface:TransportReturns the registered request handler registry for the given action ornullif it's not registered- Specified by:
getRequestHandlerin interfaceTransport- Parameters:
action- the action to look up
-
-