Details
-
Task
-
Resolution: Won't Do
-
Minor
-
None
-
4.16.4, 4.17.0.M1/5.0.0.M1
-
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.