[jboss-svn-commits] JBL Code SVN: r30848 - labs/jbosstm/branches/JBOSSTS_4_2_3_SP5_CP05_JBPAPP-3174/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Dec 29 01:55:28 EST 2009


Author: vicky.kak at jboss.com
Date: 2009-12-29 01:55:27 -0500 (Tue, 29 Dec 2009)
New Revision: 30848

Added:
   labs/jbosstm/branches/JBOSSTS_4_2_3_SP5_CP05_JBPAPP-3174/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java
   labs/jbosstm/branches/JBOSSTS_4_2_3_SP5_CP05_JBPAPP-3174/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java
Log:
Backport JBTM-300 and JBTM-301 for one off JBPAPP-3174.

Added: labs/jbosstm/branches/JBOSSTS_4_2_3_SP5_CP05_JBPAPP-3174/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_2_3_SP5_CP05_JBPAPP-3174/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java	                        (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_2_3_SP5_CP05_JBPAPP-3174/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java	2009-12-29 06:55:27 UTC (rev 30848)
@@ -0,0 +1,43 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, 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. 
+ * 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 
+ * 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, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2007,
+ * @author JBoss Inc.
+ */
+
+package com.arjuna.ats.internal.arjuna.recovery;
+
+import com.arjuna.ats.arjuna.AtomicAction;
+
+/**
+ * This class is a plug-in module for the recovery manager. This class is
+ * responsible for the removing ransaction status manager items that are too
+ * old.
+ */
+
+public class AtomicActionExpiryScanner extends ExpiredTransactionScanner
+{
+
+	public AtomicActionExpiryScanner()
+	{
+		super(_transactionType, _transactionType + "/Expired");
+	}
+
+	// 'type' within the Object Store for AtomicActions.
+	private static final String _transactionType = new AtomicAction().type();
+
+}

Added: labs/jbosstm/branches/JBOSSTS_4_2_3_SP5_CP05_JBPAPP-3174/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_2_3_SP5_CP05_JBPAPP-3174/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java	                        (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_2_3_SP5_CP05_JBPAPP-3174/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java	2009-12-29 06:55:27 UTC (rev 30848)
@@ -0,0 +1,200 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, 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. 
+ * 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 
+ * 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, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2007,
+ * @author JBoss Inc.
+ */
+
+package com.arjuna.ats.internal.arjuna.recovery;
+
+import java.util.*;
+import java.io.PrintWriter;
+import java.text.*;
+
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.common.arjPropertyManager;
+import com.arjuna.ats.arjuna.objectstore.ObjectStore;
+import com.arjuna.common.util.propertyservice.PropertyManager;
+import com.arjuna.ats.arjuna.recovery.ExpiryScanner;
+import com.arjuna.ats.arjuna.recovery.RecoveryEnvironment;
+import com.arjuna.ats.arjuna.state.InputObjectState;
+import com.arjuna.ats.arjuna.state.OutputObjectState;
+import com.arjuna.ats.arjuna.coordinator.TxControl;
+
+import com.arjuna.ats.arjuna.logging.tsLogger;
+import com.arjuna.ats.arjuna.logging.FacilityCode;
+
+import com.arjuna.common.util.logging.*;
+
+/**
+ * This class is a plug-in module for the recovery manager. This class is
+ * responsible for the removing ransaction status manager items that are too
+ * old.
+ */
+
+public class ExpiredTransactionScanner implements ExpiryScanner
+{
+    /**
+     * @message com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionScanner_1
+     *          [com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionScanner_1] -
+     *          ExpiredTransactionScanner created, with expiry time of {0} seconds
+     * @message com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionScanner_2
+     *          [com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionScanner_2] -
+     *          ExpiredTransactionScanner - exception during attempted move {0} {1}
+     * @message com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionScanner_3
+     *          [com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionScanner_3] -
+     *          ExpiredTransactionScanner - could not moved log {0}
+     * @message com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionScanner_4
+     *          [com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionScanner_4] -
+     *          ExpiredTransactionScanner - log {0} is assumed complete and will be
+     *          moved.
+     */
+
+	public ExpiredTransactionScanner(String typeName, String movedTypeName)
+	{
+		_objectStore = TxControl.getStore();
+		_typeName = typeName;
+		_movedTypeName = movedTypeName;
+	}
+
+	/**
+	 * This is called periodically by the RecoveryManager
+	 */
+	public void scan()
+	{
+		boolean initialScan = false;
+
+		if (_scanM == null)
+		{
+			_scanM = new Hashtable();
+			initialScan = true;
+		}
+
+		try
+		{
+			InputObjectState uids = new InputObjectState();
+
+			// take a snapshot of the log
+
+			if (_objectStore.allObjUids(_typeName, uids))
+			{
+				Uid theUid = new Uid(Uid.nullUid());
+
+				boolean endOfUids = false;
+
+				while (!endOfUids)
+				{
+					// extract a uid
+					theUid.unpack(uids);
+
+					if (theUid.equals(Uid.nullUid()))
+						endOfUids = true;
+					else
+					{
+						Uid newUid = new Uid(theUid);
+
+						if (initialScan)
+							_scanM.put(newUid, newUid);
+						else
+						{
+							if (!_scanM.contains(newUid))
+							{
+								if (_scanN == null)
+									_scanN = new Hashtable();
+
+								_scanN.put(newUid, newUid);
+							}
+							else
+							// log is present in this iteration, so move it
+							{
+								if (tsLogger.arjLoggerI18N.isInfoEnabled())
+									tsLogger.arjLoggerI18N
+											.info(
+													"com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionScanner_4",
+													new Object[]
+													{ newUid });
+
+								try
+								{
+									InputObjectState state = _objectStore
+											.read_committed(newUid, _typeName);
+
+									if (state != null) // just in case recovery
+														// kicked-in
+									{
+										boolean moved = _objectStore
+												.write_committed(newUid,
+														_movedTypeName,
+														new OutputObjectState(
+																state));
+
+										if (!moved)
+										{
+											tsLogger.arjLoggerI18N
+													.warn(
+															"com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionStatusManagerScanner_3",
+															new Object[]
+															{ newUid });
+										}
+										else
+										    _objectStore.remove_committed(newUid, _typeName);
+									}
+								}
+								catch (Exception ex)
+								{
+									tsLogger.arjLoggerI18N
+											.warn(
+													"com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionScanner_2",
+													new Object[]
+													{ newUid, ex });
+
+									_scanN.put(newUid, newUid);
+								}
+							}
+						}
+					}
+				}
+
+				if (_scanN != null)
+				{
+					_scanM = _scanN;
+					_scanN = null;
+				}
+			}
+		}
+		catch (Exception e)
+		{
+			// end of uids!
+		}
+	}
+
+	public boolean toBeUsed()
+	{
+		return true;
+	}
+
+	private String _typeName;
+
+	private String _movedTypeName;
+
+	private ObjectStore _objectStore;
+
+	private Hashtable _scanM = null;
+
+	private Hashtable _scanN = null;
+
+}



More information about the jboss-svn-commits mailing list