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 2017/04/14 10:05:54 UTC
ignite git commit: Replaced partsToEvict from queue to map to do not
add the same partition several times.
Repository: ignite
Updated Branches:
refs/heads/ignite-1561 [created] 63001f1e5
Replaced partsToEvict from queue to map to do not add the same partition several times.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/63001f1e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/63001f1e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/63001f1e
Branch: refs/heads/ignite-1561
Commit: 63001f1e5e9f3cb7c113c365ba3078b3e65a2205
Parents: 52712ff
Author: sboikov <sb...@gridgain.com>
Authored: Fri Apr 14 13:05:35 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Apr 14 13:05:35 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/63001f1e/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 517f04a..f8e06e1 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,6 +22,7 @@ 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;
@@ -106,7 +107,7 @@ public class GridDhtPreloader extends GridCachePreloaderAdapter {
private final ReadWriteLock demandLock = new ReentrantReadWriteLock();
/** */
- private final ConcurrentLinkedDeque8<GridDhtLocalPartition> partsToEvict = new ConcurrentLinkedDeque8<>();
+ private final ConcurrentHashMap<Integer, GridDhtLocalPartition> partsToEvict = new ConcurrentHashMap<>();
/** */
private final AtomicInteger partsEvictOwning = new AtomicInteger();
@@ -774,28 +775,26 @@ public class GridDhtPreloader extends GridCachePreloaderAdapter {
/** {@inheritDoc} */
@Override public void evictPartitionAsync(GridDhtLocalPartition part) {
- partsToEvict.add(part);
+ partsToEvict.putIfAbsent(part.id(), 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.isEmptyx()) {
+ while (locked || !partsToEvict.isEmpty()) {
if (!locked && !partsEvictOwning.compareAndSet(0, 1))
return false;
try {
- GridDhtLocalPartition part = partsToEvict.poll();
-
- if (part != null)
+ for (GridDhtLocalPartition part : partsToEvict.values()) {
try {
part.tryEvict();
GridDhtPartitionState state = part.state();
if (state == RENTING || ((state == MOVING || state == OWNING) && part.shouldBeRenting()))
- partsToEvict.push(part);
+ partsToEvict.put(part.id(), part);
}
catch (Throwable ex) {
if (cctx.kernalContext().isStopping()) {
@@ -810,9 +809,10 @@ public class GridDhtPreloader extends GridCachePreloaderAdapter {
else
LT.error(log, ex, "Partition eviction failed, this can cause grid hang.");
}
+ }
}
finally {
- if (!partsToEvict.isEmptyx())
+ if (!partsToEvict.isEmpty())
locked = true;
else {
boolean res = partsEvictOwning.compareAndSet(1, 0);