[jboss-svn-commits] JBL Code SVN: r27653 - in labs/jbosstm/trunk/ArjunaCore: arjuna/classes/com/arjuna/ats/internal/arjuna/recovery and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jul 6 14:40:20 EDT 2009
Author: mark.little at jboss.com
Date: 2009-07-06 14:40:20 -0400 (Mon, 06 Jul 2009)
New Revision: 27653
Added:
labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoverAtomicActionTest.java
Modified:
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/recovery/RecoverAtomicAction.java
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java
labs/jbosstm/trunk/ArjunaCore/docs/user_guide/FailureRecoveryGuide.odt
Log:
https://jira.jboss.org/jira/browse/JBTM-587
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/recovery/RecoverAtomicAction.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/recovery/RecoverAtomicAction.java 2009-07-06 18:25:31 UTC (rev 27652)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/recovery/RecoverAtomicAction.java 2009-07-06 18:40:20 UTC (rev 27653)
@@ -37,6 +37,7 @@
import com.arjuna.ats.arjuna.logging.tsLogger;
import com.arjuna.ats.arjuna.logging.FacilityCode;
+import com.arjuna.ats.internal.arjuna.recovery.AtomicActionExpiryScanner;
import com.arjuna.common.util.logging.*;
@@ -45,7 +46,8 @@
* @message com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_2 [com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_2] - RecoverAtomicAction.replayPhase2: Unexpected status: {0}
* @message com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_3 [com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_3] - RecoverAtomicAction.replayPhase2( {0} ) finished
* @message com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_4 [com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_4] - RecoverAtomicAction: transaction {0} not activated, unable to replay phase 2 commit. Check state has not already been completed.
-*/
+ * @message com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_5 [com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_5] - RecoverAtomicAction - tried to move failed activation log {0}
+ */
public class RecoverAtomicAction extends AtomicAction
{
@@ -111,6 +113,25 @@
else
{
tsLogger.arjLoggerI18N.warn("com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_4", new Object[]{get_uid()});
+
+ /*
+ * Failure to activate so move the log. Unlikely to get better automatically!
+ */
+
+ AtomicActionExpiryScanner scanner = new AtomicActionExpiryScanner();
+
+ try
+ {
+ scanner.moveEntry(get_uid());
+ }
+ catch (final Exception ex)
+ {
+ if (tsLogger.arjLoggerI18N.isWarnEnabled())
+ {
+ tsLogger.arjLoggerI18N.warn("com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_5",
+ new Object[]{get_uid()});
+ }
+ }
}
}
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java 2009-07-06 18:25:31 UTC (rev 27652)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java 2009-07-06 18:40:20 UTC (rev 27653)
@@ -25,7 +25,7 @@
/**
* This class is a plug-in module for the recovery manager. This class is
- * responsible for the removing transaction status manager items that are too
+ * responsible for the removing transaction logs that are too
* old.
*/
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java 2009-07-06 18:25:31 UTC (rev 27652)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java 2009-07-06 18:40:20 UTC (rev 27653)
@@ -29,6 +29,7 @@
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.exceptions.ObjectStoreException;
import com.arjuna.ats.arjuna.logging.tsLogger;
@@ -122,29 +123,7 @@
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);
- }
+ moveEntry(newUid);
}
catch (Exception ex)
{
@@ -179,6 +158,30 @@
return true;
}
+ public boolean moveEntry (Uid newUid) throws ObjectStoreException
+ {
+ InputObjectState state = _objectStore.read_committed(newUid, _typeName);
+ boolean res = false;
+
+ 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
+ res = _objectStore.remove_committed(newUid, _typeName);
+ }
+
+ return res;
+ }
+
private String _typeName;
private String _movedTypeName;
Added: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoverAtomicActionTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoverAtomicActionTest.java (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoverAtomicActionTest.java 2009-07-06 18:40:20 UTC (rev 27653)
@@ -0,0 +1,92 @@
+/*
+ * 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) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 2004,
+ *
+ * Arjuna Technologies Ltd,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: RecoveryManagerTest.java 2342 2006-03-30 13:06:17Z $
+ */
+
+package com.hp.mwtests.ts.arjuna.recovery;
+
+import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.coordinator.ActionStatus;
+import com.arjuna.ats.arjuna.coordinator.TxControl;
+import com.arjuna.ats.arjuna.objectstore.ObjectStore;
+import com.arjuna.ats.arjuna.recovery.RecoverAtomicAction;
+import com.arjuna.ats.arjuna.state.OutputObjectState;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class RecoverAtomicActionTest
+{
+ @Test
+ public void test ()
+ {
+ ObjectStore os = TxControl.getStore();
+ OutputObjectState fluff = new OutputObjectState();
+ Uid kungfuTx = new Uid();
+ boolean passed = false;
+ final String tn = new AtomicAction().type();
+
+ try
+ {
+ kungfuTx.pack(fluff);
+
+ System.err.println("Creating dummy log");
+
+ os.write_committed(kungfuTx, tn, fluff);
+
+ if (os.currentState(kungfuTx, tn) == ObjectStore.OS_COMMITTED)
+ {
+ System.err.println("Wrote dummy transaction " + kungfuTx);
+
+ RecoverAtomicAction rAA = new RecoverAtomicAction(kungfuTx, ActionStatus.COMMITTED);
+
+ // activate should fail!
+
+ if (!rAA.activate())
+ {
+ rAA.replayPhase2();
+
+ // state should have been moved
+
+ if (os.currentState(kungfuTx, tn) == ObjectStore.OS_UNKNOWN)
+ passed = true;
+ }
+ }
+ else
+ System.err.println("State is not committed!");
+ }
+ catch (final Exception ex)
+ {
+ ex.printStackTrace();
+ }
+
+ assertTrue(passed);
+ }
+}
Modified: labs/jbosstm/trunk/ArjunaCore/docs/user_guide/FailureRecoveryGuide.odt
===================================================================
(Binary files differ)
More information about the jboss-svn-commits
mailing list