Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OLockException On Index Cluster #1538

Closed
mikeosterlie opened this issue Jun 25, 2013 · 6 comments
Closed

OLockException On Index Cluster #1538

mikeosterlie opened this issue Jun 25, 2013 · 6 comments
Assignees
Milestone

Comments

@mikeosterlie
Copy link

We are running a performance test of Orient that acts like a stress test (doing many operations in sequence as fast as we can). For the tests that interact with classes that have indexes, we eventually run into an OLockException on cluster #1 (which is the index cluster).

We posted on the forum but got no response (https://groups.google.com/forum/?fromgroups#!topic/orient-database/RTBceLiDA9E), so as I believe it to be a bug we are creating an issue. The forum post has a main method that will run a number of test iterations that will eventually produce a similar error to the one our performance test generates (that particular error is detailed on the forum post).

My guess is that we are stressing the system so that updates to the index are causing reads to timeout. That is purely a guess, though.

The exception we are seeing is as follows:
com.orientechnologies.common.concur.lock.OLockException: Thread interrupted while waiting for resource '#1:7'
at com.orientechnologies.common.concur.lock.OLockManager.acquireLock(OLockManager.java:108)
at com.orientechnologies.common.concur.lock.OLockManager.acquireLock(OLockManager.java:71)
at com.orientechnologies.orient.core.storage.impl.local.OStorageLocal.updateRecord(OStorageLocal.java:1852)
at com.orientechnologies.orient.core.storage.impl.local.OStorageLocal.updateRecord(OStorageLocal.java:1174)
at com.orientechnologies.orient.core.db.raw.ODatabaseRaw.save(ODatabaseRaw.java:279)
at com.orientechnologies.orient.core.db.record.ODatabaseRecordAbstract.executeSaveRecord(ODatabaseRecordAbstract.java:776)
at com.orientechnologies.orient.core.tx.OTransactionNoTx.saveRecord(OTransactionNoTx.java:77)
at com.orientechnologies.orient.core.db.record.ODatabaseRecordTx.save(ODatabaseRecordTx.java:264)
at com.orientechnologies.orient.core.db.record.ODatabaseRecordTx.save(ODatabaseRecordTx.java:37)
at com.orientechnologies.orient.core.record.ORecordAbstract.save(ORecordAbstract.java:312)
at com.orientechnologies.orient.core.record.ORecordAbstract.save(ORecordAbstract.java:303)
at com.orientechnologies.orient.core.type.tree.provider.OMVRBTreeEntryDataProviderAbstract.save(OMVRBTreeEntryDataProviderAbstract.java:166)
at com.orientechnologies.orient.core.type.tree.provider.OMVRBTreeEntryDataProviderAbstract.save(OMVRBTreeEntryDataProviderAbstract.java:156)
at com.orientechnologies.orient.core.type.tree.OMVRBTreeEntryPersistent.save(OMVRBTreeEntryPersistent.java:185)
at com.orientechnologies.orient.core.type.tree.OMVRBTreePersistent.commitChanges(OMVRBTreePersistent.java:530)
at com.orientechnologies.orient.core.type.tree.OMVRBTreeDatabaseLazySave.lazySave(OMVRBTreeDatabaseLazySave.java:70)
at com.orientechnologies.orient.core.index.OIndexMVRBTreeAbstract.lazySave(OIndexMVRBTreeAbstract.java:579)
at com.orientechnologies.orient.core.index.OIndexMVRBTreeAbstract.flush(OIndexMVRBTreeAbstract.java:110)
at com.orientechnologies.orient.core.index.OIndexManagerProxy.flush(OIndexManagerProxy.java:97)
at com.orientechnologies.orient.core.index.OIndexManagerAbstract.flush(OIndexManagerAbstract.java:154)
at com.orientechnologies.orient.core.metadata.OMetadata.close(OMetadata.java:195)
at com.orientechnologies.orient.core.db.record.ODatabaseRecordAbstract.close(ODatabaseRecordAbstract.java:232)
at com.orientechnologies.orient.core.db.ODatabaseWrapperAbstract.close(ODatabaseWrapperAbstract.java:69)
at com.orientechnologies.orient.server.OClientConnection.close(OClientConnection.java:46)
at com.orientechnologies.orient.server.OClientConnectionManager.disconnect(OClientConnectionManager.java:216)
at com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.shutdown(ONetworkProtocolBinary.java:1463)
at com.orientechnologies.common.thread.OSoftThread.run(OSoftThread.java:50)
OrientDB release? 1.4.1

What steps will reproduce the problem?

  1. Start an OrientDB server
  2. Edit the url/username/password fields of Main.java to match the running instance (or adjust the db instance to match the given parameters).
  3. Compile and run the attached Main.java
@lvca
Copy link
Member

lvca commented Jun 26, 2013

How many concurrent clients/thread do you have? Are you using the remote connection, right?

@ghost ghost assigned lvca Jun 26, 2013
@mikeosterlie
Copy link
Author

The main performance test uses one connection per thread, and we start seeing the issue reliably when we get up to about 5 threads, though that changes depending on how many records we configure it to deal with. The code that was posted is a single thread/single connection but still produces the exception.

And yes, we are using a remote connection.

@lvca
Copy link
Member

lvca commented Jul 25, 2013

Please, can you retest it against 1.5.0-SNAPSHOT? If not I would like to fix this in 1.5

@lvca
Copy link
Member

lvca commented Jul 29, 2013

Ok, so I'm closing it. If the error persists please reopen/comment this.

@lvca lvca closed this as completed Jul 29, 2013
@mikeosterlie
Copy link
Author

We retested it and we're not seeing this issue. It's good to be closed.

@lvca
Copy link
Member

lvca commented Jul 29, 2013

Great!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants