[jboss-svn-commits] JBL Code SVN: r21571 - in labs/jbosstm/trunk: ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Aug 15 11:52:56 EDT 2008
Author: jhalliday
Date: 2008-08-15 11:52:55 -0400 (Fri, 15 Aug 2008)
New Revision: 21571
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/ReaperWorkerThread.java
labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java
labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/transaction/Transaction.java
labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java
labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/coordinator/ArjunaTransactionImple.java
labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jta/TransactionManagerDelegate.java
labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jts/TransactionManagerDelegate.java
Log:
Added code to return transaction time to live for JBossAS integration. JBTM-371
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 2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TransactionReaper.java 2008-08-15 15:52:55 UTC (rev 21571)
@@ -67,7 +67,7 @@
* TransactionReaper::getTimeout for {0} returning {1}
* @message com.arjuna.ats.arjuna.coordinator.TransactionReaper_17
* [com.arjuna.ats.arjuna.coordinator.TransactionReaper_17] -
- * TransactionReaper::getRemainingTimeout for {0} returning {1}
+ * TransactionReaper::getRemainingTimeoutMillis for {0} returning {1}
* @message com.arjuna.ats.arjuna.coordinator.TransactionReaper_4
* [com.arjuna.ats.arjuna.coordinator.TransactionReaper_4] -
* TransactionReaper::check interrupting cancel in progress for {0}
@@ -857,62 +857,55 @@
}
}
- /**
+ /**
* Given the transaction instance, this will return the time left before the
* transaction is automatically rolled back if it has not been terminated.
*
* @param control
- * @return the remaining time in seconds.
+ * @return the remaining time in milliseconds.
*/
- public final int getRemainingTimeout (Object control)
+ public final long getRemainingTimeoutMills(Object control)
{
- if ((_transactions.size() == 0) || (control == null))
- {
- if (tsLogger.arjLogger.debugAllowed())
- {
- tsLogger.arjLogger.debug(DebugLevel.FUNCTIONS,
- VisibilityLevel.VIS_PUBLIC,
- FacilityCode.FAC_ATOMIC_ACTION,
- "TransactionReaper::getRemainingTimeout for " + control
- + " returning 0");
- }
+ if ((_transactions.size() == 0) || (control == null))
+ {
+ if (tsLogger.arjLogger.debugAllowed())
+ {
+ tsLogger.arjLogger.debug(DebugLevel.FUNCTIONS,
+ VisibilityLevel.VIS_PUBLIC,
+ FacilityCode.FAC_ATOMIC_ACTION,
+ "TransactionReaper::getRemainingTimeout for " + control
+ + " returning 0");
+ }
- return 0;
- }
+ return 0;
+ }
- final ReaperElement reaperElement = (ReaperElement)_timeouts.get(control);
- final Integer timeout;
+ final ReaperElement reaperElement = (ReaperElement)_timeouts.get(control);
+ long timeout = 0;
- if (reaperElement == null)
- {
- timeout = new Integer(0);
- }
- else
- {
- // units are in milliseconds at this stage.
+ if (reaperElement == null)
+ {
+ timeout = 0;
+ }
+ else
+ {
+ // units are in milliseconds at this stage.
+ timeout = reaperElement._absoluteTimeout - System.currentTimeMillis();
+ }
- long remainingTime = reaperElement._absoluteTimeout - System.currentTimeMillis();
- double timeInSeconds = Math.ceil(remainingTime/1000.0); // round up.
-
- if (timeInSeconds <= 0)
- timeInSeconds = 1;
-
- timeout = new Integer((int) remainingTime/1000); // convert back to seconds.
- }
-
if (tsLogger.arjLoggerI18N.isDebugEnabled()) {
- tsLogger.arjLoggerI18N
- .debug(
- DebugLevel.FUNCTIONS,
- VisibilityLevel.VIS_PUBLIC,
- FacilityCode.FAC_ATOMIC_ACTION,
- "com.arjuna.ats.arjuna.coordinator.TransactionReaper_17",
- new Object[]
- { control, timeout });
+ tsLogger.arjLoggerI18N
+ .debug(
+ DebugLevel.FUNCTIONS,
+ VisibilityLevel.VIS_PUBLIC,
+ FacilityCode.FAC_ATOMIC_ACTION,
+ "com.arjuna.ats.arjuna.coordinator.TransactionReaper_17",
+ new Object[]
+ { control, timeout });
}
- return timeout.intValue();
+ return timeout;
}
/**
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperWorkerThread.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperWorkerThread.java 2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperWorkerThread.java 2008-08-15 15:52:55 UTC (rev 21571)
@@ -1,20 +1,20 @@
/*
* JBoss, Home of Professional Open Source
- * Copyright 2007, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags.
* See the copyright.txt in the distribution for a
- * full listing of individual contributors.
+ * full listing of individual contributors.
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License, v. 2.1.
- * This program is distributed in the hope that it will be useful, but WITHOUT A
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License,
* v.2.1 along with this distribution; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
- *
+ *
* (C) 2006-2007,
* @author JBoss Inc.
*/
@@ -44,10 +44,10 @@
_theReaper = arg;
_shutdown = false;
}
-
+
/**
- * @message com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_1 [com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_1] - Thread {0} waiting for cancelled TXs
- * @message com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_2 [com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_2] - Thread {0} performing cancellations
+ * @message com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_1 [com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_1] - Thread {0} waiting for cancelled TXs
+ * @message com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_2 [com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkThread_2] - Thread {0} performing cancellations
*/
public void run ()
@@ -57,7 +57,7 @@
tsLogger.arjLogger.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
FacilityCode.FAC_ATOMIC_ACTION, "ReaperWorkerThread.run ()");
}
-
+
for (;;)
{
// wait for the reaper thread to queue some TXs for
@@ -67,7 +67,7 @@
{
tsLogger.arjLoggerI18N.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
FacilityCode.FAC_ATOMIC_ACTION,
- "com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_1",
+ "com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_1",
new Object[]{Thread.currentThread()});
}
@@ -84,7 +84,7 @@
{
tsLogger.arjLoggerI18N.debug(DebugLevel.FUNCTIONS, VisibilityLevel.VIS_PUBLIC,
FacilityCode.FAC_ATOMIC_ACTION,
- "com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_2",
+ "com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread_2",
new Object[]{Thread.currentThread()});
}
@@ -104,5 +104,5 @@
private TransactionReaper _theReaper;
private boolean _shutdown;
-
+
}
Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java 2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java 2008-08-15 15:52:55 UTC (rev 21571)
@@ -1868,6 +1868,10 @@
return _theTransaction.getTimeout();
}
+ public long getRemainingTimeoutMills() {
+ return TransactionReaper.transactionReaper().getRemainingTimeoutMills(_theTransaction);
+ }
+
public java.util.Map<Uid, String> getSynchronizations()
{
if (_theTransaction != null)
Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/transaction/Transaction.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/transaction/Transaction.java 2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/transaction/Transaction.java 2008-08-15 15:52:55 UTC (rev 21571)
@@ -62,5 +62,6 @@
Map<Uid, String> getSynchronizations();
Map<XAResource, TxInfo> getResources();
- int getTimeout();
+ int getTimeout(); // total lifetime set, in seconds
+ long getRemainingTimeoutMills(); // time remaining until possible expire, in ms. 0 if unknown.
}
Modified: labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java 2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java 2008-08-15 15:52:55 UTC (rev 21571)
@@ -47,6 +47,7 @@
import com.arjuna.ats.arjuna.coordinator.BasicAction;
import com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator;
+import com.arjuna.ats.arjuna.coordinator.TransactionReaper;
import com.arjuna.ats.jta.xa.*;
import com.arjuna.ats.jta.common.Configuration;
@@ -1842,6 +1843,10 @@
return _theTransaction.getTimeout();
}
+ public long getRemainingTimeoutMills() {
+ return TransactionReaper.transactionReaper().getRemainingTimeoutMills(_theTransaction.getControlWrapper());
+ }
+
public java.util.Map<Uid, String> getSynchronizations()
{
if (_theTransaction != null)
Modified: labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/coordinator/ArjunaTransactionImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/coordinator/ArjunaTransactionImple.java 2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/internal/jts/orbspecific/coordinator/ArjunaTransactionImple.java 2008-08-15 15:52:55 UTC (rev 21571)
@@ -2130,13 +2130,20 @@
if (TransactionReaper.transactionReaper() != null)
{
if (_propagateRemainingTimeout)
- context.timeout = TransactionReaper.transactionReaper().getRemainingTimeout(control);
- else
- context.timeout = TransactionReaper.transactionReaper().getTimeout(control);
- }
+ {
+ long timeInMills = TransactionReaper.transactionReaper().getRemainingTimeoutMills(control);
+ context.timeout = (int)(timeInMills/1000L);
+ }
+ else
+ {
+ context.timeout = TransactionReaper.transactionReaper().getTimeout(control);
+ }
+ }
else
- context.timeout = 0;
- }
+ {
+ context.timeout = 0;
+ }
+ }
control = null;
}
@@ -2343,7 +2350,7 @@
static boolean _checkedTransactions = false;
static boolean _propagateTerminator = false;
-
+
static boolean _propagateRemainingTimeout = true; // OTS 1.2 onwards supported this.
/**
@@ -2402,7 +2409,7 @@
if (propTerm.compareTo("YES") == 0)
_propagateTerminator = true;
}
-
+
String propRemainingTimeout = jtsPropertyManager.propertyManager.getProperty(com.arjuna.ats.jts.common.Environment.OTS_1_0_TIMEOUT_PROPAGATION);
if (propRemainingTimeout != null)
Modified: labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jta/TransactionManagerDelegate.java
===================================================================
--- labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jta/TransactionManagerDelegate.java 2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jta/TransactionManagerDelegate.java 2008-08-15 15:52:55 UTC (rev 21571)
@@ -68,7 +68,7 @@
* Get the time left before transaction timeout
*
* @param errorRollback throw an error if the transaction is marked for rollback
- * @return the remaining in the current transaction or -1
+ * @return the time (in ms) remaining in the current transaction or -1
* if there is no transaction
* @throws RollbackException if the transaction is marked for rollback and
* errorRollback is true
@@ -81,7 +81,7 @@
public long getTimeLeftBeforeTransactionTimeout(boolean errorRollback)
throws RollbackException
{
- // see JBAS-5081 and http://www.jboss.com/index.html?module=bb&op=viewtopic&t=132128
+ // see JBAS-5081, JBTM-371 and http://www.jboss.com/index.html?module=bb&op=viewtopic&t=132128
try
{
@@ -103,22 +103,12 @@
case Status.STATUS_ACTIVE:
case Status.STATUS_PREPARED:
case Status.STATUS_PREPARING:
- // TODO this should attempt to return an actual value (in millisecs), but we need transactionReaper
- // changes to do that so it will be in 4.4+ only, not 4.2.3.SP.
- // For AS 5.0, something along the lines of the block below will probably work, but we should
- // push the code down into the JTA/JTS rather than having it here. Talking direct to ArjunaCore
- // seems like a bit of a hack...
- /*
- try {
- BasicAction basicAction = ThreadActionData.currentAction();
- int remainingSeconds = TransactionReaper.transactionReaper(true).getRemainingTimeout(basicAction);
- if(remainingSeconds != 0) {
- return 1000*remainingSeconds;
- }
- } catch(Exception e) {
- e.printStackTrace();
+ com.arjuna.ats.jta.transaction.Transaction tx = (com.arjuna.ats.jta.transaction.Transaction)getTransaction();
+ if(tx != null) {
+ return tx.getRemainingTimeoutMills();
+ } else {
+ return 0;
}
- */
case Status.STATUS_NO_TRANSACTION:
default:
break;
Modified: labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jts/TransactionManagerDelegate.java
===================================================================
--- labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jts/TransactionManagerDelegate.java 2008-08-15 12:25:50 UTC (rev 21570)
+++ labs/jbosstm/trunk/atsintegration/classes/com/arjuna/ats/jbossatx/jts/TransactionManagerDelegate.java 2008-08-15 15:52:55 UTC (rev 21571)
@@ -77,8 +77,8 @@
public long getTimeLeftBeforeTransactionTimeout(boolean errorRollback)
throws RollbackException
{
- // see JBAS-5081 and http://www.jboss.com/index.html?module=bb&op=viewtopic&t=132128
-
+ // see JBAS-5081, JBTM-371 and http://www.jboss.com/index.html?module=bb&op=viewtopic&t=132128
+
try
{
switch(getStatus())
@@ -99,8 +99,12 @@
case Status.STATUS_ACTIVE:
case Status.STATUS_PREPARED:
case Status.STATUS_PREPARING:
- // TODO this should attempt to return an actual value (in millisecs), but we need transactionReaper
- // changes to do that so it will be in 4.4+ only, not 4.2.3.SP
+ com.arjuna.ats.jta.transaction.Transaction tx = (com.arjuna.ats.jta.transaction.Transaction)getTransaction();
+ if(tx != null) {
+ return tx.getRemainingTimeoutMills();
+ } else {
+ return 0;
+ }
case Status.STATUS_NO_TRANSACTION:
default:
break;
More information about the jboss-svn-commits
mailing list