ignite-5068 : WIP.

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

Branch: refs/heads/ignite-5267-merge-ea
Commit: 03586bc7c75e4b18aba9bdb875e5a7d7a77de062
Parents: cc52834
Author: Ilya Lantukh <ilant...@gridgain.com>
Authored: Fri Apr 28 16:01:12 2017 +0300
Committer: Ilya Lantukh <ilant...@gridgain.com>
Committed: Fri Apr 28 16:01:12 2017 +0300

----------------------------------------------------------------------
 .../dht/GridDhtPartitionTopologyImpl.java       | 77 ++++++++++++--------
 1 file changed, 46 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/03586bc7/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
index 6d776d2..e0fe50e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
@@ -83,6 +83,9 @@ import static 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDh
     private static final boolean FULL_MAP_DEBUG = false;
 
     /** */
+    private static final boolean FAST_DIFF_REBUILD = false;
+
+    /** */
     private static final Long ZERO = 0L;
 
     /** Context. */
@@ -989,7 +992,7 @@ import static 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDh
                 for (UUID nodeId : diffIds) {
                     assert !affIds.contains(nodeId);
 
-                    if (!affIds.contains(nodeId) && hasState(p, nodeId, 
OWNING, MOVING, RENTING)) {
+                    if (hasState(p, nodeId, OWNING, MOVING, RENTING)) {
                         ClusterNode n = cctx.discovery().node(nodeId);
 
                         if (n != null && (topVer.topologyVersion() < 0 || 
n.order() <= topVer.topologyVersion())) {
@@ -1020,43 +1023,46 @@ import static 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDh
 
         diffFromAffinity.clear();
 
-        for (Map.Entry<UUID, GridDhtPartitionMap> e : node2part.entrySet()) {
-            UUID nodeId = e.getKey();
+        if (FAST_DIFF_REBUILD) {
+            Collection<UUID> affNodes = 
F.nodeIds(cctx.discovery().cacheAffinityNodes(cctx.cacheId(), 
affAssignment.topologyVersion()));
 
-            for (Map.Entry<Integer, GridDhtPartitionState> e0 : 
e.getValue().entrySet()) {
-                int p0 = e0.getKey();
+            for (Map.Entry<Integer, Set<UUID>> e : 
diffFromAffinity.entrySet()) {
+                int p = e.getKey();
 
-                GridDhtPartitionState state = e0.getValue();
+                Iterator<UUID> iter = e.getValue().iterator();
 
-                Set<UUID> ids = diffFromAffinity.get(p0);
+                while (iter.hasNext()) {
+                    UUID nodeId = iter.next();
 
-                if ((state == MOVING || state == OWNING || state == RENTING) 
&& !affAssignment.getIds(p0).contains(nodeId)) {
-                    if (ids == null)
-                        diffFromAffinity.put(p0, ids = U.newHashSet(3));
-
-                    ids.add(nodeId);
-                }
-                else {
-                    if (ids != null)
-                        ids.remove(nodeId);
+                    if (!affNodes.contains(nodeId) || 
affAssignment.getIds(p).contains(nodeId))
+                        iter.remove();
                 }
             }
         }
+        else {
+            for (Map.Entry<UUID, GridDhtPartitionMap> e : 
node2part.entrySet()) {
+                UUID nodeId = e.getKey();
 
-//        Collection<UUID> affNodes = 
F.nodeIds(cctx.discovery().cacheAffinityNodes(cctx.cacheId(), 
affAssignment.topologyVersion()));
-//
-//        for (Map.Entry<Integer, Set<UUID>> e : diffFromAffinity.entrySet()) {
-//            int p = e.getKey();
-//
-//            Iterator<UUID> iter = e.getValue().iterator();
-//
-//            while (iter.hasNext()) {
-//                UUID nodeId = iter.next();
-//
-//                if (!affNodes.contains(nodeId) || 
affAssignment.getIds(p).contains(nodeId))
-//                    iter.remove();
-//            }
-//        }
+                for (Map.Entry<Integer, GridDhtPartitionState> e0 : 
e.getValue().entrySet()) {
+                    int p0 = e0.getKey();
+
+                    GridDhtPartitionState state = e0.getValue();
+
+                    Set<UUID> ids = diffFromAffinity.get(p0);
+
+                    if ((state == MOVING || state == OWNING || state == 
RENTING) && !affAssignment.getIds(p0).contains(nodeId)) {
+                        if (ids == null)
+                            diffFromAffinity.put(p0, ids = U.newHashSet(3));
+
+                        ids.add(nodeId);
+                    }
+                    else {
+                        if (ids != null)
+                            ids.remove(nodeId);
+                    }
+                }
+            }
+        }
 
         diffFromAffinityVer = affAssignment.topologyVersion();
     }
@@ -1924,7 +1930,16 @@ import static 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDh
             else
                 node2part = new GridDhtPartitionFullMap(node2part, 
node2part.updateSequence());
 
-            node2part.remove(nodeId);
+            GridDhtPartitionMap partMap = node2part.remove(nodeId);
+
+            if (partMap != null) {
+                for (Integer p : partMap.keySet()) {
+                    Set<UUID> diffIds = diffFromAffinity.get(p);
+
+                    if (diffIds != null)
+                        diffIds.remove(nodeId);
+                }
+            }
 
             consistencyCheck();
         }

Reply via email to