[ https://issues.apache.org/jira/browse/OAK-566?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marcel Reutegger updated OAK-566: --------------------------------- Attachment: OAK-566.patch Work-in-progress patch. Tests pass with this patch. It does not 100% guarantee that a commit is really valid because that would possibly mean to go back the entire commit history to validate a node from a rather old commit. Therefore I introduce an in-doubt period. After that period a commit is considered valid if it is not marked as failed without checking the commit history. Let me know what you think. > 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, OAK-566.patch > > > 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