Geronimo
  1. Geronimo
  2. GERONIMO-4471

improve heuristic exception handling in rollback when txmanager.commit is called

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.1.4, 2.2
    • Fix Version/s: 2.1.4, 2.2
    • Component/s: transaction manager
    • Security Level: public (Regular issues)
    • Labels:
      None

      Description

      Improve heuristic exception handling during rollback, when txmanager.commit is called by providing a rollbackResourcesDuringCommit method to throw appropriate heuristic exceptions. The logic is:

      1. If XAException.XA_HEURRB arisen from XAResource rollback, this means transaction has been heuristically rolled back, thus we just throw normal RollbackException.
      2. If XAException.XA_HEURMIX arisen from XAResource rollback, this means transaction has been heuristically rolled back and committed, thus we just throw HeuristicMixedException.
      3. If XAException.XA_HEURCOM arisen from XAResource rollback, this means transaction has been heuristically committed. In this case, if transaction has ever been committed (via other XAResources enlisted), then we throw HeuristicMixedException.
      4. Other XAExceptions, throw SystemExceptions.
      5. If no specific XAException or only XAException.XA_HEURRB, throw RollbackException.

      The rollbackResourcesDuringCommit method will be used during the commit context instead of the current rollbackResources method.

        Activity

        Hide
        Lin Sun added a comment -

        Remove stuff under "Also, during the internalPrepare method, it has:", because I saw more details on this from the OTS spec, in multiple places, such as:

        The resource can return VoteRollback under any circumstances, including not having
        any knowledge about the transaction (which might happen after a crash). If this
        response is returned, the transaction must be rolled back. Furthermore, the Transaction
        Service is not required to perform any additional operations on this resource.

        Returning VoteRollback to prepare
        A Resource that replies VoteRollback has no requirement to log. Once having
        replied, the Resource can return recoverable resources to their prior state and
        forget the transaction.

        Show
        Lin Sun added a comment - Remove stuff under "Also, during the internalPrepare method, it has:", because I saw more details on this from the OTS spec, in multiple places, such as: The resource can return VoteRollback under any circumstances, including not having any knowledge about the transaction (which might happen after a crash). If this response is returned, the transaction must be rolled back. Furthermore, the Transaction Service is not required to perform any additional operations on this resource. Returning VoteRollback to prepare A Resource that replies VoteRollback has no requirement to log. Once having replied, the Resource can return recoverable resources to their prior state and forget the transaction.
        Hide
        Lin Sun added a comment -

        see subversion commits tab

        Show
        Lin Sun added a comment - see subversion commits tab

          People

          • Assignee:
            Lin Sun
            Reporter:
            Lin Sun
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development