[jboss-svn-commits] JBL Code SVN: r29093 - in labs/jbosstm/branches/JBOSSTS_4_2_3_GA_CP/ArjunaCore/arjuna/classes/com/arjuna/ats: internal/arjuna/coordinator and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Aug 27 08:02:08 EDT 2009
Author: jhalliday
Date: 2009-08-27 08:02:07 -0400 (Thu, 27 Aug 2009)
New Revision: 29093
Modified:
labs/jbosstm/branches/JBOSSTS_4_2_3_GA_CP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java
labs/jbosstm/branches/JBOSSTS_4_2_3_GA_CP/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java
Log:
backported reaper performance fixes to the CP branch. JBTM-614
Modified: labs/jbosstm/branches/JBOSSTS_4_2_3_GA_CP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_2_3_GA_CP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java 2009-08-27 11:46:12 UTC (rev 29092)
+++ labs/jbosstm/branches/JBOSSTS_4_2_3_GA_CP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java 2009-08-27 12:02:07 UTC (rev 29093)
@@ -348,7 +348,8 @@
_timeouts.put(control, e);
boolean rtn = _transactions.add(e);
- if(_dynamic)
+ // only wake reaper if new element inserted at head
+ if(_dynamic && _transactions.first() == e)
{
notify(); // force recalc of next wakeup time, taking into account the newly inserted element
}
Modified: labs/jbosstm/branches/JBOSSTS_4_2_3_GA_CP/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_2_3_GA_CP/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java 2009-08-27 11:46:12 UTC (rev 29092)
+++ labs/jbosstm/branches/JBOSSTS_4_2_3_GA_CP/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java 2009-08-27 12:02:07 UTC (rev 29093)
@@ -65,6 +65,9 @@
*/
_absoluteTimeout = timeout * 1000 + System.currentTimeMillis();
+
+ // add additional variation to distinguish instances created in the same millisecond.
+ _bias = getBias();
}
public void finalize()
@@ -92,13 +95,17 @@
ReaperElement other = (ReaperElement)o;
if(_absoluteTimeout == other._absoluteTimeout) {
- if(_control.get_uid().equals(other._control.get_uid())) {
- return 0;
+ if (_bias == other._bias) {
+ if(_control.get_uid().equals(other._control.get_uid())) {
+ return 0;
} else if (_control.get_uid().greaterThan(other._control.get_uid())) {
- return 1;
- } else {
- return -1;
- }
+ return 1;
+ } else {
+ return -1;
+ }
+ } else {
+ return (_bias > other._bias) ? 1 : -1;
+ }
} else {
return (_absoluteTimeout > other._absoluteTimeout) ? 1 : -1;
}
@@ -107,6 +114,23 @@
public Reapable _control;
public long _absoluteTimeout;
+ private int _bias;
+ // bias is used to distinguish/sort instances with the same
+ // _absoluteTimeoutMills as using Uid for this purpose is
+ // expensive. JBTM-611
+
+ private static int biasCounter = 0;
+
+ public static synchronized int getBias()
+ {
+ if(biasCounter >= 1000000-1) {
+ biasCounter = 0;
+ } else {
+ biasCounter++;
+ }
+ return biasCounter;
+ }
+
public int _timeout;
}
More information about the jboss-svn-commits
mailing list