IGNITE-7505 Node not in baseline should not initialize local partition
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/8d42789f Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/8d42789f Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/8d42789f Branch: refs/heads/ignite-6643 Commit: 8d42789fd58903587c2d3fa708b14248d5665993 Parents: a6840b5 Author: Alexey Goncharuk <[email protected]> Authored: Wed Jan 24 10:28:20 2018 +0300 Committer: Alexey Goncharuk <[email protected]> Committed: Wed Jan 24 10:28:20 2018 +0300 ---------------------------------------------------------------------- .../internal/managers/discovery/DiscoCache.java | 8 +++++++ .../dht/GridDhtPartitionTopologyImpl.java | 22 ++++++++++++++------ .../GridDhtPartitionsExchangeFuture.java | 1 + .../GridCacheDatabaseSharedManager.java | 7 +++++-- .../IgniteCacheDatabaseSharedManager.java | 7 +++++++ .../IgniteClusterActivateDeactivateTest.java | 4 ++-- 6 files changed, 39 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/8d42789f/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoCache.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoCache.java index aa47168..f73f420 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoCache.java @@ -213,6 +213,14 @@ public class DiscoCache { return baselineNodes; } + /** + * @param nodeId Node ID to check. + * @return {@code True} if baseline is not set or the node is in the baseline topology. + */ + public boolean baselineNode(UUID nodeId) { + return nodeIdToConsIdx == null || nodeIdToConsIdx.containsKey(nodeId); + } + /** @return All nodes. */ public List<ClusterNode> allNodes() { return allNodes; http://git-wip-us.apache.org/repos/asf/ignite/blob/8d42789f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java index 9ccaecf..0a2c154 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java @@ -359,12 +359,7 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { assert exchId.isJoined() || added; for (int p = 0; p < num; p++) { - IgnitePageStoreManager storeMgr = ctx.pageStore(); - - if (localNode(p, aff) - || (storeMgr instanceof FilePageStoreManager - && grp.persistenceEnabled() - && Files.exists(((FilePageStoreManager)storeMgr).getPath(grp.sharedGroup(), grp.cacheOrGroupName(), p)))) { + if (localNode(p, aff) || initLocalPartition(p, discoCache)) { GridDhtLocalPartition locPart = createPartition(p); if (grp.persistenceEnabled()) { @@ -431,6 +426,21 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { } /** + * @param p Partition ID to restore. + * @param discoCache Disco cache to use. + * @return {@code True} if should restore local partition. + */ + private boolean initLocalPartition(int p, DiscoCache discoCache) { + IgnitePageStoreManager storeMgr = ctx.pageStore(); + + return + grp.persistenceEnabled() && + storeMgr instanceof FilePageStoreManager && + discoCache.baselineNode(ctx.localNodeId()) && + Files.exists(((FilePageStoreManager)storeMgr).getPath(grp.sharedGroup(), grp.cacheOrGroupName(), p)); + } + + /** * @param affVer Affinity version. * @param aff Affinity assignments. * @param updateSeq Update sequence. http://git-wip-us.apache.org/repos/asf/ignite/blob/8d42789f/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 883cac6..6c09b6a 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 @@ -1577,6 +1577,7 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte } cctx.database().releaseHistoryForExchange(); + cctx.database().rebuildIndexesIfNeeded(this); if (err == null) { for (CacheGroupContext grp : cctx.cache().cacheGroups()) { http://git-wip-us.apache.org/repos/asf/ignite/blob/8d42789f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java index 205365b..a636464 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java @@ -1126,7 +1126,10 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan // Before local node join event. if (clusterInTransitionStateToActive || (joinEvt && locNode && isSrvNode)) restoreState(); + } + /** {@inheritDoc} */ + @Override public void rebuildIndexesIfNeeded(GridDhtPartitionsExchangeFuture fut) { if (cctx.kernalContext().query().moduleEnabled()) { for (final GridCacheContext cacheCtx : (Collection<GridCacheContext>)cctx.cacheContexts()) { if (cacheCtx.startTopologyVersion().equals(fut.initialVersion()) && @@ -1145,8 +1148,8 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan CacheConfiguration ccfg = cacheCtx.config(); if (ccfg != null) { - log().info("Finished indexes rebuilding for cache: [name=" + ccfg.getName() - + ", grpName=" + ccfg.getGroupName()); + log().info("Finished indexes rebuilding for cache [name=" + ccfg.getName() + + ", grpName=" + ccfg.getGroupName() + ']'); } } }); http://git-wip-us.apache.org/repos/asf/ignite/blob/8d42789f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java index 237dacc..3242e74 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java @@ -753,6 +753,13 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap } /** + * @param fut Partition exchange future. + */ + public void rebuildIndexesIfNeeded(GridDhtPartitionsExchangeFuture fut) { + // No-op. + } + + /** * Needed action before any cache will stop */ public void prepareCachesStop() { http://git-wip-us.apache.org/repos/asf/ignite/blob/8d42789f/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClusterActivateDeactivateTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClusterActivateDeactivateTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClusterActivateDeactivateTest.java index 27739a2..71718c9 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClusterActivateDeactivateTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClusterActivateDeactivateTest.java @@ -124,11 +124,11 @@ public class IgniteClusterActivateDeactivateTest extends GridCommonAbstractTest DataStorageConfiguration memCfg = new DataStorageConfiguration(); memCfg.setPageSize(4 * 1024); memCfg.setDefaultDataRegionConfiguration(new DataRegionConfiguration() - .setMaxSize(10 * 1024 * 1024) + .setMaxSize(300 * 1024 * 1024) .setPersistenceEnabled(persistenceEnabled())); memCfg.setDataRegionConfigurations(new DataRegionConfiguration() - .setMaxSize(10 * 1024 * 1024) + .setMaxSize(300 * 1024 * 1024) .setName(NO_PERSISTENCE_REGION) .setPersistenceEnabled(false));
