-
Bug
-
Resolution: Done
-
Blocker
-
3.6.0.Final, 4.0.0.Alpha1
When obtaining a path for a node, we have to walk up the ancestors and, for each, find the reference for the child within the parent node. Attached is a method call timing table that shows that several methods make this quite a bit more expensive than need be. In particular, a lot of time is spent inside the Matcher.matches(...) method within the NameValueFactory.create(...) method. And, when trying to find a child and its name within the parent, the LazyCachedNode.parentReferenceToSelf(WorkspaceCache) is getting the complete list of all child references via the LazyCachedNode.getChildReferences(...) method call.
Both of these need to be fixed.
org.modeshape.jcr.JcrNode.getPath()
org.modeshape.jcr.AbstractJcrNode.path()
org.modeshape.jcr.cache.document.LazyCachedNode.getPath(NodeCache)
org.modeshape.jcr.cache.document.LazyCachedNode.getSegment(WorkspaceCache)
org.modeshape.jcr.cache.document.LazyCachedNode.parentReferenceToSelf(WorkspaceCache)
org.modeshape.jcr.cache.document.LazyCachedNode.getChildReferences(NodeCache) <========
org.modeshape.jcr.cache.document.DocumentTranslator.getChildReferences(WorkspaceCache, Document)
org.modeshape.jcr.cache.document.DocumentTranslator.childReferencesListFromArray(List)
org.modeshape.jcr.cache.document.DocumentTranslator.childReferenceFrom(Object)
org.modeshape.jcr.value.basic.NameValueFactory.create(String, TextDecoder)
org.modeshape.jcr.value.basic.NameValueFactory.create(String, TextDecoder)
java.util.regex.Matcher.matches() <========
java.util.regex.Pattern.matcher(CharSequence)
org.modeshape.jcr.SystemNamespaceRegistry.getNamespaceForPrefix(String)
org.modeshape.jcr.value.basic.BasicName.<init>(String, String)
org.infinispan.schematic.internal.document.BasicDocument.getString(String)
org.modeshape.jcr.cache.ChildReference.<init>(NodeKey, Name, int)
org.modeshape.jcr.cache.document.ImmutableChildReferences.create(List)
org.modeshape.jcr.cache.document.ImmutableChildReferences$Medium.<init>(Iterable)
org.modeshape.common.collection.LinkedListMultimap.put(Object, Object)
org.modeshape.common.collection.LinkedListMultimap.addEntryFor(Object, Object)
java.util.HashMap.put(Object, Object)