jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jukka Zitting (JIRA)" <j...@apache.org>
Subject [jira] Updated: (JCR-962) Deadlocks in ConcurrentVersioningWithTransactionsTest
Date Tue, 02 Oct 2007 10:02:50 GMT

     [ https://issues.apache.org/jira/browse/JCR-962?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Jukka Zitting updated JCR-962:
------------------------------

    Fix Version/s:     (was: 1.4)
                   1.3.2

Merged to the 1.3 branch in revision 581177.

> Deadlocks in ConcurrentVersioningWithTransactionsTest
> -----------------------------------------------------
>
>                 Key: JCR-962
>                 URL: https://issues.apache.org/jira/browse/JCR-962
>             Project: Jackrabbit
>          Issue Type: Bug
>          Components: jackrabbit-core
>            Reporter: Bertrand Delacretaz
>             Fix For: 1.3.2
>
>         Attachments: 10-threads-dump.txt, 100-threads-dump.txt, deadlocked-threads.txt,
JCR-962-ConcurrentVersioningWithTransactionsTest.patch, JCR-962-fix.patch
>
>
> Patch follows for a ConcurrentVersioningWithTransactionsTest, based on the existing ConcurrentVersioningTest
but using transactions around the versioning operations.
> On my macbook, running the test with CONCURRENCY = 100 and NUM_OPERATIONS = 100 causes
a deadlock after a few seconds, thread dumps follow.
> Note that I had to ignore StaleItemStateException (which is probably justified, due to
not locking stuff IIUC) to let the threads run long enough to show the problem.
> Running the test a few times showed the same locking pattern several times: some threads
are locked at line 87 (session.save(), no transaction) while others are at line 93 (transaction.commit()),
in testConcurrentCheckinInTransaction():
>     80    public void testConcurrentCheckinInTransaction() throws RepositoryException
{
>     81      runTask(new Task() {
>     82        public void execute(Session session, Node test) throws RepositoryException
{
>     83          int i = 0;
>     84          try {
>     85            Node n = test.addNode("test");
>     86            n.addMixin(mixVersionable);
>     87            session.save();
>     88            for (i = 0; i < NUM_OPERATIONS / CONCURRENCY; i++) {
>     89              final UserTransaction utx = new UserTransactionImpl(test.getSession());
>     90              utx.begin();
>     91              n.checkout();
>     92              n.checkin();
>     93              utx.commit();
>     94            }
>     95            n.checkout();
>     96          } catch (Exception e) {
>     97            final String threadName = Thread.currentThread().getName();
>     98            final Throwable deepCause = getLevel2Cause(e);
>     99            if(deepCause!=null && deepCause instanceof StaleItemStateException)
{
>    100              // ignore 
>    101            } else {
>    102              throw new RepositoryException(threadName + ", i=" + i + ":" + e.getClass().getName(),
e);
>    103            }
>    104          }
>    105        }
>    106      }, CONCURRENCY);
>    107    }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message