ritesh adval created AMQ-9504:
---------------------------------
Summary: activemq multikahadb persistence adapter with topic
wildcard filtered adapter and per destination filtered adapter causes broker
failure on restart
Key: AMQ-9504
URL: https://issues.apache.org/jira/browse/AMQ-9504
Project: ActiveMQ Classic
Issue Type: Bug
Components: Broker
Affects Versions: 6.1.2, 5.18.4
Reporter: ritesh adval
Fix For: 5.18.4
when using Multikahadb persistence adapter per documentation :
[https://activemq.apache.org/components/classic/documentation/kahadb] it shows
that you can use multiple filteredPersistenceAdapters but this does not work if
you have two filtered adapter where one is using wildcard match for topics (or
even a specific topic) and second filtered adapter using per destination
filtered adapter. The idea being you want to use one
kahadb instance for all the topics and per destination kahadb instance for all
other destinations like queues. Something like this, note jmx needs to be
enabled :
{code:java}
<broker useJmx="true" brokerName="broker">
<persistenceAdapter>
<mKahaDB directory="${activemq.base}/data/kahadb">
<filteredPersistenceAdapters>
<!-- match all topics-->
<filteredKahaDB topic=">">
<usage>
<storeUsage limit="1g" />
</usage>
<persistenceAdapter>
<kahaDB journalMaxFileLength="32mb"/>
</persistenceAdapter>
</filteredKahaDB>
<!-- match all destinations kahaDB per destinations -->
<filteredKahaDB perDestination="true">
<persistenceAdapter>
<kahaDB journalMaxFileLength="32mb"/>
</persistenceAdapter>
</filteredKahaDB>
</filteredPersistenceAdapters>
</mKahaDB>
</persistenceAdapter>
</broker> {code}
With this setting it works for the first time when broker is started. But as
soon as you have atleast one topic created which uses wild card filtered
adapter and you restart the broker, then what happens is there are two
KahaDBPersistenceAdapter created one by the wildcard (">") topic filtered
adapter and another one by the second per destination filtered adapter, and so
second KahaDBPersistenceAdapter fails with below exception:
[INFO] Running org.apache.activemq.bugs.MultiKahaDBMultipleFilteredAdapterTest
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 16.20 s
<<< FAILURE! -- in
org.apache.activemq.bugs.MultiKahaDBMultipleFilteredAdapterTest
[ERROR]
org.apache.activemq.bugs.MultiKahaDBMultipleFilteredAdapterTest.testTopicWildcardAndPerDestinationFilteredAdapter
-- Time elapsed: 11.08 s <<< ERROR!
javax.management.InstanceAlreadyExistsException:
org.apache.activemq:type=Broker,brokerName=localhost,service=PersistenceAdapter,instanceName=KahaDBPersistenceAdapter[/mnt/c/Users/ritesh.adval/work/external-repos/activemq/activemq-unit-tests/target/activemq-data/mKahaDB/topic#3a#2f#2f#3e_Index_/mnt/c/Users/ritesh.adval/work/external-repos/activemq/activemq-unit-tests/target/activemq-data/mKahaDB/topic#3a#2f#2f#3e]
at
java.management/com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:436)
at
java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1855)
at
java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:955)
at
java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:890)
at
java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:320)
at
java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
at
org.apache.activemq.broker.jmx.ManagementContext.registerMBean(ManagementContext.java:415)
at
org.apache.activemq.broker.jmx.AnnotatedMBean.registerMBean(AnnotatedMBean.java:93)
at
org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter.doStart(KahaDBPersistenceAdapter.java:251)
at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55)
at
org.apache.activemq.store.kahadb.MultiKahaDBPersistenceAdapter.doStart(MultiKahaDBPersistenceAdapter.java:381)
at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55)
at
org.apache.activemq.broker.BrokerService.doStartPersistenceAdapter(BrokerService.java:681)
at
org.apache.activemq.broker.BrokerService.startPersistenceAdapter(BrokerService.java:663)
at
org.apache.activemq.broker.BrokerService.start(BrokerService.java:627)
at
org.apache.activemq.bugs.MultiKahaDBMultipleFilteredAdapterTest.testTopicWildcardAndPerDestinationFilteredAdapter(MultiKahaDBMultipleFilteredAdapterTest.java:76)
I have unit test for this and have a fix as well, attaching them with the issue.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)