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.
