[ 
https://issues.apache.org/jira/browse/AMQ-2526?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Timothy Bish resolved AMQ-2526.
-------------------------------

       Resolution: Fixed
    Fix Version/s: 5.6.0

Fix applied in trunk, handle the interrupted exception and reset the thread's 
interrupted state.
                
> Questionable processing of interruptions in TcpTransport::doStop
> ----------------------------------------------------------------
>
>                 Key: AMQ-2526
>                 URL: https://issues.apache.org/jira/browse/AMQ-2526
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Transport
>    Affects Versions: 5.2.0, 5.3.0
>            Reporter: Nick
>             Fix For: 5.6.0
>
>         Attachments: Test.java
>
>
> Imagine you are processing a few jobs by a thread pool. A timeout is set for 
> the whole batch. A job should send a JMS message. If the timeout expires 
> before all the jobs are completed the pool will interrupt still running jobs. 
> Most of the time the interruption will be caught and processed deep inside of 
> ActiveMQ TCP transport classes. While I'm not entirely convinced it's a good 
> idea to shut down and reopen the connection to the ActiveMQ server if a 
> client thread is merely interrupted what really seems ugly is:
> 15:12:53,745 ERROR [org.apache.activemq.transport.tcp.TcpTransport] Could not 
> stop service: tcp:///x.x.x.x:61616. Reason: java.lang.InterruptedException
> java.lang.InterruptedException
>       at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1200)
>       at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:245)
>       at 
> org.apache.activemq.transport.tcp.TcpTransport.doStop(TcpTransport.java:482)
>       at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java:69)
>       at 
> org.apache.activemq.transport.tcp.TcpTransport.stop(TcpTransport.java:499)
>       at 
> org.apache.activemq.transport.InactivityMonitor.stop(InactivityMonitor.java:113)
>       at 
> org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
>       at 
> org.apache.activemq.transport.WireFormatNegotiator.stop(WireFormatNegotiator.java:87)
>       at 
> org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
>       at 
> org.apache.activemq.transport.failover.FailoverTransport.handleTransportFailure(FailoverTransport.java:201)
>       at 
> org.apache.activemq.transport.failover.FailoverTransport.oneway(FailoverTransport.java:471)
>       at 
> org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40)
>       at 
> org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
>       at 
> org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1214)
>       at 
> org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1208)
>       at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1643)
>       at 
> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:227)
>       at 
> org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:241)
> and the reason for it is that the await call on the CountDownLatch in 
> TcpTransport::doStop will throws an InterruptedException if the calling 
> thread is already interrupted. No attempt is made (in both 5.2 or 5.3) to 
> gracefully process InterruptedException, the exception itself is logged as 
> ERROR with a rather menacing message and the log file gets full of 
> meaningless stack traces although no real harm was done.
> Calling latch.await(1,TimeUnit.SECONDS) in a try block seems like a 
> no-brainer but there could be even smarted approaches to processing 
> InterruptedExceptions differently than, say, IOEs and other genuine problems. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to