Hi!

I've got reproducible deadlock in scenario like that: several threads 
create and retreive vertices with indexed field in one transaction (create 
one vertex and search for another, created before in another transaction)

One thread commits change and updates index

at 
java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock(ReentrantReadWriteLock.java:945)
at 
com.orientechnologies.orient.core.index.OIndexAbstract.acquireExclusiveLock(OIndexAbstract.java:967)
at 
com.orientechnologies.orient.core.index.OIndexAbstract.commit(OIndexAbstract.java:694)
at 
com.orientechnologies.orient.core.tx.OTransactionOptimistic$CommitIndexesCallback.run(OTransactionOptimistic.java:105)
at 
com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.commit(OAbstractPaginatedStorage.java:930)
at 
com.orientechnologies.orient.core.tx.OTransactionOptimistic.doCommit(OTransactionOptimistic.java:590)
at 
com.orientechnologies.orient.core.tx.OTransactionOptimistic.commit(OTransactionOptimistic.java:149)
at 
com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.commit(ODatabaseDocumentTx.java:2486)
at 
com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.commit(ODatabaseDocumentTx.java:2456)

And one accesses index

at 
java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:731)
at 
com.orientechnologies.common.concur.lock.OLockManager.acquireLock(OLockManager.java:98)
at 
com.orientechnologies.common.concur.lock.OLockManager.acquireLock(OLockManager.java:75)
at 
com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperationsManager.acquireReadLock(OAtomicOperationsManager.java:155)
at 
com.orientechnologies.orient.core.index.hashindex.local.OLocalHashTable.get(OLocalHashTable.java:314)
at 
com.orientechnologies.orient.core.index.engine.OHashTableIndexEngine.get(OHashTableIndexEngine.java:159)
at 
com.orientechnologies.orient.core.index.OIndexOneValue.get(OIndexOneValue.java:58)
at 
com.orientechnologies.orient.core.index.OIndexOneValue.get(OIndexOneValue.java:45)
at 
com.orientechnologies.orient.core.index.OIndexAbstractDelegate.get(OIndexAbstractDelegate.java:59)
at 
com.orientechnologies.orient.core.index.OIndexTxAwareOneValue.get(OIndexTxAwareOneValue.java:242)
at 
com.orientechnologies.orient.core.index.OIndexTxAwareOneValue.get(OIndexTxAwareOneValue.java:46)


Commiting thread stuck on rwLock, acquired by second thread, and it tries 
to lock atomic operation lock. I cant catch where it was acquired, but 
definitely first (commiting) thread is exclusive owner of that lock.

Deadlock occurs only if I try to create vertex and search for another in 
one transaction, everything works if one transaction is strictly reading 
and another writing

I guess I dont follow some usage pattern, but cant understand how it should 
work


-- 

--- 
You received this message because you are subscribed to the Google Groups 
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to