[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