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));
