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,

Reply via email to