You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Adam Sussman (JIRA)" <ji...@apache.org> on 2010/12/04 04:02:16 UTC

[jira] Commented: (AMQ-3070) New clients unable to connect to broker while SubscriptionRecoveryPolicy is running

    [ https://issues.apache.org/jira/browse/AMQ-3070?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12966783#action_12966783 ] 

Adam Sussman commented on AMQ-3070:
-----------------------------------

Note that the apparent inability to complete a connection happens because most
client libs attempt to subscribe to advisory messaging by default, so the connection
appears to hang.

But event if advisory message watching is disabled, the new connection (and any existing
connections) can't create new subscriptions or become new producers while the lock is
active.  So still bad.

> New clients unable to connect to broker while SubscriptionRecoveryPolicy is running
> -----------------------------------------------------------------------------------
>
>                 Key: AMQ-3070
>                 URL: https://issues.apache.org/jira/browse/AMQ-3070
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.4.2
>            Reporter: Adam Sussman
>            Priority: Critical
>
> Discovered while authoring a custom SubscriptionRecoveryPolicy.
> When function 'recover' is being run, no new connections to the broker can be made.  All connection attempts hang until 'recover' returns.
> This is a huge problem when recovery takes any amount of time.  In my particular case, recovery can take many minutes.
> Note that this problem also prevents the addition/removal of consumers and producers in general, so any threads needing to do so are also blocked.
> The issue appears to be a lock on RegionBroker.purgeInactiveDestinationsTask.  I would attempt to fix, but I am unsure of the consequences of messing with this lock and I am unclear on what is being protected here.
> Thread doing work in "recover":
>     "ActiveMQ Transport: ssl:///10.1.210.140:45407" - Thread t@48
>         at MyCustomSubscriptionRecoveryPolicy.recover(MyCustomSubscriptionRecoveryPolicy.java:xxx)
>         at org.apache.activemq.broker.region.Topic.addSubscription(Topic.java:133)
>         at org.apache.activemq.broker.region.AbstractRegion.addConsumer(AbstractRegion.java:290)
>         - locked java.lang.Object@62f4a9a3
>         at org.apache.activemq.broker.region.TopicRegion.addConsumer(TopicRegion.java:111)
>         at org.apache.activemq.broker.region.RegionBroker.addConsumer(RegionBroker.java:447)
>         - locked org.apache.activemq.broker.region.RegionBroker$1@6d0718b7
>         at org.apache.activemq.broker.jmx.ManagedRegionBroker.addConsumer(ManagedRegionBroker.java:240)
>         at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:89)
>         at org.apache.activemq.advisory.AdvisoryBroker.addConsumer(AdvisoryBroker.java:91)
>         at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:89)
>         at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:89)
>         at org.apache.activemq.broker.MutableBrokerFilter.addConsumer(MutableBrokerFilter.java:95)
>         at org.apache.activemq.broker.TransportConnection.processAddConsumer(TransportConnection.java:550)
>         at org.apache.activemq.command.ConsumerInfo.visit(ConsumerInfo.java:349)
>         at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:311)
>         at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:185)
>         at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
>         at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:228)
>         - locked org.apache.activemq.transport.InactivityMonitor$1@2208d444
>         at org.apache.activemq.transport.stomp.StompTransportFilter.sendToActiveMQ(StompTransportFilter.java:81)
>         at org.apache.activemq.transport.stomp.ProtocolConverter.sendToActiveMQ(ProtocolConverter.java:140)
>         at org.apache.activemq.transport.stomp.ProtocolConverter.onStompSubscribe(ProtocolConverter.java:425)
>         at org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:188)
>         at org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:70)
>         at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
>         at org.apache.activemq.transport.tcp.SslTransport.doConsume(SslTransport.java:91)
>         at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:220)
>         at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:202)
>         at java.lang.Thread.run(Thread.java:619)
>     Locked ownable synchronizers:
>     - None
> Thread attempting to make new connection:
>     "ActiveMQ Transport: ssl:///10.1.210.140:45408" - Thread t@55
>      java.lang.Thread.State: BLOCKED on org.apache.activemq.broker.region.RegionBroker$1@6d0718b7 owned by: ActiveMQ Transport: ssl:///10.1.210.140:45407 
>         at org.apache.activemq.broker.region.RegionBroker.addProducer(RegionBroker.java:392)
>         at org.apache.activemq.broker.BrokerFilter.addProducer(BrokerFilter.java:93)
>         at org.apache.activemq.advisory.AdvisoryBroker.addProducer(AdvisoryBroker.java:145)
>         at org.apache.activemq.broker.CompositeDestinationBroker.addProducer(CompositeDestinationBroker.java:56)
>         at org.apache.activemq.broker.BrokerFilter.addProducer(BrokerFilter.java:93)
>         at org.apache.activemq.broker.MutableBrokerFilter.addProducer(MutableBrokerFilter.java:99)
>         at org.apache.activemq.broker.TransportConnection.processAddProducer(TransportConnection.java:511)
>         at org.apache.activemq.command.ProducerInfo.visit(ProducerInfo.java:105)
>         at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:311)
>         at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:185)
>         at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
>         at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:228)
>         - locked org.apache.activemq.transport.InactivityMonitor$1@53134610
>         at org.apache.activemq.transport.stomp.StompTransportFilter.sendToActiveMQ(StompTransportFilter.java:81)
>         at org.apache.activemq.transport.stomp.ProtocolConverter.sendToActiveMQ(ProtocolConverter.java:140)
>         at org.apache.activemq.transport.stomp.ProtocolConverter$2.onResponse(ProtocolConverter.java:518)
>         at org.apache.activemq.transport.stomp.ProtocolConverter.onActiveMQCommand(ProtocolConverter.java:579)
>         at org.apache.activemq.transport.stomp.StompTransportFilter.oneway(StompTransportFilter.java:58)
>         at org.apache.activemq.transport.InactivityMonitor.oneway(InactivityMonitor.java:255)
>         - locked java.util.concurrent.atomic.AtomicBoolean@165cef0c
>         at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40)
>         - locked java.lang.Object@2f52084c
>         at org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:1249)
>         at org.apache.activemq.broker.TransportConnection.processDispatch(TransportConnection.java:810)
>         at org.apache.activemq.broker.TransportConnection.dispatchSync(TransportConnection.java:770)
>         at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:187)
>         at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
>         at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:228)
>         - locked org.apache.activemq.transport.InactivityMonitor$1@53134610
>         at org.apache.activemq.transport.stomp.StompTransportFilter.sendToActiveMQ(StompTransportFilter.java:81)
>         at org.apache.activemq.transport.stomp.ProtocolConverter.sendToActiveMQ(ProtocolConverter.java:140)
>         at org.apache.activemq.transport.stomp.ProtocolConverter.onStompConnect(ProtocolConverter.java:503)
>         at org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:192)
>         at org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:70)
>         at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
>         at org.apache.activemq.transport.tcp.SslTransport.doConsume(SslTransport.java:91)
>         at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:220)
>         at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:202)
>         at java.lang.Thread.run(Thread.java:619)
>     Locked ownable synchronizers:
>         - None

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.