In one of the test scenario I am getting CommitFailedException [0] [1] . From just looking at the exception its hard to make out the root cause. I was able to get the actual conflict details only by debugging and accessing runtime state which is like
[ { ":conflict": { "deleteChangedNode": { "parentFolder": "{N\/A}" } } }, { "rep:ours": { "deleteChanged": { "parentFolder": "{N\/A}" } } } ] If this conflict information can be made available as part of exception then it would simplify debugging. Looking at the code ConflictValidator does not have access to the parent node which contains the 'conflict' and 'rep:ours' nodes. Probably that data can be collected at org.apache.jackrabbit.oak.spi.commit.EditorDiff#process method as at that level we can access the other sibling nodes (sibling to jcr:mixinTypes property). I can create a patch .... but not sure at what level and how to propogate the commit failed data. So how to debug CommitFailedException easily? Chetan Mehrotra [0] https://paste.apache.org/byc6 [1] Caused by: org.apache.jackrabbit.oak.api.CommitFailedException: OakState0001: Unresolved conflicts in / at org.apache.jackrabbit.oak.plugins.commit.ConflictValidator.failOnMergeConflict(ConflictValidator.java:82) at org.apache.jackrabbit.oak.plugins.commit.ConflictValidator.propertyChanged(ConflictValidator.java:59) at org.apache.jackrabbit.oak.spi.commit.CompositeEditor.propertyChanged(CompositeEditor.java:91) at org.apache.jackrabbit.oak.spi.commit.EditorDiff.propertyChanged(EditorDiff.java:93) at org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState.compareAgainstBaseState(ModifiedNodeState.java:355) at org.apache.jackrabbit.oak.spi.commit.EditorDiff.process(EditorDiff.java:52) at org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:129) at org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState.compareAgainstBaseState(ModifiedNodeState.java:373) at org.apache.jackrabbit.oak.spi.commit.EditorDiff.process(EditorDiff.java:52) at org.apache.jackrabbit.oak.spi.commit.EditorDiff.childNodeChanged(EditorDiff.java:129) at org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState.compareAgainstBaseState(ModifiedNodeState.java:373) at org.apache.jackrabbit.oak.spi.commit.EditorDiff.process(EditorDiff.java:52) at org.apache.jackrabbit.oak.spi.commit.EditorHook.processCommit(EditorHook.java:50) at org.apache.jackrabbit.oak.spi.commit.CompositeHook.processCommit(CompositeHook.java:59) at org.apache.jackrabbit.oak.spi.commit.CompositeHook.processCommit(CompositeHook.java:59) at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStoreBranch.optimisticMerge(SegmentNodeStoreBranch.java:110) at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStoreBranch.merge(SegmentNodeStoreBranch.java:201) at org.apache.jackrabbit.oak.core.AbstractRoot$2.run(AbstractRoot.java:247) at org.apache.jackrabbit.oak.core.AbstractRoot$2.run(AbstractRoot.java:243) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:337) at org.apache.jackrabbit.oak.core.AbstractRoot.commit(AbstractRoot.java:242) at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.save(SessionDelegate.java:269)