Daniel Niecke created AMQ-8340:
----------------------------------

             Summary: Deadlock with JDBC and MySQL 5.7
                 Key: AMQ-8340
                 URL: https://issues.apache.org/jira/browse/AMQ-8340
             Project: ActiveMQ
          Issue Type: Bug
          Components: JDBC
    Affects Versions: 5.16.2
         Environment: ActiveMQ Version 5.16.2
c3p0 Version 0.9.5.5
mchange-commons Version 0.2.19
mysql-connector 5.1.49

Database Server is Percona Version 5.7.34-37
            Reporter: Daniel Niecke


We experience deadlocks when activemq tries to commit data via JDBC to our 
MySQL server.
Our ActiveMQ Server runs in active-passiv mode and the active server holds a 
lock on the database.

This seems to be the relevant logs:
{code}
2021-07-18 17:33:15,523 | WARN  | Commit failed: Deadlock found when trying to 
get lock; try restarting transaction | 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter | ActiveMQ Transport: 
tcp:///10.140.7.1:53898@61616
java.sql.BatchUpdateException: Deadlock found when trying to get lock; try 
restarting transaction
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at 
com.mysql.jdbc.SQLError.createBatchUpdateException(SQLError.java:1154)
        at 
com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1829)
        at 
com.mysql.jdbc.PreparedStatement.executeBatchInternal(PreparedStatement.java:1319)
        at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:954)
        at 
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:2544)
        at 
org.apache.activemq.store.jdbc.TransactionContext.executeBatch(TransactionContext.java:138)
        at 
org.apache.activemq.store.jdbc.TransactionContext.executeBatch(TransactionContext.java:120)
        at 
org.apache.activemq.store.jdbc.TransactionContext.commit(TransactionContext.java:203)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.commitTransaction(JDBCPersistenceAdapter.java:534)
        at 
org.apache.activemq.store.memory.MemoryTransactionStore$Tx.commit(MemoryTransactionStore.java:110)
        at 
org.apache.activemq.store.memory.MemoryTransactionStore.commit(MemoryTransactionStore.java:277)
        at 
org.apache.activemq.transaction.LocalTransaction.commit(LocalTransaction.java:70)
        at 
org.apache.activemq.broker.TransactionBroker.commitTransaction(TransactionBroker.java:254)
        at 
org.apache.activemq.broker.BrokerFilter.commitTransaction(BrokerFilter.java:114)
        at 
org.apache.activemq.broker.BrokerFilter.commitTransaction(BrokerFilter.java:114)
        at 
org.apache.activemq.broker.BrokerFilter.commitTransaction(BrokerFilter.java:114)
        at 
org.apache.activemq.broker.TransportConnection.processCommitTransactionOnePhase(TransportConnection.java:533)
        at 
org.apache.activemq.command.TransactionInfo.visit(TransactionInfo.java:100)
        at 
org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:331)
        at 
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:200)
        at 
org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
        at 
org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:125)
        at 
org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:301)
        at 
org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
        at 
org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233)
        at 
org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)
        at java.lang.Thread.run(Thread.java:748)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: 
Deadlock found when trying to get lock; try restarting transaction
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:952)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
        at 
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1915)
        at 
com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2136)
        at 
com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1813)
        ... 25 more
2021-07-18 17:33:15,533 | INFO  | Ignoring SQLException, java.io.IOException: 
Deadlock found when trying to get lock; try restarting transaction | 
org.apache.activemq.util.DefaultIOExceptionHandler | ActiveMQ Transport: 
tcp:///10.140.7.1:53898@61616
java.sql.BatchUpdateException: Deadlock found when trying to get lock; try 
restarting transaction
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at 
com.mysql.jdbc.SQLError.createBatchUpdateException(SQLError.java:1154)
        at 
com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1829)
        at 
com.mysql.jdbc.PreparedStatement.executeBatchInternal(PreparedStatement.java:1319)
        at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:954)
        at 
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:2544)
        at 
org.apache.activemq.store.jdbc.TransactionContext.executeBatch(TransactionContext.java:138)
        at 
org.apache.activemq.store.jdbc.TransactionContext.executeBatch(TransactionContext.java:120)
        at 
org.apache.activemq.store.jdbc.TransactionContext.commit(TransactionContext.java:203)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.commitTransaction(JDBCPersistenceAdapter.java:534)
        at 
org.apache.activemq.store.memory.MemoryTransactionStore$Tx.commit(MemoryTransactionStore.java:110)
        at 
org.apache.activemq.store.memory.MemoryTransactionStore.commit(MemoryTransactionStore.java:277)
        at 
org.apache.activemq.transaction.LocalTransaction.commit(LocalTransaction.java:70)
        at 
org.apache.activemq.broker.TransactionBroker.commitTransaction(TransactionBroker.java:254)
        at 
org.apache.activemq.broker.BrokerFilter.commitTransaction(BrokerFilter.java:114)
        at 
org.apache.activemq.broker.BrokerFilter.commitTransaction(BrokerFilter.java:114)
        at 
org.apache.activemq.broker.BrokerFilter.commitTransaction(BrokerFilter.java:114)
        at 
org.apache.activemq.broker.TransportConnection.processCommitTransactionOnePhase(TransportConnection.java:533)
        at 
org.apache.activemq.command.TransactionInfo.visit(TransactionInfo.java:100)
        at 
org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:331)
        at 
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:200)
        at 
org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
        at 
org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:125)
        at 
org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:301)
        at 
org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
        at 
org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233)
        at 
org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)
        at java.lang.Thread.run(Thread.java:748)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: 
Deadlock found when trying to get lock; try restarting transaction
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:952)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
        at 
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1915)
        at 
com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2136)
        at 
com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1813)
        ... 25 more
2021-07-18 17:33:15,538 | WARN  | Store COMMIT FAILED:  | 
org.apache.activemq.transaction.LocalTransaction | ActiveMQ Transport: 
tcp:///10.140.7.1:53898@61616
java.io.IOException: Not started.
        at 
org.apache.activemq.store.jdbc.TransactionContext.rollback(TransactionContext.java:223)
        at 
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.rollbackTransaction(JDBCPersistenceAdapter.java:540)
        at 
org.apache.activemq.store.memory.MemoryTransactionStore$Tx.commit(MemoryTransactionStore.java:113)
        at 
org.apache.activemq.store.memory.MemoryTransactionStore.commit(MemoryTransactionStore.java:277)
        at 
org.apache.activemq.transaction.LocalTransaction.commit(LocalTransaction.java:70)
        at 
org.apache.activemq.broker.TransactionBroker.commitTransaction(TransactionBroker.java:254)
        at 
org.apache.activemq.broker.BrokerFilter.commitTransaction(BrokerFilter.java:114)
        at 
org.apache.activemq.broker.BrokerFilter.commitTransaction(BrokerFilter.java:114)
        at 
org.apache.activemq.broker.BrokerFilter.commitTransaction(BrokerFilter.java:114)
        at 
org.apache.activemq.broker.TransportConnection.processCommitTransactionOnePhase(TransportConnection.java:533)
        at 
org.apache.activemq.command.TransactionInfo.visit(TransactionInfo.java:100)
        at 
org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:331)
        at 
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:200)
        at 
org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
        at 
org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:125)
        at 
org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:301)
        at 
org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
        at 
org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233)
        at 
org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)
        at java.lang.Thread.run(Thread.java:748)
{code}

This is our datasource configuration:
{code}
<bean id="activemq-ds" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
destroy-method="close">
        <property name="driverClass" value="org.gjt.mm.mysql.Driver" />
        <property name="jdbcUrl" 
value="jdbc:mysql://10.130.11.1/activemq570?useSSL=false" />
        <property name="user" value="XXXX" />
        <property name="password" value="XXXX" />
        <property name="maxPoolSize" value="15" />
        <property name="minPoolSize" value="3" />
        <property name="autoCommitOnClose" value="false" />
        <property name="maxConnectionAge" value="0" />
        <property name="maxIdleTime" value="300" />
</bean>
{code}



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

Reply via email to