Werner,
I downloaded Castor 0.9.7 and tried the test with that. I still get the same
problem.
Regards, Vishal.
[test]# java TestRelatedLock
Current Time:: 1125996045391
Sep 6, 2005 3:45:46 AM org.exolab.castor.jdo.engine.SQLEngine load
SEVERE: A fatal error occurred while loading CounterType using SQL: SELECT
COUNTER_TYPE.counter_type_desc FROM COUNTER_TYPE WHERE
COUNTER_TYPE.counter_type_id=? FOR UPDATE
java.sql.SQLException: Deadlock found when trying to get lock; Try restarting
transaction message from server: "Lock wait timeout exceeded; Try restarting
transaction"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2251)
at
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1586)
at org.exolab.castor.jdo.engine.SQLEngine.load(SQLEngine.java:1146)
at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:708)
at org.exolab.castor.persist.LockEngine.load(LockEngine.java:366)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:699)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:605)
at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:774)
at org.exolab.castor.persist.LockEngine.load(LockEngine.java:366)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:699)
at org.exolab.castor.persist.QueryResults.fetch(QueryResults.java:229)
at
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQueryImpl.java:584)
at
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQueryImpl.java:567)
at TestRelatedLock.main(TestRelatedLock.java:48)
PERSISTENCE EXCEPTION!!!
Current Time:: 1125996045391
org.exolab.castor.jdo.PersistenceException: Nested error:
java.sql.SQLException: Deadlock found when trying to get lock; Try restarting
transaction message from server: "Lock wait timeout exceeded; Try restarting
transaction": Deadlock found when trying to get lock; Try restarting
transaction message from server: "Lock wait timeout exceeded; Try restarting
transaction"
at org.exolab.castor.jdo.engine.SQLEngine.load(SQLEngine.java:1227)
at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:708)
at org.exolab.castor.persist.LockEngine.load(LockEngine.java:366)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:699)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:605)
at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:774)
at org.exolab.castor.persist.LockEngine.load(LockEngine.java:366)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:699)
at org.exolab.castor.persist.QueryResults.fetch(QueryResults.java:229)
at
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQueryImpl.java:584)
at
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQueryImpl.java:567)
at TestRelatedLock.main(TestRelatedLock.java:48)
Caused by: java.sql.SQLException: Deadlock found when trying to get lock; Try
restarting transaction message from server: "Lock wait timeout exceeded; Try
restarting transaction"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2251)
at
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1586)
at org.exolab.castor.jdo.engine.SQLEngine.load(SQLEngine.java:1146)
... 11 more
Caused by: java.sql.SQLException: Deadlock found when trying to get lock; Try
restarting transaction message from server: "Lock wait timeout exceeded; Try
restarting transaction"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2251)
at
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1586)
at org.exolab.castor.jdo.engine.SQLEngine.load(SQLEngine.java:1146)
at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:708)
at org.exolab.castor.persist.LockEngine.load(LockEngine.java:366)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:699)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:605)
at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:774)
at org.exolab.castor.persist.LockEngine.load(LockEngine.java:366)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:699)
at org.exolab.castor.persist.QueryResults.fetch(QueryResults.java:229)
at
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQueryImpl.java:584)
at
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQueryImpl.java:567)
at TestRelatedLock.main(TestRelatedLock.java:48)
Caused by: java.sql.SQLException: Deadlock found when trying to get lock; Try
restarting transaction message from server: "Lock wait timeout exceeded; Try
restarting transaction"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2251)
at
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1586)
at org.exolab.castor.jdo.engine.SQLEngine.load(SQLEngine.java:1146)
at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:708)
at org.exolab.castor.persist.LockEngine.load(LockEngine.java:366)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:699)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:605)
at org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:774)
at org.exolab.castor.persist.LockEngine.load(LockEngine.java:366)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.java:699)
at org.exolab.castor.persist.QueryResults.fetch(QueryResults.java:229)
at
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQueryImpl.java:584)
at
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQueryImpl.java:567)
at TestRelatedLock.main(TestRelatedLock.java:48)
java.lang.NullPointerException
at
org.exolab.castor.persist.ClassMolder.revertObject(ClassMolder.java:2513)
at
org.exolab.castor.persist.LockEngine.revertObject(LockEngine.java:860)
at
org.exolab.castor.persist.TransactionContext.rollback(TransactionContext.java:1793)
at
org.exolab.castor.jdo.engine.DatabaseImpl.rollback(DatabaseImpl.java:550)
at TestRelatedLock.main(TestRelatedLock.java:81)
java.lang.IllegalStateException: Transaction [EMAIL PROTECTED] does not hold
the read lock: CounterType/1/1 -/-!
at
org.exolab.castor.persist.LockEngine$TypeInfo.assure(LockEngine.java:1353)
at
org.exolab.castor.persist.LockEngine$TypeInfo.access$500(LockEngine.java:1057)
at
org.exolab.castor.persist.LockEngine.revertObject(LockEngine.java:859)
at
org.exolab.castor.persist.TransactionContext.rollback(TransactionContext.java:1793)
at
org.exolab.castor.jdo.engine.DatabaseImpl.rollback(DatabaseImpl.java:550)
at TestRelatedLock.main(TestRelatedLock.java:81)
GENERAL EXCEPTION!!!
Current Time:: 1125996045391
java.lang.NullPointerException
at
org.exolab.castor.jdo.engine.DatabaseImpl.getLockEngine(DatabaseImpl.java:223)
at
org.exolab.castor.jdo.engine.OQLQueryImpl.create(OQLQueryImpl.java:241)
at
org.exolab.castor.jdo.engine.DatabaseImpl.getOQLQuery(DatabaseImpl.java:438)
at TestRelatedLock.main(TestRelatedLock.java:38)
[test]#
-----Original Message-----
From: Werner Guttmann [mailto:[EMAIL PROTECTED]
Sent: Monday, September 05, 2005 8:41 PM
To: [email protected]
Subject: AW: [castor-dev] Having trouble with implementing a retrieve retry
Vishal,
as far as i remember, with Castor 0.9.7 (or earlier, but I am not sure) we have
introduced a patch for problems where in very specific situations locks didn't
get released. And as far as I can tell by the stack trace quoted below, this
might be the case in your example given. Can you please give either 0.9.7 or
0.9.9M1 a try, and see whether you still get the same problem ?
Werner
-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Gesendet: Montag, 05. September 2005 14:11
An: [email protected]
Betreff: [castor-dev] Having trouble with implementing a retrieve retry
Hi,
I have a requirement for my application that in some cases when we get a
retrieve timeout from the database we should retry the retrieve. We do
this by catching the PersistenceException from the call to query.execute
and retrying the retrieve after having rolled back and re-begun the
transaction (The test program and associated artifacts are attached).
This normally works just fine, but I have run into a situation where
when trying to retrieve an object that is related to another object, and
if the related object is locked by some other process, then I run into
fatal exceptions from Castor while trying to rollback the transaction
and my subsequent attempts to retry the retrieve fail.
Is this a know bug? I am currently using Castor 0.9.5.3 with MySQL
4.0.25.
Regards, Vishal.
e.g. I have a sample class CounterVar which has a reference to the class
CounterType. When trying to retrieve CounterVar (when I have locked the
corresponding CounterType object in another process) I get the following
exception during the rollback and subsequent retry:
[test]# java Test
Current Time:: 1125909746547
Sep 5, 2005 3:47:27 AM org.exolab.castor.jdo.engine.SQLEngine load
SEVERE: A fatal error occurred while loading CounterType using SQL:
SELECT COUNTER_TYPE.counter_type_desc FROM COUNTER_TYPE WHERE
COUNTER_TYPE.counter_type_id=? FOR UPDATE
PERSISTENCE EXCEPTION!!!
Current Time:: 1125909746547
java.sql.SQLException: Deadlock found when trying to get lock; Try
restarting transaction message from server: "Lock wait timeout exceeded;
Try restarting transaction"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2251)
at
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:158
6)
at
org.exolab.castor.jdo.engine.SQLEngine.load(SQLEngine.java:1049)
at
org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:708)
at
org.exolab.castor.persist.LockEngine.load(LockEngine.java:357)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.jav
a:651)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.jav
a:556)
at
org.exolab.castor.persist.ClassMolder.load(ClassMolder.java:795)
at
org.exolab.castor.persist.LockEngine.load(LockEngine.java:357)
at
org.exolab.castor.persist.TransactionContext.load(TransactionContext.jav
a:651)
at
org.exolab.castor.persist.QueryResults.fetch(QueryResults.java:229)
at
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQuer
yImpl.java:631)
at
org.exolab.castor.jdo.engine.OQLQueryImpl$OQLEnumeration.hasMore(OQLQuer
yImpl.java:614)
at Test.main(Test.java:48)
java.lang.NullPointerException
at
org.exolab.castor.persist.ClassMolder.revertObject(ClassMolder.java:2518
)
at
org.exolab.castor.persist.LockEngine.revertObject(LockEngine.java:861)
at
org.exolab.castor.persist.TransactionContext.rollback(TransactionContext
.java:1722)
at
org.exolab.castor.jdo.engine.DatabaseImpl.rollback(DatabaseImpl.java:546
)
at Test.main(Test.java:81)
java.lang.IllegalStateException: Transaction
[EMAIL PROTECTED] does not hold
the read lock: CounterType/1/1 -/-!
at
org.exolab.castor.persist.LockEngine$TypeInfo.assure(LockEngine.java:129
8)
at
org.exolab.castor.persist.LockEngine$TypeInfo.access$500(LockEngine.java
:1030)
at
org.exolab.castor.persist.LockEngine.revertObject(LockEngine.java:860)
at
org.exolab.castor.persist.TransactionContext.rollback(TransactionContext
.java:1722)
at
org.exolab.castor.jdo.engine.DatabaseImpl.rollback(DatabaseImpl.java:546
)
at Test.main(Test.java:81)
GENERAL EXCEPTION!!!
Current Time:: 1125909746547
java.lang.NullPointerException
at
org.exolab.castor.jdo.engine.DatabaseImpl.getLockEngine(DatabaseImpl.jav
a:202)
at
org.exolab.castor.jdo.engine.OQLQueryImpl.create(OQLQueryImpl.java:257)
at
org.exolab.castor.jdo.engine.DatabaseImpl.getOQLQuery(DatabaseImpl.java:
445)
at Test.main(Test.java:38)
[test]#
***************************************
How to run the attached program:
***************************************
After having done the setup (create DB etc) login into the DB and lock
the COUNTER_TYPE row (id=1 in this case):
mysql> begin;
mysql> select * from COUNTER_TYPE where COUNTER_TYPE_ID=1 for UPDATE;
Then execute the attached Test program. The retrieve will eventually
timeout (depending on the timeout value set in the DB). That is when the
errors are observed.
Confidentiality Notice
The information contained in this electronic message and any attachments to
this message are intended
for the exclusive use of the addressee(s) and may contain confidential or
privileged information. If
you are not the intended recipient, please notify the sender at Wipro or [EMAIL
PROTECTED] immediately
and destroy all copies of this message and any attachments.
-------------------------------------------------
If you wish to unsubscribe from this list, please
send an empty message to the following address:
[EMAIL PROTECTED]
-------------------------------------------------
Confidentiality Notice
The information contained in this electronic message and any attachments to
this message are intended
for the exclusive use of the addressee(s) and may contain confidential or
privileged information. If
you are not the intended recipient, please notify the sender at Wipro or [EMAIL
PROTECTED] immediately
and destroy all copies of this message and any attachments.
-------------------------------------------------
If you wish to unsubscribe from this list, please
send an empty message to the following address:
[EMAIL PROTECTED]
-------------------------------------------------