[jboss-svn-commits] JBL Code SVN: r11687 - in labs/jbosstm/trunk/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:08:21 EDT 2007
Author: kevin.conner at jboss.com
Date: 2007-05-04 14:08:21 -0400 (Fri, 04 May 2007)
New Revision: 11687
Modified:
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java
labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperTestCase.java
Log:
Fixed timeout tracking
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java 2007-05-04 16:23:30 UTC (rev 11686)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java 2007-05-04 18:08:21 UTC (rev 11687)
@@ -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/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java 2007-05-04 16:23:30 UTC (rev 11686)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java 2007-05-04 18:08:21 UTC (rev 11687)
@@ -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/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperTestCase.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperTestCase.java 2007-05-04 16:23:30 UTC (rev 11686)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/reaper/ReaperTestCase.java 2007-05-04 18:08:21 UTC (rev 11687)
@@ -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