[ 
https://issues.apache.org/jira/browse/IGNITE-11298?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16848825#comment-16848825
 ] 

Vitaliy Biryukov commented on IGNITE-11298:
-------------------------------------------

[~ilyak]

I've checked on my Ubuntu pc.

It seems like we are dealing with a [known 
bug|https://bugs.openjdk.java.net/browse/JDK-8219658] related to Half-Close 
Policy. It's affects only TcpDiscoverySpi (checked only on ubuntu).
 This bag cause deadlock between SslSocket.close and inputStream.read. And it 
locks so hard so I have to restart my PC to return my network back to normal.

Thread dump:
{noformat}
"test-runner-#1%tcp.TcpCommunicationSpiFaultyClientTest%" #15 prio=5 os_prio=0 
cpu=2139,72ms elapsed=75,55s tid=0x00007f8ac0815800 nid=0x6422 waiting for 
monitor entry  [0x00007f8a8cee4000]
   java.lang.Thread.State: BLOCKED (on object monitor)
at 
sun.security.ssl.SSLSocketImpl$AppInputStream.deplete(java.base@12.0.1/SSLSocketImpl.java:921)
- waiting to lock <0x000000070791c5e8> (a 
sun.security.ssl.SSLSocketImpl$AppInputStream)
at 
sun.security.ssl.SSLSocketImpl.bruteForceCloseInput(java.base@12.0.1/SSLSocketImpl.java:615)
at 
sun.security.ssl.SSLSocketImpl.duplexCloseOutput(java.base@12.0.1/SSLSocketImpl.java:566)
at sun.security.ssl.SSLSocketImpl.close(java.base@12.0.1/SSLSocketImpl.java:479)
at org.apache.ignite.internal.util.IgniteUtils.closeQuiet(IgniteUtils.java:4135)
at 
org.apache.ignite.spi.discovery.tcp.ServerImpl$SocketReader.interrupt(ServerImpl.java:7084)
at org.apache.ignite.internal.util.IgniteUtils.interrupt(IgniteUtils.java:4724)
at org.apache.ignite.spi.discovery.tcp.ServerImpl.spiStop0(ServerImpl.java:510)
at org.apache.ignite.spi.discovery.tcp.ServerImpl.spiStop(ServerImpl.java:442)
at 
org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.spiStop(TcpDiscoverySpi.java:2217)
at 
org.apache.ignite.internal.managers.GridManagerAdapter.stopSpi(GridManagerAdapter.java:330)
at 
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.stop(GridDiscoveryManager.java:1743)
at org.apache.ignite.internal.IgniteKernal.stop0(IgniteKernal.java:2413)
at org.apache.ignite.internal.IgniteKernal.stop(IgniteKernal.java:2285)
at 
org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.stop0(IgnitionEx.java:2574)
- locked <0x0000000707b608a8> (a 
org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance)
at 
org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.stop(IgnitionEx.java:2537)
at org.apache.ignite.internal.IgnitionEx.stop(IgnitionEx.java:330)
at org.apache.ignite.Ignition.stop(Ignition.java:223)
at 
org.apache.ignite.testframework.junits.GridAbstractTest.stopGrid(GridAbstractTest.java:1253)
at 
org.apache.ignite.testframework.junits.GridAbstractTest.stopAllGrids(GridAbstractTest.java:1296)
at 
org.apache.ignite.testframework.junits.GridAbstractTest.stopAllGrids(GridAbstractTest.java:1274)
at 
org.apache.ignite.spi.communication.tcp.TcpCommunicationSpiFaultyClientTest.testFailClient(TcpCommunicationSpiFaultyClientTest.java:284)
at 
org.apache.ignite.spi.communication.tcp.TcpCommunicationSpiFaultyClientTest.testNoServerOnHost(TcpCommunicationSpiFaultyClientTest.java:154)
at 
jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@12.0.1/Native 
Method)
at 
jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@12.0.1/NativeMethodAccessorImpl.java:62)
at 
jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@12.0.1/DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(java.base@12.0.1/Method.java:567)
at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at 
org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:2145)
at java.lang.Thread.run(java.base@12.0.1/Thread.java:835)


"tcp-disco-sock-reader-[31894d88 
127.0.0.1:56645]-#12%tcp.TcpCommunicationSpiFaultyClientTest1%" #114 prio=10 
os_prio=0 cpu=123,49ms elapsed=72,51s tid=0x00007f8a84138800 nid=0x6494 
runnable  [0x00007f89939de000]
   java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(java.base@12.0.1/Native Method)
at 
java.net.SocketInputStream.socketRead(java.base@12.0.1/SocketInputStream.java:115)
at java.net.SocketInputStream.read(java.base@12.0.1/SocketInputStream.java:168)
at java.net.SocketInputStream.read(java.base@12.0.1/SocketInputStream.java:140)
at 
sun.security.ssl.SSLSocketInputRecord.read(java.base@12.0.1/SSLSocketInputRecord.java:448)
at 
sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(java.base@12.0.1/SSLSocketInputRecord.java:68)
at 
sun.security.ssl.SSLSocketImpl.readApplicationRecord(java.base@12.0.1/SSLSocketImpl.java:1132)
at 
sun.security.ssl.SSLSocketImpl$AppInputStream.read(java.base@12.0.1/SSLSocketImpl.java:828)
- locked <0x000000070791c5e8> (a sun.security.ssl.SSLSocketImpl$AppInputStream)
at 
java.io.BufferedInputStream.fill(java.base@12.0.1/BufferedInputStream.java:252)
at 
java.io.BufferedInputStream.read1(java.base@12.0.1/BufferedInputStream.java:292)
at 
java.io.BufferedInputStream.read(java.base@12.0.1/BufferedInputStream.java:351)
- locked <0x000000070791c608> (a java.io.BufferedInputStream)
at 
org.apache.ignite.marshaller.jdk.JdkMarshallerInputStreamWrapper.read(JdkMarshallerInputStreamWrapper.java:53)
at 
java.io.ObjectInputStream$PeekInputStream.read(java.base@12.0.1/ObjectInputStream.java:2745)
at 
java.io.ObjectInputStream$PeekInputStream.readFully(java.base@12.0.1/ObjectInputStream.java:2761)
at 
java.io.ObjectInputStream$BlockDataInputStream.readShort(java.base@12.0.1/ObjectInputStream.java:3258)
at 
java.io.ObjectInputStream.readStreamHeader(java.base@12.0.1/ObjectInputStream.java:873)
at java.io.ObjectInputStream.<init>(java.base@12.0.1/ObjectInputStream.java:350)
at 
org.apache.ignite.marshaller.jdk.JdkMarshallerObjectInputStream.<init>(JdkMarshallerObjectInputStream.java:43)
at 
org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal0(JdkMarshaller.java:139)
at 
org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:93)
at org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:9957)
at 
org.apache.ignite.spi.discovery.tcp.ServerImpl$SocketReader.body(ServerImpl.java:6526)
at org.apache.ignite.spi.IgniteSpiThread.run(IgniteSpiThread.java:61)
{noformat}
As a workaround we can insead of calling Socket.close:
 Call Socket.shotdownOutput - > Socket.shotdownInput - > Socket.close 

So since java 12 is not LTS sould we deal with that bug?
 And if so, should it be fixed in this task?

> TcpCommunicationSpi does not support TLSv1.3
> --------------------------------------------
>
>                 Key: IGNITE-11298
>                 URL: https://issues.apache.org/jira/browse/IGNITE-11298
>             Project: Ignite
>          Issue Type: Bug
>          Components: general
>    Affects Versions: 2.7
>            Reporter: Ilya Kasnacheev
>            Assignee: Vitaliy Biryukov
>            Priority: Major
>              Labels: Java11
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> When started on Java 11 we cannot form a secure cluster - Discovery will 
> happily use the default TLSv1.3 but Communication will fail with its custom 
> SSLEngine-using code.
> Need to fix that.
> Until that, nodes may be salvaged by setProtocol("TLSv1.2") on 
> SslContextFactory, or by system property -Djdk.tls.client.protocols="TLSv1.2"



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to