[ https://issues.apache.org/jira/browse/GEODE-10119?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Owen Nichols closed GEODE-10119. -------------------------------- > Handle SslSocket throwing SSLHandshakeException on JDK 17 > --------------------------------------------------------- > > Key: GEODE-10119 > URL: https://issues.apache.org/jira/browse/GEODE-10119 > Project: Geode > Issue Type: Bug > Components: core, tests > Affects Versions: 1.15.0 > Reporter: Dale Emery > Assignee: Dale Emery > Priority: Major > Labels: Java17, needsTriage, pull-request-available > Fix For: 1.15.0 > > > In some circumstances, on JDK 17 {{SslSocket}} throws > {{SSLHandshakeException}}, where on JDK 8 and 11 it would throw > {{SocketException}}. > {{SocketCreator.configureClientSSLSocket()}} handles > {{SSLHandshakeException}} and {{SocketException}} differently: > - It catches {{SSLHandshakeException}}, logs it as fatal, and rethrows it. > - It does not catch {{SocketException}}. > The new "fatal" log entry on JDK 17 causes > {{WANSSLDUnitTest.testSenderSSLReceiverNoSSL()}} to fail. > This may be simply a test issue. If so, the fix is to configure the test to > ignore this new exception. > But possibly the product's error handling needs to be changed to account for > {{SslSocket}} throwing {{SSLHandshakeException}}. > Example {{WANSSLDUnitTest.testSenderSSLReceiverNoSSL()}} test failure on JDK > 17: > {noformat} > java.lang.AssertionError: Suspicious strings were written to the log during > this run. > Fix the strings or use IgnoredException.addIgnoredException to ignore. > ----------------------------------------------------------------------- > Found suspect string in 'dunit_suspect-vm4.log' at line 548 > [fatal 2022/03/10 01:29:50.162 UTC <Event Processor for GatewaySender_ln> > tid=144] Problem forming SSL connection to > dale-dunit.c.apachegeode-ci.internal/10.128.0.33[28386]. > javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake > at > java.base/sun.security.ssl.SSLSocketImpl.handleEOF(SSLSocketImpl.java:1709) > at > java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1508) > at > java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1415) > at > java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:450) > at > java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:421) > at > org.apache.geode.internal.net.SocketCreator.configureClientSSLSocket(SocketCreator.java:591) > at > org.apache.geode.internal.net.SCAdvancedSocketCreator.connect(SCAdvancedSocketCreator.java:83) > at > org.apache.geode.distributed.internal.tcpserver.TcpSocketCreatorImpl.connect(TcpSocketCreatorImpl.java:59) > at > org.apache.geode.distributed.internal.tcpserver.ClientSocketCreatorImpl.connect(ClientSocketCreatorImpl.java:54) > at > org.apache.geode.cache.client.internal.ConnectionImpl.connect(ConnectionImpl.java:94) > at > org.apache.geode.cache.client.internal.ConnectionConnector.connectClientToServer(ConnectionConnector.java:75) > at > org.apache.geode.cache.client.internal.ConnectionFactoryImpl.createClientToServerConnection(ConnectionFactoryImpl.java:120) > at > org.apache.geode.cache.client.internal.ConnectionFactoryImpl.createClientToServerConnection(ConnectionFactoryImpl.java:243) > at > org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.createPooledConnection(ConnectionManagerImpl.java:196) > at > org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.createPooledConnection(ConnectionManagerImpl.java:190) > at > org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.borrowConnection(ConnectionManagerImpl.java:282) > at > org.apache.geode.cache.client.internal.PoolImpl.acquireConnection(PoolImpl.java:940) > at > org.apache.geode.cache.wan.internal.GatewaySenderEventRemoteDispatcher.initializeConnection(GatewaySenderEventRemoteDispatcher.java:481) > at > org.apache.geode.cache.wan.internal.GatewaySenderEventRemoteDispatcher.<init>(GatewaySenderEventRemoteDispatcher.java:105) > at > org.apache.geode.cache.wan.internal.serial.RemoteSerialGatewaySenderEventProcessor.initializeEventDispatcher(RemoteSerialGatewaySenderEventProcessor.java:45) > at > org.apache.geode.internal.cache.wan.AbstractGatewaySenderEventProcessor.setRunningStatus(AbstractGatewaySenderEventProcessor.java:1107) > at > org.apache.geode.internal.cache.wan.serial.SerialGatewaySenderEventProcessor.run(SerialGatewaySenderEventProcessor.java:195) > Suppressed: java.net.SocketException: Broken pipe > at > java.base/sun.nio.ch.NioSocketImpl.implWrite(NioSocketImpl.java:420) > at > java.base/sun.nio.ch.NioSocketImpl.write(NioSocketImpl.java:440) > at > java.base/sun.nio.ch.NioSocketImpl$2.write(NioSocketImpl.java:826) > at > java.base/java.net.Socket$SocketOutputStream.write(Socket.java:1035) > at > java.base/sun.security.ssl.SSLSocketOutputRecord.encodeAlert(SSLSocketOutputRecord.java:81) > at > java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:407) > at > java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:314) > at > java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:462) > ... 18 more > Caused by: java.io.EOFException: SSL peer shut down incorrectly > at > java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:483) > at > java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) > at > java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:160) > at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:111) > at > java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1500) > ... 20 more > ----------------------------------------------------------------------- > Found suspect string in 'dunit_suspect-vm4.log' at line 679 > [fatal 2022/03/10 01:29:52.150 UTC <Event Processor for GatewaySender_ln> > tid=144] Problem forming SSL connection to > dale-dunit.c.apachegeode-ci.internal/10.128.0.33[28386]. > javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake > at > java.base/sun.security.ssl.SSLSocketImpl.handleEOF(SSLSocketImpl.java:1709) > at > java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1508) > at > java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1415) > at > java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:450) > at > java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:421) > at > org.apache.geode.internal.net.SocketCreator.configureClientSSLSocket(SocketCreator.java:591) > at > org.apache.geode.internal.net.SCAdvancedSocketCreator.connect(SCAdvancedSocketCreator.java:83) > at > org.apache.geode.distributed.internal.tcpserver.TcpSocketCreatorImpl.connect(TcpSocketCreatorImpl.java:59) > at > org.apache.geode.distributed.internal.tcpserver.ClientSocketCreatorImpl.connect(ClientSocketCreatorImpl.java:54) > at > org.apache.geode.cache.client.internal.ConnectionImpl.connect(ConnectionImpl.java:94) > at > org.apache.geode.cache.client.internal.ConnectionConnector.connectClientToServer(ConnectionConnector.java:75) > at > org.apache.geode.cache.client.internal.ConnectionFactoryImpl.createClientToServerConnection(ConnectionFactoryImpl.java:120) > at > org.apache.geode.cache.client.internal.ConnectionFactoryImpl.createClientToServerConnection(ConnectionFactoryImpl.java:243) > at > org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.createPooledConnection(ConnectionManagerImpl.java:196) > at > org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.createPooledConnection(ConnectionManagerImpl.java:190) > at > org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.borrowConnection(ConnectionManagerImpl.java:282) > at > org.apache.geode.cache.client.internal.PoolImpl.acquireConnection(PoolImpl.java:940) > at > org.apache.geode.cache.wan.internal.GatewaySenderEventRemoteDispatcher.initializeConnection(GatewaySenderEventRemoteDispatcher.java:481) > at > org.apache.geode.cache.wan.internal.GatewaySenderEventRemoteDispatcher.getConnection(GatewaySenderEventRemoteDispatcher.java:336) > at > org.apache.geode.cache.wan.internal.GatewaySenderEventRemoteDispatcher._dispatchBatch(GatewaySenderEventRemoteDispatcher.java:204) > at > org.apache.geode.cache.wan.internal.GatewaySenderEventRemoteDispatcher.dispatchBatch(GatewaySenderEventRemoteDispatcher.java:171) > at > org.apache.geode.internal.cache.wan.AbstractGatewaySenderEventProcessor.processQueue(AbstractGatewaySenderEventProcessor.java:636) > at > org.apache.geode.internal.cache.wan.serial.SerialGatewaySenderEventProcessor.run(SerialGatewaySenderEventProcessor.java:222) > Suppressed: java.net.SocketException: Broken pipe > at > java.base/sun.nio.ch.NioSocketImpl.implWrite(NioSocketImpl.java:420) > at > java.base/sun.nio.ch.NioSocketImpl.write(NioSocketImpl.java:440) > at > java.base/sun.nio.ch.NioSocketImpl$2.write(NioSocketImpl.java:826) > at > java.base/java.net.Socket$SocketOutputStream.write(Socket.java:1035) > at > java.base/sun.security.ssl.SSLSocketOutputRecord.encodeAlert(SSLSocketOutputRecord.java:81) > at > java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:407) > at > java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:314) > at > java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:462) > ... 19 more > Caused by: java.io.EOFException: SSL peer shut down incorrectly > at > java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:483) > at > java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) > at > java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:160) > at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:111) > at > java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1500) > ... 21 more > at org.junit.Assert.fail(Assert.java:89) > at > org.apache.geode.test.dunit.internal.DUnitLauncher.closeAndCheckForSuspects(DUnitLauncher.java:422) > at > org.apache.geode.test.dunit.internal.DUnitLauncher.closeAndCheckForSuspects(DUnitLauncher.java:438) > at > org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase.cleanupAllVms(JUnit4DistributedTestCase.java:551) > at > org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase.doTearDownDistributedTestCase(JUnit4DistributedTestCase.java:498) > at > org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase.tearDownDistributedTestCase(JUnit4DistributedTestCase.java:481) > at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) > at > jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:568) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) > at > org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46) > at > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33) > at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61) > at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) > at > org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63) > at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) > at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) > at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) > at org.junit.runners.ParentRunner.run(ParentRunner.java:413) > at org.junit.runner.JUnitCore.run(JUnitCore.java:137) > at org.junit.runner.JUnitCore.run(JUnitCore.java:115) > at > org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:42) > at > org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80) > at > org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:72) > at > org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) > at > org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) > at > org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) > at > org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) > at > org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) > at > org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) > at > org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) > at > org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99) > at > org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79) > at > org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75) > at > org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61) > at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) > at > jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:568) > at > org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) > at > org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) > at > org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) > at > org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) > at jdk.proxy1.$Proxy2.stop(Unknown Source) > at > org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:133) > at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) > at > jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:568) > at > org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) > at > org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) > at > org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) > at > org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) > at > org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) > at > org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) > at > org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) > at > org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) > at java.lang.Thread.run(Thread.java:833) > {noformat} -- This message was sent by Atlassian Jira (v8.20.7#820007)