[
https://issues.apache.org/jira/browse/AMQ-9532?focusedWorklogId=925541&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-925541
]
ASF GitHub Bot logged work on AMQ-9532:
---------------------------------------
Author: ASF GitHub Bot
Created on: 11/Jul/24 22:09
Start Date: 11/Jul/24 22:09
Worklog Time Spent: 10m
Work Description: Nikita-Shupletsov opened a new pull request, #1254:
URL: https://github.com/apache/activemq/pull/1254
Because destinations are parsed recursively, it's possible to trigger
`java.lang.StackOverflowError` if a destination has too many nodes.
the PR is converting the recursion to loops.
Ran `DestinationMapTest.java` to make sure the behavior of the class stays
the same. There is no need for additional testing in my opinion, because the
behavior is supposed to stay the same as it was before the change.
Issue Time Tracking
-------------------
Worklog Id: (was: 925541)
Remaining Estimate: 0h
Time Spent: 10m
> StackOverflowError on broker start if there are destinations with many modes
> ----------------------------------------------------------------------------
>
> Key: AMQ-9532
> URL: https://issues.apache.org/jira/browse/AMQ-9532
> Project: ActiveMQ Classic
> Issue Type: Bug
> Reporter: Nikita Shupletsov
> Priority: Minor
> Time Spent: 10m
> Remaining Estimate: 0h
>
> If the broker has limited -Xss value, and there is a destination with a lot
> of nodes(i.e. 1.2....200), the broker fails on restart with the following
> error:
>
> {{java.lang.RuntimeException: Failed to execute start task. Reason:
> org.springframework.beans.factory.BeanCreationException: Error creating bean
> with name 'activemq-broker' defined in class path resource [activemq.xml]:
> Invocation of init method failed; nested exception is
> java.lang.StackOverflowError}}
> {{at
> org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:91)}}
> {{at
> org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:63)}}
> {{at
> org.apache.activemq.console.command.ShellCommand.runTask(ShellCommand.java:154)}}
> {{at
> org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:63)}}
> {{at
> org.apache.activemq.console.command.ShellCommand.main(ShellCommand.java:104)}}
> {{at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)}}
> {{at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}}
> {{at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}}
> {{at java.lang.reflect.Method.invoke(Method.java:498)}}
> {{at org.apache.activemq.console.Main.runTaskClass(Main.java:262)}}
> {{at org.apache.activemq.console.Main.main(Main.java:115)}}
> {{Caused by: org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'activemq-broker' defined in class path resource
> [activemq.xml]: Invocation of init method failed; nested exception is
> java.lang.StackOverflowError}}
> {{at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1619)}}
> {{at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)}}
> {{at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)}}
> {{at
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)}}
> {{at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)}}
> {{at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)}}
> {{at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)}}
> {{at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:297)}}
> {{at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)}}
> {{at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:737)}}
> {{at
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)}}
> {{at
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)}}
> {{at
> org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:64)}}
> {{at
> org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:52)}}
> {{at
> org.apache.activemq.xbean.XBeanBrokerFactory$1.<init>(XBeanBrokerFactory.java:104)}}
> {{at
> org.apache.activemq.xbean.XBeanBrokerFactory.createApplicationContext(XBeanBrokerFactory.java:104)}}
> {{at
> org.apache.activemq.xbean.XBeanBrokerFactory.createBroker(XBeanBrokerFactory.java:67)}}
> {{at
> org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:71)}}
> {{at
> org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:54)}}
> {{at
> org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:87)}}
> {{... 10 more}}
> {{Caused by: java.lang.StackOverflowError}}
> {{at java.util.HashMap.putVal(HashMap.java:630)}}
> {{at java.util.HashMap.put(HashMap.java:613)}}
> {{at
> org.apache.activemq.filter.DestinationMapNode.getChildOrCreate(DestinationMapNode.java:81)}}
> {{at
> org.apache.activemq.filter.DestinationMapNode.add(DestinationMapNode.java:141)}}
> {{at
> org.apache.activemq.filter.DestinationMapNode.add(DestinationMapNode.java:141)}}
> {{at
> org.apache.activemq.filter.DestinationMapNode.add(DestinationMapNode.java:141)}}
> {{at
> org.apache.activemq.filter.DestinationMapNode.add(DestinationMapNode.java:141)}}
> {{at
> org.apache.activemq.filter.DestinationMapNode.add(DestinationMapNode.java:141)}}
> {{at
> org.apache.activemq.filter.DestinationMapNode.add(DestinationMapNode.java:141)}}
> {{at
> org.apache.activemq.filter.DestinationMapNode.add(DestinationMapNode.java:141)}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact