[ 
https://issues.apache.org/jira/browse/AMQ-6763?focusedWorklogId=576094&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-576094
 ]

ASF GitHub Bot logged work on AMQ-6763:
---------------------------------------

                Author: ASF GitHub Bot
            Created on: 02/Apr/21 13:38
            Start Date: 02/Apr/21 13:38
    Worklog Time Spent: 10m 
      Work Description: cshannon commented on a change in pull request #644:
URL: https://github.com/apache/activemq/pull/644#discussion_r606241307



##########
File path: 
activemq-client/src/main/java/org/apache/activemq/transport/FutureResponse.java
##########
@@ -42,10 +42,11 @@ public FutureResponse(ResponseCallback responseCallback, 
TransportFilter transpo
         this.transportFilter = transportFilter;
     }
 
+
     public Response getResult() throws IOException {
         boolean hasInterruptPending = Thread.interrupted();
         try {
-            return responseSlot.take();
+            return responseSlot.poll(2, TimeUnit.MINUTES);

Review comment:
       This is definitely a -1 from me the way the patch currently is without a 
lot of work.
    
   It's an arbitrary timeout and and none of the code that calls this method 
expects a null or timeout to be returned. This needs to be configurable (and 
probably off by default) and anywhere that uses this would now need to expect 
null and properly handle it otherwise a bunch of cascading NPEs will happen. 
Plus tests need to be written to verify.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Issue Time Tracking
-------------------

    Worklog Id:     (was: 576094)
    Time Spent: 1h  (was: 50m)

> Thread hangs on setXid
> ----------------------
>
>                 Key: AMQ-6763
>                 URL: https://issues.apache.org/jira/browse/AMQ-6763
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: XA
>    Affects Versions: 5.14.5
>            Reporter: Jakub
>            Assignee: Jean-Baptiste Onofré
>            Priority: Minor
>             Fix For: 5.17.0, 5.15.15, 5.16.2
>
>          Time Spent: 1h
>  Remaining Estimate: 0h
>
> 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)

Reply via email to