[ https://issues.apache.org/jira/browse/OAK-5405?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15800490#comment-15800490 ]
Ashish Chopra commented on OAK-5405: ------------------------------------ bq. Trees of this depths were never supported Sorry to barge in with a tangential query - is there a number/limit of tree-depth which we do claim to support? If we don't make such a claim, should we? > MutableTree might overflow the stack for very deep trees > -------------------------------------------------------- > > Key: OAK-5405 > URL: https://issues.apache.org/jira/browse/OAK-5405 > Project: Jackrabbit Oak > Issue Type: Improvement > Components: core > Reporter: Francesco Mari > Assignee: Francesco Mari > Priority: Minor > Fix For: 1.6 > > Attachments: OAK-5405-01.patch > > > The recursive nature of {{MutableTree}} might contribute to overflow the call > stack if the tree is excessively deep. Following is an extract of a stack > trace showing an occurrence of this problem in practice. > {noformat} > 16.12.2016 16:56:29.727 *ERROR* [0:0:0:0:0:0:0:1 [1481887589402] POST > /libs/wcm/core/content/reference.json HTTP/1.1] > org.apache.sling.engine.impl.SlingRequestProcessorImpl service: Uncaught > Throwable > java.lang.StackOverflowError: null > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.applyPendingMoves(MutableTree.java:360) > at > org.apache.jackrabbit.oak.core.MutableTree.beforeRead(MutableTree.java:334) > at > org.apache.jackrabbit.oak.core.MutableTree.getChild(MutableTree.java:160) > at > org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.getItem(SessionDelegate.java:444) > at > org.apache.jackrabbit.oak.jcr.session.SessionImpl.getItemInternal(SessionImpl.java:166) > at > org.apache.jackrabbit.oak.jcr.session.SessionImpl.access$400(SessionImpl.java:81) > at > org.apache.jackrabbit.oak.jcr.session.SessionImpl$3.performNullable(SessionImpl.java:228) > at > org.apache.jackrabbit.oak.jcr.session.SessionImpl$3.performNullable(SessionImpl.java:225) > at > org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.performNullable(SessionDelegate.java:243) > at > org.apache.jackrabbit.oak.jcr.session.SessionImpl.getItemOrNull(SessionImpl.java:225) > ... > at > org.apache.sling.jcr.resource.internal.helper.jcr.JcrItemResourceFactory.getItemOrNull(JcrItemResourceFactory.java:184) > at > org.apache.sling.jcr.resource.internal.helper.jcr.JcrItemResourceFactory.createResource(JcrItemResourceFactory.java:96) > at > org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.getResource(JcrResourceProvider.java:300) > at > org.apache.sling.resourceresolver.impl.providers.stateful.AuthenticatedResourceProvider.getResource(AuthenticatedResourceProvider.java:135) > at > org.apache.sling.resourceresolver.impl.helper.ResourceResolverControl.getResource(ResourceResolverControl.java:223) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getAbsoluteResourceInternal(ResourceResolverImpl.java:1067) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getResourceInternal(ResourceResolverImpl.java:688) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getResource(ResourceResolverImpl.java:642) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getResourceInternal(ResourceResolverImpl.java:699) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getResource(ResourceResolverImpl.java:642) > ... > at > org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:149) > at > org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:346) > at > org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:378) > at > org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:552) > at > org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44) > at > org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:77) > ... > {noformat} > This stack trace is caused by a piece of code that generates a path with more > that 130K components. Regardless that this use case shows a new level of > degeneration, we should evaluate the possibility to avoid this situation or > to report a better error message when this kind of exception occurs. -- This message was sent by Atlassian JIRA (v6.3.4#6332)