Tomas Pavelka created AMQ-6937:
----------------------------------
Summary: Recycling TCP/IP stack on z/OS causes an infinite error
loop in transport server
Key: AMQ-6937
URL: https://issues.apache.org/jira/browse/AMQ-6937
Project: ActiveMQ
Issue Type: Bug
Components: Broker
Affects Versions: 5.15.3
Reporter: Tomas Pavelka
The ActiveMQ transport servers (e.g. TcpTransportServer) run the socket accept
(java.net.ServerSocket#accept) in an infinite loop. The accept call can
repeatedly fail with an exception spinning the CPU at full speed an filling up
logs quickly.
Here is an example of an exception that gets repeated indefinitely:
java.net.SocketException: EDC5122I Input/output error. (Accept failed)
at java.net.ServerSocket.implAccept(ServerSocket.java:623)
at java.net.ServerSocket.accept(ServerSocket.java:582)
at
org.apache.activemq.transport.tcp.TcpTransportServer.run(TcpTransportServer.java:351)
at java.lang.Thread.run(Thread.java:785)
This is a common problem on z/OS because the pattern of running accept in a
loop is used in many open source projects. For example, here is the same issue
in Derby:
https://issues.apache.org/jira/browse/DERBY-5347
And here in Jetty:
[https://github.com/eclipse/jetty.project/issues/283]
Whenever the problem appears the socket becomes unusable. Would it be possible
for ActiveMQ to allow to insert a custom
org.apache.activemq.transport.TransportAcceptListener that would detect the
problem and do a re-bind on the socket?
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)