Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-784 b0a32a1b6 -> 228d16d4b


#ignite-784: fix after review.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/c718fad4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/c718fad4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/c718fad4

Branch: refs/heads/ignite-784
Commit: c718fad4bcaf49a217afb92e35ef857565422372
Parents: 933b3dc
Author: ivasilinets <ivasilin...@gridgain.com>
Authored: Thu Apr 23 12:09:08 2015 +0300
Committer: ivasilinets <ivasilin...@gridgain.com>
Committed: Thu Apr 23 12:09:08 2015 +0300

----------------------------------------------------------------------
 .../dht/GridPartitionedGetFuture.java            | 14 +++++++++-----
 .../dht/colocated/GridDhtColocatedCache.java     | 18 +++++++++---------
 .../colocated/GridDhtColocatedLockFuture.java    |  8 ++++++--
 .../distributed/near/GridNearCacheEntry.java     | 12 ++++++------
 .../distributed/near/GridNearGetFuture.java      | 19 +++++++------------
 .../distributed/near/GridNearLockFuture.java     |  8 ++++++--
 .../near/GridNearTransactionalCache.java         |  3 +--
 7 files changed, 44 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c718fad4/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 efeaca6..d675996 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
@@ -419,6 +419,15 @@ public class GridPartitionedGetFuture<K, V> extends 
GridCompoundIdentityFuture<M
             GridCacheEntryEx entry = null;
 
             try {
+                ClusterNode node = cctx.affinity().primary(key, topVer);
+
+                if (node == null) {
+                    onDone(new ClusterTopologyServerNotFoundException("Failed 
to map keys for cache " +
+                        "(all partition nodes left the grid)."));
+
+                    return false;
+                }
+
                 if (!reload && allowLocRead) {
                     try {
                         entry = colocated.context().isSwapOrOffheapEnabled() ? 
colocated.entryEx(key) :
@@ -460,11 +469,6 @@ public class GridPartitionedGetFuture<K, V> extends 
GridCompoundIdentityFuture<M
                     }
                 }
 
-                ClusterNode node = cctx.affinity().primary(key, topVer);
-
-                if (node == null)
-                    onDone(new ClusterTopologyCheckedException("Cannot find 
primary node for key " + key + "."));
-
                 remote = !node.isLocal();
 
                 LinkedHashMap<KeyCacheObject, Boolean> keys = mapped.get(node);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c718fad4/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 8ad6fd8..1fbdb50 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
@@ -411,6 +411,13 @@ public class GridDhtColocatedCache<K, V> extends 
GridDhtTransactionalCacheAdapte
 
                     assert topVer.compareTo(AffinityTopologyVersion.ZERO) > 0;
 
+                    // Send request to remove from remote nodes.
+                    ClusterNode primary = ctx.affinity().primary(key, topVer);
+
+                    if (primary == null)
+                        new ClusterTopologyServerNotFoundException("Failed to 
map keys for cache " +
+                            "(all partition nodes left the grid).");
+
                     if (map == null) {
                         Collection<ClusterNode> affNodes = CU.allNodes(ctx, 
topVer);
 
@@ -422,13 +429,6 @@ public class GridDhtColocatedCache<K, V> extends 
GridDhtTransactionalCacheAdapte
                     if (ver == null)
                         ver = lock.version();
 
-                    // Send request to remove from remote nodes.
-                    ClusterNode primary = ctx.affinity().primary(key, topVer);
-
-                    if (primary == null)
-                        throw new ClusterTopologyCheckedException("Failed to 
unlock key " + key +
-                            ". Cannot find primary node for the key.");
-
                     if (!lock.reentry()) {
                         if (!ver.equals(lock.version()))
                             throw new IgniteCheckedException("Failed to unlock 
(if keys were locked separately, " +
@@ -529,8 +529,8 @@ public class GridDhtColocatedCache<K, V> extends 
GridDhtTransactionalCacheAdapte
                     ClusterNode primary = ctx.affinity().primary(key, topVer);
 
                     if (primary == null) {
-                        log.debug("Failed to unlock key " + key +
-                            ". Cannot find primary node for the key.");
+                        if (log.isDebugEnabled())
+                            log.debug("Failed to map keys for cache (all 
partition nodes left the grid).");
 
                         continue;
                     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c718fad4/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 c75b341..66faac1 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
@@ -1052,9 +1052,13 @@ public final class GridDhtColocatedLockFuture<K, V> 
extends GridCompoundIdentity
 
         ClusterNode primary = cctx.affinity().primary(key, topVer);
 
-        if (primary == null || cctx.discovery().node(primary.id()) == null)
+        if (primary == null)
+            new ClusterTopologyServerNotFoundException("Failed to map keys for 
cache " +
+                "(all partition nodes left the grid).");
+
+        if (cctx.discovery().node(primary.id()) == null)
             // If primary node left the grid before lock acquisition, fail the 
whole future.
-            throw newTopologyException(null, primary != null ? primary.id() : 
null);
+            throw newTopologyException(null, primary.id());
 
         if (inTx() && tx.groupLock() && !primary.isLocal())
             throw new IgniteCheckedException("Failed to start group lock 
transaction (local node is not primary for " +

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c718fad4/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java
index 819024c..9e5cea6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java
@@ -151,6 +151,11 @@ public class GridNearCacheEntry extends 
GridDistributedCacheEntry {
 
                     try {
                         synchronized (this) {
+                            ClusterNode primaryNode = 
cctx.affinity().primary(key, topVer);
+
+                            if (primaryNode == null)
+                                return false;
+
                             checkObsolete();
 
                             if (isNew() || !valid(topVer)) {
@@ -168,12 +173,7 @@ public class GridNearCacheEntry extends 
GridDistributedCacheEntry {
                                     }
                                 }
 
-                                ClusterNode primaryNode = 
cctx.affinity().primary(key, topVer);
-
-                                if (primaryNode == null)
-                                    return false;
-
-                                recordNodeId(cctx.affinity().primary(key, 
topVer).id(), topVer);
+                                recordNodeId(primaryNode.id(), topVer);
 
                                 dhtVer = e.isNew() || e.isDeleted() ? null : 
e.version();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c718fad4/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 2ee7ef2..e13660f 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
@@ -502,6 +502,13 @@ public final class GridNearGetFuture<K, V> extends 
GridCompoundIdentityFuture<Ma
                     if (primary == null)
                         primary = cctx.affinity().primary(key, topVer);
 
+                    if (primary == null) {
+                        onDone(new 
ClusterTopologyServerNotFoundException("Failed to map keys for cache " +
+                            "(all partition nodes left the grid)."));
+
+                        return savedVers;
+                    }
+
                     GridNearCacheEntry nearEntry = allowLocRead ? 
near.peekExx(key) : null;
 
                     entry = nearEntry;
@@ -511,18 +518,6 @@ public final class GridNearGetFuture<K, V> extends 
GridCompoundIdentityFuture<Ma
 
                     savedVers.put(key, nearEntry == null ? null : 
nearEntry.dhtVersion());
 
-                    if (primary == null) {
-                        if (remapCnt.incrementAndGet() > MAX_REMAP_CNT) {
-                            onDone(new ClusterTopologyCheckedException("Failed 
to remap key to a new node after " +
-                                MAX_REMAP_CNT + " attempts (key got remapped 
to the same node) " +
-                                "[key=" + key + ", no primary node" + ", 
mappings=" + mapped + ']'));
-
-                            return savedVers;
-                        }
-
-                        break;
-                    }
-
                     LinkedHashMap<KeyCacheObject, Boolean> keys = 
mapped.get(primary);
 
                     if (keys != null && keys.containsKey(key)) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c718fad4/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 08bc43a..baa41bd 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
@@ -1153,9 +1153,13 @@ public final class GridNearLockFuture<K, V> extends 
GridCompoundIdentityFuture<B
 
         ClusterNode primary = cctx.affinity().primary(key, topVer);
 
-        if (primary == null || cctx.discovery().node(primary.id()) == null)
+        if (primary == null)
+            new ClusterTopologyServerNotFoundException("Failed to map keys for 
cache " +
+                "(all partition nodes left the grid).");
+
+        if (cctx.discovery().node(primary.id()) == null)
             // If primary node left the grid before lock acquisition, fail the 
whole future.
-            throw newTopologyException(null, primary != null ? primary.id() : 
null);
+            throw newTopologyException(null, primary.id());
 
         if (inTx() && tx.groupLock() && !primary.isLocal())
             throw new IgniteCheckedException("Failed to start group lock 
transaction (local node is not primary for " +

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c718fad4/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 521c197..4d99755 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
@@ -633,8 +633,7 @@ public class GridNearTransactionalCache<K, V> extends 
GridNearCacheAdapter<K, V>
 
                                 if (primary == null) {
                                     if (log.isDebugEnabled())
-                                        log.debug("Cannot remove lock for key 
" + key +
-                                            ". Cannot find primary node for 
the key " + key + ".");
+                                        log.debug("Failed to map keys for 
cache (all partition nodes left the grid).");
 
                                     break;
                                 }

Reply via email to