[infinispan-commits] Infinispan SVN: r1310 - in trunk: query/src/main/java/org/infinispan/query/backend and 1 other directory.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Thu Dec 17 20:11:06 EST 2009


Author: manik.surtani at jboss.com
Date: 2009-12-17 20:11:06 -0500 (Thu, 17 Dec 2009)
New Revision: 1310

Modified:
   trunk/core/src/main/java/org/infinispan/commands/write/RemoveCommand.java
   trunk/query/src/main/java/org/infinispan/query/backend/QueryInterceptor.java
Log:
[ISPN-296] NPE when removing a nonexistent key and querying is enabled

Modified: trunk/core/src/main/java/org/infinispan/commands/write/RemoveCommand.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/commands/write/RemoveCommand.java	2009-12-17 23:00:17 UTC (rev 1309)
+++ trunk/core/src/main/java/org/infinispan/commands/write/RemoveCommand.java	2009-12-18 01:11:06 UTC (rev 1310)
@@ -44,6 +44,7 @@
    public static final byte COMMAND_ID = 10;
    protected CacheNotifier notifier;
    boolean successful = true;
+   boolean nonExistent = false;
 
    /**
     * When not null, value indicates that the entry should only be removed if the key is mapped to this value. By the
@@ -72,9 +73,9 @@
    public Object perform(InvocationContext ctx) throws Throwable {
       MVCCEntry e = (MVCCEntry) 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");
          if (value == null) {
-            successful = false;
             return null;
          } else {
             successful = false;
@@ -134,4 +135,8 @@
    public boolean isConditional() {
       return value != null;
    }
+
+   public boolean isNonExistent() {
+      return nonExistent;
+   }
 }

Modified: trunk/query/src/main/java/org/infinispan/query/backend/QueryInterceptor.java
===================================================================
--- trunk/query/src/main/java/org/infinispan/query/backend/QueryInterceptor.java	2009-12-17 23:00:17 UTC (rev 1309)
+++ trunk/query/src/main/java/org/infinispan/query/backend/QueryInterceptor.java	2009-12-18 01:11:06 UTC (rev 1310)
@@ -65,7 +65,7 @@
       // remove the object out of the cache first.
       Object valueRemoved = invokeNextInterceptor(ctx, command);
 
-      if (command.isSuccessful() && shouldModifyIndexes(ctx))
+      if (command.isSuccessful() && !command.isNonExistent() && shouldModifyIndexes(ctx))
          removeFromIndexes(extractValue(valueRemoved), extractValue(command.getKey()));
 
       return valueRemoved;



More information about the infinispan-commits mailing list