Deadlocks in ConcurrentVersioningWithTransactionsTest
-----------------------------------------------------
Key: JCR-962
URL: https://issues.apache.org/jira/browse/JCR-962
Project: Jackrabbit
Issue Type: Bug
Components: core
Reporter: Bertrand Delacretaz
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.