You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "james strachan (JIRA)" <ji...@activemq.org> on 2006/03/17 14:18:25 UTC

[jira] Resolved: (AMQ-600) Broker will not release a persistant clientId if a network connection is broken then restored at the TCP layer from a remote client

     [ http://jira.activemq.org/jira//browse/AMQ-600?page=all ]
     
james strachan resolved AMQ-600:
--------------------------------

     Resolution: Fixed
    Fix Version: 4.0 M5

This should be now fixed in SVN HEAD - could you confirm using tomorrows SNAPSHOT build that your issues is resolved now please?

Basically the code was catching IOExceptions and treating them as service exceptions (e.g. security erorrs etc) and trying to send an error response back, rather than just disposing the connection and so freeing up the clientID.

Let us know if this issue is not fixed and we can reopen this issue.

> Broker will not release a persistant clientId if a network connection is broken then restored at the TCP layer from a remote client
> -----------------------------------------------------------------------------------------------------------------------------------
>
>          Key: AMQ-600
>          URL: http://jira.activemq.org/jira//browse/AMQ-600
>      Project: ActiveMQ
>         Type: Bug

>   Components: Broker
>     Versions: 4.0 M4
>  Environment: Linux 2.6.12 (Mandriva), J2SDK 1.5_06, Enterprise-class SMP servers with fast RAID, 2GB RAM, GigE
>     Reporter: John Gorkos
>     Assignee: james strachan
>      Fix For: 4.0 M5

>
>
> During long-term operation, a remote, publish-only client with a TCP socket connection to the JMS broker will occasionally be disconnected at a low level (i.e. below the application level where JMS runs).  When this occurs, the JMS broker throws an exception indicating a broken socket, but does not release the clientID of the client to allow for reconnects.  The following stack traces should demonstrate this failure mode:
>  INFO  Service                        - Async error occurred: java.net.SocketException: Connection reset
> java.net.SocketException: Connection reset
>         at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
>         at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>         at org.apache.activemq.transport.tcp.TcpBufferedOutputStream.flush(TcpBufferedOutputStream.java:108)
>         at java.io.DataOutputStream.flush(DataOutputStream.java:106)
>         at org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:118)
>         at org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:90)
>         at org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:65)
>         at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
>         at org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:54)
>         at org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:212)
>         at org.apache.activemq.broker.AbstractConnection.dispatchSync(AbstractConnection.java:517)
>         at org.apache.activemq.broker.AbstractConnection.dispatchAsync(AbstractConnection.java:535)
>         at org.apache.activemq.broker.region.TopicSubscription.dispatch(TopicSubscription.java:142)
>         at org.apache.activemq.broker.region.TopicSubscription.add(TopicSubscription.java:54)
>         at org.apache.activemq.broker.region.policy.SimpleDispatchPolicy.dispatch(SimpleDispatchPolicy.java:50)
>         at org.apache.activemq.broker.region.Topic.dispatch(Topic.java:365)
>         at org.apache.activemq.broker.region.Topic.send(Topic.java:247)
>         at org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:195)
>         at org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:312)
>         at org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:192)
>         at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:107)
>         at org.apache.activemq.broker.CompositeDestinationBroker.send(CompositeDestinationBroker.java:97)
>         at org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:119)
>         at org.apache.activemq.broker.AbstractConnection.processMessage(AbstractConnection.java:336)
>         at org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:508)
>         at org.apache.activemq.broker.AbstractConnection.service(AbstractConnection.java:189)
>         at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:60)
>         at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:82)
>         at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
>         at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:105)
>         at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:77)
>         at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:136)
>         at java.lang.Thread.run(Thread.java:595)
> ACTIVEMQ_HOME: /opt/activemq
> Loading message broker from: xbean:activemq.xml
> INFO  BrokerService                  - ActiveMQ 4.0-M4 JMS Message Broker (localhost) is starting
> INFO  BrokerService                  - For help or more information please see: http://www.logicblaze.com
> INFO  JDBCPersistenceAdapter         - Database driver recognized: [apache_derby_embedded_jdbc_driver]
> INFO  JournalPersistenceAdapter      - Journal Recovery Started from: Active Journal: using 5 x 20.0 Megs at: ../activemq-data/journal
> INFO  JournalPersistenceAdapter      - Journal Recovered: 0 message(s) in transactions recovered.
> INFO  TransportServerThreadSupport   - Listening for connections at: tcp://s1:61616
> INFO  TransportConnector             - Accepting connection on: tcp://s1:61616
> WARN  MulticastDiscoveryAgent        - brokerName not set
> INFO  TransportServerThreadSupport   - Listening for connections at: tcp://s1:61617?wireFormat=stomp
> INFO  TransportConnector             - Accepting connection on: tcp://s1:61617?wireFormat=stomp
> INFO  BrokerService                  - ActiveMQ JMS Message Broker (localhost) started
> INFO  NetworkConnector               - Establishing network connection between vm://localhost?network=true and null at failover:tcp://s1:61616
> INFO  VMTransportFactory             - binding to broker: localhost
> INFO  TransportConnector             - Accepting connection on: vm://localhost
> INFO  DemandForwardingBridge         - Starting a network connection between vm://localhost#0 and unconnected has been established.
> INFO  ManagementContext              - JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
> INFO  DemandForwardingBridge         - Disconnecting loop back connection.
> INFO  Service                        - Sync error occurred: javax.jms.InvalidClientIDException: Broker: localhost - Client: TESTClient already connected
> javax.jms.InvalidClientIDException: Broker: localhost - Client: TESTClient already connected
>         at org.apache.activemq.broker.region.RegionBroker.addConnection(RegionBroker.java:153)
>         at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:63)
>         at org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:66)
>         at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:63)
>         at org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:75)
>         at org.apache.activemq.broker.AbstractConnection.processAddConnection(AbstractConnection.java:478)
>         at org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:82)
>         at org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:106)
>         at org.apache.activemq.broker.AbstractConnection.service(AbstractConnection.java:189)
>         at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:60)
>         at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:82)
>         at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
>         at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:105)
>         at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:77)
>         at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:136)
>         at java.lang.Thread.run(Thread.java:595)
> INFO  Service                        - Sync error occurred: javax.jms.InvalidClientIDException: Broker: localhost - Client: TESTClient already connected
> javax.jms.InvalidClientIDException: Broker: localhost - Client: TESTClient already connected
>         at org.apache.activemq.broker.region.RegionBroker.addConnection(RegionBroker.java:153)
>         at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:63)
>         at org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:66)
>         at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:63)
>         at org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:75)
>         at org.apache.activemq.broker.AbstractConnection.processAddConnection(AbstractConnection.java:478)
>         at org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:82)
>         at org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:106)
>         at org.apache.activemq.broker.AbstractConnection.service(AbstractConnection.java:189)
>         at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:60)
>         at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:82)
>         at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
>         at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:105)
>         at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:77)
>         at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:136)
>         at java.lang.Thread.run(Thread.java:595)
> INFO  VMTransportFactory             - Shutting down VM connectors for broker: localhost
> INFO  VMTransportFactory             - Shutting down VM connectors for broker: localhost
> INFO  Service                        - Async error occurred: java.io.EOFException: Cannot write to the stream any more it has already been closed
> java.io.EOFException: Cannot write to the stream any more it has already been closed
>         at org.apache.activemq.transport.tcp.TcpBufferedOutputStream.checkClosed(TcpBufferedOutputStream.java:131)
>         at org.apache.activemq.transport.tcp.TcpBufferedOutputStream.write(TcpBufferedOutputStream.java:69)
>         at java.io.DataOutputStream.writeInt(DataOutputStream.java:180)
>         at org.apache.activemq.openwire.OpenWireFormat.marshal(OpenWireFormat.java:169)
>         at org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:117)
>         at org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:90)
>         at org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:65)
>         at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
>         at org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:54)
>         at org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:212)
>         at org.apache.activemq.broker.AbstractConnection.dispatchSync(AbstractConnection.java:517)
>         at org.apache.activemq.broker.AbstractConnection.dispatchAsync(AbstractConnection.java:535)
>         at org.apache.activemq.broker.region.TopicSubscription.dispatch(TopicSubscription.java:142)
>         at org.apache.activemq.broker.region.TopicSubscription.add(TopicSubscription.java:54)
>         at org.apache.activemq.broker.region.policy.SimpleDispatchPolicy.dispatch(SimpleDispatchPolicy.java:50)
>         at org.apache.activemq.broker.region.Topic.dispatch(Topic.java:365)
>         at org.apache.activemq.broker.region.Topic.send(Topic.java:247)
>         at org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:195)
>         at org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:312)
>         at org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:192)
>         at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:107)
>         at org.apache.activemq.broker.CompositeDestinationBroker.send(CompositeDestinationBroker.java:97)
>         at org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:119)
>         at org.apache.activemq.broker.AbstractConnection.processMessage(AbstractConnection.java:336)
>         at org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:508)
>         at org.apache.activemq.broker.AbstractConnection.service(AbstractConnection.java:189)
>         at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:60)
>         at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:82)
>         at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
>         at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:105)
>         at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:77)
>         at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:136)
>         at java.lang.Thread.run(Thread.java:595)
> Reverting to "anonymous" clients allows the client to create a new connection, but further persistant connections from the initial clientId cannot be made until the broker is restarted.
> Please contact via email:  johng@amdswireless.com for additional information, if needed.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.activemq.org/jira//secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira