Well...
I couldn't reproduce the bug in my test case, and we deployed the new version on 2 live servers.
It seemed to work well, but after a few hours, one server went haywire! I might just be an unlucky coincidence, but I want to report it:
It started with the following exception:
Caused by: bitronix.tm.internal.BitronixSystemException: error logging status
at bitronix.tm.BitronixTransaction.setStatus(BitronixTransaction.java:283)
at bitronix.tm.BitronixTransaction.setStatus(BitronixTransaction.java:261)
at bitronix.tm.twopc.Preparer.prepare(Preparer.java:74)
at bitronix.tm.BitronixTransaction.commit(BitronixTransaction.java:176)
at bitronix.tm.BitronixTransactionManager.commit(BitronixTransactionManager.java:96)
at com.freiheit.parship.transactionsupport.DelegatingTransactionManagerInterceptor.commit(DelegatingTransactionManagerInterceptor.java:144)
at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1028)
... 174 more
Caused by: bitronix.tm.journal.CorruptedTransactionLogException: corrupted log found at position 21 (no record terminator found)
at bitronix.tm.journal.TransactionLogCursor.readLog(TransactionLogCursor.java:81)
at bitronix.tm.journal.TransactionLogCursor.readLog(TransactionLogCursor.java:46)
at bitronix.tm.journal.DiskJournal.collectDanglingRecords(DiskJournal.java:336)
at bitronix.tm.journal.DiskJournal.copyDanglingRecords(DiskJournal.java:308)
at bitronix.tm.journal.DiskJournal.swapJournalFiles(DiskJournal.java:271)
at bitronix.tm.journal.DiskJournal.log(DiskJournal.java:80)
at bitronix.tm.BitronixTransaction.setStatus(BitronixTransaction.java:272)
... 180 more
This exception occured a few times, after that, things really got messed up:
Caused by: java.sql.SQLException: error enlisting a JdbcConnectionHandle of a JdbcPooledConnection from datasource contacts2 in state ACCESSIBLE wrapping org.postgresql.xa.PGXAConnection@1a3b47f7 on Pooled connection wrapping physical connection org.postgresql.jdbc4.Jdbc4Connection@29f1b695
at bitronix.tm.resource.jdbc.JdbcConnectionHandle.enlistResource(JdbcConnectionHandle.java:63)
at bitronix.tm.resource.jdbc.JdbcConnectionHandle.prepareStatement(JdbcConnectionHandle.java:200)
at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:225)
at $Proxy4.prepareStatement(Unknown Source)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.prepareStatement(SqlExecutor.java:494)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:176)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
... 100 more
Caused by: bitronix.tm.internal.BitronixRollbackException: transaction has been marked as rollback only
at bitronix.tm.BitronixTransaction.enlistResource(BitronixTransaction.java:64)
at bitronix.tm.resource.common.TransactionContextHelper.enlist(TransactionContextHelper.java:255)
at bitronix.tm.resource.common.TransactionContextHelper.enlistInCurrentTransaction(TransactionContextHelper.java:48)
at bitronix.tm.resource.jdbc.JdbcConnectionHandle.enlistResource(JdbcConnectionHandle.java:59)
... 110 more
after a few of these, the server was completely done for. Every
DB request failed with:
Caused by: java.sql.SQLException: error enlisting a JdbcConnectionHandle of a Jd
bcPooledConnection from datasource user2 in state ACCESSIBLE wrapping org.postgr
esql.xa.PGXAConnection@7988df1b on Pooled connection wrapping physical connectio
n org.postgresql.jdbc4.Jdbc4Connection@8efa3f3
at bitronix.tm.resource.jdbc.JdbcConnectionHandle.enlistResource(JdbcCon
nectionHandle.java:61)
at bitronix.tm.resource.jdbc.JdbcConnectionHandle.prepareStatement(JdbcC
onnectionHandle.java:200)
at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$T
ransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:225
)
at $Proxy4.prepareStatement(Unknown Source)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.prepareStatement(SqlEx
ecutor.java:494)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecut
or.java:176)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecut
eQuery(GeneralStatement.java:205)
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQu
eryWithCallback(GeneralStatement.java:173)
... 60 more
Caused by: bitronix.tm.internal.BitronixSystemException: transaction timed out
at bitronix.tm.resource.common.TransactionContextHelper.enlistInCurrentT
ransaction(TransactionContextHelper.java:44)
at bitronix.tm.resource.jdbc.JdbcConnectionHandle.enlistResource(JdbcCon
nectionHandle.java:59)
... 70 more
As already mentioned, this didn't happen on the other server, however, that server did run the new version of BTM for a shorter period of time. After restarting, the new server refused to boot because the transaction log was corrupt (which didn't surprise me)
What is your impression? Is it likely that the new fix caused that?
I accidentally attached the wrong log file (it still shows the error, but also has some test logs that I added to BTM in it)
Use the attached file to get a correct representation of what it output when using the SVN trunk.