Repository: ignite Updated Branches: refs/heads/ignite-3477 92dca1e80 -> 0e8cb0098
Re-throw NodeStoppingException from GridDhtLocalPartition.tryEvict to avoid infinite loop in GridDhtPreloader.evictPartitionAsync. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0e8cb009 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0e8cb009 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0e8cb009 Branch: refs/heads/ignite-3477 Commit: 0e8cb00985c458faa24bbb60a379b491bd080042 Parents: 92dca1e Author: sboikov <[email protected]> Authored: Mon Jan 9 11:22:15 2017 +0300 Committer: sboikov <[email protected]> Committed: Mon Jan 9 11:22:15 2017 +0300 ---------------------------------------------------------------------- .../distributed/dht/GridDhtLocalPartition.java | 40 +++++++++++++++++--- .../near/NoneRebalanceModeSelfTest.java | 4 +- 2 files changed, 36 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/0e8cb009/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java index d57c012..6bddb6b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java @@ -33,6 +33,7 @@ import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.IgniteInterruptedCheckedException; +import org.apache.ignite.internal.NodeStoppingException; import org.apache.ignite.internal.pagemem.wal.record.delta.PartitionMetaStateRecord; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheEntryPredicate; @@ -374,7 +375,12 @@ public class GridDhtLocalPartition implements Comparable<GridDhtLocalPartition>, map.removeEntry(entry); // Attempt to evict. - tryEvict(); + try { + tryEvict(); + } + catch (NodeStoppingException ignore) { + // No-op. + } } /** @@ -498,7 +504,12 @@ public class GridDhtLocalPartition implements Comparable<GridDhtLocalPartition>, if ((reservations & 0xFFFF) == 0 && shouldBeRenting) rent(true); - tryEvict(); + try { + tryEvict(); + } + catch (NodeStoppingException ignore) { + // No-op. + } break; } @@ -750,9 +761,9 @@ public class GridDhtLocalPartition implements Comparable<GridDhtLocalPartition>, } /** - * + * @throws NodeStoppingException If node is stopping. */ - public void tryEvict() { + public void tryEvict() throws NodeStoppingException { long reservations = state.get(); int ord = (int)(reservations >> 32); @@ -795,7 +806,12 @@ public class GridDhtLocalPartition implements Comparable<GridDhtLocalPartition>, * */ void onUnlock() { - tryEvict(); + try { + tryEvict(); + } + catch (NodeStoppingException ignore) { + // No-op. + } } /** @@ -849,7 +865,7 @@ public class GridDhtLocalPartition implements Comparable<GridDhtLocalPartition>, /** * Clears values for this partition. */ - public void clearAll() { + public void clearAll() throws NodeStoppingException { GridCacheVersion clearVer = cctx.versions().next(); boolean rec = cctx.events().isRecordable(EVT_CACHE_REBALANCE_OBJECT_UNLOADED); @@ -894,6 +910,12 @@ public class GridDhtLocalPartition implements Comparable<GridDhtLocalPartition>, break; // Partition is already concurrently cleared and evicted. } + catch (NodeStoppingException e) { + if (log.isDebugEnabled()) + log.debug("Failed to clear cache entry for evicted partition: " + cached.partition()); + + throw e; + } catch (IgniteCheckedException e) { U.error(log, "Failed to clear cache entry for evicted partition: " + cached, e); } @@ -943,6 +965,12 @@ public class GridDhtLocalPartition implements Comparable<GridDhtLocalPartition>, } } } + catch (NodeStoppingException e) { + if (log.isDebugEnabled()) + log.debug("Failed to get iterator for evicted partition: " + id); + + throw e; + } catch (IgniteCheckedException e) { U.error(log, "Failed to get iterator for evicted partition: " + id, e); } http://git-wip-us.apache.org/repos/asf/ignite/blob/0e8cb009/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/NoneRebalanceModeSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/NoneRebalanceModeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/NoneRebalanceModeSelfTest.java index 17defd6..b25d4c4 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/NoneRebalanceModeSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/NoneRebalanceModeSelfTest.java @@ -24,7 +24,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtLocalP import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import static org.apache.ignite.cache.CacheRebalanceMode.NONE; -import static org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtPartitionState.MOVING; +import static org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtPartitionState.OWNING; /** * Test none rebalance mode. @@ -61,7 +61,7 @@ public class NoneRebalanceModeSelfTest extends GridCommonAbstractTest { GridNearTransactionalCache cache = (GridNearTransactionalCache)((IgniteKernal)grid(0)).internalCache(null); for (GridDhtLocalPartition part : cache.dht().topology().localPartitions()) - assertEquals(MOVING, part.state()); + assertEquals(OWNING, part.state()); grid(0).cache(null).removeAll(); }
