You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2018/10/07 15:17:09 UTC
ignite git commit: ignite-9803: handle
GridDhtInvalidPartitionException in GridDhtPartitionDemander
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 <sb...@apache.org>
Authored: Sun Oct 7 18:15:16 2018 +0300
Committer: sboikov <sb...@apache.org>
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) {