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

Christopher L. Shannon commented on AMQ-5875:
---------------------------------------------

[~gtully],

How do you feel about returning the getDestinations() method behavior to how it 
was previously but adding another method to the PersistenceAdapter called 
something like getAllDestinations() that would return empty destinations as 
well?  Or do the opposite and add a method called getDestinations(Filter) and 
then a filter could be used for the case of a network bridge to filter out 
empty topics.

> 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
>             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)

Reply via email to