Repository: ignite
Updated Branches:
  refs/heads/ignite-5272 3b2cd87ed -> e4259ce3f


ignite-5272


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

Branch: refs/heads/ignite-5272
Commit: e4259ce3f6695ca5485321ded816640515555ca2
Parents: 3b2cd87
Author: sboikov <[email protected]>
Authored: Tue Jun 13 22:45:37 2017 +0300
Committer: sboikov <[email protected]>
Committed: Tue Jun 13 22:45:37 2017 +0300

----------------------------------------------------------------------
 .../affinity/GridAffinityProcessor.java         | 24 ++++++++--------
 .../IgniteClientReconnectCacheTest.java         | 29 +++++++++++++++-----
 2 files changed, 34 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/e4259ce3/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 87c424a..6b43fc7 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
@@ -39,6 +39,7 @@ import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.events.DiscoveryEvent;
 import org.apache.ignite.events.Event;
 import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.IgniteClientDisconnectedCheckedException;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener;
 import org.apache.ignite.internal.processors.GridProcessorAdapter;
@@ -364,18 +365,9 @@ public class GridAffinityProcessor extends 
GridProcessorAdapter {
         if (fut != null)
             return fut.get();
 
-        ClusterNode loc = ctx.discovery().localNode();
-
-        // Check local node.
-        Collection<ClusterNode> cacheNodes = 
ctx.discovery().cacheNodes(cacheName, topVer);
-
-        if (cacheNodes.contains(loc)) {
-            GridCacheAdapter<Object, Object> cache = 
ctx.cache().internalCache(cacheName);
-
-            // Cache is being stopped.
-            if (cache == null)
-                return null;
+        GridCacheAdapter<Object, Object> cache = 
ctx.cache().internalCache(cacheName);
 
+        if (cache != null) {
             GridCacheContext<Object, Object> cctx = cache.context();
 
             cctx.awaitStarted();
@@ -412,6 +404,8 @@ public class GridAffinityProcessor extends 
GridProcessorAdapter {
             }
         }
 
+        Collection<ClusterNode> cacheNodes = 
ctx.discovery().cacheNodes(cacheName, topVer);
+
         if (F.isEmpty(cacheNodes))
             return null;
 
@@ -443,7 +437,13 @@ public class GridAffinityProcessor extends 
GridProcessorAdapter {
 
             CacheMode mode = ctx.cache().cacheMode(cacheName);
 
-            assert mode != null;
+            if (mode == null) {
+                if (ctx.clientDisconnected())
+                    throw new 
IgniteClientDisconnectedCheckedException(ctx.cluster().clientReconnectFuture(),
+                            "Failed to get affinity mapping, client 
disconnected.");
+
+                throw new IgniteCheckedException("No cache nodes in topology 
for cache name: " + cacheName);
+            }
 
             // Map all keys to a single node, if the cache mode is LOCAL.
             if (mode == LOCAL) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/e4259ce3/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectCacheTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectCacheTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectCacheTest.java
index 7cafa93..2e1f2f3 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectCacheTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectCacheTest.java
@@ -1369,28 +1369,43 @@ public class IgniteClientReconnectCacheTest extends 
IgniteClientReconnectAbstrac
      * @param cacheExists Cache exists flag.
      * @param clientCache {@code True} if client node has client cache.
      * @param clientNear {@code True} if client node has near-enabled client 
cache.
+     * @throws Exception If failed.
      */
     private void checkCacheDiscoveryData(Ignite srv,
         Ignite client,
-        String cacheName,
+        final String cacheName,
         boolean cacheExists,
-        boolean clientCache,
-        boolean clientNear) {
-        GridDiscoveryManager srvDisco = 
((IgniteKernal)srv).context().discovery();
+        final boolean clientCache,
+        boolean clientNear) throws Exception {
+        final GridDiscoveryManager srvDisco = 
((IgniteKernal)srv).context().discovery();
         GridDiscoveryManager clientDisco = 
((IgniteKernal)client).context().discovery();
 
         ClusterNode srvNode = ((IgniteKernal)srv).localNode();
-        ClusterNode clientNode = ((IgniteKernal)client).localNode();
+        final ClusterNode clientNode = ((IgniteKernal)client).localNode();
 
         assertFalse(srvDisco.cacheAffinityNode(clientNode, cacheName));
         assertFalse(clientDisco.cacheAffinityNode(clientNode, cacheName));
 
         assertEquals(cacheExists, srvDisco.cacheAffinityNode(srvNode, 
cacheName));
 
-        if (clientNear)
+        if (clientNear) {
+            assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicate() {
+                @Override public boolean apply() {
+                    return srvDisco.cacheNearNode(clientNode, cacheName);
+                }
+            }, 5000));
+
             assertTrue(srvDisco.cacheNearNode(clientNode, cacheName));
-        else
+        }
+        else {
+            assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicate() {
+                @Override public boolean apply() {
+                    return F.eq(clientCache, 
srvDisco.cacheClientNode(clientNode, cacheName));
+                }
+            }, 5000));
+
             assertEquals(clientCache, srvDisco.cacheClientNode(clientNode, 
cacheName));
+        }
 
         assertEquals(cacheExists, clientDisco.cacheAffinityNode(srvNode, 
cacheName));
 

Reply via email to