Shutdown fails if DB connection is lost
---------------------------------------

                 Key: AMQ-1352
                 URL: https://issues.apache.org/activemq/browse/AMQ-1352
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.0.0
            Reporter: Mario Siegenthaler


The broker does not shutdown cleanly if the db connection for the JDBC 
persistence gets disconnected.

I discovered this issue when implementing the fix for the AMQ-1350. When the 
broker discovers it doesn't hold the db-lock anymore (because the connection is 
lost, killed via the db-administration tool) it initiates its shutdown. This 
shutdown fails most of the time, especially if there is a camel-rule or a 
webconsole started within the broker.
The thing is that the broker actually has been shut down (as it's stated and 
intended), but the other things (jetty, commandAgent, camel etc.) will not be 
shut down and the java-process does not terminate.

IMO the broker shutdown didn't even fail, it's just issued an 
InterruptedException somewhere in order to stop some connector thread. I think 
this just needs a proper exception handling/ignoring.


The brokers console output:
INFO  JDBCPersistenceAdapter         - No longer able to keep the exclusive 
lock so giving up being a master
INFO  BrokerService                  - ActiveMQ Message Broker (marios-master, 
ID:mario-siegenthalers-computer.local-64808-1185663859419-1:0) is shutting down
WARN  ActiveMQConnection             - Async exception with no exception 
listener: java.io.EOFException
java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:356)
        at 
org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:269)
        at 
org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:156)
        at 
org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:136)
        at java.lang.Thread.run(Thread.java:637)
INFO  AdvisoryConsumer               - Failed to send remove command: 
javax.jms.JMSException: The transport is not running.
javax.jms.JMSException: The transport is not running.
        at 
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:58)
        at 
org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1205)
        at 
org.apache.activemq.AdvisoryConsumer.dispose(AdvisoryConsumer.java:55)
        at 
org.apache.activemq.ActiveMQConnection.cleanup(ActiveMQConnection.java:1378)
        at 
org.apache.activemq.ActiveMQConnection.transportFailed(ActiveMQConnection.java:2074)
        at 
org.apache.activemq.ActiveMQConnection$4.run(ActiveMQConnection.java:1708)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:679)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:704)
        at java.lang.Thread.run(Thread.java:637)
Caused by: java.io.IOException: The transport is not running.
        at 
org.apache.activemq.transport.TransportSupport.checkStarted(TransportSupport.java:104)
        at 
org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:117)
        at 
org.apache.activemq.transport.InactivityMonitor.oneway(InactivityMonitor.java:147)
        at 
org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:80)
        at 
org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:93)
        at 
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
        at 
org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:56)
        at 
org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1203)
        ... 7 more
INFO  TransportConnector             - Connector openwire Stopped
ERROR efaultMessageListenerContainer - Setup of JMS message listener invoker 
failed - trying to recover
javax.jms.IllegalStateException: The Consumer is closed
        at 
org.apache.activemq.ActiveMQMessageConsumer.checkClosed(ActiveMQMessageConsumer.java:650)
        at 
org.apache.activemq.ActiveMQMessageConsumer.receive(ActiveMQMessageConsumer.java:484)
        at 
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:375)
        at 
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:300)
        at 
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:254)
        at 
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:871)
        at 
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:818)
        at java.lang.Thread.run(Thread.java:637)
ERROR ManagedQueueRegion             - Could not stop service: QueueRegion: 
destinations=1, subscriptions=0, memory=0%. Reason: 
java.lang.InterruptedException
java.lang.InterruptedException
        at java.lang.Object.wait(Native Method)
        at 
org.apache.activemq.thread.DedicatedTaskRunner.shutdown(DedicatedTaskRunner.java:73)
        at 
org.apache.activemq.thread.DedicatedTaskRunner.shutdown(DedicatedTaskRunner.java:83)
        at org.apache.activemq.broker.region.Queue.stop(Queue.java:565)
        at 
org.apache.activemq.broker.region.AbstractRegion.stop(AbstractRegion.java:94)
        at org.apache.activemq.util.ServiceStopper.stop(ServiceStopper.java:42)
        at 
org.apache.activemq.broker.region.RegionBroker.doStop(RegionBroker.java:582)
        at 
org.apache.activemq.broker.jmx.ManagedRegionBroker.doStop(ManagedRegionBroker.java:112)
        at 
org.apache.activemq.broker.region.RegionBroker.stop(RegionBroker.java:196)
        at 
org.apache.activemq.broker.TransactionBroker.stop(TransactionBroker.java:115)
        at org.apache.activemq.broker.BrokerFilter.stop(BrokerFilter.java:158)
        at org.apache.activemq.broker.BrokerFilter.stop(BrokerFilter.java:158)
        at 
org.apache.activemq.broker.MutableBrokerFilter.stop(MutableBrokerFilter.java:168)
        at 
org.apache.activemq.broker.BrokerService$2.stop(BrokerService.java:1353)
        at org.apache.activemq.util.ServiceStopper.stop(ServiceStopper.java:42)
        at org.apache.activemq.broker.BrokerService.stop(BrokerService.java:471)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.stopBroker(JDBCPersistenceAdapter.java:481)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.databaseLockKeepAlive(JDBCPersistenceAdapter.java:473)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter$3.run(JDBCPersistenceAdapter.java:268)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at 
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:301)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:679)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:704)
        at java.lang.Thread.run(Thread.java:637)
ERROR BrokerService$2                - Could not stop service: [EMAIL 
PROTECTED] Reason: java.lang.InterruptedException
java.lang.InterruptedException
        at java.lang.Object.wait(Native Method)
        at 
org.apache.activemq.thread.DedicatedTaskRunner.shutdown(DedicatedTaskRunner.java:73)
        at 
org.apache.activemq.thread.DedicatedTaskRunner.shutdown(DedicatedTaskRunner.java:83)
        at org.apache.activemq.broker.region.Queue.stop(Queue.java:565)
        at 
org.apache.activemq.broker.region.AbstractRegion.stop(AbstractRegion.java:94)
        at org.apache.activemq.util.ServiceStopper.stop(ServiceStopper.java:42)
        at 
org.apache.activemq.broker.region.RegionBroker.doStop(RegionBroker.java:582)
        at 
org.apache.activemq.broker.jmx.ManagedRegionBroker.doStop(ManagedRegionBroker.java:112)
        at 
org.apache.activemq.broker.region.RegionBroker.stop(RegionBroker.java:196)
        at 
org.apache.activemq.broker.TransactionBroker.stop(TransactionBroker.java:115)
        at org.apache.activemq.broker.BrokerFilter.stop(BrokerFilter.java:158)
        at org.apache.activemq.broker.BrokerFilter.stop(BrokerFilter.java:158)
        at 
org.apache.activemq.broker.MutableBrokerFilter.stop(MutableBrokerFilter.java:168)
        at 
org.apache.activemq.broker.BrokerService$2.stop(BrokerService.java:1353)
        at org.apache.activemq.util.ServiceStopper.stop(ServiceStopper.java:42)
        at org.apache.activemq.broker.BrokerService.stop(BrokerService.java:471)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.stopBroker(JDBCPersistenceAdapter.java:481)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.databaseLockKeepAlive(JDBCPersistenceAdapter.java:473)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter$3.run(JDBCPersistenceAdapter.java:268)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at 
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:301)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:679)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:704)
        at java.lang.Thread.run(Thread.java:637)
INFO  BrokerService                  - ActiveMQ JMS Message Broker 
(marios-master, ID:mario-siegenthalers-computer.local-64808-1185663859419-1:0) 
stopped
WARN  JDBCPersistenceAdapter         - Failed to stop broker
java.lang.InterruptedException
        at java.lang.Object.wait(Native Method)
        at 
org.apache.activemq.thread.DedicatedTaskRunner.shutdown(DedicatedTaskRunner.java:73)
        at 
org.apache.activemq.thread.DedicatedTaskRunner.shutdown(DedicatedTaskRunner.java:83)
        at org.apache.activemq.broker.region.Queue.stop(Queue.java:565)
        at 
org.apache.activemq.broker.region.AbstractRegion.stop(AbstractRegion.java:94)
        at org.apache.activemq.util.ServiceStopper.stop(ServiceStopper.java:42)
        at 
org.apache.activemq.broker.region.RegionBroker.doStop(RegionBroker.java:582)
        at 
org.apache.activemq.broker.jmx.ManagedRegionBroker.doStop(ManagedRegionBroker.java:112)
        at 
org.apache.activemq.broker.region.RegionBroker.stop(RegionBroker.java:196)
        at 
org.apache.activemq.broker.TransactionBroker.stop(TransactionBroker.java:115)
        at org.apache.activemq.broker.BrokerFilter.stop(BrokerFilter.java:158)
        at org.apache.activemq.broker.BrokerFilter.stop(BrokerFilter.java:158)
        at 
org.apache.activemq.broker.MutableBrokerFilter.stop(MutableBrokerFilter.java:168)
        at 
org.apache.activemq.broker.BrokerService$2.stop(BrokerService.java:1353)
        at org.apache.activemq.util.ServiceStopper.stop(ServiceStopper.java:42)
        at org.apache.activemq.broker.BrokerService.stop(BrokerService.java:471)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.stopBroker(JDBCPersistenceAdapter.java:481)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.databaseLockKeepAlive(JDBCPersistenceAdapter.java:473)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter$3.run(JDBCPersistenceAdapter.java:268)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at 
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:301)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:679)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:704)
        at java.lang.Thread.run(Thread.java:637)

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

Reply via email to