[jboss-svn-commits] JBL Code SVN: r11688 - in labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna: classes/com/arjuna/ats/internal/arjuna/coordinator and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri May 4 14:13:04 EDT 2007


Author: kevin.conner at jboss.com
Date: 2007-05-04 14:13:04 -0400 (Fri, 04 May 2007)
New Revision: 11688

Modified:
   labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java
   labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java
   labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperTestCase.java
Log:
Fixed timeout tracking

Modified: labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java	2007-05-04 18:08:21 UTC (rev 11687)
+++ labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java	2007-05-04 18:13:04 UTC (rev 11688)
@@ -119,7 +119,7 @@
 		_transactions = null;
 	}
 
-	public final synchronized long checkingPeriod()
+	public final long checkingPeriod()
 	{
 		if (_dynamic)
 		{
@@ -272,7 +272,11 @@
 					}
 				}
 
-				_transactions.remove(e) ;
+                                synchronized(this)
+                                {
+                                    _timeouts.remove(e._control) ;
+                                    _transactions.remove(e) ;
+                                }
 			}
 			else
 			{
@@ -293,6 +297,15 @@
 		return _transactions.size();
 	}
 
+        /**
+         * Return the number of timeouts registered.
+         * @return The number of timeouts registered.
+         */
+        public final long numberOfTimeouts()
+        {
+                return _timeouts.size();
+        }
+
 	/**
 	 * timeout is given in seconds, but we work in milliseconds.
 	 */
@@ -315,16 +328,16 @@
 		if (timeout == 0)
 			return true;
 
-		ReaperElement e = new ReaperElement(control, timeout);
-
 		/**
 		 * Ignore if it's already in the list with a different timeout.
 		 * (This should never happen)
 		 */
-		if(_transactions.contains(e)) {
+                if (_timeouts.containsKey(control)) {
 			return false;
 		}
 
+                ReaperElement e = new ReaperElement(control, timeout);
+
 		synchronized (this)
 		{
 			TransactionReaper._lifetime += timeout;
@@ -348,8 +361,11 @@
 		 * Can release the lock because the collection is internally synchronized.
 		 */
 
-		_timeouts.put(control, new Integer(timeout));
-		return _transactions.add(e);
+                synchronized (this)
+                {
+                    _timeouts.put(control, e);
+                    return _transactions.add(e);
+                }
 	}
 
 	public final boolean remove(java.lang.Object control)
@@ -364,12 +380,14 @@
 		if (control == null)
 			return false;
 
-		Integer timeout = (Integer)_timeouts.get(control);
-		if(timeout == null) {
-			return false;
-		}
-		ReaperElement key = new ReaperElement((Reapable)control, timeout.intValue());
-		return _transactions.remove(key);
+                synchronized(this)
+                {
+                    ReaperElement key = (ReaperElement)_timeouts.remove(control);
+                    if(key == null) {
+                            return false;
+                    }
+                    return _transactions.remove(key);
+                }
 	}
 
 	/**
@@ -395,11 +413,14 @@
 			return 0;
 		}
 
-		Integer timeout = (Integer)_timeouts.get(control);
+		final ReaperElement reaperElement = (ReaperElement)_timeouts.get(control);
 
-		if(timeout == null) {
+                final Integer timeout ;
+		if(reaperElement == null) {
 			timeout = new Integer(0);
-		}
+		} else {
+		        timeout = new Integer(reaperElement._timeout) ;
+                }
 
 		tsLogger.arjLoggerI18N
 				.debug(
@@ -517,7 +538,7 @@
 	}
 
 	private SortedSet _transactions = Collections.synchronizedSortedSet(new TreeSet()); // C of ReaperElement
-	private Map _timeouts = Collections.synchronizedMap(new WeakHashMap()); // key = Reapable, value = Integer
+	private Map _timeouts = Collections.synchronizedMap(new HashMap()); // key = Reapable, value = ReaperElement
 
 	private long _checkPeriod = 0;
 

Modified: labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java	2007-05-04 18:08:21 UTC (rev 11687)
+++ labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java	2007-05-04 18:13:04 UTC (rev 11688)
@@ -79,19 +79,6 @@
 		_control = null;
 	}
 
-
-	public boolean equals(Object obj)
-	{
-		return (compareTo(obj) == 0);
-	}
-
-	public int hashCode()
-	{
-		int hashCode = _control.get_uid().hashCode();
-		hashCode ^= _absoluteTimeout;
-		return hashCode;
-	}
-
 	/**
 	 * Order by absoluteTimeout first, then by Uid.
 	 * This is required so that the set maintained by the TransactionReaper
@@ -104,10 +91,14 @@
 	{
 		ReaperElement other = (ReaperElement)o;
 
-                if(_control.get_uid().equals(other._control.get_uid())) {
+                if(_absoluteTimeout == other._absoluteTimeout) {
+                    if(_control.get_uid().equals(other._control.get_uid())) {
                         return 0;
-                } else if(_absoluteTimeout == other._absoluteTimeout) {
-			return (_control.get_uid().greaterThan(other._control.get_uid()) ? 1 : -1) ;
+			} else if (_control.get_uid().greaterThan(other._control.get_uid())) {
+				return 1;
+                    } else {
+				return -1;
+                    }
 		} else {
 			return (_absoluteTimeout > other._absoluteTimeout) ? 1 : -1;
 		}

Modified: labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperTestCase.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperTestCase.java	2007-05-04 18:08:21 UTC (rev 11687)
+++ labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperTestCase.java	2007-05-04 18:13:04 UTC (rev 11688)
@@ -63,41 +63,49 @@
 		sortedSet.add(reaperElement3);
 		sortedSet.add(reaperElement2);
 
-		assertTrue(sortedSet.first() == reaperElement3);
-		assertTrue(sortedSet.last() == reaperElement);
+		assertEquals(sortedSet.first(), reaperElement3);
+		assertEquals(sortedSet.last(), reaperElement);
 
 		// test insertion of timeout=0 is a nullop
 		assertTrue(reaper.insert(reapable, 0));
-		assertTrue(reaper.numberOfTransactions() == 0);
+		assertEquals(0, reaper.numberOfTransactions());
+                assertEquals(0, reaper.numberOfTimeouts());
 		assertFalse(reaper.remove(reapable));
 
 		// test that duplicate insertion fails
 		assertTrue(reaper.insert(reapable, 10));
 		assertFalse(reaper.insert(reapable, 10));
 		assertEquals(1, reaper.numberOfTransactions());
+                assertEquals(1, reaper.numberOfTimeouts());
 		assertTrue(reaper.remove(reapable));
 		assertEquals(0, reaper.numberOfTransactions());
+                assertEquals(0, reaper.numberOfTimeouts());
 
 		// test that timeout change fails
 		assertTrue(reaper.insert(reapable, 10));
 		assertFalse(reaper.insert(reapable, 20));
 		assertEquals(1, reaper.numberOfTransactions());
+                assertEquals(1, reaper.numberOfTimeouts());
                 assertEquals(10, reaper.getTimeout(reapable));
 		assertTrue(reaper.remove(reapable));
                 assertEquals(0, reaper.numberOfTransactions());
+                assertEquals(0, reaper.numberOfTimeouts());
 
 		// test reaping
 		reaper.insert(reapable, 1); // seconds
 		reaper.insert(reapable2, 5);
                 assertEquals(2, reaper.numberOfTransactions());
+                assertEquals(2, reaper.numberOfTimeouts());
 		reaper.check();
                 assertEquals(2, reaper.numberOfTransactions());
 		Thread.sleep(2*1000);
 		reaper.check();
                 assertEquals(1, reaper.numberOfTransactions());
+                assertEquals(1, reaper.numberOfTimeouts());
 		Thread.sleep(4*1000);
 		reaper.check();
                 assertEquals(0, reaper.numberOfTransactions());
+                assertEquals(0, reaper.numberOfTimeouts());
 
 	}
 




More information about the jboss-svn-commits mailing list