You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/03/02 17:30:08 UTC
[22/50] incubator-ignite git commit: #ignite-239: small refactoring.
#ignite-239: small refactoring.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/535aaf46
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/535aaf46
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/535aaf46
Branch: refs/heads/ignite-368
Commit: 535aaf464fde5e035b594297a57ab3de06257d1f
Parents: 7aec19e
Author: ivasilinets <iv...@gridgain.com>
Authored: Thu Feb 26 17:53:00 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Thu Feb 26 17:53:00 2015 +0300
----------------------------------------------------------------------
.../configuration/IgniteConfiguration.java | 163 +------
.../org/apache/ignite/internal/IgnitionEx.java | 477 ++++++++++++-------
2 files changed, 328 insertions(+), 312 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/535aaf46/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
index 037b7c8..bd24c4b 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
@@ -26,19 +26,7 @@ import org.apache.ignite.lang.*;
import org.apache.ignite.lifecycle.*;
import org.apache.ignite.marshaller.*;
import org.apache.ignite.plugin.*;
-import org.apache.ignite.spi.checkpoint.noop.*;
-import org.apache.ignite.spi.collision.noop.*;
-import org.apache.ignite.spi.communication.tcp.*;
-import org.apache.ignite.spi.deployment.local.*;
-import org.apache.ignite.spi.discovery.tcp.*;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.*;
-import org.apache.ignite.spi.eventstorage.memory.*;
-import org.apache.ignite.spi.failover.always.*;
import org.apache.ignite.spi.indexing.*;
-import org.apache.ignite.spi.indexing.noop.*;
-import org.apache.ignite.spi.loadbalancing.roundrobin.*;
-import org.apache.ignite.spi.swapspace.file.*;
-import org.apache.ignite.spi.swapspace.noop.*;
import org.apache.ignite.streamer.*;
import org.apache.ignite.plugin.segmentation.*;
import org.apache.ignite.services.*;
@@ -383,9 +371,6 @@ public class IgniteConfiguration {
/** User's class loader. */
private ClassLoader classLdr;
- /** */
- private static final String[] EMPTY_STR_ARR = new String[0];
-
/**
* Creates valid grid configuration with all default values.
*/
@@ -403,189 +388,75 @@ public class IgniteConfiguration {
assert cfg != null;
// SPIs.
- discoSpi = cfg.getDiscoverySpi() != null ? cfg.getDiscoverySpi() : new TcpDiscoverySpi();
-
- if (discoSpi instanceof TcpDiscoverySpi) {
- TcpDiscoverySpi tcpDisco = (TcpDiscoverySpi)discoSpi;
-
- if (tcpDisco.getIpFinder() == null)
- tcpDisco.setIpFinder(new TcpDiscoveryMulticastIpFinder());
- }
-
- commSpi = cfg.getCommunicationSpi() != null ? cfg.getCommunicationSpi() : new TcpCommunicationSpi();
-
- deploySpi = cfg.getDeploymentSpi() != null ? cfg.getDeploymentSpi() : new LocalDeploymentSpi();
-
- evtSpi = cfg.getEventStorageSpi() != null ? cfg.getEventStorageSpi() : new MemoryEventStorageSpi();
-
- cpSpi = cfg.getCheckpointSpi() != null ? cfg.getCheckpointSpi() : new CheckpointSpi[] {new NoopCheckpointSpi()};
-
- colSpi = cfg.getCollisionSpi() != null ? cfg.getCollisionSpi() : new NoopCollisionSpi();
-
- failSpi = cfg.getFailoverSpi() != null ? cfg.getFailoverSpi() : new FailoverSpi[] {new AlwaysFailoverSpi()};
-
- loadBalancingSpi = cfg.getLoadBalancingSpi() != null ? cfg.getLoadBalancingSpi() :
- new LoadBalancingSpi[] {new RoundRobinLoadBalancingSpi()};
-
- indexingSpi = cfg.getIndexingSpi() != null ? cfg.getIndexingSpi() : new NoopIndexingSpi();
-
+ discoSpi = cfg.getDiscoverySpi();
+ commSpi = cfg.getCommunicationSpi();
+ deploySpi = cfg.getDeploymentSpi();
+ evtSpi = cfg.getEventStorageSpi();
+ cpSpi = cfg.getCheckpointSpi();
+ colSpi = cfg.getCollisionSpi();
+ failSpi = cfg.getFailoverSpi();
+ loadBalancingSpi = cfg.getLoadBalancingSpi();
+ indexingSpi = cfg.getIndexingSpi();
swapSpaceSpi = cfg.getSwapSpaceSpi();
- if (swapSpaceSpi == null) {
- boolean needSwap = false;
-
- CacheConfiguration[] caches = cfg.getCacheConfiguration();
-
- if (caches != null) {
- for (CacheConfiguration c : caches) {
- if (c.isSwapEnabled()) {
- needSwap = true;
-
- break;
- }
- }
- }
-
- swapSpaceSpi = needSwap ? new FileSwapSpaceSpi() : new NoopSwapSpaceSpi();
- }
-
/*
* Order alphabetically for maintenance purposes.
*/
addrRslvr = cfg.getAddressResolver();
-
allResolversPassReq = cfg.isAllSegmentationResolversPassRequired();
-
atomicCfg = cfg.getAtomicConfiguration();
-
daemon = cfg.isDaemon();
-
cacheCfg = cfg.getCacheConfiguration();
-
cacheSanityCheckEnabled = cfg.isCacheSanityCheckEnabled();
-
- connectorCfg = cfg.getConnectorConfiguration() != null ?
- new ConnectorConfiguration(cfg.getConnectorConfiguration()) : null;
-
+ connectorCfg = cfg.getConnectorConfiguration();
classLdr = cfg.getClassLoader();
-
clockSyncFreq = cfg.getClockSyncFrequency();
-
clockSyncSamples = cfg.getClockSyncSamples();
-
deployMode = cfg.getDeploymentMode();
-
discoStartupDelay = cfg.getDiscoveryStartupDelay();
-
pubPoolSize = cfg.getPublicThreadPoolSize();
-
ggHome = cfg.getIgniteHome();
-
ggWork = cfg.getWorkDirectory();
-
gridName = cfg.getGridName();
-
- IgfsConfiguration[] igfsCfgs = cfg.getIgfsConfiguration();
-
- if (igfsCfgs != null) {
- IgfsConfiguration[] clone = igfsCfgs.clone();
-
- for (int i = 0; i < igfsCfgs.length; i++)
- clone[i] = new IgfsConfiguration(igfsCfgs[i]);
-
- igfsCfg = clone;
- }
-
+ igfsCfg = cfg.getIgfsConfiguration();
igfsPoolSize = cfg.getIgfsThreadPoolSize();
-
hadoopCfg = cfg.getHadoopConfiguration();
-
inclEvtTypes = cfg.getIncludeEventTypes();
-
includeProps = cfg.getIncludeProperties();
-
lifecycleBeans = cfg.getLifecycleBeans();
-
locHost = cfg.getLocalHost();
-
log = cfg.getGridLogger();
-
lsnrs = cfg.getLocalEventListeners();
-
marsh = cfg.getMarshaller();
-
marshLocJobs = cfg.isMarshalLocalJobs();
-
- mbeanSrv = cfg.getMBeanServer() != null ? cfg.getMBeanServer() : ManagementFactory.getPlatformMBeanServer();
-
+ mbeanSrv = cfg.getMBeanServer();
metricsHistSize = cfg.getMetricsHistorySize();
-
metricsExpTime = cfg.getMetricsExpireTime();
-
metricsLogFreq = cfg.getMetricsLogFrequency();
-
metricsUpdateFreq = cfg.getMetricsUpdateFrequency();
-
mgmtPoolSize = cfg.getManagementThreadPoolSize();
-
netTimeout = cfg.getNetworkTimeout();
-
- nodeId = cfg.getNodeId() != null ? cfg.getNodeId() : UUID.randomUUID();
-
+ nodeId = cfg.getNodeId();
p2pEnabled = cfg.isPeerClassLoadingEnabled();
-
- p2pLocClsPathExcl = cfg.getPeerClassLoadingLocalClassPathExclude() != null ?
- cfg.getPeerClassLoadingLocalClassPathExclude() : EMPTY_STR_ARR;
-
+ p2pLocClsPathExcl = cfg.getPeerClassLoadingLocalClassPathExclude();
p2pMissedCacheSize = cfg.getPeerClassLoadingMissedResourcesCacheSize();
-
p2pPoolSize = cfg.getPeerClassLoadingThreadPoolSize();
-
pluginCfgs = cfg.getPluginConfigurations();
-
qryCfg = cfg.getQueryConfiguration();
-
segChkFreq = cfg.getSegmentCheckFrequency();
-
segPlc = cfg.getSegmentationPolicy();
-
segResolveAttempts = cfg.getSegmentationResolveAttempts();
-
segResolvers = cfg.getSegmentationResolvers();
-
sndRetryCnt = cfg.getNetworkSendRetryCount();
-
sndRetryDelay = cfg.getNetworkSendRetryDelay();
-
- StreamerConfiguration[] streamerCfgs = cfg.getStreamerConfiguration();
-
- if (streamerCfgs != null) {
- StreamerConfiguration[] clone = streamerCfgs.clone();
-
- for (int i = 0; i < streamerCfgs.length; i++)
- clone[i] = new StreamerConfiguration(streamerCfgs[i]);
-
- streamerCfg = clone;
- }
-
+ streamerCfg = cfg.getStreamerConfiguration();
svcCfgs = cfg.getServiceConfiguration();
-
sysPoolSize = cfg.getSystemThreadPoolSize();
-
timeSrvPortBase = cfg.getTimeServerPortBase();
-
timeSrvPortRange = cfg.getTimeServerPortRange();
-
- txCfg = cfg.getTransactionConfiguration() != null ?
- new TransactionConfiguration(cfg.getTransactionConfiguration()) : null;
-
- if (cfg.getUserAttributes() == null)
- userAttrs = Collections.emptyMap();
- else
- userAttrs = cfg.getUserAttributes();
-
+ txCfg = cfg.getTransactionConfiguration();
+ userAttrs = cfg.getUserAttributes();
waitForSegOnStart = cfg.isWaitForSegmentOnStart();
-
warmupClos = cfg.getWarmupClosure();
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/535aaf46/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
index 01c0cec..f70836c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
@@ -34,13 +34,29 @@ import org.apache.ignite.marshaller.optimized.*;
import org.apache.ignite.mxbean.*;
import org.apache.ignite.plugin.segmentation.*;
import org.apache.ignite.spi.*;
+import org.apache.ignite.spi.checkpoint.*;
+import org.apache.ignite.spi.checkpoint.noop.*;
+import org.apache.ignite.spi.collision.noop.*;
+import org.apache.ignite.spi.communication.tcp.*;
+import org.apache.ignite.spi.deployment.local.*;
import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.*;
+import org.apache.ignite.spi.eventstorage.memory.*;
+import org.apache.ignite.spi.failover.*;
+import org.apache.ignite.spi.failover.always.*;
+import org.apache.ignite.spi.indexing.noop.*;
+import org.apache.ignite.spi.loadbalancing.*;
+import org.apache.ignite.spi.loadbalancing.roundrobin.*;
+import org.apache.ignite.spi.swapspace.file.*;
+import org.apache.ignite.spi.swapspace.noop.*;
+import org.apache.ignite.streamer.*;
import org.apache.ignite.thread.*;
import org.jdk8.backport.*;
import org.jetbrains.annotations.*;
import javax.management.*;
import java.io.*;
+import java.lang.management.*;
import java.lang.reflect.*;
import java.net.*;
import java.util.*;
@@ -103,6 +119,9 @@ public class IgnitionEx {
/** */
private static volatile boolean daemon;
+ /** */
+ private static final String[] EMPTY_STR_ARR = new String[0];
+
/**
* Checks runtime version to be 1.7.x or 1.8.x.
* This will load pretty much first so we must do these checks here.
@@ -1278,17 +1297,6 @@ public class IgnitionEx {
IgniteConfiguration cfg = startCtx.config() != null ? startCtx.config() : new IgniteConfiguration();
- String ggHome = cfg.getIgniteHome();
-
- // Set Ignite home.
- if (ggHome == null)
- ggHome = U.getIgniteHome();
- else
- // If user provided IGNITE_HOME - set it as a system property.
- U.setIgniteHome(ggHome);
-
- U.setWorkDirectory(cfg.getWorkDirectory(), ggHome);
-
// Ensure invariant.
// It's a bit dirty - but this is a result of late refactoring
// and I don't want to reshuffle a lot of code.
@@ -1298,60 +1306,18 @@ public class IgnitionEx {
if (startCtx.configUrl() != null)
System.setProperty(IGNITE_CONFIG_URL, startCtx.configUrl().toString());
- IgniteConfiguration myCfg = new IgniteConfiguration(cfg);
-
- IgniteLogger cfgLog = initLogger(cfg.getGridLogger(), myCfg.getNodeId());
+ // Initialize factory's log.
+ IgniteLogger cfgLog = initLogger(cfg.getGridLogger(), cfg.getNodeId());
assert cfgLog != null;
- cfgLog = new GridLoggerProxy(cfgLog, null, name, U.id8(myCfg.getNodeId()));
+ cfgLog = new GridLoggerProxy(cfgLog, null, name, U.id8(cfg.getNodeId()));
- // Initialize factory's log.
log = cfgLog.getLogger(G.class);
- myCfg.setGridLogger(cfgLog);
-
- // Check Ignite home folder (after log is available).
- if (ggHome != null) {
- File ggHomeFile = new File(ggHome);
-
- if (!ggHomeFile.exists() || !ggHomeFile.isDirectory())
- throw new IgniteCheckedException("Invalid Ignite installation home folder: " + ggHome);
- }
-
- myCfg.setIgniteHome(ggHome);
-
- // Local host.
- String locHost = IgniteSystemProperties.getString(IGNITE_LOCAL_HOST);
-
- myCfg.setLocalHost(F.isEmpty(locHost) ? cfg.getLocalHost() : locHost);
-
- // Override daemon flag if it was set on the factory.
- if (daemon)
- myCfg.setDaemon(true);
-
- // Check for deployment mode override.
- String depModeName = IgniteSystemProperties.getString(IGNITE_DEP_MODE_OVERRIDE);
-
- if (!F.isEmpty(depModeName)) {
- if (!F.isEmpty(cfg.getCacheConfiguration())) {
- U.quietAndInfo(log, "Skipping deployment mode override for caches (custom closure " +
- "execution may not work for console Visor)");
- }
- else {
- try {
- DeploymentMode depMode = DeploymentMode.valueOf(depModeName);
+ IgniteConfiguration myCfg = initializeDefaultConfiguration(cfg);
- if (myCfg.getDeploymentMode() != depMode)
- myCfg.setDeploymentMode(depMode);
- }
- catch (IllegalArgumentException e) {
- throw new IgniteCheckedException("Failed to override deployment mode using system property " +
- "(are there any misspellings?)" +
- "[name=" + IGNITE_DEP_MODE_OVERRIDE + ", value=" + depModeName + ']', e);
- }
- }
- }
+ myCfg.setGridLogger(cfgLog);
if (myCfg.getConnectorConfiguration() != null) {
restExecSvc = new IgniteThreadPoolExecutor(
@@ -1363,38 +1329,6 @@ public class IgnitionEx {
);
}
- Marshaller marsh = cfg.getMarshaller();
-
- if (marsh == null) {
- if (!U.isHotSpot()) {
- U.warn(log, "GridOptimizedMarshaller is not supported on this JVM " +
- "(only Java HotSpot VMs are supported). Switching to standard JDK marshalling - " +
- "object serialization performance will be significantly slower.",
- "To enable fast marshalling upgrade to recent 1.6 or 1.7 HotSpot VM release.");
-
- marsh = new JdkMarshaller();
- }
- else if (!OptimizedMarshaller.available()) {
- U.warn(log, "GridOptimizedMarshaller is not supported on this JVM " +
- "(only recent 1.6 and 1.7 versions HotSpot VMs are supported). " +
- "To enable fast marshalling upgrade to recent 1.6 or 1.7 HotSpot VM release. " +
- "Switching to standard JDK marshalling - " +
- "object serialization performance will be significantly slower.",
- "To enable fast marshalling upgrade to recent 1.6 or 1.7 HotSpot VM release.");
-
- marsh = new JdkMarshaller();
- }
- else
- marsh = new OptimizedMarshaller();
- }
- else if (marsh instanceof OptimizedMarshaller && !U.isHotSpot()) {
- U.warn(log, "Using GridOptimizedMarshaller on untested JVM (only Java HotSpot VMs were tested) - " +
- "object serialization behavior could yield unexpected results.",
- "Using GridOptimizedMarshaller on untested JVM.");
- }
-
- myCfg.setMarshaller(marsh);
-
// Validate segmentation configuration.
GridSegmentationPolicy segPlc = cfg.getSegmentationPolicy();
@@ -1418,82 +1352,6 @@ public class IgnitionEx {
ensureMultiInstanceSupport(myCfg.getSwapSpaceSpi());
}
- CacheConfiguration[] cacheCfgs = cfg.getCacheConfiguration();
-
- final boolean hasHadoop = IgniteComponentType.HADOOP.inClassPath();
-
- final boolean hasAtomics = cfg.getAtomicConfiguration() != null;
-
- final boolean clientDisco = myCfg.getDiscoverySpi() instanceof TcpClientDiscoverySpi;
-
- CacheConfiguration[] copies;
-
- if (cacheCfgs != null && cacheCfgs.length > 0) {
- if (!U.discoOrdered(myCfg.getDiscoverySpi()) && !U.relaxDiscoveryOrdered())
- throw new IgniteCheckedException("Discovery SPI implementation does not support node ordering and " +
- "cannot be used with cache (use SPI with @GridDiscoverySpiOrderSupport annotation, " +
- "like GridTcpDiscoverySpi)");
-
- for (CacheConfiguration ccfg : cacheCfgs) {
- if (CU.isHadoopSystemCache(ccfg.getName()))
- throw new IgniteCheckedException("Cache name cannot be \"" + CU.SYS_CACHE_HADOOP_MR +
- "\" because it is reserved for internal purposes.");
-
- if (CU.isAtomicsCache(ccfg.getName()))
- throw new IgniteCheckedException("Cache name cannot be \"" + CU.ATOMICS_CACHE_NAME +
- "\" because it is reserved for internal purposes.");
-
- if (CU.isUtilityCache(ccfg.getName()))
- throw new IgniteCheckedException("Cache name cannot start with \"" + CU.UTILITY_CACHE_NAME +
- "\" because this prefix is reserved for internal purposes.");
- }
-
- int addCacheCnt = 1; // Always add utility cache.
-
- if (hasHadoop)
- addCacheCnt++;
-
- if (hasAtomics)
- addCacheCnt++;
-
- copies = new CacheConfiguration[cacheCfgs.length + addCacheCnt];
-
- int cloneIdx = 1;
-
- if (hasHadoop)
- copies[cloneIdx++] = CU.hadoopSystemCache();
-
- if (hasAtomics)
- copies[cloneIdx++] = atomicsSystemCache(cfg.getAtomicConfiguration(), clientDisco);
-
- for (CacheConfiguration ccfg : cacheCfgs)
- copies[cloneIdx++] = new CacheConfiguration(ccfg);
- }
- else {
- int cacheCnt = 1; // Always add utility cache.
-
- if (hasHadoop)
- cacheCnt++;
-
- if (hasAtomics)
- cacheCnt++;
-
- copies = new CacheConfiguration[cacheCnt];
-
- int cacheIdx = 1;
-
- if (hasHadoop)
- copies[cacheIdx++] = CU.hadoopSystemCache();
-
- if (hasAtomics)
- copies[cacheIdx] = atomicsSystemCache(cfg.getAtomicConfiguration(), clientDisco);
- }
-
- // Always add utility cache.
- copies[0] = utilitySystemCache(clientDisco);
-
- myCfg.setCacheConfiguration(copies);
-
try {
// Use reflection to avoid loading undesired classes.
Class helperCls = Class.forName("org.apache.ignite.util.GridConfigurationHelper");
@@ -1636,6 +1494,293 @@ public class IgnitionEx {
}
/**
+ * @param cfg Ignite configuration copy to.
+ * @return New ignite configuration.
+ */
+ private IgniteConfiguration initializeDefaultConfiguration(IgniteConfiguration cfg)
+ throws IgniteCheckedException {
+ IgniteConfiguration myCfg = new IgniteConfiguration(cfg);
+ initializeDefaultConfigurationParameters(myCfg);
+ return myCfg;
+ }
+
+ /**
+ * Initialize default parameters.
+ */
+ public void initializeDefaultConfigurationParameters(IgniteConfiguration cfg) throws IgniteCheckedException {
+ // Set Ignite home.
+ String ggHome = cfg.getIgniteHome();
+
+ if (ggHome == null)
+ ggHome = U.getIgniteHome();
+ else
+ // If user provided IGNITE_HOME - set it as a system property.
+ U.setIgniteHome(ggHome);
+
+ U.setWorkDirectory(cfg.getWorkDirectory(), ggHome);
+
+ // Check Ignite home folder (after log is available).
+ if (ggHome != null) {
+ File ggHomeFile = new File(ggHome);
+
+ if (!ggHomeFile.exists() || !ggHomeFile.isDirectory())
+ throw new IgniteCheckedException("Invalid Ignite installation home folder: " + ggHome);
+ }
+
+ cfg.setIgniteHome(ggHome);
+
+ // Local host.
+ String locHost = IgniteSystemProperties.getString(IGNITE_LOCAL_HOST);
+
+ cfg.setLocalHost(F.isEmpty(locHost) ? cfg.getLocalHost() : locHost);
+
+ // Override daemon flag if it was set on the factory.
+ if (daemon)
+ cfg.setDaemon(true);
+
+ Marshaller marsh = cfg.getMarshaller();
+
+ if (marsh == null) {
+ if (!U.isHotSpot()) {
+ U.warn(log, "GridOptimizedMarshaller is not supported on this JVM " +
+ "(only Java HotSpot VMs are supported). Switching to standard JDK marshalling - " +
+ "object serialization performance will be significantly slower.",
+ "To enable fast marshalling upgrade to recent 1.6 or 1.7 HotSpot VM release.");
+
+ marsh = new JdkMarshaller();
+ }
+ else if (!OptimizedMarshaller.available()) {
+ U.warn(log, "GridOptimizedMarshaller is not supported on this JVM " +
+ "(only recent 1.6 and 1.7 versions HotSpot VMs are supported). " +
+ "To enable fast marshalling upgrade to recent 1.6 or 1.7 HotSpot VM release. " +
+ "Switching to standard JDK marshalling - " +
+ "object serialization performance will be significantly slower.",
+ "To enable fast marshalling upgrade to recent 1.6 or 1.7 HotSpot VM release.");
+
+ marsh = new JdkMarshaller();
+ }
+ else
+ marsh = new OptimizedMarshaller();
+ }
+ else if (marsh instanceof OptimizedMarshaller && !U.isHotSpot()) {
+ U.warn(log, "Using GridOptimizedMarshaller on untested JVM (only Java HotSpot VMs were tested) - " +
+ "object serialization behavior could yield unexpected results.",
+ "Using GridOptimizedMarshaller on untested JVM.");
+ }
+
+ // Check for deployment mode override.
+ String depModeName = IgniteSystemProperties.getString(IGNITE_DEP_MODE_OVERRIDE);
+
+ if (!F.isEmpty(depModeName)) {
+ if (!F.isEmpty(cfg.getCacheConfiguration())) {
+ U.quietAndInfo(log, "Skipping deployment mode override for caches (custom closure " +
+ "execution may not work for console Visor)");
+ }
+ else {
+ try {
+ DeploymentMode depMode = DeploymentMode.valueOf(depModeName);
+
+ if (cfg.getDeploymentMode() != depMode)
+ cfg.setDeploymentMode(depMode);
+ }
+ catch (IllegalArgumentException e) {
+ throw new IgniteCheckedException("Failed to override deployment mode using system property " +
+ "(are there any misspellings?)" +
+ "[name=" + IGNITE_DEP_MODE_OVERRIDE + ", value=" + depModeName + ']', e);
+ }
+ }
+ }
+
+ cfg.setMarshaller(marsh);
+
+ cfg.setConnectorConfiguration(cfg.getConnectorConfiguration() != null ?
+ new ConnectorConfiguration(cfg.getConnectorConfiguration()) : null);
+
+ IgfsConfiguration[] igfsCfgs = cfg.getIgfsConfiguration();
+
+ if (igfsCfgs != null) {
+ IgfsConfiguration[] clone = igfsCfgs.clone();
+
+ for (int i = 0; i < igfsCfgs.length; i++)
+ clone[i] = new IgfsConfiguration(igfsCfgs[i]);
+
+ cfg.setIgfsConfiguration(clone);
+ }
+
+ if (cfg.getMBeanServer() == null)
+ cfg.setMBeanServer(ManagementFactory.getPlatformMBeanServer());
+
+ if (cfg.getNodeId() == null)
+ cfg.setNodeId(UUID.randomUUID());
+
+ if (cfg.getPeerClassLoadingLocalClassPathExclude() == null)
+ cfg.setPeerClassLoadingLocalClassPathExclude(EMPTY_STR_ARR);
+
+ StreamerConfiguration[] streamerCfgs = cfg.getStreamerConfiguration();
+
+ if (streamerCfgs != null) {
+ StreamerConfiguration[] clone = streamerCfgs.clone();
+
+ for (int i = 0; i < streamerCfgs.length; i++)
+ clone[i] = new StreamerConfiguration(streamerCfgs[i]);
+
+ cfg.setStreamerConfiguration(clone);
+ }
+
+ cfg.setTransactionConfiguration(cfg.getTransactionConfiguration() != null ?
+ new TransactionConfiguration(cfg.getTransactionConfiguration()) : null);
+
+ if (cfg.getUserAttributes() == null) {
+ Map<String, ?> emptyAttr = Collections.emptyMap();
+ cfg.setUserAttributes(emptyAttr);
+ }
+
+ initializeDefaultCacheConfiguration(cfg);
+
+ initializeDefaultSpi(cfg);
+ }
+
+ /**
+ * Initialize default cache configuration.
+ *
+ * @param cfg Ignite configuration.
+ */
+ public void initializeDefaultCacheConfiguration(IgniteConfiguration cfg) throws IgniteCheckedException {
+ CacheConfiguration[] cacheCfgs = cfg.getCacheConfiguration();
+
+ final boolean hasHadoop = IgniteComponentType.HADOOP.inClassPath();
+
+ final boolean hasAtomics = cfg.getAtomicConfiguration() != null;
+
+ final boolean clientDisco = cfg.getDiscoverySpi() instanceof TcpClientDiscoverySpi;
+
+ CacheConfiguration[] copies;
+
+ if (cacheCfgs != null && cacheCfgs.length > 0) {
+ if (!U.discoOrdered(cfg.getDiscoverySpi()) && !U.relaxDiscoveryOrdered())
+ throw new IgniteCheckedException("Discovery SPI implementation does not support node ordering and " +
+ "cannot be used with cache (use SPI with @GridDiscoverySpiOrderSupport annotation, " +
+ "like GridTcpDiscoverySpi)");
+
+ for (CacheConfiguration ccfg : cacheCfgs) {
+ if (CU.isHadoopSystemCache(ccfg.getName()))
+ throw new IgniteCheckedException("Cache name cannot be \"" + CU.SYS_CACHE_HADOOP_MR +
+ "\" because it is reserved for internal purposes.");
+
+ if (CU.isAtomicsCache(ccfg.getName()))
+ throw new IgniteCheckedException("Cache name cannot be \"" + CU.ATOMICS_CACHE_NAME +
+ "\" because it is reserved for internal purposes.");
+
+ if (CU.isUtilityCache(ccfg.getName()))
+ throw new IgniteCheckedException("Cache name cannot start with \"" + CU.UTILITY_CACHE_NAME +
+ "\" because this prefix is reserved for internal purposes.");
+ }
+
+ int addCacheCnt = 1; // Always add utility cache.
+
+ if (hasHadoop)
+ addCacheCnt++;
+
+ if (hasAtomics)
+ addCacheCnt++;
+
+ copies = new CacheConfiguration[cacheCfgs.length + addCacheCnt];
+
+ int cloneIdx = 1;
+
+ if (hasHadoop)
+ copies[cloneIdx++] = CU.hadoopSystemCache();
+
+ if (hasAtomics)
+ copies[cloneIdx++] = atomicsSystemCache(cfg.getAtomicConfiguration(), clientDisco);
+
+ for (CacheConfiguration ccfg : cacheCfgs)
+ copies[cloneIdx++] = new CacheConfiguration(ccfg);
+ }
+ else {
+ int cacheCnt = 1; // Always add utility cache.
+
+ if (hasHadoop)
+ cacheCnt++;
+
+ if (hasAtomics)
+ cacheCnt++;
+
+ copies = new CacheConfiguration[cacheCnt];
+
+ int cacheIdx = 1;
+
+ if (hasHadoop)
+ copies[cacheIdx++] = CU.hadoopSystemCache();
+
+ if (hasAtomics)
+ copies[cacheIdx] = atomicsSystemCache(cfg.getAtomicConfiguration(), clientDisco);
+ }
+
+ // Always add utility cache.
+ copies[0] = utilitySystemCache(clientDisco);
+
+ cfg.setCacheConfiguration(copies);
+ }
+
+ /**
+ * Initialize default values for spi.
+ *
+ * @param cfg Ignite configuration.
+ */
+ private void initializeDefaultSpi(IgniteConfiguration cfg) {
+ if (cfg.getDiscoverySpi() == null)
+ cfg.setDiscoverySpi(new TcpDiscoverySpi());
+
+ if (cfg.getDiscoverySpi() instanceof TcpDiscoverySpi) {
+ TcpDiscoverySpi tcpDisco = (TcpDiscoverySpi)cfg.getDiscoverySpi();
+
+ if (tcpDisco.getIpFinder() == null)
+ tcpDisco.setIpFinder(new TcpDiscoveryMulticastIpFinder());
+ }
+
+ if (cfg.getCommunicationSpi() == null)
+ cfg.setCommunicationSpi(new TcpCommunicationSpi());
+
+ if (cfg.getDeploymentSpi() == null)
+ cfg.setDeploymentSpi(new LocalDeploymentSpi());
+
+ if (cfg.getEventStorageSpi() == null)
+ cfg.setEventStorageSpi(new MemoryEventStorageSpi());
+
+ if (cfg.getCheckpointSpi() == null)
+ cfg.setCheckpointSpi(new CheckpointSpi[] {new NoopCheckpointSpi()});
+
+ if (cfg.getCollisionSpi() == null)
+ cfg.setCollisionSpi(new NoopCollisionSpi());
+
+ if (cfg.getFailoverSpi() == null)
+ cfg.setFailoverSpi(new FailoverSpi[] {new AlwaysFailoverSpi()});
+
+ if (cfg.getLoadBalancingSpi() == null)
+ cfg.setLoadBalancingSpi(new LoadBalancingSpi[] {new RoundRobinLoadBalancingSpi()});
+
+ if (cfg.getIndexingSpi() == null)
+ cfg.setIndexingSpi(new NoopIndexingSpi());
+
+ if (cfg.getSwapSpaceSpi() == null) {
+ boolean needSwap = false;
+
+ if (cfg.getCacheConfiguration() != null) {
+ for (CacheConfiguration c : cfg.getCacheConfiguration()) {
+ if (c.isSwapEnabled()) {
+ needSwap = true;
+
+ break;
+ }
+ }
+ }
+
+ cfg.setSwapSpaceSpi(needSwap ? new FileSwapSpaceSpi() : new NoopSwapSpaceSpi());
+ }
+ }
+
+ /**
* @param cfgLog Configured logger.
* @param nodeId Local node ID.
* @return Initialized logger.