http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/template.tpl.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/template.tpl.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/template.tpl.pug
index 4dd0e17..c2bfd68 100644
--- 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/template.tpl.pug
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/template.tpl.pug
@@ -18,57 +18,57 @@ include /app/helpers/jade/mixins
 
 form(id='cluster' name='ui.inputForm' novalidate ng-submit='$ctrl.save()')
     .panel-group
-        include /app/modules/states/configuration/clusters/general
+        include ./templates/general
 
-        include /app/modules/states/configuration/clusters/atomic
-        include /app/modules/states/configuration/clusters/binary
-        include /app/modules/states/configuration/clusters/cache-key-cfg
-        include /app/modules/states/configuration/clusters/checkpoint
+        include ./templates/atomic
+        include ./templates/binary
+        include ./templates/cache-key-cfg
+        include ./templates/checkpoint
 
         //- Since ignite 2.3
-        include /app/modules/states/configuration/clusters/client-connector
+        include ./templates/client-connector
 
-        include /app/modules/states/configuration/clusters/collision
-        include /app/modules/states/configuration/clusters/communication
-        include /app/modules/states/configuration/clusters/connector
-        include /app/modules/states/configuration/clusters/deployment
+        include ./templates/collision
+        include ./templates/communication
+        include ./templates/connector
+        include ./templates/deployment
 
         //- Since ignite 2.3
-        include /app/modules/states/configuration/clusters/data-storage
+        include ./templates/data-storage
 
-        include /app/modules/states/configuration/clusters/discovery
-        include /app/modules/states/configuration/clusters/events
-        include /app/modules/states/configuration/clusters/failover
-        include /app/modules/states/configuration/clusters/hadoop
-        include /app/modules/states/configuration/clusters/load-balancing
-        include /app/modules/states/configuration/clusters/logger
-        include /app/modules/states/configuration/clusters/marshaller
+        include ./templates/discovery
+        include ./templates/events
+        include ./templates/failover
+        include ./templates/hadoop
+        include ./templates/load-balancing
+        include ./templates/logger
+        include ./templates/marshaller
 
         //- Since ignite 2.0, deprecated in ignite 2.3
-        include /app/modules/states/configuration/clusters/memory
+        include ./templates/memory
 
-        include /app/modules/states/configuration/clusters/misc
-        include /app/modules/states/configuration/clusters/metrics
+        include ./templates/misc
+        include ./templates/metrics
 
         //- Deprecated in ignite 2.1
-        include /app/modules/states/configuration/clusters/odbc
+        include ./templates/odbc
 
         //- Since ignite 2.1, deprecated in ignite 2.3
-        include /app/modules/states/configuration/clusters/persistence
+        include ./templates/persistence
 
         //- Deprecated in ignite 2.3
-        include /app/modules/states/configuration/clusters/sql-connector
+        include ./templates/sql-connector
 
-        include /app/modules/states/configuration/clusters/service
-        include /app/modules/states/configuration/clusters/ssl
+        include ./templates/service
+        include ./templates/ssl
 
         //- Removed in ignite 2.0
-        include /app/modules/states/configuration/clusters/swap
+        include ./templates/swap
 
-        include /app/modules/states/configuration/clusters/thread
-        include /app/modules/states/configuration/clusters/time
-        include /app/modules/states/configuration/clusters/transactions
-        include /app/modules/states/configuration/clusters/attributes
+        include ./templates/thread
+        include ./templates/time
+        include ./templates/transactions
+        include ./templates/attributes
 
 .pc-form-actions-panel(n_g-show='$ctrl.$scope.selectedItem')
     button-preview-project(cluster='$ctrl.cluster' ng-hide='$ctrl.isNew')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/atomic.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/atomic.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/atomic.pug
new file mode 100644
index 0000000..13424f8
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/atomic.pug
@@ -0,0 +1,75 @@
+//-
+    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 = 'atomics'
+-var model = '$ctrl.clonedCluster.atomicConfiguration'
+-var affModel = model + '.affinity'
+-var rendezvousAff = affModel + '.kind === "Rendezvous"'
+-var customAff = affModel + '.kind === "Custom"'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Atomic configuration
+    panel-description
+        | Configuration for atomic data structures.
+        | Atomics are distributed across the cluster, essentially enabling 
performing atomic operations (such as increment-and-get or compare-and-set) 
with the same globally-visible value. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/atomic-types"; 
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
+                +dropdown('Cache mode:', `${model}.cacheMode`, '"cacheMode"', 
'true', 'PARTITIONED',
+                    '[\
+                        {value: "LOCAL", label: "LOCAL"},\
+                        {value: "REPLICATED", label: "REPLICATED"},\
+                        {value: "PARTITIONED", label: "PARTITIONED"}\
+                    ]',
+                    'Cache modes:\
+                    <ul>\
+                        <li>Partitioned - in this mode the overall key set 
will be divided into partitions and all partitions will be split equally 
between participating nodes</li>\
+                        <li>Replicated - in this mode all the keys are 
distributed to all participating nodes</li>\
+                        <li>Local - in this mode caches residing on different 
grid nodes will not know about each other</li>\
+                    </ul>')
+            .pc-form-grid-col-30
+                +number('Sequence reserve:', 
`${model}.atomicSequenceReserveSize`, '"atomicSequenceReserveSize"', 'true', 
'1000', '0',
+                    'Default number of sequence values reserved for 
IgniteAtomicSequence instances<br/>\
+                    After a certain number has been reserved, consequent 
increments of sequence will happen locally, without communication with other 
nodes, until the next reservation has to be made')
+            .pc-form-grid-col-60(ng-show=`!(${model}.cacheMode && 
${model}.cacheMode != "PARTITIONED")`)
+                +number('Backups:', model + '.backups', '"backups"', 'true', 
'0', '0', 'Number of backup nodes')
+
+            .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.1.0")')
+                +dropdown('Function:', `${affModel}.kind`, '"AffinityKind"', 
'true', 'Default', '$ctrl.Clusters.affinityFunctions',
+                    'Key topology resolver to provide mapping from keys to 
nodes\
+                    <ul>\
+                        <li>Rendezvous - Based on Highest Random Weight 
algorithm<br/></li>\
+                        <li>Custom - Custom implementation of key affinity 
function<br/></li>\
+                        <li>Default - By default rendezvous affinity function  
with 1024 partitions is used<br/></li>\
+                    </ul>')
+            .pc-form-group(ng-if-end ng-if=rendezvousAff + ' || ' + customAff)
+                .pc-form-grid-row
+                    .pc-form-grid-col-30(ng-if-start=rendezvousAff)
+                        +number-required('Partitions', 
`${affModel}.Rendezvous.partitions`, '"RendPartitions"', 'true', 
rendPartitionsRequired, '1024', '1', 'Number of partitions')
+                    .pc-form-grid-col-30
+                        +java-class('Backup filter', 
`${affModel}.Rendezvous.affinityBackupFilter`, '"RendAffinityBackupFilter"', 
'true', 'false',
+                            'Backups will be selected from all nodes that pass 
this filter')
+                    .pc-form-grid-col-60(ng-if-end)
+                        +checkbox('Exclude neighbors', 
`${affModel}.Rendezvous.excludeNeighbors`, '"RendExcludeNeighbors"',
+                            'Exclude same - host - neighbors from being 
backups of each other and specified number of backups')
+                    .pc-form-grid-col-60(ng-if=customAff)
+                        +java-class('Class name:', 
`${affModel}.Custom.className`, '"AffCustomClassName"', 'true', customAff,
+                            'Custom key affinity function implementation class 
name')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterAtomics')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/attributes.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/attributes.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/attributes.pug
new file mode 100644
index 0000000..b57f1da
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/attributes.pug
@@ -0,0 +1,40 @@
+//-
+    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 = 'attributes'
+-var model = '$ctrl.clonedCluster'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title User attributes
+    panel-description Configuration for Ignite user attributes.
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6
+            .ignite-form-field
+                +ignite-form-field__label('User attributes:', 
'"userAttributes"')
+                    +tooltip(`User-defined attributes to add to node`)
+                .ignite-form-field__control
+                    +list-pair-edit({
+                        items: `${model}.attributes`,
+                        keyLbl: 'Attribute name', 
+                        valLbl: 'Attribute value',
+                        itemName: 'attribute',
+                        itemsName: 'attributes'
+                    })
+
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterUserAttributes')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/binary.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/binary.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/binary.pug
new file mode 100644
index 0000000..6c1b246
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/binary.pug
@@ -0,0 +1,80 @@
+//-
+    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 = 'binary'
+-var model = '$ctrl.clonedCluster.binaryConfiguration'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Binary configuration
+    panel-description
+        | Configuration of specific binary types. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/binary-marshaller"; 
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-60
+                +java-class('ID mapper:', model + '.idMapper', '"idMapper"', 
'true', 'false',
+                    'Maps given from BinaryNameMapper type and filed name to 
ID that will be used by Ignite in internals<br/>\
+                    Ignite never writes full strings for field or type names. 
Instead, for performance reasons, Ignite writes integer hash codes for 
type/class and field names. It has been tested that hash code conflicts for the 
type/class names or the field names within the same type are virtually non - 
existent and, to gain performance, it is safe to work with hash codes. For the 
cases when hash codes for different types or fields actually do collide 
<b>BinaryIdMapper</b> allows to override the automatically generated hash code 
IDs for the type and field names')
+            .pc-form-grid-col-60
+                +java-class('Name mapper:', model + '.nameMapper', 
'"nameMapper"', 'true', 'false', 'Maps type/class and field names to different 
names')
+            .pc-form-grid-col-60
+                +java-class('Serializer:', model + '.serializer', 
'"serializer"', 'true', 'false', 'Class with custom serialization logic for 
binary objects')
+            .pc-form-grid-col-60
+                .ignite-form-field
+                    +ignite-form-field__label('Type configurations:', 
'"typeСonfigurations"')
+                        +tooltip(`Configuration properties for binary types`)
+                    .ignite-form-field__control
+                        -var items = model + '.typeConfigurations'
+                        list-editable(ng-model=items 
name='typeСonfigurations')
+                            list-editable-item-edit.pc-form-grid-row
+                                - form = '$parent.form'
+                                .pc-form-grid-col-60
+                                    +java-class-autofocus('Type name:', 
'$item.typeName', '"typeName"', 'true', 'true', 'true', 'Type name')(
+                                        ignite-unique=items
+                                        ignite-unique-property='typeName'
+                                    )
+                                        +unique-feedback(`$item.typeName`, 
'Type name should be unique.')
+                                .pc-form-grid-col-60
+                                    +java-class('ID mapper:', 
'$item.idMapper', '"idMapper"', 'true', 'false',
+                                        'Maps given from BinaryNameMapper type 
and filed name to ID that will be used by Ignite in internals<br/>\
+                                        Ignite never writes full strings for 
field or type/class names.\
+                                        Instead, for performance reasons, 
Ignite writes integer hash codes for type/class and field names.\
+                                        It has been tested that hash code 
conflicts for the type/class names or the field names within the same type are 
virtually non - existent and,\
+                                        to gain performance, it is safe to 
work with hash codes.\
+                                        For the cases when hash codes for 
different types or fields actually do collide <b>BinaryIdMapper</b> allows to 
override the automatically generated hash code IDs for the type and field 
names')
+                                .pc-form-grid-col-60
+                                    +java-class('Name mapper:', 
'$item.nameMapper', '"nameMapper"', 'true', 'false',
+                                        'Maps type/class and field names to 
different names')
+                                .pc-form-grid-col-60
+                                    +java-class('Serializer:', 
'$item.serializer', '"serializer"', 'true', 'false',
+                                        'Class with custom serialization logic 
for binary object')
+                                .pc-form-grid-col-60
+                                    +checkbox('Enum', '$item.enum', 'enum', 
'Flag indicating that this type is the enum')
+
+                            list-editable-no-items
+                                list-editable-add-item-button(
+                                    
add-item=`$ctrl.Clusters.addBinaryTypeConfiguration($ctrl.clonedCluster)`
+                                    label-single='configuration'
+                                    label-multiple='configurations'
+                                )
+
+            - form = 'binary'
+            .pc-form-grid-col-60
+                +checkbox('Compact footer', model + '.compactFooter', 
'"compactFooter"', 'When enabled, Ignite will not write fields metadata when 
serializing objects (this will increase serialization performance), because 
internally <b>BinaryMarshaller</b> already distribute metadata inside cluster')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterBinary')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/cache-key-cfg.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/cache-key-cfg.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/cache-key-cfg.pug
new file mode 100644
index 0000000..abc8ff1
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/cache-key-cfg.pug
@@ -0,0 +1,63 @@
+//-
+    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 = 'cacheKeyCfg'
+-var model = '$ctrl.clonedCluster.cacheKeyConfiguration'
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Cache key configuration
+    panel-description
+        | Cache key configuration allows to collocate objects in a partitioned 
cache based on field in cache key without explicit usage of annotations on user 
classes.
+    panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6
+            mixin clusters-cache-key-cfg
+                .ignite-form-field
+                    +ignite-form-field__label('Cache key configuration:', 
'"cacheKeyConfiguration"')
+                    .ignite-form-field__control
+                        -let items = model
+                        list-editable(ng-model=items 
name='cacheKeyConfiguration')
+                            list-editable-item-edit.pc-form-grid-row
+                                - form = '$parent.form'
+                                .pc-form-grid-col-60
+                                    +java-class-autofocus('Type name:', 
'$item.typeName', '"cacheKeyTypeName"', 'true', 'true', 'true', 'Type name')(
+                                        ignite-unique=items
+                                        ignite-unique-property='typeName'
+                                    )
+                                        +unique-feedback(`cacheKeyTypeName`, 
'Type name should be unique.')
+                                .pc-form-grid-col-60
+                                    +sane-ignite-form-field-text({
+                                        label: 'Affinity key field name:',
+                                        model: '$item.affinityKeyFieldName',
+                                        name: '"affinityKeyFieldName"',
+                                        disabled: 'false',
+                                        placeholder: 'Enter field name',
+                                        tip: 'Affinity key field name',
+                                        required: true
+                                    })
+
+                            list-editable-no-items
+                                list-editable-add-item-button(
+                                    add-item=`(${items} = ${items} || 
[]).push({})`
+                                    label-single='configuration'
+                                    label-multiple='configurations'
+                                )
+
+            +clusters-cache-key-cfg
+
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterCacheKeyConfiguration')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint.pug
new file mode 100644
index 0000000..b00c98c
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint.pug
@@ -0,0 +1,82 @@
+//-
+    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 = 'checkpoint'
+-var model = '$ctrl.clonedCluster.checkpointSpi'
+-var CustomCheckpoint = '$checkpointSPI.kind === "Custom"'
+-var CacheCheckpoint = '$checkpointSPI.kind === "Cache"'
+
+panel-collapsible(ng-form=form)
+    panel-title Checkpointing
+    panel-description
+        | Checkpointing provides an ability to save an intermediate job state. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/checkpointing"; 
target="_blank") More info]
+    panel-content.pca-form-row
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                .ignite-form-field
+                    +ignite-form-field__label('Checkpoint SPI 
configurations:', '"checkpointSPIConfigurations"')
+                    .ignite-form-field__control
+                        list-editable(ng-model=model 
name='checkpointSPIConfigurations')
+                            
list-editable-item-edit(item-name='$checkpointSPI').pc-form-grid-row
+                                .pc-form-grid-col-60
+                                    +dropdown-required('Checkpoint SPI:', 
'$checkpointSPI.kind', '"checkpointKind"', 'true', 'true', 'Choose checkpoint 
configuration variant', '[\
+                                            {value: "FS", label: "File 
System"},\
+                                            {value: "Cache", label: "Cache"},\
+                                            {value: "S3", label: "Amazon S3"},\
+                                            {value: "JDBC", label: 
"Database"},\
+                                            {value: "Custom", label: "Custom"}\
+                                        ]',
+                                        'Provides an ability to save an 
intermediate job state\
+                                        <ul>\
+                                            <li>File System - Uses a shared 
file system to store checkpoints</li>\
+                                            <li>Cache - Uses a cache to store 
checkpoints</li>\
+                                            <li>Amazon S3 - Uses Amazon S3 to 
store checkpoints</li>\
+                                            <li>Database - Uses a database to 
store checkpoints</li>\
+                                            <li>Custom - Custom checkpoint SPI 
implementation</li>\
+                                        </ul>')
+
+                                include ./checkpoint/fs
+
+                                
.pc-form-grid-col-60(ng-if-start=CacheCheckpoint)
+                                    +dropdown-required-empty('Cache:', 
'$checkpointSPI.Cache.cache', '"checkpointCacheCache"', 'true', CacheCheckpoint,
+                                        'Choose cache', 'No caches configured 
for current cluster', '$ctrl.cachesMenu', 'Cache to use for storing 
checkpoints')(
+                                        
pc-is-in-collection='$ctrl.clonedCluster.caches'
+                                    )
+                                        +form-field-feedback(form, 
'isInCollection', `Cluster doesn't have such a cache`)
+                                .pc-form-grid-col-60(ng-if-end)
+                                    +java-class('Listener:', 
'$checkpointSPI.Cache.checkpointListener', '"checkpointCacheListener"', 'true', 
'false',
+                                        'Checkpoint listener implementation 
class name', CacheCheckpoint)
+
+                                include ./checkpoint/s3
+
+                                include ./checkpoint/jdbc
+
+                                .pc-form-grid-col-60(ng-if=CustomCheckpoint)
+                                    +java-class('Class name:', 
'$checkpointSPI.Custom.className', '"checkpointCustomClassName"', 'true', 
CustomCheckpoint,
+                                    'Custom CheckpointSpi implementation 
class', CustomCheckpoint)
+
+                            list-editable-no-items
+                                list-editable-add-item-button(
+                                    
add-item=`$edit($ctrl.Clusters.addCheckpointSPI($ctrl.clonedCluster))`
+                                    label-single='checkpoint SPI configuration'
+                                    label-multiple='checkpoint SPI 
configurations'
+                                )
+        
+        .pca-form-column-6
+            +preview-xml-java('$ctrl.clonedCluster', 'clusterCheckpoint', 
'$ctrl.caches')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/fs.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/fs.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/fs.pug
new file mode 100644
index 0000000..0359cf3
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/fs.pug
@@ -0,0 +1,36 @@
+//-
+    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
+
+.pc-form-grid-col-60(ng-if-start='$checkpointSPI.kind === "FS"')
+    .ignite-form-field
+        +list-text-field({
+            items: `$checkpointSPI.FS.directoryPaths`,
+            lbl: 'Directory path',
+            name: 'directoryPath',
+            itemName: 'path',
+            itemsName: 'paths'
+        })(
+            list-editable-cols=`::[{
+                name: 'Paths:',
+                tip: 'Paths to a shared directory where checkpoints will be 
stored'
+            }]`
+        )
+            +unique-feedback(_, 'Such path already exists!')
+
+.pc-form-grid-col-60(ng-if-end)
+    +java-class('Listener:', '$checkpointSPI.FS.checkpointListener', 
'"checkpointFsListener"', 'true', 'false', 'Checkpoint listener implementation 
class name', '$checkpointSPI.kind === "FS"')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/jdbc.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/jdbc.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/jdbc.pug
new file mode 100644
index 0000000..00a8681
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/jdbc.pug
@@ -0,0 +1,47 @@
+//-
+    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 jdbcCheckpoint = '$checkpointSPI.kind === "JDBC"'
+
+.pc-form-grid-col-30(ng-if-start='$checkpointSPI.kind === "JDBC"')
+    +text('Data source bean name:', '$checkpointSPI.JDBC.dataSourceBean', 
'"checkpointJdbcDataSourceBean"', jdbcCheckpoint, 'Input bean name',
+    'Name of the data source bean in Spring context')
+.pc-form-grid-col-30
+    +dialect('Dialect:', '$checkpointSPI.JDBC.dialect', 
'"checkpointJdbcDialect"', jdbcCheckpoint,
+    'Dialect of SQL implemented by a particular RDBMS:', 'Generic JDBC 
dialect', 'Choose JDBC dialect')
+.pc-form-grid-col-60
+    +java-class('Listener:', '$checkpointSPI.JDBC.checkpointListener', 
'"checkpointJdbcListener"', 'true', 'false',
+        'Checkpoint listener implementation class name', jdbcCheckpoint)
+.pc-form-grid-col-60
+    +text('User:', '$checkpointSPI.JDBC.user', '"checkpointJdbcUser"', 
'false', 'Input user name', 'Checkpoint jdbc user name')
+.pc-form-grid-col-30
+    +text('Table name:', '$checkpointSPI.JDBC.checkpointTableName', 
'"checkpointJdbcCheckpointTableName"', 'false', 'CHECKPOINTS', 'Checkpoint 
table name')
+.pc-form-grid-col-30
+    +number('Number of retries:', '$checkpointSPI.JDBC.numberOfRetries', 
'"checkpointJdbcNumberOfRetries"', 'true', '2', '0', 'Number of retries in case 
of DB failure')
+.pc-form-grid-col-30
+    +text('Key field name:', '$checkpointSPI.JDBC.keyFieldName', 
'"checkpointJdbcKeyFieldName"', 'false', 'NAME', 'Checkpoint key field name')
+.pc-form-grid-col-30
+    +dropdown('Key field type:', '$checkpointSPI.JDBC.keyFieldType', 
'"checkpointJdbcKeyFieldType"', 'true', 'VARCHAR', 
'::$ctrl.supportedJdbcTypes', 'Checkpoint key field type')
+.pc-form-grid-col-30
+    +text('Value field name:', '$checkpointSPI.JDBC.valueFieldName', 
'"checkpointJdbcValueFieldName"', 'false', 'VALUE', 'Checkpoint value field 
name')
+.pc-form-grid-col-30
+    +dropdown('Value field type:', '$checkpointSPI.JDBC.valueFieldType', 
'"checkpointJdbcValueFieldType"', 'true', 'BLOB', '::$ctrl.supportedJdbcTypes', 
'Checkpoint value field type')
+.pc-form-grid-col-30
+    +text('Expire date field name:', 
'$checkpointSPI.JDBC.expireDateFieldName', 
'"checkpointJdbcExpireDateFieldName"', 'false', 'EXPIRE_DATE', 'Checkpoint 
expire date field name')
+.pc-form-grid-col-30(ng-if-end)
+    +dropdown('Expire date field type:', 
'$checkpointSPI.JDBC.expireDateFieldType', 
'"checkpointJdbcExpireDateFieldType"', 'true', 'DATETIME', 
'::$ctrl.supportedJdbcTypes', 'Checkpoint expire date field type')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/s3.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/s3.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/s3.pug
new file mode 100644
index 0000000..8e284fc
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/checkpoint/s3.pug
@@ -0,0 +1,204 @@
+//-
+    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 credentialsModel = '$checkpointSPI.S3.awsCredentials'
+-var clientCfgModel = '$checkpointSPI.S3.clientConfiguration'
+-var checkpointS3 = '$checkpointSPI.kind === "S3"'
+-var checkpointS3Path = checkpointS3 + ' && 
$checkpointSPI.S3.awsCredentials.kind === "Properties"'
+-var checkpointS3Custom = checkpointS3 + ' && 
$checkpointSPI.S3.awsCredentials.kind === "Custom"'
+
+-var clientRetryModel = clientCfgModel + '.retryPolicy'
+-var checkpointS3DefaultMaxRetry = checkpointS3 + ' && ' + clientRetryModel + 
'.kind === "DefaultMaxRetries"'
+-var checkpointS3DynamoDbMaxRetry = checkpointS3 + ' && ' + clientRetryModel + 
'.kind === "DynamoDBMaxRetries"'
+-var checkpointS3CustomRetry = checkpointS3 + ' && ' + clientRetryModel + 
'.kind === "Custom"'
+
+.pc-form-grid-col-60(ng-if-start='$checkpointSPI.kind === "S3"')
+    +dropdown-required('AWS credentials:', 
'$checkpointSPI.S3.awsCredentials.kind', '"checkpointS3AwsCredentials"', 
'true', checkpointS3, 'Custom', '[\
+        {value: "Basic", label: "Basic"},\
+        {value: "Properties", label: "Properties"},\
+        {value: "Anonymous", label: "Anonymous"},\
+        {value: "BasicSession", label: "Basic with session"},\
+        {value: "Custom", label: "Custom"}\
+    ]',
+    'AWS credentials\
+    <ul>\
+        <li>Basic - Allows callers to pass in the AWS access key and secret 
access in the constructor</li>\
+        <li>Properties - Reads in AWS access keys from a properties file</li>\
+        <li>Anonymous - Allows use of "anonymous" credentials</li>\
+        <li>Database - Session credentials with keys and session token</li>\
+        <li>Custom - Custom AWS credentials provider</li>\
+    </ul>')
+.pc-form-group.pc-form-grid-row(ng-if=checkpointS3Path)
+    .pc-form-grid-col-60
+        +text('Path:', credentialsModel + '.Properties.path', 
'"checkpointS3PropertiesPath"', checkpointS3Path, 'Input properties file path',
+        'The file from which to read the AWS credentials properties')
+.pc-form-group.pc-form-grid-row(ng-if=checkpointS3Custom)
+    .pc-form-grid-col-60
+        +java-class('Class name:', credentialsModel + '.Custom.className', 
'"checkpointS3CustomClassName"', 'true', checkpointS3Custom,
+        'Custom AWS credentials provider implementation class', 
checkpointS3Custom)
+.pc-form-grid-col-60
+    label Note, AWS credentials will be generated as stub
+.pc-form-grid-col-60
+    +text('Bucket name suffix:', '$checkpointSPI.S3.bucketNameSuffix', 
'"checkpointS3BucketNameSuffix"', 'false', 'default-bucket')
+.pc-form-grid-col-60(ng-if-start=`$ctrl.available("2.4.0")`)
+    +text('Bucket endpoint:', `$checkpointSPI.S3.bucketEndpoint`, 
'"checkpointS3BucketEndpoint"', false, 'Input bucket endpoint',
+    'Bucket endpoint for IP finder<br/> \
+    For information about possible endpoint names visit <a 
href="http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region";>docs.aws.amazon.com</a>')
+.pc-form-grid-col-60(ng-if-end)
+    +text('SSE algorithm:', `$checkpointSPI.S3.SSEAlgorithm`, 
'"checkpointS3SseAlgorithm"', false, 'Input SSE algorithm',
+    'Server-side encryption algorithm for Amazon S3-managed encryption 
keys<br/> \
+    For information about possible S3-managed encryption keys visit <a 
href="http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html";>docs.aws.amazon.com</a>')
+.pc-form-grid-col-60
+    +java-class('Listener:', '$checkpointSPI.S3.checkpointListener', 
'"checkpointS3Listener"', 'true', 'false',
+        'Checkpoint listener implementation class name', checkpointS3)
+.pc-form-grid-col-60.pc-form-group__text-title
+    span Client configuration
+.pc-form-group.pc-form-grid-row(ng-if-end)
+    .pc-form-grid-col-30
+        +dropdown('Protocol:', clientCfgModel + '.protocol', 
'"checkpointS3Protocol"', 'true', 'HTTPS', '[\
+                {value: "HTTP", label: "HTTP"},\
+                {value: "HTTPS", label: "HTTPS"}\
+            ]',
+        'Provides an ability to save an intermediate job state\
+        <ul>\
+            <li>HTTP - Using the HTTP protocol is less secure than HTTPS, but 
can slightly reduce\
+                the system resources used when communicating with AWS</li>\
+            <li>HTTPS - Using the HTTPS protocol is more secure than using the 
HTTP protocol, but\
+                may use slightly more system resources. AWS recommends using 
HTTPS for maximize security</li>\
+        </ul>')
+    .pc-form-grid-col-30
+        +number('Maximum connections:', clientCfgModel + '.maxConnections', 
'"checkpointS3MaxConnections"',
+        'true', '50', '1', 'Maximum number of allowed open HTTP connections')
+    .pc-form-grid-col-60
+        +text('User agent prefix:', clientCfgModel + '.userAgentPrefix', 
'"checkpointS3UserAgentPrefix"', 'false', 'System specific header',
+        'HTTP user agent prefix to send with all requests')
+    .pc-form-grid-col-60
+        +text('User agent suffix:', clientCfgModel + '.userAgentSuffix', 
'"checkpointS3UserAgentSuffix"', 'false', 'System specific header',
+        'HTTP user agent suffix to send with all requests')
+    .pc-form-grid-col-60
+        +text-ip-address('Local address:', clientCfgModel + '.localAddress', 
'"checkpointS3LocalAddress"', 'true', 'Not specified',
+        'Optionally specifies the local address to bind to')
+    .pc-form-grid-col-40
+        +text('Proxy host:', clientCfgModel + '.proxyHost', 
'"checkpointS3ProxyHost"', 'false', 'Not specified',
+        'Optional proxy host the client will connect through')
+    .pc-form-grid-col-20
+        +number('Proxy port:', clientCfgModel + '.proxyPort', 
'"checkpointS3ProxyPort"', 'true', 'Not specified', '0',
+        'Optional proxy port the client will connect through')
+    .pc-form-grid-col-30
+        +text('Proxy user:', clientCfgModel + '.proxyUsername', 
'"checkpointS3ProxyUsername"', 'false', 'Not specified',
+        'Optional proxy user name to use if connecting through a proxy')
+    .pc-form-grid-col-30
+        +text('Proxy domain:', clientCfgModel + '.proxyDomain', 
'"checkpointS3ProxyDomain"', 'false', 'Not specified',
+        'Optional Windows domain name for configuring an NTLM proxy')
+    .pc-form-grid-col-60
+        +text('Proxy workstation:', clientCfgModel + '.proxyWorkstation', 
'"checkpointS3ProxyWorkstation"', 'false', 'Not specified',
+        'Optional Windows workstation name for configuring NTLM proxy support')
+    .pc-form-grid-col-60
+        +text('Non proxy hosts:', clientCfgModel + '.nonProxyHosts', 
'"checkpointS3NonProxyHosts"', 'false', 'Not specified',
+        'Optional hosts the client will access without going through the 
proxy')
+    .pc-form-grid-col-60
+        +dropdown('Retry policy:', clientRetryModel + '.kind', 
'"checkpointS3RetryPolicy"', 'true', 'Default', '[\
+                                            {value: "Default", label: "Default 
SDK retry policy"},\
+                                            {value: "DefaultMaxRetries", 
label: "Default with the specified max retry count"},\
+                                            {value: "DynamoDB", label: 
"Default for DynamoDB client"},\
+                                            {value: "DynamoDBMaxRetries", 
label: "DynamoDB with the specified max retry count"},\
+                                            {value: "Custom", label: "Custom 
configured"}\
+                                        ]',
+        'Provides an ability to save an intermediate job state\
+        <ul>\
+            <li>SDK default retry policy - This policy will honor the 
maxErrorRetry set in ClientConfiguration</li>\
+            <li>Default with the specified max retry count - Default SDK retry 
policy with the specified max retry count</li>\
+            <li>Default for DynamoDB client - This policy will honor the 
maxErrorRetry set in ClientConfiguration</li>\
+            <li>DynamoDB with the specified max retry count - This policy will 
honor the maxErrorRetry set in ClientConfiguration with the specified max retry 
count</li>\
+            <li>Custom configured - Custom configured SDK retry policy</li>\
+        </ul>')
+    .pc-form-group.pc-form-grid-row(ng-if=checkpointS3DefaultMaxRetry)
+        .pc-form-grid-col-60
+            +number-required('Maximum retry attempts:', clientRetryModel + 
'.DefaultMaxRetries.maxErrorRetry', '"checkpointS3DefaultMaxErrorRetry"', 
'true', checkpointS3DefaultMaxRetry, '-1', '1',
+            'Maximum number of retry attempts for failed requests')
+    .pc-form-group.pc-form-grid-row(ng-if=checkpointS3DynamoDbMaxRetry)
+        .pc-form-grid-col-60
+            +number-required('Maximum retry attempts:', clientRetryModel + 
'.DynamoDBMaxRetries.maxErrorRetry', '"checkpointS3DynamoDBMaxErrorRetry"', 
'true', checkpointS3DynamoDbMaxRetry, '-1', '1',
+            'Maximum number of retry attempts for failed requests')
+    .pc-form-group.pc-form-grid-row(ng-if=checkpointS3CustomRetry)
+        .pc-form-grid-col-60
+            +java-class('Retry condition:', clientRetryModel + 
'.Custom.retryCondition', '"checkpointS3CustomRetryPolicy"', 'true', 
checkpointS3CustomRetry,
+            'Retry condition on whether a specific request and exception 
should be retried', checkpointS3CustomRetry)
+        .pc-form-grid-col-60
+            +java-class('Backoff strategy:', clientRetryModel + 
'.Custom.backoffStrategy', '"checkpointS3CustomBackoffStrategy"', 'true', 
checkpointS3CustomRetry,
+            'Back-off strategy for controlling how long the next retry should 
wait', checkpointS3CustomRetry)
+        .pc-form-grid-col-60
+            +number-required('Maximum retry attempts:', clientRetryModel + 
'.Custom.maxErrorRetry', '"checkpointS3CustomMaxErrorRetry"', 'true', 
checkpointS3CustomRetry, '-1', '1',
+            'Maximum number of retry attempts for failed requests')
+        .pc-form-grid-col-60
+            +checkbox('Honor the max error retry set', clientRetryModel + 
'.Custom.honorMaxErrorRetryInClientConfig', 
'"checkpointS3CustomHonorMaxErrorRetryInClientConfig"',
+            'Whether this retry policy should honor the max error retry set by 
ClientConfiguration#setMaxErrorRetry(int)')
+    .pc-form-grid-col-60
+        +number('Maximum retry attempts:', clientCfgModel + '.maxErrorRetry', 
'"checkpointS3MaxErrorRetry"', 'true', '-1', '0',
+        'Maximum number of retry attempts for failed retryable requests<br/>\
+        If -1 the configured RetryPolicy will be used to control the retry 
count')
+    .pc-form-grid-col-30
+        +number('Socket timeout:', clientCfgModel + '.socketTimeout', 
'"checkpointS3SocketTimeout"', 'true', '50000', '0',
+        'Amount of time in milliseconds to wait for data to be transfered over 
an established, open connection before the connection times out and is 
closed<br/>\
+        A value of <b>0</b> means infinity')
+    .pc-form-grid-col-30
+        +number('Connection timeout:', clientCfgModel + '.connectionTimeout', 
'"checkpointS3ConnectionTimeout"', 'true', '50000', '0',
+        'Amount of time in milliseconds to wait when initially establishing a 
connection before giving up and timing out<br/>\
+        A value of <b>0</b> means infinity')
+    .pc-form-grid-col-30
+        +number('Request timeout:', clientCfgModel + '.requestTimeout', 
'"checkpointS3RequestTimeout"', 'true', '0', '-1',
+        'Amount of time in milliseconds to wait for the request to complete 
before giving up and timing out<br/>\
+        A non - positive value means infinity')
+    .pc-form-grid-col-30
+        +number('Idle timeout:', clientCfgModel + '.connectionMaxIdleMillis', 
'"checkpointS3ConnectionMaxIdleMillis"', 'true', '60000', '0',
+        'Maximum amount of time that an idle connection may sit in the 
connection pool and still be eligible for reuse')
+    .pc-form-grid-col-30
+        +text('Signature algorithm:', clientCfgModel + '.signerOverride', 
'"checkpointS3SignerOverride"', 'false', 'Not specified',
+        'Name of the signature algorithm to use for signing requests made by 
this client')
+    .pc-form-grid-col-30
+        +number('Connection TTL:', clientCfgModel + '.connectionTTL', 
'"checkpointS3ConnectionTTL"', 'true', '-1', '-1',
+        'Expiration time in milliseconds for a connection in the connection 
pool<br/>\
+        By default, it is set to <b>-1</b>, i.e. connections do not expire')
+    .pc-form-grid-col-60
+        +java-class('DNS resolver:', clientCfgModel + '.dnsResolver', 
'"checkpointS3DnsResolver"', 'true', 'false',
+        'DNS Resolver that should be used to for resolving AWS IP addresses', 
checkpointS3)
+    .pc-form-grid-col-60
+        +number('Response metadata cache size:', clientCfgModel + 
'.responseMetadataCacheSize', '"checkpointS3ResponseMetadataCacheSize"', 
'true', '50', '0',
+        'Response metadata cache size')
+    .pc-form-grid-col-60
+        +java-class('SecureRandom class name:', clientCfgModel + 
'.secureRandom', '"checkpointS3SecureRandom"', 'true', 'false',
+        'SecureRandom to be used by the SDK class name', checkpointS3)
+    .pc-form-grid-col-60
+        +number('Client execution timeout:', clientCfgModel + 
'.clientExecutionTimeout', '"checkpointS3ClientExecutionTimeout"', 'true', '0', 
'0',
+        'Amount of time in milliseconds to allow the client to complete the 
execution of an API call<br/>\
+        <b>0</b> value disables that feature')
+    .pc-form-grid-col-60
+        +checkbox('Cache response metadata', clientCfgModel + 
'.cacheResponseMetadata', '"checkpointS3CacheResponseMetadata"', 'Cache 
response metadata')
+    .pc-form-grid-col-60
+        +checkbox('Use expect continue', clientCfgModel + 
'.useExpectContinue', '"checkpointS3UseExpectContinue"', 'Optional override to 
enable/disable support for HTTP/1.1 handshake utilizing EXPECT: 100-Continue')
+    .pc-form-grid-col-60
+        +checkbox('Use throttle retries', clientCfgModel + 
'.useThrottleRetries', '"checkpointS3UseThrottleRetries"', 'Retry throttling 
will be used')
+    .pc-form-grid-col-60
+        +checkbox('Use reaper', clientCfgModel + '.useReaper', 
'"checkpointS3UseReaper"', 'Checks if the IdleConnectionReaper is to be 
started')
+    .pc-form-grid-col-60
+        +checkbox('Use GZIP', clientCfgModel + '.useGzip', 
'"checkpointS3UseGzip"', 'Checks if gzip compression is used')
+    .pc-form-grid-col-60
+        +checkbox('Preemptively basic authentication', clientCfgModel + 
'.preemptiveBasicProxyAuth', '"checkpointS3PreemptiveBasicProxyAuth"',
+        'Attempt to authenticate preemptively against proxy servers using 
basic authentication')
+    .pc-form-grid-col-60
+        +checkbox('TCP KeepAlive', clientCfgModel + '.useTcpKeepAlive', 
'"checkpointS3UseTcpKeepAlive"', 'TCP KeepAlive support is enabled')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/client-connector.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/client-connector.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/client-connector.pug
new file mode 100644
index 0000000..d27fa14
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/client-connector.pug
@@ -0,0 +1,76 @@
+//-
+    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 = 'clientConnector'
+-var model = '$ctrl.clonedCluster'
+-var connectionModel = `${model}.clientConnectorConfiguration`
+-var connectionEnabled = `${connectionModel}.enabled`
+-var sslEnabled = `${connectionEnabled} && ${connectionModel}.sslEnabled`
+-var sslFactoryEnabled = `${sslEnabled} && 
!${connectionModel}.useIgniteSslContextFactory`
+
+panel-collapsible(ng-show='$ctrl.available("2.3.0")' ng-form=form 
on-open=`ui.loadPanel('${form}')`)
+    panel-title Client connector configuration
+    panel-content.pca-form-row(ng-if=`$ctrl.available("2.3.0") && 
ui.isPanelLoaded('${form}')`)
+        .pca-form-column-6.pc-form-grid-row
+            .pc-form-grid-col-60
+                +checkbox('Enabled', connectionEnabled, 
'"ClientConnectorEnabled"', 'Flag indicating whether to configure client 
connector configuration')
+            .pc-form-grid-col-40
+                +text-enabled('Host:', `${connectionModel}.host`, 
'"ClientConnectorHost"', connectionEnabled, 'false', 'localhost')
+            .pc-form-grid-col-20
+                +number('Port:', `${connectionModel}.port`, 
'"ClientConnectorPort"', connectionEnabled, '10800', '1025')
+            .pc-form-grid-col-20
+                +number('Port range:', `${connectionModel}.portRange`, 
'"ClientConnectorPortRange"', connectionEnabled, '100', '0')
+            .pc-form-grid-col-20
+                +number('Socket send buffer size:', 
`${connectionModel}.socketSendBufferSize`, 
'"ClientConnectorSocketSendBufferSize"', connectionEnabled, '0', '0',
+                    'Socket send buffer size<br/>\
+                    When set to <b>0</b>, operation system default will be 
used')
+            .pc-form-grid-col-20
+                +number('Socket receive buffer size:', 
`${connectionModel}.socketReceiveBufferSize`, 
'"ClientConnectorSocketReceiveBufferSize"', connectionEnabled, '0', '0',
+                    'Socket receive buffer size<br/>\
+                    When set to <b>0</b>, operation system default will be 
used')
+            .pc-form-grid-col-30
+                +number('Max connection cursors:', 
`${connectionModel}.maxOpenCursorsPerConnection`, 
'"ClientConnectorMaxOpenCursorsPerConnection"', connectionEnabled, '128', '0',
+                    'Max number of opened cursors per connection')
+            .pc-form-grid-col-30
+                +number('Pool size:', `${connectionModel}.threadPoolSize`, 
'"ClientConnectorThreadPoolSize"', connectionEnabled, 'max(8, 
availableProcessors)', '1',
+                    'Size of thread pool that is in charge of processing SQL 
requests')
+            .pc-form-grid-col-60
+                +checkbox-enabled('TCP_NODELAY option', 
`${connectionModel}.tcpNoDelay`, '"ClientConnectorTcpNoDelay"', 
connectionEnabled)
+            .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")')
+                +number('Idle timeout:', `${connectionModel}.idleTimeout`, 
'"ClientConnectorIdleTimeout"', connectionEnabled, '0', '-1',
+                    'Idle timeout for client connections<br/>\
+                    Zero or negative means no timeout')
+            .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.5.0")')
+                +checkbox-enabled('Enable SSL', 
`${connectionModel}.sslEnabled`, '"ClientConnectorSslEnabled"', 
connectionEnabled, 'Enable secure socket layer on client connector')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Enable SSL client auth', 
`${connectionModel}.sslClientAuth`, '"ClientConnectorSslClientAuth"', 
sslEnabled, 'Flag indicating whether or not SSL client authentication is 
required')
+            .pc-form-grid-col-60
+                +checkbox-enabled('Use Ignite SSL', 
`${connectionModel}.useIgniteSslContextFactory`, 
'"ClientConnectorUseIgniteSslContextFactory"', sslEnabled, 'Use SSL factory 
Ignite configuration')
+            .pc-form-grid-col-60(ng-if-end)
+                +java-class('SSL factory:', 
`${connectionModel}.sslContextFactory`, '"ClientConnectorSslContextFactory"', 
sslFactoryEnabled, sslFactoryEnabled,
+                'If SSL factory specified then replication will be performed 
through secure SSL channel created with this factory<br/>\
+                If not present <b>isUseIgniteSslContextFactory()</b> flag will 
be evaluated<br/>\
+                If set to <b>true</b> and 
<b>IgniteConfiguration#getSslContextFactory()</b> exists, then Ignite SSL 
context factory will be used to establish secure connection')
+            .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.4.0")')
+                +checkbox-enabled('JDBC Enabled', 
`${connectionModel}.jdbcEnabled`, '"ClientConnectorJdbcEnabled"', 
connectionEnabled, 'Access through JDBC is enabled')
+            .pc-form-grid-col-60
+                +checkbox-enabled('ODBC Enabled', 
`${connectionModel}.odbcEnabled`, '"ClientConnectorOdbcEnabled"', 
connectionEnabled, 'Access through ODBC is enabled')
+            .pc-form-grid-col-60(ng-if-end)
+                +checkbox-enabled('Thin client enabled', 
`${connectionModel}.thinClientEnabled`, '"ClientConnectorThinCliEnabled"', 
connectionEnabled, 'Access through thin client is enabled')
+        .pca-form-column-6
+            +preview-xml-java(model, 'clusterClientConnector')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision.pug
new file mode 100644
index 0000000..c315af1
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision.pug
@@ -0,0 +1,58 @@
+//-
+    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 = 'collision'
+-var model = '$ctrl.clonedCluster.collision'
+-var modelCollisionKind = model + '.kind';
+
+panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`)
+    panel-title Collision configuration
+    panel-description
+        | Configuration Collision SPI allows to regulate how grid jobs get 
executed when they arrive on a destination node for execution. 
+        | 
#[a.link-success(href="https://apacheignite.readme.io/docs/job-scheduling"; 
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-60
+                +dropdown('CollisionSpi:', modelCollisionKind, 
'"collisionKind"', 'true', '',
+                    '[\
+                        {value: "JobStealing", label: "Job stealing"},\
+                        {value: "FifoQueue", label: "FIFO queue"},\
+                        {value: "PriorityQueue", label: "Priority queue"},\
+                        {value: "Custom", label: "Custom"},\
+                        {value: "Noop", label: "Default"}\
+                    ]',
+                    'Regulate how grid jobs get executed when they arrive on a 
destination node for execution\
+                    <ul>\
+                        <li>Job stealing - supports job stealing from 
over-utilized nodes to under-utilized nodes</li>\
+                        <li>FIFO queue - jobs are ordered as they arrived</li>\
+                        <li>Priority queue - jobs are first ordered by their 
priority</li>\
+                        <li>Custom - custom CollisionSpi implementation</li>\
+                        <li>Default - jobs are activated immediately on 
arrival to mapped node</li>\
+                    </ul>')
+            .pc-form-group(ng-show=`${modelCollisionKind} !== 'Noop'`)
+                .pc-form-grid-row(ng-show=`${modelCollisionKind} === 
'JobStealing'`)
+                    include ./collision/job-stealing
+                .pc-form-grid-row(ng-show=`${modelCollisionKind} === 
'FifoQueue'`)
+                    include ./collision/fifo-queue
+                .pc-form-grid-row(ng-show=`${modelCollisionKind} === 
'PriorityQueue'`)
+                    include ./collision/priority-queue
+                .pc-form-grid-row(ng-show=`${modelCollisionKind} === 'Custom'`)
+                    include ./collision/custom
+        .pca-form-column-6
+            -var model = '$ctrl.clonedCluster.collision'
+            +preview-xml-java(model, 'clusterCollision')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/custom.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/custom.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/custom.pug
new file mode 100644
index 0000000..c1d11d5
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/custom.pug
@@ -0,0 +1,23 @@
+//-
+    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 model = '$ctrl.clonedCluster.collision.Custom'
+-var required = '$ctrl.clonedCluster.collision.kind === "Custom"'
+
+.pc-form-grid-col-60
+    +java-class('Class:', `${model}.class`, '"collisionCustom"', 'true', 
required, 'CollisionSpi implementation class', required)

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/fifo-queue.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/fifo-queue.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/fifo-queue.pug
new file mode 100644
index 0000000..c009386
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/fifo-queue.pug
@@ -0,0 +1,26 @@
+//-
+    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 model = '$ctrl.clonedCluster.collision.FifoQueue'
+
+.pc-form-grid-col-30
+    +number('Parallel jobs number:', `${model}.parallelJobsNumber`, 
'"fifoParallelJobsNumber"', 'true', 'availableProcessors * 2', '1',
+        'Number of jobs that can be executed in parallel')
+.pc-form-grid-col-30
+    +number('Wait jobs number:', `${model}.waitingJobsNumber`, 
'"fifoWaitingJobsNumber"', 'true', 'Integer.MAX_VALUE', '0',
+        'Maximum number of jobs that are allowed to wait in waiting queue')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/job-stealing.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/job-stealing.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/job-stealing.pug
new file mode 100644
index 0000000..f1b0a56
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/job-stealing.pug
@@ -0,0 +1,51 @@
+//-
+    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 model = '$ctrl.clonedCluster.collision.JobStealing'
+-var stealingAttributes = `${model}.stealingAttributes`
+
+.pc-form-grid-col-30
+    +number('Active jobs threshold:', `${model}.activeJobsThreshold`, 
'"jsActiveJobsThreshold"', 'true', '95', '0',
+        'Number of jobs that can be executed in parallel')
+.pc-form-grid-col-30
+    +number('Wait jobs threshold:', `${model}.waitJobsThreshold`, 
'"jsWaitJobsThreshold"', 'true', '0', '0',
+        'Job count threshold at which this node will start stealing jobs from 
other nodes')
+.pc-form-grid-col-30
+    +number('Message expire time:', `${model}.messageExpireTime`, 
'"jsMessageExpireTime"', 'true', '1000', '1',
+        'Message expire time in ms')
+.pc-form-grid-col-30
+    +number('Maximum stealing attempts:', `${model}.maximumStealingAttempts`, 
'"jsMaximumStealingAttempts"', 'true', '5', '1',
+        'Maximum number of attempts to steal job by another node')
+.pc-form-grid-col-60
+    +checkbox('Stealing enabled', `${model}.stealingEnabled`, 
'"jsStealingEnabled"',
+        'Node should attempt to steal jobs from other nodes')
+.pc-form-grid-col-60
+    +java-class('External listener:', `${model}.externalCollisionListener`, 
'"jsExternalCollisionListener"', 'true', 'false',
+        'Listener to be set for notification of external collision events', 
'$ctrl.clonedCluster.collision.kind === "JobStealing"')
+.pc-form-grid-col-60
+    .ignite-form-field
+        +ignite-form-field__label('Stealing attributes:', 
'"stealingAttributes"')
+            +tooltip(`Configuration parameter to enable stealing to/from only 
nodes that have these attributes set`)
+        .ignite-form-field__control
+            +list-pair-edit({
+                items: stealingAttributes,
+                keyLbl: 'Attribute name', 
+                valLbl: 'Attribute value',
+                itemName: 'stealing attribute',
+                itemsName: 'stealing attributes'
+            })

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/priority-queue.pug
----------------------------------------------------------------------
diff --git 
a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/priority-queue.pug
 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/priority-queue.pug
new file mode 100644
index 0000000..fd198ce
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/collision/priority-queue.pug
@@ -0,0 +1,41 @@
+//-
+    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 model = '$ctrl.clonedCluster.collision.PriorityQueue'
+
+.pc-form-grid-col-30
+    +number('Parallel jobs number:', `${model}.parallelJobsNumber`, 
'"priorityParallelJobsNumber"', 'true', 'availableProcessors * 2', '1',
+        'Number of jobs that can be executed in parallel')
+.pc-form-grid-col-30
+    +number('Waiting jobs number:', `${model}.waitingJobsNumber`, 
'"priorityWaitingJobsNumber"', 'true', 'Integer.MAX_VALUE', '0',
+        'Maximum number of jobs that are allowed to wait in waiting queue')
+.pc-form-grid-col-30
+    +text('Priority attribute key:', `${model}.priorityAttributeKey`, 
'"priorityPriorityAttributeKey"', 'false', 'grid.task.priority',
+        'Task priority attribute key')
+.pc-form-grid-col-30
+    +text('Job priority attribute key:', `${model}.jobPriorityAttributeKey`, 
'"priorityJobPriorityAttributeKey"', 'false', 'grid.job.priority',
+        'Job priority attribute key')
+.pc-form-grid-col-30
+    +number('Default priority:', `${model}.defaultPriority`, 
'"priorityDefaultPriority"', 'true', '0', '0',
+        'Default priority to use if a job does not have priority attribute 
set')
+.pc-form-grid-col-30
+    +number('Starvation increment:', `${model}.starvationIncrement`, 
'"priorityStarvationIncrement"', 'true', '1', '0',
+        'Value to increment job priority by every time a lower priority job 
gets behind a higher priority job')
+.pc-form-grid-col-60
+    +checkbox('Starvation prevention enabled', 
`${model}.starvationPreventionEnabled`, '"priorityStarvationPreventionEnabled"',
+        'Job starvation prevention is enabled')

http://git-wip-us.apache.org/repos/asf/ignite/blob/68719446/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/communication.pug
----------------------------------------------------------------------
diff --git 
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
new file mode 100644
index 0000000..8b43521
--- /dev/null
+++ 
b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/communication.pug
@@ -0,0 +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>`
+                })(
+                    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')

Reply via email to