IGNITE-5789 Fix for case server was restarted, client doesn't create caches defined in client's configuration. - Fixes #3905.
Signed-off-by: dpavlov <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d821d099 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d821d099 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d821d099 Branch: refs/heads/ignite-5789-1 Commit: d821d0999749a1be318a2106d736542272a42ab0 Parents: a3a619b Author: vk <[email protected]> Authored: Wed May 23 14:59:58 2018 +0300 Committer: dpavlov <[email protected]> Committed: Wed May 23 14:59:58 2018 +0300 ---------------------------------------------------------------------- .../GridDhtPartitionsExchangeFuture.java | 24 +++++++++++++++++ .../ClientReconnectAfterClusterRestartTest.java | 27 ++++++++++---------- 2 files changed, 38 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/d821d099/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java index c62b067..fe0ce2b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java @@ -44,6 +44,7 @@ import org.apache.ignite.cache.CacheMode; import org.apache.ignite.cache.CacheRebalanceMode; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.NearCacheConfiguration; import org.apache.ignite.events.DiscoveryEvent; import org.apache.ignite.internal.IgniteClientDisconnectedCheckedException; @@ -72,6 +73,7 @@ import org.apache.ignite.internal.processors.cache.ExchangeContext; import org.apache.ignite.internal.processors.cache.ExchangeDiscoveryEvents; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate; +import org.apache.ignite.internal.processors.cache.GridCacheProcessor; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.LocalJoinCachesContext; import org.apache.ignite.internal.processors.cache.StateChangeRequest; @@ -797,6 +799,27 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte } cctx.cache().startCachesOnLocalJoin(locJoinCtx, initialVersion()); + + ensureClientCachesStarted(); + } + + /** + * Start client caches if absent. + */ + private void ensureClientCachesStarted() { + GridCacheProcessor cacheProcessor = cctx.cache(); + + Set<String> cacheNames = new HashSet<>(cacheProcessor.cacheNames()); + + List<CacheConfiguration> notStartedCacheConfigs = new ArrayList<>(); + + for (CacheConfiguration cCfg : cctx.gridConfig().getCacheConfiguration()) { + if (!cacheNames.contains(cCfg.getName())) + notStartedCacheConfigs.add(cCfg); + } + + if (!notStartedCacheConfigs.isEmpty()) + cacheProcessor.dynamicStartCaches(notStartedCacheConfigs, false, false, false); } /** @@ -3854,6 +3877,7 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte /** */ NONE } + /** * */ http://git-wip-us.apache.org/repos/asf/ignite/blob/d821d099/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ClientReconnectAfterClusterRestartTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ClientReconnectAfterClusterRestartTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ClientReconnectAfterClusterRestartTest.java index 505d373..9012161 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ClientReconnectAfterClusterRestartTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ClientReconnectAfterClusterRestartTest.java @@ -18,6 +18,9 @@ package org.apache.ignite.internal.processors.cache; import javax.cache.CacheException; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.IgniteClientDisconnectedException; @@ -33,23 +36,21 @@ import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.events.Event; import org.apache.ignite.events.EventType; import org.apache.ignite.internal.binary.BinaryMarshaller; -import org.apache.ignite.lang.IgniteFuture; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; - /** */ public class ClientReconnectAfterClusterRestartTest extends GridCommonAbstractTest { + /** Server id. */ + private static final int SERVER_ID = 0; + /** Client id. */ - public static final int CLIENT_ID = 1; + private static final int CLIENT_ID = 1; /** Cache params. */ - public static final String CACHE_PARAMS = "PPRB_PARAMS"; + private static final String CACHE_PARAMS = "PPRB_PARAMS"; /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { @@ -58,9 +59,9 @@ public class ClientReconnectAfterClusterRestartTest extends GridCommonAbstractTe cfg.setMarshaller(new BinaryMarshaller()); cfg.setIncludeEventTypes(EventType.EVTS_CACHE); - if (getTestIgniteInstanceName(CLIENT_ID).equals(igniteInstanceName)) + if (getTestIgniteInstanceName(CLIENT_ID).equals(igniteInstanceName)) { cfg.setClientMode(true); - else { + CacheConfiguration ccfg = getCacheConfiguration(); cfg.setCacheConfiguration(ccfg); @@ -88,7 +89,7 @@ public class ClientReconnectAfterClusterRestartTest extends GridCommonAbstractTe LinkedHashMap<String, String> fields = new LinkedHashMap<>(); - fields.put("ID", "java.lang.Long" ); + fields.put("ID", "java.lang.Long"); fields.put("PARTITIONID", "java.lang.Long"); fields.put("CLIENTID", "java.lang.Long"); fields.put("PARAMETRCODE", "java.lang.Long"); @@ -114,9 +115,9 @@ public class ClientReconnectAfterClusterRestartTest extends GridCommonAbstractTe /** */ public void testReconnectClient() throws Exception { try { - startGrid(0); + startGrid(SERVER_ID); - Ignite client = startGrid(1); + Ignite client = startGrid(CLIENT_ID); checkTopology(2); @@ -162,7 +163,7 @@ public class ClientReconnectAfterClusterRestartTest extends GridCommonAbstractTe Thread.sleep(2_000); - startGrid(0); + startGrid(SERVER_ID); try { assertNull(cache.get(1L));
