[jboss-svn-commits] JBL Code SVN: r37627 - in labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed: server and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Oct 20 04:45:59 EDT 2011


Author: tomjenkinson
Date: 2011-10-20 04:45:59 -0400 (Thu, 20 Oct 2011)
New Revision: 37627

Modified:
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java
Log:
JBTM-895 updated to make sure that we clean up the temporary records of transactions in the 1PC/rollback scenario

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java	2011-10-20 08:07:24 UTC (rev 37626)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java	2011-10-20 08:45:59 UTC (rev 37627)
@@ -135,10 +135,9 @@
 					Xid currentXid = originalServer.getCurrentXid();
 					originalServer.storeRootTransaction();
 					transactionManager.suspend();
-					persistProxy(originalServer.getNodeName(), 2000, currentXid);
+					XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
 					performTransactionalWork(null, new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000 })), remainingTimeout, currentXid, 1, false);
 					transactionManager.resume(originalTransaction);
-					XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
 					originalTransaction.enlistResource(proxyXAResource);
 					// Needs a second resource to make sure we dont get the one
 					// phase optimization happening
@@ -213,10 +212,9 @@
 					Xid currentXid = originalServer.getCurrentXid();
 					originalServer.storeRootTransaction();
 					transactionManager.suspend();
-					persistProxy(originalServer.getNodeName(), 2000, currentXid);
+					XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
 					performTransactionalWork(null, new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000 })), remainingTimeout, currentXid, 2, false);
 					transactionManager.resume(originalTransaction);
-					XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
 					originalTransaction.enlistResource(proxyXAResource);
 					originalServer.removeRootTransaction(currentXid);
 					transactionManager.commit();
@@ -292,10 +290,9 @@
 					Xid currentXid = originalServer.getCurrentXid();
 					originalServer.storeRootTransaction();
 					transactionManager.suspend();
-					persistProxy(originalServer.getNodeName(), 2000, currentXid);
+					XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
 					performTransactionalWork(null, new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000 })), remainingTimeout, currentXid, 2, false);
 					transactionManager.resume(originalTransaction);
-					XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
 					originalTransaction.enlistResource(proxyXAResource);
 					originalServer.removeRootTransaction(currentXid);
 					transactionManager.commit();
@@ -431,10 +428,9 @@
 		Xid currentXid = originalServer.getCurrentXid();
 		originalServer.storeRootTransaction();
 		transactionManager.suspend();
-		persistProxy(originalServer.getNodeName(), 2000, currentXid);
+		XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
 		performTransactionalWork(null, new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000 })), remainingTimeout, currentXid, 1, false);
 		transactionManager.resume(originalTransaction);
-		XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
 		originalTransaction.enlistResource(proxyXAResource);
 		originalServer.removeRootTransaction(currentXid);
 		transactionManager.commit();
@@ -456,10 +452,9 @@
 		Xid currentXid = originalServer.getCurrentXid();
 		originalServer.storeRootTransaction();
 		transactionManager.suspend();
-		persistProxy(originalServer.getNodeName(), 2000, currentXid);
+		XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
 		performTransactionalWork(null, new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000 })), remainingTimeout, currentXid, 1, false);
 		transactionManager.resume(originalTransaction);
-		XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
 		originalTransaction.enlistResource(proxyXAResource);
 		originalTransaction
 				.registerSynchronization(originalServer.generateProxySynchronization(lookupProvider, originalServer.getNodeName(), 2000, currentXid));
@@ -550,7 +545,7 @@
 		originalServer.storeRootTransaction();
 		originalTransaction.enlistResource(new TestResource(counter, originalServer.getNodeName(), false));
 		transactionManager.suspend();
-		persistProxy(originalServer.getNodeName(), 2000, currentXid);
+		XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
 
 		// Migrate a transaction
 		LocalServer currentServer = getLocalServer(2000);
@@ -563,7 +558,6 @@
 
 		// Complete the transaction at the original server
 		transactionManager.resume(originalTransaction);
-		XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
 		originalTransaction.enlistResource(proxyXAResource);
 		originalServer.removeRootTransaction(currentXid);
 		Thread.currentThread().sleep((subordinateTimeout + 1) * 1000);
@@ -668,7 +662,7 @@
 			Xid currentXid = currentServer.getCurrentXid();
 			transactionManager.suspend();
 
-			persistProxy(currentServer.getNodeName(), nodesToFlowTo.get(0), currentXid);
+			XAResource proxyXAResource = initializeProxy(currentServer, nodesToFlowTo.get(0), currentXid);
 
 			boolean proxyRequired = performTransactionalWork(counter, nodesToFlowTo, remainingTimeout, currentXid, numberOfResourcesToRegister,
 					addSynchronization);
@@ -681,10 +675,11 @@
 			// performance drain and will result in multiple subordinate
 			// transactions and performance issues
 			if (proxyRequired) {
-				XAResource proxyXAResource = currentServer.generateProxyXAResource(lookupProvider, currentServer.getNodeName(), nextServerNodeName);
 				transaction.enlistResource(proxyXAResource);
 				transaction.registerSynchronization(currentServer.generateProxySynchronization(lookupProvider, currentServer.getNodeName(), nextServerNodeName,
 						toMigrate));
+			} else {
+				currentServer.cleanupProxy(proxyXAResource);
 			}
 		}
 
@@ -700,24 +695,26 @@
 		return localServers[index];
 	}
 
-	private synchronized void persistProxy(Integer localServerName, Integer remoteServerName, Xid xid) throws IOException {
+	private synchronized XAResource initializeProxy(LocalServer server, Integer remoteServerName, Xid xid) throws IOException {
 		// Persist a proxy for the remote server this can mean we try to recover
 		// transactions at a remote server that did not get chance to
 		// prepare but the alternative is to orphan a prepared server
 
-		File dir = new File(System.getProperty("user.dir") + "/distributedjta/ProxyXAResource/" + localServerName);
+		File dir = new File(System.getProperty("user.dir") + "/distributedjta/ProxyXAResource/" + server.getNodeName());
 		dir.mkdirs();
 		File file = new File(dir, new Uid().fileStringForm());
-		if (!file.exists()) {
-			file.createNewFile();
-			DataOutputStream fos = new DataOutputStream(new FileOutputStream(file));
-			fos.writeInt(remoteServerName);
-			fos.writeInt(xid.getFormatId());
-			fos.writeInt(xid.getGlobalTransactionId().length);
-			fos.write(xid.getGlobalTransactionId());
-			fos.writeInt(xid.getBranchQualifier().length);
-			fos.write(xid.getBranchQualifier());
-		}
+		file.createNewFile();
+		DataOutputStream fos = new DataOutputStream(new FileOutputStream(file));
+		fos.writeInt(remoteServerName);
+		fos.writeInt(xid.getFormatId());
+		fos.writeInt(xid.getGlobalTransactionId().length);
+		fos.write(xid.getGlobalTransactionId());
+		fos.writeInt(xid.getBranchQualifier().length);
+		fos.write(xid.getBranchQualifier());
+
+		XAResource proxyXAResource = server.generateProxyXAResource(lookupProvider, server.getNodeName(), remoteServerName, file);
+
+		return proxyXAResource;
 	}
 
 	private static class MyLookupProvider implements LookupProvider {

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java	2011-10-20 08:07:24 UTC (rev 37626)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java	2011-10-20 08:45:59 UTC (rev 37627)
@@ -21,6 +21,7 @@
  */
 package com.arjuna.ats.jta.distributed.server;
 
+import java.io.File;
 import java.io.IOException;
 
 import javax.transaction.InvalidTransactionException;
@@ -57,7 +58,7 @@
 
 	public RemoteServer connectTo();
 
-	public XAResource generateProxyXAResource(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName);
+	public XAResource generateProxyXAResource(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName, File file);
 
 	public Synchronization generateProxySynchronization(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName, Xid toRegisterAgainst);
 
@@ -66,4 +67,6 @@
 	public CompletionCounter getCompletionCounter();
 
 	public void shutdown() throws Exception;
+
+	public void cleanupProxy(XAResource proxyXAResource);
 }

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java	2011-10-20 08:07:24 UTC (rev 37626)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java	2011-10-20 08:45:59 UTC (rev 37627)
@@ -55,6 +55,7 @@
 	private Integer localServerName;
 	private LookupProvider lookupProvider;
 	private CompletionCounter completionCounter;
+	private File file;
 
 	/**
 	 * Create a new proxy to the remote server.
@@ -63,11 +64,12 @@
 	 * @param localServerName
 	 * @param remoteServerName
 	 */
-	public ProxyXAResource(CompletionCounter completionCounter, LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName) {
+	public ProxyXAResource(CompletionCounter completionCounter, LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName, File file) {
 		this.completionCounter = completionCounter;
 		this.lookupProvider = lookupProvider;
 		this.localServerName = localServerName;
 		this.remoteServerName = remoteServerName;
+		this.file = file;
 		map = new HashMap<Xid, File>();
 	}
 
@@ -90,6 +92,10 @@
 		this.map = map;
 	}
 
+	public void deleteTemporaryFile() {
+		this.file.delete();
+	}
+
 	/**
 	 * Store the XID.
 	 */
@@ -136,6 +142,9 @@
 				System.out.println(map.get(xid));
 				map.remove(xid).delete();
 			}
+			if (this.file != null) {
+				this.file.delete();
+			}
 
 			map.put(xid, file);
 		} catch (IOException e) {
@@ -167,6 +176,11 @@
 			map.get(xid).delete();
 			map.remove(xid);
 		}
+
+		// THIS CAN ONLY HAPPEN IN 1PC OR ROLLBACK
+		if (file != null) {
+			file.delete();
+		}
 		if (completionCounter != null) {
 			completionCounter.incrementCommit();
 		}
@@ -194,6 +208,11 @@
 			map.get(xid).delete();
 			map.remove(xid);
 		}
+
+		// THIS CAN ONLY HAPPEN IN 1PC OR ROLLBACK
+		if (file != null) {
+			file.delete();
+		}
 		if (completionCounter != null) {
 			completionCounter.incrementRollback();
 		}

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java	2011-10-20 08:07:24 UTC (rev 37626)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java	2011-10-20 08:45:59 UTC (rev 37627)
@@ -21,6 +21,7 @@
  */
 package com.arjuna.ats.jta.distributed.server.impl;
 
+import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.net.InetAddress;
@@ -36,6 +37,7 @@
 import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
 import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
 
 import org.jboss.tm.TransactionTimeoutConfiguration;
@@ -289,11 +291,21 @@
 	}
 
 	@Override
-	public ProxyXAResource generateProxyXAResource(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName) {
-		return new ProxyXAResource(counter, lookupProvider, localServerName, remoteServerName);
+	public CompletionCounter getCompletionCounter() {
+		return counter;
 	}
 
 	@Override
+	public ProxyXAResource generateProxyXAResource(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName, File file) {
+		return new ProxyXAResource(counter, lookupProvider, localServerName, remoteServerName, file);
+	}
+
+	@Override
+	public void cleanupProxy(XAResource proxyXAResource) {
+		((ProxyXAResource)proxyXAResource).deleteTemporaryFile();
+	}
+
+	@Override
 	public Synchronization generateProxySynchronization(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName, Xid toRegisterAgainst) {
 		return new ProxySynchronization(lookupProvider, localServerName, remoteServerName, toRegisterAgainst);
 	}
@@ -380,9 +392,4 @@
 			Thread.currentThread().setContextClassLoader(contextClassLoader);
 		}
 	}
-
-	@Override
-	public CompletionCounter getCompletionCounter() {
-		return counter;
-	}
 }



More information about the jboss-svn-commits mailing list