Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-17293

Using JTA transaction's node_name attribute is set to an old value after node-identifier is changed

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 7.3.0.CD18
    • 7.3.0.CD17
    • Transactions
    • None
    • Regression
    • +
    • Hide

      git clone git@gitlab.mw.lab.eng.bos.redhat.com:jbossqe-eap/tests-transactions.git
      get wildfly dist
      mvn clean verify -Djboss.dist=_PATH_TO_DIST_ -Dtest=TxDifferentNodeCrashRecoveryTestCase#prepareHalt -DfailIfNoTests=false -Djbossts.noJTS -Dts.jbossts1.node.identifier=vkcd -Dts.jbossts2.node.identifier=FdOu -Dts.jbossts3.node.identifier=GocW

      Show
      git clone git@gitlab.mw.lab.eng.bos.redhat.com:jbossqe-eap/tests-transactions.git get wildfly dist mvn clean verify -Djboss.dist=_ PATH_TO_DIST _ -Dtest=TxDifferentNodeCrashRecoveryTestCase#prepareHalt -DfailIfNoTests=false -Djbossts.noJTS -Dts.jbossts1.node.identifier=vkcd -Dts.jbossts2.node.identifier=FdOu -Dts.jbossts3.node.identifier=GocW

    Description

      We have following test scenario (3 servers) that fails:

      1. node-identifier of server1, 2 & 3 is set to 'vkcd', 'FdOu' and 'GocW' (ts.jbosstsX.node.identifier property)
      2. server2 is started, node-identifier is set to txdifferentnodeid and server2 is stopped
      3. server1 is started, node-identifier is set to txdifferentnodeid and server1 is reloaded
      4. server3 is running
      5. client call an EJB bean (where a transaction is started) on the server1
      6. the EJB sends JMS message to the server3 (broker)
      7. the EJB enlists dummy xa resource
      8. during 2PC the Server1 is halted when prepare on dummy xa resource is invoked
      9. we move server1 object store directory to the server2
      10. server2 is started
      11. the server2 is expected to rollback whole transaction

      Transaction is unfinished because server2 has not performed rollback.

      prepareHalt(org.jboss.as.test.jbossts.crashrec.differentnode.test.TxDifferentNodeCrashRecoveryTestCase)  Time elapsed: 810.354 sec  <<< FAILURE!
      java.lang.AssertionError: Some unfinished xids on messaging server - expected 0 but was 1
      	at org.junit.Assert.fail(Assert.java:88)
      	at org.jboss.as.test.jbossts.crashrec.differentnode.test.TxDifferentNodeCrashRecoveryTestCase.checkAfterTestExecution(TxDifferentNodeCrashRecoveryTestCase.java:792)
      	at org.jboss.as.test.jbossts.crashrec.differentnode.test.TxDifferentNodeCrashRecoveryTestCase.prepareHalt(TxDifferentNodeCrashRecoveryTestCase.java:565)
      

      In the beginning servers' node-identifier are set to some value (lets say A,B,C). Before test execution node-identifier of server1 and server2 is set to the same value, let's say X.

      I see in logs that the transaction's node_name is set to the old value (vkcd vs txdifferentnodeid in the example below) on server1. Thus the server2 has not performed rollback.

      See node_name
      Server1:

      2019-07-22 17:40:54,616 DEBUG [com.arjuna.ats.jta] (MSC service thread 1-5) Setting up node identifiers '[txdifferentnodeid]' for which recovery will be performed
      
      2019-07-22 17:41:11,931 TRACE [com.arjuna.ats.jta] (default task-2) XAResourceRecord.XAResourceRecord ( < formatId=131077, gtrid_length=32, bqual_length=36, tx_uid=0:ffff0a2804ed:26165251:5d35d902:3c, node_name=vkcd, branch_uid=0:ffff0a2804ed:26165251:5d35d902:46, subordinatenodename=null, eis_name=java:/JmsXA NodeId:05b492ae-ac97-11e9-a446-2016b912eaa8 >, XAResourceWrapperImpl@4158c7ec[xaResource=org.jboss.activemq.artemis.wildfly.integration.WildFlyActiveMQXAResourceWrapper@4a21a45f pad=false overrideRmValue=null productName=ActiveMQ Artemis productVersion=2.0 jndiName=java:/JmsXA NodeId:05b492ae-ac97-11e9-a446-2016b912eaa8] ), record id=0:ffff0a2804ed:26165251:5d35d902:47
      
      

      Server2:

      2019-07-22 17:41:15,397 DEBUG [com.arjuna.ats.jta] (MSC service thread 1-3) Setting up node identifiers '[txdifferentnodeid]' for which recovery will be performed
      
      2019-07-22 17:43:56,062 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) node name of < formatId=131077, gtrid_length=32, bqual_length=36, tx_uid=0:ffff0a2804ed:26165251:5d35d902:3c, node_name=vkcd, branch_uid=0:ffff0a2804ed:26165251:5d35d902:46, subordinatenodename=null, eis_name=forgot eis name for: 1 > is vkcd
      2019-07-22 17:43:56,062 DEBUG [com.arjuna.ats.jta] (Periodic Recovery) XAResourceOrphanFilter com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter voted ABSTAIN
      

      When does the scenario pass

      When I run the TS with

      -Dts.jbossts1.node.identifier=txdifferentnodeid -Dts.jbossts2.node.identifier=txdifferentnodeid
      

      the test passes (old and new node-identifier on both servers are same)

      When step 3 slightly differs:
      When restart is performed instead of reload op.
      Server1 is reloaded. If it is restarted, node name is set correctly to txdifferentnodeid

      tldr;
      The problem is that server1 set TX node name to old value after node identifier is changed and server is reloaded. If the server is restarted, everything is OK.

      flags and priorities
      7.2.0 / 7.3.0.CD16 behavior differs - test passes. Therefore I set regression flag and priority level to blocker.

      Attachments

        Issue Links

          Activity

            People

              ochaloup@redhat.com Ondrej Chaloupka (Inactive)
              istraka@redhat.com Ivan Straka
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: