[infinispan-commits] Infinispan SVN: r2208 - in branches/4.1.x/core/src: main/java/org/infinispan/config and 2 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Thu Aug 12 10:52:48 EDT 2010


Author: mircea.markus
Date: 2010-08-12 10:52:47 -0400 (Thu, 12 Aug 2010)
New Revision: 2208

Added:
   branches/4.1.x/core/src/test/java/org/infinispan/lock/EagerLockingDisabledTest.java
Modified:
   branches/4.1.x/core/src/main/java/org/infinispan/CacheDelegate.java
   branches/4.1.x/core/src/main/java/org/infinispan/config/ConfigurationValidatingVisitor.java
   branches/4.1.x/core/src/main/java/org/infinispan/factories/InterceptorChainFactory.java
Log:
[ISPN-596] - Deadlock detection and explicit locking should be disallowed.

Modified: branches/4.1.x/core/src/main/java/org/infinispan/CacheDelegate.java
===================================================================
--- branches/4.1.x/core/src/main/java/org/infinispan/CacheDelegate.java	2010-08-12 14:42:54 UTC (rev 2207)
+++ branches/4.1.x/core/src/main/java/org/infinispan/CacheDelegate.java	2010-08-12 14:52:47 UTC (rev 2208)
@@ -37,6 +37,7 @@
 import org.infinispan.commands.write.ReplaceCommand;
 import org.infinispan.config.Configuration;
 import org.infinispan.config.ConfigurationException;
+import org.infinispan.config.ConfigurationValidatingVisitor;
 import org.infinispan.container.DataContainer;
 import org.infinispan.container.entries.InternalCacheEntry;
 import org.infinispan.context.Flag;
@@ -286,6 +287,8 @@
 
    public void lock(K key) {
       assertKeyNotNull(key);
+      //this will be removed with https://jira.jboss.org/browse/ISPN-598 
+      ConfigurationValidatingVisitor.checkEagerLockingAndDld(config, true);
       lock(Collections.singletonList(key));
    }
 

Modified: branches/4.1.x/core/src/main/java/org/infinispan/config/ConfigurationValidatingVisitor.java
===================================================================
--- branches/4.1.x/core/src/main/java/org/infinispan/config/ConfigurationValidatingVisitor.java	2010-08-12 14:42:54 UTC (rev 2207)
+++ branches/4.1.x/core/src/main/java/org/infinispan/config/ConfigurationValidatingVisitor.java	2010-08-12 14:52:47 UTC (rev 2208)
@@ -61,6 +61,23 @@
       super.visitCacheLoaderManagerConfig(bean);
    }
 
+   @Override
+   public void visitConfiguration(Configuration bean) {
+      checkEagerLockingAndDld(bean);
+   }
+
+   private void checkEagerLockingAndDld(Configuration bean) {
+      boolean isEagerLocking = bean.isUseEagerLocking();
+      checkEagerLockingAndDld(bean, isEagerLocking);
+   }
+
+   public static void checkEagerLockingAndDld(Configuration bean, boolean eagerLocking) {
+      boolean isDealLockDetection = bean.isEnableDeadlockDetection();
+      if (isDealLockDetection && eagerLocking) {
+         throw new ConfigurationException("Deadlock detection cannot be used with eager locking until ISPN-596 is fixed. See https://jira.jboss.org/browse/ISPN-596");
+      }
+   }
+
    private void checkEvictionPassivationSettings() {
       if (eviction != null && clmc != null && clmc.isPassivation() && eviction.strategy == EvictionStrategy.LIRS)
          throw new ConfigurationException("Eviction strategy LIRS cannot be used with passivation until ISPN-598 is fixed.  See https://jira.jboss.org/browse/ISPN-598");

Modified: branches/4.1.x/core/src/main/java/org/infinispan/factories/InterceptorChainFactory.java
===================================================================
--- branches/4.1.x/core/src/main/java/org/infinispan/factories/InterceptorChainFactory.java	2010-08-12 14:42:54 UTC (rev 2207)
+++ branches/4.1.x/core/src/main/java/org/infinispan/factories/InterceptorChainFactory.java	2010-08-12 14:52:47 UTC (rev 2208)
@@ -85,10 +85,6 @@
       else
          interceptorChain.appendIntereceptor(createInterceptor(TxInterceptor.class));
 
-      if (configuration.isUseEagerLocking() && configuration.isEnableDeadlockDetection()) {
-         throw new ConfigurationException("This is not supported yet: https://jira.jboss.org/browse/ISPN-518");
-      }
-
       if(configuration.isUseEagerLocking())
          interceptorChain.appendIntereceptor(createInterceptor(ImplicitEagerLockingInterceptor.class));
 

Added: branches/4.1.x/core/src/test/java/org/infinispan/lock/EagerLockingDisabledTest.java
===================================================================
--- branches/4.1.x/core/src/test/java/org/infinispan/lock/EagerLockingDisabledTest.java	                        (rev 0)
+++ branches/4.1.x/core/src/test/java/org/infinispan/lock/EagerLockingDisabledTest.java	2010-08-12 14:52:47 UTC (rev 2208)
@@ -0,0 +1,51 @@
+package org.infinispan.lock;
+
+import org.infinispan.Cache;
+import org.infinispan.CacheException;
+import org.infinispan.config.Configuration;
+import org.infinispan.config.ConfigurationException;
+import org.infinispan.manager.EmbeddedCacheManager;
+import org.infinispan.test.TestingUtil;
+import org.infinispan.test.fwk.TestCacheManagerFactory;
+import org.testng.annotations.Test;
+
+/**
+ * Tester for https://jira.jboss.org/browse/ISPN-596
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+ at Test (groups = "functional", testName = "lock.EagerLockingDisabledTest")
+public class EagerLockingDisabledTest {
+
+   public void testImplicitEagerLockingAndDld() {
+      Configuration configuration = TestCacheManagerFactory.getDefaultConfiguration(false);
+      configuration.setEnableDeadlockDetection(true);
+      configuration.setUseEagerLocking(true);
+      EmbeddedCacheManager cm = null;
+      try {
+         cm = TestCacheManagerFactory.createCacheManager(configuration);
+         assert false : "expecting configuration exception";
+      } catch (ConfigurationException ce) {
+         //expected
+      }
+      finally {
+         TestingUtil.killCacheManagers(cm);
+      }
+   }
+
+   public void testExplicitEagerLockingAndDld() {
+      Configuration configuration = TestCacheManagerFactory.getDefaultConfiguration(false);
+      configuration.setEnableDeadlockDetection(true);
+      EmbeddedCacheManager cm = TestCacheManagerFactory.createCacheManager(configuration);
+      Cache c = cm.getCache();
+      try {
+         c.getAdvancedCache().lock("k");
+      } catch (ConfigurationException ce) {
+         //expected
+      }
+      finally {
+         TestingUtil.killCacheManagers(cm);
+      }
+   }
+}



More information about the infinispan-commits mailing list