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/07/19 08:47:50 UTC
ignite git commit: IGNITE-5757 - Map near reader update to DHT node
if reader is not a primary or a backup
Repository: ignite
Updated Branches:
refs/heads/ignite-5757 dc3c9eb96 -> bba049f3f
IGNITE-5757 - Map near reader update to DHT node if reader is not a primary or a backup
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/bba049f3
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/bba049f3
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/bba049f3
Branch: refs/heads/ignite-5757
Commit: bba049f3f6c390757a132aea854e352642711840
Parents: dc3c9eb
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Wed Jul 19 11:47:40 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Wed Jul 19 11:47:40 2017 +0300
----------------------------------------------------------------------
.../dht/GridDhtPartitionTopology.java | 4 +++-
.../distributed/dht/GridDhtTxPrepareFuture.java | 25 ++++++++++++++++++--
2 files changed, 26 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/bba049f3/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java
index 5f76d12..d1a524c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java
@@ -194,7 +194,9 @@ public interface GridDhtPartitionTopology {
* @param p Partition ID.
* @param affAssignment Assignments.
* @param affNodes Node assigned for given partition by affinity.
- * @return Collection of all nodes responsible for this partition with primary node being first.
+ * @return Collection of all nodes responsible for this partition with primary node being first. The first N
+ * elements of this collection (with N being 1 + backups) are actual DHT affinity nodes, other nodes
+ * are current additional owners of the partition after topology change.
*/
@Nullable public List<ClusterNode> nodes(int p, AffinityAssignment affAssignment, List<ClusterNode> affNodes);
http://git-wip-us.apache.org/repos/asf/ignite/blob/bba049f3/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 6ed4781..bbba064 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
@@ -1494,7 +1494,7 @@ public final class GridDhtTxPrepareFuture extends GridCacheCompoundFuture<Ignite
try {
List<ClusterNode> dhtNodes = dht.topology().nodes(cached.partition(), tx.topologyVersion());
- assert dhtNodes.size() > 0 && dhtNodes.get(0).id().equals(cctx.localNodeId()) : dhtNodes;
+ assert !dhtNodes.isEmpty() && dhtNodes.get(0).id().equals(cctx.localNodeId()) : dhtNodes;
if (log.isDebugEnabled())
log.debug("Mapping entry to DHT nodes [nodes=" + U.toShortString(dhtNodes) +
@@ -1515,7 +1515,7 @@ public final class GridDhtTxPrepareFuture extends GridCacheCompoundFuture<Ignite
ClusterNode readerNode = cctx.discovery().node(readerId);
- if (readerNode == null || dhtNodes.contains(readerNode))
+ if (readerNode == null || canSkipNearReader(dht, readerNode, dhtNodes))
continue;
if (log.isDebugEnabled())
@@ -1538,6 +1538,27 @@ public final class GridDhtTxPrepareFuture extends GridCacheCompoundFuture<Ignite
}
/**
+ * This method checks if we should skip mapping of an entry update to the near reader. We can skip the update
+ * if the reader is a primary or a backup. If the reader is a partition owner, but not a primary or a backup,
+ * we cannot skip the reader update and must attempt to update a near entry anyway.
+ *
+ * @param dhtCache DHT cache to check mapping.
+ * @param readerNode Reader node.
+ * @param dhtNodes Current DHT nodes (primary + backups first and other DHT nodes afterwards).
+ * @return {@code true} if reader is either a primary or a backup.
+ */
+ private boolean canSkipNearReader(GridDhtCacheAdapter<?, ?> dhtCache, ClusterNode readerNode, List<ClusterNode> dhtNodes) {
+ int limit = Math.min(dhtCache.configuration().getBackups() + 1, dhtNodes.size());
+
+ for (int i = 0; i < limit; i++) {
+ if (dhtNodes.get(i).id().equals(readerNode.id()))
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
* @param entry Entry.
* @param n Node.
* @param globalMap Map.