When running multiple brokers in master-slave(s) mode (KahaDB file), they 
behave as described:

- The first broker grabs the exclusive lock on the file and becomes the master 
broker. 

- If that broker dies and releases the lock then another broker takes over.
- The slave brokers sit in a loop trying to grab the lock from the master 
broker.

This is all great, however at shutdown time there is an issue in that the slave 
brokers
can potentially be still in the call to start(). The starting thread stack 
looks like:

at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)
at org.apache.activemq.store.SharedFileLocker.doStart(SharedFileLocker.java:83)
at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55)
at 
org.apache.activemq.broker.LockableServiceSupport.preStart(LockableServiceSupport.java:94)
at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:54)
at 
org.apache.activemq.broker.BrokerService.doStartPersistenceAdapter(BrokerService.java:674)
at 
org.apache.activemq.broker.BrokerService.startPersistenceAdapter(BrokerService.java:658)
at org.apache.activemq.broker.BrokerService.start(BrokerService.java:622)
at 
org.apache.activemq.osgi.ActiveMQServiceFactory.updated(ActiveMQServiceFactory.java:140)

The Karaf shutdown thread then calls ActiveMQServiceFactory.destroy().
This method and ActiveMQServiceFactory.updated() are synchronized, so things 
come to a halt.

JIRA https://issues.apache.org/jira/browse/AMQ-6601

Hoping anyone may have a workaround?

- Martin

Reply via email to