You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2016/12/23 09:34:49 UTC
[10/12] ignite git commit: Web console beta-7.
http://git-wip-us.apache.org/repos/asf/ignite/blob/8e7c852b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
index 5887832..8770bf6 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
@@ -19,1776 +19,1825 @@ import DFLT_DIALECTS from 'app/data/dialects.json';
import { EmptyBean, Bean } from './Beans';
-export default ['JavaTypes', 'igniteClusterDefaults', 'igniteCacheDefaults', 'igniteIgfsDefaults', (JavaTypes, clusterDflts, cacheDflts, igfsDflts) => {
- class ConfigurationGenerator {
- static igniteConfigurationBean(cluster) {
- return new Bean('org.apache.ignite.configuration.IgniteConfiguration', 'cfg', cluster, clusterDflts);
- }
+import IgniteClusterDefaults from './defaults/Cluster.service';
+import IgniteCacheDefaults from './defaults/Cache.service';
+import IgniteIGFSDefaults from './defaults/IGFS.service';
- static igfsConfigurationBean(igfs) {
- return new Bean('org.apache.ignite.configuration.FileSystemConfiguration', 'igfs', igfs, igfsDflts);
- }
+import JavaTypes from '../../../services/JavaTypes.service';
- static cacheConfigurationBean(cache) {
- return new Bean('org.apache.ignite.configuration.CacheConfiguration', 'ccfg', cache, cacheDflts);
- }
+const clusterDflts = new IgniteClusterDefaults();
+const cacheDflts = new IgniteCacheDefaults();
+const igfsDflts = new IgniteIGFSDefaults();
- static domainConfigurationBean(domain) {
- return new Bean('org.apache.ignite.cache.QueryEntity', 'qryEntity', domain, cacheDflts);
- }
+const javaTypes = new JavaTypes(clusterDflts, cacheDflts, igfsDflts);
- static discoveryConfigurationBean(discovery) {
- return new Bean('org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi', 'discovery', discovery, clusterDflts.discovery);
- }
+export default class IgniteConfigurationGenerator {
+ static igniteConfigurationBean(cluster) {
+ return new Bean('org.apache.ignite.configuration.IgniteConfiguration', 'cfg', cluster, clusterDflts);
+ }
- /**
- * Function to generate ignite configuration.
- *
- * @param {Object} cluster Cluster to process.
- * @param {Boolean} client
- * @return {Bean} Generated ignite configuration.
- */
- static igniteConfiguration(cluster, client) {
- const cfg = this.igniteConfigurationBean(cluster);
-
- this.clusterGeneral(cluster, cfg, client);
- this.clusterAtomics(cluster.atomicConfiguration, cfg);
- this.clusterBinary(cluster.binaryConfiguration, cfg);
- this.clusterCacheKeyConfiguration(cluster.cacheKeyConfiguration, cfg);
- this.clusterCheckpoint(cluster, cluster.caches, cfg);
- this.clusterCollision(cluster.collision, cfg);
- this.clusterCommunication(cluster, cfg);
- this.clusterConnector(cluster.connector, cfg);
- this.clusterDeployment(cluster, cfg);
- this.clusterEvents(cluster, cfg);
- this.clusterFailover(cluster, cfg);
- this.clusterLoadBalancing(cluster, cfg);
- this.clusterLogger(cluster.logger, cfg);
- this.clusterODBC(cluster.odbc, cfg);
- this.clusterMarshaller(cluster, cfg);
- this.clusterMetrics(cluster, cfg);
- this.clusterSwap(cluster, cfg);
- this.clusterTime(cluster, cfg);
- this.clusterPools(cluster, cfg);
- this.clusterTransactions(cluster.transactionConfiguration, cfg);
- this.clusterSsl(cluster, cfg);
- this.clusterUserAttributes(cluster, cfg);
-
- this.clusterCaches(cluster, cluster.caches, cluster.igfss, client, cfg);
-
- if (!client)
- this.clusterIgfss(cluster.igfss, cfg);
+ static igfsConfigurationBean(igfs) {
+ return new Bean('org.apache.ignite.configuration.FileSystemConfiguration', 'igfs', igfs, igfsDflts);
+ }
- return cfg;
- }
+ static cacheConfigurationBean(cache) {
+ return new Bean('org.apache.ignite.configuration.CacheConfiguration', 'ccfg', cache, cacheDflts);
+ }
- static dialectClsName(dialect) {
- return DFLT_DIALECTS[dialect] || 'Unknown database: ' + (dialect || 'Choose JDBC dialect');
- }
+ static domainConfigurationBean(domain) {
+ return new Bean('org.apache.ignite.cache.QueryEntity', 'qryEntity', domain, cacheDflts);
+ }
- static dataSourceBean(id, dialect) {
- let dsBean;
+ static discoveryConfigurationBean(discovery) {
+ return new Bean('org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi', 'discovery', discovery, clusterDflts.discovery);
+ }
- switch (dialect) {
- case 'Generic':
- dsBean = new Bean('com.mchange.v2.c3p0.ComboPooledDataSource', id, {})
- .property('jdbcUrl', `${id}.jdbc.url`, 'jdbc:your_database');
+ /**
+ * Function to generate ignite configuration.
+ *
+ * @param {Object} cluster Cluster to process.
+ * @param {Boolean} client
+ * @return {Bean} Generated ignite configuration.
+ */
+ static igniteConfiguration(cluster, client) {
+ const cfg = this.igniteConfigurationBean(cluster);
+
+ this.clusterGeneral(cluster, cfg, client);
+ this.clusterAtomics(cluster.atomicConfiguration, cfg);
+ this.clusterBinary(cluster.binaryConfiguration, cfg);
+ this.clusterCacheKeyConfiguration(cluster.cacheKeyConfiguration, cfg);
+ this.clusterCheckpoint(cluster, cluster.caches, cfg);
+ this.clusterCollision(cluster.collision, cfg);
+ this.clusterCommunication(cluster, cfg);
+ this.clusterConnector(cluster.connector, cfg);
+ this.clusterDeployment(cluster, cfg);
+ this.clusterEvents(cluster, cfg);
+ this.clusterFailover(cluster, cfg);
+ this.clusterLoadBalancing(cluster, cfg);
+ this.clusterLogger(cluster.logger, cfg);
+ this.clusterODBC(cluster.odbc, cfg);
+ this.clusterMarshaller(cluster, cfg);
+ this.clusterMetrics(cluster, cfg);
+ this.clusterSwap(cluster, cfg);
+ this.clusterTime(cluster, cfg);
+ this.clusterPools(cluster, cfg);
+ this.clusterTransactions(cluster.transactionConfiguration, cfg);
+ this.clusterSsl(cluster, cfg);
+ this.clusterUserAttributes(cluster, cfg);
+
+ this.clusterCaches(cluster, cluster.caches, cluster.igfss, client, cfg);
+
+ if (!client)
+ this.clusterIgfss(cluster.igfss, cfg);
+
+ return cfg;
+ }
- break;
- case 'Oracle':
- dsBean = new Bean('oracle.jdbc.pool.OracleDataSource', id, {})
- .property('URL', `${id}.jdbc.url`, 'jdbc:oracle:thin:@[host]:[port]:[database]');
+ static dialectClsName(dialect) {
+ return DFLT_DIALECTS[dialect] || 'Unknown database: ' + (dialect || 'Choose JDBC dialect');
+ }
- break;
- case 'DB2':
- dsBean = new Bean('com.ibm.db2.jcc.DB2DataSource', id, {})
- .property('serverName', `${id}.jdbc.server_name`, 'YOUR_DATABASE_SERVER_NAME')
- .propertyInt('portNumber', `${id}.jdbc.port_number`, 'YOUR_JDBC_PORT_NUMBER')
- .property('databaseName', `${id}.jdbc.database_name`, 'YOUR_DATABASE_NAME')
- .propertyInt('driverType', `${id}.jdbc.driver_type`, 'YOUR_JDBC_DRIVER_TYPE');
+ static dataSourceBean(id, dialect) {
+ let dsBean;
+
+ switch (dialect) {
+ case 'Generic':
+ dsBean = new Bean('com.mchange.v2.c3p0.ComboPooledDataSource', id, {})
+ .property('jdbcUrl', `${id}.jdbc.url`, 'jdbc:your_database');
+
+ break;
+ case 'Oracle':
+ dsBean = new Bean('oracle.jdbc.pool.OracleDataSource', id, {})
+ .property('URL', `${id}.jdbc.url`, 'jdbc:oracle:thin:@[host]:[port]:[database]');
+
+ break;
+ case 'DB2':
+ dsBean = new Bean('com.ibm.db2.jcc.DB2DataSource', id, {})
+ .property('serverName', `${id}.jdbc.server_name`, 'YOUR_DATABASE_SERVER_NAME')
+ .propertyInt('portNumber', `${id}.jdbc.port_number`, 'YOUR_JDBC_PORT_NUMBER')
+ .property('databaseName', `${id}.jdbc.database_name`, 'YOUR_DATABASE_NAME')
+ .propertyInt('driverType', `${id}.jdbc.driver_type`, 'YOUR_JDBC_DRIVER_TYPE');
+
+ break;
+ case 'SQLServer':
+ dsBean = new Bean('com.microsoft.sqlserver.jdbc.SQLServerDataSource', id, {})
+ .property('URL', `${id}.jdbc.url`, 'jdbc:sqlserver://[host]:[port][;databaseName=database]');
+
+ break;
+ case 'MySQL':
+ dsBean = new Bean('com.mysql.jdbc.jdbc2.optional.MysqlDataSource', id, {})
+ .property('URL', `${id}.jdbc.url`, 'jdbc:mysql://[host]:[port]/[database]');
+
+ break;
+ case 'PostgreSQL':
+ dsBean = new Bean('org.postgresql.ds.PGPoolingDataSource', id, {})
+ .property('url', `${id}.jdbc.url`, 'jdbc:postgresql://[host]:[port]/[database]');
+
+ break;
+ case 'H2':
+ dsBean = new Bean('org.h2.jdbcx.JdbcDataSource', id, {})
+ .property('URL', `${id}.jdbc.url`, 'jdbc:h2:tcp://[host]/[database]');
+
+ break;
+ default:
+ }
- break;
- case 'SQLServer':
- dsBean = new Bean('com.microsoft.sqlserver.jdbc.SQLServerDataSource', id, {})
- .property('URL', `${id}.jdbc.url`, 'jdbc:sqlserver://[host]:[port][;databaseName=database]');
+ if (dsBean) {
+ dsBean.property('user', `${id}.jdbc.username`, 'YOUR_USER_NAME')
+ .property('password', `${id}.jdbc.password`, 'YOUR_PASSWORD');
+ }
- break;
- case 'MySQL':
- dsBean = new Bean('com.mysql.jdbc.jdbc2.optional.MysqlDataSource', id, {})
- .property('URL', `${id}.jdbc.url`, 'jdbc:mysql://[host]:[port]/[database]');
+ return dsBean;
+ }
- break;
- case 'PostgreSQL':
- dsBean = new Bean('org.postgresql.ds.PGPoolingDataSource', id, {})
- .property('url', `${id}.jdbc.url`, 'jdbc:postgresql://[host]:[port]/[database]');
+ // Generate general section.
+ static clusterGeneral(cluster, cfg = this.igniteConfigurationBean(cluster), client = false) {
+ if (client)
+ cfg.prop('boolean', 'clientMode', true);
- break;
- case 'H2':
- dsBean = new Bean('org.h2.jdbcx.JdbcDataSource', id, {})
- .property('URL', `${id}.jdbc.url`, 'jdbc:h2:tcp://[host]/[database]');
+ cfg.stringProperty('name', 'gridName')
+ .stringProperty('localHost');
- break;
- default:
- }
-
- if (dsBean) {
- dsBean.property('user', `${id}.jdbc.username`, 'YOUR_USER_NAME')
- .property('password', `${id}.jdbc.password`, 'YOUR_PASSWORD');
- }
+ if (_.isNil(cluster.discovery))
+ return cfg;
- return dsBean;
- }
+ const discovery = new Bean('org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi', 'discovery',
+ cluster.discovery, clusterDflts.discovery);
- // Generate general section.
- static clusterGeneral(cluster, cfg = this.igniteConfigurationBean(cluster), client = false) {
- if (client)
- cfg.prop('boolean', 'clientMode', true);
+ let ipFinder;
- cfg.stringProperty('name', 'gridName')
- .stringProperty('localHost');
+ switch (discovery.valueOf('kind')) {
+ case 'Vm':
+ ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder',
+ 'ipFinder', cluster.discovery.Vm, clusterDflts.discovery.Vm);
- if (_.isNil(cluster.discovery))
- return cfg;
+ ipFinder.collectionProperty('addrs', 'addresses', cluster.discovery.Vm.addresses);
- const discovery = new Bean('org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi', 'discovery',
- cluster.discovery, clusterDflts.discovery);
+ break;
+ case 'Multicast':
+ ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder',
+ 'ipFinder', cluster.discovery.Multicast, clusterDflts.discovery.Multicast);
- let ipFinder;
+ ipFinder.stringProperty('multicastGroup')
+ .intProperty('multicastPort')
+ .intProperty('responseWaitTime')
+ .intProperty('addressRequestAttempts')
+ .stringProperty('localAddress')
+ .collectionProperty('addrs', 'addresses', cluster.discovery.Multicast.addresses);
- switch (discovery.valueOf('kind')) {
- case 'Vm':
- ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder',
- 'ipFinder', cluster.discovery.Vm, clusterDflts.discovery.Vm);
+ break;
+ case 'S3':
+ ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.s3.TcpDiscoveryS3IpFinder',
+ 'ipFinder', cluster.discovery.S3, clusterDflts.discovery.S3);
- ipFinder.collectionProperty('addrs', 'addresses', cluster.discovery.Vm.addresses);
+ ipFinder.stringProperty('bucketName');
- break;
- case 'Multicast':
- ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder',
- 'ipFinder', cluster.discovery.Multicast, clusterDflts.discovery.Multicast);
+ break;
+ case 'Cloud':
+ ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.cloud.TcpDiscoveryCloudIpFinder',
+ 'ipFinder', cluster.discovery.Cloud, clusterDflts.discovery.Cloud);
- ipFinder.stringProperty('multicastGroup')
- .intProperty('multicastPort')
- .intProperty('responseWaitTime')
- .intProperty('addressRequestAttempts')
- .stringProperty('localAddress')
- .collectionProperty('addrs', 'addresses', cluster.discovery.Multicast.addresses);
+ ipFinder.stringProperty('credential')
+ .pathProperty('credentialPath')
+ .stringProperty('identity')
+ .stringProperty('provider')
+ .collectionProperty('regions', 'regions', cluster.discovery.Cloud.regions)
+ .collectionProperty('zones', 'zones', cluster.discovery.Cloud.zones);
- break;
- case 'S3':
- ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.s3.TcpDiscoveryS3IpFinder',
- 'ipFinder', cluster.discovery.S3, clusterDflts.discovery.S3);
+ break;
+ case 'GoogleStorage':
+ ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.gce.TcpDiscoveryGoogleStorageIpFinder',
+ 'ipFinder', cluster.discovery.GoogleStorage, clusterDflts.discovery.GoogleStorage);
- ipFinder.stringProperty('bucketName');
+ ipFinder.stringProperty('projectName')
+ .stringProperty('bucketName')
+ .pathProperty('serviceAccountP12FilePath')
+ .stringProperty('serviceAccountId');
- break;
- case 'Cloud':
- ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.cloud.TcpDiscoveryCloudIpFinder',
- 'ipFinder', cluster.discovery.Cloud, clusterDflts.discovery.Cloud);
+ break;
+ case 'Jdbc':
+ ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.jdbc.TcpDiscoveryJdbcIpFinder',
+ 'ipFinder', cluster.discovery.Jdbc, clusterDflts.discovery.Jdbc);
- ipFinder.stringProperty('credential')
- .pathProperty('credentialPath')
- .stringProperty('identity')
- .stringProperty('provider')
- .collectionProperty('regions', 'regions', cluster.discovery.Cloud.regions)
- .collectionProperty('zones', 'zones', cluster.discovery.Cloud.zones);
+ ipFinder.intProperty('initSchema');
- break;
- case 'GoogleStorage':
- ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.gce.TcpDiscoveryGoogleStorageIpFinder',
- 'ipFinder', cluster.discovery.GoogleStorage, clusterDflts.discovery.GoogleStorage);
+ if (ipFinder.includes('dataSourceBean', 'dialect')) {
+ const id = ipFinder.valueOf('dataSourceBean');
- ipFinder.stringProperty('projectName')
- .stringProperty('bucketName')
- .pathProperty('serviceAccountP12FilePath')
- .stringProperty('serviceAccountId');
+ ipFinder.dataSource(id, 'dataSource', this.dataSourceBean(id, ipFinder.valueOf('dialect')));
+ }
- break;
- case 'Jdbc':
- ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.jdbc.TcpDiscoveryJdbcIpFinder',
- 'ipFinder', cluster.discovery.Jdbc, clusterDflts.discovery.Jdbc);
+ break;
+ case 'SharedFs':
+ ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.sharedfs.TcpDiscoverySharedFsIpFinder',
+ 'ipFinder', cluster.discovery.SharedFs, clusterDflts.discovery.SharedFs);
+
+ ipFinder.pathProperty('path');
+
+ break;
+ case 'ZooKeeper':
+ const src = cluster.discovery.ZooKeeper;
+ const dflt = clusterDflts.discovery.ZooKeeper;
+
+ ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.zk.TcpDiscoveryZookeeperIpFinder',
+ 'ipFinder', src, dflt);
+
+ ipFinder.emptyBeanProperty('curator')
+ .stringProperty('zkConnectionString');
+
+ const kind = _.get(src, 'retryPolicy.kind');
+
+ if (kind) {
+ const policy = src.retryPolicy;
+
+ let retryPolicyBean;
+
+ switch (kind) {
+ case 'ExponentialBackoff':
+ retryPolicyBean = new Bean('org.apache.curator.retry.ExponentialBackoffRetry', null,
+ policy.ExponentialBackoff, dflt.ExponentialBackoff)
+ .intConstructorArgument('baseSleepTimeMs')
+ .intConstructorArgument('maxRetries')
+ .intConstructorArgument('maxSleepMs');
+
+ break;
+ case 'BoundedExponentialBackoff':
+ retryPolicyBean = new Bean('org.apache.curator.retry.BoundedExponentialBackoffRetry',
+ null, policy.BoundedExponentialBackoff, dflt.BoundedExponentialBackoffRetry)
+ .intConstructorArgument('baseSleepTimeMs')
+ .intConstructorArgument('maxSleepTimeMs')
+ .intConstructorArgument('maxRetries');
+
+ break;
+ case 'UntilElapsed':
+ retryPolicyBean = new Bean('org.apache.curator.retry.RetryUntilElapsed', null,
+ policy.UntilElapsed, dflt.UntilElapsed)
+ .intConstructorArgument('maxElapsedTimeMs')
+ .intConstructorArgument('sleepMsBetweenRetries');
+
+ break;
+
+ case 'NTimes':
+ retryPolicyBean = new Bean('org.apache.curator.retry.RetryNTimes', null,
+ policy.NTimes, dflt.NTimes)
+ .intConstructorArgument('n')
+ .intConstructorArgument('sleepMsBetweenRetries');
+
+ break;
+ case 'OneTime':
+ retryPolicyBean = new Bean('org.apache.curator.retry.RetryOneTime', null,
+ policy.OneTime, dflt.OneTime)
+ .intConstructorArgument('sleepMsBetweenRetry');
+
+ break;
+ case 'Forever':
+ retryPolicyBean = new Bean('org.apache.curator.retry.RetryForever', null,
+ policy.Forever, dflt.Forever)
+ .intConstructorArgument('retryIntervalMs');
+
+ break;
+ case 'Custom':
+ const className = _.get(policy, 'Custom.className');
+
+ if (_.nonEmpty(className))
+ retryPolicyBean = new EmptyBean(className);
+
+ break;
+ default:
+ // No-op.
+ }
- ipFinder.intProperty('initSchema');
+ if (retryPolicyBean)
+ ipFinder.beanProperty('retryPolicy', retryPolicyBean);
+ }
- if (ipFinder.includes('dataSourceBean', 'dialect')) {
- const id = ipFinder.valueOf('dataSourceBean');
+ ipFinder.pathProperty('basePath', '/services')
+ .stringProperty('serviceName')
+ .boolProperty('allowDuplicateRegistrations');
- ipFinder.dataSource(id, 'dataSource', this.dataSourceBean(id, ipFinder.valueOf('dialect')));
- }
+ break;
+ default:
+ // No-op.
+ }
- break;
- case 'SharedFs':
- ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.sharedfs.TcpDiscoverySharedFsIpFinder',
- 'ipFinder', cluster.discovery.SharedFs, clusterDflts.discovery.SharedFs);
+ if (ipFinder)
+ discovery.beanProperty('ipFinder', ipFinder);
- ipFinder.pathProperty('path');
+ this.clusterDiscovery(cluster.discovery, cfg, discovery);
- break;
- case 'ZooKeeper':
- const src = cluster.discovery.ZooKeeper;
- const dflt = clusterDflts.discovery.ZooKeeper;
+ return cfg;
+ }
- ipFinder = new Bean('org.apache.ignite.spi.discovery.tcp.ipfinder.zk.TcpDiscoveryZookeeperIpFinder',
- 'ipFinder', src, dflt);
+ static igfsDataCache(igfs) {
+ return this.cacheConfiguration({
+ name: igfs.name + '-data',
+ cacheMode: 'PARTITIONED',
+ atomicityMode: 'TRANSACTIONAL',
+ writeSynchronizationMode: 'FULL_SYNC',
+ backups: 0,
+ igfsAffinnityGroupSize: igfs.affinnityGroupSize || 512
+ });
+ }
- ipFinder.emptyBeanProperty('curator')
- .stringProperty('zkConnectionString');
+ static igfsMetaCache(igfs) {
+ return this.cacheConfiguration({
+ name: igfs.name + '-meta',
+ cacheMode: 'REPLICATED',
+ atomicityMode: 'TRANSACTIONAL',
+ writeSynchronizationMode: 'FULL_SYNC'
+ });
+ }
- const kind = _.get(src, 'retryPolicy.kind');
+ static clusterCaches(cluster, caches, igfss, client, cfg = this.igniteConfigurationBean(cluster)) {
+ const ccfgs = _.map(caches, (cache) => this.cacheConfiguration(cache));
- if (kind) {
- const policy = src.retryPolicy;
+ if (!client) {
+ _.forEach(igfss, (igfs) => {
+ ccfgs.push(this.igfsDataCache(igfs));
+ ccfgs.push(this.igfsMetaCache(igfs));
+ });
+ }
- let retryPolicyBean;
+ cfg.varArgProperty('ccfgs', 'cacheConfiguration', ccfgs, 'org.apache.ignite.configuration.CacheConfiguration');
- switch (kind) {
- case 'ExponentialBackoff':
- retryPolicyBean = new Bean('org.apache.curator.retry.ExponentialBackoffRetry', null,
- policy.ExponentialBackoff, dflt.ExponentialBackoff)
- .intConstructorArgument('baseSleepTimeMs')
- .intConstructorArgument('maxRetries')
- .intConstructorArgument('maxSleepMs');
+ return cfg;
+ }
- break;
- case 'BoundedExponentialBackoff':
- retryPolicyBean = new Bean('org.apache.curator.retry.BoundedExponentialBackoffRetry',
- null, policy.BoundedExponentialBackoffRetry, dflt.BoundedExponentialBackoffRetry)
- .intConstructorArgument('baseSleepTimeMs')
- .intConstructorArgument('maxSleepTimeMs')
- .intConstructorArgument('maxRetries');
+ // Generate atomics group.
+ static clusterAtomics(atomics, cfg = this.igniteConfigurationBean()) {
+ const acfg = new Bean('org.apache.ignite.configuration.AtomicConfiguration', 'atomicCfg',
+ atomics, clusterDflts.atomics);
- break;
- case 'UntilElapsed':
- retryPolicyBean = new Bean('org.apache.curator.retry.RetryUntilElapsed', null,
- policy.UntilElapsed, dflt.UntilElapsed)
- .intConstructorArgument('maxElapsedTimeMs')
- .intConstructorArgument('sleepMsBetweenRetries');
+ acfg.enumProperty('cacheMode')
+ .intProperty('atomicSequenceReserveSize');
- break;
+ if (acfg.valueOf('cacheMode') === 'PARTITIONED')
+ acfg.intProperty('backups');
- case 'NTimes':
- retryPolicyBean = new Bean('org.apache.curator.retry.RetryNTimes', null,
- policy.NTimes, dflt.NTimes)
- .intConstructorArgument('n')
- .intConstructorArgument('sleepMsBetweenRetries');
+ if (acfg.isEmpty())
+ return cfg;
- break;
- case 'OneTime':
- retryPolicyBean = new Bean('org.apache.curator.retry.RetryOneTime', null,
- policy.OneTime, dflt.OneTime)
- .intConstructorArgument('sleepMsBetweenRetry');
+ cfg.beanProperty('atomicConfiguration', acfg);
- break;
- case 'Forever':
- retryPolicyBean = new Bean('org.apache.curator.retry.RetryForever', null,
- policy.Forever, dflt.Forever)
- .intConstructorArgument('retryIntervalMs');
+ return cfg;
+ }
- break;
- case 'Custom':
- if (_.nonEmpty(policy.Custom.className))
- retryPolicyBean = new EmptyBean(policy.Custom.className);
+ // Generate binary group.
+ static clusterBinary(binary, cfg = this.igniteConfigurationBean()) {
+ const binaryCfg = new Bean('org.apache.ignite.configuration.BinaryConfiguration', 'binaryCfg',
+ binary, clusterDflts.binary);
- break;
- default:
- // No-op.
- }
+ binaryCfg.emptyBeanProperty('idMapper')
+ .emptyBeanProperty('nameMapper')
+ .emptyBeanProperty('serializer');
- if (retryPolicyBean)
- ipFinder.beanProperty('retryPolicy', retryPolicyBean);
- }
+ const typeCfgs = [];
- ipFinder.pathProperty('basePath', '/services')
- .stringProperty('serviceName')
- .boolProperty('allowDuplicateRegistrations');
+ _.forEach(binary.typeConfigurations, (type) => {
+ const typeCfg = new Bean('org.apache.ignite.binary.BinaryTypeConfiguration',
+ javaTypes.toJavaName('binaryType', type.typeName), type, clusterDflts.binary.typeConfigurations);
- break;
- default:
- // No-op.
- }
+ typeCfg.stringProperty('typeName')
+ .emptyBeanProperty('idMapper')
+ .emptyBeanProperty('nameMapper')
+ .emptyBeanProperty('serializer')
+ .intProperty('enum');
- if (ipFinder)
- discovery.beanProperty('ipFinder', ipFinder);
+ if (typeCfg.nonEmpty())
+ typeCfgs.push(typeCfg);
+ });
- this.clusterDiscovery(cluster.discovery, cfg, discovery);
+ binaryCfg.collectionProperty('types', 'typeConfigurations', typeCfgs, 'org.apache.ignite.binary.BinaryTypeConfiguration')
+ .boolProperty('compactFooter');
+ if (binaryCfg.isEmpty())
return cfg;
- }
-
- static igfsDataCache(igfs) {
- return this.cacheConfiguration({
- name: igfs.name + '-data',
- cacheMode: 'PARTITIONED',
- atomicityMode: 'TRANSACTIONAL',
- writeSynchronizationMode: 'FULL_SYNC',
- backups: 0,
- igfsAffinnityGroupSize: igfs.affinnityGroupSize || 512
- });
- }
- static igfsMetaCache(igfs) {
- return this.cacheConfiguration({
- name: igfs.name + '-meta',
- cacheMode: 'REPLICATED',
- atomicityMode: 'TRANSACTIONAL',
- writeSynchronizationMode: 'FULL_SYNC'
- });
- }
+ cfg.beanProperty('binaryConfiguration', binaryCfg);
- static clusterCaches(cluster, caches, igfss, client, cfg = this.igniteConfigurationBean(cluster)) {
- const ccfgs = _.map(caches, (cache) => this.cacheConfiguration(cache));
+ return cfg;
+ }
- if (!client) {
- _.forEach(igfss, (igfs) => {
- ccfgs.push(this.igfsDataCache(igfs));
- ccfgs.push(this.igfsMetaCache(igfs));
- });
+ // Generate cache key configurations.
+ static clusterCacheKeyConfiguration(keyCfgs, cfg = this.igniteConfigurationBean()) {
+ const items = _.reduce(keyCfgs, (acc, keyCfg) => {
+ if (keyCfg.typeName && keyCfg.affinityKeyFieldName) {
+ acc.push(new Bean('org.apache.ignite.cache.CacheKeyConfiguration', null, keyCfg)
+ .stringConstructorArgument('typeName')
+ .stringConstructorArgument('affinityKeyFieldName'));
}
- cfg.varArgProperty('ccfgs', 'cacheConfiguration', ccfgs, 'org.apache.ignite.configuration.CacheConfiguration');
+ return acc;
+ }, []);
+ if (_.isEmpty(items))
return cfg;
- }
- // Generate atomics group.
- static clusterAtomics(atomics, cfg = this.igniteConfigurationBean()) {
- const acfg = new Bean('org.apache.ignite.configuration.AtomicConfiguration', 'atomicCfg',
- atomics, clusterDflts.atomics);
+ cfg.arrayProperty('cacheKeyConfiguration', 'cacheKeyConfiguration', items,
+ 'org.apache.ignite.cache.CacheKeyConfiguration');
- acfg.enumProperty('cacheMode')
- .intProperty('atomicSequenceReserveSize');
+ return cfg;
+ }
- if (acfg.valueOf('cacheMode') === 'PARTITIONED')
- acfg.intProperty('backups');
+ // Generate checkpoint configurations.
+ static clusterCheckpoint(cluster, caches, cfg = this.igniteConfigurationBean()) {
+ const cfgs = _.filter(_.map(cluster.checkpointSpi, (spi) => {
+ switch (_.get(spi, 'kind')) {
+ case 'FS':
+ const fsBean = new Bean('org.apache.ignite.spi.checkpoint.sharedfs.SharedFsCheckpointSpi',
+ 'checkpointSpiFs', spi.FS);
- if (acfg.isEmpty())
- return cfg;
+ fsBean.collectionProperty('directoryPaths', 'directoryPaths', _.get(spi, 'FS.directoryPaths'))
+ .emptyBeanProperty('checkpointListener');
- cfg.beanProperty('atomicConfiguration', acfg);
+ return fsBean;
- return cfg;
- }
+ case 'Cache':
+ const cacheBean = new Bean('org.apache.ignite.spi.checkpoint.cache.CacheCheckpointSpi',
+ 'checkpointSpiCache', spi.Cache);
- // Generate binary group.
- static clusterBinary(binary, cfg = this.igniteConfigurationBean()) {
- const binaryCfg = new Bean('org.apache.ignite.configuration.BinaryConfiguration', 'binaryCfg',
- binary, clusterDflts.binary);
+ const curCache = _.get(spi, 'Cache.cache');
- binaryCfg.emptyBeanProperty('idMapper')
- .emptyBeanProperty('nameMapper')
- .emptyBeanProperty('serializer');
+ const cache = _.find(caches, (c) => curCache && (c._id === curCache || _.get(c, 'cache._id') === curCache));
- const typeCfgs = [];
+ if (cache)
+ cacheBean.prop('java.lang.String', 'cacheName', cache.name || cache.cache.name);
- _.forEach(binary.typeConfigurations, (type) => {
- const typeCfg = new Bean('org.apache.ignite.binary.BinaryTypeConfiguration',
- JavaTypes.toJavaName('binaryType', type.typeName), type, clusterDflts.binary.typeConfigurations);
+ cacheBean.stringProperty('cacheName')
+ .emptyBeanProperty('checkpointListener');
- typeCfg.stringProperty('typeName')
- .emptyBeanProperty('idMapper')
- .emptyBeanProperty('nameMapper')
- .emptyBeanProperty('serializer')
- .intProperty('enum');
+ return cacheBean;
- if (typeCfg.nonEmpty())
- typeCfgs.push(typeCfg);
- });
+ case 'S3':
+ const s3Bean = new Bean('org.apache.ignite.spi.checkpoint.s3.S3CheckpointSpi',
+ 'checkpointSpiS3', spi.S3, clusterDflts.checkpointSpi.S3);
- binaryCfg.collectionProperty('types', 'typeConfigurations', typeCfgs, 'org.apache.ignite.binary.BinaryTypeConfiguration')
- .boolProperty('compactFooter');
+ let credentialsBean = null;
- if (binaryCfg.isEmpty())
- return cfg;
+ switch (_.get(spi.S3, 'awsCredentials.kind')) {
+ case 'Basic':
+ credentialsBean = new Bean('com.amazonaws.auth.BasicAWSCredentials', 'awsCredentials', {});
- cfg.beanProperty('binaryConfiguration', binaryCfg);
+ credentialsBean.propertyConstructorArgument('checkpoint.s3.credentials.accessKey', 'YOUR_S3_ACCESS_KEY')
+ .propertyConstructorArgument('checkpoint.s3.credentials.secretKey', 'YOUR_S3_SECRET_KEY');
- return cfg;
- }
+ break;
- // Generate cache key configurations.
- static clusterCacheKeyConfiguration(keyCfgs, cfg = this.igniteConfigurationBean()) {
- const items = _.reduce(keyCfgs, (acc, keyCfg) => {
- if (keyCfg.typeName && keyCfg.affinityKeyFieldName) {
- acc.push(new Bean('org.apache.ignite.cache.CacheKeyConfiguration', null, keyCfg)
- .stringConstructorArgument('typeName')
- .stringConstructorArgument('affinityKeyFieldName'));
- }
+ case 'Properties':
+ credentialsBean = new Bean('com.amazonaws.auth.PropertiesCredentials', 'awsCredentials', {});
- return acc;
- }, []);
+ const fileBean = new Bean('java.io.File', '', spi.S3.awsCredentials.Properties)
+ .pathConstructorArgument('path');
- if (_.isEmpty(items))
- return cfg;
+ if (fileBean.nonEmpty())
+ credentialsBean.beanConstructorArgument('file', fileBean);
- cfg.arrayProperty('cacheKeyConfiguration', 'cacheKeyConfiguration', items,
- 'org.apache.ignite.cache.CacheKeyConfiguration');
+ break;
- return cfg;
- }
+ case 'Anonymous':
+ credentialsBean = new Bean('com.amazonaws.auth.AnonymousAWSCredentials', 'awsCredentials', {});
- // Generate checkpoint configurations.
- static clusterCheckpoint(cluster, caches, cfg = this.igniteConfigurationBean()) {
- const cfgs = _.filter(_.map(cluster.checkpointSpi, (spi) => {
- switch (_.get(spi, 'kind')) {
- case 'FS':
- const fsBean = new Bean('org.apache.ignite.spi.checkpoint.sharedfs.SharedFsCheckpointSpi',
- 'checkpointSpiFs', spi.FS);
+ break;
- fsBean.collectionProperty('directoryPaths', 'directoryPaths', _.get(spi, 'FS.directoryPaths'))
- .emptyBeanProperty('checkpointListener');
+ case 'BasicSession':
+ credentialsBean = new Bean('com.amazonaws.auth.BasicSessionCredentials', 'awsCredentials', {});
- return fsBean;
+ // TODO 2054 Arguments in one line is very long string.
+ credentialsBean.propertyConstructorArgument('checkpoint.s3.credentials.accessKey')
+ .propertyConstructorArgument('checkpoint.s3.credentials.secretKey')
+ .propertyConstructorArgument('checkpoint.s3.credentials.sessionToken');
- case 'Cache':
- const cacheBean = new Bean('org.apache.ignite.spi.checkpoint.cache.CacheCheckpointSpi',
- 'checkpointSpiCache', spi.Cache);
+ break;
- const curCache = _.get(spi, 'Cache.cache');
+ case 'Custom':
+ const className = _.get(spi.S3.awsCredentials, 'Custom.className');
- const cache = _.find(caches, (c) => curCache && (c._id === curCache || _.get(c, 'cache._id') === curCache));
+ if (className)
+ credentialsBean = new Bean(className, 'awsCredentials', {});
- if (cache)
- cacheBean.prop('java.lang.String', 'cacheName', cache.name || cache.cache.name);
+ break;
- cacheBean.stringProperty('cacheName')
- .emptyBeanProperty('checkpointListener');
+ default:
+ break;
+ }
- return cacheBean;
+ if (credentialsBean)
+ s3Bean.beanProperty('awsCredentials', credentialsBean);
- case 'S3':
- const s3Bean = new Bean('org.apache.ignite.spi.checkpoint.s3.S3CheckpointSpi',
- 'checkpointSpiS3', spi.S3, clusterDflts.checkpointSpi.S3);
+ s3Bean.stringProperty('bucketNameSuffix');
- let credentialsBean = null;
+ const clientBean = new Bean('com.amazonaws.ClientConfiguration', 'clientCfg', spi.S3.clientConfiguration,
+ clusterDflts.checkpointSpi.S3.clientConfiguration);
- switch (_.get(spi.S3, 'awsCredentials.kind')) {
- case 'Basic':
- credentialsBean = new Bean('com.amazonaws.auth.BasicAWSCredentials', 'awsCredentials', {});
+ clientBean.enumProperty('protocol')
+ .intProperty('maxConnections')
+ .stringProperty('userAgent');
- credentialsBean.propertyConstructorArgument('checkpoint.s3.credentials.accessKey', 'YOUR_S3_ACCESS_KEY')
- .propertyConstructorArgument('checkpoint.s3.credentials.secretKey', 'YOUR_S3_SECRET_KEY');
+ const locAddr = new Bean('java.net.InetAddress', '', spi.S3.clientConfiguration)
+ .factoryMethod('getByName')
+ .stringConstructorArgument('localAddress');
- break;
+ if (locAddr.nonEmpty())
+ clientBean.beanProperty('localAddress', locAddr);
- case 'Properties':
- credentialsBean = new Bean('com.amazonaws.auth.PropertiesCredentials', 'awsCredentials', {});
+ clientBean.stringProperty('proxyHost')
+ .intProperty('proxyPort')
+ .stringProperty('proxyUsername');
- const fileBean = new Bean('java.io.File', '', spi.S3.awsCredentials.Properties)
- .pathConstructorArgument('path');
+ const userName = clientBean.valueOf('proxyUsername');
- if (fileBean.nonEmpty())
- credentialsBean.beanConstructorArgument('file', fileBean);
+ if (userName)
+ clientBean.property('proxyPassword', `checkpoint.s3.proxy.${userName}.password`);
- break;
+ clientBean.stringProperty('proxyDomain')
+ .stringProperty('proxyWorkstation');
- case 'Anonymous':
- credentialsBean = new Bean('com.amazonaws.auth.AnonymousAWSCredentials', 'awsCredentials', {});
+ const retryPolicy = spi.S3.clientConfiguration.retryPolicy;
- break;
+ if (retryPolicy) {
+ const kind = retryPolicy.kind;
- case 'BasicSession':
- credentialsBean = new Bean('com.amazonaws.auth.BasicSessionCredentials', 'awsCredentials', {});
+ const policy = retryPolicy[kind];
- // TODO 2054 Arguments in one line is very long string.
- credentialsBean.propertyConstructorArgument('checkpoint.s3.credentials.accessKey')
- .propertyConstructorArgument('checkpoint.s3.credentials.secretKey')
- .propertyConstructorArgument('checkpoint.s3.credentials.sessionToken');
+ let retryBean;
+
+ switch (kind) {
+ case 'Default':
+ retryBean = new Bean('com.amazonaws.retry.RetryPolicy', 'retryPolicy', {
+ retryCondition: 'DEFAULT_RETRY_CONDITION',
+ backoffStrategy: 'DEFAULT_BACKOFF_STRATEGY',
+ maxErrorRetry: 'DEFAULT_MAX_ERROR_RETRY',
+ honorMaxErrorRetryInClientConfig: true
+ }, clusterDflts.checkpointSpi.S3.clientConfiguration.retryPolicy);
+
+ retryBean.constantConstructorArgument('retryCondition')
+ .constantConstructorArgument('backoffStrategy')
+ .constantConstructorArgument('maxErrorRetry')
+ .constructorArgument('java.lang.Boolean', retryBean.valueOf('honorMaxErrorRetryInClientConfig'));
break;
- case 'Custom':
- const className = _.get(spi.S3.awsCredentials, 'Custom.className');
+ case 'DefaultMaxRetries':
+ retryBean = new Bean('com.amazonaws.retry.RetryPolicy', 'retryPolicy', {
+ retryCondition: 'DEFAULT_RETRY_CONDITION',
+ backoffStrategy: 'DEFAULT_BACKOFF_STRATEGY',
+ maxErrorRetry: _.get(policy, 'maxErrorRetry') || -1,
+ honorMaxErrorRetryInClientConfig: false
+ }, clusterDflts.checkpointSpi.S3.clientConfiguration.retryPolicy);
- credentialsBean = new Bean(className, 'awsCredentials', {});
+ retryBean.constantConstructorArgument('retryCondition')
+ .constantConstructorArgument('backoffStrategy')
+ .constructorArgument('java.lang.Integer', retryBean.valueOf('maxErrorRetry'))
+ .constructorArgument('java.lang.Boolean', retryBean.valueOf('honorMaxErrorRetryInClientConfig'));
break;
- default:
- break;
- }
+ case 'DynamoDB':
+ retryBean = new Bean('com.amazonaws.retry.RetryPolicy', 'retryPolicy', {
+ retryCondition: 'DEFAULT_RETRY_CONDITION',
+ backoffStrategy: 'DYNAMODB_DEFAULT_BACKOFF_STRATEGY',
+ maxErrorRetry: 'DYNAMODB_DEFAULT_MAX_ERROR_RETRY',
+ honorMaxErrorRetryInClientConfig: true
+ }, clusterDflts.checkpointSpi.S3.clientConfiguration.retryPolicy);
- if (credentialsBean)
- s3Bean.beanProperty('awsCredentials', credentialsBean);
+ retryBean.constantConstructorArgument('retryCondition')
+ .constantConstructorArgument('backoffStrategy')
+ .constantConstructorArgument('maxErrorRetry')
+ .constructorArgument('java.lang.Boolean', retryBean.valueOf('honorMaxErrorRetryInClientConfig'));
- s3Bean.stringProperty('bucketNameSuffix');
+ break;
- const clientBean = new Bean('com.amazonaws.ClientConfiguration', 'clientCfg', spi.S3.clientConfiguration,
- clusterDflts.checkpointSpi.S3.clientConfiguration);
+ case 'DynamoDBMaxRetries':
+ retryBean = new Bean('com.amazonaws.retry.RetryPolicy', 'retryPolicy', {
+ retryCondition: 'DEFAULT_RETRY_CONDITION',
+ backoffStrategy: 'DYNAMODB_DEFAULT_BACKOFF_STRATEGY',
+ maxErrorRetry: _.get(policy, 'maxErrorRetry') || -1,
+ honorMaxErrorRetryInClientConfig: false
+ }, clusterDflts.checkpointSpi.S3.clientConfiguration.retryPolicy);
- clientBean.enumProperty('protocol')
- .intProperty('maxConnections')
- .stringProperty('userAgent');
+ retryBean.constantConstructorArgument('retryCondition')
+ .constantConstructorArgument('backoffStrategy')
+ .constructorArgument('java.lang.Integer', retryBean.valueOf('maxErrorRetry'))
+ .constructorArgument('java.lang.Boolean', retryBean.valueOf('honorMaxErrorRetryInClientConfig'));
- const locAddr = new Bean('java.net.InetAddress', '', spi.S3.clientConfiguration)
- .factoryMethod('getByName')
- .stringConstructorArgument('localAddress');
+ break;
- if (locAddr.nonEmpty())
- clientBean.beanProperty('localAddress', locAddr);
+ case 'Custom':
+ retryBean = new Bean('com.amazonaws.retry.RetryPolicy', 'retryPolicy', policy);
- clientBean.stringProperty('proxyHost')
- .intProperty('proxyPort')
- .stringProperty('proxyUsername');
+ retryBean.beanConstructorArgument('retryCondition', retryBean.valueOf('retryCondition') ? new EmptyBean(retryBean.valueOf('retryCondition')) : null)
+ .beanConstructorArgument('backoffStrategy', retryBean.valueOf('backoffStrategy') ? new EmptyBean(retryBean.valueOf('backoffStrategy')) : null)
+ .constructorArgument('java.lang.Integer', retryBean.valueOf('maxErrorRetry'))
+ .constructorArgument('java.lang.Boolean', retryBean.valueOf('honorMaxErrorRetryInClientConfig'));
- const userName = clientBean.valueOf('proxyUsername');
+ break;
- if (userName)
- clientBean.property('proxyPassword', `checkpoint.s3.proxy.${userName}.password`);
+ default:
+ break;
+ }
- clientBean.stringProperty('proxyDomain')
- .stringProperty('proxyWorkstation');
+ if (retryBean)
+ clientBean.beanProperty('retryPolicy', retryBean);
+ }
- const retryPolicy = spi.S3.clientConfiguration.retryPolicy;
+ clientBean.intProperty('maxErrorRetry')
+ .intProperty('socketTimeout')
+ .intProperty('connectionTimeout')
+ .intProperty('requestTimeout')
+ .intProperty('socketSendBufferSizeHints')
+ .stringProperty('signerOverride')
+ .intProperty('connectionTTL')
+ .intProperty('connectionMaxIdleMillis')
+ .emptyBeanProperty('dnsResolver')
+ .intProperty('responseMetadataCacheSize')
+ .emptyBeanProperty('secureRandom')
+ .boolProperty('useReaper')
+ .boolProperty('useGzip')
+ .boolProperty('preemptiveBasicProxyAuth')
+ .boolProperty('useTcpKeepAlive');
+
+ if (clientBean.nonEmpty())
+ s3Bean.beanProperty('clientConfiguration', clientBean);
+
+ s3Bean.emptyBeanProperty('checkpointListener');
+
+ return s3Bean;
+
+ case 'JDBC':
+ const jdbcBean = new Bean('org.apache.ignite.spi.checkpoint.jdbc.JdbcCheckpointSpi',
+ 'checkpointSpiJdbc', spi.JDBC, clusterDflts.checkpointSpi.JDBC);
+
+ const id = jdbcBean.valueOf('dataSourceBean');
+ const dialect = _.get(spi.JDBC, 'dialect');
+
+ jdbcBean.dataSource(id, 'dataSource', this.dataSourceBean(id, dialect));
+
+ if (!_.isEmpty(jdbcBean.valueOf('user'))) {
+ jdbcBean.stringProperty('user')
+ .property('pwd', `checkpoint.${jdbcBean.valueOf('dataSourceBean')}.${jdbcBean.valueOf('user')}.jdbc.password`, 'YOUR_PASSWORD');
+ }
- if (retryPolicy) {
- const kind = retryPolicy.kind;
+ jdbcBean.stringProperty('checkpointTableName')
+ .stringProperty('keyFieldName')
+ .stringProperty('keyFieldType')
+ .stringProperty('valueFieldName')
+ .stringProperty('valueFieldType')
+ .stringProperty('expireDateFieldName')
+ .stringProperty('expireDateFieldType')
+ .intProperty('numberOfRetries')
+ .emptyBeanProperty('checkpointListener');
- const policy = retryPolicy[kind];
+ return jdbcBean;
- let retryBean;
+ case 'Custom':
+ const clsName = _.get(spi, 'Custom.className');
- switch (kind) {
- case 'Default':
- retryBean = new Bean('com.amazonaws.retry.RetryPolicy', 'retryPolicy', {
- retryCondition: 'DEFAULT_RETRY_CONDITION',
- backoffStrategy: 'DEFAULT_BACKOFF_STRATEGY',
- maxErrorRetry: 'DEFAULT_MAX_ERROR_RETRY',
- honorMaxErrorRetryInClientConfig: true
- }, clusterDflts.checkpointSpi.S3.clientConfiguration.retryPolicy);
+ if (clsName)
+ return new Bean(clsName, 'checkpointSpiCustom', spi.Cache);
- retryBean.constantConstructorArgument('retryCondition')
- .constantConstructorArgument('backoffStrategy')
- .constantConstructorArgument('maxErrorRetry')
- .constructorArgument('java.lang.Boolean', retryBean.valueOf('honorMaxErrorRetryInClientConfig'));
+ return null;
- break;
+ default:
+ return null;
+ }
+ }), (checkpointBean) => _.nonNil(checkpointBean));
- case 'DefaultMaxRetries':
- retryBean = new Bean('com.amazonaws.retry.RetryPolicy', 'retryPolicy', {
- retryCondition: 'DEFAULT_RETRY_CONDITION',
- backoffStrategy: 'DEFAULT_BACKOFF_STRATEGY',
- maxErrorRetry: _.get(policy, 'maxErrorRetry') || -1,
- honorMaxErrorRetryInClientConfig: false
- }, clusterDflts.checkpointSpi.S3.clientConfiguration.retryPolicy);
+ cfg.arrayProperty('checkpointSpi', 'checkpointSpi', cfgs, 'org.apache.ignite.spi.checkpoint.CheckpointSpi');
- retryBean.constantConstructorArgument('retryCondition')
- .constantConstructorArgument('backoffStrategy')
- .constructorArgument('java.lang.Integer', retryBean.valueOf('maxErrorRetry'))
- .constructorArgument('java.lang.Boolean', retryBean.valueOf('honorMaxErrorRetryInClientConfig'));
+ return cfg;
+ }
- break;
+ // Generate collision group.
+ static clusterCollision(collision, cfg = this.igniteConfigurationBean()) {
+ let colSpi;
+
+ switch (_.get(collision, 'kind')) {
+ case 'JobStealing':
+ colSpi = new Bean('org.apache.ignite.spi.collision.jobstealing.JobStealingCollisionSpi',
+ 'colSpi', collision.JobStealing, clusterDflts.collision.JobStealing);
+
+ colSpi.intProperty('activeJobsThreshold')
+ .intProperty('waitJobsThreshold')
+ .intProperty('messageExpireTime')
+ .intProperty('maximumStealingAttempts')
+ .boolProperty('stealingEnabled')
+ .emptyBeanProperty('externalCollisionListener')
+ .mapProperty('stealingAttrs', 'stealingAttributes');
+
+ break;
+ case 'FifoQueue':
+ colSpi = new Bean('org.apache.ignite.spi.collision.fifoqueue.FifoQueueCollisionSpi',
+ 'colSpi', collision.FifoQueue, clusterDflts.collision.FifoQueue);
+
+ colSpi.intProperty('parallelJobsNumber')
+ .intProperty('waitingJobsNumber');
+
+ break;
+ case 'PriorityQueue':
+ colSpi = new Bean('org.apache.ignite.spi.collision.priorityqueue.PriorityQueueCollisionSpi',
+ 'colSpi', collision.PriorityQueue, clusterDflts.collision.PriorityQueue);
+
+ colSpi.intProperty('parallelJobsNumber')
+ .intProperty('waitingJobsNumber')
+ .intProperty('priorityAttributeKey')
+ .intProperty('jobPriorityAttributeKey')
+ .intProperty('defaultPriority')
+ .intProperty('starvationIncrement')
+ .boolProperty('starvationPreventionEnabled');
+
+ break;
+ case 'Custom':
+ if (_.nonNil(_.get(collision, 'Custom.class')))
+ colSpi = new EmptyBean(collision.Custom.class);
+
+ break;
+ default:
+ return cfg;
+ }
- case 'DynamoDB':
- retryBean = new Bean('com.amazonaws.retry.RetryPolicy', 'retryPolicy', {
- retryCondition: 'DEFAULT_RETRY_CONDITION',
- backoffStrategy: 'DYNAMODB_DEFAULT_BACKOFF_STRATEGY',
- maxErrorRetry: 'DYNAMODB_DEFAULT_MAX_ERROR_RETRY',
- honorMaxErrorRetryInClientConfig: true
- }, clusterDflts.checkpointSpi.S3.clientConfiguration.retryPolicy);
+ if (_.nonNil(colSpi))
+ cfg.beanProperty('collisionSpi', colSpi);
- retryBean.constantConstructorArgument('retryCondition')
- .constantConstructorArgument('backoffStrategy')
- .constantConstructorArgument('maxErrorRetry')
- .constructorArgument('java.lang.Boolean', retryBean.valueOf('honorMaxErrorRetryInClientConfig'));
+ return cfg;
+ }
- break;
+ // Generate communication group.
+ static clusterCommunication(cluster, cfg = this.igniteConfigurationBean(cluster)) {
+ const commSpi = new Bean('org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi', 'communicationSpi',
+ cluster.communication, clusterDflts.communication);
+
+ commSpi.emptyBeanProperty('listener')
+ .stringProperty('localAddress')
+ .intProperty('localPort')
+ .intProperty('localPortRange')
+ .intProperty('sharedMemoryPort')
+ .intProperty('directBuffer')
+ .intProperty('directSendBuffer')
+ .intProperty('idleConnectionTimeout')
+ .intProperty('connectTimeout')
+ .intProperty('maxConnectTimeout')
+ .intProperty('reconnectCount')
+ .intProperty('socketSendBuffer')
+ .intProperty('socketReceiveBuffer')
+ .intProperty('messageQueueLimit')
+ .intProperty('slowClientQueueLimit')
+ .intProperty('tcpNoDelay')
+ .intProperty('ackSendThreshold')
+ .intProperty('unacknowledgedMessagesBufferSize')
+ .intProperty('socketWriteTimeout')
+ .intProperty('selectorsCount')
+ .emptyBeanProperty('addressResolver');
+
+ if (commSpi.nonEmpty())
+ cfg.beanProperty('communicationSpi', commSpi);
+
+ cfg.intProperty('networkTimeout')
+ .intProperty('networkSendRetryDelay')
+ .intProperty('networkSendRetryCount')
+ .intProperty('discoveryStartupDelay');
+
+ return cfg;
+ }
- case 'DynamoDBMaxRetries':
- retryBean = new Bean('com.amazonaws.retry.RetryPolicy', 'retryPolicy', {
- retryCondition: 'DEFAULT_RETRY_CONDITION',
- backoffStrategy: 'DYNAMODB_DEFAULT_BACKOFF_STRATEGY',
- maxErrorRetry: _.get(policy, 'maxErrorRetry') || -1,
- honorMaxErrorRetryInClientConfig: false
- }, clusterDflts.checkpointSpi.S3.clientConfiguration.retryPolicy);
+ // Generate REST access configuration.
+ static clusterConnector(connector, cfg = this.igniteConfigurationBean()) {
+ const connCfg = new Bean('org.apache.ignite.configuration.ConnectorConfiguration',
+ 'connectorConfiguration', connector, clusterDflts.connector);
+
+ if (connCfg.valueOf('enabled')) {
+ connCfg.pathProperty('jettyPath')
+ .stringProperty('host')
+ .intProperty('port')
+ .intProperty('portRange')
+ .intProperty('idleTimeout')
+ .intProperty('idleQueryCursorTimeout')
+ .intProperty('idleQueryCursorCheckFrequency')
+ .intProperty('receiveBufferSize')
+ .intProperty('sendBufferSize')
+ .intProperty('sendQueueLimit')
+ .intProperty('directBuffer')
+ .intProperty('noDelay')
+ .intProperty('selectorCount')
+ .intProperty('threadPoolSize')
+ .emptyBeanProperty('messageInterceptor')
+ .stringProperty('secretKey');
+
+ if (connCfg.valueOf('sslEnabled')) {
+ connCfg.intProperty('sslClientAuth')
+ .emptyBeanProperty('sslFactory');
+ }
- retryBean.constantConstructorArgument('retryCondition')
- .constantConstructorArgument('backoffStrategy')
- .constructorArgument('java.lang.Integer', retryBean.valueOf('maxErrorRetry'))
- .constructorArgument('java.lang.Boolean', retryBean.valueOf('honorMaxErrorRetryInClientConfig'));
+ if (connCfg.nonEmpty())
+ cfg.beanProperty('connectorConfiguration', connCfg);
+ }
- break;
+ return cfg;
+ }
- case 'Custom':
- retryBean = new Bean('com.amazonaws.retry.RetryPolicy', 'retryPolicy', policy);
+ // Generate deployment group.
+ static clusterDeployment(cluster, cfg = this.igniteConfigurationBean(cluster)) {
+ cfg.enumProperty('deploymentMode')
+ .boolProperty('peerClassLoadingEnabled');
- retryBean.beanConstructorArgument('retryCondition', retryBean.valueOf('retryCondition') ? new EmptyBean(retryBean.valueOf('retryCondition')) : null)
- .beanConstructorArgument('backoffStrategy', retryBean.valueOf('backoffStrategy') ? new EmptyBean(retryBean.valueOf('backoffStrategy')) : null)
- .constructorArgument('java.lang.Integer', retryBean.valueOf('maxErrorRetry'))
- .constructorArgument('java.lang.Boolean', retryBean.valueOf('honorMaxErrorRetryInClientConfig'));
+ if (cfg.valueOf('peerClassLoadingEnabled')) {
+ cfg.intProperty('peerClassLoadingMissedResourcesCacheSize')
+ .intProperty('peerClassLoadingThreadPoolSize')
+ .varArgProperty('p2pLocClsPathExcl', 'peerClassLoadingLocalClassPathExclude',
+ cluster.peerClassLoadingLocalClassPathExclude);
+ }
- break;
+ let deploymentBean = null;
- default:
- break;
- }
+ switch (_.get(cluster, 'deploymentSpi.kind')) {
+ case 'URI':
+ const uriDeployment = cluster.deploymentSpi.URI;
- if (retryBean)
- clientBean.beanProperty('retryPolicy', retryBean);
- }
+ deploymentBean = new Bean('org.apache.ignite.spi.deployment.uri.UriDeploymentSpi', 'deploymentSpi', uriDeployment);
- clientBean.intProperty('maxErrorRetry')
- .intProperty('socketTimeout')
- .intProperty('connectionTimeout')
- .intProperty('requestTimeout')
- .intProperty('socketSendBufferSizeHints')
- .stringProperty('signerOverride')
- .intProperty('connectionTTL')
- .intProperty('connectionMaxIdleMillis')
- .emptyBeanProperty('dnsResolver')
- .intProperty('responseMetadataCacheSize')
- .emptyBeanProperty('secureRandom')
- .boolProperty('useReaper')
- .boolProperty('useGzip')
- .boolProperty('preemptiveBasicProxyAuth')
- .boolProperty('useTcpKeepAlive');
-
- if (clientBean.nonEmpty())
- s3Bean.beanProperty('clientConfiguration', clientBean);
-
- s3Bean.emptyBeanProperty('checkpointListener');
-
- return s3Bean;
-
- case 'JDBC':
- const jdbcBean = new Bean('org.apache.ignite.spi.checkpoint.jdbc.JdbcCheckpointSpi',
- 'checkpointSpiJdbc', spi.JDBC, clusterDflts.checkpointSpi.JDBC);
-
- const id = jdbcBean.valueOf('dataSourceBean');
- const dialect = _.get(spi.JDBC, 'dialect');
-
- jdbcBean.dataSource(id, 'dataSource', this.dataSourceBean(id, dialect));
-
- if (!_.isEmpty(jdbcBean.valueOf('user'))) {
- jdbcBean.stringProperty('user')
- .property('pwd', `checkpoint.${jdbcBean.valueOf('dataSourceBean')}.${jdbcBean.valueOf('user')}.jdbc.password`, 'YOUR_PASSWORD');
- }
+ const scanners = _.map(uriDeployment.scanners, (scanner) => new EmptyBean(scanner));
- jdbcBean.stringProperty('checkpointTableName')
- .stringProperty('keyFieldName')
- .stringProperty('keyFieldType')
- .stringProperty('valueFieldName')
- .stringProperty('valueFieldType')
- .stringProperty('expireDateFieldName')
- .stringProperty('expireDateFieldType')
- .intProperty('numberOfRetries')
- .emptyBeanProperty('checkpointListener');
+ deploymentBean.collectionProperty('uriList', 'uriList', uriDeployment.uriList)
+ .stringProperty('temporaryDirectoryPath')
+ .varArgProperty('scanners', 'scanners', scanners,
+ 'org.apache.ignite.spi.deployment.uri.scanners.UriDeploymentScanner')
+ .emptyBeanProperty('listener')
+ .boolProperty('checkMd5')
+ .boolProperty('encodeUri');
- return jdbcBean;
+ cfg.beanProperty('deploymentSpi', deploymentBean);
- case 'Custom':
- const clsName = _.get(spi, 'Custom.className');
+ break;
- if (clsName)
- return new Bean(clsName, 'checkpointSpiCustom', spi.Cache);
+ case 'Local':
+ deploymentBean = new Bean('org.apache.ignite.spi.deployment.local.LocalDeploymentSpi', 'deploymentSpi', cluster.deploymentSpi.Local);
- return null;
+ deploymentBean.emptyBeanProperty('listener');
- default:
- return null;
- }
- }), (checkpointBean) => _.nonNil(checkpointBean));
+ cfg.beanProperty('deploymentSpi', deploymentBean);
- cfg.arrayProperty('checkpointSpi', 'checkpointSpi', cfgs, 'org.apache.ignite.spi.checkpoint.CheckpointSpi');
+ break;
- return cfg;
- }
+ case 'Custom':
+ cfg.emptyBeanProperty('deploymentSpi.Custom.className');
- // Generate collision group.
- static clusterCollision(collision, cfg = this.igniteConfigurationBean()) {
- let colSpi;
+ break;
- switch (_.get(collision, 'kind')) {
- case 'JobStealing':
- colSpi = new Bean('org.apache.ignite.spi.collision.jobstealing.JobStealingCollisionSpi',
- 'colSpi', collision.JobStealing, clusterDflts.collision.JobStealing);
+ default:
+ // No-op.
+ }
- colSpi.intProperty('activeJobsThreshold')
- .intProperty('waitJobsThreshold')
- .intProperty('messageExpireTime')
- .intProperty('maximumStealingAttempts')
- .boolProperty('stealingEnabled')
- .emptyBeanProperty('externalCollisionListener')
- .mapProperty('stealingAttrs', 'stealingAttributes');
+ return cfg;
+ }
- break;
- case 'FifoQueue':
- colSpi = new Bean('org.apache.ignite.spi.collision.fifoqueue.FifoQueueCollisionSpi',
- 'colSpi', collision.FifoQueue, clusterDflts.collision.FifoQueue);
+ // Generate discovery group.
+ static clusterDiscovery(discovery, cfg = this.igniteConfigurationBean(), discoSpi = this.discoveryConfigurationBean(discovery)) {
+ discoSpi.stringProperty('localAddress')
+ .intProperty('localPort')
+ .intProperty('localPortRange')
+ .emptyBeanProperty('addressResolver')
+ .intProperty('socketTimeout')
+ .intProperty('ackTimeout')
+ .intProperty('maxAckTimeout')
+ .intProperty('networkTimeout')
+ .intProperty('joinTimeout')
+ .intProperty('threadPriority')
+ .intProperty('heartbeatFrequency')
+ .intProperty('maxMissedHeartbeats')
+ .intProperty('maxMissedClientHeartbeats')
+ .intProperty('topHistorySize')
+ .emptyBeanProperty('listener')
+ .emptyBeanProperty('dataExchange')
+ .emptyBeanProperty('metricsProvider')
+ .intProperty('reconnectCount')
+ .intProperty('statisticsPrintFrequency')
+ .intProperty('ipFinderCleanFrequency')
+ .emptyBeanProperty('authenticator')
+ .intProperty('forceServerMode')
+ .intProperty('clientReconnectDisabled');
+
+ if (discoSpi.nonEmpty())
+ cfg.beanProperty('discoverySpi', discoSpi);
+
+ return discoSpi;
+ }
- colSpi.intProperty('parallelJobsNumber')
- .intProperty('waitingJobsNumber');
+ // Generate events group.
+ static clusterEvents(cluster, cfg = this.igniteConfigurationBean(cluster)) {
+ const eventStorage = cluster.eventStorage;
- break;
- case 'PriorityQueue':
- colSpi = new Bean('org.apache.ignite.spi.collision.priorityqueue.PriorityQueueCollisionSpi',
- 'colSpi', collision.PriorityQueue, clusterDflts.collision.PriorityQueue);
-
- colSpi.intProperty('parallelJobsNumber')
- .intProperty('waitingJobsNumber')
- .intProperty('priorityAttributeKey')
- .intProperty('jobPriorityAttributeKey')
- .intProperty('defaultPriority')
- .intProperty('starvationIncrement')
- .boolProperty('starvationPreventionEnabled');
+ let eventStorageBean = null;
- break;
- case 'Custom':
- if (_.nonNil(_.get(collision, 'Custom.class')))
- colSpi = new EmptyBean(collision.Custom.class);
+ switch (_.get(eventStorage, 'kind')) {
+ case 'Memory':
+ eventStorageBean = new Bean('org.apache.ignite.spi.eventstorage.memory.MemoryEventStorageSpi', 'eventStorage', eventStorage.Memory, clusterDflts.eventStorage.Memory);
- break;
- default:
- return cfg;
- }
+ eventStorageBean.intProperty('expireAgeMs')
+ .intProperty('expireCount')
+ .emptyBeanProperty('filter');
- if (_.nonNil(colSpi))
- cfg.beanProperty('collisionSpi', colSpi);
+ break;
- return cfg;
- }
+ case 'Custom':
+ const className = _.get(eventStorage, 'Custom.className');
- // Generate communication group.
- static clusterCommunication(cluster, cfg = this.igniteConfigurationBean(cluster)) {
- const commSpi = new Bean('org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi', 'communicationSpi',
- cluster.communication, clusterDflts.communication);
+ if (className)
+ eventStorageBean = new EmptyBean(className);
- commSpi.emptyBeanProperty('listener')
- .stringProperty('localAddress')
- .intProperty('localPort')
- .intProperty('localPortRange')
- .intProperty('sharedMemoryPort')
- .intProperty('directBuffer')
- .intProperty('directSendBuffer')
- .intProperty('idleConnectionTimeout')
- .intProperty('connectTimeout')
- .intProperty('maxConnectTimeout')
- .intProperty('reconnectCount')
- .intProperty('socketSendBuffer')
- .intProperty('socketReceiveBuffer')
- .intProperty('messageQueueLimit')
- .intProperty('slowClientQueueLimit')
- .intProperty('tcpNoDelay')
- .intProperty('ackSendThreshold')
- .intProperty('unacknowledgedMessagesBufferSize')
- .intProperty('socketWriteTimeout')
- .intProperty('selectorsCount')
- .emptyBeanProperty('addressResolver');
-
- if (commSpi.nonEmpty())
- cfg.beanProperty('communicationSpi', commSpi);
-
- cfg.intProperty('networkTimeout')
- .intProperty('networkSendRetryDelay')
- .intProperty('networkSendRetryCount')
- .intProperty('discoveryStartupDelay');
+ break;
- return cfg;
+ default:
+ // No-op.
}
- // Generate REST access configuration.
- static clusterConnector(connector, cfg = this.igniteConfigurationBean()) {
- const connCfg = new Bean('org.apache.ignite.configuration.ConnectorConfiguration',
- 'connectorConfiguration', connector, clusterDflts.connector);
-
- if (connCfg.valueOf('enabled')) {
- connCfg.pathProperty('jettyPath')
- .stringProperty('host')
- .intProperty('port')
- .intProperty('portRange')
- .intProperty('idleTimeout')
- .intProperty('idleQueryCursorTimeout')
- .intProperty('idleQueryCursorCheckFrequency')
- .intProperty('receiveBufferSize')
- .intProperty('sendBufferSize')
- .intProperty('sendQueueLimit')
- .intProperty('directBuffer')
- .intProperty('noDelay')
- .intProperty('selectorCount')
- .intProperty('threadPoolSize')
- .emptyBeanProperty('messageInterceptor')
- .stringProperty('secretKey');
-
- if (connCfg.valueOf('sslEnabled')) {
- connCfg.intProperty('sslClientAuth')
- .emptyBeanProperty('sslFactory');
- }
-
- if (connCfg.nonEmpty())
- cfg.beanProperty('connectorConfiguration', connCfg);
- }
+ if (eventStorageBean && eventStorageBean.nonEmpty())
+ cfg.beanProperty('eventStorageSpi', eventStorageBean);
- return cfg;
- }
+ if (_.nonEmpty(cluster.includeEventTypes))
+ cfg.eventTypes('evts', 'includeEventTypes', cluster.includeEventTypes);
- // Generate deployment group.
- static clusterDeployment(cluster, cfg = this.igniteConfigurationBean(cluster)) {
- cfg.enumProperty('deploymentMode')
- .boolProperty('peerClassLoadingEnabled');
+ return cfg;
+ }
- if (cfg.valueOf('peerClassLoadingEnabled')) {
- cfg.intProperty('peerClassLoadingMissedResourcesCacheSize')
- .intProperty('peerClassLoadingThreadPoolSize')
- .varArgProperty('p2pLocClsPathExcl', 'peerClassLoadingLocalClassPathExclude',
- cluster.peerClassLoadingLocalClassPathExclude);
- }
+ // Generate failover group.
+ static clusterFailover(cluster, cfg = this.igniteConfigurationBean(cluster)) {
+ const spis = [];
- return cfg;
- }
+ _.forEach(cluster.failoverSpi, (spi) => {
+ let failoverSpi;
- // Generate discovery group.
- static clusterDiscovery(discovery, cfg = this.igniteConfigurationBean(), discoSpi = this.discoveryConfigurationBean(discovery)) {
- discoSpi.stringProperty('localAddress')
- .intProperty('localPort')
- .intProperty('localPortRange')
- .emptyBeanProperty('addressResolver')
- .intProperty('socketTimeout')
- .intProperty('ackTimeout')
- .intProperty('maxAckTimeout')
- .intProperty('networkTimeout')
- .intProperty('joinTimeout')
- .intProperty('threadPriority')
- .intProperty('heartbeatFrequency')
- .intProperty('maxMissedHeartbeats')
- .intProperty('maxMissedClientHeartbeats')
- .intProperty('topHistorySize')
- .emptyBeanProperty('listener')
- .emptyBeanProperty('dataExchange')
- .emptyBeanProperty('metricsProvider')
- .intProperty('reconnectCount')
- .intProperty('statisticsPrintFrequency')
- .intProperty('ipFinderCleanFrequency')
- .emptyBeanProperty('authenticator')
- .intProperty('forceServerMode')
- .intProperty('clientReconnectDisabled');
-
- if (discoSpi.nonEmpty())
- cfg.beanProperty('discoverySpi', discoSpi);
-
- return discoSpi;
- }
+ switch (_.get(spi, 'kind')) {
+ case 'JobStealing':
+ failoverSpi = new Bean('org.apache.ignite.spi.failover.jobstealing.JobStealingFailoverSpi',
+ 'failoverSpi', spi.JobStealing, clusterDflts.failoverSpi.JobStealing);
- // Generate events group.
- static clusterEvents(cluster, cfg = this.igniteConfigurationBean(cluster)) {
- const eventStorage = cluster.eventStorage;
+ failoverSpi.intProperty('maximumFailoverAttempts');
- let eventStorageBean = null;
+ break;
+ case 'Never':
+ failoverSpi = new Bean('org.apache.ignite.spi.failover.never.NeverFailoverSpi',
+ 'failoverSpi', spi.Never);
- switch (_.get(eventStorage, 'kind')) {
- case 'Memory':
- eventStorageBean = new Bean('org.apache.ignite.spi.eventstorage.memory.MemoryEventStorageSpi', 'eventStorage', eventStorage.Memory, clusterDflts.eventStorage.Memory);
+ break;
+ case 'Always':
+ failoverSpi = new Bean('org.apache.ignite.spi.failover.always.AlwaysFailoverSpi',
+ 'failoverSpi', spi.Always, clusterDflts.failoverSpi.Always);
- eventStorageBean.intProperty('expireAgeMs')
- .intProperty('expireCount')
- .emptyBeanProperty('filter');
+ failoverSpi.intProperty('maximumFailoverAttempts');
break;
-
case 'Custom':
- const className = _.get(eventStorage, 'Custom.className');
+ const className = _.get(spi, 'Custom.class');
if (className)
- eventStorageBean = new EmptyBean(className);
+ failoverSpi = new EmptyBean(className);
break;
-
default:
// No-op.
}
- if (eventStorageBean && eventStorageBean.nonEmpty())
- cfg.beanProperty('eventStorageSpi', eventStorageBean);
-
- if (_.nonEmpty(cluster.includeEventTypes))
- cfg.eventTypes('evts', 'includeEventTypes', cluster.includeEventTypes);
-
- return cfg;
- }
-
- // Generate failover group.
- static clusterFailover(cluster, cfg = this.igniteConfigurationBean(cluster)) {
- const spis = [];
-
- _.forEach(cluster.failoverSpi, (spi) => {
- let failoverSpi;
+ if (failoverSpi)
+ spis.push(failoverSpi);
+ });
- switch (_.get(spi, 'kind')) {
- case 'JobStealing':
- failoverSpi = new Bean('org.apache.ignite.spi.failover.jobstealing.JobStealingFailoverSpi',
- 'failoverSpi', spi.JobStealing, clusterDflts.failoverSpi.JobStealing);
+ if (spis.length)
+ cfg.arrayProperty('failoverSpi', 'failoverSpi', spis, 'org.apache.ignite.spi.failover.FailoverSpi');
- failoverSpi.intProperty('maximumFailoverAttempts');
-
- break;
- case 'Never':
- failoverSpi = new Bean('org.apache.ignite.spi.failover.never.NeverFailoverSpi',
- 'failoverSpi', spi.Never);
-
- break;
- case 'Always':
- failoverSpi = new Bean('org.apache.ignite.spi.failover.always.AlwaysFailoverSpi',
- 'failoverSpi', spi.Always, clusterDflts.failoverSpi.Always);
+ return cfg;
+ }
- failoverSpi.intProperty('maximumFailoverAttempts');
+ // Generate load balancing configuration group.
+ static clusterLoadBalancing(cluster, cfg = this.igniteConfigurationBean(cluster)) {
+ const spis = [];
- break;
- case 'Custom':
- const className = _.get(spi, 'Custom.class');
+ _.forEach(cluster.loadBalancingSpi, (spi) => {
+ let loadBalancingSpi;
- if (className)
- failoverSpi = new EmptyBean(className);
+ switch (_.get(spi, 'kind')) {
+ case 'RoundRobin':
+ loadBalancingSpi = new Bean('org.apache.ignite.spi.loadbalancing.roundrobin.RoundRobinLoadBalancingSpi', 'loadBalancingSpiRR', spi.RoundRobin, clusterDflts.loadBalancingSpi.RoundRobin);
- break;
- default:
- // No-op.
- }
+ loadBalancingSpi.boolProperty('perTask');
- if (failoverSpi)
- spis.push(failoverSpi);
- });
+ break;
+ case 'Adaptive':
+ loadBalancingSpi = new Bean('org.apache.ignite.spi.loadbalancing.adaptive.AdaptiveLoadBalancingSpi', 'loadBalancingSpiAdaptive', spi.Adaptive);
- if (spis.length)
- cfg.arrayProperty('failoverSpi', 'failoverSpi', spis, 'org.apache.ignite.spi.failover.FailoverSpi');
+ let probeBean;
- return cfg;
- }
+ switch (_.get(spi, 'Adaptive.loadProbe.kind')) {
+ case 'Job':
+ probeBean = new Bean('org.apache.ignite.spi.loadbalancing.adaptive.AdaptiveJobCountLoadProbe', 'jobProbe', spi.Adaptive.loadProbe.Job, clusterDflts.loadBalancingSpi.Adaptive.loadProbe.Job);
- // Generate load balancing configuration group.
- static clusterLoadBalancing(cluster, cfg = this.igniteConfigurationBean(cluster)) {
- const spis = [];
+ probeBean.boolProperty('useAverage');
- _.forEach(cluster.loadBalancingSpi, (spi) => {
- let loadBalancingSpi;
+ break;
+ case 'CPU':
+ probeBean = new Bean('org.apache.ignite.spi.loadbalancing.adaptive.AdaptiveCpuLoadProbe', 'cpuProbe', spi.Adaptive.loadProbe.CPU, clusterDflts.loadBalancingSpi.Adaptive
<TRUNCATED>