IGNITE-52 - Added containsKeys
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/927708f9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/927708f9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/927708f9 Branch: refs/heads/sprint-1 Commit: 927708f9ef2d0adcfe269d5e57b86be9d4d04818 Parents: 03f3800 Author: Alexey Goncharuk <agoncha...@gridgain.com> Authored: Thu Feb 5 13:49:12 2015 -0800 Committer: Alexey Goncharuk <agoncha...@gridgain.com> Committed: Thu Feb 5 13:49:12 2015 -0800 ---------------------------------------------------------------------- .../java/org/apache/ignite/IgniteCache.java | 3 ++ .../apache/ignite/cache/CacheProjection.java | 8 +++- .../processors/cache/GridCacheAdapter.java | 40 ++++++++++++++++++-- .../cache/GridCacheProjectionImpl.java | 7 +++- .../processors/cache/GridCacheProxyImpl.java | 14 ++++++- .../processors/cache/IgniteCacheProxy.java | 18 +++++++++ 6 files changed, 84 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/927708f9/modules/core/src/main/java/org/apache/ignite/IgniteCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteCache.java b/modules/core/src/main/java/org/apache/ignite/IgniteCache.java index bea85dc..47b914b 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteCache.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteCache.java @@ -360,6 +360,9 @@ public interface IgniteCache<K, V> extends javax.cache.Cache<K, V>, IgniteAsyncS @IgniteAsyncSupported @Override public boolean containsKey(K key); + @IgniteAsyncSupported + public boolean containsKeys(Set<? extends K> keys); + /** {@inheritDoc} */ @IgniteAsyncSupported @Override public void put(K key, V val); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/927708f9/modules/core/src/main/java/org/apache/ignite/cache/CacheProjection.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheProjection.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheProjection.java index 45a3e25..7cc881d 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/CacheProjection.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheProjection.java @@ -348,10 +348,16 @@ public interface CacheProjection<K, V> extends Iterable<CacheEntry<K, V>> { public IgniteInternalFuture<Boolean> containsKeyAsync(K key); /** + * @param keys Keys, + * @return {@code True} if cache contains all keys. + */ + public boolean containsKeys(Collection<? extends K> keys); + + /** * @param keys Keys to check. * @return Future. */ - public IgniteFuture<Map<K, Boolean>> containsKeysAsync(Collection<? extends K> keys); + public IgniteInternalFuture<Boolean> containsKeysAsync(Collection<? extends K> keys); /** * Returns {@code true} if this cache contains given value. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/927708f9/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java index f5e67b1..96930f4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java @@ -648,6 +648,8 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>, /** {@inheritDoc} */ @Override public IgniteInternalFuture<Boolean> containsKeyAsync(final K key) { + A.notNull(key, "key"); + return getAllAsync( Collections.singletonList(key), /*force primary*/false, @@ -665,9 +667,41 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>, } /** {@inheritDoc} */ - @Override public IgniteFuture<Map<K, Boolean>> containsKeysAsync(Collection<? extends K> keys) { - // TODO ignite-52; - return null; + @Override public boolean containsKeys(Collection<? extends K> keys) { + try { + return containsKeysAsync(keys).get(); + } + catch (IgniteCheckedException e) { + throw new IgniteException(e); + } + } + + /** {@inheritDoc} */ + @Override public IgniteInternalFuture<Boolean> containsKeysAsync(Collection<? extends K> keys) { + A.notNull(keys, "keys"); + + return getAllAsync( + keys, + /*force primary*/false, + /*skip tx*/false, + /*entry*/null, + /*subj id*/null, + /*task name*/null, + /*deserialize portable*/false, + /*skip values*/true + ).chain(new CX1<IgniteInternalFuture<Map<K, V>>, Boolean>() { + @Override public Boolean applyx(IgniteInternalFuture<Map<K, V>> fut) throws IgniteCheckedException { + Map<K, V> kvMap = fut.get(); + + Map<K, Boolean> res = U.newHashMap(kvMap.size()); + + for (Map.Entry<K, V> entry : kvMap.entrySet()) + if (entry.getValue() == null) + return false; + + return true; + } + }); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/927708f9/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProjectionImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProjectionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProjectionImpl.java index 2b5256d..f808f45 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProjectionImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProjectionImpl.java @@ -621,7 +621,12 @@ public class GridCacheProjectionImpl<K, V> implements GridCacheProjectionEx<K, V } /** {@inheritDoc} */ - @Override public IgniteFuture<Map<K, Boolean>> containsKeysAsync(Collection<? extends K> keys) { + @Override public boolean containsKeys(Collection<? extends K> keys) { + return cache.containsKeys(keys); + } + + /** {@inheritDoc} */ + @Override public IgniteInternalFuture<Boolean> containsKeysAsync(Collection<? extends K> keys) { return cache.containsKeysAsync(keys); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/927708f9/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProxyImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProxyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProxyImpl.java index d909b9a..d7d0b5c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProxyImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProxyImpl.java @@ -345,6 +345,18 @@ public class GridCacheProxyImpl<K, V> implements GridCacheProxy<K, V>, Externali } /** {@inheritDoc} */ + @Override public boolean containsKeys(Collection<? extends K> keys) { + GridCacheProjectionImpl<K, V> prev = gate.enter(prj); + + try { + return delegate.containsKeys(keys); + } + finally { + gate.leave(prev); + } + } + + /** {@inheritDoc} */ @Override public IgniteInternalFuture<Boolean> containsKeyAsync(K key) { GridCacheProjectionImpl<K, V> prev = gate.enter(prj); @@ -357,7 +369,7 @@ public class GridCacheProxyImpl<K, V> implements GridCacheProxy<K, V>, Externali } /** {@inheritDoc} */ - @Override public IgniteFuture<Map<K, Boolean>> containsKeysAsync(Collection<? extends K> keys) { + @Override public IgniteInternalFuture<Boolean> containsKeysAsync(Collection<? extends K> keys) { GridCacheProjectionImpl<K, V> prev = gate.enter(prj); try { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/927708f9/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java index 959541e..9c0e1da 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java @@ -441,6 +441,24 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter<IgniteCach } /** {@inheritDoc} */ + @Override public boolean containsKeys(Set<? extends K> keys) { + GridCacheProjectionImpl<K, V> prev = gate.enter(prj); + + try { + if (isAsync()) { + setFuture(delegate.containsKeysAsync(keys)); + + return false; + } + else + return delegate.containsKeys(keys); + } + finally { + gate.leave(prev); + } + } + + /** {@inheritDoc} */ @Override public void loadAll( Set<? extends K> keys, boolean replaceExisting,