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

Refactor ParticipantCompletion recovery tests to remove duplicate rules

    XMLWordPrintable

Details

    • Task
    • Resolution: Won't Do
    • Minor
    • None
    • 4.16.4, 4.17.0.M1/5.0.0.M1
    • XTS
    • None

    Description

      The Byteman rules for the participant completion XTS recovery tests have many rules that are almost duplicates of each other. For example:

      The following rules in BACrashDuringCommit could be refactored into a single rule

      #####################################################################
      # Setup counter MultiParticipantParticipantCompletionParticipantCloseTest
      #
      RULE setup counter MultiParticipantParticipantCompletionParticipantCloseTest
      CLASS org.jboss.jbossts.xts.servicetests.test.ba.MultiParticipantParticipantCompletionParticipantCloseTest
      METHOD run()
      AT ENTRY
      IF TRUE
      DO debug("creating counter and rendezvous"),
         createCounter("closes", 3),
         createRendezvous("closes-complete", 2)
      ENDRULE
      #####################################################################
      # Setup counter MultiParticipantCoordinatorCompletionParticipantCloseTest
      #
      RULE setup counter MultiParticipantCoordinatorCompletionParticipantCloseTest
      CLASS org.jboss.jbossts.xts.servicetests.test.ba.MultiParticipantParticipantCompletionParticipantCloseAndExitTest
      METHOD run()
      AT ENTRY
      IF TRUE
      DO debug("creating counter and rendezvous"),
         createCounter("closes", 3),
         createRendezvous("closes-complete", 2)
      ENDRULE
      #####################################################################
      # Setup counter MultiServiceParticipantCompletionParticipantCloseTest
      #
      RULE setup counter MultiServiceParticipantCompletionParticipantCloseTest
      CLASS org.jboss.jbossts.xts.servicetests.test.ba.MultiServiceParticipantCompletionParticipantCloseTest
      METHOD run()
      AT ENTRY
      IF TRUE
      DO debug("creating counter and rendezvous"),
         createCounter("closes", 3),
         createRendezvous("closes-complete", 2)
      ENDRULE
      #####################################################################
      # Setup counter MultiServiceParticipantCompletionParticipantCloseAndExitTest
      #
      RULE setup counter MultiServiceParticipantCompletionParticipantCloseAndExitTest
      CLASS org.jboss.jbossts.xts.servicetests.test.ba.MultiServiceParticipantCompletionParticipantCloseAndExitTest
      METHOD run()
      AT ENTRY
      IF TRUE
      DO debug("creating counter and rendezvous"),
         createCounter("closes", 3),
         createRendezvous("closes-complete", 2)
      ENDRULE
      

      These can be re-factored in to a rule like this:

      RULE setup counter
      INTERFACE org.jboss.jbossts.xts.servicetests.test.XTSServiceTest
      METHOD run()
      AT ENTRY
      IF $0.getClass().getName().contains("ParticipantCompletionParticipant")
      DO debug("creating counter and rendezvous"),
         createCounter("closes", 3),
         createRendezvous("closes-complete", 2)
      ENDRULE
      

      This assumes that we have the same numbers for each use of:

         createCounter("closes", 3),
         createRendezvous("closes-complete", 2)
      

      Which is usually the case:

      grep -r createCounter\(\"closes\" .
      ./src/test/resources/scripts/BACrashDuringCommit.txt:   createCounter("closes", 3),
      ./src/test/resources/scripts/BACrashDuringCommit.txt:   createCounter("closes", 3),
      ./src/test/resources/scripts/BACrashDuringCommit.txt:   createCounter("closes", 3),
      ./src/test/resources/scripts/BACrashDuringCommit.txt:   createCounter("closes", 3),
      ./src/test/resources/scripts/BACrashDuringOnePhaseCommit.txt:   createCounter("closes", 1),
      ./src/test/resources/scripts/BASubordinateCrashDuringCommit.txt:   createCounter("closes", 3),
      ./src/test/resources/scripts/BASubordinateCrashDuringComplete.txt:   createCounter("closes", 3),
      ./target/test-classes/scripts/BACrashDuringCommit.txt:   createCounter("closes", 3),
      ./target/test-classes/scripts/BACrashDuringCommit.txt:   createCounter("closes", 3),
      ./target/test-classes/scripts/BACrashDuringCommit.txt:   createCounter("closes", 3),
      ./target/test-classes/scripts/BACrashDuringCommit.txt:   createCounter("closes", 3),
      ./target/test-classes/scripts/BACrashDuringOnePhaseCommit.txt:   createCounter("closes", 1),
      ./target/test-classes/scripts/BASubordinateCrashDuringCommit.txt:   createCounter("closes", 3),
      ./target/test-classes/scripts/BASubordinateCrashDuringComplete.txt:   createCounter("closes", 3),
      

      Maybe we just override the rule for the one exception. Ideas for what to do here are to be investigated.

      Also, the following similar rules are also present in this file:

      #####################################################################
      # Wait on Rendezvous before calling uba.close() on MultiServiceParticipantCompletionParticipantCloseTest
      # 
      RULE wait for closes MultiParticipantParticipantCompletionParticipantCloseTest
      CLASS org.jboss.jbossts.xts.servicetests.test.ba.MultiParticipantParticipantCompletionParticipantCloseTest
      METHOD run()
      AT CALL UserBusinessActivity.close()
      IF TRUE
      DO debug("waiting to call close"),
         rendezvous("closes-complete"),
         debug("rendezvous complete, calling close")
      ENDRULE
      #####################################################################
      # Wait on Rendezvous before calling uba.close() on MultiParticipantParticipantCompletionParticipantCloseAndExitTest
      #
      RULE wait for closes MultiParticipantParticipantCompletionParticipantCloseAndExitTest
      CLASS org.jboss.jbossts.xts.servicetests.test.ba.MultiParticipantParticipantCompletionParticipantCloseAndExitTest
      METHOD run()
      AT CALL UserBusinessActivity.close()
      IF TRUE
      DO debug("waiting to call close"),
         rendezvous("closes-complete"),
         debug("rendezvous complete, calling close")
      ENDRULE
      #####################################################################
      # Wait on Rendezvous before calling uba.close() on MultiServiceParticipantCompletionParticipantCloseTest
      #
      RULE wait for closes MultiServiceParticipantCompletionParticipantCloseTest
      CLASS org.jboss.jbossts.xts.servicetests.test.ba.MultiServiceParticipantCompletionParticipantCloseTest
      METHOD run()
      AT CALL UserBusinessActivity.close()
      IF TRUE
      DO debug("waiting to call close"),
         rendezvous("closes-complete"),
         debug("rendezvous complete, calling close")
      ENDRULE
      #####################################################################
      # Wait on Rendezvous before calling uba.close() on MultiServiceParticipantCompletionParticipantCloseAndExitTest
      #
      RULE wait for closes MultiServiceParticipantCompletionParticipantCloseAndExitTest
      CLASS org.jboss.jbossts.xts.servicetests.test.ba.MultiServiceParticipantCompletionParticipantCloseAndExitTest
      METHOD run()
      AT CALL UserBusinessActivity.close()
      IF TRUE
      DO debug("waiting to call close"),
         rendezvous("closes-complete"),
         debug("rendezvous complete, calling close")
      ENDRULE
      

      Which could be replaced with something like this:

      RULE wait for closes
      INTERFACE org.jboss.jbossts.xts.servicetests.test.XTSServiceTest
      METHOD run()
      AT CALL UserBusinessActivity.close()
      IF $0.getClass().getName().contains("ParticipantCompletionParticipant")
      DO debug("waiting to call close"),
         rendezvous("closes-complete"),
         debug("rendezvous complete, calling close")
      ENDRULE
      

      We could also re-factor these two rules out into a separate Byteman script and add it to all tests that need it.

      Attachments

        Activity

          People

            Unassigned Unassigned
            paul.robinson@redhat.com Paul Robinson
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: