[infinispan-commits] Infinispan SVN: r2610 - in trunk/core/src/main/java/org/infinispan: distribution and 2 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Tue Oct 26 11:49:08 EDT 2010


Author: manik.surtani at jboss.com
Date: 2010-10-26 11:49:07 -0400 (Tue, 26 Oct 2010)
New Revision: 2610

Modified:
   trunk/core/src/main/java/org/infinispan/context/Flag.java
   trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java
   trunk/core/src/main/java/org/infinispan/interceptors/CacheStoreInterceptor.java
   trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderManagerImpl.java
Log:
ISPN-688 - Data preloaded from a CacheStore is immediately stored in the CacheStore again (merged from branch 4.2.x, r2608)

Modified: trunk/core/src/main/java/org/infinispan/context/Flag.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/Flag.java	2010-10-26 15:47:35 UTC (rev 2609)
+++ trunk/core/src/main/java/org/infinispan/context/Flag.java	2010-10-26 15:49:07 UTC (rev 2610)
@@ -109,5 +109,9 @@
     * Flags the invocation as a {@link Cache#putForExternalRead(Object, Object)} call, as opposed to a regular
     * {@link Cache#put(Object, Object)}.
     */
-   PUT_FOR_EXTERNAL_READ
+   PUT_FOR_EXTERNAL_READ,
+   /**
+    * If this flag is enabled, if a cache store is shared, then storage to the store is skipped.
+    */
+   SKIP_SHARED_CACHE_STORE
 }

Modified: trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java	2010-10-26 15:47:35 UTC (rev 2609)
+++ trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java	2010-10-26 15:49:07 UTC (rev 2610)
@@ -383,7 +383,7 @@
             InternalCacheValue v = e.getValue();
             PutKeyValueCommand put = cf.buildPutKeyValueCommand(e.getKey(), v.getValue(), v.getLifespan(), v.getMaxIdle());
             InvocationContext ctx = icc.createInvocationContext();
-            ctx.setFlags(Flag.CACHE_MODE_LOCAL, Flag.SKIP_REMOTE_LOOKUP);
+            ctx.setFlags(Flag.CACHE_MODE_LOCAL, Flag.SKIP_REMOTE_LOOKUP, Flag.SKIP_SHARED_CACHE_STORE);
             interceptorChain.invoke(ctx, put);
          }
       }

Modified: trunk/core/src/main/java/org/infinispan/interceptors/CacheStoreInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/CacheStoreInterceptor.java	2010-10-26 15:47:35 UTC (rev 2609)
+++ trunk/core/src/main/java/org/infinispan/interceptors/CacheStoreInterceptor.java	2010-10-26 15:49:07 UTC (rev 2610)
@@ -21,14 +21,6 @@
  */
 package org.infinispan.interceptors;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicLong;
-
 import org.infinispan.commands.AbstractVisitor;
 import org.infinispan.commands.VisitableCommand;
 import org.infinispan.commands.tx.CommitCommand;
@@ -44,7 +36,6 @@
 import org.infinispan.container.entries.CacheEntry;
 import org.infinispan.container.entries.InternalCacheEntry;
 import org.infinispan.container.entries.InternalEntryFactory;
-import org.infinispan.context.Flag;
 import org.infinispan.context.InvocationContext;
 import org.infinispan.context.impl.TxInvocationContext;
 import org.infinispan.factories.annotations.Inject;
@@ -65,6 +56,17 @@
 import org.rhq.helpers.pluginAnnotations.agent.Metric;
 import org.rhq.helpers.pluginAnnotations.agent.Operation;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
+
+import static org.infinispan.context.Flag.SKIP_CACHE_STORE;
+import static org.infinispan.context.Flag.SKIP_SHARED_CACHE_STORE;
+
 /**
  * Writes modifications back to the store on the way out: stores modifications back through the CacheLoader, either
  * after each method call (no TXs), or at TX commit.
@@ -104,11 +106,17 @@
     * if this is a shared cache loader and the call is of remote origin, pass up the chain
     */
    public final boolean skip(InvocationContext ctx, VisitableCommand command) {
-      if (store == null) return true;  // could be because the cache loader oes not implement cache store
-      if ((!ctx.isOriginLocal() && loaderConfig. isShared()) || ctx.hasFlag(Flag.SKIP_CACHE_STORE)) {
+      if (store == null) return true;  // could be because the cache loader does not implement cache store
+      if ((!ctx.isOriginLocal() && loaderConfig.isShared()) || ctx.hasFlag(SKIP_CACHE_STORE)) {
          if (trace) log.trace("Passing up method call and bypassing this interceptor since the cache loader is shared and this call originated remotely.");
          return true;
       }
+      
+      if (loaderConfig.isShared() && ctx.hasFlag(SKIP_SHARED_CACHE_STORE)) {
+         if (trace) log.trace("Explicitly requested to skip storage if cache store is shared - and it is.");
+         return true;
+      }
+
       return false;
    }
 

Modified: trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderManagerImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderManagerImpl.java	2010-10-26 15:47:35 UTC (rev 2609)
+++ trunk/core/src/main/java/org/infinispan/loaders/CacheLoaderManagerImpl.java	2010-10-26 15:49:07 UTC (rev 2610)
@@ -7,8 +7,7 @@
 import org.infinispan.config.ConfigurationException;
 import org.infinispan.container.entries.InternalCacheEntry;
 
-import static org.infinispan.context.Flag.CACHE_MODE_LOCAL;
-import static org.infinispan.context.Flag.SKIP_CACHE_STATUS_CHECK;
+import static org.infinispan.context.Flag.*;
 
 import org.infinispan.factories.annotations.Inject;
 import org.infinispan.factories.annotations.Start;
@@ -129,8 +128,17 @@
                throw new CacheException("Unable to preload!", e);
             }
 
-            for (InternalCacheEntry e : state)
-               cache.getAdvancedCache().withFlags(SKIP_CACHE_STATUS_CHECK, CACHE_MODE_LOCAL).put(e.getKey(), e.getValue(), e.getLifespan(), MILLISECONDS, e.getMaxIdle(), MILLISECONDS);
+            for (InternalCacheEntry e : state) {
+               if (clmConfig.isShared() || !(loader instanceof ChainingCacheStore)) {
+                  cache.getAdvancedCache()
+                       .withFlags(SKIP_CACHE_STATUS_CHECK, CACHE_MODE_LOCAL, SKIP_CACHE_STORE) 
+                       .put(e.getKey(), e.getValue(), e.getLifespan(), MILLISECONDS, e.getMaxIdle(), MILLISECONDS);
+               } else {
+                  cache.getAdvancedCache()
+                       .withFlags(SKIP_CACHE_STATUS_CHECK, CACHE_MODE_LOCAL)
+                       .put(e.getKey(), e.getValue(), e.getLifespan(), MILLISECONDS, e.getMaxIdle(), MILLISECONDS);
+               }
+            }
 
             if (debugTiming) {
                long stop = System.currentTimeMillis();



More information about the infinispan-commits mailing list