Repository: ignite Updated Branches: refs/heads/ignite-5075-cacheStart 193b80580 -> 14dba6e41
ignite-5075 Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/14dba6e4 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/14dba6e4 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/14dba6e4 Branch: refs/heads/ignite-5075-cacheStart Commit: 14dba6e417f5101b920a1c59db4551f15b304472 Parents: 193b805 Author: sboikov <[email protected]> Authored: Wed May 3 11:15:19 2017 +0300 Committer: sboikov <[email protected]> Committed: Wed May 3 11:15:19 2017 +0300 ---------------------------------------------------------------------- .../processors/cache/ClusterCachesInfo.java | 124 +++++++++++++++- .../cache/DynamicCacheDescriptor.java | 33 ----- .../processors/cache/GridCacheProcessor.java | 142 ++----------------- 3 files changed, 133 insertions(+), 166 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/14dba6e4/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java index 1064de3..4d53361 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java @@ -20,6 +20,7 @@ package org.apache.ignite.internal.processors.cache; import java.util.Collections; import java.util.concurrent.Callable; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.IgniteLogger; import org.apache.ignite.cache.CacheExistsException; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.CacheConfiguration; @@ -46,6 +47,8 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import static org.apache.ignite.cache.CacheMode.LOCAL; +import static org.apache.ignite.cache.CacheMode.PARTITIONED; import static org.apache.ignite.events.EventType.EVT_NODE_JOINED; import static org.apache.ignite.internal.GridComponent.DiscoveryDataExchangeType.CACHE_PROC; @@ -63,6 +66,9 @@ class ClusterCachesInfo { private final ConcurrentMap<String, DynamicCacheDescriptor> registeredTemplates = new ConcurrentHashMap<>(); /** */ + private final IgniteLogger log; + + /** */ private Map<String, DynamicCacheDescriptor> cachesOnDisconnect; /** */ @@ -82,6 +88,8 @@ class ClusterCachesInfo { */ ClusterCachesInfo(GridKernalContext ctx) { this.ctx = ctx; + + log = ctx.log(getClass()); } /** @@ -91,8 +99,118 @@ class ClusterCachesInfo { this.joinDiscoData = joinDiscoData; } - void onKernalStart() throws IgniteCheckedException { - // TODO: validate cache configurations. + /** + * @throws IgniteCheckedException If failed. + */ + void onKernalStart(boolean checkConsistency) throws IgniteCheckedException { + if (checkConsistency && joinDiscoData != null && gridData != null) { + for (CacheJoinNodeDiscoveryData.CacheInfo locCacheInfo : joinDiscoData.caches().values()) { + CacheConfiguration locCfg = locCacheInfo.config(); + + CacheData cacheData = gridData.caches().get(locCfg.getName()); + + if (cacheData != null) + checkCache(locCfg, cacheData.cacheConfiguration(), cacheData.receivedFrom()); + } + } + + joinDiscoData = null; + gridData = null; + } + /** + * Checks that remote caches has configuration compatible with the local. + * + * @param locCfg Local configuration. + * @param rmtCfg Remote configuration. + * @param rmt Remote node. + * @throws IgniteCheckedException If check failed. + */ + private void checkCache(CacheConfiguration locCfg, CacheConfiguration rmtCfg, UUID rmt) throws IgniteCheckedException { + GridCacheAttributes rmtAttr = new GridCacheAttributes(rmtCfg); + GridCacheAttributes locAttr = new GridCacheAttributes(locCfg); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheMode", "Cache mode", + locAttr.cacheMode(), rmtAttr.cacheMode(), true); + + if (rmtAttr.cacheMode() != LOCAL) { + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "interceptor", "Cache Interceptor", + locAttr.interceptorClassName(), rmtAttr.interceptorClassName(), true); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "atomicityMode", + "Cache atomicity mode", locAttr.atomicityMode(), rmtAttr.atomicityMode(), true); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cachePreloadMode", + "Cache preload mode", locAttr.cacheRebalanceMode(), rmtAttr.cacheRebalanceMode(), true); + + if (CU.affinityNode(ctx.discovery().localNode(), locCfg.getNodeFilter())) { + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "storeFactory", "Store factory", + locAttr.storeFactoryClassName(), rmtAttr.storeFactoryClassName(), true); + } + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheAffinity", "Cache affinity", + locAttr.cacheAffinityClassName(), rmtAttr.cacheAffinityClassName(), true); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheAffinityMapper", + "Cache affinity mapper", locAttr.cacheAffinityMapperClassName(), + rmtAttr.cacheAffinityMapperClassName(), true); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityPartitionsCount", + "Affinity partitions count", locAttr.affinityPartitionsCount(), + rmtAttr.affinityPartitionsCount(), true); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "evictionFilter", "Eviction filter", + locAttr.evictionFilterClassName(), rmtAttr.evictionFilterClassName(), true); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "evictionPolicy", "Eviction policy", + locAttr.evictionPolicyClassName(), rmtAttr.evictionPolicyClassName(), true); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "transactionManagerLookup", + "Transaction manager lookup", locAttr.transactionManagerLookupClassName(), + rmtAttr.transactionManagerLookupClassName(), false); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "defaultLockTimeout", + "Default lock timeout", locAttr.defaultLockTimeout(), rmtAttr.defaultLockTimeout(), false); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "preloadBatchSize", + "Preload batch size", locAttr.rebalanceBatchSize(), rmtAttr.rebalanceBatchSize(), false); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeSynchronizationMode", + "Write synchronization mode", locAttr.writeSynchronization(), rmtAttr.writeSynchronization(), + true); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindBatchSize", + "Write behind batch size", locAttr.writeBehindBatchSize(), rmtAttr.writeBehindBatchSize(), + false); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindEnabled", + "Write behind enabled", locAttr.writeBehindEnabled(), rmtAttr.writeBehindEnabled(), false); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushFrequency", + "Write behind flush frequency", locAttr.writeBehindFlushFrequency(), + rmtAttr.writeBehindFlushFrequency(), false); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushSize", + "Write behind flush size", locAttr.writeBehindFlushSize(), rmtAttr.writeBehindFlushSize(), + false); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushThreadCount", + "Write behind flush thread count", locAttr.writeBehindFlushThreadCount(), + rmtAttr.writeBehindFlushThreadCount(), false); + + if (locAttr.cacheMode() == PARTITIONED) { + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "nearEvictionPolicy", + "Near eviction policy", locAttr.nearEvictionPolicyClassName(), + rmtAttr.nearEvictionPolicyClassName(), false); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityIncludeNeighbors", + "Affinity include neighbors", locAttr.affinityIncludeNeighbors(), + rmtAttr.affinityIncludeNeighbors(), true); + + CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityKeyBackups", + "Affinity key backups", locAttr.affinityKeyBackups(), + rmtAttr.affinityKeyBackups(), true); + } + } } /** @@ -435,8 +553,6 @@ class ClusterCachesInfo { if (locCfg != null || CU.affinityNode(ctx.discovery().localNode(), cfg.getNodeFilter())) locJoinStartCaches.add(new T2<>(desc, nearCfg)); } - - joinDiscoData = null; } } else { http://git-wip-us.apache.org/repos/asf/ignite/blob/14dba6e4/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheDescriptor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheDescriptor.java index bae711a..374bcb8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheDescriptor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheDescriptor.java @@ -56,9 +56,6 @@ public class DynamicCacheDescriptor { /** Cache type. */ private CacheType cacheType; - /** */ - private volatile Map<UUID, CacheConfiguration> rmtCfgs; - /** Template configuration flag. */ private boolean template; @@ -249,36 +246,6 @@ public class DynamicCacheDescriptor { } /** - * @param nodeId Remote node ID. - * @return Configuration. - */ - public CacheConfiguration remoteConfiguration(UUID nodeId) { - Map<UUID, CacheConfiguration> cfgs = rmtCfgs; - - return cfgs == null ? null : cfgs.get(nodeId); - } - - /** - * @param nodeId Remote node ID. - * @param cfg Remote node configuration. - */ - public void addRemoteConfiguration(UUID nodeId, CacheConfiguration cfg) { - Map<UUID, CacheConfiguration> cfgs = rmtCfgs; - - if (cfgs == null) - rmtCfgs = cfgs = new HashMap<>(); - - cfgs.put(nodeId, cfg); - } - - /** - * - */ - public void clearRemoteConfigurations() { - rmtCfgs = null; - } - - /** * @return Updates allowed flag. */ public boolean updatesAllowed() { http://git-wip-us.apache.org/repos/asf/ignite/blob/14dba6e4/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 2ed20e4..2fabcc5 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 @@ -772,7 +772,12 @@ public class GridCacheProcessor extends GridProcessorAdapter { ClusterNode locNode = ctx.discovery().localNode(); try { - checkConsistency(); + boolean check = !ctx.config().isDaemon() && !getBoolean(IGNITE_SKIP_CONFIGURATION_CONSISTENCY_CHECK); + + if (check) + checkConsistency(); + + cachesInfo.onKernalStart(check); boolean currStatus = ctx.state().active(); @@ -873,35 +878,18 @@ public class GridCacheProcessor extends GridProcessorAdapter { * */ private void checkConsistency() throws IgniteCheckedException { - if (!ctx.config().isDaemon() && !getBoolean(IGNITE_SKIP_CONFIGURATION_CONSISTENCY_CHECK)) { - for (ClusterNode n : ctx.discovery().remoteNodes()) { - if (n.attribute(ATTR_CONSISTENCY_CHECK_SKIPPED)) - continue; + for (ClusterNode n : ctx.discovery().remoteNodes()) { + if (n.attribute(ATTR_CONSISTENCY_CHECK_SKIPPED)) + continue; - checkTransactionConfiguration(n); + checkTransactionConfiguration(n); - DeploymentMode locDepMode = ctx.config().getDeploymentMode(); - DeploymentMode rmtDepMode = n.attribute(IgniteNodeAttributes.ATTR_DEPLOYMENT_MODE); + DeploymentMode locDepMode = ctx.config().getDeploymentMode(); + DeploymentMode rmtDepMode = n.attribute(IgniteNodeAttributes.ATTR_DEPLOYMENT_MODE); - CU.checkAttributeMismatch( + CU.checkAttributeMismatch( log, null, n.id(), "deploymentMode", "Deployment mode", locDepMode, rmtDepMode, true); - - for (DynamicCacheDescriptor desc : cacheDescriptors()) { - CacheConfiguration rmtCfg = desc.remoteConfiguration(n.id()); - - if (rmtCfg != null) { - CacheConfiguration locCfg = desc.cacheConfiguration(); - - checkCache(locCfg, rmtCfg, n); - - // Check plugin cache configurations. - CachePluginManager pluginMgr = desc.pluginManager(); - - pluginMgr.validateRemotes(rmtCfg, n); - } - } - } } } @@ -2690,110 +2678,6 @@ public class GridCacheProcessor extends GridProcessorAdapter { } /** - * Checks that remote caches has configuration compatible with the local. - * - * @param locCfg Local configuration. - * @param rmtCfg Remote configuration. - * @param rmtNode Remote node. - * @throws IgniteCheckedException If check failed. - */ - private void checkCache(CacheConfiguration locCfg, CacheConfiguration rmtCfg, ClusterNode rmtNode) throws IgniteCheckedException { - ClusterNode locNode = ctx.discovery().localNode(); - - UUID rmt = rmtNode.id(); - - GridCacheAttributes rmtAttr = new GridCacheAttributes(rmtCfg); - GridCacheAttributes locAttr = new GridCacheAttributes(locCfg); - - boolean isLocAff = CU.affinityNode(locNode, locCfg.getNodeFilter()); - boolean isRmtAff = CU.affinityNode(rmtNode, rmtCfg.getNodeFilter()); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheMode", "Cache mode", - locAttr.cacheMode(), rmtAttr.cacheMode(), true); - - if (rmtAttr.cacheMode() != LOCAL) { - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "interceptor", "Cache Interceptor", - locAttr.interceptorClassName(), rmtAttr.interceptorClassName(), true); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "atomicityMode", - "Cache atomicity mode", locAttr.atomicityMode(), rmtAttr.atomicityMode(), true); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cachePreloadMode", - "Cache preload mode", locAttr.cacheRebalanceMode(), rmtAttr.cacheRebalanceMode(), true); - - boolean checkStore = isLocAff && isRmtAff; - - if (checkStore) - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "storeFactory", "Store factory", - locAttr.storeFactoryClassName(), rmtAttr.storeFactoryClassName(), true); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheAffinity", "Cache affinity", - locAttr.cacheAffinityClassName(), rmtAttr.cacheAffinityClassName(), true); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheAffinityMapper", - "Cache affinity mapper", locAttr.cacheAffinityMapperClassName(), - rmtAttr.cacheAffinityMapperClassName(), true); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityPartitionsCount", - "Affinity partitions count", locAttr.affinityPartitionsCount(), - rmtAttr.affinityPartitionsCount(), true); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "evictionFilter", "Eviction filter", - locAttr.evictionFilterClassName(), rmtAttr.evictionFilterClassName(), true); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "evictionPolicy", "Eviction policy", - locAttr.evictionPolicyClassName(), rmtAttr.evictionPolicyClassName(), true); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "transactionManagerLookup", - "Transaction manager lookup", locAttr.transactionManagerLookupClassName(), - rmtAttr.transactionManagerLookupClassName(), false); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "defaultLockTimeout", - "Default lock timeout", locAttr.defaultLockTimeout(), rmtAttr.defaultLockTimeout(), false); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "preloadBatchSize", - "Preload batch size", locAttr.rebalanceBatchSize(), rmtAttr.rebalanceBatchSize(), false); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeSynchronizationMode", - "Write synchronization mode", locAttr.writeSynchronization(), rmtAttr.writeSynchronization(), - true); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindBatchSize", - "Write behind batch size", locAttr.writeBehindBatchSize(), rmtAttr.writeBehindBatchSize(), - false); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindEnabled", - "Write behind enabled", locAttr.writeBehindEnabled(), rmtAttr.writeBehindEnabled(), false); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushFrequency", - "Write behind flush frequency", locAttr.writeBehindFlushFrequency(), - rmtAttr.writeBehindFlushFrequency(), false); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushSize", - "Write behind flush size", locAttr.writeBehindFlushSize(), rmtAttr.writeBehindFlushSize(), - false); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushThreadCount", - "Write behind flush thread count", locAttr.writeBehindFlushThreadCount(), - rmtAttr.writeBehindFlushThreadCount(), false); - - if (locAttr.cacheMode() == PARTITIONED) { - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "nearEvictionPolicy", - "Near eviction policy", locAttr.nearEvictionPolicyClassName(), - rmtAttr.nearEvictionPolicyClassName(), false); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityIncludeNeighbors", - "Affinity include neighbors", locAttr.affinityIncludeNeighbors(), - rmtAttr.affinityIncludeNeighbors(), true); - - CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityKeyBackups", - "Affinity key backups", locAttr.affinityKeyBackups(), - rmtAttr.affinityKeyBackups(), true); - } - } - } - - /** * @param rmt Remote node to check. * @throws IgniteCheckedException If check failed. */
