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

Michael Gottschalk updated AMQ-2161:
------------------------------------

    Attachment: activemq-error-async.log

Extract from the ActiveMQ log file with the exceptions. 

> Unmatched acknowledege Exception and duplicate received messages in XA 
> transaction with prefetch limit != 1
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2161
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2161
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.2.0
>         Environment: Ubuntu Linux 2.6.24-22
> Processor with 2 cores
> Java 1.6.0_02-b05
> Bitronix Transaction Manager 1.3.2
>            Reporter: Michael Gottschalk
>         Attachments: activemq-error-async.log
>
>
> I tried to read about 200000 messages from a queue. Reading was performed in 
> XA transactions in chunks of 1000 messages per transaction.
> After reading some messages (I almost never came above 100000 read messages), 
> an exception occured in the activemq log file (data/activemq.log).
> In my application, null was returned for the message. Reading of further 
> messages always returned null until a new transaction was opened.
> No exception was thrown and the transaction was not marked as rolled back.
> After that, the number of read messages in my application and the number of 
> dequeued messages I saw in the activemq JMX interface was often no longer in 
> sync. It seems to me that activemq was of the opinion that the transaction 
> was rolled back while my application was not.
> Another indication is that my application always gets one of the read 
> messages a second time some time after the incident.
> When I set the prefetchPolicy.all to 1, the problem seems to disappear. Then, 
> there are no more exceptions in the log file and a null message is never 
> returned.
> I also tried with prefetchPolicy.all=0, but that created a different problem: 
> there are no exceptions either, but after some time, the application hang 
> completely in the reader thread and never returned. I tried this only once, 
> but probably this should also be investigated, if there is no easy 
> explanation.
> I wrote a test case that demonstrates the bug (see attachment). It always 
> occured for 200000 messages, and almost always for 100000 messages. For 20000 
> messages, for example, the problem almost never occurs. For executing the 
> test, I first stopped the activemq server, deleted the data directory and 
> then restarted the server. After that, I executed the test, which first 
> writes all messages into a queue and then tries to read them back.
> The stacktrace from the activemq log file is attached.
> The configuration of the broker in my activemq.xml configuration file:
>     <broker xmlns="http://activemq.apache.org/schema/core"; 
> brokerName="localhost" dataDirectory="${activemq.base}/data" 
> persistent="true">
>         <destinationPolicy>
>             <policyMap>
>                 <policyEntries>
>                     <policyEntry queue=">" memoryLimit="2000mb"/>
>                     <policyEntry topic=">" memoryLimit="5mb">
>                     </policyEntry>
>                 </policyEntries>
>             </policyMap>
>         </destinationPolicy>
>         <managementContext>
>             <managementContext createConnector="false"/>
>         </managementContext>
>         <networkConnectors>
>         </networkConnectors>
>         <persistenceAdapter>
>             <amqPersistenceAdapter syncOnWrite="false" 
> directory="${activemq.base}/data" maxFileLength="20 mb"
>                                    indexBinSize="131072" 
> indexPageSize="128kb" />
>         </persistenceAdapter>
>         <sslContext>
>             <sslContext keyStore="file:${activemq.base}/conf/broker.ks" 
> keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts" 
> trustStorePassword="password"/>
>         </sslContext>
>         <systemUsage>
>             <systemUsage>
>                 <memoryUsage>
>                     <memoryUsage limit="1000 mb"/>
>                 </memoryUsage>
>                 <storeUsage>
>                     <storeUsage limit="2 gb" name="foo"/>
>                 </storeUsage>
>                 <tempUsage>
>                     <tempUsage limit="2000 mb"/>
>                 </tempUsage>
>             </systemUsage>
>         </systemUsage>
>         <transportConnectors>
>             <transportConnector name="openwire" uri="tcp://localhost:61616" />
>         </transportConnectors>
>     </broker>
> The configuration of the transaction manager (from the Spring application 
> context):
> <bean id="btmConfig"
>         class="bitronix.tm.TransactionManagerServices" 
> factory-method="getConfiguration">
>         <property name="serverId" value="${processes.serverId}"/>
>         <property name="logPart1Filename" 
> value="${processes.bitronix.logPart1Filename}" />
>         <property name="logPart2Filename" 
> value="${processes.bitronix.logPart2Filename}" />
>         <property name="warnAboutZeroResourceTransaction" value="false" />
>     </bean>
>     
>     <bean id="bitronixTransactionManager" destroy-method="shutdown" 
> depends-on="btmConfig"
>         class="bitronix.tm.TransactionManagerServices" 
> factory-method="getTransactionManager">
>         <property name="transactionTimeout" value="600000"/>
>     </bean>
>     
>     <bean id="transactionManager" 
> class="org.springframework.transaction.jta.JtaTransactionManager">
>         <property name="transactionManager" ref="bitronixTransactionManager" 
> />
>         <property name="userTransaction" ref="bitronixTransactionManager" />
>         <property name="autodetectTransactionManager" value="false" />
>         <property name="autodetectUserTransaction" value="false" />
>         <property name="defaultTimeout" value="600000" />
>     </bean>
>     
>     <bean id="transactionTemplate"
>         class="org.springframework.transaction.support.TransactionTemplate">
>         <property name="transactionManager" ref="transactionManager" />
>     </bean>
> The queue definition from the applicationContext:
> <amq:queue id="loadtestqueue" physicalName="loadtestqueue" />

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to