Repository: ignite Updated Branches: refs/heads/ignite-1.5-atomic-opt [created] 42571c1d8
Debugging slowdowns Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/42571c1d Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/42571c1d Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/42571c1d Branch: refs/heads/ignite-1.5-atomic-opt Commit: 42571c1d848199e9a2c2b45a8ed496c4f6079907 Parents: a4848a7 Author: Yakov Zhdanov <[email protected]> Authored: Mon Nov 9 19:09:23 2015 +0300 Committer: Yakov Zhdanov <[email protected]> Committed: Mon Nov 9 19:09:23 2015 +0300 ---------------------------------------------------------------------- .../discovery/GridDiscoveryManager.java | 24 +++--- .../affinity/GridAffinityProcessor.java | 6 +- .../processors/cache/GridCacheContext.java | 4 +- .../cache/GridCacheExplicitLockSpan.java | 6 +- .../processors/cache/GridCacheFuture.java | 7 +- .../processors/cache/GridCacheMvcc.java | 56 ++++++++----- .../processors/cache/GridCacheMvccManager.java | 35 +++------ .../processors/cache/GridCacheUtils.java | 14 ---- .../distributed/GridCacheTxRecoveryFuture.java | 9 +-- .../GridDistributedTxRemoteAdapter.java | 4 +- .../distributed/dht/GridDhtLockFuture.java | 15 ---- .../dht/GridDhtPartitionTopologyImpl.java | 3 +- .../dht/GridDhtTransactionalCacheAdapter.java | 4 +- .../distributed/dht/GridDhtTxFinishFuture.java | 18 ----- .../distributed/dht/GridDhtTxPrepareFuture.java | 16 ---- .../dht/GridPartitionedGetFuture.java | 15 ---- .../dht/atomic/GridDhtAtomicCache.java | 2 +- .../dht/atomic/GridDhtAtomicUpdateFuture.java | 82 ++++++++++---------- .../dht/atomic/GridDhtAtomicUpdateRequest.java | 11 +++ .../dht/atomic/GridNearAtomicUpdateFuture.java | 5 -- .../dht/colocated/GridDhtColocatedCache.java | 3 +- .../colocated/GridDhtColocatedLockFuture.java | 15 ---- .../distributed/near/GridNearGetFuture.java | 14 ---- .../distributed/near/GridNearLockFuture.java | 16 ---- .../distributed/near/GridNearLockMapping.java | 6 +- ...arOptimisticSerializableTxPrepareFuture.java | 13 ---- .../near/GridNearOptimisticTxPrepareFuture.java | 13 ---- .../GridNearPessimisticTxPrepareFuture.java | 10 --- .../near/GridNearTransactionalCache.java | 5 +- .../near/GridNearTxFinishFuture.java | 17 ---- .../distributed/near/GridNearTxRemote.java | 63 ++++++++------- .../cache/local/GridLocalLockFuture.java | 9 +-- .../cache/transactions/IgniteTxEntry.java | 3 +- .../processors/task/GridTaskWorker.java | 9 ++- .../ignite/internal/util/GridLeanMap.java | 2 +- .../ignite/internal/util/lang/GridFunc.java | 8 +- 36 files changed, 183 insertions(+), 359 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java index cd2f49c..b92781c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java @@ -43,7 +43,6 @@ import java.util.UUID; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingQueue; @@ -80,6 +79,7 @@ import org.apache.ignite.internal.processors.security.SecurityContext; import org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor; import org.apache.ignite.internal.util.F0; import org.apache.ignite.internal.util.GridBoundedConcurrentOrderedMap; +import org.apache.ignite.internal.util.GridConcurrentHashSet; import org.apache.ignite.internal.util.GridSpinBusyLock; import org.apache.ignite.internal.util.future.GridFinishedFuture; import org.apache.ignite.internal.util.future.GridFutureAdapter; @@ -2461,17 +2461,17 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { allNodes = Collections.unmodifiableList(all); - Map<String, Collection<ClusterNode>> cacheMap = new HashMap<>(allNodes.size(), 1.0f); - Map<String, Collection<ClusterNode>> rmtCacheMap = new HashMap<>(allNodes.size(), 1.0f); - Map<String, Collection<ClusterNode>> dhtNodesMap = new HashMap<>(allNodes.size(), 1.0f); - Collection<ClusterNode> nodesWithCaches = new HashSet<>(allNodes.size()); - Collection<ClusterNode> rmtNodesWithCaches = new HashSet<>(allNodes.size()); - - aliveCacheNodes = new ConcurrentHashMap8<>(allNodes.size(), 1.0f); - aliveRmtCacheNodes = new ConcurrentHashMap8<>(allNodes.size(), 1.0f); - aliveNodesWithCaches = new ConcurrentSkipListSet<>(); - aliveSrvNodesWithCaches = new ConcurrentSkipListSet<>(); - aliveRmtSrvNodesWithCaches = new ConcurrentSkipListSet<>(); + Map<String, Collection<ClusterNode>> cacheMap = U.newHashMap(allNodes.size()); + Map<String, Collection<ClusterNode>> rmtCacheMap = U.newHashMap(allNodes.size()); + Map<String, Collection<ClusterNode>> dhtNodesMap = U.newHashMap(allNodes.size()); + Collection<ClusterNode> nodesWithCaches = U.newHashSet(allNodes.size()); + Collection<ClusterNode> rmtNodesWithCaches = U.newHashSet(allNodes.size()); + + aliveCacheNodes = new ConcurrentHashMap8<>(U.capacity(allNodes.size())); + aliveRmtCacheNodes = new ConcurrentHashMap8<>(U.capacity(allNodes.size())); + aliveNodesWithCaches = new GridConcurrentHashSet<>(U.capacity(allNodes.size())); + aliveSrvNodesWithCaches = new GridConcurrentHashSet<>(U.capacity(allNodes.size())); + aliveRmtSrvNodesWithCaches = new GridConcurrentHashSet<>(U.capacity(allNodes.size())); nodesByVer = new TreeMap<>(); long maxOrder0 = 0; http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java index 8f66dc1..4d248f2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java @@ -17,12 +17,12 @@ package org.apache.ignite.internal.processors.affinity; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -475,7 +475,7 @@ public class GridAffinityProcessor extends GridProcessorAdapter { Collection<K> mapped = map.get(n); if (mapped == null) - map.put(n, mapped = new LinkedList<>()); + map.put(n, mapped = new ArrayList<>()); mapped.add(k); } @@ -906,4 +906,4 @@ public class GridAffinityProcessor extends GridProcessorAdapter { return ctx.discovery().topologyVersion(); } } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java index ee4da46..c928d66 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java @@ -1586,7 +1586,7 @@ public class GridCacheContext<K, V> implements Externalizable { List<GridDhtCacheEntry> entries = map.get(n); if (entries == null) - map.put(n, entries = new LinkedList<>()); + map.put(n, entries = new ArrayList<>()); entries.add(entry); } @@ -1891,7 +1891,7 @@ public class GridCacheContext<K, V> implements Externalizable { cache().printMemoryStats(); - Collection<GridCacheManager> printed = new LinkedList<>(); + Collection<GridCacheManager> printed = new ArrayList<>(); for (GridCacheManager mgr : managers()) { mgr.printMemoryStats(); http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheExplicitLockSpan.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheExplicitLockSpan.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheExplicitLockSpan.java index df32e77..527bb4e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheExplicitLockSpan.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheExplicitLockSpan.java @@ -17,9 +17,9 @@ package org.apache.ignite.internal.processors.cache; +import java.util.ArrayDeque; import java.util.Deque; import java.util.HashMap; -import java.util.LinkedList; import java.util.Map; import java.util.concurrent.locks.ReentrantLock; import org.apache.ignite.internal.IgniteInternalFuture; @@ -262,7 +262,7 @@ public class GridCacheExplicitLockSpan extends ReentrantLock { Deque<GridCacheMvccCandidate> deque = cands.get(key); if (deque == null) { - deque = new LinkedList<>(); + deque = new ArrayDeque<>(); cands.put(key, deque); } @@ -281,4 +281,4 @@ public class GridCacheExplicitLockSpan extends ReentrantLock { unlock(); } } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheFuture.java index caa3d3f..0cc76b3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheFuture.java @@ -39,11 +39,6 @@ public interface GridCacheFuture<R> extends IgniteInternalFuture<R> { public GridCacheVersion version(); /** - * @return Involved nodes. - */ - public Collection<? extends ClusterNode> nodes(); - - /** * Callback for when node left. * * @param nodeId Left node ID. @@ -60,4 +55,4 @@ public interface GridCacheFuture<R> extends IgniteInternalFuture<R> { * Marks this future as non-trackable. */ public void markNotTrackable(); -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java index 12583ad..61a12b4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java @@ -17,13 +17,13 @@ package org.apache.ignite.internal.processors.cache; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Deque; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.UUID; @@ -86,11 +86,11 @@ public final class GridCacheMvcc { /** Local queue. */ @GridToStringInclude - private LinkedList<GridCacheMvccCandidate> locs; + private List<GridCacheMvccCandidate> locs; /** Remote queue. */ @GridToStringInclude - private LinkedList<GridCacheMvccCandidate> rmts; + private List<GridCacheMvccCandidate> rmts; /** * @param cctx Cache context. @@ -124,7 +124,7 @@ public final class GridCacheMvcc { if (rmts != null) { assert !rmts.isEmpty(); - GridCacheMvccCandidate first = rmts.getFirst(); + GridCacheMvccCandidate first = rmts.get(0); return first.used() && first.owner() ? first : null; } @@ -140,7 +140,7 @@ public final class GridCacheMvcc { if (locs != null) { assert !locs.isEmpty(); - GridCacheMvccCandidate first = locs.getFirst(); + GridCacheMvccCandidate first = locs.get(0); return first.owner() ? first : null; } @@ -195,12 +195,12 @@ public final class GridCacheMvcc { // Local. if (cand.local()) { if (locs == null) - locs = new LinkedList<>(); + locs = new ArrayList<>(); if (!cand.nearLocal()) { if (!locs.isEmpty()) { if (cand.serializable()) { - GridCacheMvccCandidate last = locs.getLast(); + GridCacheMvccCandidate last = locs.get(locs.size() - 1); if (!last.serializable()) return false; @@ -220,12 +220,12 @@ public final class GridCacheMvcc { if (cmp > 0) return false; - locs.addLast(cand); + locs.add(cand); return true; } - GridCacheMvccCandidate first = locs.getFirst(); + GridCacheMvccCandidate first = locs.get(0); if (first.owner()) { // If reentry, add at the beginning. Note that @@ -237,7 +237,13 @@ public final class GridCacheMvcc { cand.setReady(); cand.setReentry(); - locs.addFirst(cand); + List<GridCacheMvccCandidate> locs0 = new ArrayList<>(); + + locs0.add(cand); + + locs0.addAll(locs); + + locs = locs0; return true; } @@ -275,8 +281,13 @@ public final class GridCacheMvcc { } } - // Either list is empty or candidate is first. - locs.addFirst(cand); + List<GridCacheMvccCandidate> locs0 = new ArrayList<>(); + + locs0.add(cand); + + locs0.addAll(locs); + + locs = locs0; } else // For near local candidates just add it to the end of list. @@ -287,7 +298,7 @@ public final class GridCacheMvcc { assert !cand.serializable() : cand; if (rmts == null) - rmts = new LinkedList<>(); + rmts = new ArrayList<>(); assert !cand.owner() || localOwner() == null : "Cannot have local and remote owners " + "at the same time [cand=" + cand + ", locs=" + locs + ", rmts=" + rmts + ']'; @@ -429,7 +440,7 @@ public final class GridCacheMvcc { else if (maxIdx >= 0 && cur.version().isGreaterEqual(baseVer)) { if (--maxIdx >= 0) { if (mvAfter == null) - mvAfter = new LinkedList<>(); + mvAfter = new ArrayDeque<>(); it.remove(); @@ -799,7 +810,7 @@ public final class GridCacheMvcc { it.remove(); if (mvAfter == null) - mvAfter = new LinkedList<>(); + mvAfter = new ArrayList<>(); mvAfter.add(c); } @@ -879,7 +890,7 @@ public final class GridCacheMvcc { it.remove(); if (mvAfter == null) - mvAfter = new LinkedList<>(); + mvAfter = new ArrayList<>(); mvAfter.add(c); } @@ -1045,8 +1056,13 @@ public final class GridCacheMvcc { if (assigned) { it.remove(); - // Owner must be first in the list. - locs.addFirst(cand); + List<GridCacheMvccCandidate> locs0 = new ArrayList<>(); + + locs0.add(cand); + + locs0.addAll(locs); + + locs = locs0; } return; @@ -1353,14 +1369,14 @@ public final class GridCacheMvcc { * @return First remote entry or <tt>null</tt>. */ @Nullable public GridCacheMvccCandidate firstRemote() { - return rmts == null ? null : rmts.getFirst(); + return rmts == null ? null : rmts.get(0); } /** * @return First local entry or <tt>null</tt>. */ @Nullable public GridCacheMvccCandidate firstLocal() { - return locs == null ? null : locs.getFirst(); + return locs == null ? null : locs.get(0); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java index 2c14209..47f08bc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java @@ -17,13 +17,14 @@ package org.apache.ignite.internal.processors.cache; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedList; import java.util.Map; import java.util.Set; import java.util.UUID; @@ -32,7 +33,6 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentSkipListSet; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteLogger; -import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.events.DiscoveryEvent; import org.apache.ignite.events.Event; import org.apache.ignite.internal.IgniteClientDisconnectedCheckedException; @@ -78,10 +78,10 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter { private static final int MAX_REMOVED_LOCKS = 10240; /** Pending locks per thread. */ - private final ThreadLocal<LinkedList<GridCacheMvccCandidate>> pending = - new ThreadLocal<LinkedList<GridCacheMvccCandidate>>() { - @Override protected LinkedList<GridCacheMvccCandidate> initialValue() { - return new LinkedList<>(); + private final ThreadLocal<Deque<GridCacheMvccCandidate>> pending = + new ThreadLocal<Deque<GridCacheMvccCandidate>>() { + @Override protected Deque<GridCacheMvccCandidate> initialValue() { + return new ArrayDeque<>(); } }; @@ -505,20 +505,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter { break; } - // Close window in case of node is gone before the future got added to - // the map of futures. - for (ClusterNode n : fut.nodes()) { - if (cctx.discovery().node(n.id()) == null) - fut.onNodeLeft(n.id()); - } - - // Just in case if future was completed before it was added. - if (fut.isDone()) - removeFuture(fut); - else - onFutureAdded(fut); - - return true; + return onFutureAdded(fut); } /** @@ -678,7 +665,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter { * @return Remote candidates. */ public Collection<GridCacheMvccCandidate> remoteCandidates() { - Collection<GridCacheMvccCandidate> rmtCands = new LinkedList<>(); + Collection<GridCacheMvccCandidate> rmtCands = new ArrayList<>(); for (GridDistributedCacheEntry entry : locked()) rmtCands.addAll(entry.remoteMvccSnapshot()); @@ -692,7 +679,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter { * @return Local candidates. */ public Collection<GridCacheMvccCandidate> localCandidates() { - Collection<GridCacheMvccCandidate> locCands = new LinkedList<>(); + Collection<GridCacheMvccCandidate> locCands = new ArrayList<>(); for (GridDistributedCacheEntry entry : locked()) { try { @@ -758,7 +745,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter { if (cacheCtx.isNear() || cand.singleImplicit()) return true; - LinkedList<GridCacheMvccCandidate> queue = pending.get(); + Deque<GridCacheMvccCandidate> queue = pending.get(); GridCacheMvccCandidate prev = null; @@ -783,7 +770,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter { * Reset MVCC context. */ public void contextReset() { - pending.set(new LinkedList<GridCacheMvccCandidate>()); + pending.remove(); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java index f7d115f..d94b016 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java @@ -836,20 +836,6 @@ public class GridCacheUtils { * @param k map key. * @return Either current list value or newly created one. */ - public static <K, V> Collection<V> getOrSet(Map<K, List<V>> mappings, K k) { - List<V> vals = mappings.get(k); - - if (vals == null) - mappings.put(k, vals = new LinkedList<>()); - - return vals; - } - - /** - * @param mappings Mappings. - * @param k map key. - * @return Either current list value or newly created one. - */ public static <K, V> Collection<V> getOrSet(ConcurrentMap<K, Collection<V>> mappings, K k) { Collection<V> vals = mappings.get(k); http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTxRecoveryFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTxRecoveryFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTxRecoveryFuture.java index b266c4d..182b55c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTxRecoveryFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTxRecoveryFuture.java @@ -46,9 +46,9 @@ import org.jetbrains.annotations.Nullable; * Future verifying that all remote transactions related to transaction were prepared or committed. */ public class GridCacheTxRecoveryFuture extends GridCompoundIdentityFuture<Boolean> implements GridCacheFuture<Boolean> { - /** */ + /** */ private static final long serialVersionUID = 0L; - + /** Logger reference. */ private static final AtomicReference<IgniteLogger> logRef = new AtomicReference<>(); @@ -369,11 +369,6 @@ public class GridCacheTxRecoveryFuture extends GridCompoundIdentityFuture<Boolea } /** {@inheritDoc} */ - @Override public Collection<? extends ClusterNode> nodes() { - return nodes.values(); - } - - /** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { for (IgniteInternalFuture<?> fut : futures()) if (isMini(fut)) { http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java index 93303c8..5bc1448 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java @@ -18,9 +18,9 @@ package org.apache.ignite.internal.processors.cache.distributed; import java.io.Externalizable; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -821,7 +821,7 @@ public class GridDistributedTxRemoteAdapter extends IgniteTxAdapter protected void addExplicit(IgniteTxEntry e) { if (e.explicitVersion() != null) { if (explicitVers == null) - explicitVers = new LinkedList<>(); + explicitVers = new ArrayList<>(); if (!explicitVers.contains(e.explicitVersion())) { explicitVers.add(e.explicitVersion()); http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java index 579d701..c3c996f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java @@ -63,7 +63,6 @@ import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.transactions.TransactionIsolation; import org.jetbrains.annotations.NotNull; @@ -262,20 +261,6 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean> log.debug("Added invalid partition to future [invalidPart=" + invalidPart + ", fut=" + this + ']'); } - /** - * @return Participating nodes. - */ - @Override public Collection<? extends ClusterNode> nodes() { - return F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<?>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<?> f) { - if (isMini(f)) - return ((MiniFuture)f).node(); - - return cctx.discovery().localNode(); - } - }); - } - /** {@inheritDoc} */ @Override public GridCacheVersion version() { return lockVer; http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java index 6bd283a..3d007cf 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -608,7 +607,7 @@ class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { /** {@inheritDoc} */ @Override public List<GridDhtLocalPartition> localPartitions() { - return new LinkedList<>(locParts.values()); + return new ArrayList<>(locParts.values()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java index 3069afd..aab0c6c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java @@ -21,7 +21,6 @@ import java.io.Externalizable; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.Map; @@ -39,7 +38,6 @@ import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheEntryEx; import org.apache.ignite.internal.processors.cache.GridCacheEntryInfo; import org.apache.ignite.internal.processors.cache.GridCacheEntryRemovedException; -import org.apache.ignite.internal.processors.cache.GridCacheFilterFailedException; import org.apache.ignite.internal.processors.cache.GridCacheLockTimeoutException; import org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate; import org.apache.ignite.internal.processors.cache.GridCacheReturn; @@ -1401,7 +1399,7 @@ public abstract class GridDhtTransactionalCacheAdapter<K, V> extends GridDhtCach List<KeyCacheObject> keys = map.get(n); if (keys == null) - map.put(n, keys = new LinkedList<>()); + map.put(n, keys = new ArrayList<>()); keys.add(entry.key()); } http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java index 992bd66..5661d3c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java @@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.cache.distributed.dht; import java.util.Collection; import java.util.Map; -import java.util.Set; import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; import org.apache.ignite.IgniteCheckedException; @@ -42,9 +41,7 @@ import org.apache.ignite.internal.util.typedef.C1; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteUuid; -import org.jetbrains.annotations.Nullable; import static org.apache.ignite.transactions.TransactionState.COMMITTING; @@ -119,21 +116,6 @@ public final class GridDhtTxFinishFuture<K, V> extends GridCompoundIdentityFutur return tx.xidVersion(); } - /** - * @return Involved nodes. - */ - @Override public Collection<? extends ClusterNode> nodes() { - return - F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<?>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<?> f) { - if (isMini(f)) - return ((MiniFuture)f).node(); - - return cctx.discovery().localNode(); - } - }); - } - /** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { for (IgniteInternalFuture<?> fut : futures()) http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java index 1d6f633..bac6ee0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java @@ -74,7 +74,6 @@ import org.apache.ignite.internal.util.typedef.T2; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteFutureCancelledException; import org.apache.ignite.lang.IgniteReducer; import org.apache.ignite.lang.IgniteUuid; @@ -249,21 +248,6 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter return tx.xidVersion(); } - /** - * @return Involved nodes. - */ - @Override public Collection<? extends ClusterNode> nodes() { - return - F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<?>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<?> f) { - if (isMini(f)) - return ((MiniFuture)f).node(); - - return cctx.discovery().localNode(); - } - }); - } - /** {@inheritDoc} */ @Override public boolean onOwnerChanged(GridCacheEntryEx entry, GridCacheMvccCandidate owner) { if (log.isDebugEnabled()) http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java index febe9ba..549437b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java @@ -57,7 +57,6 @@ import org.apache.ignite.internal.util.typedef.T2; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteUuid; import org.jetbrains.annotations.Nullable; @@ -165,20 +164,6 @@ public class GridPartitionedGetFuture<K, V> extends CacheDistributedGetFutureAda } /** {@inheritDoc} */ - @SuppressWarnings("unchecked") - @Override public Collection<? extends ClusterNode> nodes() { - return - F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<Map<K, V>>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<Map<K, V>> f) { - if (isMini(f)) - return ((MiniFuture)f).node(); - - return cctx.discovery().localNode(); - } - }); - } - - /** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { boolean found = false; http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java index 7f9edb2..15b27d6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java @@ -1640,7 +1640,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> { if (val == null) { if (needReload == null) - needReload = new HashMap<>(entries.size(), 1.0f); + needReload = U.newHashMap(entries.size()); needReload.put(entry.key(), i); } http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java index 4ace5c4..0159290 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateFuture.java @@ -22,7 +22,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.UUID; -import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicReference; import javax.cache.processor.EntryProcessor; import org.apache.ignite.IgniteCheckedException; @@ -48,7 +47,6 @@ import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteUuid; import org.jetbrains.annotations.Nullable; -import org.jsr166.ConcurrentHashMap8; import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC; @@ -67,39 +65,42 @@ public class GridDhtAtomicUpdateFuture extends GridFutureAdapter<Void> protected static IgniteLogger log; /** Cache context. */ - private GridCacheContext cctx; + private final GridCacheContext cctx; /** Future version. */ - private GridCacheVersion futVer; + private final GridCacheVersion futVer; /** Write version. */ - private GridCacheVersion writeVer; + private final GridCacheVersion writeVer; /** Force transform backup flag. */ private boolean forceTransformBackups; /** Completion callback. */ @GridToStringExclude - private CI2<GridNearAtomicUpdateRequest, GridNearAtomicUpdateResponse> completionCb; + private final CI2<GridNearAtomicUpdateRequest, GridNearAtomicUpdateResponse> completionCb; /** Mappings. */ @GridToStringInclude - private ConcurrentMap<UUID, GridDhtAtomicUpdateRequest> mappings = new ConcurrentHashMap8<>(); + private final Map<UUID, GridDhtAtomicUpdateRequest> mappings; /** Entries with readers. */ private Map<KeyCacheObject, GridDhtCacheEntry> nearReadersEntries; /** Update request. */ - private GridNearAtomicUpdateRequest updateReq; + private final GridNearAtomicUpdateRequest updateReq; /** Update response. */ - private GridNearAtomicUpdateResponse updateRes; + private final GridNearAtomicUpdateResponse updateRes; /** Future keys. */ - private Collection<KeyCacheObject> keys; + private final Collection<KeyCacheObject> keys; /** */ - private boolean waitForExchange; + private final boolean waitForExchange; + + /** Response count. */ + private volatile int resCnt; /** * @param cctx Cache context. @@ -128,6 +129,7 @@ public class GridDhtAtomicUpdateFuture extends GridFutureAdapter<Void> log = U.logger(cctx.kernalContext(), logRef, GridDhtAtomicUpdateFuture.class); keys = new ArrayList<>(updateReq.keys().size()); + mappings = U.newHashMap(updateReq.keys().size()); boolean topLocked = updateReq.topologyLocked() || (updateReq.fastMap() && !updateReq.clientRequest()); @@ -145,22 +147,37 @@ public class GridDhtAtomicUpdateFuture extends GridFutureAdapter<Void> } /** {@inheritDoc} */ - @Override public Collection<? extends ClusterNode> nodes() { - return F.view(F.viewReadOnly(mappings.keySet(), U.id2Node(cctx.kernalContext())), F.notNull()); - } - - /** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { if (log.isDebugEnabled()) log.debug("Processing node leave event [fut=" + this + ", nodeId=" + nodeId + ']'); + return registerResponse(nodeId); + } + + /** + * @param nodeId Node ID. + * @return {@code True} if request found. + */ + private boolean registerResponse(UUID nodeId) { + int resCnt0 = -1; + GridDhtAtomicUpdateRequest req = mappings.get(nodeId); if (req != null) { - // Remove only after added keys to failed set. - mappings.remove(nodeId); + synchronized (this) { + if (req.onResponse()) { + resCnt0 = resCnt; + + resCnt0 += 1; + + resCnt = resCnt0; + } + else + return false; + } - checkComplete(); + if (resCnt0 == mappings.size()) + onDone(); return true; } @@ -343,19 +360,17 @@ public class GridDhtAtomicUpdateFuture extends GridFutureAdapter<Void> U.warn(log, "Failed to send update request to backup node because it left grid: " + req.nodeId()); - mappings.remove(req.nodeId()); + registerResponse(req.nodeId()); } catch (IgniteCheckedException e) { U.error(log, "Failed to send update request to backup node (did node leave the grid?): " + req.nodeId(), e); - mappings.remove(req.nodeId()); + registerResponse(req.nodeId()); } } } - checkComplete(); - // Send response right away if no ACKs from backup is required. // Backups will send ACKs anyway, future will be completed after all backups have replied. if (updateReq.writeSynchronizationMode() != FULL_SYNC) @@ -389,9 +404,7 @@ public class GridDhtAtomicUpdateFuture extends GridFutureAdapter<Void> } } - mappings.remove(nodeId); - - checkComplete(); + registerResponse(nodeId); } /** @@ -403,22 +416,7 @@ public class GridDhtAtomicUpdateFuture extends GridFutureAdapter<Void> if (log.isDebugEnabled()) log.debug("Received deferred DHT atomic update future result [nodeId=" + nodeId + ']'); - mappings.remove(nodeId); - - checkComplete(); - } - - /** - * Checks if all required responses are received. - */ - private void checkComplete() { - // Always wait for replies from all backups. - if (mappings.isEmpty()) { - if (log.isDebugEnabled()) - log.debug("Completing DHT atomic update future: " + this); - - onDone(); - } + registerResponse(nodeId); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java index e55cac9..1219f2f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java @@ -139,6 +139,10 @@ public class GridDhtAtomicUpdateRequest extends GridCacheMessage implements Grid /** Task name hash. */ private int taskNameHash; + /** On response flag. Access should be synced on future. */ + @GridDirectTransient + private boolean onRes; + /** * Empty constructor required by {@link Externalizable}. */ @@ -527,6 +531,13 @@ public class GridDhtAtomicUpdateRequest extends GridCacheMessage implements Grid } /** + * @return {@code True} if on response flag changed. + */ + public boolean onResponse() { + return !onRes && (onRes = true); + } + + /** * @return Optional arguments for entry processor. */ @Nullable public Object[] invokeArguments() { http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java index ae662c8..a786803 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java @@ -238,11 +238,6 @@ public class GridNearAtomicUpdateFuture extends GridFutureAdapter<Object> return state.futureVersion(); } - /** {@inheritDoc} */ - @Override public Collection<? extends ClusterNode> nodes() { - throw new UnsupportedOperationException(); - } - /** * @return {@code True} if this future should block partition map exchange. */ http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java index 83c220d..9148edf 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java @@ -21,7 +21,6 @@ import java.io.Externalizable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.LinkedList; import java.util.Map; import java.util.UUID; import org.apache.ignite.IgniteCheckedException; @@ -634,7 +633,7 @@ public class GridDhtColocatedCache<K, V> extends GridDhtTransactionalCacheAdapte Map<ClusterNode, GridNearUnlockRequest> map = null; - Collection<KeyCacheObject> locKeys = new LinkedList<>(); + Collection<KeyCacheObject> locKeys = new ArrayList<>(); for (KeyCacheObject key : keys) { IgniteTxKey txKey = ctx.txKey(key); http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java index 365b46b..1d15301 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java @@ -65,7 +65,6 @@ import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.transactions.TransactionIsolation; import org.jetbrains.annotations.Nullable; @@ -198,20 +197,6 @@ public final class GridDhtColocatedLockFuture extends GridCompoundIdentityFuture valMap = new ConcurrentHashMap8<>(keys.size(), 1f); } - /** - * @return Participating nodes. - */ - @Override public Collection<? extends ClusterNode> nodes() { - return F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<?>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<?> f) { - if (isMini(f)) - return ((MiniFuture)f).node(); - - return cctx.discovery().localNode(); - } - }); - } - /** {@inheritDoc} */ @Override public GridCacheVersion version() { return lockVer; http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java index ae1d43c..a2e1055 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java @@ -60,7 +60,6 @@ import org.apache.ignite.internal.util.typedef.T2; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteUuid; import org.jetbrains.annotations.Nullable; @@ -175,19 +174,6 @@ public final class GridNearGetFuture<K, V> extends CacheDistributedGetFutureAdap } /** {@inheritDoc} */ - @Override public Collection<? extends ClusterNode> nodes() { - return - F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<Map<K, V>>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<Map<K, V>> f) { - if (isMini(f)) - return ((MiniFuture)f).node(); - - return cctx.discovery().localNode(); - } - }); - } - - /** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { boolean found = false; http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java index c5b55bd..f90c319 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java @@ -57,12 +57,10 @@ import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.C2; import org.apache.ignite.internal.util.typedef.CI1; -import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.transactions.TransactionIsolation; import org.jetbrains.annotations.Nullable; @@ -209,20 +207,6 @@ public final class GridNearLockFuture extends GridCompoundIdentityFuture<Boolean valMap = new ConcurrentHashMap8<>(keys.size(), 1f); } - /** - * @return Participating nodes. - */ - @Override public Collection<? extends ClusterNode> nodes() { - return F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<?>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<?> f) { - if (isMini(f)) - return ((MiniFuture)f).node(); - - return cctx.discovery().localNode(); - } - }); - } - /** {@inheritDoc} */ @Override public GridCacheVersion version() { return lockVer; http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockMapping.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockMapping.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockMapping.java index b4f689c..2ed9b22 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockMapping.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockMapping.java @@ -17,8 +17,8 @@ package org.apache.ignite.internal.processors.cache.distributed.near; +import java.util.ArrayList; import java.util.Collection; -import java.util.LinkedList; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.util.tostring.GridToStringExclude; @@ -35,7 +35,7 @@ public class GridNearLockMapping { /** Collection of mapped keys. */ @GridToStringInclude - private Collection<KeyCacheObject> mappedKeys = new LinkedList<>(); + private Collection<KeyCacheObject> mappedKeys = new ArrayList<>(); /** Near lock request. */ @GridToStringExclude @@ -115,4 +115,4 @@ public class GridNearLockMapping { public String toString() { return S.toString(GridNearLockMapping.class, this); } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java index 5488bb1..6c09254 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java @@ -61,7 +61,6 @@ import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteProductVersion; import org.apache.ignite.lang.IgniteReducer; import org.apache.ignite.lang.IgniteUuid; @@ -149,18 +148,6 @@ public class GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim } /** {@inheritDoc} */ - @Override public Collection<? extends ClusterNode> nodes() { - return F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<?>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<?> f) { - if (isMini(f)) - return ((MiniFuture)f).node(); - - return cctx.discovery().localNode(); - } - }); - } - - /** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { boolean found = false; http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java index 0002180..70e3f4a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java @@ -53,7 +53,6 @@ import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.transactions.TransactionTimeoutException; import org.jetbrains.annotations.Nullable; @@ -99,18 +98,6 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa } /** {@inheritDoc} */ - @Override public Collection<? extends ClusterNode> nodes() { - return F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<?>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<?> f) { - if (isMini(f)) - return ((MiniFuture)f).node(); - - return cctx.discovery().localNode(); - } - }); - } - - /** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { boolean found = false; http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java index 11d31b2..58f04a7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java @@ -42,7 +42,6 @@ import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteUuid; import org.jetbrains.annotations.Nullable; @@ -68,15 +67,6 @@ public class GridNearPessimisticTxPrepareFuture extends GridNearTxPrepareFutureA } /** {@inheritDoc} */ - @Override public Collection<? extends ClusterNode> nodes() { - return F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<?>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<?> f) { - return ((MiniFuture)f).node(); - } - }); - } - - /** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { boolean found = false; http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java index 5ab85b2..2d0b801 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.processors.cache.distributed.near; import java.io.Externalizable; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; @@ -364,7 +365,7 @@ public class GridNearTransactionalCache<K, V> extends GridNearCacheAdapter<K, V> } else { if (evicted == null) - evicted = new LinkedList<>(); + evicted = new ArrayList<>(); evicted.add(txKey); } @@ -508,7 +509,7 @@ public class GridNearTransactionalCache<K, V> extends GridNearCacheAdapter<K, V> Map<ClusterNode, GridNearUnlockRequest> map = null; - Collection<KeyCacheObject> locKeys = new LinkedList<>(); + Collection<KeyCacheObject> locKeys = new ArrayList<>(); for (K key : keys) { while (true) { http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java index a9dbda2..c48aee7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java @@ -48,11 +48,9 @@ import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteClosure; import org.apache.ignite.lang.IgniteProductVersion; import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.transactions.TransactionRollbackException; -import org.jetbrains.annotations.Nullable; import static org.apache.ignite.internal.processors.cache.GridCacheOperation.NOOP; import static org.apache.ignite.transactions.TransactionState.UNKNOWN; @@ -128,21 +126,6 @@ public final class GridNearTxFinishFuture<K, V> extends GridCompoundIdentityFutu return tx.xidVersion(); } - /** - * @return Involved nodes. - */ - @Override public Collection<? extends ClusterNode> nodes() { - return - F.viewReadOnly(futures(), new IgniteClosure<IgniteInternalFuture<?>, ClusterNode>() { - @Nullable @Override public ClusterNode apply(IgniteInternalFuture<?> f) { - if (isMini(f)) - return ((MiniFuture)f).node(); - - return cctx.discovery().localNode(); - } - }); - } - /** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { for (IgniteInternalFuture<?> fut : futures()) http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxRemote.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxRemote.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxRemote.java index 87c68b2..0ede8ac 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxRemote.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxRemote.java @@ -18,11 +18,11 @@ package org.apache.ignite.internal.processors.cache.distributed.near; import java.io.Externalizable; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; -import java.util.LinkedList; import java.util.Map; import java.util.UUID; import org.apache.ignite.IgniteCheckedException; @@ -50,7 +50,7 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { private static final long serialVersionUID = 0L; /** Evicted keys. */ - private Collection<IgniteTxKey> evicted = new LinkedList<>(); + private Collection<IgniteTxKey> evicted; /** Near node ID. */ private UUID nearNodeId; @@ -107,19 +107,19 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { int taskNameHash ) throws IgniteCheckedException { super( - ctx, - nodeId, - rmtThreadId, - xidVer, - commitVer, - sys, - plc, - concurrency, - isolation, - invalidate, - timeout, + ctx, + nodeId, + rmtThreadId, + xidVer, + commitVer, + sys, + plc, + concurrency, + isolation, + invalidate, + timeout, txSize, - subjId, + subjId, taskNameHash ); @@ -177,19 +177,19 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { int taskNameHash ) { super( - ctx, - nodeId, - rmtThreadId, - xidVer, + ctx, + nodeId, + rmtThreadId, + xidVer, commitVer, sys, plc, - concurrency, - isolation, - invalidate, - timeout, + concurrency, + isolation, + invalidate, + timeout, txSize, - subjId, + subjId, taskNameHash ); @@ -260,7 +260,7 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { * @return Evicted keys. */ public Collection<IgniteTxKey> evicted() { - return evicted; + return evicted != null ? evicted : Collections.<IgniteTxKey>emptyList(); } /** @@ -269,6 +269,9 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { * @param key Evicted key. */ public void addEvicted(IgniteTxKey key) { + if (evicted == null) + evicted = new ArrayList<>(); + evicted.add(key); } @@ -303,7 +306,7 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { GridNearCacheEntry cached = cacheCtx.near().peekExx(entry.key()); if (cached == null) { - evicted.add(entry.txKey()); + addEvicted(entry.txKey()); return false; } @@ -314,7 +317,7 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { CacheObject val = cached.peek(true, false, false, null); if (val == null && cached.evictInternal(false, xidVer, null)) { - evicted.add(entry.txKey()); + addEvicted(entry.txKey()); return false; } @@ -330,7 +333,7 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { } } catch (GridCacheEntryRemovedException ignore) { - evicted.add(entry.txKey()); + addEvicted(entry.txKey()); if (log.isDebugEnabled()) log.debug("Got removed entry when adding to remote transaction (will ignore): " + cached); @@ -364,7 +367,7 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { try { if (cached == null) { - evicted.add(key); + addEvicted(key); return false; } @@ -376,7 +379,7 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { if (peek == null && cached.evictInternal(false, xidVer, null)) { cached.context().cache().removeIfObsolete(key.key()); - evicted.add(key); + addEvicted(key); return false; } @@ -398,7 +401,7 @@ public class GridNearTxRemote extends GridDistributedTxRemoteAdapter { } } catch (GridCacheEntryRemovedException ignore) { - evicted.add(key); + addEvicted(key); if (log.isDebugEnabled()) log.debug("Got removed entry when adding reads to remote transaction (will ignore): " + cached); http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java index cb14b4c..1c32674 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java @@ -19,13 +19,11 @@ package org.apache.ignite.internal.processors.cache.local; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteLogger; -import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.internal.processors.cache.CacheEntryPredicate; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheEntryEx; @@ -154,11 +152,6 @@ public final class GridLocalLockFuture<K, V> extends GridFutureAdapter<Boolean> } /** {@inheritDoc} */ - @Override public Collection<? extends ClusterNode> nodes() { - return Collections.emptyList(); - } - - /** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { return false; } @@ -454,4 +447,4 @@ public final class GridLocalLockFuture<K, V> extends GridFutureAdapter<Boolean> return S.toString(LockTimeoutObject.class, this); } } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java index 9eb2808..0a90b65 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java @@ -19,6 +19,7 @@ package org.apache.ignite.internal.processors.cache.transactions; import java.io.Externalizable; import java.nio.ByteBuffer; +import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.UUID; @@ -576,7 +577,7 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message { */ public void addEntryProcessor(EntryProcessor<Object, Object, Object> entryProcessor, Object[] invokeArgs) { if (entryProcessorsCol == null) - entryProcessorsCol = new LinkedList<>(); + entryProcessorsCol = new ArrayList<>(); entryProcessorsCol.add(new T2<>(entryProcessor, invokeArgs)); http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java index 9315d7c..cbbde7d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Queue; @@ -1113,14 +1112,18 @@ class GridTaskWorker<T, R> extends GridWorker implements GridTimeoutObject { * Interrupts child jobs on remote nodes. */ private void cancelChildren() { - Collection<GridJobResultImpl> doomed = new LinkedList<>(); + Collection<GridJobResultImpl> doomed = null; synchronized (mux) { // Only interrupt unfinished jobs. if (jobRes != null) for (GridJobResultImpl res : jobRes.values()) - if (!res.hasResponse()) + if (!res.hasResponse()) { + if (doomed == null) + doomed = new ArrayList<>(); + doomed.add(res); + } } // Send cancellation request to all unfinished children. http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanMap.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanMap.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanMap.java index c0f7c5b..927fb42 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanMap.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanMap.java @@ -1268,4 +1268,4 @@ public class GridLeanMap<K, V> extends GridSerializableMap<K, V> implements Clon return false; } } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ignite/blob/42571c1d/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java index c1d91a8..18dba9f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java @@ -2840,6 +2840,12 @@ public class GridFunc { if (c == null) return null; + if (c instanceof List) { + List<? extends T> l = (List)c; + + return !l.isEmpty() ? l.get(0) : null; + } + Iterator<? extends T> it = c.iterator(); return it.hasNext() ? it.next() : null; @@ -4575,4 +4581,4 @@ public class GridFunc { public static IgnitePredicate<IgniteInternalFuture<?>> unfinishedFutures() { return UNFINISHED_FUTURE; } -} \ No newline at end of file +}
