[jboss-svn-commits] JBL Code SVN: r36545 - in labs/jbosstm/trunk/ArjunaJTA/jta: tests/classes/com/hp/mwtests/ts/jta/recovery and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jan 18 06:37:52 EST 2011


Author: jhalliday
Date: 2011-01-18 06:37:52 -0500 (Tue, 18 Jan 2011)
New Revision: 36545

Modified:
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/RecoveryXids.java
   labs/jbosstm/trunk/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/RecoveryXidsUnitTest.java
Log:
Fix Xid recovery scanning. JBTM-823


Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/RecoveryXids.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/RecoveryXids.java	2011-01-18 09:22:09 UTC (rev 36544)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/RecoveryXids.java	2011-01-18 11:37:52 UTC (rev 36545)
@@ -115,23 +115,33 @@
         final int numScanN = (_scanN == null ? 0 : _scanN.length) ;
         final int numScanM = (_scanM == null ? 0 : _scanM.length) ;
         final int numScan = Math.min(numScanN, numScanM) ;
-        
+
         if (numScan == 0)
         {
             return null ;
         }
-        
-        final Vector<Xid> workingVector = new Vector<Xid>() ;
-        
-        for (int count = 0 ; count < numScan ; count++)
+
+        final List<Xid> workingList = new ArrayList<Xid>(numScanN) ;
+
+        for(int i = 0; i < numScanN; i++)
         {
-            if (XAHelper.sameXID(_scanN[count], _scanM[count]))
+            // JBTM-823 / JBPAPP-5195 : don't assume list order/content match.
+            // the list is (hopefully) small and we don't entirely trust 3rd party
+            // Xid hashcode behaviour, so we just do this the brute force way...
+            for(int j = 0; j < numScanM; j++)
             {
-                workingVector.add(_scanN[count]);
+                if (XAHelper.sameXID(_scanN[i], _scanM[j]))
+                {
+                    workingList.add(_scanN[i]);
+                    // any given id should be in _scanN only once, but _scanM may have dupls as
+                    // it's actually a combination of prev runs, per the array copy in nextScan.
+                    // we drop out here as we want each Xid only once in the return set:
+                    break;
+                }
             }
         }
-        
-        return workingVector.toArray(new Xid[workingVector.size()]);
+
+        return workingList.toArray(new Xid[workingList.size()]);
     }
 
     public final boolean isSameRM (XAResource xares)

Modified: labs/jbosstm/trunk/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/RecoveryXidsUnitTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/RecoveryXidsUnitTest.java	2011-01-18 09:22:09 UTC (rev 36544)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/RecoveryXidsUnitTest.java	2011-01-18 11:37:52 UTC (rev 36545)
@@ -70,7 +70,7 @@
         
         Object[] trans = rxids.toRecover();
         
-        assertEquals(trans.length, 2);
+        assertEquals(2, trans.length);
         assertEquals(trans[0], xids[0]);
         
         assertTrue(rxids.contains(xids[0]));



More information about the jboss-svn-commits mailing list