[ 
https://issues.apache.org/jira/browse/IGNITE-28983?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mikhail Petrov updated IGNITE-28983:
------------------------------------
    Description: 
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 socket -> server
{code}

If only the `outbound socket -> server` sockets are 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.



  was:
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` sockets are 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.




> [Thin client] Thin client hangs if the remote endpoint 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
>            Assignee: Mikhail Petrov
>            Priority: Major
>              Labels: ise
>             Fix For: 2.19
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> 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 socket -> server
> {code}
> If only the `outbound socket -> server` sockets are 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)

Reply via email to