Repository: ignite
Updated Branches:
  refs/heads/ignite-2.0 d20f4588f -> 6cc43cae9


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/d1f637f7
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d1f637f7
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d1f637f7

Branch: refs/heads/ignite-2.0
Commit: d1f637f799c307b34ddabd7abb8d2f0dcf9d73b3
Parents: a826c61
Author: sboikov <sboi...@gridgain.com>
Authored: Thu Apr 20 18:35:12 2017 +0300
Committer: sboikov <sboi...@gridgain.com>
Committed: Thu Apr 20 18:35:12 2017 +0300

----------------------------------------------------------------------
 .../dht/preloader/GridDhtPreloader.java           | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d1f637f7/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..9f1b96e 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,28 @@ 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 {
+                                    partsToEvict.remove(part.id());
+
                                     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 +811,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);

Reply via email to