ignite-1561
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/84d4dec1 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/84d4dec1 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/84d4dec1 Branch: refs/heads/ignite-1561-1 Commit: 84d4dec1f0564a04213d3a2dcf667c96df6dd749 Parents: 20aa66d Author: sboikov <[email protected]> Authored: Tue Apr 18 08:38:47 2017 +0300 Committer: sboikov <[email protected]> Committed: Tue Apr 18 08:38:47 2017 +0300 ---------------------------------------------------------------------- .../distributed/dht/preloader/GridDhtPreloader.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/84d4dec1/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPreloader.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPreloader.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPreloader.java index f8e06e1..517f04a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPreloader.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPreloader.java @@ -22,7 +22,6 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReadWriteLock; @@ -107,7 +106,7 @@ public class GridDhtPreloader extends GridCachePreloaderAdapter { private final ReadWriteLock demandLock = new ReentrantReadWriteLock(); /** */ - private final ConcurrentHashMap<Integer, GridDhtLocalPartition> partsToEvict = new ConcurrentHashMap<>(); + private final ConcurrentLinkedDeque8<GridDhtLocalPartition> partsToEvict = new ConcurrentLinkedDeque8<>(); /** */ private final AtomicInteger partsEvictOwning = new AtomicInteger(); @@ -775,26 +774,28 @@ public class GridDhtPreloader extends GridCachePreloaderAdapter { /** {@inheritDoc} */ @Override public void evictPartitionAsync(GridDhtLocalPartition part) { - partsToEvict.putIfAbsent(part.id(), part); + partsToEvict.add(part); if (partsEvictOwning.get() == 0 && partsEvictOwning.compareAndSet(0, 1)) { cctx.closures().callLocalSafe(new GPC<Boolean>() { @Override public Boolean call() { boolean locked = true; - while (locked || !partsToEvict.isEmpty()) { + while (locked || !partsToEvict.isEmptyx()) { if (!locked && !partsEvictOwning.compareAndSet(0, 1)) return false; try { - for (GridDhtLocalPartition part : partsToEvict.values()) { + GridDhtLocalPartition part = partsToEvict.poll(); + + if (part != null) try { part.tryEvict(); GridDhtPartitionState state = part.state(); if (state == RENTING || ((state == MOVING || state == OWNING) && part.shouldBeRenting())) - partsToEvict.put(part.id(), part); + partsToEvict.push(part); } catch (Throwable ex) { if (cctx.kernalContext().isStopping()) { @@ -809,10 +810,9 @@ public class GridDhtPreloader extends GridCachePreloaderAdapter { else LT.error(log, ex, "Partition eviction failed, this can cause grid hang."); } - } } finally { - if (!partsToEvict.isEmpty()) + if (!partsToEvict.isEmptyx()) locked = true; else { boolean res = partsEvictOwning.compareAndSet(1, 0);
