Uploaded image for project: 'JBoss Transaction Manager'
  1. JBoss Transaction Manager
  2. JBTM-2735

EIS can't finish all participants of inflow in-doubt transaction after jvm crash

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Do
    • Icon: Critical Critical
    • None
    • 5.3.3.Final
    • JTA, JTS
    • None
    • Hide

      Crashrecovery testsuite could be used for reproducing the issue

      git clone http://git.app.eng.bos.redhat.com/git/jbossqe-eap-tests-transactions.git
      export JBOSS_HOME=...
      mvn clean verify -am -pl jbossts -DfailIfNoTests=false -fn -Djbossts.noJTS -Dtest=JcaInflowTransactionTestCase#jvmCrashAfterPrepare
      
      Show
      Crashrecovery testsuite could be used for reproducing the issue git clone http: //git.app.eng.bos.redhat.com/git/jbossqe-eap-tests-transactions.git export JBOSS_HOME=... mvn clean verify -am -pl jbossts -DfailIfNoTests= false -fn -Djbossts.noJTS -Dtest=JcaInflowTransactionTestCase#jvmCrashAfterPrepare

      When EIS RAR manages inflow transaction through XATerminator calls and jvm of TM is crashed at the start of commit phase then EIS can't recover all transaction participants.   

      Expected flow of the case would be

      1. enlist two participants of inflow transaction - that means TM manages subordinate transaction and accepts orders from EIS RAR
      2. TM receives commit order by EIS RAR call XATerminator.commit
      3. TM prepares both participants
      4. end phase prepares, start phase commits
      5. JVM crashes
      6. app server is restarted again
      7. EIS system repeats commit call as subordinate txn was not finished
      8. TM calls commit on both participants to finish the transaction

      This scenario has two troubles in current implementation

      If app server is restarted (after jvm crash happened) and EIS calls commit right after the start there is thrown XAER_RMFAIL when XATerminator.commit is called.

      For the commit have got a real effect on in-doubt transaciton there needs to be called recovery first. From that point in time the in-doubt inflow transaction is "available" for EIS RAR XATerminator.commit call. But there is another issue. Transaction was stopped with two participants prepared. But after commit is called from XATerminator only one XAResource is committed. The other one is left and forgotten. As the transaction itself is resolved as finished (thus removed from log store) there is no way to get to the remaining in-doubt participant - at least with help of jboss cli tooling.
      (The reason could be that both XA resources shared the xid, as discussed in other place, TM does not rights to change xid and it needs to reuse existing one provided by EIS to all the work)

              thjenkin@redhat.com Tom Jenkinson
              ochaloup@redhat.com Ondrej Chaloupka (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: