[jbosscache-commits] JBoss Cache SVN: r7729 - core/branches/3.0.X/src/test/java/org/jboss/cache/loader/deadlock.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Thu Feb 19 07:48:29 EST 2009


Author: manik.surtani at jboss.com
Date: 2009-02-19 07:48:29 -0500 (Thu, 19 Feb 2009)
New Revision: 7729

Added:
   core/branches/3.0.X/src/test/java/org/jboss/cache/loader/deadlock/ConcurrentReadsDeadlockTest.java
Log:
JBCACHE-1479 - added test

Added: core/branches/3.0.X/src/test/java/org/jboss/cache/loader/deadlock/ConcurrentReadsDeadlockTest.java
===================================================================
--- core/branches/3.0.X/src/test/java/org/jboss/cache/loader/deadlock/ConcurrentReadsDeadlockTest.java	                        (rev 0)
+++ core/branches/3.0.X/src/test/java/org/jboss/cache/loader/deadlock/ConcurrentReadsDeadlockTest.java	2009-02-19 12:48:29 UTC (rev 7729)
@@ -0,0 +1,84 @@
+/*
+ *
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+package org.jboss.cache.loader.deadlock;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jboss.cache.AbstractSingleCacheTest;
+import org.jboss.cache.CacheSPI;
+import org.jboss.cache.DefaultCacheFactory;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.config.CacheLoaderConfig;
+import org.jboss.cache.config.Configuration;
+import org.jboss.cache.factories.UnitTestConfigurationFactory;
+import org.jboss.cache.loader.testloaders.DummyInMemoryCacheLoader;
+import org.jboss.cache.lock.IsolationLevel;
+import org.jboss.cache.transaction.TransactionSetup;
+import org.testng.annotations.Test;
+
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
+ at Test(groups = {"functional", "transaction"}, sequential = true, enabled = true, testName = "loader.deadlock.ConcurrentReadsDeadlockTest")
+public class ConcurrentReadsDeadlockTest extends AbstractSingleCacheTest {
+   final Fqn NODE = Fqn.fromString("/a");
+   final Log log = LogFactory.getLog(ConcurrentReadsDeadlockTest.class);
+
+   protected CacheSPI createCache() throws Exception {
+      Configuration c = new Configuration();
+      c.setCacheMode(Configuration.CacheMode.LOCAL);
+      c.setTransactionManagerLookupClass(TransactionSetup.getManagerLookup());
+      c.setIsolationLevel(IsolationLevel.READ_COMMITTED);
+      c.setLockAcquisitionTimeout(3000);
+      CacheLoaderConfig clc = UnitTestConfigurationFactory.buildSingleCacheLoaderConfig(false, "", DummyInMemoryCacheLoader.class.getName(), "", false, true, false, false, false);
+
+      c.setCacheLoaderConfig(clc);
+      return (CacheSPI<String, String>) new DefaultCacheFactory<String, String>().createCache(c, true);
+   }
+
+   /**
+    * Deadlock on two concurrent read transactions in the same thread.
+    */
+   public void testConcurrentReadDeadlock() throws Exception {
+      TransactionManager tm = cache.getConfiguration().getRuntimeConfig().getTransactionManager();
+
+      tm.begin();
+      cache.put(NODE, "x", "x");
+      tm.commit();
+
+      // two loops just in case
+      for (int i = 0; i < 2; i++) {
+         try {
+            tm.begin();
+            Transaction t1 = tm.suspend();
+            tm.begin();
+            Transaction t2 = tm.suspend();
+
+            tm.resume(t1);
+            cache.getData(NODE);
+            tm.suspend();
+
+            tm.resume(t2);
+            cache.getData(NODE);
+            tm.suspend();
+
+            tm.resume(t1);
+            tm.rollback();
+
+            tm.resume(t2);
+            tm.rollback();
+         }
+         catch (Exception ex) {
+            Exception exx = new Exception("loop " + i + ": " + ex.getMessage(), ex.getCause());
+            exx.setStackTrace(ex.getStackTrace());
+            throw exx;
+         }
+      }
+   }
+}




More information about the jbosscache-commits mailing list