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

Gary Tully reopened AMQ-5875:
-----------------------------
    Regression: Unit Test Broken

there is logic in a network bridge to recreate durable demand eagerly. It uses 
the getDestinations list to figure of there was demand in the past. So a topic 
with some durable subscribers.
It appears that it is now re-creating demand for topics that have no durables. 
Something needs to gate that, or the other use case needs a different fix.

Test that shows the problem in a not so obvious way:
org.apache.activemq.usecases.ThreeBrokerVirtualTopicNetworkTest#testNetworkVirtualTopic


This needs a little revisit - but it turns out there were some negative 
consequences :-)

> 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