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);

Reply via email to