[ 
https://issues.apache.org/jira/browse/AMQ-7424?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jean-Baptiste Onofré updated AMQ-7424:
--------------------------------------
    Fix Version/s: 5.15.12
                   5.16.0

> NPE under very high database load
> ---------------------------------
>
>                 Key: AMQ-7424
>                 URL: https://issues.apache.org/jira/browse/AMQ-7424
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 5.15.11
>            Reporter: Terje Strand
>            Assignee: Jean-Baptiste Onofré
>            Priority: Major
>             Fix For: 5.16.0, 5.15.12
>
>
> Under abnormally heavy database loads we get a lot of transactions timeouts 
> in our application as one would expect. Our application uses XA with Postgres 
> and ActiveMQ. Problem is that after the abnormality goes away, the system 
> does not recover.
>  
> During these failures, we get a NPE that causes ActiveMQ to lose a database 
> connection and the connection is never returned to the connection pool 
> (Hikari). After the abnormality is removed, and the database is responsive 
> again, the system never recovers as the connection pool is out-of-resources.
>  
> Through debugging, we believe the following causes the connection leak in 
> ActiveMQs handing:
> {quote}Caused by: javax.jms.JMSException: java.lang.NullPointerException
>  at 
> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:54)
>  ~[activemq-client-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1403)
>  ~[activemq-client-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1436)
>  ~[activemq-client-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.TransactionContext.rollback(TransactionContext.java:538) 
> ~[activemq-client-5.15.11.jar:5.15.11]
>  ... 134 more
>  Caused by: java.lang.NullPointerException
>  at 
> org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.commitRemove(JDBCPersistenceAdapter.java:795)
>  ~[activemq-jdbc-store-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.store.jdbc.JdbcMemoryTransactionStore.rollback(JdbcMemoryTransactionStore.java:171)
>  ~[activemq-jdbc-store-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.transaction.XATransaction.rollback(XATransaction.java:146)
>  ~[activemq-broker-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.broker.TransactionBroker.rollbackTransaction(TransactionBroker.java:257)
>  ~[activemq-broker-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.broker.BrokerFilter.rollbackTransaction(BrokerFilter.java:149)
>  ~[activemq-broker-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.broker.BrokerFilter.rollbackTransaction(BrokerFilter.java:149)
>  ~[activemq-broker-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.broker.TransportConnection.processRollbackTransaction(TransportConnection.java:553)
>  ~[activemq-broker-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.command.TransactionInfo.visit(TransactionInfo.java:104) 
> ~[activemq-client-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:336)
>  ~[activemq-broker-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:200)
>  ~[activemq-broker-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
>  ~[activemq-client-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:125)
>  ~[activemq-client-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:301)
>  ~[activemq-client-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
>  ~[activemq-client-5.15.11.jar:5.15.11]
>  at 
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233) 
> ~[activemq-client-5.15.11.jar:5.15.11]
>  at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215) 
> ~[activemq-client-5.15.11.jar:5.15.11]
>  ... 1 more
> {quote}
>  
> By overloading the method 'commitRemoved(...)' in 'JDBCPersistenceAdapter' 
> and converting the NullPointerException above to an IOException, the 
> connection handling code behaves as expected, we see no connection leak, and 
> the system recovers correctly after the load abnormality has passed.
>  
> There is a very large number of things going wrong when these NPEs occur and 
> its near impossible for us (not being experts at ActiveMQ) to see what the 
> underlying cause for these exceptions are. However, for us, the most 
> important is that we recover-



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

Reply via email to