[ https://issues.apache.org/jira/browse/OAK-566?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13560534#comment-13560534 ]
Damien Obrist commented on OAK-566: ----------------------------------- bq. Not quite. The MongoMK implementation maintains a list of names for the child nodes. This means the commits do overlap, but don't necessarily conflict. This depends on the definition of conflict. See also the recent rebase discussion. Yes you are right, the commits in the test overlap in the sense that they all try to modify the list of child nodes of the root. In the above scenario, should Thread2 really consider node1 to be a valid child node of the root node? I mean, is commit1 really valid at that time? If the commit indeed is valid at that time, why can it be changed to invalid later on? > MongoMK throws exception when adding nodes concurrently > ------------------------------------------------------- > > Key: OAK-566 > URL: https://issues.apache.org/jira/browse/OAK-566 > Project: Jackrabbit Oak > Issue Type: Bug > Components: mongomk > Reporter: Damien Obrist > Priority: Minor > Attachments: MongoMKConcurrentAddTest.java > > > It seems that there is a problem in the MongoDB microkernel when lots of > threads try to commit new nodes concurrently. I have attached a JUnit test > which reproduces the error. The test creates 16 microkernels, each committing > two nodes in a separate thread. Some threads will throw an exception saying > that the node they're trying to commit already exists: > java.lang.RuntimeException: There's already a child node with name 'node6' > at > org.apache.jackrabbit.mongomk.impl.instruction.CommitCommandInstructionVisitor.visit(CommitCommandInstructionVisitor.java:97) > at > org.apache.jackrabbit.mongomk.impl.instruction.AddNodeInstructionImpl.accept(AddNodeInstructionImpl.java:40) > at > org.apache.jackrabbit.mongomk.impl.command.CommitCommandNew.createMongoNodes(CommitCommandNew.java:155) > at > org.apache.jackrabbit.mongomk.impl.command.CommitCommandNew.execute(CommitCommandNew.java:97) > at > org.apache.jackrabbit.mongomk.impl.command.CommitCommandNew.execute(CommitCommandNew.java:1) > at > org.apache.jackrabbit.mongomk.impl.command.DefaultCommandExecutor.execute(DefaultCommandExecutor.java:38) > at > org.apache.jackrabbit.mongomk.impl.MongoNodeStore.commit(MongoNodeStore.java:110) > at > org.apache.jackrabbit.mongomk.impl.MongoMicroKernel.commit(MongoMicroKernel.java:112) > ... 7 more > This cannot be the case however, as the nodes added by the different threads > do not overlap / conflict. No exceptions are thrown if setting the number of > threads to some lower number, but I have observed that in this case the > problem still exists when trying to add a larger number of nodes (more than > just 2). -- 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