[infinispan-commits] Infinispan SVN: r2626 - in trunk/core/src: test/java/org/infinispan/distribution and 1 other directory.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Thu Oct 28 10:23:32 EDT 2010
Author: manik.surtani at jboss.com
Date: 2010-10-28 10:23:31 -0400 (Thu, 28 Oct 2010)
New Revision: 2626
Added:
trunk/core/src/test/java/org/infinispan/distribution/DistSkipRemoteLookupWithoutL1Test.java
Modified:
trunk/core/src/main/java/org/infinispan/commands/write/RemoveCommand.java
trunk/core/src/test/java/org/infinispan/distribution/DistSkipRemoteLookupTest.java
Log:
ISPN-682 - return value of Remove command is unreliable in DIST without L1 (merged from branch 4.2.x, r2625)
Modified: trunk/core/src/main/java/org/infinispan/commands/write/RemoveCommand.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/commands/write/RemoveCommand.java 2010-10-28 14:21:48 UTC (rev 2625)
+++ trunk/core/src/main/java/org/infinispan/commands/write/RemoveCommand.java 2010-10-28 14:23:31 UTC (rev 2626)
@@ -22,6 +22,7 @@
package org.infinispan.commands.write;
import org.infinispan.commands.Visitor;
+import org.infinispan.container.entries.CacheEntry;
import org.infinispan.container.entries.MVCCEntry;
import org.infinispan.context.InvocationContext;
import org.infinispan.marshall.Ids;
@@ -70,7 +71,7 @@
}
public Object perform(InvocationContext ctx) throws Throwable {
- MVCCEntry e = (MVCCEntry) ctx.lookupEntry(key);
+ CacheEntry e = ctx.lookupEntry(key);
if (e == null || e.isNull()) {
nonExistent = true;
log.trace("Nothing to remove since the entry is null or we have a null entry");
@@ -81,6 +82,9 @@
return false;
}
}
+
+ if (!(e instanceof MVCCEntry)) ctx.putLookedUpEntry(key, null);
+
if (value != null && e.getValue() != null && !e.getValue().equals(value)) {
successful = false;
return false;
Modified: trunk/core/src/test/java/org/infinispan/distribution/DistSkipRemoteLookupTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistSkipRemoteLookupTest.java 2010-10-28 14:21:48 UTC (rev 2625)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistSkipRemoteLookupTest.java 2010-10-28 14:23:31 UTC (rev 2626)
@@ -1,10 +1,17 @@
package org.infinispan.distribution;
import static org.infinispan.context.Flag.SKIP_REMOTE_LOOKUP;
+import java.util.concurrent.ExecutionException;
+import org.infinispan.context.Flag;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "distribution.DistSkipRemoteLookupTest")
public class DistSkipRemoteLookupTest extends BaseDistFunctionalTest {
+
+ public DistSkipRemoteLookupTest() {
+ cleanup = CleanupPhase.AFTER_METHOD;
+ }
+
public void testSkipLookupOnGet() {
MagicKey k1 = new MagicKey(c1);
c1.put(k1, "value");
@@ -49,7 +56,7 @@
assertIsInContainerImmortal(c1, k1);
assertIsInContainerImmortal(c2, k1);
assertIsNotInL1(c3, k1);
- assertIsInL1(c4, k1);
+ if (l1CacheEnabled) assertIsInL1(c4, k1);
}
public void testCorrectFunctionalityOnUnconditionalWrite() {
@@ -66,6 +73,50 @@
assertOnAllCachesAndOwnership(k1, "new_val");
}
+ @Test
+ public void testSkipLookupOnRemove() {
+ MagicKey k1 = new MagicKey(c1);
+ final String value = "SomethingToSayHere";
+
+ assert null == c1.put(k1, value);
+ assertIsInContainerImmortal(c1, k1);
+ assertIsInContainerImmortal(c2, k1);
+ assertIsNotInL1(c3, k1);
+ assertIsNotInL1(c4, k1);
+
+ assert value.equals(c1.get(k1));
+ assert value.equals(c1.remove(k1));
+ assert null == c1.put(k1, value);
+
+ assertIsNotInL1(c3, k1);
+ assert value.equals(c3.remove(k1));
+ assert null == c1.put(k1, value);
+
+ assert null == c4.getAdvancedCache().withFlags(Flag.SKIP_REMOTE_LOOKUP).remove(k1);
+ }
+
+ @Test
+ public void testSkipLookupOnAsyncRemove() throws InterruptedException, ExecutionException {
+ MagicKey k1 = new MagicKey(c1);
+ final String value = "SomethingToSayHere-async";
+
+ assert null == c1.put(k1, value);
+ assertIsInContainerImmortal(c1, k1);
+ assertIsInContainerImmortal(c2, k1);
+ assertIsNotInL1(c3, k1);
+ assertIsNotInL1(c4, k1);
+
+ assert value.equals(c1.get(k1));
+ assert value.equals(c1.remove(k1));
+ assert null == c1.put(k1, value);
+
+ assertIsNotInL1(c3, k1);
+ assert value.equals(c3.remove(k1));
+ assert null == c1.put(k1, value);
+
+ assert null == c4.getAdvancedCache().withFlags(Flag.SKIP_REMOTE_LOOKUP).removeAsync(k1).get();
+ }
+
@Override
protected boolean batchingEnabled() {
return true;
Copied: trunk/core/src/test/java/org/infinispan/distribution/DistSkipRemoteLookupWithoutL1Test.java (from rev 2625, branches/4.2.x/core/src/test/java/org/infinispan/distribution/DistSkipRemoteLookupWithoutL1Test.java)
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistSkipRemoteLookupWithoutL1Test.java (rev 0)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistSkipRemoteLookupWithoutL1Test.java 2010-10-28 14:23:31 UTC (rev 2626)
@@ -0,0 +1,12 @@
+package org.infinispan.distribution;
+
+import org.testng.annotations.Test;
+
+ at Test(groups = "functional", testName = "distribution.DistSkipRemoteLookupWithoutL1Test")
+public class DistSkipRemoteLookupWithoutL1Test extends DistSkipRemoteLookupTest {
+
+ public DistSkipRemoteLookupWithoutL1Test() {
+ l1CacheEnabled = false;
+ }
+
+}
More information about the infinispan-commits
mailing list