[jboss-jira] [JBoss JIRA] (JBJCA-1244) LocalXAResourceImpl returns RBROLLBACK in certain scenarios which violate the XA specification
Tom Jenkinson (JIRA)
issues at jboss.org
Thu Jan 15 12:24:49 EST 2015
[ https://issues.jboss.org/browse/JBJCA-1244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13032853#comment-13032853 ]
Tom Jenkinson commented on JBJCA-1244:
--------------------------------------
Further information that is pertinent to the effect of this defect is if we consider the following pseudo code test case:
1. xar.start(xid)
2. conn.insert(foo)
3. xar.end(xid)
4. xar.commit(xid, true)
If a communication failure pre-commit or post-commit on the remote resource manager occurs then LocalXAResourceImpl will return RBROLLBACK which contravenes XA. It should return RMFAIL here.
If RBROLLBACK is returned this must evaluate to true but in the case of a comms issue on the return of the call then it would fail:
assertTrue(conn2.query(foo == null))
In more concrete terms this results in a critical defect on the CMR functionality of EAP as the error code of the XAR is used to dictate the remaining XAResources. Although it is accepted that RMFAIL if the commit failed in comms precommit would result in the rest of the XAR committing even though the CMR did not, this is a known effect of XA and JTA and the recovery manager is designed to detect this scenario and alert the user to the now determined heuristic outcome of the transaction.
> LocalXAResourceImpl returns RBROLLBACK in certain scenarios which violate the XA specification
> ----------------------------------------------------------------------------------------------
>
> Key: JBJCA-1244
> URL: https://issues.jboss.org/browse/JBJCA-1244
> Project: IronJacamar
> Issue Type: Bug
> Affects Versions: 1.0.30.Final
> Reporter: Tom Jenkinson
> Assignee: Jesper Pedersen
>
> The XA specification states the following about the RBROLLBACK error code for xa_commit():
> {quote}
> [XA_RB∗]
> The resource manager did not commit the work done on behalf of the transaction branch. Upon return, the resource manager has rolled back the branch’s work and has released all held resources. These values may be returned only if TMONEPHASE is set in flags:
> [XA_RBROLLBACK]
> The resource manager rolled back the transaction branch for an unspecified reason
> {quote}
> It is clear that the RBROLLBACK code may only be returned if the branch is known to have rolled back (and indeed if the onePhase flag is set to true).
> To cater for scenarios where the XAResource is not able to determine the outcome of the resource managers commit. In those scenarios the XA specification is clear that the only legal error code to return is:
> {quote}
> [XAER_RMFAIL]
> An error occurred that makes the resource manager unavailable.
> {quote}
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)
More information about the jboss-jira
mailing list