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(); } }