10044
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e0657d71 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e0657d71 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e0657d71 Branch: refs/heads/ignite-10044 Commit: e0657d718fcf54862295b3fc224580a901ef6d59 Parents: c969d6a Author: sboikov <[email protected]> Authored: Thu Nov 29 14:47:09 2018 +0300 Committer: sboikov <[email protected]> Committed: Thu Nov 29 15:15:12 2018 +0300 ---------------------------------------------------------------------- .../GridDhtPartitionsExchangeFuture.java | 7 +++--- .../topology/GridClientPartitionTopology.java | 20 ++++++++--------- .../topology/GridDhtPartitionTopologyImpl.java | 23 ++++++++------------ .../IgniteCachePartitionLossPolicySelfTest.java | 2 +- .../junits/common/GridCommonAbstractTest.java | 5 +++++ 5 files changed, 28 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/e0657d71/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java index 2322d8b..000791d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java @@ -3255,6 +3255,7 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte if (firstDiscoEvt.type() == EVT_DISCOVERY_CUSTOM_EVT) { assert firstDiscoEvt instanceof DiscoveryCustomEvent; + assert !events().hasServerJoin() && !events().hasServerLeft(); if (activateCluster() || changedBaseline()) assignPartitionsStates(); @@ -3276,11 +3277,11 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte assignPartitionsStates(); } else { - if (exchCtx.events().hasServerJoin()) - assignPartitionsStates(); - if (exchCtx.events().hasServerLeft()) detectLostPartitions(resTopVer, true); + + if (exchCtx.events().hasServerJoin()) + assignPartitionsStates(); } // Recalculate new affinity based on partitions availability. http://git-wip-us.apache.org/repos/asf/ignite/blob/e0657d71/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java index b1f6e19..feca1e7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java @@ -944,6 +944,15 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology { if (cur == null || !cur.equals(parts)) changed = true; + if (lostParts != null) { + for (Integer lostPart : lostParts) { + GridDhtPartitionState state0 = parts.get(lostPart); + + if (state0 != null && state0.active()) + parts.put(lostPart, LOST); + } + } + node2part.put(parts.nodeId(), parts); // Add new mappings. @@ -1245,17 +1254,6 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology { } } - if (lostParts != null) { - for (Map.Entry<UUID, GridDhtPartitionMap> e : node2part.entrySet()) { - for (Integer part : lostParts) { - GridDhtPartitionState state = e.getValue().get(part); - - if (state != null && state.active()) - e.getValue().put(part, LOST); - } - } - } - for (Map.Entry<Integer, Set<UUID>> entry : ownersByUpdCounters.entrySet()) part2node.put(entry.getKey(), entry.getValue()); http://git-wip-us.apache.org/repos/asf/ignite/blob/e0657d71/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java index 187bf9c..d518467 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java @@ -1807,6 +1807,15 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { if (cur == null || !cur.equals(parts)) changed = true; + if (lostParts != null) { + for (Integer lostPart : lostParts) { + GridDhtPartitionState state0 = parts.get(lostPart); + + if (state0 != null && state0.active()) + parts.put(lostPart, LOST); + } + } + node2part.put(parts.nodeId(), parts); // During exchange diff is calculated after all messages are received and affinity initialized. @@ -2260,20 +2269,6 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { } } - if (lostParts != null) { - for (Map.Entry<UUID, GridDhtPartitionMap> e : node2part.entrySet()) { - if (e.getKey().equals(ctx.localNodeId())) - continue; - - for (Integer part : lostParts) { - GridDhtPartitionState state = e.getValue().get(part); - - if (state != null && state.active()) - e.getValue().put(part, LOST); - } - } - } - node2part = new GridDhtPartitionFullMap(node2part, updateSeq.incrementAndGet()); } finally { lock.writeLock().unlock(); http://git-wip-us.apache.org/repos/asf/ignite/blob/e0657d71/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java index 6f4b260..100cc74 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java @@ -626,7 +626,7 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe } // Make sure cache did not really start on coordinator, - if (!clientCacheOnCrd) + if (!clientCacheOnCrd && topChanger.aliveNodes.contains(0)) assertNull(((IgniteEx)ignite(0)).context().cache().cacheGroup(CU.cacheId(CACHE_EXCLUDE_ON_CRD))); // Start new nodes after lost partitions reset. http://git-wip-us.apache.org/repos/asf/ignite/blob/e0657d71/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java index c931a0d..3017a71 100755 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java @@ -647,6 +647,9 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest { long start = 0; for (int i = 0; ; i++) { + if (c.lostPartitions().contains(p)) + break; + boolean match = false; GridCachePartitionExchangeManager<?, ?> exchMgr = dht.context().shared().exchange(); @@ -701,6 +704,8 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest { ", affNodes=" + F.nodeIds(affNodes) + ", owners=" + F.nodeIds(owners) + ", topFut=" + topFut + + ", lostParts=" + c.lostPartitions() + + ", locState=" + (loc != null ? loc.state() : null) + ", locNode=" + g.cluster().localNode() + ']'); } else
