[ https://issues.apache.org/activemq/browse/AMQ-1352?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Bruce Snyder updated AMQ-1352: ------------------------------ Fix Version/s: (was: AGING_TO_DIE) 5.4.0 > 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 > Fix For: 5.4.0 > > > 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: > org.apache.activemq.broker.brokerservic...@b59fd9. 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.