Repository: ignite Updated Branches: refs/heads/master 7ea120733 -> 31bf38d37
IGNITE-9418 Avoid initialize file page store manager for caches during PME synchronously - Fixes #4827. Signed-off-by: Dmitriy Govorukhin <dmitriy.govoruk...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/31bf38d3 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/31bf38d3 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/31bf38d3 Branch: refs/heads/master Commit: 31bf38d37ff0b73b24a8fa0034630d833eee1f75 Parents: 7ea1207 Author: Evgeny Stanilovskiy <estanilovs...@gridgain.com> Authored: Thu Nov 1 10:11:44 2018 +0300 Committer: Dmitriy Govorukhin <dmitriy.govoruk...@gmail.com> Committed: Thu Nov 1 10:11:44 2018 +0300 ---------------------------------------------------------------------- .../processors/cache/GridCacheProcessor.java | 2 - .../GridDhtPartitionsExchangeFuture.java | 8 --- .../persistence/file/FilePageStoreManager.java | 57 ++++++++++++++++---- 3 files changed, 46 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/31bf38d3/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java index d33e929..88cc627 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java @@ -2210,8 +2210,6 @@ public class GridCacheProcessor extends GridProcessorAdapter implements Metastor boolean affNode = checkForAffinityNode(desc, reqNearCfg, ccfg); - preparePageStore(desc, affNode); - CacheGroupContext grp = prepareCacheGroup(desc, exchTopVer, cacheObjCtx, affNode, startCfg.getGroupName()); GridCacheContext cacheCtx = createCache(ccfg, http://git-wip-us.apache.org/repos/asf/ignite/blob/31bf38d3/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 b26db67..3d27e8a 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 @@ -875,14 +875,6 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte try { cctx.database().cleanupRestoredCaches(); - for (DynamicCacheDescriptor desc : cctx.cache().cacheDescriptors().values()) { - if (CU.isPersistentCache(desc.cacheConfiguration(), - cctx.gridConfig().getDataStorageConfiguration())) { - // Perform cache init from scratch. - cctx.cache().preparePageStore(desc, true); - } - } - // Set initial node started marker. cctx.database().nodeStart(null); } http://git-wip-us.apache.org/repos/asf/ignite/blob/31bf38d3/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java index e05cb71..0f01fd4 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java @@ -41,6 +41,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; import java.util.stream.Collectors; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.IgniteException; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.DataStorageConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; @@ -63,6 +64,7 @@ import org.apache.ignite.internal.processors.cache.persistence.filename.PdsFolde import org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage; import org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteCacheSnapshotManager; import org.apache.ignite.internal.util.IgniteUtils; +import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.Marshaller; @@ -400,16 +402,15 @@ public class FilePageStoreManager extends GridCacheSharedManagerAdapter implemen CacheStoreHolder old = idxCacheStores.remove(grp.groupId()); - assert old != null : "Missing cache store holder [cache=" + grp.cacheOrGroupName() + - ", locNodeId=" + cctx.localNodeId() + ", gridName=" + cctx.igniteInstanceName() + ']'; + if (old != null) { + IgniteCheckedException ex = shutdown(old, /*clean files if destroy*/destroy, null); - IgniteCheckedException ex = shutdown(old, /*clean files if destroy*/destroy, null); + if (destroy) + removeCacheGroupConfigurationData(grp); - if (destroy) - removeCacheGroupConfigurationData(grp); - - if (ex != null) - throw ex; + if (ex != null) + throw ex; + } } /** {@inheritDoc} */ @@ -621,8 +622,9 @@ public class FilePageStoreManager extends GridCacheSharedManagerAdapter implemen return new CacheStoreHolder(idxStore, partStores); } - catch (StorageException e) { - cctx.kernalContext().failure().process(new FailureContext(FailureType.CRITICAL_ERROR, e)); + catch (IgniteCheckedException e) { + if (X.hasCause(e, StorageException.class, IOException.class)) + cctx.kernalContext().failure().process(new FailureContext(FailureType.CRITICAL_ERROR, e)); throw e; } @@ -1011,6 +1013,39 @@ public class FilePageStoreManager extends GridCacheSharedManagerAdapter implemen } /** + * Return cache store holedr. + * + * @param grpId Cache group ID. + * @return Cache store holder. + */ + private CacheStoreHolder getHolder(int grpId) throws IgniteCheckedException { + try { + return idxCacheStores.computeIfAbsent(grpId, (key) -> { + CacheGroupDescriptor gDesc = cctx.cache().cacheGroupDescriptors().get(grpId); + + CacheStoreHolder holder0 = null; + + if (gDesc != null) { + if (CU.isPersistentCache(gDesc.config(), cctx.gridConfig().getDataStorageConfiguration())) { + try { + holder0 = initForCache(gDesc, gDesc.config()); + } catch (IgniteCheckedException e) { + throw new IgniteException(e); + } + } + } + + return holder0; + }); + } catch (IgniteException ex) { + if (X.hasCause(ex, IgniteCheckedException.class)) + throw ex.getCause(IgniteCheckedException.class); + else + throw ex; + } + } + + /** * @param grpId Cache group ID. * @param partId Partition ID. * @return Page store for the corresponding parameters. @@ -1019,7 +1054,7 @@ public class FilePageStoreManager extends GridCacheSharedManagerAdapter implemen * Note: visible for testing. */ public PageStore getStore(int grpId, int partId) throws IgniteCheckedException { - CacheStoreHolder holder = idxCacheStores.get(grpId); + CacheStoreHolder holder = getHolder(grpId); if (holder == null) throw new IgniteCheckedException("Failed to get page store for the given cache ID " +