jackrabbit-oak-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mete Atamel (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (OAK-566) MongoMK throws exception when adding nodes concurrently
Date Thu, 24 Jan 2013 09:07:13 GMT

    [ https://issues.apache.org/jira/browse/OAK-566?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13561512#comment-13561512
] 

Mete Atamel commented on OAK-566:
---------------------------------

Thought about this a little more. For a commit to be considered valid, I think it needs to:

1. Not have failed=true *and* 
2. Needs to in the commit chain from headRevision back to the commit's revision. In other
words, it needs to be reachable from headRevision using baseRevisionId chain. 

I think we ignored #2 in our recent performance fixes. We changed FetchCommitsAction to ignore
#2, we added FetchCommitAction that ignores #2 and we added FetchNodesActionNew that uses
FetchCommitAction. We did all this in order to not fetch all commits less than current revision
in every commit. We either need to change all of this back or come up with another way to
figure out real valid commits.
                
> 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

Mime
View raw message