Repository: ignite
Updated Branches:
  refs/heads/ignite-4154-opt2 160cb202a -> 88f1a69fa


ignite-4154


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

Branch: refs/heads/ignite-4154-opt2
Commit: 88f1a69fa19d4c1af0484c5c2af97ff966efdbd0
Parents: 160cb20
Author: sboikov <[email protected]>
Authored: Wed Nov 16 16:16:58 2016 +0300
Committer: sboikov <[email protected]>
Committed: Wed Nov 16 16:16:58 2016 +0300

----------------------------------------------------------------------
 .../affinity/AffinityCalculateCache.java        |  7 ++++-
 .../affinity/GridAffinityAssignmentCache.java   |  2 ++
 .../cache/CacheAffinitySharedManager.java       | 29 +++++++++++++++++---
 .../dht/GridDhtAffinityAssignmentResponse.java  |  6 ++--
 .../CacheLateAffinityAssignmentTest.java        | 11 ++++++++
 5 files changed, 48 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/88f1a69f/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/AffinityCalculateCache.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/AffinityCalculateCache.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/AffinityCalculateCache.java
index 80ee238..49a7e49 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/AffinityCalculateCache.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/AffinityCalculateCache.java
@@ -56,8 +56,11 @@ public class AffinityCalculateCache {
         if (affGrp != null && grpAssign != null) {
             List<List<ClusterNode>> calcAssign = grpAssign.get(affGrp);
 
-            if (calcAssign != null)
+            if (calcAssign != null) {
+                assert calcAssign.size() == aff.partitions() : 
calcAssign.size();
+
                 return calcAssign;
+            }
         }
 
         AffinityFunctionContext ctx = new 
GridAffinityFunctionContextImpl(nodes,
@@ -82,6 +85,8 @@ public class AffinityCalculateCache {
             grpAssign.put(affGrp, assign);
         }
 
+        assert assign.size() == aff.partitions() : assign.size();
+
         return assign;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/88f1a69f/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
index 3b62858..85d27fd 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
@@ -207,6 +207,8 @@ public class GridAffinityAssignmentCache {
      * @param assignment Assignment.
      */
     public void idealAssignment(List<List<ClusterNode>> assignment) {
+        assert assignment == null || assignment.size() == partsCnt : partsCnt;
+
         this.idealAssignment = assignment;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/88f1a69f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
index bae3e9e..6fee738 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
@@ -104,6 +104,9 @@ public class CacheAffinitySharedManager<K, V> extends 
GridCacheSharedManagerAdap
         pendingAssignmentFetchFuts = new ConcurrentHashMap8<>();
 
     /** */
+    private int eqAffGrp;
+
+    /** */
     private final Map<Integer, EqualAffinityCacheGroup> eqAffCacheGroups = new 
HashMap<>();
 
     /**
@@ -188,17 +191,20 @@ public class CacheAffinitySharedManager<K, V> extends 
GridCacheSharedManagerAdap
             for (Map.Entry<Integer, EqualAffinityCacheGroup> e : 
eqAffCacheGroups.entrySet()) {
                 EqualAffinityCacheGroup grp = e.getValue();
 
-                if (grp.caches.containsKey(cacheId))
+                if (grp.caches.containsKey(cacheId)) {
+                    assert cfg.affinityFunction().partitions() == 
grp.caches.values().iterator().next().affinityFunction().partitions();
+
                     return e.getKey();
+                }
 
-                if (e.getValue().equalAffinity(cfg)) {
-                    e.getValue().add(cacheId, cfg);
+                if (grp.equalAffinity(cfg)) {
+                    grp.add(cacheId, cfg);
 
                     return e.getKey();
                 }
             }
 
-            Integer grp = eqAffCacheGroups.size();
+            Integer grp = eqAffGrp++;
 
             eqAffCacheGroups.put(grp, new EqualAffinityCacheGroup(cacheId, 
cfg));
 
@@ -527,6 +533,21 @@ public class CacheAffinitySharedManager<K, V> extends 
GridCacheSharedManagerAdap
             else if (req.stop() || req.close()) {
                 cctx.cache().blockGateway(req);
 
+                if (req.stop()) {
+                    synchronized (eqAffCacheGroups) {
+                        for (Iterator<EqualAffinityCacheGroup> it = 
eqAffCacheGroups.values().iterator(); it.hasNext();) {
+                            EqualAffinityCacheGroup grp = it.next();
+
+                            if (grp.caches.remove(cacheId) != null) {
+                                if (grp.caches.isEmpty())
+                                    it.remove();
+
+                                break;
+                            }
+                        }
+                    }
+                }
+
                 if (crd) {
                     boolean rmvCache = false;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/88f1a69f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtAffinityAssignmentResponse.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtAffinityAssignmentResponse.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtAffinityAssignmentResponse.java
index cad1617..af66a82 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtAffinityAssignmentResponse.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtAffinityAssignmentResponse.java
@@ -142,9 +142,11 @@ public class GridDhtAffinityAssignmentResponse extends 
GridCacheMessage {
                 List<ClusterNode> nodes = new ArrayList<>(ids.size());
 
                 for (int j = 0; j < ids.size(); j++) {
-                    ClusterNode node = disco.node(topVer, ids.get(j));
+                    UUID nodeId = ids.get(j);
 
-                    assert node != null;
+                    ClusterNode node = disco.node(topVer, nodeId);
+
+                    assert node != null : nodeId;
 
                     nodes.add(node);
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/88f1a69f/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
index 7e37450..643aa86 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
@@ -2581,6 +2581,17 @@ public class CacheLateAffinityAssignmentTest extends 
GridCommonAbstractTest {
 
             return !excludeNodes.contains(name);
         }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object obj) {
+            if (this == obj)
+                return true;
+
+            if (obj == null || !(getClass() == obj.getClass()))
+                return false;
+
+            return F.eq(excludeNodes, ((CacheNodeFilter)obj).excludeNodes);
+        }
     }
 
     /**

Reply via email to