You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2016/01/01 22:07:34 UTC
[07/18] ignite git commit: IGNITE-2263: DANGEROUS! Removed view()
from GridNearGetFuture.
IGNITE-2263: DANGEROUS! Removed view() from GridNearGetFuture.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/bd31fa69
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/bd31fa69
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/bd31fa69
Branch: refs/heads/ignite-2263
Commit: bd31fa69f9885f2a80a15670d30bdb7f93e6bb54
Parents: 66d2884
Author: thatcoach <pp...@list.ru>
Authored: Fri Jan 1 16:39:54 2016 +0300
Committer: thatcoach <pp...@list.ru>
Committed: Fri Jan 1 16:39:54 2016 +0300
----------------------------------------------------------------------
.../distributed/near/GridNearGetFuture.java | 53 +++++++++++++-------
1 file changed, 35 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/bd31fa69/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 a121af9..bee376a 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
@@ -17,13 +17,6 @@
package org.apache.ignite.internal.processors.cache.distributed.near;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-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;
@@ -58,10 +51,19 @@ 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.IgnitePredicate;
import org.apache.ignite.lang.IgniteUuid;
import org.jetbrains.annotations.Nullable;
-import static org.apache.ignite.transactions.TransactionIsolation.READ_COMMITTED;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
+
+import static org.apache.ignite.transactions.TransactionIsolation.*;
/**
*
@@ -243,6 +245,21 @@ public final class GridNearGetFuture<K, V> extends CacheDistributedGetFutureAdap
Map<ClusterNode, LinkedHashMap<KeyCacheObject, Boolean>> mapped,
final AffinityTopologyVersion topVer
) {
+ map(keys, F.<KeyCacheObject>alwaysTrue(), mapped, topVer);
+ }
+
+ /**
+ * @param keys Keys.
+ * @param pred Predicate.
+ * @param mapped Mappings to check for duplicates.
+ * @param topVer Topology version to map on.
+ */
+ private void map(
+ Collection<KeyCacheObject> keys,
+ IgnitePredicate<KeyCacheObject> pred,
+ Map<ClusterNode, LinkedHashMap<KeyCacheObject, Boolean>> mapped,
+ final AffinityTopologyVersion topVer
+ ) {
Collection<ClusterNode> affNodes = CU.affinityNodes(cctx, topVer);
if (affNodes.isEmpty()) {
@@ -263,8 +280,10 @@ public final class GridNearGetFuture<K, V> extends CacheDistributedGetFutureAdap
try {
// Assign keys to primary nodes.
- for (KeyCacheObject key : keys)
- savedEntries = map(key, mappings, topVer, mapped, savedEntries);
+ for (KeyCacheObject key : keys) {
+ if (pred.apply(key))
+ savedEntries = map(key, mappings, topVer, mapped, savedEntries);
+ }
success = true;
}
@@ -291,8 +310,6 @@ public final class GridNearGetFuture<K, V> extends CacheDistributedGetFutureAdap
final Map<KeyCacheObject, GridNearCacheEntry> saved = savedEntries != null ? savedEntries :
Collections.<KeyCacheObject, GridNearCacheEntry>emptyMap();
- final int keysSize = keys.size();
-
// Create mini futures.
for (Map.Entry<ClusterNode, LinkedHashMap<KeyCacheObject, Boolean>> entry : mappings.entrySet()) {
final ClusterNode n = entry.getKey();
@@ -317,10 +334,10 @@ public final class GridNearGetFuture<K, V> extends CacheDistributedGetFutureAdap
final Collection<Integer> invalidParts = fut.invalidPartitions();
if (!F.isEmpty(invalidParts)) {
- Collection<KeyCacheObject> remapKeys = new ArrayList<>(keysSize);
+ Collection<KeyCacheObject> remapKeys = new ArrayList<>(keys.size());
for (KeyCacheObject key : keys) {
- if (key != null && invalidParts.contains(cctx.affinity().partition(key)))
+ if (key != null && pred.apply(key) && invalidParts.contains(cctx.affinity().partition(key)))
remapKeys.add(key);
}
@@ -931,11 +948,11 @@ public final class GridNearGetFuture<K, V> extends CacheDistributedGetFutureAdap
log.debug("Remapping mini get future [invalidParts=" + invalidParts + ", fut=" + this + ']');
if (!canRemap) {
- map(F.view(keys.keySet(), new P1<KeyCacheObject>() {
+ map(keys.keySet(), new P1<KeyCacheObject>() {
@Override public boolean apply(KeyCacheObject key) {
return invalidParts.contains(cctx.affinity().partition(key));
}
- }), F.t(node, keys), topVer);
+ }, F.t(node, keys), topVer);
// It is critical to call onDone after adding futures to compound list.
onDone(loadEntries(node.id(), keys.keySet(), res.entries(), savedEntries, topVer));
@@ -951,11 +968,11 @@ public final class GridNearGetFuture<K, V> extends CacheDistributedGetFutureAdap
long readyTopVer = fut.get();
// This will append new futures to compound list.
- map(F.view(keys.keySet(), new P1<KeyCacheObject>() {
+ map(keys.keySet(), new P1<KeyCacheObject>() {
@Override public boolean apply(KeyCacheObject key) {
return invalidParts.contains(cctx.affinity().partition(key));
}
- }), F.t(node, keys), new AffinityTopologyVersion(readyTopVer));
+ }, F.t(node, keys), new AffinityTopologyVersion(readyTopVer));
// It is critical to call onDone after adding futures to compound list.
onDone(loadEntries(node.id(), keys.keySet(), res.entries(), savedEntries, topVer));