[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