[
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