You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Heath Kesler (JIRA)" <ji...@apache.org> on 2013/04/16 22:29:16 UTC
[jira] [Commented] (AMQ-4239) Possible Race Condition in
FilePendingMessageCursor when sending messages quickly
[ https://issues.apache.org/jira/browse/AMQ-4239?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13633306#comment-13633306 ]
Heath Kesler commented on AMQ-4239:
-----------------------------------
Joseph, do you have a test that exercises this?
> Possible Race Condition in FilePendingMessageCursor when sending messages quickly
> ---------------------------------------------------------------------------------
>
> Key: AMQ-4239
> URL: https://issues.apache.org/jira/browse/AMQ-4239
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker
> Affects Versions: 5.7.0
> Environment: OS : CentOS release 6.3 (Final)
> KERNEL : 2.6.32-279.el6.x86_64
> CPU : Intel(R) Xeon(R) CPU X3470 @ 2.93GHz
> CPU COUNT : 8
> CPU TYPE : x86_64
> RAM : 32 GB
> Manufacturer : Dell Inc.
> Model : PowerEdge R310
> BIOS Version : 1.8.2
> Reporter: Joseph Chang
> Labels: broker, filependingmessagecursor, kahaDB, persistence, queue, send
>
> When sending persistent messages extremely quickly, we often see the following stack trace.
> Broker Persistence is turned on, but not using KahaDB. Instead, using JDBC Persistence (MySQL). KahaDB is commented out on the xml configuration file.
> Reading through source, seems like the Kaha engine is still used for temporary storage of pending messages (/data/**/tmp_storage). However, in reading through code, seems like the "loaded" member variable is not intialized in time, causing this stack to be thrown.
> Any help appreciated, simply gums up our logging, and the exceptions make it back to the client.
> [04 Dec 2012 08:02:08] [scheduler_Worker-2] 36391186 ERROR
> (com.ms.jms.publisher.BaseMessagePublisher:143) -
> java.lang.IllegalStateException: TheListIndex is not loaded
> javax.jms.JMSException: java.lang.IllegalStateException: TheListIndex
> is not loaded
> at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)
> at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1377)
> at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1305)
> at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1795)
> at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:277)
> at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:212)
> at org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:269)
> at org.springframework.jms.connection.CachedMessageProducer.send(CachedMessageProducer.java:121)
> at com.ms.jms.publisher.BaseMessagePublisher.talker(BaseMessagePublisher.java:133)
> at com.ms.jms.publisher.BaseMessagePublisher.sendMessage(BaseMessagePublisher.java:63)
> at com.ms.mscm.bus.ClientBasedMessagePublisher.sendMessage(ClientBasedMessagePublisher.java:169)
> at com.ms.cart.ScheduledCartProcessor.checkout(ScheduledCartProcessor.java:101)
> at com.ms.cart.ScheduledCartJob.doExecuteInternal(ScheduledCartJob.java:63)
> at com.ms.cart.ScheduledCartJob.executeInternal(ScheduledCartJob.java:50)
> at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
> at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
> at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
> Caused by: java.lang.RuntimeException:
> java.lang.IllegalStateException: TheListIndex is not loaded
> at org.apache.activemq.broker.region.cursors.FilePendingMessageCursor.tryAddMessageLast(FilePendingMessageCursor.java:239)
> at org.apache.activemq.broker.region.cursors.FilePendingMessageCursor.addMessageLast(FilePendingMessageCursor.java:202)
> at org.apache.activemq.broker.region.Queue.sendMessage(Queue.java:1669)
> at org.apache.activemq.broker.region.Queue.doMessageSend(Queue.java:785)
> at org.apache.activemq.broker.region.Queue.send(Queue.java:717)
> at org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:407)
> at org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:503)
> at org.apache.activemq.broker.jmx.ManagedRegionBroker.send(ManagedRegionBroker.java:311)
> at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129)
> at org.apache.activemq.broker.CompositeDestinationBroker.send(CompositeDestinationBroker.java:96)
> at org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:317)
> at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129)
> at org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:135)
> at org.apache.activemq.broker.TransportConnection.processMessage(TransportConnection.java:450)
> at org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:680)
> at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:294)
> at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:152)
> at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
> at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
> at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:256)
> at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
> at org.apache.activemq.transport.nio.NIOTransport.serviceRead(NIOTransport.java:138)
> at org.apache.activemq.transport.nio.NIOTransport$1.onSelect(NIOTransport.java:69)
> at org.apache.activemq.transport.nio.SelectorSelection.onSelect(SelectorSelection.java:94)
> at org.apache.activemq.transport.nio.SelectorWorker$1.run(SelectorWorker.java:119)
> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:662)
> Caused by: java.lang.IllegalStateException: TheListIndex is not loaded
> at org.apache.kahadb.index.ListIndex.assertLoaded(ListIndex.java:301)
> at org.apache.kahadb.index.ListIndex.add(ListIndex.java:199)
> at org.apache.activemq.store.kahadb.plist.PList$2.execute(PList.java:84)
> at org.apache.kahadb.page.Transaction.execute(Transaction.java:769)
> at org.apache.activemq.store.kahadb.plist.PList.addLast(PList.java:82)
> at org.apache.activemq.broker.region.cursors.FilePendingMessageCursor.flushToDisk(FilePendingMessageCursor.java:438)
> at org.apache.activemq.broker.region.cursors.FilePendingMessageCursor.tryAddMessageLast(FilePendingMessageCursor.java:226)
> ... 27 more
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira