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 2018/04/12 04:12:01 UTC
[17/17] ignite git commit: IGNITE-7996 Merge with master.
IGNITE-7996 Merge with master.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e333f306
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e333f306
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e333f306
Branch: refs/heads/master
Commit: e333f306d0f32d4c02057fff4238081f25775cf1
Parents: d1be9b8 d02e87b
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Thu Apr 12 11:07:02 2018 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Thu Apr 12 11:10:27 2018 +0700
----------------------------------------------------------------------
modules/web-console/frontend/app/app.js | 2 -
.../components/cache-edit-form/template.tpl.pug | 22 +-
.../cache-edit-form/templates/affinity.pug | 86 +++++
.../cache-edit-form/templates/concurrency.pug | 64 ++++
.../cache-edit-form/templates/general.pug | 113 +++++++
.../cache-edit-form/templates/memory.pug | 158 ++++++++++
.../templates/near-cache-client.pug | 50 +++
.../templates/near-cache-server.pug | 51 +++
.../cache-edit-form/templates/node-filter.pug | 53 ++++
.../cache-edit-form/templates/query.pug | 114 +++++++
.../cache-edit-form/templates/rebalance.pug | 66 ++++
.../cache-edit-form/templates/statistics.pug | 34 ++
.../cache-edit-form/templates/store.pug | 310 +++++++++++++++++++
.../cluster-edit-form/template.tpl.pug | 62 ++--
.../cluster-edit-form/templates/atomic.pug | 75 +++++
.../cluster-edit-form/templates/attributes.pug | 40 +++
.../cluster-edit-form/templates/binary.pug | 80 +++++
.../templates/cache-key-cfg.pug | 63 ++++
.../cluster-edit-form/templates/checkpoint.pug | 82 +++++
.../templates/checkpoint/fs.pug | 36 +++
.../templates/checkpoint/jdbc.pug | 47 +++
.../templates/checkpoint/s3.pug | 204 ++++++++++++
.../templates/client-connector.pug | 76 +++++
.../cluster-edit-form/templates/collision.pug | 58 ++++
.../templates/collision/custom.pug | 23 ++
.../templates/collision/fifo-queue.pug | 26 ++
.../templates/collision/job-stealing.pug | 51 +++
.../templates/collision/priority-queue.pug | 41 +++
.../templates/communication.pug | 134 ++++++++
.../cluster-edit-form/templates/connector.pug | 100 ++++++
.../templates/data-storage.pug | 301 ++++++++++++++++++
.../cluster-edit-form/templates/deployment.pug | 192 ++++++++++++
.../cluster-edit-form/templates/discovery.pug | 97 ++++++
.../cluster-edit-form/templates/events.pug | 66 ++++
.../cluster-edit-form/templates/failover.pug | 89 ++++++
.../cluster-edit-form/templates/general.pug | 89 ++++++
.../templates/general/discovery/cloud.pug | 78 +++++
.../templates/general/discovery/google.pug | 38 +++
.../templates/general/discovery/jdbc.pug | 35 +++
.../templates/general/discovery/kubernetes.pug | 38 +++
.../templates/general/discovery/multicast.pug | 63 ++++
.../templates/general/discovery/s3.pug | 38 +++
.../templates/general/discovery/shared.pug | 24 ++
.../templates/general/discovery/vm.pug | 55 ++++
.../templates/general/discovery/zookeeper.pug | 84 +++++
.../retrypolicy/bounded-exponential-backoff.pug | 26 ++
.../discovery/zookeeper/retrypolicy/custom.pug | 25 ++
.../retrypolicy/exponential-backoff.pug | 26 ++
.../discovery/zookeeper/retrypolicy/forever.pug | 23 ++
.../discovery/zookeeper/retrypolicy/n-times.pug | 24 ++
.../zookeeper/retrypolicy/one-time.pug | 23 ++
.../zookeeper/retrypolicy/until-elapsed.pug | 24 ++
.../cluster-edit-form/templates/hadoop.pug | 87 ++++++
.../cluster-edit-form/templates/igfs.pug | 34 ++
.../templates/load-balancing.pug | 115 +++++++
.../cluster-edit-form/templates/logger.pug | 60 ++++
.../templates/logger/custom.pug | 24 ++
.../templates/logger/log4j.pug | 49 +++
.../templates/logger/log4j2.pug | 38 +++
.../cluster-edit-form/templates/marshaller.pug | 75 +++++
.../cluster-edit-form/templates/memory.pug | 195 ++++++++++++
.../cluster-edit-form/templates/metrics.pug | 46 +++
.../cluster-edit-form/templates/misc.pug | 58 ++++
.../cluster-edit-form/templates/odbc.pug | 70 +++++
.../cluster-edit-form/templates/persistence.pug | 82 +++++
.../cluster-edit-form/templates/service.pug | 89 ++++++
.../templates/sql-connector.pug | 58 ++++
.../cluster-edit-form/templates/ssl.pug | 89 ++++++
.../cluster-edit-form/templates/swap.pug | 74 +++++
.../cluster-edit-form/templates/thread.pug | 144 +++++++++
.../cluster-edit-form/templates/time.pug | 44 +++
.../templates/transactions.pug | 65 ++++
.../components/igfs-edit-form/template.tpl.pug | 12 +-
.../igfs-edit-form/templates/dual.pug | 42 +++
.../igfs-edit-form/templates/fragmentizer.pug | 37 +++
.../igfs-edit-form/templates/general.pug | 72 +++++
.../components/igfs-edit-form/templates/ipc.pug | 55 ++++
.../igfs-edit-form/templates/misc.pug | 110 +++++++
.../igfs-edit-form/templates/secondary.pug | 55 ++++
.../components/model-edit-form/template.tpl.pug | 6 +-
.../model-edit-form/templates/general.pug | 57 ++++
.../model-edit-form/templates/query.pug | 255 +++++++++++++++
.../model-edit-form/templates/store.pug | 123 ++++++++
.../page-configure-basic/template.pug | 18 +-
.../components/preview-panel/directive.js | 246 +++++++++++++++
.../components/preview-panel/index.js | 23 ++
.../app/components/page-configure/index.js | 25 +-
.../services/ConfigurationResource.js | 49 +++
.../page-configure/services/SummaryZipper.js | 44 +++
.../page-configure/services/summary.worker.js | 147 +++++++++
.../app/components/page-configure/states.js | 270 ++++++++++++++++
.../app/modules/states/configuration.state.js | 297 ------------------
.../configuration/Configuration.resource.js | 42 ---
.../states/configuration/caches/affinity.pug | 86 -----
.../states/configuration/caches/concurrency.pug | 64 ----
.../states/configuration/caches/general.pug | 113 -------
.../states/configuration/caches/memory.pug | 158 ----------
.../configuration/caches/near-cache-client.pug | 50 ---
.../configuration/caches/near-cache-server.pug | 51 ---
.../states/configuration/caches/node-filter.pug | 53 ----
.../states/configuration/caches/query.pug | 114 -------
.../states/configuration/caches/rebalance.pug | 66 ----
.../states/configuration/caches/statistics.pug | 34 --
.../states/configuration/caches/store.pug | 310 -------------------
.../states/configuration/clusters/atomic.pug | 75 -----
.../configuration/clusters/attributes.pug | 40 ---
.../states/configuration/clusters/binary.pug | 80 -----
.../configuration/clusters/cache-key-cfg.pug | 63 ----
.../configuration/clusters/checkpoint.pug | 82 -----
.../configuration/clusters/checkpoint/fs.pug | 36 ---
.../configuration/clusters/checkpoint/jdbc.pug | 47 ---
.../configuration/clusters/checkpoint/s3.pug | 204 ------------
.../configuration/clusters/client-connector.pug | 76 -----
.../states/configuration/clusters/collision.pug | 58 ----
.../configuration/clusters/collision/custom.pug | 23 --
.../clusters/collision/fifo-queue.pug | 26 --
.../clusters/collision/job-stealing.pug | 51 ---
.../clusters/collision/priority-queue.pug | 41 ---
.../configuration/clusters/communication.pug | 134 --------
.../states/configuration/clusters/connector.pug | 100 ------
.../configuration/clusters/data-storage.pug | 301 ------------------
.../configuration/clusters/deployment.pug | 192 ------------
.../states/configuration/clusters/discovery.pug | 97 ------
.../states/configuration/clusters/events.pug | 66 ----
.../states/configuration/clusters/failover.pug | 89 ------
.../states/configuration/clusters/general.pug | 89 ------
.../clusters/general/discovery/cloud.pug | 78 -----
.../clusters/general/discovery/google.pug | 38 ---
.../clusters/general/discovery/jdbc.pug | 35 ---
.../clusters/general/discovery/kubernetes.pug | 38 ---
.../clusters/general/discovery/multicast.pug | 63 ----
.../clusters/general/discovery/s3.pug | 38 ---
.../clusters/general/discovery/shared.pug | 24 --
.../clusters/general/discovery/vm.pug | 55 ----
.../clusters/general/discovery/zookeeper.pug | 84 -----
.../retrypolicy/bounded-exponential-backoff.pug | 26 --
.../discovery/zookeeper/retrypolicy/custom.pug | 25 --
.../retrypolicy/exponential-backoff.pug | 26 --
.../discovery/zookeeper/retrypolicy/forever.pug | 23 --
.../discovery/zookeeper/retrypolicy/n-times.pug | 24 --
.../zookeeper/retrypolicy/one-time.pug | 23 --
.../zookeeper/retrypolicy/until-elapsed.pug | 24 --
.../states/configuration/clusters/hadoop.pug | 87 ------
.../states/configuration/clusters/igfs.pug | 34 --
.../configuration/clusters/load-balancing.pug | 115 -------
.../states/configuration/clusters/logger.pug | 60 ----
.../configuration/clusters/logger/custom.pug | 24 --
.../configuration/clusters/logger/log4j.pug | 49 ---
.../configuration/clusters/logger/log4j2.pug | 38 ---
.../configuration/clusters/marshaller.pug | 75 -----
.../states/configuration/clusters/memory.pug | 195 ------------
.../states/configuration/clusters/metrics.pug | 46 ---
.../states/configuration/clusters/misc.pug | 58 ----
.../states/configuration/clusters/odbc.pug | 70 -----
.../configuration/clusters/persistence.pug | 82 -----
.../states/configuration/clusters/service.pug | 89 ------
.../configuration/clusters/sql-connector.pug | 58 ----
.../states/configuration/clusters/ssl.pug | 89 ------
.../states/configuration/clusters/swap.pug | 74 -----
.../states/configuration/clusters/thread.pug | 144 ---------
.../states/configuration/clusters/time.pug | 44 ---
.../configuration/clusters/transactions.pug | 65 ----
.../states/configuration/domains/general.pug | 57 ----
.../states/configuration/domains/query.pug | 255 ---------------
.../states/configuration/domains/store.pug | 123 --------
.../modules/states/configuration/igfs/dual.pug | 42 ---
.../states/configuration/igfs/fragmentizer.pug | 37 ---
.../states/configuration/igfs/general.pug | 72 -----
.../modules/states/configuration/igfs/ipc.pug | 55 ----
.../modules/states/configuration/igfs/misc.pug | 110 -------
.../states/configuration/igfs/secondary.pug | 55 ----
.../configuration/preview-panel.directive.js | 239 --------------
.../summary/summary-zipper.service.js | 39 ---
.../configuration/summary/summary.worker.js | 147 ---------
174 files changed, 6858 insertions(+), 6822 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/e333f306/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/communication.pug
----------------------------------------------------------------------
diff --cc modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/communication.pug
index 0000000,bd8971a..8b43521
mode 000000,100644..100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/communication.pug
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/communication.pug
@@@ -1,0 -1,134 +1,134 @@@
+ //-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ include /app/helpers/jade/mixins
+
+ -var form = 'communication'
+ -var model = '$ctrl.clonedCluster'
+ -var communication = model + '.communication'
+
+ panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+ panel-title Communication
+ panel-description
+ | Configuration of communication with other nodes by TCP/IP.
+ | Provide basic plumbing to send and receive grid messages and is utilized for all distributed grid operations.
+ | #[a.link-success(href="https://apacheignite.readme.io/docs/network-config" target="_blank") More info]
+ panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+ .pca-form-column-6.pc-form-grid-row
+ .pc-form-grid-col-30
+ +number('Timeout:', `${model}.networkTimeout`, '"commNetworkTimeout"', 'true', '5000', '1', 'Maximum timeout in milliseconds for network requests')
+ .pc-form-grid-col-30
+ +number('Send retry delay:', `${model}.networkSendRetryDelay`, '"networkSendRetryDelay"', 'true', '1000', '1', 'Interval in milliseconds between message send retries')
+ .pc-form-grid-col-30
+ +number('Send retry count:', `${model}.networkSendRetryCount`, '"networkSendRetryCount"', 'true', '3', '1', 'Message send retries count')
+ .pc-form-grid-col-30(ng-if='$ctrl.available(["1.0.0", "2.3.0"])')
+ +number('Discovery startup delay:', `${model}.discoveryStartupDelay`, '"discoveryStartupDelay"', 'true', '60000', '1', 'This value is used to expire messages from waiting list whenever node discovery discrepancies happen')
+ .pc-form-grid-col-60
+ +java-class('Communication listener:', `${communication}.listener`, '"comListener"', 'true', 'false', 'Listener of communication events')
+ .pc-form-grid-col-30
+ +text-ip-address('Local IP address:', `${communication}.localAddress`, '"comLocalAddress"', 'true', '0.0.0.0',
+ 'Local host address for socket binding<br/>\
+ If not specified use all available addres on local host')
+ .pc-form-grid-col-30
+ +number-min-max('Local port:', `${communication}.localPort`, '"comLocalPort"', 'true', '47100', '1024', '65535', 'Local port for socket binding')
+ .pc-form-grid-col-30
+ +number('Local port range:', `${communication}.localPortRange`, '"comLocalPortRange"', 'true', '100', '1', 'Local port range for local host ports')
+ .pc-form-grid-col-30
+ +sane-ignite-form-field-number({
+ label: 'Shared memory port:',
+ model: `${communication}.sharedMemoryPort`,
+ name: '"sharedMemoryPort"',
+ placeholder: '{{ ::$ctrl.Clusters.sharedMemoryPort.default }}',
+ min: '{{ ::$ctrl.Clusters.sharedMemoryPort.min }}',
+ max: '{{ ::$ctrl.Clusters.sharedMemoryPort.max }}',
+ tip: `Local port to accept shared memory connections<br/>If set to <b>-1</b> shared memory communication will be disabled`
+ })(
+ pc-not-in-collection='::$ctrl.Clusters.sharedMemoryPort.invalidValues'
+ )
+ +form-field-feedback('"sharedMemoryPort"', 'notInCollection', 'Shared memory port should be more than "{{ ::$ctrl.Clusters.sharedMemoryPort.invalidValues[0] }}" or equal to "{{ ::$ctrl.Clusters.sharedMemoryPort.min }}"')
+ .pc-form-grid-col-30
+ +number('Idle connection timeout:', `${communication}.idleConnectionTimeout`, '"idleConnectionTimeout"', 'true', '30000', '1',
+ 'Maximum idle connection timeout upon which a connection to client will be closed')
+ .pc-form-grid-col-30
+ +number('Connect timeout:', `${communication}.connectTimeout`, '"connectTimeout"', 'true', '5000', '0', 'Connect timeout used when establishing connection with remote nodes')
+ .pc-form-grid-col-30
+ +number('Max. connect timeout:', `${communication}.maxConnectTimeout`, '"maxConnectTimeout"', 'true', '600000', '0', 'Maximum connect timeout')
+ .pc-form-grid-col-30
+ +number('Reconnect count:', `${communication}.reconnectCount`, '"comReconnectCount"', 'true', '10', '1',
+ 'Maximum number of reconnect attempts used when establishing connection with remote nodes')
+ .pc-form-grid-col-30
+ +number('Socket send buffer:', `${communication}.socketSendBuffer`, '"socketSendBuffer"', 'true', '32768', '0', 'Send buffer size for sockets created or accepted by this SPI')
+ .pc-form-grid-col-30
+ +number('Socket receive buffer:', `${communication}.socketReceiveBuffer`, '"socketReceiveBuffer"', 'true', '32768', '0', 'Receive buffer size for sockets created or accepted by this SPI')
+ .pc-form-grid-col-30
+ +number('Slow client queue limit:', `${communication}.slowClientQueueLimit`, '"slowClientQueueLimit"', 'true', '0', '0', 'Slow client queue limit')
+ .pc-form-grid-col-30
+ +sane-ignite-form-field-number({
+ label: 'Ack send threshold:',
+ model: `${communication}.ackSendThreshold`,
+ name: '"ackSendThreshold"',
+ placeholder: '{{ ::$ctrl.Clusters.ackSendThreshold.default }}',
+ min: '{{ ::$ctrl.Clusters.ackSendThreshold.min }}',
+ tip: 'Number of received messages per connection to node after which acknowledgment message is sent'
+ })
+ .pc-form-grid-col-30
+ +sane-ignite-form-field-number({
+ label: 'Message queue limit:',
+ model: `${communication}.messageQueueLimit`,
+ name: '"messageQueueLimit"',
+ placeholder: '{{ ::$ctrl.Clusters.messageQueueLimit.default }}',
+ min: '{{ ::$ctrl.Clusters.messageQueueLimit.min }}',
+ tip: 'Message queue limit for incoming and outgoing messages'
+ })
+ .pc-form-grid-col-30
++ //- allowInvalid: true prevents from infinite digest loop when old value was 0 and becomes less than allowed minimum
+ +sane-ignite-form-field-number({
+ label: 'Unacknowledged messages:',
+ model: `${communication}.unacknowledgedMessagesBufferSize`,
+ name: '"unacknowledgedMessagesBufferSize"',
+ placeholder: '{{ ::$ctrl.Clusters.unacknowledgedMessagesBufferSize.default }}',
+ min: `{{ $ctrl.Clusters.unacknowledgedMessagesBufferSize.min(
+ ${communication}.unacknowledgedMessagesBufferSize,
+ ${communication}.messageQueueLimit,
+ ${communication}.ackSendThreshold
+ ) }}`,
+ tip: `Maximum number of stored unacknowledged messages per connection to node<br/>
+ If specified non zero value it should be
+ <ul>
+ <li>At least ack send threshold * {{ ::$ctrl.Clusters.unacknowledgedMessagesBufferSize.validRatio }}</li>
+ <li>At least message queue limit * {{ ::$ctrl.Clusters.unacknowledgedMessagesBufferSize.validRatio }}</li>
+ </ul>`
+ })(
- //- allowInvalid: true prevents from infinite digest loop when old value was 0 and becomes less than allowed minimum
+ ng-model-options=`{
+ allowInvalid: true
+ }`
+ )
+ .pc-form-grid-col-30
+ +number('Socket write timeout:', `${communication}.socketWriteTimeout`, '"socketWriteTimeout"', 'true', '2000', '0', 'Socket write timeout')
+ .pc-form-grid-col-30
+ +number('Selectors count:', `${communication}.selectorsCount`, '"selectorsCount"', 'true', 'min(4, availableProcessors)', '1', 'Count of selectors te be used in TCP server')
+ .pc-form-grid-col-60
+ +java-class('Address resolver:', `${communication}.addressResolver`, '"comAddressResolver"', 'true', 'false', 'Provides resolution between external and internal addresses')
+ .pc-form-grid-col-60
+ +checkbox('Direct buffer', `${communication}.directBuffer`, '"directBuffer"',
+ 'If value is true, then SPI will use ByteBuffer.allocateDirect(int) call<br/>\
+ Otherwise, SPI will use ByteBuffer.allocate(int) call')
+ .pc-form-grid-col-60
+ +checkbox('Direct send buffer', `${communication}.directSendBuffer`, '"directSendBuffer"', 'Flag defining whether direct send buffer should be used')
+ .pc-form-grid-col-60
+ +checkbox('TCP_NODELAY option', `${communication}.tcpNoDelay`, '"tcpNoDelay"', 'Value for TCP_NODELAY socket option')
+ .pca-form-column-6
+ +preview-xml-java(model, 'clusterCommunication')
http://git-wip-us.apache.org/repos/asf/ignite/blob/e333f306/modules/web-console/frontend/app/components/page-configure/services/summary.worker.js
----------------------------------------------------------------------
diff --cc modules/web-console/frontend/app/components/page-configure/services/summary.worker.js
index 0000000,c80d698..b3b0bce
mode 000000,100644..100644
--- a/modules/web-console/frontend/app/components/page-configure/services/summary.worker.js
+++ b/modules/web-console/frontend/app/components/page-configure/services/summary.worker.js
@@@ -1,0 -1,147 +1,147 @@@
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ import JSZip from 'jszip';
+
+ import IgniteMavenGenerator from 'app/modules/configuration/generator/Maven.service';
+ import IgniteDockerGenerator from 'app/modules/configuration/generator/Docker.service';
+ import IgniteReadmeGenerator from 'app/modules/configuration/generator/Readme.service';
+ import IgnitePropertiesGenerator from 'app/modules/configuration/generator/Properties.service';
+ import IgniteConfigurationGenerator from 'app/modules/configuration/generator/ConfigurationGenerator';
+
+ import IgniteJavaTransformer from 'app/modules/configuration/generator/JavaTransformer.service';
+ import IgniteSpringTransformer from 'app/modules/configuration/generator/SpringTransformer.service';
+
+ import {nonEmpty, nonNil} from 'app/utils/lodashMixins';
+ import get from 'lodash/get';
+ import filter from 'lodash/filter';
+ import isEmpty from 'lodash/isEmpty';
+
+ const maven = new IgniteMavenGenerator();
+ const docker = new IgniteDockerGenerator();
+ const readme = new IgniteReadmeGenerator();
+ const properties = new IgnitePropertiesGenerator();
+
+ const java = IgniteJavaTransformer;
+ const spring = IgniteSpringTransformer;
+
+ const generator = IgniteConfigurationGenerator;
+
+ const escapeFileName = (name) => name.replace(/[\\\/*\"\[\],\.:;|=<>?]/g, '-').replace(/ /g, '_');
+
+ const kubernetesConfig = (cluster) => {
+ if (!cluster.discovery.Kubernetes)
+ cluster.discovery.Kubernetes = { serviceName: 'ignite' };
+
+ return `apiVersion: v1\n\
+ kind: Service\n\
+ metadata:\n\
+ # Name of Ignite Service used by Kubernetes IP finder for IP addresses lookup.\n\
+ name: ${ cluster.discovery.Kubernetes.serviceName || 'ignite' }\n\
+ spec:\n\
+ clusterIP: None # custom value.\n\
+ ports:\n\
+ - port: 9042 # custom value.\n\
+ selector:\n\
+ # Must be equal to one of the labels set in Ignite pods'\n\
+ # deployement configuration.\n\
+ app: ${ cluster.discovery.Kubernetes.serviceName || 'ignite' }`;
+ };
+
+ // eslint-disable-next-line no-undef
+ onmessage = function(e) {
+ const {cluster, data, demo, targetVer} = e.data;
+
+ const zip = new JSZip();
+
+ if (!data.docker)
+ data.docker = docker.generate(cluster, targetVer);
+
+ zip.file('Dockerfile', data.docker);
+ zip.file('.dockerignore', docker.ignoreFile());
+
+ const cfg = generator.igniteConfiguration(cluster, targetVer, false);
+ const clientCfg = generator.igniteConfiguration(cluster, targetVer, true);
+ const clientNearCaches = filter(cluster.caches, (cache) =>
+ cache.cacheMode === 'PARTITIONED' && get(cache, 'clientNearConfiguration.enabled'));
+
+ const secProps = properties.generate(cfg);
+
+ if (secProps)
+ zip.file('src/main/resources/secret.properties', secProps);
+
+ const srcPath = 'src/main/java';
+ const resourcesPath = 'src/main/resources';
+
+ const serverXml = `${escapeFileName(cluster.name)}-server.xml`;
+ const clientXml = `${escapeFileName(cluster.name)}-client.xml`;
+
+ const metaPath = `${resourcesPath}/META-INF`;
+
+ if (cluster.discovery.kind === 'Kubernetes')
+ zip.file(`${metaPath}/ignite-service.yaml`, kubernetesConfig(cluster));
+
+ zip.file(`${metaPath}/${serverXml}`, spring.igniteConfiguration(cfg, targetVer).asString());
+ zip.file(`${metaPath}/${clientXml}`, spring.igniteConfiguration(clientCfg, targetVer, clientNearCaches).asString());
+
+ const cfgPath = `${srcPath}/config`;
+
+ zip.file(`${cfgPath}/ServerConfigurationFactory.java`, java.igniteConfiguration(cfg, targetVer, 'config', 'ServerConfigurationFactory').asString());
+ zip.file(`${cfgPath}/ClientConfigurationFactory.java`, java.igniteConfiguration(clientCfg, targetVer, 'config', 'ClientConfigurationFactory', clientNearCaches).asString());
+
+ if (java.isDemoConfigured(cluster, demo)) {
+ zip.file(`${srcPath}/demo/DemoStartup.java`, java.nodeStartup(cluster, 'demo.DemoStartup',
+ 'ServerConfigurationFactory.createConfiguration()', 'config.ServerConfigurationFactory'));
+ }
+
+ // Generate loader for caches with configured store.
- const cachesToLoad = filter(cluster.caches, (cache) => nonNil(cache.cacheStoreFactory));
++ const cachesToLoad = filter(cluster.caches, (cache) => nonNil(_.get(cache, 'cacheStoreFactory.kind')));
+
+ if (nonEmpty(cachesToLoad))
+ zip.file(`${srcPath}/load/LoadCaches.java`, java.loadCaches(cachesToLoad, 'load', 'LoadCaches', `"${clientXml}"`));
+
+ const startupPath = `${srcPath}/startup`;
+
+ zip.file(`${startupPath}/ServerNodeSpringStartup.java`, java.nodeStartup(cluster, 'startup.ServerNodeSpringStartup', `"${serverXml}"`));
+ zip.file(`${startupPath}/ClientNodeSpringStartup.java`, java.nodeStartup(cluster, 'startup.ClientNodeSpringStartup', `"${clientXml}"`));
+
+ zip.file(`${startupPath}/ServerNodeCodeStartup.java`, java.nodeStartup(cluster, 'startup.ServerNodeCodeStartup',
+ 'ServerConfigurationFactory.createConfiguration()', 'config.ServerConfigurationFactory'));
+ zip.file(`${startupPath}/ClientNodeCodeStartup.java`, java.nodeStartup(cluster, 'startup.ClientNodeCodeStartup',
+ 'ClientConfigurationFactory.createConfiguration()', 'config.ClientConfigurationFactory', clientNearCaches));
+
+ zip.file('pom.xml', maven.generate(cluster, targetVer));
+
+ zip.file('README.txt', readme.generate());
+ zip.file('jdbc-drivers/README.txt', readme.generateJDBC());
+
+ if (isEmpty(data.pojos))
+ data.pojos = java.pojos(cluster.caches, true);
+
+ for (const pojo of data.pojos) {
+ if (pojo.keyClass)
+ zip.file(`${srcPath}/${pojo.keyType.replace(/\./g, '/')}.java`, pojo.keyClass);
+
+ zip.file(`${srcPath}/${pojo.valueType.replace(/\./g, '/')}.java`, pojo.valueClass);
+ }
+
+ zip.generateAsync({
+ type: 'blob',
+ compression: 'DEFLATE',
+ mimeType: 'application/octet-stream'
+ }).then((blob) => postMessage(blob));
+ };
http://git-wip-us.apache.org/repos/asf/ignite/blob/e333f306/modules/web-console/frontend/app/components/page-configure/states.js
----------------------------------------------------------------------
diff --cc modules/web-console/frontend/app/components/page-configure/states.js
index 0000000,f8bb4dc..a75e851
mode 000000,100644..100644
--- a/modules/web-console/frontend/app/components/page-configure/states.js
+++ b/modules/web-console/frontend/app/components/page-configure/states.js
@@@ -1,0 -1,273 +1,270 @@@
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
-import angular from 'angular';
-
+ import base2 from 'views/base2.pug';
+ import pageConfigureAdvancedClusterComponent from '../page-configure-advanced/components/page-configure-advanced-cluster/component';
+ import pageConfigureAdvancedModelsComponent from '../page-configure-advanced/components/page-configure-advanced-models/component';
+ import pageConfigureAdvancedCachesComponent from '../page-configure-advanced/components/page-configure-advanced-caches/component';
+ import pageConfigureAdvancedIGFSComponent from '../page-configure-advanced/components/page-configure-advanced-igfs/component';
+
-import get from 'lodash/get';
+ import {Observable} from 'rxjs/Observable';
+
+ const idRegex = `new|[a-z0-9]+`;
+
+ const shortCachesResolve = ['ConfigSelectors', 'ConfigureState', 'ConfigEffects', '$transition$', (ConfigSelectors, ConfigureState, {etp}, $transition$) => {
+ if ($transition$.params().clusterID === 'new') return Promise.resolve();
+ return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
+ .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
+ .switchMap((cluster) => {
+ return etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id});
+ })
+ .toPromise();
+ }];
+
+ function registerStates($stateProvider) {
+ // Setup the states.
+ $stateProvider
+ .state('base.configuration', {
+ abstract: true,
+ permission: 'configuration',
+ url: '/configuration',
+ onEnter: ['ConfigureState', (ConfigureState) => ConfigureState.dispatchAction({type: 'PRELOAD_STATE', state: {}})],
+ views: {
+ '@': {
+ template: base2
+ }
+ },
+ resolve: {
+ _shortClusters: ['ConfigEffects', ({etp}) => {
+ return etp('LOAD_USER_CLUSTERS');
+ }]
+ },
+ resolvePolicy: {
+ async: 'NOWAIT'
+ }
+ })
+ .state('base.configuration.overview', {
+ url: '/overview',
+ component: 'pageConfigureOverview',
+ permission: 'configuration',
+ tfMetaTags: {
+ title: 'Configuration'
+ }
+ })
+ .state('base.configuration.edit', {
+ url: `/{clusterID:${idRegex}}`,
+ permission: 'configuration',
+ component: 'pageConfigure',
+ resolve: {
+ _cluster: ['ConfigEffects', '$transition$', ({etp}, $transition$) => {
+ return $transition$.injector().getAsync('_shortClusters').then(() => {
+ return etp('LOAD_AND_EDIT_CLUSTER', {clusterID: $transition$.params().clusterID});
+ });
+ }]
+ },
+ data: {
+ errorState: 'base.configuration.overview'
+ },
+ redirectTo: ($transition$) => {
+ const [ConfigureState, ConfigSelectors] = ['ConfigureState', 'ConfigSelectors'].map((t) => $transition$.injector().get(t));
+ const waitFor = ['_cluster', '_shortClusters'].map((t) => $transition$.injector().getAsync(t));
+ return Observable.fromPromise(Promise.all(waitFor)).switchMap(() => {
+ return Observable.combineLatest(
+ ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1),
+ ConfigureState.state$.let(ConfigSelectors.selectShortClusters()).take(1)
+ );
+ })
+ .map(([cluster = {caches: []}, clusters]) => {
+ return (clusters.value.size > 10 || cluster.caches.length > 5)
+ ? 'base.configuration.edit.advanced'
+ : 'base.configuration.edit.basic';
+ })
+ .toPromise();
+ },
+ failState: 'signin',
+ tfMetaTags: {
+ title: 'Configuration'
+ }
+ })
+ .state('base.configuration.edit.basic', {
+ url: '/basic',
+ component: 'pageConfigureBasic',
+ permission: 'configuration',
+ resolve: {
+ _shortCaches: shortCachesResolve
+ },
+ resolvePolicy: {
+ async: 'NOWAIT'
+ },
+ tfMetaTags: {
+ title: 'Basic Configuration'
+ }
+ })
+ .state('base.configuration.edit.advanced', {
+ url: '/advanced',
+ component: 'pageConfigureAdvanced',
+ permission: 'configuration',
+ redirectTo: 'base.configuration.edit.advanced.cluster'
+ })
+ .state('base.configuration.edit.advanced.cluster', {
+ url: '/cluster',
+ component: pageConfigureAdvancedClusterComponent.name,
+ permission: 'configuration',
+ resolve: {
+ _shortCaches: shortCachesResolve
+ },
+ resolvePolicy: {
+ async: 'NOWAIT'
+ },
+ tfMetaTags: {
+ title: 'Configure Cluster'
+ }
+ })
+ .state('base.configuration.edit.advanced.caches', {
+ url: '/caches',
+ permission: 'configuration',
+ component: pageConfigureAdvancedCachesComponent.name,
+ resolve: {
+ _shortCachesAndModels: ['ConfigSelectors', 'ConfigureState', 'ConfigEffects', '$transition$', (ConfigSelectors, ConfigureState, {etp}, $transition$) => {
+ if ($transition$.params().clusterID === 'new') return Promise.resolve();
+ return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
+ .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
+ .map((cluster) => {
+ return Promise.all([
+ etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id}),
+ etp('LOAD_SHORT_MODELS', {ids: cluster.models, clusterID: cluster._id}),
+ etp('LOAD_SHORT_IGFSS', {ids: cluster.igfss, clusterID: cluster._id})
+ ]);
+ })
+ .toPromise();
+ }]
+ },
+ resolvePolicy: {
+ async: 'NOWAIT'
+ },
+ tfMetaTags: {
+ title: 'Configure Caches'
+ }
+ })
+ .state('base.configuration.edit.advanced.caches.cache', {
+ url: `/{cacheID:${idRegex}}`,
+ permission: 'configuration',
+ resolve: {
+ _cache: ['ConfigEffects', '$transition$', ({etp}, $transition$) => {
+ const {clusterID, cacheID} = $transition$.params();
+ if (cacheID === 'new') return Promise.resolve();
+ return etp('LOAD_CACHE', {cacheID});
+ }]
+ },
+ data: {
+ errorState: 'base.configuration.edit.advanced.caches'
+ },
+ resolvePolicy: {
+ async: 'NOWAIT'
+ },
+ tfMetaTags: {
+ title: 'Configure Caches'
+ }
+ })
+ .state('base.configuration.edit.advanced.models', {
+ url: '/models',
+ component: pageConfigureAdvancedModelsComponent.name,
+ permission: 'configuration',
+ resolve: {
+ _shortCachesAndModels: ['ConfigSelectors', 'ConfigureState', 'ConfigEffects', '$transition$', (ConfigSelectors, ConfigureState, {etp}, $transition$) => {
+ if ($transition$.params().clusterID === 'new') return Promise.resolve();
+ return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
+ .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
+ .map((cluster) => {
+ return Promise.all([
+ etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id}),
+ etp('LOAD_SHORT_MODELS', {ids: cluster.models, clusterID: cluster._id})
+ ]);
+ })
+ .toPromise();
+ }]
+ },
+ resolvePolicy: {
+ async: 'NOWAIT'
+ },
+ tfMetaTags: {
+ title: 'Configure SQL Schemes'
+ }
+ })
+ .state('base.configuration.edit.advanced.models.model', {
+ url: `/{modelID:${idRegex}}`,
+ resolve: {
+ _cache: ['ConfigEffects', '$transition$', ({etp}, $transition$) => {
+ const {clusterID, modelID} = $transition$.params();
+ if (modelID === 'new') return Promise.resolve();
+ return etp('LOAD_MODEL', {modelID});
+ }]
+ },
+ data: {
+ errorState: 'base.configuration.edit.advanced.models'
+ },
+ permission: 'configuration',
+ resolvePolicy: {
+ async: 'NOWAIT'
+ }
+ })
+ .state('base.configuration.edit.advanced.igfs', {
+ url: '/igfs',
+ component: pageConfigureAdvancedIGFSComponent.name,
+ permission: 'configuration',
+ resolve: {
+ _shortIGFSs: ['ConfigSelectors', 'ConfigureState', 'ConfigEffects', '$transition$', (ConfigSelectors, ConfigureState, {etp}, $transition$) => {
+ if ($transition$.params().clusterID === 'new') return Promise.resolve();
+ return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
+ .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
+ .map((cluster) => {
+ return Promise.all([
+ etp('LOAD_SHORT_IGFSS', {ids: cluster.igfss, clusterID: cluster._id})
+ ]);
+ })
+ .toPromise();
+ }]
+ },
+ resolvePolicy: {
+ async: 'NOWAIT'
+ },
+ tfMetaTags: {
+ title: 'Configure IGFS'
+ }
+ })
+ .state('base.configuration.edit.advanced.igfs.igfs', {
+ url: `/{igfsID:${idRegex}}`,
+ permission: 'configuration',
+ resolve: {
+ _igfs: ['ConfigEffects', '$transition$', ({etp}, $transition$) => {
+ const {clusterID, igfsID} = $transition$.params();
+ if (igfsID === 'new') return Promise.resolve();
+ return etp('LOAD_IGFS', {igfsID});
+ }]
+ },
+ data: {
+ errorState: 'base.configuration.edit.advanced.igfs'
+ },
+ resolvePolicy: {
+ async: 'NOWAIT'
+ }
+ });
+ }
+
+ registerStates.$inject = ['$stateProvider'];
+
+ export {registerStates};