i tried the latest snapshot. it appears to have solved the problem. but i cannot upgrade to 4.2. is there a patch for 4.0.2 or could you point out what files have been changed to fix this so that i can manually patch 4.0.2?
thanks a lot. rajdavies wrote: > > I feel your pain - this is fixed in 4.2 - you can get a snapshot here: > > http://people.apache.org/repo/m2-snapshot-repository/org/apache/ > activemq/apache-activemq/4.2-incubator-SNAPSHOT/ > > cheers, > > Rob > > On 25 Jan 2007, at 18:53, igah wrote: > >> >> i am using activemq-4.0.2. i am running a test with 6 producers >> continously >> sending stomp message to a queue, with 6 consumers on the same >> queue. if i >> kill -9 all the consumers (which are all in one process), and >> restart the >> consumers again, sometimes (about 30% of the time) the consumers >> cannot get >> any messages anymore. if i inspect the broker, i see only one consumer >> registered. >> >> after some digging myself, i found out the reason is that >> org.apache.activemq.broker.region.Queue.addSubscription is blocked at >> dispatchValve.turnOff() >> >> the reason for that is when the previous consumers are killed, on >> the broker >> side, in Queue.removeSubscription, dispatchValve.turnOn() (line >> 241) is >> not invoked. a little bit more poking reveals that in all the >> failed cases, >> line 233: dispatchPolicy.dispatch(context, node, msgContext, >> consumers) >> invokes removeSubscription again, therefore causing the deadlock >> (i.e. the >> thread that's supposed to call dispatchValve.turnOn again calls >> removeSubscription which calls dispatchValve.turnOff which is blocked) >> >> the 2nd "self" call is preceded by this transport exception in the >> log: >> (probably because i killed the consumers) >> >> 2007-01-25 13:29:46,662 [127.0.0.1:56489] DEBUG Transport >> - Transport failed: java.io.IOException: The transport >> tcp:///127.0.0.1:56486 of type: >> org.apache.activemq.transport.tcp.TcpTransport is not running. >> java.io.IOException: The transport tcp:///127.0.0.1:56486 of type: >> org.apache.activemq.transport.tcp.TcpTransport is not running. >> at >> org.apache.activemq.transport.TransportSupport.checkStarted >> (TransportSupport.java:109) >> at >> org.apache.activemq.transport.tcp.TcpTransport.oneway >> (TcpTransport.java:117) >> at >> org.apache.activemq.transport.InactivityMonitor.oneway >> (InactivityMonitor.java:142) >> at >> org.apache.activemq.transport.TransportFilter.oneway >> (TransportFilter.java:82) >> at >> org.apache.activemq.transport.WireFormatNegotiator.oneway >> (WireFormatNegotiator.java:87) >> at >> org.apache.activemq.transport.MutexTransport.oneway >> (MutexTransport.java:45) >> at >> org.apache.activemq.transport.ResponseCorrelator.oneway >> (ResponseCorrelator.java:59) >> at >> org.apache.activemq.broker.TransportConnection.dispatch >> (TransportConnection.java:215) >> at >> org.apache.activemq.broker.AbstractConnection.processDispatch >> (AbstractConnection.java:722) >> at >> org.apache.activemq.broker.AbstractConnection.dispatchSync >> (AbstractConnection.java:699) >> at >> org.apache.activemq.broker.region.PrefetchSubscription.dispatch >> (PrefetchSubscription.java:311) >> at >> org.apache.activemq.broker.region.QueueSubscription.dispatch >> (QueueSubscription.java:152) >> at >> org.apache.activemq.broker.region.PrefetchSubscription.add >> (PrefetchSubscription.java:68) >> at >> org.apache.activemq.broker.region.policy.RoundRobinDispatchPolicy.disp >> atch(RoundRobinDispatchPolicy.java:54) >> at >> org.apache.activemq.broker.region.Queue.removeSubscription >> (Queue.java:233) >> at >> org.apache.activemq.broker.region.AbstractRegion.removeConsumer >> (AbstractRegion.java:208) >> at >> org.apache.activemq.broker.region.RegionBroker.removeConsumer >> (RegionBroker.java:317) >> at >> org.apache.activemq.broker.BrokerFilter.removeConsumer >> (BrokerFilter.java:102) >> at >> org.apache.activemq.advisory.AdvisoryBroker.removeConsumer >> (AdvisoryBroker.java:210) >> at >> org.apache.activemq.broker.BrokerFilter.removeConsumer >> (BrokerFilter.java:102) >> at >> org.apache.activemq.broker.MutableBrokerFilter.removeConsumer >> (MutableBrokerFilter.java:115) >> at >> org.apache.activemq.broker.AbstractConnection.processRemoveConsumer >> (AbstractConnection.java:553) >> at >> org.apache.activemq.broker.AbstractConnection.processRemoveSession >> (AbstractConnection.java:590) >> at >> org.apache.activemq.broker.AbstractConnection.processRemoveConnection( >> AbstractConnection.java:660) >> at >> org.apache.activemq.broker.AbstractConnection.stop >> (AbstractConnection.java:169) >> at >> org.apache.activemq.broker.TransportConnection.stop >> (TransportConnection.java:98) >> at >> org.apache.activemq.broker.jmx.ManagedTransportConnection.stop >> (ManagedTransportConnection.java:63) >> at >> org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java: >> 40) >> at >> org.apache.activemq.broker.AbstractConnection.serviceTransportExceptio >> n(AbstractConnection.java:183) >> at >> org.apache.activemq.broker.TransportConnection$1.onException >> (TransportConnection.java:67) >> at >> org.apache.activemq.transport.TransportFilter.onException >> (TransportFilter.java:98) >> at >> org.apache.activemq.transport.ResponseCorrelator.onException >> (ResponseCorrelator.java:111) >> at >> org.apache.activemq.transport.TransportFilter.onException >> (TransportFilter.java:98) >> at >> org.apache.activemq.transport.TransportFilter.onException >> (TransportFilter.java:98) >> at >> org.apache.activemq.transport.WireFormatNegotiator.onException >> (WireFormatNegotiator.java:130) >> at >> org.apache.activemq.transport.InactivityMonitor.onException >> (InactivityMonitor.java:150) >> at >> org.apache.activemq.transport.TransportSupport.onException >> (TransportSupport.java:101) >> at >> org.apache.activemq.transport.tcp.TcpTransport.run >> (TcpTransport.java:150) >> at java.lang.Thread.run(Thread.java:595) >> >> >> and i print out the stack when the "self" call to >> removeSubscription is >> happening: >> >> at >> org.apache.activemq.broker.region.Queue.removeSubscription >> (Queue.java:181) >> at >> org.apache.activemq.broker.region.AbstractRegion.removeConsumer >> (AbstractRegion.java:208) >> at >> org.apache.activemq.broker.region.RegionBroker.removeConsumer >> (RegionBroker.java:317) >> at >> org.apache.activemq.broker.BrokerFilter.removeConsumer >> (BrokerFilter.java:102) >> at >> org.apache.activemq.advisory.AdvisoryBroker.removeConsumer >> (AdvisoryBroker.java:210) >> at >> org.apache.activemq.broker.BrokerFilter.removeConsumer >> (BrokerFilter.java:102) >> at >> org.apache.activemq.broker.MutableBrokerFilter.removeConsumer >> (MutableBrokerFilter.java:115) >> at >> org.apache.activemq.broker.AbstractConnection.processRemoveConsumer >> (AbstractConnection.java:553) >> at >> org.apache.activemq.broker.AbstractConnection.processRemoveSession >> (AbstractConnection.java:590) >> at >> org.apache.activemq.broker.AbstractConnection.processRemoveConnection( >> AbstractConnection.java:660) >> at >> org.apache.activemq.broker.AbstractConnection.stop >> (AbstractConnection.java:169) >> at >> org.apache.activemq.broker.TransportConnection.stop >> (TransportConnection.java:98) >> at >> org.apache.activemq.broker.jmx.ManagedTransportConnection.stop >> (ManagedTransportConnection.java: >> 63) >> at >> org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java: >> 40) >> at >> org.apache.activemq.broker.AbstractConnection.serviceTransportExceptio >> n(AbstractConnection.java:183) >> at >> org.apache.activemq.broker.AbstractConnection.serviceException >> (AbstractConnection.java:191) >> at >> org.apache.activemq.broker.TransportConnection.dispatch >> (TransportConnection.java:218) >> at >> org.apache.activemq.broker.AbstractConnection.processDispatch >> (AbstractConnection.java:722) >> at >> org.apache.activemq.broker.AbstractConnection.dispatchSync >> (AbstractConnection.java:699) >> at >> org.apache.activemq.broker.region.PrefetchSubscription.dispatch >> (PrefetchSubscription.java:311) >> at >> org.apache.activemq.broker.region.QueueSubscription.dispatch >> (QueueSubscription.java:152) >> at >> org.apache.activemq.broker.region.PrefetchSubscription.add >> (PrefetchSubscription.java:68) >> at >> org.apache.activemq.broker.region.policy.RoundRobinDispatchPolicy.disp >> atch(RoundRobinDispatchPolicy.java:54) >> at >> org.apache.activemq.broker.region.Queue.removeSubscription >> (Queue.java:233) >> at >> org.apache.activemq.broker.region.AbstractRegion.removeConsumer >> (AbstractRegion.java:208) >> >> seems that serviceTransportException(AbstractConnection.java:183) >> is where >> the self call is triggered. >> >> could someone look into this and let me know if there is simple fix >> for this >> deadlock condition? thanks in advance. >> -- >> View this message in context: http://www.nabble.com/couldn%27t-add- >> consumers-after-existing-consumers-are-killed-%28deadlock-in-broker% >> 29-tf3118423.html#a8639042 >> Sent from the ActiveMQ - User mailing list archive at Nabble.com. >> > > > -- View this message in context: http://www.nabble.com/couldn%27t-add-consumers-after-existing-consumers-are-killed-%28deadlock-in-broker%29-tf3118423.html#a8653911 Sent from the ActiveMQ - User mailing list archive at Nabble.com.