You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Anton Roskvist (Jira)" <ji...@apache.org> on 2020/10/05 11:27:00 UTC

[jira] [Comment Edited] (AMQ-7470) ActiveMQ producer thread hangs on setXid

    [ https://issues.apache.org/jira/browse/AMQ-7470?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17208009#comment-17208009 ] 

Anton Roskvist edited comment on AMQ-7470 at 10/5/20, 11:26 AM:
----------------------------------------------------------------

Hi,

 

I think I've found a way to reproduce this issue, at least it looks _really_ similar. It's a bit clunky, where I set up a bunch of actual running instances, run messages through them and randomly stop and start the brokers.
 I have automated the setup process and a way to break everything. I will attach an archive with everything needed to trigger the issue here, so you should be able to try it out with just a few commands on a Linux machine with Java being the only prereq. Hope it helps!

ps. Because of Arjuna this has to run in java 8 (or Wildfly at least). Check out the README for instructions of how to run everything

 

Br,

Anton[^setXid_bug.tar.gz]


was (Author: antonroskvist):
Hi,

 

I think I've found a way to reproduce this issue, at least it looks _really_ similar. It's a bit clunky, where I set up a bunch of actual running instances, run messages through them and randomly stop and start the brokers.
I have automated the setup process and a way to break everything. I will attach an archive with everything needed to trigger the issue here, so you should be able to try it out with just a few commands on a Linux machine with Java being the only prereq. Hope it helps!

ps. Because of Arjuna this has to run in java 8 (or Wildfly at least). Check out the README for instructions of how to run everything

 

Br,

Anton[^setXid_bug.tar.gz]

> ActiveMQ producer thread hangs on setXid
> ----------------------------------------
>
>                 Key: AMQ-7470
>                 URL: https://issues.apache.org/jira/browse/AMQ-7470
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: AMQP, Broker, JMS client
>    Affects Versions: 5.15.6
>            Reporter: Rajesh Pote
>            Assignee: Jean-Baptiste Onofré
>            Priority: Blocker
>         Attachments: setXid_bug.tar.gz
>
>
> I've noticed issues with distributed transactions (XA) on karaf when using ActiveMQ with JDBC storeage (postgres). After some time (it isn't deterministic) I've observed that on database side 'idle in transaction' appeared (it's other schema than used by ActiveMQ). After debugging it seams that the reason why transactions are hanging is ActiveMQ and  org.apache.activemq.transport.FutureResponse.getResult method that waits forever for a response.
> {code}
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         - parking to wait for  <0x0000000768585aa8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
>         at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403)
>         at org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:48)
>         at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:87)
>         at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1388)
>         at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1428)
>         at org.apache.activemq.TransactionContext.setXid(TransactionContext.java:751)
>         at org.apache.activemq.TransactionContext.invokeBeforeEnd(TransactionContext.java:424)
>         at org.apache.activemq.TransactionContext.end(TransactionContext.java:408)
>         at org.apache.geronimo.transaction.manager.WrapperNamedXAResource.end(WrapperNamedXAResource.java:61)
>         at org.apache.geronimo.transaction.manager.TransactionImpl.endResources(TransactionImpl.java:588)
>         at org.apache.geronimo.transaction.manager.TransactionImpl.endResources(TransactionImpl.java:567)
>         at org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:414)
>         at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:262)
>         at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:252)
>         at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1020)
>         at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761)
>         at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)
>         at org.apache.aries.transaction.internal.AriesPlatformTransactionManager.commit(AriesPlatformTransactionManager.java:75)
>         at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:484)
>         at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)
>         at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
>         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
>         at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
> ..... custom service
> {code}
> {code}
> "DefaultMessageListenerContainer-3" #13199 prio=5 os_prio=0 tid=0x00007fb8687e6800 nid=0x3954 waiting on condition [0x00007fb7b0b98000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         - parking to wait for  <0x0000000765f532c0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
>         at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:403)
>         at org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:48)
>         at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:87)
>         at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1388)
>         at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1428)
>         at org.apache.activemq.TransactionContext.setXid(TransactionContext.java:751)
>         at org.apache.activemq.TransactionContext.invokeBeforeEnd(TransactionContext.java:424)
>         at org.apache.activemq.TransactionContext.end(TransactionContext.java:408)
>         at org.apache.geronimo.transaction.manager.WrapperNamedXAResource.end(WrapperNamedXAResource.java:61)
>         at org.apache.geronimo.transaction.manager.TransactionImpl.endResources(TransactionImpl.java:588)
>         at org.apache.geronimo.transaction.manager.TransactionImpl.endResources(TransactionImpl.java:567)
>         at org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:414)
>         at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:262)
>         at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:252)
>         at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1020)
>         at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761)
>         at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)
>         at org.apache.aries.transaction.internal.AriesPlatformTransactionManager.commit(AriesPlatformTransactionManager.java:75)
>         at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:245)
>         at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1164)
>         at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1156)
>         at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1053)
>         at java.lang.Thread.run(Thread.java:748)
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)