Mikhail Petrov created IGNITE-28983:
---------------------------------------
Summary: [Thin client] Thin client hangs if the remote address
stops responding during the SSL handshake without closing the socket
Key: IGNITE-28983
URL: https://issues.apache.org/jira/browse/IGNITE-28983
Project: Ignite
Issue Type: Task
Reporter: Mikhail Petrov
Currently, the thin client waits indefinitely for SSL handshake completion
without any timeout (see
org.apache.ignite.internal.client.thin.io.gridnioserver.GridNioClientConnectionMultiplexer#open).
If the remote endpoint stops responding during the SSL handshake but does not
close the socket, the thin client hangs indefinitely with the following stack
trace:
{code:java}
"scheduling-1" #76 prio=5 os_prio=0 cpu=79.59ms elapsed=614.80s tid=...
nid=0x71 waiting on condition
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
at
java.util.concurrent.locks.LockSupport.park([email protected]/LockSupport.java:341)
at
org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:181)
at
org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:144)
at
org.apache.ignite.internal.client.thin.io.gridnioserver.GridNioClientConnectionMultiplexer.open(GridNioClientConnectionMultiplexer.java:190)
at
org.apache.ignite.internal.client.thin.TcpClientChannel.<init>(TcpClientChannel.java:210)
at
org.apache.ignite.internal.client.thin.ReliableChannel$ClientChannelHolder.getOrCreateChannel(ReliableChannel.java:1137)
- locked <0x00000000c4360d78> (a
org.apache.ignite.internal.client.thin.ReliableChannel$ClientChannelHolder)
...
at
org.apache.ignite.internal.client.thin.ReliableChannel.affinityService(ReliableChannel.java:412)
at
org.apache.ignite.internal.client.thin.TcpClientCache.cacheSingleKeyOperation(TcpClientCache.java:1486)
at
org.apache.ignite.internal.client.thin.TcpClientCache.containsKey(TcpClientCache.java:235)
{code}
This situation may occur when thin client traffic is proxied by a container or
pod, for example:
{code:java}
thin client -> inbound socket | poxy | outbound сокет -> server
{code}
If only the `outbound socket -> server` closed while the proxy keeps the
inbound socket open, the client never receives a socket close event and
continues waiting indefinitely for the SSL handshake to complete.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)