Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-51 9251494e2 -> 2168c9424


# ignite-51


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/cbfc3276
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/cbfc3276
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/cbfc3276

Branch: refs/heads/ignite-51
Commit: cbfc3276f4193c4e7a912813cdd8ba7932920604
Parents: ed11001
Author: sboikov <sboi...@gridgain.com>
Authored: Fri Mar 6 12:57:40 2015 +0300
Committer: sboikov <sboi...@gridgain.com>
Committed: Fri Mar 6 13:27:38 2015 +0300

----------------------------------------------------------------------
 .../processors/cache/CacheEntryPredicate.java   |  5 +++
 .../cache/CacheEntryPredicateAdapter.java       | 22 +++++++++++++
 .../cache/CacheEntryPredicateContainsValue.java |  4 +--
 .../cache/CacheEntryPredicateHasValue.java      |  2 +-
 .../cache/CacheEntryPredicateNoValue.java       |  2 +-
 .../cache/CacheEntrySerializablePredicate.java  | 11 +++++--
 .../processors/cache/GridCacheContext.java      | 33 ++++++++++++++++++++
 .../processors/cache/GridCacheMapEntry.java     |  4 +--
 .../processors/cache/GridCacheUtils.java        | 13 +++-----
 .../dht/atomic/GridDhtAtomicCache.java          |  2 +-
 .../local/atomic/GridLocalAtomicCache.java      |  2 +-
 .../cache/GridCacheMemoryModeSelfTest.java      |  8 ++---
 12 files changed, 85 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicate.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicate.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicate.java
index d1cf231..53e5ce3 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicate.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicate.java
@@ -37,4 +37,9 @@ public interface CacheEntryPredicate extends 
IgnitePredicate<GridCacheEntryEx>,
      * @throws IgniteCheckedException If failed.
      */
     public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws 
IgniteCheckedException;
+
+    /**
+     * @param locked Entry locked
+     */
+    public void entryLocked(boolean locked);
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateAdapter.java
index ef4cd3b..dad6d6b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateAdapter.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.processors.cache;
 
 import org.apache.ignite.*;
 import org.apache.ignite.plugin.extensions.communication.*;
+import org.jetbrains.annotations.*;
 
 import java.nio.*;
 
@@ -26,6 +27,9 @@ import java.nio.*;
  *
  */
 public abstract class CacheEntryPredicateAdapter implements 
CacheEntryPredicate {
+    /** */
+    protected transient boolean locked;
+
     /** {@inheritDoc} */
     @Override public void finishUnmarshal(GridCacheContext ctx, ClassLoader 
ldr) throws IgniteCheckedException {
         // No-op.
@@ -37,6 +41,11 @@ public abstract class CacheEntryPredicateAdapter implements 
CacheEntryPredicate
     }
 
     /** {@inheritDoc} */
+    @Override public void entryLocked(boolean locked) {
+        this.locked = locked;
+    }
+
+    /** {@inheritDoc} */
     @Override public byte directType() {
         assert false : this;
 
@@ -63,4 +72,17 @@ public abstract class CacheEntryPredicateAdapter implements 
CacheEntryPredicate
 
         return false;
     }
+
+    /**
+     * @param entry Entry.
+     * @return Value.
+     */
+    @Nullable protected CacheObject peekVisibleValue(GridCacheEntryEx entry) {
+        try {
+            return locked ? entry.rawGetOrUnmarshal(true) : 
entry.peekVisibleValue();
+        }
+        catch (IgniteCheckedException e) {
+            throw new IgniteException(e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
index ec23735..7767009 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
@@ -28,7 +28,7 @@ import java.nio.*;
 /**
  *
  */
-public class CacheEntryPredicateContainsValue implements CacheEntryPredicate {
+public class CacheEntryPredicateContainsValue extends 
CacheEntryPredicateAdapter {
     /** */
     @GridToStringInclude
     private CacheObject val;
@@ -52,7 +52,7 @@ public class CacheEntryPredicateContainsValue implements 
CacheEntryPredicate {
 
     /** {@inheritDoc} */
     @Override public boolean apply(GridCacheEntryEx e) {
-        CacheObject val = e.peekVisibleValue();
+        CacheObject val = peekVisibleValue(e);
 
         return F.eq(this.val.value(e.context().cacheObjectContext(), false),
             CU.value(val, e.context(), false));

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateHasValue.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateHasValue.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateHasValue.java
index fe28f92..6f9e0c8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateHasValue.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateHasValue.java
@@ -23,6 +23,6 @@ package org.apache.ignite.internal.processors.cache;
 public class CacheEntryPredicateHasValue extends CacheEntryPredicateAdapter {
     /** {@inheritDoc} */
     @Override public boolean apply(GridCacheEntryEx e) {
-        return e.peekVisibleValue() != null;
+        return peekVisibleValue(e) != null;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateNoValue.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateNoValue.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateNoValue.java
index f32f345..25cdbec 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateNoValue.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateNoValue.java
@@ -23,6 +23,6 @@ package org.apache.ignite.internal.processors.cache;
 public class CacheEntryPredicateNoValue extends CacheEntryPredicateAdapter {
     /** {@inheritDoc} */
     @Override public boolean apply(GridCacheEntryEx e) {
-        return e.peekVisibleValue() == null;
+        return peekVisibleValue(e) == null;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntrySerializablePredicate.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntrySerializablePredicate.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntrySerializablePredicate.java
index c538910..42c7846 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntrySerializablePredicate.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntrySerializablePredicate.java
@@ -37,14 +37,14 @@ public class CacheEntrySerializablePredicate implements 
CacheEntryPredicate {
     private byte[] bytes;
 
     /**
-     *
+     * Required by {@link 
org.apache.ignite.plugin.extensions.communication.Message}.
      */
     public CacheEntrySerializablePredicate() {
         // No-op.
     }
 
     /**
-     * Required by {@link 
org.apache.ignite.plugin.extensions.communication.Message}.
+     * @param p Serializable predicate.
      */
     public CacheEntrySerializablePredicate(CacheEntryPredicate p) {
         assert p != null;
@@ -60,6 +60,13 @@ public class CacheEntrySerializablePredicate implements 
CacheEntryPredicate {
     }
 
     /** {@inheritDoc} */
+    @Override public void entryLocked(boolean locked) {
+        assert p != null;
+
+        p.entryLocked(locked);
+    }
+
+    /** {@inheritDoc} */
     @Override public void finishUnmarshal(GridCacheContext ctx, ClassLoader 
ldr) throws IgniteCheckedException {
         assert p != null || bytes != null;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
index 05ae513..718eb89 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
@@ -1092,6 +1092,39 @@ public class GridCacheContext<K, V> implements 
Externalizable {
     }
 
     /**
+     * @param e Entry.
+     * @param p Predicates.
+     * @return {@code True} if predicates passed.
+     * @throws IgniteCheckedException If failed.
+     */
+    public boolean isAllLocked(GridCacheEntryEx e, CacheEntryPredicate[] p) 
throws IgniteCheckedException {
+        if (p == null || p.length == 0)
+            return true;
+
+        try {
+            for (CacheEntryPredicate p0 : p) {
+                if (p0 != null) {
+                    p0.entryLocked(true);
+
+                    if (!p0.apply(e))
+                        return false;
+                }
+            }
+        }
+        catch (RuntimeException ex) {
+            throw U.cast(ex);
+        }
+        finally {
+            for (CacheEntryPredicate p0 : p) {
+                if (p0 != null)
+                    p0.entryLocked(false);
+            }
+        }
+
+        return true;
+    }
+
+    /**
      * Forces LOCAL flag.
      *
      * @return Previously forced flags.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
index 0b22485..972a7d9 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
@@ -1372,7 +1372,7 @@ public abstract class GridCacheMapEntry implements 
GridCacheEntryEx {
 
             // Check filter inside of synchronization.
             if (!F.isEmpty(filter)) {
-                boolean pass = cctx.isAll(this, filter);
+                boolean pass = cctx.isAllLocked(this, filter);
 
                 if (!pass) {
                     if (expiryPlc != null && !readThrough && 
!cctx.putIfAbsentFilter(filter) && hasValueUnlocked())
@@ -1829,7 +1829,7 @@ public abstract class GridCacheMapEntry implements 
GridCacheEntryEx {
 
             // Check filter inside of synchronization.
             if (!F.isEmptyOrNulls(filter)) {
-                boolean pass = cctx.isAll(this, filter);
+                boolean pass = cctx.isAllLocked(this, filter);
 
                 if (!pass) {
                     if (expiryPlc != null && !readThrough && 
hasValueUnlocked() && !cctx.putIfAbsentFilter(filter))

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index 8779b5e..eafe1cf 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -901,16 +901,11 @@ public class GridCacheUtils {
     public static CacheEntryPredicate typeFilter0(final Class<?> keyType, 
final Class<?> valType) {
         return new CacheEntrySerializablePredicate(new 
CacheEntryPredicateAdapter() {
             @Override public boolean apply(GridCacheEntryEx e) {
-                try {
-                    Object val = CU.value(e.rawGetOrUnmarshal(true), 
e.context(), false);
+                Object val = CU.value(peekVisibleValue(e), e.context(), false);
 
-                    return val == null ||
-                        valType.isAssignableFrom(val.getClass()) &&
-                        
keyType.isAssignableFrom(e.key().value(e.context().cacheObjectContext(), 
false).getClass());
-                }
-                catch (IgniteCheckedException err) {
-                    throw new IgniteException(err);
-                }
+                return val == null ||
+                    valType.isAssignableFrom(val.getClass()) &&
+                    
keyType.isAssignableFrom(e.key().value(e.context().cacheObjectContext(), 
false).getClass());
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
index 6ab670d..b49dfd8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
@@ -2241,7 +2241,7 @@ public class GridDhtAtomicCache<K, V> extends 
GridDhtCacheAdapter<K, V> {
     private boolean checkFilter(GridCacheEntryEx entry, 
GridNearAtomicUpdateRequest req,
         GridNearAtomicUpdateResponse res) {
         try {
-            return ctx.isAll(entry, req.filter());
+            return ctx.isAllLocked(entry, req.filter());
         }
         catch (IgniteCheckedException e) {
             res.addFailedKey(entry.key(), e);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
index 27447d9..dee9447 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
@@ -1102,7 +1102,7 @@ public class GridLocalAtomicCache<K, V> extends 
GridCacheAdapter<K, V> {
 
                 try {
                     try {
-                        if (!ctx.isAll(entry, filter)) {
+                        if (!ctx.isAllLocked(entry, filter)) {
                             if (log.isDebugEnabled())
                                 log.debug("Entry did not pass the filter (will 
skip write) [entry=" + entry +
                                     ", filter=" + Arrays.toString(filter) + 
']');

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cbfc3276/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMemoryModeSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMemoryModeSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMemoryModeSelfTest.java
index c0c902b..6917e23 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMemoryModeSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMemoryModeSelfTest.java
@@ -241,6 +241,10 @@ public class GridCacheMemoryModeSelfTest extends 
GridCommonAbstractTest {
         assertEquals(cache, c.size());
         assertEquals(offheapSwap, c.offHeapEntriesCount() + c.swapKeys());
 
+        info("size: " + c.size());
+        info("offheap: " + c.offHeapEntriesCount());
+        info("swap: " + c.swapKeys());
+
         if (offheapEmpty)
             Assert.assertEquals(0, c.offHeapEntriesCount());
         else
@@ -251,10 +255,6 @@ public class GridCacheMemoryModeSelfTest extends 
GridCommonAbstractTest {
         else
             Assert.assertNotEquals(0, c.swapKeys());
 
-        info("size: " + c.size());
-        info("offheap: " + c.offHeapEntriesCount());
-        info("swap: " + c.swapKeys());
-
         stopAllGrids();
     }
 }

Reply via email to