Repository: ignite Updated Branches: refs/heads/master 6e0ff06f8 -> 4e6727fe4
ignite-9803: handle GridDhtInvalidPartitionException in GridDhtPartitionDemander Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4e6727fe Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4e6727fe Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4e6727fe Branch: refs/heads/master Commit: 4e6727fe4c2952bb3d5be1c7767b3dd0dfe392da Parents: 6e0ff06 Author: sboikov <[email protected]> Authored: Sun Oct 7 18:15:16 2018 +0300 Committer: sboikov <[email protected]> Committed: Sun Oct 7 18:15:16 2018 +0300 ---------------------------------------------------------------------- .../dht/preloader/GridDhtPartitionDemander.java | 20 +++++++++++++++++++- .../topology/GridDhtPartitionTopologyImpl.java | 4 +++- .../dht/topology/PartitionsEvictManager.java | 16 ++++++++++------ 3 files changed, 32 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/4e6727fe/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemander.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemander.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemander.java index 40defa1..d2f8b13 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemander.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemander.java @@ -741,7 +741,25 @@ public class GridDhtPartitionDemander { int p = e.getKey(); if (aff.get(p).contains(ctx.localNode())) { - GridDhtLocalPartition part = top.localPartition(p, topVer, true); + GridDhtLocalPartition part; + + try { + part = top.localPartition(p, topVer, true); + } + catch (GridDhtInvalidPartitionException err) { + assert !topVer.equals(top.lastTopologyChangeVersion()); + + if (log.isDebugEnabled()) { + log.debug("Failed to get partition for rebalancing [" + + "grp=" + grp.cacheOrGroupName() + + ", err=" + err + + ", p=" + p + + ", topVer=" + topVer + + ", lastTopVer=" + top.lastTopologyChangeVersion() + ']'); + } + + continue; + } assert part != null; http://git-wip-us.apache.org/repos/asf/ignite/blob/4e6727fe/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 7035e37..8b5c028 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 @@ -946,8 +946,10 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { } } else if (loc != null && state == RENTING && !showRenting) { + boolean belongsNow = topVer.equals(this.readyTopVer) ? belongs : partitionLocalNode(p, this.readyTopVer); + throw new GridDhtInvalidPartitionException(p, "Adding entry to partition that is concurrently " + - "evicted [grp=" + grp.cacheOrGroupName() + ", part=" + p + ", shouldBeMoving=" + "evicted [grp=" + grp.cacheOrGroupName() + ", part=" + p + ", belongsNow=" + belongsNow + ", belongs=" + belongs + ", topVer=" + topVer + ", curTopVer=" + this.readyTopVer + "]"); } http://git-wip-us.apache.org/repos/asf/ignite/blob/4e6727fe/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionsEvictManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionsEvictManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionsEvictManager.java index cd010fa..7f2a2a7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionsEvictManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionsEvictManager.java @@ -63,6 +63,7 @@ public class PartitionsEvictManager extends GridCacheSharedManagerAdapter { /** Next time of show eviction progress. */ private long nextShowProgressTime; + /** */ private final Map<Integer, GroupEvictionContext> evictionGroupsMap = new ConcurrentHashMap<>(); /** Flag indicates that eviction process has stopped. */ @@ -177,7 +178,7 @@ public class PartitionsEvictManager extends GridCacheSharedManagerAdapter { // Print current eviction progress. showProgress(); - GroupEvictionContext groupEvictionContext = evictionTask.groupEvictionContext; + GroupEvictionContext groupEvictionContext = evictionTask.groupEvictionCtx; // Check that group or node stopping. if (groupEvictionContext.shouldStop()) @@ -390,37 +391,39 @@ public class PartitionsEvictManager extends GridCacheSharedManagerAdapter { /** Partition to evict. */ private final GridDhtLocalPartition part; + /** */ private final long size; /** Eviction context. */ - private final GroupEvictionContext groupEvictionContext; + private final GroupEvictionContext groupEvictionCtx; /** */ private final GridFutureAdapter<?> finishFut = new GridFutureAdapter<>(); /** * @param part Partition. + * @param groupEvictionCtx Eviction context. */ private PartitionEvictionTask( GridDhtLocalPartition part, - GroupEvictionContext groupEvictionContext + GroupEvictionContext groupEvictionCtx ) { this.part = part; - this.groupEvictionContext = groupEvictionContext; + this.groupEvictionCtx = groupEvictionCtx; size = part.fullSize(); } /** {@inheritDoc} */ @Override public void run() { - if (groupEvictionContext.shouldStop()) { + if (groupEvictionCtx.shouldStop()) { finishFut.onDone(); return; } try { - boolean success = part.tryClear(groupEvictionContext); + boolean success = part.tryClear(groupEvictionCtx); if (success) { if (part.state() == GridDhtPartitionState.EVICTED && part.markForDestroy()) @@ -502,6 +505,7 @@ public class PartitionsEvictManager extends GridCacheSharedManagerAdapter { /** * Offer task to queue. * + * @param task Eviction task. * @return Bucket index. */ int offer(PartitionEvictionTask task) {
