#IGNITE-99: Add readLock in CacheAffinityProxy public methods.

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

Branch: refs/heads/sprint-1
Commit: 32203b2b6bed211fc5d2ea0968c03d1a01620963
Parents: 71b2f03
Author: ivasilinets <ivasilin...@gridgain.com>
Authored: Mon Jan 26 14:23:39 2015 +0300
Committer: ivasilinets <ivasilin...@gridgain.com>
Committed: Mon Jan 26 14:23:39 2015 +0300

----------------------------------------------------------------------
 .../affinity/GridAffinityProcessor.java         | 112 +++++++++++++++----
 1 file changed, 89 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/32203b2b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
index 331b639..ab29209 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
@@ -564,69 +564,99 @@ public class GridAffinityProcessor extends 
GridProcessorAdapter {
 
         /** {@inheritDoc} */
         @Override public int partition(K key) {
+            ctx.gateway().readLock();
+
             try {
                 return affinityCache(cacheName, 
topologyVersion()).affFunc.partition(key);
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public boolean isPrimary(ClusterNode n, K key) {
+            ctx.gateway().readLock();
+
             try {
-                return GridAffinityProcessor.this.affinityCache(cacheName, 
topologyVersion())
-                    .assignment.primaryPartitions(n.id()).contains(key);
+                return affinityCache(cacheName, 
topologyVersion()).assignment.primaryPartitions(n.id()).contains(key);
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public boolean isBackup(ClusterNode n, K key) {
+            ctx.gateway().readLock();
+
             try {
-                return GridAffinityProcessor.this.affinityCache(cacheName, 
topologyVersion())
-                    .assignment.backupPartitions(n.id()).contains(key);
+                return affinityCache(cacheName, 
topologyVersion()).assignment.backupPartitions(n.id()).contains(key);
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public boolean isPrimaryOrBackup(ClusterNode n, K key) {
-            return isPrimary(n, key) || isBackup(n, key);
+            ctx.gateway().readLock();
+
+            try {
+                return isPrimary(n, key) || isBackup(n, key);
+            }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public int[] primaryPartitions(ClusterNode n) {
+            ctx.gateway().readLock();
+
             try {
-                Set<Integer> parts = 
GridAffinityProcessor.this.affinityCache(cacheName, topologyVersion())
-                    .assignment.primaryPartitions(n.id());
+                Set<Integer> parts = affinityCache(cacheName, 
topologyVersion()).assignment.primaryPartitions(n.id());
 
                 return U.toIntArray(parts);
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public int[] backupPartitions(ClusterNode n) {
+            ctx.gateway().readLock();
+
             try {
-                Set<Integer> parts = 
GridAffinityProcessor.this.affinityCache(cacheName, topologyVersion())
-                    .assignment.backupPartitions(n.id());
+                Set<Integer> parts = affinityCache(cacheName, 
topologyVersion()).assignment.backupPartitions(n.id());
 
                 return U.toIntArray(parts);
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public int[] allPartitions(ClusterNode n) {
+            ctx.gateway().readLock();
+
             try {
                 Collection<Integer> parts = new HashSet<>();
 
@@ -647,82 +677,118 @@ public class GridAffinityProcessor extends 
GridProcessorAdapter {
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public Object affinityKey(K key) {
+            ctx.gateway().readLock();
+
             try {
-                return GridAffinityProcessor.this.affinityCache(cacheName, 
topologyVersion())
-                    .mapper.affinityKey(key);
+                return affinityCache(cacheName, 
topologyVersion()).mapper.affinityKey(key);
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public Map<ClusterNode, Collection<K>> 
mapKeysToNodes(@Nullable Collection<? extends K> keys) {
+            ctx.gateway().readLock();
+
             try {
                 return GridAffinityProcessor.this.mapKeysToNodes(keys);
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Nullable @Override public ClusterNode mapKeyToNode(K key) {
+            ctx.gateway().readLock();
+
             try {
                 return GridAffinityProcessor.this.mapKeyToNode(key);
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public Collection<ClusterNode> mapKeyToPrimaryAndBackups(K 
key) {
+            ctx.gateway().readLock();
+
             try {
-                return GridAffinityProcessor.this.affinityCache(cacheName, 
topologyVersion())
-                    .assignment.get(partition(key));
+                return affinityCache(cacheName, 
topologyVersion()).assignment.get(partition(key));
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public ClusterNode mapPartitionToNode(int part) {
+            ctx.gateway().readLock();
+
             try {
-                return 
F.first(GridAffinityProcessor.this.affinityCache(cacheName, topologyVersion())
-                    .assignment.get(part));
+                return F.first(affinityCache(cacheName, 
topologyVersion()).assignment.get(part));
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public Map<Integer, ClusterNode> 
mapPartitionsToNodes(Collection<Integer> parts) {
-            Map<Integer, ClusterNode> map = new HashMap<>();
+            ctx.gateway().readLock();
 
-            if (!F.isEmpty(parts)) {
-                for (int p : parts)
-                    map.put(p, mapPartitionToNode(p));
-            }
+            try {
+                Map<Integer, ClusterNode> map = new HashMap<>();
 
-            return map;
+                if (!F.isEmpty(parts)) {
+                    for (int p : parts)
+                        map.put(p, mapPartitionToNode(p));
+                }
+
+                return map;
+            }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /** {@inheritDoc} */
         @Override public Collection<ClusterNode> 
mapPartitionToPrimaryAndBackups(int part) {
+            ctx.gateway().readLock();
+
             try {
-                return GridAffinityProcessor.this.affinityCache(cacheName, 
topologyVersion())
-                    .assignment.get(part);
+                return affinityCache(cacheName, 
topologyVersion()).assignment.get(part);
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
             }
+            finally {
+                ctx.gateway().readUnlock();
+            }
         }
 
         /**

Reply via email to