You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Dmitry (JIRA)" <ji...@apache.org> on 2019/03/21 16:00:00 UTC

[jira] [Created] (OAK-8158) DuplicateKeyException

Dmitry created OAK-8158:
---------------------------

             Summary: DuplicateKeyException
                 Key: OAK-8158
                 URL: https://issues.apache.org/jira/browse/OAK-8158
             Project: Jackrabbit Oak
          Issue Type: Bug
    Affects Versions: 1.10.2, 1.8.12, 1.4.24
            Reporter: Dmitry
         Attachments: oak-test.zip

Cannot migrate from 1.4.8 due to DuplicateKeyException

If nodes are created concurrently with the same content DuplicateKeyException is thown see stacktrace below.

 It seems to be some race condition because it does not happen 100% of the time.

Nodes that are created in parallel have the same content. If we change the content to be different for each node it runs successfully.
After comparing 1.4.8 and 1.8.11 versions, we discovered that the code at o.a.j.o.p.d.m.MongoBlobStore.storeBlock (..) has changed under the following revision

[https://svn.apache.org/viewvc?view=revision&revision=1828502]
 or github  [https://github.com/apache/jackrabbit-oak/commit/012e7529a6b8e34836f2fe22bcab3861b9d7192d#diff-1e1cd3443fc4e611259407cdf0ed6ebcL105]

in 1.4.8 DuplicateKeyException is ignored. in 1.8.11 you catch any MongoException and wrap it into IOException.
 Amit Jain explained to us that it is not necessary to catch DuplicateKeyException anymore, because upsert is used.

However, we now get the exception which is propagated to our layer that does not know anything about mongo exceptions.

we have created a small project that reproduces the issue, see attachment. [^oak-test.zip]

some additional info:

we use mongo 3.6 for testing 1.8.11 and our current implementation is based on mongo 3.2

we use mongo-java-driver 3.10.1 driver for 1.8.11 testing, and current driver version is 3.3.0

how we created db to be used by jackrabbit:  "C:\Program Files\MongoDB\Server\3.6\bin\mongo.exe" -u admin --authenticationDatabase admin test --eval "db.createUser(\{user:""test"",pwd:""test"",roles:[{role:""readWrite"",db:""test""},\{role:""clusterMonitor"",db:""admin""}]})"

stacktrace:

Caused by: java.io.IOException: Write failed with error code 11000 and error message 'E11000 duplicate key error collection: test.blobs index: _id_ dup key: \{ : "c3d471c99bd0a96030dc0f8b6951021b1333d4bcb11d8c9e16743a5d8a11cc60" }'
     at org.apache.jackrabbit.oak.plugins.document.mongo.MongoBlobStore.storeBlock(MongoBlobStore.java:103) ~[oak-store-document-1.8.11.jar:1.8.11]
     at org.apache.jackrabbit.oak.spi.blob.AbstractBlobStore.convertBlobToId(AbstractBlobStore.java:386) ~[oak-blob-1.8.11.jar:1.8.11]
     at org.apache.jackrabbit.oak.spi.blob.AbstractBlobStore.writeBlob(AbstractBlobStore.java:195) ~[oak-blob-1.8.11.jar:1.8.11]
     at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.createBlob(DocumentNodeStore.java:1865) ~[oak-store-document-1.8.11.jar:1.8.11]
     at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.createBlob(DocumentNodeStore.java:133) ~[oak-store-document-1.8.11.jar:1.8.11]
     at org.apache.jackrabbit.oak.core.MutableRoot.createBlob(MutableRoot.java:326) ~[oak-core-1.8.11.jar:1.8.11]
     at org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl.createBinaryValue(ValueFactoryImpl.java:296) ~[oak-store-spi-1.8.11.jar:1.8.11]
     at org.apache.jackrabbit.oak.plugins.value.jcr.ValueFactoryImpl.createBinary(ValueFactoryImpl.java:288) ~[oak-store-spi-1.8.11.jar:1.8.11]
     ... 40 more



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)