activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "james strachan (JIRA)" <j...@activemq.org>
Subject [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
Date Fri, 17 Mar 2006 13:18:25 GMT
     [ 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


Mime
View raw message