[ 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:  [EMAIL PROTECTED] 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

Reply via email to