bogdan t. created AMQ-9342:
------------------------------
Summary: deadlock between threads calling failover and rollback
Key: AMQ-9342
URL: https://issues.apache.org/jira/browse/AMQ-9342
Project: ActiveMQ
Issue Type: Bug
Environment: We encounter deadlock after failover - looks like order
of locking in failover handling is different than locking order during rollback
and thread are clashing:
Rollback:
- FifoMessageDispatchChannel
- then ActiveMQConnection
Failover handling:
- ActiveMQConnection
- then FifoMessageDispatchChannel
See the full stack traces:
{noformat}
"thread-doing-rollback":
at
org.apache.activemq.ActiveMQConnection.getScheduler(ActiveMQConnection.java:2387)
- waiting to lock <0x00007f315a19d550> (a
org.apache.activemq.ActiveMQConnection)
at
org.apache.activemq.ActiveMQSession.getScheduler(ActiveMQSession.java:2254)
at
org.apache.activemq.ActiveMQMessageConsumer.rollback(ActiveMQMessageConsumer.java:1356)
- locked <0x00007f37630c0d90> (a java.util.LinkedList)
- locked <0x00007f37630a4690> (a java.lang.Object)
at
org.apache.activemq.ActiveMQMessageConsumer$5.afterRollback(ActiveMQMessageConsumer.java:1113)
at
org.apache.activemq.TransactionContext.afterRollback(TransactionContext.java:166)
at
org.apache.activemq.TransactionContext.commit(TransactionContext.java:344)
at org.apache.activemq.ActiveMQSession.commit(ActiveMQSession.java:583)
at
org.apache.activemq.jms.pool.PooledSession.commit(PooledSession.java:167)
at
org.springframework.jms.support.JmsUtils.commitIfNecessary(JmsUtils.java:218)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.commitIfNecessary(AbstractMessageListenerContainer.java:776)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:680)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:331)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1237)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1227)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1120)
at java.lang.Thread.run([email protected]/Thread.java:829)
"ActiveMQ Connection Executor: failover:(nio://....)&maxReconnectAttempts=0":
at
org.apache.activemq.FifoMessageDispatchChannel.close(FifoMessageDispatchChannel.java:133)
- waiting to lock <0x00007f37630a4690> (a java.lang.Object)
at
org.apache.activemq.ActiveMQMessageConsumer.dispose(ActiveMQMessageConsumer.java:872)
at org.apache.activemq.ActiveMQSession.dispose(ActiveMQSession.java:730)
- locked <0x00007f376311fd78> (a org.apache.activemq.ActiveMQSession)
at
org.apache.activemq.ActiveMQConnection.close(ActiveMQConnection.java:671)
- locked <0x00007f315a19d550> (a org.apache.activemq.ActiveMQConnection)
at
org.apache.activemq.jms.pool.ConnectionPool.close(ConnectionPool.java:176)
- locked <0x00007f315a230e50> (a
org.apache.activemq.pool.PooledConnectionFactory$1)
at
org.apache.activemq.jms.pool.ConnectionPool.onException(ConnectionPool.java:381)
at
org.apache.activemq.ActiveMQConnection$5.run(ActiveMQConnection.java:1967)
at
java.util.concurrent.ThreadPoolExecutor.runWorker([email protected]/ThreadPoolExecutor.java:1128)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run([email protected]/ThreadPoolExecutor.java:628)
at java.lang.Thread.run([email protected]/Thread.java:829)
{noformat}
Reporter: bogdan t.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)