ignite-3300 Fixed potential race.

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

Branch: refs/heads/ignite-3553
Commit: d88f7787dfcd7cc6207a3a8f7416130f8c2fe757
Parents: 2007cf8
Author: sboikov <[email protected]>
Authored: Fri Jul 22 16:32:26 2016 +0300
Committer: sboikov <[email protected]>
Committed: Fri Jul 22 16:32:53 2016 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheAffinityManager.java      | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d88f7787/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
index 5e843dc..d182bb4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
@@ -197,15 +197,21 @@ public class GridCacheAffinityManager extends 
GridCacheManagerAdapter {
     public int partition(Object key) {
         GridAffinityAssignmentCache aff0 = aff;
 
-        if (key instanceof KeyCacheObject && ((KeyCacheObject)key).partition() 
!= -1)
-            return ((KeyCacheObject)key).partition();
+        boolean keyObj = key instanceof KeyCacheObject;
+
+        if (key instanceof KeyCacheObject) {
+            int part = ((KeyCacheObject)key).partition();
+
+            if (part != -1)
+                return part;
+        }
 
         if (aff0 == null)
             throw new IgniteException(FAILED_TO_FIND_CACHE_ERR_MSG + 
cctx.name());
 
         int p = affFunction.partition(affinityKey(key));
 
-        if (key instanceof KeyCacheObject)
+        if (keyObj)
             ((KeyCacheObject)key).partition(p);
 
         return p;

Reply via email to