[
https://issues.apache.org/jira/browse/AMQ-6956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16468933#comment-16468933
]
Gary Tully edited comment on AMQ-6956 at 5/9/18 3:43 PM:
---------------------------------------------------------
I think that is just a race between the client sending its shutdown command and
then closing its end of the socket and the broker reacting to that shutdown
command and getting to close it's end of the socket first.
It is like the broker is reacting too fast which is positive.
5.x does the close async in case it will block, but Artemis is already non
blocking so it can happen quickly in the normal case.
was (Author: gtully):
I think that is just a race between the client sending its shutdown command and
then closing its end of the socket and the broker reacting to that shutdown
command and getting to close it's end of the socket first.
It is like the broker is reacting to fast which is positive.
5.x does the close async in case it will block, but Artemis is already non
blocking so it can happen quickly in the normal case.
> java.net.SocketException: Connection closed by remote host thrown during
> ActiveMQConnection#close()
> ---------------------------------------------------------------------------------------------------
>
> Key: AMQ-6956
> URL: https://issues.apache.org/jira/browse/AMQ-6956
> Project: ActiveMQ
> Issue Type: Bug
> Components: JMS client
> Affects Versions: 5.16.0
> Reporter: Jiri Daněk
> Priority: Major
>
> When I connect and disconnect from a broker using the activemq-client,
> sometimes I get the exception below. ssl:// is used. The exception appears
> when the client is disconnecting.
> The broker in this case is the current snapshot of ActiveMQ Artemis.
> Good test for reproducing is
> {{org.apache.activemq.artemis.tests.integration.security.SecurityTest#testJAASSecurityManagerAuthenticationWithCertsAndOpenWire}}.
> I saw it in conjunction with the {{flush()}} exception from Netty, discussed
> on ARTEMIS-1804. It turns out the flush{} exception is probably unrelated to
> this one, because it appeared in the server log every time and seems harmless.
> The exception below appears on the client in about 1 % of runs of the
> aforementioned tests (so it must be run in a loop to see this happen). For
> some reason, this error appears to me more often on Travis CI (linked from
> the Artemis bug)
> The exception is
> {noformat}
> javax.jms.JMSException: Connection closed by remote host
> at
> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:72)
> at
> org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1310)
> at
> org.apache.activemq.ActiveMQConnection.close(ActiveMQConnection.java:696)
> at com.redhat.mqe.lib.CoreClient.close(CoreClient.java:302)
> at com.redhat.mqe.lib.CoreClient.closeConnObjects(CoreClient.java:295)
> at com.redhat.mqe.lib.SenderClient.startClient(SenderClient.java:156)
> at com.redhat.mqe.lib.Main.main(Main.java:50)
> at com.redhat.mqe.aoc.Main.main(Main.java:74)
> at AocMainTest.main(MainTest.kt:113)
> at
> AbstractMainTest$sendSingleMessageAllTrustingTls$1.invoke(AbstractMainTest.kt:404)
> at
> AbstractMainTest$sendSingleMessageAllTrustingTls$1.invoke(AbstractMainTest.kt:75)
> at AbstractMainTestKt.assertNoSystemExit(AbstractMainTest.kt:66)
> at
> AbstractMainTest.sendSingleMessageAllTrustingTls(AbstractMainTest.kt:398)
> at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at
> org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:436)
> at
> org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
> at
> org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:170)
> at
> org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
> at
> org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:166)
> at
> org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:113)
> at
> org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:58)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:112)
> at
> org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:120)
> at
> java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
> at
> java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
> at java.util.Iterator.forEachRemaining(Iterator.java:116)
> at
> java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
> at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
> at
> java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
> at
> java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
> at
> java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
> at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> at
> java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:120)
> at
> org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:120)
> at
> java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
> at
> java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
> at java.util.Iterator.forEachRemaining(Iterator.java:116)
> at
> java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
> at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
> at
> java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
> at
> java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
> at
> java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
> at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> at
> java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:120)
> at
> org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:55)
> at
> org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
> at
> org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
> at
> org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
> at
> org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
> at
> com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:74)
> at
> com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:67)
> at
> com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
> at
> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
> Caused by: java.net.SocketException: Connection closed by remote host
> at sun.security.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1565)
> at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:124)
> at
> org.apache.activemq.transport.tcp.TcpBufferedOutputStream.flush(TcpBufferedOutputStream.java:115)
> at java.io.DataOutputStream.flush(DataOutputStream.java:123)
> at
> org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:194)
> at
> org.apache.activemq.transport.AbstractInactivityMonitor.doOnewaySend(AbstractInactivityMonitor.java:335)
> at
> org.apache.activemq.transport.AbstractInactivityMonitor.oneway(AbstractInactivityMonitor.java:317)
> at
> org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:94)
> at
> org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:116)
> at
> org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68)
> at
> org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
> at
> org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1308)
> ... 64 more
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)