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); + } } /**
