activemq-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gary Tully (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AMQ-5875) Removing a destination when using mKahaDB can cause an IllegalStateException
Date Fri, 10 Jul 2015 15:11:04 GMT

    [ https://issues.apache.org/jira/browse/AMQ-5875?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14622424#comment-14622424
] 

Gary Tully commented on AMQ-5875:
---------------------------------

I think the root cause maybe is https://issues.apache.org/jira/browse/AMQ-2720 changing the
impl of getDestinations

> Removing a destination when using mKahaDB can cause an IllegalStateException
> ----------------------------------------------------------------------------
>
>                 Key: AMQ-5875
>                 URL: https://issues.apache.org/jira/browse/AMQ-5875
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.11.1
>            Reporter: Christopher L. Shannon
>            Assignee: Gary Tully
>             Fix For: 5.12.0
>
>         Attachments: MultiKahaDBDeletionTest.java
>
>
> This issue occurs when using multiKahaDB and a wild card destination.  The problem is
that with a wild card topic, multiple destinations can be attached to the same store.  If
one of the destinations is deleted and the other destinations are empty, the entire store
is deleted.  This causes an exception later on if trying to do something like subscribe to
a destination that wasn't deleted.  I've attached a test case to show this issue.  
> The problem seems to be that the removeMessageStore method in MultiKahaDBPersistenceAdapter
relies on adapter.getDestinations.isEmpty() to determine whether the store is eligible for
deleting.  Unfortunately, the getDestinations method in KahaDBStore excludes destinations
that are empty therefore the method doesn't return any destinations even though there is one
still attached to the store so the logic goes ahead and deletes the store.
> The stack trace from running against 5.12.0-SNAPSHOT is below:
> {noformat}
> java.lang.IllegalStateException: PageFile is not loaded
>         at org.apache.activemq.store.kahadb.disk.page.PageFile.assertLoaded(PageFile.java:811)
>         at org.apache.activemq.store.kahadb.disk.page.PageFile.tx(PageFile.java:304)
>         at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBTopicMessageStore.getMessageCount(KahaDBStore.java:866)
>         at org.apache.activemq.store.ProxyTopicMessageStore.getMessageCount(ProxyTopicMessageStore.java:140)
>         at org.apache.activemq.store.ProxyTopicMessageStore.getMessageCount(ProxyTopicMessageStore.java:140)
>         at org.apache.activemq.broker.region.cursors.TopicStorePrefetch.getStoreSize(TopicStorePrefetch.java:97)
>         at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.resetSize(AbstractStoreCursor.java:73)
>         at org.apache.activemq.broker.region.cursors.TopicStorePrefetch.<init>(TopicStorePrefetch.java:58)
>         at org.apache.activemq.broker.region.cursors.StoreDurableSubscriberCursor.add(StoreDurableSubscriberCursor.java:119)
>         at org.apache.activemq.broker.region.PrefetchSubscription.add(PrefetchSubscription.java:584)
>         at org.apache.activemq.broker.region.DurableTopicSubscription.add(DurableTopicSubscription.java:113)
>         at org.apache.activemq.broker.region.Topic.addSubscription(Topic.java:161)
>         at org.apache.activemq.broker.region.AbstractRegion.addConsumer(AbstractRegion.java:400)
>         at org.apache.activemq.broker.region.TopicRegion.addConsumer(TopicRegion.java:168)
>         at org.apache.activemq.broker.region.RegionBroker.addConsumer(RegionBroker.java:427)
>         at org.apache.activemq.broker.jmx.ManagedRegionBroker.addConsumer(ManagedRegionBroker.java:244)
>         at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:102)
>         at org.apache.activemq.advisory.AdvisoryBroker.addConsumer(AdvisoryBroker.java:107)
>         at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:102)
>         at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:102)
>         at org.apache.activemq.broker.MutableBrokerFilter.addConsumer(MutableBrokerFilter.java:107)
>         at org.apache.activemq.broker.TransportConnection.processAddConsumer(TransportConnection.java:667)
>         at org.apache.activemq.command.ConsumerInfo.visit(ConsumerInfo.java:348)
>         at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:334)
>         at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:188)
>         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:300)
>         at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
>         at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214)
>         at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)
>         at java.lang.Thread.run(Thread.java:745)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message