Infinite loop in Transaction.commit
721322Sep 8 2009 — edited Sep 9 2009Hi.
I’m using the pure java implementation of Berkeley DB je-3.3.75.jar.
My application uses transactions heavily. But sometimes it hangs on Berkeley DB operations such as ‘commit’ or ‘put’.
The hangs are quite rarely events. My application had been working for more than a month before the first hang.
I haven’t managed to write a test for reproducing the problem.
There is some java code how I use the Java Berkeley DB.
// Creating of Environment
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true);
envConfig.setTransactional(true);
envConfig.setTxnWriteNoSync(true);
Using transaction
Transaction txn = null;
txn = environment.beginTransaction(null, transactionConfig)
try {
txn = environment.beginTransaction(null, transactionConfig);
// Some operations
….
txn.commit();
} catch (DatabaseException e) {
if (txn != null)
txn.abort();
}
Please, take a look on a stack trace. I sent kill –QUIT to the process. It looks like a infinite loop. Other threads are locked because the current thread is locked in commit and can't unlock the rows which it holds.
"Thread-9" prio=10 tid=0x084ef800 nid=0x1d runnable
[0x71b7a000..0x71b7a9f0]
java.lang.Thread.State: RUNNABLE
at java.util.zip.Adler32.updateBytes(Native Method)
at java.util.zip.Adler32.update(Adler32.java:49)
at
com.sleepycat.je.log.LogEntryHeader.addPostMarshallingInfo(LogEntryHeader.
java:296)
at
com.sleepycat.je.log.LogManager.serialLogInternal(LogManager.java:508)
at
com.sleepycat.je.log.SyncedLogManager.serialLog(SyncedLogManager.java:41)
- locked <0x7b2d26b0> (a com.sleepycat.je.latch.Latch)
at com.sleepycat.je.log.LogManager.multiLog(LogManager.java:318)
at com.sleepycat.je.log.LogManager.log(LogManager.java:279)
at com.sleepycat.je.log.LogManager.log(LogManager.java:268)
at
com.sleepycat.je.log.LogManager.logForceFlush(LogManager.java:130)
at com.sleepycat.je.txn.Txn.logCommitEntry(Txn.java:773)
at com.sleepycat.je.txn.Txn.commit(Txn.java:603)
- locked <0x7b308c38> (a com.sleepycat.je.txn.Txn)
at com.sleepycat.je.txn.Txn.commit(Txn.java:498)
at com.sleepycat.je.Transaction.commit(Transaction.java:144)
at
db.cbrgw.cache.AbstractBerkelyDBStorage$TransactionWrapper.commit(Abstract
BerkelyDBStorage.java:210)
Regards,
Alexey.