activemq-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dominik Maier (JIRA)" <j...@apache.org>
Subject [jira] [Created] (AMQ-6598) SQLException when moving messages to DLQ
Date Mon, 13 Feb 2017 17:17:41 GMT
Dominik Maier created AMQ-6598:
----------------------------------

             Summary: SQLException when moving messages to DLQ
                 Key: AMQ-6598
                 URL: https://issues.apache.org/jira/browse/AMQ-6598
             Project: ActiveMQ
          Issue Type: Bug
          Components: JDBC
    Affects Versions: 5.14.3, 5.12.0
            Reporter: Dominik Maier
            Priority: Minor


ActiveMQ raises a SQLException when moving messages from two or more queues to the configured
dead-letter-queue. It only happens with two or more queues and multiple messages. The exception
is logged on level WARN and it seems that no messages are lost. First affected version is
5.12.0, but also happens with the current version 5.14.3.

{code}
java.io.IOException: Failed to broker message: ID:server-amq-46753-1486658241250-4:5:3:1:13
in container: java.sql.SQLException: org.apache.commons.dbcp2.DelegatingPreparedStatement
with address: "NULL" is closed.
        at org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:34)
~[activemq-client-5.14.3.jar:5.14.3]
        at org.apache.activemq.store.jdbc.JDBCMessageStore.addMessage(JDBCMessageStore.java:163)
~[activemq-jdbc-store-5.14.3.jar:5.14.3]
        at org.apache.activemq.store.memory.MemoryTransactionStore.addMessage(MemoryTransactionStore.java:352)
~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.store.memory.MemoryTransactionStore$1.asyncAddQueueMessage(MemoryTransactionStore.java:159)
~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.region.Queue.doMessageSend(Queue.java:837) ~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.region.Queue.send(Queue.java:727) ~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:503)
~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:468) ~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.jmx.ManagedRegionBroker.send(ManagedRegionBroker.java:293)
~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:153) ~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.scheduler.SchedulerBroker.send(SchedulerBroker.java:195)
~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.CompositeDestinationBroker.send(CompositeDestinationBroker.java:96)
~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:293) ~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:158)
~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.util.LoggingBrokerPlugin.send(LoggingBrokerPlugin.java:275)
~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:158)
~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.util.BrokerSupport.doResend(BrokerSupport.java:69) ~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.util.BrokerSupport.resendNoCopy(BrokerSupport.java:38) ~[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.region.RegionBroker.sendToDeadLetterQueue(RegionBroker.java:799)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.BrokerFilter.sendToDeadLetterQueue(BrokerFilter.java:319)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.BrokerFilter.sendToDeadLetterQueue(BrokerFilter.java:319)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.BrokerFilter.sendToDeadLetterQueue(BrokerFilter.java:319)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.MutableBrokerFilter.sendToDeadLetterQueue(MutableBrokerFilter.java:331)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.util.LoggingBrokerPlugin.sendToDeadLetterQueue(LoggingBrokerPlugin.java:505)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.MutableBrokerFilter.sendToDeadLetterQueue(MutableBrokerFilter.java:331)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.region.PrefetchSubscription.sendToDLQ(PrefetchSubscription.java:535)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.region.PrefetchSubscription.acknowledge(PrefetchSubscription.java:394)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:526)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:484)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:88) [activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:88) [activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:276)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:98)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.util.LoggingBrokerPlugin.acknowledge(LoggingBrokerPlugin.java:162)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:98)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:590)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.command.MessageAck.visit(MessageAck.java:245) [activemq-client-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:336)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:200)
[activemq-broker-5.14.3.jar:5.14.3]
        at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
[activemq-client-5.14.3.jar:5.14.3]
        at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:125)
[activemq-client-5.14.3.jar:5.14.3]
        at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:301)
[activemq-client-5.14.3.jar:5.14.3]
        at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
[activemq-client-5.14.3.jar:5.14.3]
        at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233) [activemq-client-5.14.3.jar:5.14.3]
        at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215) [activemq-client-5.14.3.jar:5.14.3]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
Caused by: java.sql.SQLException: org.apache.commons.dbcp2.DelegatingPreparedStatement with
address: "NULL" is closed.
        at org.apache.commons.dbcp2.DelegatingStatement.checkOpen(DelegatingStatement.java:122)
~[commons-dbcp2-2.1.1.jar:2.1.1]
        at org.apache.commons.dbcp2.DelegatingPreparedStatement.setString(DelegatingPreparedStatement.java:143)
~[commons-dbcp2-2.1.1.jar:2.1.1]
        at org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter.doAddMessage(DefaultJDBCAdapter.java:233)
~[activemq-jdbc-store-5.14.3.jar:5.14.3]
        at org.apache.activemq.store.jdbc.JDBCMessageStore.addMessage(JDBCMessageStore.java:159)
~[activemq-jdbc-store-5.14.3.jar:5.14.3]
        ... 44 more
{code}



h5. Setup to reproduce:
Configure jdbcPersistenceAdapter with a MySQL datasource and a individualDeadLetterStrategy:
{code}
...
<policyEntry queue=">">
    <deadLetterStrategy>
        <individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"/>
    </deadLetterStrategy>
</policyEntry>
...
<persistenceAdapter>
   <jdbcPersistenceAdapter dataDirectory="${activemq.data}" cleanupPeriod="0" dataSource="#mysql-ds"/>
</persistenceAdapter>
...
<bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
  <property name="username" value="user"/>
  <property name="password" value="password"/>
  <property name="poolPreparedStatements" value="true"/>
</bean>
...
{code}

Setup two consumers and producers for two different queues, e.g test.queue.1 and test.queue.2

The consumers should have no client-side redelivery and directly throw an exception when consuming
the message to trigger the DLQ mechanism on the broker.

Send around 1000 messages with each producer in a loop.

After a few seconds you see the above mentioned SQLException in the ActiveMQ.log on level
WARN.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message