[
https://issues.apache.org/jira/browse/OAK-855?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13739725#comment-13739725
]
Thomas Mueller commented on OAK-855:
------------------------------------
> Who is the direct caller?
The stack trace is:
{code}
KernelNodeState.getChildNodeCount(long) line: 274
ModifiedNodeState.getChildNodeCount(NodeState, Map<String,NodeState>, long)
line: 198
ModifiedNodeState.getChildNodeCount(long) line: 310
ModifiedNodeState(AbstractNodeState).equals(Object) line: 273
KernelNodeStoreBranch.setRoot(NodeState) line: 86
KernelRootBuilder.purge() line: 137
KernelRootBuilder.updated() line: 72
KernelNodeBuilder.updated() line: 48
KernelNodeBuilder(MemoryNodeBuilder).setProperty(PropertyState) line: 360
MutableTree.setProperty(PropertyState) line: 341
TreeUtil.autoCreateItems(Tree, Tree, Tree, String) line: 249
TreeUtil.addChild(Tree, String, String, Tree, String) line: 193
NodeDelegate.internalAddChild(Tree, String, String, Tree) line: 729
NodeDelegate.addChild(String, String) line: 645
NodeImpl$5.perform() line: 288
NodeImpl$5.perform() line: 1
SessionDelegate.perform(SessionOperation<T>) line: 139
NodeImpl<T>(ItemImpl<T>).perform(SessionOperation<U>) line: 97
NodeImpl<T>.addNode(String, String) line: 255
ManyChildrenIT.sizeTest() line: 54
{code}
> NodeState.equals is sometimes very slow
> ---------------------------------------
>
> Key: OAK-855
> URL: https://issues.apache.org/jira/browse/OAK-855
> Project: Jackrabbit Oak
> Issue Type: Improvement
> Components: core
> Reporter: Thomas Mueller
>
> The method NodeState.equals seems to be very slow sometimes, for example if a
> KernelNodeState is compared against a ModifiedNodeState. A recursive
> traversal is used in this case. I found this problem when running the
> integration tests (-PintegrationTesting). I guess it's specially a problem if
> there are many child nodes.
> I wonder if we could use a shortcut when comparing a ModifiedNodeState
> against a non-modified one: isn't by definition the ModifiedNodeState _never_
> equal to a non-modified one, unless there are no changes?
> When comparing two ModifiedNodeState objects (not sure if that's a common use
> case), then a simple optimization would also be possible.
> What's also not nice is: it seems multiple NodeState classes implement
> equals, but not hashCode. Instead of overriding the equals method, I wonder
> if we should use another mechanism.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira