[infinispan-commits] Infinispan SVN: r2209 - in trunk/core/src: main/java/org/infinispan/config and 1 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Thu Aug 12 11:29:46 EDT 2010


Author: mircea.markus
Date: 2010-08-12 11:29:46 -0400 (Thu, 12 Aug 2010)
New Revision: 2209

Added:
   trunk/core/src/test/java/org/infinispan/lock/EagerLockingDisabledTest.java
Modified:
   trunk/core/src/main/java/org/infinispan/CacheDelegate.java
   trunk/core/src/main/java/org/infinispan/config/ConfigurationValidatingVisitor.java
Log:
migrated 2208 from 4.1.x

Modified: trunk/core/src/main/java/org/infinispan/CacheDelegate.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/CacheDelegate.java	2010-08-12 14:52:47 UTC (rev 2208)
+++ trunk/core/src/main/java/org/infinispan/CacheDelegate.java	2010-08-12 15:29:46 UTC (rev 2209)
@@ -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: trunk/core/src/main/java/org/infinispan/config/ConfigurationValidatingVisitor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/ConfigurationValidatingVisitor.java	2010-08-12 14:52:47 UTC (rev 2208)
+++ trunk/core/src/main/java/org/infinispan/config/ConfigurationValidatingVisitor.java	2010-08-12 15:29:46 UTC (rev 2209)
@@ -22,6 +22,7 @@
 package org.infinispan.config;
 
 import org.infinispan.config.GlobalConfiguration.TransportType;
+import org.infinispan.eviction.EvictionStrategy;
 import org.infinispan.loaders.decorators.SingletonStoreConfig;
 
 /**
@@ -33,14 +34,52 @@
  */
 public class ConfigurationValidatingVisitor extends AbstractConfigurationBeanVisitor {
    private TransportType tt = null;
+   private CacheLoaderManagerConfig clmc = null;
+   private Configuration.EvictionType eviction = null;
 
    @Override
    public void visitSingletonStoreConfig(SingletonStoreConfig ssc) {
-      if (tt == null) throw new ConfigurationException("Singleton store configured without transport being configured");
+      if (tt == null && ssc.isSingletonStoreEnabled()) throw new ConfigurationException("Singleton store configured without transport being configured");
    }
 
    @Override
    public void visitTransportType(TransportType tt) {
       this.tt = tt;
    }
+   
+   @Override
+   public void visitEvictionType(Configuration.EvictionType bean) {
+      this.eviction = bean;
+      if (this.eviction != null && this.clmc != null) checkEvictionPassivationSettings();
+      super.visitEvictionType(bean);
+   }
+
+   @Override
+   public void visitCacheLoaderManagerConfig(CacheLoaderManagerConfig bean) {
+      this.clmc = bean;
+      if (this.eviction != null && this.clmc != null) checkEvictionPassivationSettings();
+      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");
+   }
 }

Copied: trunk/core/src/test/java/org/infinispan/lock/EagerLockingDisabledTest.java (from rev 2208, branches/4.1.x/core/src/test/java/org/infinispan/lock/EagerLockingDisabledTest.java)
===================================================================
--- trunk/core/src/test/java/org/infinispan/lock/EagerLockingDisabledTest.java	                        (rev 0)
+++ trunk/core/src/test/java/org/infinispan/lock/EagerLockingDisabledTest.java	2010-08-12 15:29:46 UTC (rev 2209)
@@ -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