[
https://jira.jboss.org/browse/JBTM-748?page=com.atlassian.jira.plugin.sys...
]
Michael Musgrove commented on JBTM-748:
---------------------------------------
This race is now occasionally causing other BlackTie tests to fail. Looking up the
transaction status sometimes returns CosTransactions::Unavailable instead of
CORBA::OBJECT_NOT_EXIST. Because of the race condition in JBossTS between removing the
transaction and destroying the CORBA OTS Control object the client can still make calls on
the Control.
This issue is causing instability in the BlackTie CI test runs.
Calling rollback_only via OTS is throwing the wrong exception
-------------------------------------------------------------
Key: JBTM-748
URL:
https://jira.jboss.org/browse/JBTM-748
Project: JBoss Transaction Manager
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: JTS
Affects Versions: 4.11.0
Reporter: Michael Musgrove
Assignee: Andrew Dinn
Fix For: 4.13.0
Occasionally our BlackTie CI test run is failing when marking a transaction rollback only
because it is getting the wrong exception back from the transaction manager
16:11:10,296 WARN [arjLoggerI18N]
[com.arjuna.ats.arjuna.coordinator.TransactionReaper_18] - TransactionReaper::check
timeout for TX -53ee7cfb:10e2:4c0fa834:22ec in state RUN
[exec] 2010-06-09 16:11:10,296 [0x0000123c] WARN (TxLogControl :153 )
- rollback_only: INVALID_TRANSACTION minor: 20001
16:11:10,328 WARN [arjLoggerI18N]
[com.arjuna.ats.arjuna.coordinator.TransactionReaper_7] -
TransactionReaper::doCancellations worker Thread[Thread-18,5,jboss] successfully canceled
TX -53ee7cfb:10e2:4c0fa834:22ec
The second log message comes from the C client (the other two from the reaper). The CORBA
System exception major/minor code represents INVALID_TRANSACTION/INACTIVE_TRANSACTION
which according to the OTS spec is incorrect.
A look at the code shows a race condition between a BlackTie C client marking a
transaction abort only and the Transaction Reaper cancelling it (due to a timeout being
reached). The reaper eventually winds up in ControlImple.destroy() where the CORBA object
representing the transaction is destroyed. There is a window where the C client request
reaches JacORB just before the reaper has had a chance to destroy the CORBA object
resulting in the wrong exception being returned.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira