You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2017/04/24 08:21:50 UTC

[32/65] [abbrv] ignite git commit: Replaced partsToEvict from queue to map to do not add the same partition several times.

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-5024
Commit: d1f637f799c307b34ddabd7abb8d2f0dcf9d73b3
Parents: a826c61
Author: sboikov <sb...@gridgain.com>
Authored: Thu Apr 20 18:35:12 2017 +0300
Committer: sboikov <sb...@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);