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

Julian Reschke commented on JCR-2272:
-------------------------------------

More observations:

- concurrent import fails with different kinds of RepositoryExceptions, not 
only InvalidItemStateExceptions -- as, for this case, there shouldn't be any 
exceptions, it seems to be ok to allow all kinds of RepositoryExceptions for 
now, and address this problem later on

- exceptions sometimes happen before save() and thus are not accepted; I think 
that behavior is ok, so we should move addNode() into the try block

The most important issue continues to fix those exceptions which are caused by 
the attempt to add a node to the persistence although it is already there (on 
the PersistenceManager level); we should (a) change BundleDBPersistenceManager 
to produce a more useful exception in this case, and (b) in the test case 
follow the exception chain checking for an SQLIntegrityViolationException, 
treating that as a test failure.

Patch follow -- with that patch, we still see occasional failures, and we 
probably need to dig deeper.



> Errors during concurrent session import of nodes with same UUIDs
> ----------------------------------------------------------------
>
>                 Key: JCR-2272
>                 URL: https://issues.apache.org/jira/browse/JCR-2272
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core, xml
>    Affects Versions: 2.0-alpha8
>            Reporter: Tobias Bocanegra
>         Attachments: 2272.patch, JCR-2272.patch, JCR-2272_NPE.patch, 
> JCR-2272__Errors_during_concurrent_session_import_of_nodes_with_same_UUIDs.patch,
>  JCR-2272_revised.patch, JCR2272.Sep12.patch, JCR2272.Sep13.patch, 
> JCR2272.Sep13b.patch, JCR2272.Sep6.patch
>
>
> 21.08.2009 16:22:14 *ERROR* [Executor 0] ConnectionRecoveryManager: could not 
> execute statement, reason: The statement was aborted because it would have 
> caused a duplicate key value in a unique or primary key constraint or unique 
> index identified by 'SQL090821042140130' defined on 'DEFAULT_BUNDLE'., 
> state/code: 23505/20000 (ConnectionRecoveryManager.java, line 453)
> 21.08.2009 16:22:14 *ERROR* [Executor 0] BundleDbPersistenceManager: failed 
> to write bundle: 6c292772-349e-42b3-8255-7729615c67de 
> (BundleDbPersistenceManager.java, line 1212)
> ERROR 23505: The statement was aborted because it would have caused a 
> duplicate key value in a unique or primary key constraint or unique index 
> identified by 'SQL090821042140130' defined on 'DEFAULT_BUNDLE'.
>       at org.apache.derby.iapi.error.StandardException.newException(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.execute.IndexChanger.insertAndCheckDups(Unknown 
> Source)
>       at org.apache.derby.impl.sql.execute.IndexChanger.doInsert(Unknown 
> Source)
>       at org.apache.derby.impl.sql.execute.IndexChanger.insert(Unknown Source)
>       at org.apache.derby.impl.sql.execute.IndexSetChanger.insert(Unknown 
> Source)
>       at org.apache.derby.impl.sql.execute.RowChangerImpl.insertRow(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(Unknown 
> Source)
>       at org.apache.derby.impl.sql.execute.InsertResultSet.open(Unknown 
> Source)
>       at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown 
> Source)
>       at 
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(Unknown 
> Source)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.util.ConnectionRecoveryManager.executeStmtInternal(ConnectionRecoveryManager.java:371)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.util.ConnectionRecoveryManager.executeStmtInternal(ConnectionRecoveryManager.java:298)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.util.ConnectionRecoveryManager.executeStmt(ConnectionRecoveryManager.java:261)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.util.ConnectionRecoveryManager.executeStmt(ConnectionRecoveryManager.java:239)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.BundleDbPersistenceManager.storeBundle(BundleDbPersistenceManager.java:1209)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.putBundle(AbstractBundlePersistenceManager.java:709)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.storeInternal(AbstractBundlePersistenceManager.java:651)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.store(AbstractBundlePersistenceManager.java:527)
>       at 
> org.apache.jackrabbit.core.persistence.bundle.BundleDbPersistenceManager.store(BundleDbPersistenceManager.java:563)
>       at 
> org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedItemStateManager.java:724)
>       at 
> org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemStateManager.java:1101)
>       at 
> org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:351)
>       at 
> org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateManager.java:354)
>       at 
> org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:326)
>       at 
> org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemStateManager.java:326)
>       at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1098)
>       at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:925)
>       at 
> org.apache.jackrabbit.core.ConcurrentImportTest$1.execute(ConcurrentImportTest.java:73)
>       at 
> org.apache.jackrabbit.core.AbstractConcurrencyTest$Executor.run(AbstractConcurrencyTest.java:209)
>       at java.lang.Thread.run(Thread.java:637)

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to