http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/caches/memory.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/caches/memory.pug b/modules/web-console/frontend/app/modules/states/configuration/caches/memory.pug index 4ea9160..8264731 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/caches/memory.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/caches/memory.pug @@ -23,23 +23,108 @@ include /app/helpers/jade/mixins .panel-heading(bs-collapse-toggle='' ng-click=`ui.loadPanel('${form}')`) ignite-form-panel-chevron label Memory - ignite-form-field-tooltip.tipLabel + ignite-form-field-tooltip.tipLabel(ng-show='$ctrl.available(["1.0.0", "2.0.0"])') | Cache memory settings#[br] - | #[a(href="https://apacheignite.readme.io/docs/off-heap-memory" target="_blank") More info] + | #[a(href="https://apacheignite.readme.io/v1.9/off-heap-memory" target="_blank") More info] + ignite-form-field-tooltip.tipLabel(ng-show='$ctrl.available("2.0.0")') + | Cache memory settings#[br] + | #[a(href="https://apacheignite.readme.io/docs/evictions" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) .col-sm-6 + //- Since ignite 2.0 + div(ng-if='$ctrl.available("2.0.0")') + .settings-row + +checkbox('Onheap cache enabled', model + '.onheapCacheEnabled', '"OnheapCacheEnabled"', 'Checks if the on-heap cache is enabled for the off-heap based page memory') + .settings-row + +text('Memory policy name:', model + '.memoryPolicyName', '"MemoryPolicyName"', 'false', 'default', + 'Name of memory policy configuration for this cache') + + //- Removed in ignite 2.0 + div(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + .settings-row + +dropdown('Mode:', `${model}.memoryMode`, '"memoryMode"', 'true', 'ONHEAP_TIERED', + '[\ + {value: "ONHEAP_TIERED", label: "ONHEAP_TIERED"},\ + {value: "OFFHEAP_TIERED", label: "OFFHEAP_TIERED"},\ + {value: "OFFHEAP_VALUES", label: "OFFHEAP_VALUES"}\ + ]', + 'Memory modes control whether value is stored in on-heap memory, off-heap memory, or swap space\ + <ul>\ + <li>\ + ONHEAP_TIERED - entries are cached on heap memory first<br/>\ + <ul>\ + <li>\ + If offheap memory is enabled and eviction policy evicts an entry from heap memory, entry will be moved to offheap memory<br/>\ + If offheap memory is disabled, then entry is simply discarded\ + </li>\ + <li>\ + If swap space is enabled and offheap memory fills up, then entry will be evicted into swap space<br/>\ + If swap space is disabled, then entry will be discarded. If swap is enabled and offheap memory is disabled, then entry will be evicted directly from heap memory into swap\ + </li>\ + </ul>\ + </li>\ + <li>\ + OFFHEAP_TIERED - works the same as ONHEAP_TIERED, except that entries never end up in heap memory and get stored in offheap memory right away<br/>\ + Entries get cached in offheap memory first and then get evicted to swap, if one is configured\ + </li>\ + <li>\ + OFFHEAP_VALUES - entry keys will be stored on heap memory, and values will be stored in offheap memory<br/>\ + Note that in this mode entries can be evicted only to swap\ + </li>\ + </ul>') + .settings-row(ng-show=`${model}.memoryMode !== 'OFFHEAP_VALUES'`) + +dropdown-required('Off-heap memory:', `${model}.offHeapMode`, '"offHeapMode"', 'true', `${model}.memoryMode === 'OFFHEAP_TIERED'`, + 'Disabled', + '[\ + {value: -1, label: "Disabled"},\ + {value: 1, label: "Limited"},\ + {value: 0, label: "Unlimited"}\ + ]', + 'Off-heap storage mode\ + <ul>\ + <li>Disabled - Off-heap storage is disabled</li>\ + <li>Limited - Off-heap storage has limited size</li>\ + <li>Unlimited - Off-heap storage grow infinitely (it is up to user to properly add and remove entries from cache to ensure that off-heap storage does not grow infinitely)</li>\ + </ul>') + .settings-row(ng-if=`${model}.offHeapMode === 1 && ${model}.memoryMode !== 'OFFHEAP_VALUES'`) + +number-required('Off-heap memory max size:', `${model}.offHeapMaxMemory`, '"offHeapMaxMemory"', 'true', + `${model}.offHeapMode === 1`, 'Enter off-heap memory size', '1', + 'Maximum amount of memory available to off-heap storage in bytes') + .settings-row - +checkbox('On-heap cache enabled', `${model}.onheapCacheEnabled`, '"onheapCacheEnabled"', 'On-heap cache enabled flag') - .settings-row(ng-show=`${model}.onheapCacheEnabled`) - +evictionPolicy(`${model}.evictionPolicy`, '"evictionPolicy"', 'true', 'false', - 'Cache eviction policy<br/>\ - Must be set for entries to be evicted to off-heap\ + -var onHeapTired = model + '.memoryMode === "ONHEAP_TIERED"' + -var swapEnabled = model + '.swapEnabled' + -var offHeapMaxMemory = model + '.offHeapMaxMemory' + + +evictionPolicy(`${model}.evictionPolicy`, '"evictionPolicy"', 'true', + onHeapTired + ' && (' + swapEnabled + '|| _.isNumber(' + offHeapMaxMemory + ') &&' + offHeapMaxMemory + ' >= 0)', + 'Optional cache eviction policy<br/>\ + Must be set for entries to be evicted from on-heap to off-heap or swap\ <ul>\ <li>Least Recently Used(LRU) - Eviction policy based on LRU algorithm and supports batch eviction</li>\ <li>First In First Out (FIFO) - Eviction policy based on FIFO algorithm and supports batch eviction</li>\ <li>SORTED - Eviction policy which will select the minimum cache entry for eviction</li>\ </ul>') + + //- Since ignite 2.0 + .settings-row(ng-if='$ctrl.available("2.0.0")') + +java-class('Eviction filter:', model + '.evictionFilter', '"EvictionFilter"', 'true', 'false', 'Eviction filter to specify which entries should not be evicted') + + //- Removed in ignite 2.0 + div(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + .settings-row + +number('Start size:', `${model}.startSize`, '"startSize"', 'true', '1500000', '0', + 'In terms of size and capacity, Ignite internal cache map acts exactly like a normal Java HashMap: it has some initial capacity\ + (which is pretty small by default), which doubles as data arrives. The process of internal cache map resizing is CPU-intensive\ + and time-consuming, and if you load a huge dataset into cache (which is a normal use case), the map will have to resize a lot of times.\ + To avoid that, you can specify the initial cache map capacity, comparable to the expected size of your dataset.\ + This will save a lot of CPU resources during the load time, because the map would not have to resize.\ + For example, if you expect to load 10 million entries into cache, you can set this property to 10 000 000.\ + This will save you from cache internal map resizes.') + .settings-row + +checkbox('Swap enabled', `${model}.swapEnabled`, '"swapEnabled"', 'Flag indicating whether swap storage is enabled or not for this cache') + .col-sm-6 +preview-xml-java(model, 'cacheMemory')
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/caches/node-filter.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/caches/node-filter.pug b/modules/web-console/frontend/app/modules/states/configuration/caches/node-filter.pug index 6715dcd..1b34b60 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/caches/node-filter.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/caches/node-filter.pug @@ -18,6 +18,10 @@ include /app/helpers/jade/mixins -var form = 'nodeFilter' -var model = 'backupItem' +-var nodeFilter = model + '.nodeFilter'; +-var nodeFilterKind = nodeFilter + '.kind'; +-var igfsFilter = nodeFilterKind + ' === "IGFS"' +-var customFilter = nodeFilterKind + ' === "Custom"' .panel.panel-default(ng-form=form novalidate) .panel-heading(bs-collapse-toggle='' ng-click=`ui.loadPanel('${form}')`) @@ -30,9 +34,6 @@ include /app/helpers/jade/mixins .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) .col-sm-6 .settings-row - -var nodeFilter = model + '.nodeFilter'; - -var nodeFilterKind = nodeFilter + '.kind'; - +dropdown('Node filter:', nodeFilterKind, '"nodeFilter"', 'true', 'Not set', '[\ {value: "IGFS", label: "IGFS nodes"},\ @@ -41,19 +42,11 @@ include /app/helpers/jade/mixins ]', 'Node filter variant' ) - .settings-row(ng-show=nodeFilterKind) - div(ng-show=`${nodeFilterKind} === 'IGFS'`) - -var igfsNodeFilter = `${nodeFilter}.IGFS` - -var required = `${nodeFilterKind} === 'IGFS'` - - //(lbl, model, name, enabled, required, placeholder, options, tip) - +dropdown-required-empty('IGFS:', `${igfsNodeFilter}.igfs`, '"igfsNodeFilter"', 'true', required, - 'Choose IGFS', 'No IGFS configured', 'igfss', 'Select IGFS to filter nodes') - div(ng-show=`${nodeFilterKind} === 'Custom'`) - -var customNodeFilter = `${nodeFilter}.Custom` - -var required = `${nodeFilterKind} === 'Custom'` - - +java-class('Class name:', `${customNodeFilter}.className`, '"customNodeFilter"', - 'true', required, 'Class name of custom node filter implementation', required) + .settings-row(ng-show=igfsFilter) + +dropdown-required-empty('IGFS:', `${nodeFilter}.IGFS.igfs`, '"igfsNodeFilter"', 'true', igfsFilter, + 'Choose IGFS', 'No IGFS configured', 'igfss', 'Select IGFS to filter nodes') + .settings-row(ng-show=customFilter) + +java-class('Class name:', `${nodeFilter}.Custom.className`, '"customNodeFilter"', + 'true', customFilter, 'Class name of custom node filter implementation', customFilter) .col-sm-6 +preview-xml-java(model, 'cacheNodeFilter', 'igfss') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/caches/query.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/caches/query.pug b/modules/web-console/frontend/app/modules/states/configuration/caches/query.pug index b3650e2..480b0a5 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/caches/query.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/caches/query.pug @@ -46,6 +46,12 @@ include /app/helpers/jade/mixins SELECT * FROM Persons.Person p INNER JOIN Organizations.Organization o on p.org = o.id\ </li>\ </ul>') + + //- Removed in ignite 2.0 + .settings-row(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + +number('On-heap cache for off-heap indexes:', `${model}.sqlOnheapRowCacheSize`, '"sqlOnheapRowCacheSize"', 'true', '10240', '1', + 'Number of SQL rows which will be cached onheap to avoid deserialization on each SQL index access') + .settings-row +number('Long query timeout:', `${model}.longQueryWarningTimeout`, '"longQueryWarningTimeout"', 'true', '3000', '0', 'Timeout in milliseconds after which long query warning will be printed') @@ -53,9 +59,6 @@ include /app/helpers/jade/mixins +number('History size:', `${model}.queryDetailMetricsSize`, '"queryDetailMetricsSize"', 'true', '0', '0', 'Size of queries detail metrics that will be stored in memory for monitoring purposes') .settings-row - +number('Parallelism:', `${model}.queryParallelism`, '"queryParallelism"', 'true', '1', '1', - 'Defines a hint to query execution engine on desired degree of parallelism within a single node.') - .settings-row -var form = 'querySqlFunctionClasses'; -var sqlFunctionClasses = `${model}.sqlFunctionClasses`; @@ -102,10 +105,26 @@ include /app/helpers/jade/mixins .group-content-empty(ng-if=`!(${sqlFunctionClasses}.length) && !group.add.length`) | Not defined + + //- Removed in ignite 2.0 + .settings-row(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + +checkbox('Snapshotable index', `${model}.snapshotableIndex`, '"snapshotableIndex"', + 'Flag indicating whether SQL indexes should support snapshots') + .settings-row +checkbox('Escape table and filed names', `${model}.sqlEscapeAll`, '"sqlEscapeAll"', 'If enabled than all schema, table and field names will be escaped with double quotes (for example: "tableName"."fieldName").<br/>\ This enforces case sensitivity for field names and also allows having special characters in table and field names.<br/>\ Escaped names will be used for creation internal structures in Ignite SQL engine.') + + //- Since ignite 2.0 + div(ng-if='$ctrl.available("2.0.0")') + .settings-row + +number('Query parallelism', model + '.queryParallelism', '"queryParallelism"', 'true', '1', '1', + 'A hint to query execution engine on desired degree of parallelism within a single node') + .settings-row + +number('SQL index max inline size:', model + '.sqlIndexMaxInlineSize', '"sqlIndexMaxInlineSize"', 'true', '-1', '0', + 'Maximum inline size for sql indexes') + .col-sm-6 +preview-xml-java(model, 'cacheQuery', 'domains') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug b/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug index f09bc0b..3af24df 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/caches/store.pug @@ -246,5 +246,10 @@ mixin hibernateField(name, model, items, valid, save, newItem) .details-row +number('Flush threads count:', `${model}.writeBehindFlushThreadCount`, '"writeBehindFlushThreadCount"', enabled, '1', '1', 'Number of threads that will perform cache flushing') + + //- Since ignite 2.0 + .details-row(ng-if='$ctrl.available("2.0.0")') + +checkbox-enabled('Write coalescing', model + '.writeBehindCoalescing', '"WriteBehindCoalescing"', enabled, 'Write coalescing flag for write-behind cache store') + .col-sm-6 +preview-xml-java(model, 'cacheStore', 'domains') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.pug index 2021c1c..25ee62a 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.pug @@ -115,6 +115,12 @@ include /app/helpers/jade/mixins .group-content-empty(ng-if=`!(${exclude}.length) && !group.add.length`) | Not defined + + //- Since ignite 2.0 + .settings-row(ng-if='$ctrl.available("2.0.0")') + +java-class('Class loader:', model + '.classLoader', '"classLoader"', 'true', 'false', + 'Loader which will be used for instantiating execution context') + .settings-row +dropdown('Deployment variant:', modelDeployment + '.kind', '"deploymentKind"', 'true', 'Default', '[\ @@ -214,7 +220,7 @@ include /app/helpers/jade/mixins div(type='internal' name='Scanner') label.col-xs-12.col-sm-12.col-md-12 - // (lbl, name, model, items, valid, save, newItem) + //- (lbl, name, model, items, valid, save, newItem) +table-java-class-field('Scanner:', name, model, scannerModel, valid, save, true) +table-save-button(valid, save, true) +unique-feedback(name, uniqueTip) http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.pug index 71d9974..5718755 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.pug @@ -55,8 +55,18 @@ include /app/helpers/jade/mixins '0 means wait forever') .settings-row +number('Thread priority:', `${model}.threadPriority`, '"threadPriority"', 'true', '10', '1', 'Thread priority for all threads started by SPI') - .settings-row - +number('Metrics update frequency:', `${model}.metricsUpdateFrequency`, '"metricsUpdateFrequency"', 'true', '2000', '1', 'Metrics update messages issuing frequency') + + //- Removed in ignite 2.0 + div(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + .settings-row + +number('Heartbeat frequency:', `${model}.heartbeatFrequency`, '"heartbeatFrequency"', 'true', '2000', '1', 'Heartbeat messages issuing frequency') + .settings-row + +number('Max heartbeats miss w/o init:', `${model}.maxMissedHeartbeats`, '"maxMissedHeartbeats"', 'true', '1', '1', + 'Max heartbeats count node can miss without initiating status check') + .settings-row + +number('Max missed client heartbeats:', `${model}.maxMissedClientHeartbeats`, '"maxMissedClientHeartbeats"', 'true', '5', '1', + 'Max heartbeats count node can miss without failing client node') + .settings-row +number('Topology history:', `${model}.topHistorySize`, '"topHistorySize"', 'true', '1000', '0', 'Size of topology snapshots history') .settings-row http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/events.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/events.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/events.pug index 09cd40c..2f5cc31 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/events.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/events.pug @@ -34,25 +34,21 @@ include /app/helpers/jade/mixins .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) .col-sm-6 - .settings-row - +dropdown-multiple('Include type:', `${model}.includeEventTypes`, '"includeEventTypes"', true, 'Choose recorded event types', '', 'eventGroups', - 'Array of event types, which will be recorded by GridEventStorageManager#record(Event)<br/>\ - Note, that either the include event types or the exclude event types can be established') - - .settings-row - +dropdown('Event storage:', modelEventStorageKind, '"eventStorageKind"', 'true', 'Disabled', - '[\ - {value: "Memory", label: "Memory"},\ - {value: "Custom", label: "Custom"},\ - {value: undefined, label: "Disabled"}\ - ]', + .settings-row(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + +dropdown('Event storage:', modelEventStorageKind, '"eventStorageKind"', 'true', 'Disabled', 'eventStorage', + 'Regulate how grid store events locally on node\ + <ul>\ + <li>Memory - All events are kept in the FIFO queue in-memory</li>\ + <li>Custom - Custom implementation of event storage SPI</li>\ + </ul>') + .settings-row(ng-if='$ctrl.available("2.0.0")') + +dropdown('Event storage:', modelEventStorageKind, '"eventStorageKind"', 'true', 'Disabled', 'eventStorage', 'Regulate how grid store events locally on node\ <ul>\ <li>Memory - All events are kept in the FIFO queue in-memory</li>\ <li>Custom - Custom implementation of event storage SPI</li>\ <li>Disabled - Events are not collected</li>\ </ul>') - div(ng-show=eventStorageMemory) .settings-row +number('Events expiration time:', `${modelEventStorage}.Memory.expireAgeMs`, '"EventStorageExpireAgeMs"', 'true', 'Long.MAX_VALUE', '1', 'All events that exceed this value will be removed from the queue when next event comes') @@ -66,5 +62,9 @@ include /app/helpers/jade/mixins .settings-row(ng-show=eventStorageCustom) +java-class('Class:', `${modelEventStorage}.Custom.className`, '"EventStorageCustom"', 'true', eventStorageCustom, 'Event storage implementation class name', eventStorageCustom) + .settings-row(ng-show=modelEventStorageKind) + +dropdown-multiple('Include type:', `${model}.includeEventTypes`, '"includeEventTypes"', true, 'Choose recorded event types', '', 'eventGroups', + 'Array of event types, which will be recorded by GridEventStorageManager#record(Event)<br/>\ + Note, that either the include event types or the exclude event types can be established') .col-sm-6 +preview-xml-java(model, 'clusterEvents') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/failover.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/failover.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/failover.pug index e0c2357..d61516c 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/failover.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/failover.pug @@ -32,6 +32,15 @@ include /app/helpers/jade/mixins .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) .col-sm-6 + //- Since ignite 2.0 + div(ng-if='$ctrl.available("2.0.0")') + .settings-row + +number('Failure detection timeout:', model + '.failureDetectionTimeout', '"failureDetectionTimeout"', 'true', + '10000', '1', 'Failure detection timeout is used to determine how long the communication or discovery SPIs should wait before considering a remote connection failed') + .settings-row + +number('Client failure detection timeout:', model + '.clientFailureDetectionTimeout', '"clientFailureDetectionTimeout"', 'true', + '30000', '1', 'Failure detection timeout is used to determine how long the communication or discovery SPIs should wait before considering a remote connection failed') + .settings-row(ng-init='failoverSpiTbl={type: "failoverSpi", model: "failoverSpi", focusId: "kind", ui: "failover-table"}') +ignite-form-group() ignite-form-field-label http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/general.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/general.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/general.pug index 62cc23d..752eb79 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/general.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/general.pug @@ -32,7 +32,7 @@ include /app/helpers/jade/mixins .panel-body .col-sm-6 .settings-row - +text('Name:', `${model}.name`, '"clusterName"', 'true', 'Input name', 'Grid name allows to indicate to what grid this particular grid instance belongs to') + +text('Name:', `${model}.name`, '"clusterName"', 'true', 'Input name', 'Instance name allows to indicate to what grid this particular grid instance belongs to') .settings-row +caches(model, 'Select caches to start in cluster or add a new cache') .settings-row http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/hadoop.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/hadoop.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/hadoop.pug new file mode 100644 index 0000000..b45efa4 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/hadoop.pug @@ -0,0 +1,119 @@ +//- + 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 = 'hadoop' +-var model = 'backupItem.hadoopConfiguration' +-var plannerModel = model + '.mapReducePlanner' +-var weightedModel = plannerModel + '.Weighted' +-var weightedPlanner = plannerModel + '.kind === "Weighted"' +-var customPlanner = plannerModel + '.kind === "Custom"' +-var libs = model + '.nativeLibraryNames' + +.panel.panel-default(ng-form=form novalidate) + -var uniqueTip = 'Such native library already exists!' + + .panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`) + ignite-form-panel-chevron + label Hadoop configuration + ignite-form-field-tooltip.tipLabel + | Hadoop Accelerator configuration + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) + .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) + .col-sm-6 + .settings-row + +dropdown('Map reduce planner:', plannerModel + '.kind', '"MapReducePlanner"', 'true', 'Default', '[\ + {value: "Weighted", label: "Weighted"},\ + {value: "Custom", label: "Custom"},\ + {value: undefined, label: "Default"}\ + ]', 'Implementation of map reduce planner\ + <ul>\ + <li>Weighted - Planner which assigns mappers and reducers based on their "weights"</li>\ + <li>Custom - Custom planner implementation</li>\ + <li>Default - Default planner implementation</li>\ + </ul>') + .settings-row(ng-show=weightedPlanner) + .panel-details + .details-row + +number('Local mapper weight:', weightedModel + '.localMapperWeight', '"LocalMapperWeight"', 'true', 100, '0', + 'This weight is added to a node when a mapper is assigned and it is input split data is located on this node') + .details-row + +number('Remote mapper weight:', weightedModel + '.remoteMapperWeight', '"remoteMapperWeight"', 'true', 100, '0', + 'This weight is added to a node when a mapper is assigned, but it is input split data is not located on this node') + .details-row + +number('Local reducer weight:', weightedModel + '.localReducerWeight', '"localReducerWeight"', 'true', 100, '0', + 'This weight is added to a node when a reducer is assigned and the node have at least one assigned mapper') + .details-row + +number('Remote reducer weight:', weightedModel + '.remoteReducerWeight', '"remoteReducerWeight"', 'true', 100, '0', + 'This weight is added to a node when a reducer is assigned, but the node does not have any assigned mappers') + .details-row + +number('Local mapper weight:', weightedModel + '.preferLocalReducerThresholdWeight', '"preferLocalReducerThresholdWeight"', 'true', 200, '0', + "When threshold is reached, a node with mappers is no longer considered as preferred for further reducer assignments") + .settings-row(ng-show=customPlanner) + .panel-details + .details-row + +java-class('Class name:', plannerModel + '.Custom.className', '"MapReducePlannerCustomClass"', 'true', customPlanner, + 'Custom planner implementation') + .settings-row + +number('Finished job info TTL:', model + '.finishedJobInfoTtl', '"finishedJobInfoTtl"', 'true', '30000', '0', + 'Finished job info time-to-live in milliseconds') + .settings-row + +number('Max parallel tasks:', model + '.maxParallelTasks', '"maxParallelTasks"', 'true', 'availableProcessors * 2', '1', + 'Max number of local tasks that may be executed in parallel') + .settings-row + +number('Max task queue size:', model + '.maxTaskQueueSize', '"maxTaskQueueSize"', 'true', '8192', '1', 'Max task queue size') + .settings-row + +ignite-form-group(ng-form=form ng-model=`${addresses}`) + ignite-form-field-label + | Native libraries + ignite-form-group-tooltip + | Library names + ignite-form-group-add(ng-click='group.add = [{}]') + | Add new library + .group-content(ng-if=`${libs}.length`) + -var model = 'obj.model'; + -var name = '"edit" + $index' + -var valid = `${form}[${name}].$valid` + -var save = `${libs}[$index] = ${model}` + + div(ng-repeat=`model in ${libs} track by $index` ng-init='obj = {}') + label.col-xs-12.col-sm-12.col-md-12 + .indexField + | {{ $index+1 }}) + +table-remove-button(libs, 'Remove library') + span(ng-hide='field.edit') + a.labelFormField(ng-click=`field.edit = true; ${model} = model;`) {{ model }} + span(ng-if='field.edit') + +table-text-field(name, model, libs, valid, save, 'Input library name', false) + +table-save-button(valid, save, false) + +unique-feedback(name, uniqueTip) + .group-content(ng-repeat='field in group.add') + -var model = 'new'; + -var name = '"new"' + -var valid = `${form}[${name}].$valid` + -var save = `${libs}.push(${model})` + + div + label.col-xs-12.col-sm-12.col-md-12 + +table-text-field(name, model, libs, valid, save, 'Input library name', true) + +table-save-button(valid, save, true) + +unique-feedback(name, uniqueTip) + .group-content-empty(id='libs' ng-if=`!(${libs}.length) && !group.add.length`) + | Not defined + .col-sm-6 + +preview-xml-java(model, 'clusterHadoop') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.pug index 274b014..6126a9e 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.pug @@ -35,18 +35,21 @@ include /app/helpers/jade/mixins .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) .col-sm-6 .settings-row - +dropdown('Marshaller:', marshaller + '.kind', '"kind"', 'true', 'Choose marshaller', - '[\ - {value: "OptimizedMarshaller", label: "OptimizedMarshaller"},\ - {value: "JdkMarshaller", label: "JdkMarshaller"},\ - {value: undefined, label: "Not set"}\ - ]', - 'Instance of marshaller to use in grid<br/>\ - <ul>\ - <li>OptimizedMarshaller - Optimized implementation of marshaller</li>\ - <li>JdkMarshaller - Marshaller based on JDK serialization mechanism</li>\ - <li>Not set - BinaryMarshaller serialize and deserialize all objects in the binary format</li>\ - </ul>') + div(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + +dropdown('Marshaller:', marshaller + '.kind', '"kind"', 'true', 'Default', 'marshallerVariant', + 'Instance of marshaller to use in grid<br/>\ + <ul>\ + <li>OptimizedMarshaller - Optimized implementation of marshaller</li>\ + <li>JdkMarshaller - Marshaller based on JDK serialization mechanism</li>\ + <li>Default - BinaryMarshaller serialize and deserialize all objects in the binary format</li>\ + </ul>') + div(ng-if='$ctrl.available("2.0.0")') + +dropdown('Marshaller:', marshaller + '.kind', '"kind"', 'true', 'Default', 'marshallerVariant', + 'Instance of marshaller to use in grid<br/>\ + <ul>\ + <li>JdkMarshaller - Marshaller based on JDK serialization mechanism</li>\ + <li>Default - BinaryMarshaller serialize and deserialize all objects in the binary format</li>\ + </ul>') a.customize( ng-if=`${marshaller}.kind && ${marshaller}.kind === 'OptimizedMarshaller'` ng-click=`${marshaller}.expanded = !${marshaller}.expanded` @@ -66,5 +69,15 @@ include /app/helpers/jade/mixins 'Whether marshaller should require Serializable interface or not') .settings-row +checkbox('Marshal local jobs', `${model}.marshalLocalJobs`, '"marshalLocalJobs"', 'If this flag is enabled, jobs mapped to local node will be marshalled as if it was remote node') + + //- Removed in ignite 2.0 + div(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + .settings-row + +number('Keep alive time:', `${model}.marshallerCacheKeepAliveTime`, '"marshallerCacheKeepAliveTime"', 'true', '10000', '0', + 'Keep alive time of thread pool that is in charge of processing marshaller messages') + .settings-row + +number('Pool size:', `${model}.marshallerCacheThreadPoolSize`, '"marshallerCacheThreadPoolSize"', 'true', 'max(8, availableProcessors) * 2', '1', + 'Default size of thread pool that is in charge of processing marshaller messages') + .col-sm-6 +preview-xml-java(model, 'clusterMarshaller') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/memory.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/memory.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/memory.pug new file mode 100644 index 0000000..62a07c1 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/memory.pug @@ -0,0 +1,114 @@ +//- + 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 = 'memoryConfiguration' +-var model = 'backupItem.memoryConfiguration' +-var memoryPolicies = model + '.memoryPolicies' + +.panel.panel-default(ng-if='$ctrl.available("2.0.0")' ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`) + ignite-form-panel-chevron + label Memory configuration + ignite-form-field-tooltip.tipLabel + | Page memory is a manageable off-heap based memory architecture that is split into pages of fixed size#[br] + | #[a(href="https://apacheignite.readme.io/docs/page-memory" target="_blank") More info] + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) + .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) + .col-sm-6 + .settings-row + +number-min-max('Page size:', model + '.pageSize', '"MemoryConfigurationPageSize"', + 'true', '2048', '1024', '16384', 'Every memory region is split on pages of fixed size') + .settings-row + +number('Concurrency level:', model + '.concurrencyLevel', '"MemoryConfigurationConcurrencyLevel"', + 'true', 'availableProcessors', '2', 'The number of concurrent segments in Ignite internal page mapping tables') + .settings-row + +ignite-form-group + ignite-form-field-label + | System cache + ignite-form-group-tooltip + | System cache properties + .group-content + .details-row + +number('Initial size:', model + '.systemCacheInitialSize', '"systemCacheInitialSize"', + 'true', '41943040', '10485760', 'Initial size of a memory region reserved for system cache') + .details-row + +number('Maximum size:', model + '.systemCacheMaxSize', '"systemCacheMaxSize"', + 'true', '104857600', '10485760', 'Maximum size of a memory region reserved for system cache') + .settings-row + +ignite-form-group + ignite-form-field-label + | Memory policies + ignite-form-group-tooltip + | Memory policies configuration + .group-content + .details-row + +text('Default region name:', model + '.defaultMemoryPolicyName', '"defaultMemoryPolicyName"', + 'false', 'default', 'Name of the memory policy that defines the default memory region') + .details-row(ng-hide='(' + model + '.defaultMemoryPolicyName || "default") !== "default"') + +number('Default region size:', model + '.defaultMemoryPolicySize', '"defaultMemoryPolicySize"', + 'true', '0.8 * totalMemoryAvailable', '10485760', + 'Size of the memory policy that defines the default memory region') + .details-row(ng-init='memoryPoliciesTbl={type: "memoryPolicies", model: "memoryPolicies", focusId: "name", ui: "memory-policies-table"}') + +ignite-form-group() + ignite-form-field-label + | Configured policies + ignite-form-group-tooltip + | List of configured policies + ignite-form-group-add(ng-click='tableNewItem(memoryPoliciesTbl)') + | Add Memory policy configuration + .group-content-empty(ng-if=`!(${memoryPolicies} && ${memoryPolicies}.length > 0)`) + | Not defined + .group-content(ng-show=`${memoryPolicies} && ${memoryPolicies}.length > 0` ng-repeat=`model in ${memoryPolicies} track by $index`) + hr(ng-if='$index != 0') + .settings-row + +text-enabled-autofocus('Name:', 'model.name', '"MemoryPolicyName" + $index', 'true', 'false', 'default', 'Memory policy name') + +table-remove-button(memoryPolicies, 'Remove memory configuration') + .settings-row + +number('Initial size:', 'model.initialSize', '"MemoryPolicyInitialSize" + $index', + 'true', '268435456', '10485760', 'Initial memory region size defined by this memory policy') + .settings-row + +number('Maximum size:', 'model.maxSize', '"MemoryPolicyMaxSize" + $index', + 'true', '0.8 * totalMemoryAvailable', '10485760', 'Maximum memory region size defined by this memory policy') + .settings-row + +text('Swap file path:', 'model.swapFilePath', '"MemoryPolicySwapFilePath" + $index', 'false', + 'Input swap file path', 'An optional path to a memory mapped file for this memory policy') + .settings-row + +dropdown('Eviction mode:', 'model.pageEvictionMode', '"MemoryPolicyPageEvictionMode"', 'true', 'DISABLED', + '[\ + {value: "DISABLED", label: "DISABLED"},\ + {value: "RANDOM_LRU", label: "RANDOM_LRU"},\ + {value: "RANDOM_2_LRU", label: "RANDOM_2_LRU"}\ + ]', + 'An algorithm for memory pages eviction\ + <ul>\ + <li>DISABLED - Eviction is disabled</li>\ + <li>RANDOM_LRU - Once a memory region defined by a memory policy is configured, an off - heap array is allocated to track last usage timestamp for every individual data page</li>\ + <li>RANDOM_2_LRU - Differs from Random - LRU only in a way that two latest access timestamps are stored for every data page</li>\ + </ul>') + .settings-row + +number-min-max-step('Eviction threshold:', 'model.evictionThreshold', '"MemoryPolicyEvictionThreshold" + $index', + 'true', '0.9', '0.5', '0.999', '0.05', 'A threshold for memory pages eviction initiation') + .settings-row + +number('Empty pages pool size:', 'model.emptyPagesPoolSize', '"MemoryPolicyEmptyPagesPoolSize" + $index', + 'true', '100', '10', 'The minimal number of empty pages to be present in reuse lists for this memory policy') + .settings-row + +checkbox('Metrics enabled', 'model.metricsEnabled', '"MemoryPolicyMetricsEnabled" + $index', + 'Whether memory metrics are enabled by default on node startup') + .col-sm-6 + +preview-xml-java(model, 'clusterMemory') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.pug index 6810e6b..bae3267 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.pug @@ -40,7 +40,7 @@ include /app/helpers/jade/mixins 'Frequency of metrics log print out<br/>\ ' + 'When <b>0</b> log print of metrics is disabled') .settings-row - +number('Update frequency:', `${model}.metricsUpdateFrequency`, '"metricsUpdateFrequency"', 'true', '2000', '0', + +number('Update frequency:', `${model}.metricsUpdateFrequency`, '"metricsUpdateFrequency"', 'true', '2000', '-1', 'Job metrics update frequency in milliseconds\ <ul>\ <li>If set to -1 job metrics are never updated</li>\ http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/misc.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/misc.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/misc.pug new file mode 100644 index 0000000..f84fae4 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/misc.pug @@ -0,0 +1,60 @@ +//- + 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 = 'misc' +-var model = 'backupItem' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle) + ignite-form-panel-chevron + label Miscellaneous + ignite-form-field-tooltip.tipLabel + | Various miscellaneous cluster settings + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) + .panel-body + .col-sm-6 + .settings-row + +text('Work directory:', model + '.workDirectory', '"workDirectory"', 'false', 'Input work directory', + 'Ignite work directory.<br/>\ + If not provided, the method will use work directory under IGNITE_HOME specified by IgniteConfiguration#setIgniteHome(String)\ + or IGNITE_HOME environment variable or system property.') + + //- Since ignite 2.0 + div(ng-show='$ctrl.available("2.0.0")') + .settings-row + +text('Consistent ID:', model + '.consistentId', '"ConsistentId"', 'false', 'Input consistent ID', 'Consistent globally unique node ID which survives node restarts') + .settings-row + +java-class('Warmup closure:', model + '.warmupClosure', '"warmupClosure"', 'true', 'false', 'This closure will be executed before actual grid instance start') + .settings-row + +checkbox('Active on start', model + '.activeOnStart', '"activeOnStart"', + 'If cluster is not active on start, there will be no cache partition map exchanges performed until the cluster is activated') + .settings-row + +checkbox('Cache sanity check enabled', model + '.cacheSanityCheckEnabled', '"cacheSanityCheckEnabled"', + 'If enabled, then Ignite will perform the following checks and throw an exception if check fails<br/>\ + <ul>\ + <li>Cache entry is not externally locked with lock or lockAsync methods when entry is enlisted to transaction</li>\ + <li>Each entry in affinity group - lock transaction has the same affinity key as was specified on affinity transaction start</li>\ + <li>Each entry in partition group - lock transaction belongs to the same partition as was specified on partition transaction start</li>\ + </ul>') + + .settings-row + +checkbox('Late affinity assignment', model + '.lateAffinityAssignment', '"lateAffinityAssignment"', + 'With late affinity assignment mode if primary node was changed for some partition this nodes becomes primary only when rebalancing for all assigned primary partitions is finished') + .col-sm-6 + +preview-xml-java(model, 'clusterMisc', 'caches') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/service.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/service.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/service.pug new file mode 100644 index 0000000..cf4c27a --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/service.pug @@ -0,0 +1,88 @@ +//- + 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 = 'serviceConfiguration' +-var model = 'backupItem.serviceConfigurations' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`) + ignite-form-panel-chevron + label Service configuration + ignite-form-field-tooltip.tipLabel + | Service Grid allows for deployments of arbitrary user-defined services on the cluster#[br] + | #[a(href="https://apacheignite.readme.io/docs/fault-tolerance" target="_blank") More info] + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) + .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) + .col-sm-6 + .settings-row(ng-init='serviceConfigurationsTbl={type: "serviceConfigurations", model: "serviceConfigurations", focusId: "kind", ui: "failover-table"}') + +ignite-form-group() + ignite-form-field-label + | Service configurations + ignite-form-group-tooltip + | Service configurations + ignite-form-group-add(ng-click='tableNewItem(serviceConfigurationsTbl)') + | Add service configuration + .group-content-empty(ng-if=`!(${model} && ${model}.length > 0)`) + | Not defined + .group-content(ng-show=`${model} && ${model}.length > 0` ng-repeat=`model in ${model} track by $index`) + -var nodeFilter = 'model.nodeFilter'; + -var nodeFilterKind = nodeFilter + '.kind'; + -var igfsFilter = nodeFilterKind + ' === "IGFS"' + -var customFilter = nodeFilterKind + ' === "Custom"' + + hr(ng-if='$index != 0') + .settings-row + +text-enabled-autofocus('Name:', 'model.name', '"ServiceName" + $index', 'true', 'true', 'Input service name', 'Service name') + +table-remove-button(model, 'Remove service configuration') + .settings-row + +java-class('Service class', 'model.service', '"serviceService" + $index', 'true', 'true', 'Service implementation class name') + .settings-row + +number('Max per node count:', 'model.maxPerNodeCount', '"ServiceMaxPerNodeCount" + $index', 'true', 'Unlimited', '0', + 'Maximum number of deployed service instances on each node.<br/>' + + 'Zero for unlimited') + .settings-row + +number('Total count:', 'model.totalCount', '"ServiceTotalCount" + $index', 'true', 'Unlimited', '0', + 'Total number of deployed service instances in the cluster.<br/>' + + 'Zero for unlimited') + //- + .settings-row + +dropdown('Node filter:', nodeFilterKind, '"nodeFilter" + $index', 'true', 'Not set', + '[\ + {value: "IGFS", label: "IGFS nodes"},\ + {value: "Custom", label: "Custom"},\ + {value: undefined, label: "Not set"}\ + ]', + 'Node filter variant' + ) + .panel-details(ng-show=igfsFilter) + .settings-row + +dropdown-required-empty('IGFS:', nodeFilter + '.IGFS.igfs', '"igfsNodeFilter"', 'true', igfsFilter, + 'Choose IGFS', 'No IGFS configured', 'igfss', 'Select IGFS to filter nodes') + .panel-details(ng-show=customFilter) + .settings-row + +java-class('Class name:', nodeFilter + '.Custom.className', '"customNodeFilter"', + 'true', customFilter, 'Class name of custom node filter implementation', customFilter) + .settings-row + +dropdown-required-empty('Cache:', 'model.cache', '"ServiceCache" + $index', 'true', 'false', + 'Choose cache', 'No caches configured for current cluster', 'clusterCachesEmpty', 'Cache name used for key-to-node affinity calculation').settings-row + .settings-row + +text('Affinity key:', 'model.affinityKey', '"ServiceAffinityKey" + $index', 'false', 'Input affinity key', + 'Affinity key used for key-to-node affinity calculation') + .col-sm-6 + +preview-xml-java('backupItem', 'clusterServiceConfiguration', 'caches') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/swap.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/swap.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/swap.pug new file mode 100644 index 0000000..7210f7a --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/swap.pug @@ -0,0 +1,72 @@ +//- + 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 = 'swap' +-var model = 'backupItem' +-var swapModel = model + '.swapSpaceSpi' +-var fileSwapModel = swapModel + '.FileSwapSpaceSpi' + +.panel.panel-default(ng-if='$ctrl.available(["1.0.0", "2.0.0"])' ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`) + ignite-form-panel-chevron + label Swap + ignite-form-field-tooltip.tipLabel + | Settings for overflow data to disk if it cannot fit in memory#[br] + | #[a(href="https://apacheignite.readme.io/docs/off-heap-memory#swap-space" target="_blank") More info] + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) + .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) + .col-sm-6 + .settings-row + +dropdown('Swap space SPI:', `${swapModel}.kind`, '"swapSpaceSpi"', 'true', 'Choose swap SPI', + '[\ + {value: "FileSwapSpaceSpi", label: "File-based swap"},\ + {value: undefined, label: "Not set"}\ + ]', + 'Provides a mechanism in grid for storing data on disk<br/>\ + Ignite cache uses swap space to overflow data to disk if it cannot fit in memory\ + <ul>\ + <li>File-based swap - File-based swap space SPI implementation which holds keys in memory</li>\ + <li>Not set - File-based swap space SPI with default configuration when it needed</li>\ + </ul>') + a.customize( + ng-if=`${swapModel}.kind` + ng-click=`${swapModel}.expanded = !${swapModel}.expanded` + ) {{ #{swapModel}.expanded ? 'Hide settings' : 'Show settings'}} + .settings-row + .panel-details(ng-show=`${swapModel}.expanded && ${swapModel}.kind`) + .details-row + +text('Base directory:', `${fileSwapModel}.baseDirectory`, '"baseDirectory"', 'false', 'swapspace', + 'Base directory where to write files') + .details-row + +number('Read stripe size:', `${fileSwapModel}.readStripesNumber`, '"readStripesNumber"', 'true', 'availableProcessors', '0', + 'Read stripe size defines number of file channels to be used concurrently') + .details-row + +number-min-max-step('Maximum sparsity:', `${fileSwapModel}.maximumSparsity`, '"maximumSparsity"', 'true', '0.5', '0', '0.999', '0.05', + 'This property defines maximum acceptable wasted file space to whole file size ratio<br/>\ + When this ratio becomes higher than specified number compacting thread starts working') + .details-row + +number('Max write queue size:', `${fileSwapModel}.maxWriteQueueSize`, '"maxWriteQueueSize"', 'true', '1024 * 1024', '0', + 'Max write queue size in bytes<br/>\ + If there are more values are waiting for being written to disk then specified size, SPI will block on store operation') + .details-row + +number('Write buffer size:', `${fileSwapModel}.writeBufferSize`, '"writeBufferSize"', 'true', '64 * 1024', '0', + 'Write buffer size in bytes<br/>\ + Write to disk occurs only when this buffer is full') + .col-sm-6 + +preview-xml-java(model, 'clusterSwap') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/thread.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/thread.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/thread.pug index 31dd333..ac4673c 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/thread.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/thread.pug @@ -18,6 +18,7 @@ include /app/helpers/jade/mixins -var form = 'pools' -var model = 'backupItem' +-var executors = model + '.executorConfiguration' .panel.panel-default(ng-form=form novalidate) .panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`) @@ -30,19 +31,62 @@ include /app/helpers/jade/mixins .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) .col-sm-6 .settings-row - +number('Public:', `${model}.publicThreadPoolSize`, '"publicThreadPoolSize"', 'true', 'max(8, availableProcessors) * 2', '1', + +number('Public:', model + '.publicThreadPoolSize', '"publicThreadPoolSize"', 'true', 'max(8, availableProcessors) * 2', '1', 'Thread pool that is in charge of processing ComputeJob, GridJobs and user messages sent to node') .settings-row - +number('System:', `${model}.systemThreadPoolSize`, '"systemThreadPoolSize"', 'true', 'max(8, availableProcessors) * 2', '1', + +number('System:', model + '.systemThreadPoolSize', '"systemThreadPoolSize"', 'true', 'max(8, availableProcessors) * 2', '1', 'Thread pool that is in charge of processing internal system messages') .settings-row - +number('Management:', `${model}.managementThreadPoolSize`, '"managementThreadPoolSize"', 'true', '4', '1', + +number('Service:', model + '.serviceThreadPoolSize', '"serviceThreadPoolSize"', 'true', 'max(8, availableProcessors) * 2', '1', + 'Thread pool that is in charge of processing proxy invocation') + .settings-row + +number('Management:', model + '.managementThreadPoolSize', '"managementThreadPoolSize"', 'true', '4', '1', 'Thread pool that is in charge of processing internal and Visor ComputeJob, GridJobs') .settings-row - +number('IGFS:', `${model}.igfsThreadPoolSize`, '"igfsThreadPoolSize"', 'true', 'availableProcessors', '1', + +number('IGFS:', model + '.igfsThreadPoolSize', '"igfsThreadPoolSize"', 'true', 'availableProcessors', '1', 'Thread pool that is in charge of processing outgoing IGFS messages') .settings-row - +number('Rebalance:', `${model}.rebalanceThreadPoolSize`, '"rebalanceThreadPoolSize"', 'true', '1', '1', + +number('Rebalance:', model + '.rebalanceThreadPoolSize', '"rebalanceThreadPoolSize"', 'true', '1', '1', 'Max count of threads can be used at rebalancing') + .settings-row + +number('Utility cache:', model + '.utilityCacheThreadPoolSize', '"utilityCacheThreadPoolSize"', 'true', 'max(8, availableProcessors)', '1', + 'Default thread pool size that will be used to process utility cache messages') + .settings-row + +number('Utility cache keep alive time:', model + '.utilityCacheKeepAliveTime', '"utilityCacheKeepAliveTime"', 'true', '60000', '0', + 'Keep alive time of thread pool size that will be used to process utility cache messages') + .settings-row + +number('Async callback:', model + '.asyncCallbackPoolSize', '"asyncCallbackPoolSize"', 'true', 'max(8, availableProcessors)', '1', + 'Size of thread pool that is in charge of processing asynchronous callbacks') + .settings-row + +number('Striped:', model + '.stripedPoolSize', '"stripedPoolSize"', 'true', 'max(8, availableProcessors)', '1', + 'Striped pool size that should be used for cache requests processing') + + //- Since ignite 2.0 + div(ng-if='$ctrl.available("2.0.0")') + .settings-row + +number('Data streamer:', model + '.dataStreamerThreadPoolSize', '"dataStreamerThreadPoolSize"', 'true', 'max(8, availableProcessors)', '1', + 'Size of thread pool that is in charge of processing data stream messages') + .settings-row + +number('Query:', model + '.queryThreadPoolSize', '"queryThreadPoolSize"', 'true', 'max(8, availableProcessors)', '1', + 'Size of thread pool that is in charge of processing query messages') + .settings-row(ng-init='executorConfigurationsTbl={type: "executorConfigurations", model: "executorConfigurations", focusId: "kind", ui: "failover-table"}') + +ignite-form-group() + ignite-form-field-label + | Executor configurations + ignite-form-group-tooltip + | Сustom thread pool configurations for compute tasks + ignite-form-group-add(ng-click='tableNewItem(executorConfigurationsTbl)') + | Add executor configuration + .group-content-empty(ng-if=`!(${executors} && ${executors}.length > 0)`) + | Not defined + .group-content(ng-show=`${executors} && ${executors}.length > 0` ng-repeat=`model in ${executors} track by $index`) + hr(ng-if='$index != 0') + .settings-row + +text-enabled-autofocus('Name:', 'model.name', '"ExecutorName" + $index', 'true', 'true', 'Input executor name', 'Thread pool name') + +table-remove-button(executors, 'Remove executor configuration') + .settings-row + +number('Pool size:', 'model.size', '"ExecutorPoolSize" + $index', 'true', 'max(8, availableProcessors)', '1', + 'Thread pool size') + .col-sm-6 +preview-xml-java(model, 'clusterPools') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/clusters/time.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/time.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/time.pug index 1645a60..329d7c4 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/time.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/time.pug @@ -29,8 +29,19 @@ include /app/helpers/jade/mixins .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) .col-sm-6 + //- Removed in ignite 2.0 + div(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + .settings-row + +number('Samples size:', `${model}.clockSyncSamples`, '"clockSyncSamples"', 'true', '8', '0', + 'Number of samples used to synchronize clocks between different nodes<br/>\ + Clock synchronization is used for cache version assignment in CLOCK order mode') + .settings-row + +number('Frequency:', `${model}.clockSyncFrequency`, '"clockSyncFrequency"', 'true', '120000', '0', + 'Frequency at which clock is synchronized between nodes, in milliseconds<br/>\ + Clock synchronization is used for cache version assignment in CLOCK order mode') + .settings-row - +number-min-max('Port base:', model + '.timeServerPortBase', '"timeServerPortBase"', 'true', '31100', '0', '65535', + +number-min-max('Port base:', `${model}.timeServerPortBase`, '"timeServerPortBase"', 'true', '31100', '0', '65535', 'Time server provides clock synchronization between nodes<br/>\ Base UPD port number for grid time server. Time server will be started on one of free ports in range') .settings-row http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/domains/query.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/domains/query.pug b/modules/web-console/frontend/app/modules/states/configuration/domains/query.pug index aff3c73..b8564dc 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/domains/query.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/domains/query.pug @@ -25,7 +25,7 @@ include /app/helpers/jade/mixins -var queryAliasesForm = 'queryAliases' -var queryIndexesForm = 'queryIndexes' -// LEGACY mixin for LEGACY index fields table. +//- LEGACY mixin for LEGACY index fields table. mixin table-index-item-edit(prefix, index, sortAvailable, idAddition) -var fieldName = `${prefix}FieldName` -var direction = `${prefix}Direction` http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/igfs/dual.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/igfs/dual.pug b/modules/web-console/frontend/app/modules/states/configuration/igfs/dual.pug new file mode 100644 index 0000000..c6c1f89 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/dual.pug @@ -0,0 +1,42 @@ +//- + 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 = 'dualMode' +-var model = 'backupItem' + +.panel.panel-default(ng-if='$ctrl.available(["1.0.0", "2.0.0"])' ng-form=form novalidate) + .panel-heading(bs-collapse-toggle='' ng-click=`ui.loadPanel('${form}')`) + ignite-form-panel-chevron + label Dual mode + ignite-form-field-tooltip.tipLabel + | IGFS supports dual-mode that allows it to work as either a standalone file system in Hadoop cluster, or work in tandem with HDFS, providing a primary caching layer for the secondary HDFS#[br] + | As a caching layer it provides highly configurable read-through and write-through behaviour + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) + .panel-body(ng-if=`ui.isPanelLoaded('${form}')`) + .col-sm-6 + .settings-row + +number('Maximum pending puts size:', `${model}.dualModeMaxPendingPutsSize`, '"dualModeMaxPendingPutsSize"', 'true', '0', 'Number.MIN_SAFE_INTEGER', + 'Maximum amount of pending data read from the secondary file system and waiting to be written to data cache<br/>\ + Zero or negative value stands for unlimited size') + .settings-row + +java-class('Put executor service:', `${model}.dualModePutExecutorService`, '"dualModePutExecutorService"', 'true', 'false', 'DUAL mode put operation executor service') + .settings-row + +checkbox('Put executor service shutdown', `${model}.dualModePutExecutorServiceShutdown`, '"dualModePutExecutorServiceShutdown"', 'DUAL mode put operation executor service shutdown flag') + .col-sm-6 + +preview-xml-java(model, 'igfsDualMode') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.pug b/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.pug index 29f955a..72d0649 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.pug @@ -54,8 +54,18 @@ mixin table-igfs-path-mode-edit(prefix, focusId, index) .col-sm-6 .settings-row +number('Block size:', `${model}.blockSize`, '"blockSize"', 'true', '65536', '0', 'File data block size in bytes') - .settings-row - +number('Buffer size:', `${model}.bufferSize`, '"bufferSize"', 'true', '65536', '0', 'Read/write buffer size for IGFS stream operations in bytes') + + //- Since ignite 2.0 + .settings-row(ng-if='$ctrl.available("2.0.0")') + +number('Buffer size:', `${model}.streamBufferSize`, '"streamBufferSize"', 'true', '65536', '0', 'Read/write buffer size for IGFS stream operations in bytes') + + //- Removed in ignite 2.0 + div(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + .settings-row + +number('Stream buffer size:', `${model}.streamBufferSize`, '"streamBufferSize"', 'true', '65536', '0', 'Read/write buffer size for IGFS stream operations in bytes') + .settings-row + +number('Maximum space size:', `${model}.maxSpaceSize`, '"maxSpaceSize"', 'true', '0', '0', 'Maximum space available for data cache to store file system entries') + .settings-row +number('Maximum task range length:', `${model}.maximumTaskRangeLength`, '"maximumTaskRangeLength"', 'true', '0', '0', 'Maximum default range size of a file being split during IGFS task execution') .settings-row @@ -68,6 +78,11 @@ mixin table-igfs-path-mode-edit(prefix, focusId, index) +number('Prefetch blocks:', `${model}.prefetchBlocks`, '"prefetchBlocks"', 'true', '0', '0', 'Number of pre-fetched blocks if specific file chunk is requested') .settings-row +number('Sequential reads before prefetch:', `${model}.sequentialReadsBeforePrefetch`, '"sequentialReadsBeforePrefetch"', 'true', '0', '0', 'Amount of sequential block reads before prefetch is triggered') + + //- Removed in ignite 2.0 + .settings-row(ng-if='$ctrl.available(["1.0.0", "2.0.0"])') + +number('Trash purge timeout:', `${model}.trashPurgeTimeout`, '"trashPurgeTimeout"', 'true', '1000', '0', 'Maximum timeout awaiting for trash purging in case data cache oversize is detected') + .settings-row +checkbox('Colocate metadata', `${model}.colocateMetadata`, '"colocateMetadata"', 'Whether to co-locate metadata on a single node') .settings-row @@ -75,6 +90,11 @@ mixin table-igfs-path-mode-edit(prefix, focusId, index) 'If value of this flag is <b>true</b>, IGFS will skip expensive consistency checks<br/>\ It is recommended to set this flag to <b>false</b> if your application has conflicting\ operations, or you do not know how exactly users will use your system') + + //- Since ignite 2.0 + .settings-row(ng-if='$ctrl.available("2.0.0")') + +checkbox('Update file length on flush', model + '.updateFileLengthOnFlush', '"updateFileLengthOnFlush"', 'Update file length on flush flag') + .settings-row +ignite-form-group(ng-model=pathModes ng-form=pathModesForm) ignite-form-field-label @@ -99,6 +119,5 @@ mixin table-igfs-path-mode-edit(prefix, focusId, index) tr td.col-sm-12 +table-igfs-path-mode-edit('new', 'PathMode', '-1') - .col-sm-6 +preview-xml-java(model, 'igfsMisc') http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/summary/summary-zipper.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/summary/summary-zipper.service.js b/modules/web-console/frontend/app/modules/states/configuration/summary/summary-zipper.service.js index 08cfa71..0259d39 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/summary/summary-zipper.service.js +++ b/modules/web-console/frontend/app/modules/states/configuration/summary/summary-zipper.service.js @@ -18,11 +18,11 @@ import Worker from 'worker?inline=true!./summary.worker'; export default ['$q', function($q) { - return function({ cluster, data }) { + return function(message) { const defer = $q.defer(); const worker = new Worker(); - worker.postMessage({ cluster, data }); + worker.postMessage(message); worker.onmessage = (e) => { defer.resolve(e.data); http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/states/configuration/summary/summary.controller.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/summary/summary.controller.js b/modules/web-console/frontend/app/modules/states/configuration/summary/summary.controller.js index 71b5a82..8f6a6fa 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/summary/summary.controller.js +++ b/modules/web-console/frontend/app/modules/states/configuration/summary/summary.controller.js @@ -314,7 +314,7 @@ export default [ ActivitiesData.post({ action: '/configuration/download' }); - return new SummaryZipper({ cluster, data: ctrl.data || {}, IgniteDemoMode: $root.IgniteDemoMode }) + return new SummaryZipper({ cluster, data: ctrl.data || {}, demo: $root.IgniteDemoMode, targetVer: Version.currentSbj.getValue() }) .then((data) => { saver.saveAs(data, escapeFileName(cluster.name) + '-project.zip'); })
