[MAGNOLIA-3995] Infinite loop when displaying a Downloaded List component in an inherited area Created: 05/Mar/12  Updated: 08/Mar/12  Resolved: 08/Mar/12

Status: Closed
Project: Magnolia
Component/s: templating
Affects Version/s: 4.5
Fix Version/s: 4.5.1

Type: Bug Priority: Critical
Reporter: Eric Hechinger Assignee: Philipp Bärfuss
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled

 Description   

Gote the following error when trying to display a Downloaded List component:

FreeMarker template error!

Method public info.magnolia.cms.util.SiblingsHelper info.magnolia.templating.functions.TemplatingFunctions.siblings(info.magnolia.jcr.util.ContentMap) throws javax.jcr.RepositoryException threw an exception when invoked on info.magnolia.templating.functions.TemplatingFunctions@78dc5f15 with arguments of types [info.magnolia.jcr.util.ContentMap,]
The problematic instruction:
----------
==> assignment: siblings=cmsfn.siblings(content) [on line 7, column 5 in templating-kit/components/macros/tocMarkup.ftl]
in user-directive tocMarkup [on line 7, column 1 in templating-kit/components/content/downloadList.ftl]
----------

Java backtrace for programmers:
----------
freemarker.template.TemplateModelException: Method public info.magnolia.cms.util.SiblingsHelper info.magnolia.templating.functions.TemplatingFunctions.siblings(info.magnolia.jcr.util.ContentMap) throws javax.jcr.RepositoryException threw an exception when invoked on info.magnolia.templating.functions.TemplatingFunctions@78dc5f15 with arguments of types [info.magnolia.jcr.util.ContentMap,]
at freemarker.ext.beans.OverloadedMethodModel.exec(OverloadedMethodModel.java:134)
at freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:93)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.Assignment.accept(Assignment.java:90)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:221)
at freemarker.core.Macro$Context.runMacro(Macro.java:172)
at freemarker.core.Environ

AND SERVER LOG:

java.lang.StackOverflowError
at org.apache.commons.collections.map.AbstractReferenceMap.purgeBeforeRead(AbstractReferenceMap.java:337)
at org.apache.commons.collections.map.AbstractReferenceMap.get(AbstractReferenceMap.java:229)
at org.apache.jackrabbit.core.ItemManager.retrieveItem(ItemManager.java:888)
at org.apache.jackrabbit.core.ItemManager.getItemData(ItemManager.java:374)
at org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:328)
at org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:622)
at org.apache.jackrabbit.core.NodeImpl$6.perform(NodeImpl.java:1710)
at org.apache.jackrabbit.core.NodeImpl$6.perform(NodeImpl.java:1705)
at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
at org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91)
at org.apache.jackrabbit.core.NodeImpl.getParent(NodeImpl.java:1705)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.getSiblingIndex(ConfiguredInheritance.java:197)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.compare(ConfiguredInheritance.java:186)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.compare(ConfiguredInheritance.java:179)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at info.magnolia.templating.inheritance.DefaultInheritanceContentDecorator.sortInheritedNodes(DefaultInheritanceContentDecorator.java:178)
at info.magnolia.jcr.inheritance.InheritanceContentDecorator$DestinationNodeInheritanceNodeWrapper.getNodes(InheritanceContentDecorator.java:317)
at info.magnolia.jcr.inheritance.InheritanceContentDecorator$DestinationNodeInheritanceNodeWrapper.getNodes(InheritanceContentDecorator.java:317)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.getSiblingIndex(ConfiguredInheritance.java:197)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.compare(ConfiguredInheritance.java:186)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.compare(ConfiguredInheritance.java:179)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at info.magnolia.templating.inheritance.DefaultInheritanceContentDecorator.sortInheritedNodes(DefaultInheritanceContentDecorator.java:178)
at info.magnolia.jcr.inheritance.InheritanceContentDecorator$DestinationNodeInheritanceNodeWrapper.getNodes(InheritanceContentDecorator.java:317)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.getSiblingIndex(ConfiguredInheritance.java:197)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.compare(ConfiguredInheritance.java:186)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.compare(ConfiguredInheritance.java:179)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at info.magnolia.templating.inheritance.DefaultInheritanceContentDecorator.sortInheritedNodes(DefaultInheritanceContentDecorator.java:178)
at info.magnolia.jcr.inheritance.InheritanceContentDecorator$DestinationNodeInheritanceNodeWrapper.getNodes(InheritanceContentDecorator.java:317)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.getSiblingIndex(ConfiguredInheritance.java:197)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.compare(ConfiguredInheritance.java:186)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.compare(ConfiguredInheritance.java:179)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at info.magnolia.templating.inheritance.DefaultInheritanceContentDecorator.sortInheritedNodes(DefaultInheritanceContentDecorator.java:178)
at info.magnolia.jcr.inheritance.InheritanceContentDecorator$DestinationNodeInheritanceNodeWrapper.getNodes(InheritanceContentDecorator.java:317)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.getSiblingIndex(ConfiguredInheritance.java:197)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.compare(ConfiguredInheritance.java:186)
at info.magnolia.rendering.template.configured.ConfiguredInheritance$NodeDepthComparator.compare(ConfiguredInheritance.java:179)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)



 Comments   
Comment by Eric Hechinger [ 06/Mar/12 ]

After some test, this component (Downloaded List) is working fine in the main content, but fails in the extra area.

Comment by Eric Hechinger [ 07/Mar/12 ]

Latested investigation

SiblingsHelper
node.getParent().getChildren(filter)

node: website:/demo-project/about/test/extras/extras1/0[mgnl:component]
filter: mgnl:component

DefaultContent.getChildren()
this.node.getNodes()

node: website:/demo-project/about/test/extras/extras1[mgnl:area]
filter: mgnl:component

**********
Step 1***)
**********
InheritanceContentDecorator.getNodes()

List<NodeIterator> nodes = new ArrayList<NodeIterator>();
Node current = getWrappedNode();
// current: /demo-project/about/test/extras/extras1

Iterator<Node> iterator = sources.iterator();
// sources: [node /demo-project/about/extras/extras1, node /demo-project/extras/extras1]

while (iterator.hasNext() && inheritsNodes(current))

{ current = iterator.next(); nodes.add(current.getNodes()); }

return super.wrapNodeIterator(sortInheritedNodes(getWrappedNode().getNodes(), nodes));
and with getWrappedNode().getNodes() --> call the same method 2 times

DefaultInheritanceContentDecorator.sortInheritedNodes()
Collections.sort( )
nodes:[node /demo-project/about/test/extras/extras1/MetaData, node /demo-project/about/test/extras/extras1/0]

NodeDepthComparator.compare()
getSiblingIndex()
nodes = node.getParent().getNodes()
with node: /demo-project/about/test/extras/extras1/0 or MetaDate who are InheritanceContentDecorator
node.getParent() recreate a /demo-project/about/test/extras/extras1 InheritenceContent
and then recale step 1***) (infinit loop)

Generated at Mon Feb 12 03:51:39 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.