http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.pug index be07cfd..c315af1 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.pug @@ -20,42 +20,39 @@ include /app/helpers/jade/mixins -var model = '$ctrl.clonedCluster.collision' -var modelCollisionKind = model + '.kind'; -.pca-panel.pca-panel-default(ng-form=form novalidate) - .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`) - ignite-form-panel-chevron - .pca-panel-heading-title Collision configuration - .pca-panel-heading-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] - .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) - .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row - .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') +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/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.pug index 7fa92e1..bd8971a 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.pug @@ -20,118 +20,115 @@ include /app/helpers/jade/mixins -var model = '$ctrl.clonedCluster' -var communication = model + '.communication' -.pca-panel.pca-panel-default(ng-form=form novalidate) - .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`) - ignite-form-panel-chevron - .pca-panel-heading-title Communication - .pca-panel-heading-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] - .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) - .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row - .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 - +sane-ignite-form-field-number({ - label: 'Unacknowledged messages:', - model: `${communication}.unacknowledgedMessagesBufferSize`, - name: '"unacknowledgedMessagesBufferSize"', - placeholder: '{{ ::$ctrl.Clusters.unacknowledgedMessagesBufferSize.default }}', - min: `{{ $ctrl.Clusters.unacknowledgedMessagesBufferSize.min( - ${communication}.unacknowledgedMessagesBufferSize, - ${communication}.messageQueueLimit, - ${communication}.ackSendThreshold - ) }}`, - tip: `Maximum number of stored unacknowledged messages per connection to node<br/> - If specified non zero value it should be - <ul> - <li>At least ack send threshold * {{ ::$ctrl.Clusters.unacknowledgedMessagesBufferSize.validRatio }}</li> - <li>At least message queue limit * {{ ::$ctrl.Clusters.unacknowledgedMessagesBufferSize.validRatio }}</li> - </ul>` - })( - //- allowInvalid: true prevents from infinite digest loop when old value was 0 and becomes less than allowed minimum - ng-model-options=`{ - allowInvalid: true - }` - ) - .pc-form-grid-col-30 - +number('Socket write timeout:', `${communication}.socketWriteTimeout`, '"socketWriteTimeout"', 'true', '2000', '0', 'Socket write timeout') - .pc-form-grid-col-30 - +number('Selectors count:', `${communication}.selectorsCount`, '"selectorsCount"', 'true', 'min(4, availableProcessors)', '1', 'Count of selectors te be used in TCP server') - .pc-form-grid-col-60 - +java-class('Address resolver:', `${communication}.addressResolver`, '"comAddressResolver"', 'true', 'false', 'Provides resolution between external and internal addresses') - .pc-form-grid-col-60 - +checkbox('Direct buffer', `${communication}.directBuffer`, '"directBuffer"', - 'If value is true, then SPI will use ByteBuffer.allocateDirect(int) call<br/>\ - Otherwise, SPI will use ByteBuffer.allocate(int) call') - .pc-form-grid-col-60 - +checkbox('Direct send buffer', `${communication}.directSendBuffer`, '"directSendBuffer"', 'Flag defining whether direct send buffer should be used') - .pc-form-grid-col-60 - +checkbox('TCP_NODELAY option', `${communication}.tcpNoDelay`, '"tcpNoDelay"', 'Value for TCP_NODELAY socket option') - .pca-form-column-6 - +preview-xml-java(model, 'clusterCommunication') +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 + +sane-ignite-form-field-number({ + label: 'Unacknowledged messages:', + model: `${communication}.unacknowledgedMessagesBufferSize`, + name: '"unacknowledgedMessagesBufferSize"', + placeholder: '{{ ::$ctrl.Clusters.unacknowledgedMessagesBufferSize.default }}', + min: `{{ $ctrl.Clusters.unacknowledgedMessagesBufferSize.min( + ${communication}.unacknowledgedMessagesBufferSize, + ${communication}.messageQueueLimit, + ${communication}.ackSendThreshold + ) }}`, + tip: `Maximum number of stored unacknowledged messages per connection to node<br/> + If specified non zero value it should be + <ul> + <li>At least ack send threshold * {{ ::$ctrl.Clusters.unacknowledgedMessagesBufferSize.validRatio }}</li> + <li>At least message queue limit * {{ ::$ctrl.Clusters.unacknowledgedMessagesBufferSize.validRatio }}</li> + </ul>` + })( + //- allowInvalid: true prevents from infinite digest loop when old value was 0 and becomes less than allowed minimum + ng-model-options=`{ + allowInvalid: true + }` + ) + .pc-form-grid-col-30 + +number('Socket write timeout:', `${communication}.socketWriteTimeout`, '"socketWriteTimeout"', 'true', '2000', '0', 'Socket write timeout') + .pc-form-grid-col-30 + +number('Selectors count:', `${communication}.selectorsCount`, '"selectorsCount"', 'true', 'min(4, availableProcessors)', '1', 'Count of selectors te be used in TCP server') + .pc-form-grid-col-60 + +java-class('Address resolver:', `${communication}.addressResolver`, '"comAddressResolver"', 'true', 'false', 'Provides resolution between external and internal addresses') + .pc-form-grid-col-60 + +checkbox('Direct buffer', `${communication}.directBuffer`, '"directBuffer"', + 'If value is true, then SPI will use ByteBuffer.allocateDirect(int) call<br/>\ + Otherwise, SPI will use ByteBuffer.allocate(int) call') + .pc-form-grid-col-60 + +checkbox('Direct send buffer', `${communication}.directSendBuffer`, '"directSendBuffer"', 'Flag defining whether direct send buffer should be used') + .pc-form-grid-col-60 + +checkbox('TCP_NODELAY option', `${communication}.tcpNoDelay`, '"tcpNoDelay"', 'Value for TCP_NODELAY socket option') + .pca-form-column-6 + +preview-xml-java(model, 'clusterCommunication') http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.pug index 50975b7..76c5016 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.pug @@ -21,83 +21,80 @@ include /app/helpers/jade/mixins -var enabled = model + '.enabled' -var sslEnabled = enabled + ' && ' + model + '.sslEnabled' -.pca-panel.pca-panel-default(ng-form=form novalidate) - .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`) - ignite-form-panel-chevron - .pca-panel-heading-title Connector configuration - .pca-panel-heading-description - | Configure HTTP REST configuration to enable HTTP server features. - | #[a.link-success(href="https://apacheignite.readme.io/docs/rest-api#general-configuration" target="_blank") More info] - .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) - .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row - .pca-form-column-6.pc-form-grid-row - .pc-form-grid-col-60 - +checkbox('Enabled', enabled, '"restEnabled"', 'Flag indicating whether to configure connector configuration') - .pc-form-grid-col-60 - +text-enabled('Jetty configuration path:', `${model}.jettyPath`, '"connectorJettyPath"', enabled, 'false', 'Input path to Jetty configuration', - 'Path, either absolute or relative to IGNITE_HOME, to Jetty XML configuration file<br/>\ - Jetty is used to support REST over HTTP protocol for accessing Ignite APIs remotely<br/>\ - If not provided, Jetty instance with default configuration will be started picking IgniteSystemProperties.IGNITE_JETTY_HOST and IgniteSystemProperties.IGNITE_JETTY_PORT as host and port respectively') - .pc-form-grid-col-20 - +text-ip-address('TCP host:', `${model}.host`, '"connectorHost"', enabled, 'IgniteConfiguration#getLocalHost()', - 'Host for TCP binary protocol server<br/>\ - This can be either an IP address or a domain name<br/>\ - If not defined, system - wide local address will be used IgniteConfiguration#getLocalHost()<br/>\ - You can also use "0.0.0.0" value to bind to all locally - available IP addresses') - .pc-form-grid-col-20 - +number-min-max('TCP port:', `${model}.port`, '"connectorPort"', enabled, '11211', '1024', '65535', 'Port for TCP binary protocol server') - .pc-form-grid-col-20 - +number('TCP port range:', `${model}.portRange`, '"connectorPortRange"', enabled, '100', '1', 'Number of ports for TCP binary protocol server to try if configured port is already in use') - .pc-form-grid-col-60 - +number('Idle query cursor timeout:', `${model}.idleQueryCursorTimeout`, '"connectorIdleQueryCursorTimeout"', enabled, '600000', '0', - 'Reject open query cursors that is not used timeout<br/>\ - If no fetch query request come within idle timeout, it will be removed on next check for old query cursors') - .pc-form-grid-col-60 - +number('Idle query cursor check frequency:', `${model}.idleQueryCursorCheckFrequency`, '"connectorIdleQueryCursorCheckFrequency"', enabled, '60000', '0', - 'Idle query cursors check frequency<br/>\ - This setting is used to reject open query cursors that is not used') - .pc-form-grid-col-30 - +number('Idle timeout:', `${model}.idleTimeout`, '"connectorIdleTimeout"', enabled, '7000', '0', - 'Idle timeout for REST server<br/>\ - This setting is used to reject half - opened sockets<br/>\ - If no packets come within idle timeout, the connection is closed') - .pc-form-grid-col-30 - +number('Receive buffer size:', `${model}.receiveBufferSize`, '"connectorReceiveBufferSize"', enabled, '32768', '0', 'REST TCP server receive buffer size') - .pc-form-grid-col-30 - +number('Send buffer size:', `${model}.sendBufferSize`, '"connectorSendBufferSize"', enabled, '32768', '0', 'REST TCP server send buffer size') - .pc-form-grid-col-30 - +number('Send queue limit:', `${model}.sendQueueLimit`, '"connectorSendQueueLimit"', enabled, 'unlimited', '0', - 'REST TCP server send queue limit<br/>\ - If the limit exceeds, all successive writes will block until the queue has enough capacity') - .pc-form-grid-col-60 - +checkbox-enabled('Direct buffer', `${model}.directBuffer`, '"connectorDirectBuffer"', enabled, - 'Flag indicating whether REST TCP server should use direct buffers<br/>\ - A direct buffer is a buffer that is allocated and accessed using native system calls, without using JVM heap<br/>\ - Enabling direct buffer may improve performance and avoid memory issues(long GC pauses due to huge buffer size)') - .pc-form-grid-col-60 - +checkbox-enabled('TCP_NODELAY option', `${model}.noDelay`, '"connectorNoDelay"', enabled, - 'Flag indicating whether TCP_NODELAY option should be set for accepted client connections<br/>\ - Setting this option reduces network latency and should be enabled in majority of cases<br/>\ - For more information, see Socket#setTcpNoDelay(boolean)') - .pc-form-grid-col-30 - +number('Selector count:', `${model}.selectorCount`, '"connectorSelectorCount"', enabled, 'min(4, availableProcessors)', '1', - 'Number of selector threads in REST TCP server<br/>\ - Higher value for this parameter may increase throughput, but also increases context switching') - .pc-form-grid-col-30 - +number('Thread pool size:', `${model}.threadPoolSize`, '"connectorThreadPoolSize"', enabled, 'max(8, availableProcessors) * 2', '1', - 'Thread pool size to use for processing of client messages (REST requests)') - .pc-form-grid-col-60 - +java-class('Message interceptor:', `${model}.messageInterceptor`, '"connectorMessageInterceptor"', enabled, 'false', - 'Interceptor allows to transform all objects exchanged via REST protocol<br/>\ - For example if you use custom serialisation on client you can write interceptor to transform binary representations received from client to Java objects and later access them from java code directly') - .pc-form-grid-col-60 - +text-enabled('Secret key:', `${model}.secretKey`, '"connectorSecretKey"', enabled, 'false', 'Specify to enable authentication', 'Secret key to authenticate REST requests') - .pc-form-grid-col-60 - +checkbox-enabled('Enable SSL', `${model}.sslEnabled`, '"connectorSslEnabled"', enabled, 'Enables/disables SSL for REST TCP binary protocol') - .pc-form-grid-col-60 - +checkbox-enabled('Enable SSL client auth', `${model}.sslClientAuth`, '"connectorSslClientAuth"', sslEnabled, 'Flag indicating whether or not SSL client authentication is required') - .pc-form-grid-col-60 - +java-class('SSL factory:', `${model}.sslFactory`, '"connectorSslFactory"', sslEnabled, sslEnabled, - 'Instance of Factory that will be used to create an instance of SSLContext for Secure Socket Layer on TCP binary protocol') - .pca-form-column-6 - +preview-xml-java(model, 'clusterConnector') +panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`) + panel-title Connector configuration + panel-description + | Configure HTTP REST configuration to enable HTTP server features. + | #[a.link-success(href="https://apacheignite.readme.io/docs/rest-api#general-configuration" 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 + +checkbox('Enabled', enabled, '"restEnabled"', 'Flag indicating whether to configure connector configuration') + .pc-form-grid-col-60 + +text-enabled('Jetty configuration path:', `${model}.jettyPath`, '"connectorJettyPath"', enabled, 'false', 'Input path to Jetty configuration', + 'Path, either absolute or relative to IGNITE_HOME, to Jetty XML configuration file<br/>\ + Jetty is used to support REST over HTTP protocol for accessing Ignite APIs remotely<br/>\ + If not provided, Jetty instance with default configuration will be started picking IgniteSystemProperties.IGNITE_JETTY_HOST and IgniteSystemProperties.IGNITE_JETTY_PORT as host and port respectively') + .pc-form-grid-col-20 + +text-ip-address('TCP host:', `${model}.host`, '"connectorHost"', enabled, 'IgniteConfiguration#getLocalHost()', + 'Host for TCP binary protocol server<br/>\ + This can be either an IP address or a domain name<br/>\ + If not defined, system - wide local address will be used IgniteConfiguration#getLocalHost()<br/>\ + You can also use "0.0.0.0" value to bind to all locally - available IP addresses') + .pc-form-grid-col-20 + +number-min-max('TCP port:', `${model}.port`, '"connectorPort"', enabled, '11211', '1024', '65535', 'Port for TCP binary protocol server') + .pc-form-grid-col-20 + +number('TCP port range:', `${model}.portRange`, '"connectorPortRange"', enabled, '100', '1', 'Number of ports for TCP binary protocol server to try if configured port is already in use') + .pc-form-grid-col-60 + +number('Idle query cursor timeout:', `${model}.idleQueryCursorTimeout`, '"connectorIdleQueryCursorTimeout"', enabled, '600000', '0', + 'Reject open query cursors that is not used timeout<br/>\ + If no fetch query request come within idle timeout, it will be removed on next check for old query cursors') + .pc-form-grid-col-60 + +number('Idle query cursor check frequency:', `${model}.idleQueryCursorCheckFrequency`, '"connectorIdleQueryCursorCheckFrequency"', enabled, '60000', '0', + 'Idle query cursors check frequency<br/>\ + This setting is used to reject open query cursors that is not used') + .pc-form-grid-col-30 + +number('Idle timeout:', `${model}.idleTimeout`, '"connectorIdleTimeout"', enabled, '7000', '0', + 'Idle timeout for REST server<br/>\ + This setting is used to reject half - opened sockets<br/>\ + If no packets come within idle timeout, the connection is closed') + .pc-form-grid-col-30 + +number('Receive buffer size:', `${model}.receiveBufferSize`, '"connectorReceiveBufferSize"', enabled, '32768', '0', 'REST TCP server receive buffer size') + .pc-form-grid-col-30 + +number('Send buffer size:', `${model}.sendBufferSize`, '"connectorSendBufferSize"', enabled, '32768', '0', 'REST TCP server send buffer size') + .pc-form-grid-col-30 + +number('Send queue limit:', `${model}.sendQueueLimit`, '"connectorSendQueueLimit"', enabled, 'unlimited', '0', + 'REST TCP server send queue limit<br/>\ + If the limit exceeds, all successive writes will block until the queue has enough capacity') + .pc-form-grid-col-60 + +checkbox-enabled('Direct buffer', `${model}.directBuffer`, '"connectorDirectBuffer"', enabled, + 'Flag indicating whether REST TCP server should use direct buffers<br/>\ + A direct buffer is a buffer that is allocated and accessed using native system calls, without using JVM heap<br/>\ + Enabling direct buffer may improve performance and avoid memory issues(long GC pauses due to huge buffer size)') + .pc-form-grid-col-60 + +checkbox-enabled('TCP_NODELAY option', `${model}.noDelay`, '"connectorNoDelay"', enabled, + 'Flag indicating whether TCP_NODELAY option should be set for accepted client connections<br/>\ + Setting this option reduces network latency and should be enabled in majority of cases<br/>\ + For more information, see Socket#setTcpNoDelay(boolean)') + .pc-form-grid-col-30 + +number('Selector count:', `${model}.selectorCount`, '"connectorSelectorCount"', enabled, 'min(4, availableProcessors)', '1', + 'Number of selector threads in REST TCP server<br/>\ + Higher value for this parameter may increase throughput, but also increases context switching') + .pc-form-grid-col-30 + +number('Thread pool size:', `${model}.threadPoolSize`, '"connectorThreadPoolSize"', enabled, 'max(8, availableProcessors) * 2', '1', + 'Thread pool size to use for processing of client messages (REST requests)') + .pc-form-grid-col-60 + +java-class('Message interceptor:', `${model}.messageInterceptor`, '"connectorMessageInterceptor"', enabled, 'false', + 'Interceptor allows to transform all objects exchanged via REST protocol<br/>\ + For example if you use custom serialisation on client you can write interceptor to transform binary representations received from client to Java objects and later access them from java code directly') + .pc-form-grid-col-60 + +text-enabled('Secret key:', `${model}.secretKey`, '"connectorSecretKey"', enabled, 'false', 'Specify to enable authentication', 'Secret key to authenticate REST requests') + .pc-form-grid-col-60 + +checkbox-enabled('Enable SSL', `${model}.sslEnabled`, '"connectorSslEnabled"', enabled, 'Enables/disables SSL for REST TCP binary protocol') + .pc-form-grid-col-60 + +checkbox-enabled('Enable SSL client auth', `${model}.sslClientAuth`, '"connectorSslClientAuth"', sslEnabled, 'Flag indicating whether or not SSL client authentication is required') + .pc-form-grid-col-60 + +java-class('SSL factory:', `${model}.sslFactory`, '"connectorSslFactory"', sslEnabled, sslEnabled, + 'Instance of Factory that will be used to create an instance of SSLContext for Secure Socket Layer on TCP binary protocol') + .pca-form-column-6 + +preview-xml-java(model, 'clusterConnector') http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/data-storage.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/data-storage.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/data-storage.pug index b605fad..c9fea56 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/data-storage.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/data-storage.pug @@ -135,170 +135,167 @@ mixin data-region-form({modelAt, namePlaceholder, dataRegionsAt}) +checkbox('Persistence enabled', `${modelAt}.persistenceEnabled`, '"RegionPersistenceEnabled" + $index', 'Enable Ignite Native Persistence') -.pca-panel.pca-panel-default(ng-show='$ctrl.available("2.3.0")' ng-form=form novalidate) - .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`) - ignite-form-panel-chevron - .pca-panel-heading-title Data storage configuration - .pca-panel-heading-description - | Page memory is a manageable off-heap based memory architecture that is split into pages of fixed size. - | #[a.link-success(href="https://apacheignite.readme.io/docs/distributed-persistent-store" target="_blank") More info] - .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) - .pca-panel-body(ng-if=`$ctrl.available("2.3.0") && ui.isPanelLoaded('${form}')`).pca-form-row - .pca-form-column-6.pc-form-grid-row +panel-collapsible(ng-show='$ctrl.available("2.3.0")' ng-form=form on-open=`ui.loadPanel('${form}')`) + panel-title Data storage configuration + panel-description + | Page memory is a manageable off-heap based memory architecture that is split into pages of fixed size. + | #[a.link-success(href="https://apacheignite.readme.io/docs/distributed-persistent-store" target="_blank") More info] + 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-30 + +sane-ignite-form-field-dropdown({ + label: 'Page size:', + model: `${model}.pageSize`, + name: '"DataStorageConfigurationPageSize"', + options: `$ctrl.Clusters.dataStorageConfiguration.pageSize.values`, + tip: 'Every memory region is split on pages of fixed size' + }) + .pc-form-grid-col-30 + +number('Concurrency level:', model + '.concurrencyLevel', '"DataStorageConfigurationConcurrencyLevel"', + 'true', 'availableProcessors', '2', 'The number of concurrent segments in Ignite internal page mapping tables') + .pc-form-grid-col-60.pc-form-group__text-title + span System region + .pc-form-group.pc-form-grid-row .pc-form-grid-col-30 - +sane-ignite-form-field-dropdown({ - label: 'Page size:', - model: `${model}.pageSize`, - name: '"DataStorageConfigurationPageSize"', - options: `$ctrl.Clusters.dataStorageConfiguration.pageSize.values`, - tip: 'Every memory region is split on pages of fixed size' - }) + pc-form-field-size( + label='Initial size:' + ng-model=`${model}.systemRegionInitialSize` + name='DataStorageSystemRegionInitialSize' + placeholder='{{ $ctrl.Clusters.dataStorageConfiguration.systemRegionInitialSize.default / systemRegionInitialSizeScale.value }}' + min='{{ ::$ctrl.Clusters.dataStorageConfiguration.systemRegionInitialSize.min }}' + tip='Initial size of a data region reserved for system cache' + on-scale-change='systemRegionInitialSizeScale = $event' + ) .pc-form-grid-col-30 - +number('Concurrency level:', model + '.concurrencyLevel', '"DataStorageConfigurationConcurrencyLevel"', - 'true', 'availableProcessors', '2', 'The number of concurrent segments in Ignite internal page mapping tables') - .pc-form-grid-col-60.pc-form-group__text-title - span System region - .pc-form-group.pc-form-grid-row - .pc-form-grid-col-30 - pc-form-field-size( - label='Initial size:' - ng-model=`${model}.systemRegionInitialSize` - name='DataStorageSystemRegionInitialSize' - placeholder='{{ $ctrl.Clusters.dataStorageConfiguration.systemRegionInitialSize.default / systemRegionInitialSizeScale.value }}' - min='{{ ::$ctrl.Clusters.dataStorageConfiguration.systemRegionInitialSize.min }}' - tip='Initial size of a data region reserved for system cache' - on-scale-change='systemRegionInitialSizeScale = $event' - ) - .pc-form-grid-col-30 - pc-form-field-size( - label='Max size:' - ng-model=`${model}.systemRegionMaxSize` - name='DataStorageSystemRegionMaxSize' - placeholder='{{ $ctrl.Clusters.dataStorageConfiguration.systemRegionMaxSize.default / systemRegionMaxSizeScale.value }}' - min='{{ $ctrl.Clusters.dataStorageConfiguration.systemRegionMaxSize.min($ctrl.clonedCluster) }}' - tip='Maximum data region size reserved for system cache' - on-scale-change='systemRegionMaxSizeScale = $event' - ) - .pc-form-grid-col-60.pc-form-group__text-title - span Default data region - .pc-form-group.pc-form-grid-row - +data-region-form({ - modelAt: dfltRegionModel, - namePlaceholder: '{{ ::$ctrl.Clusters.dataRegion.name.default }}', - dataRegionsAt: dataRegionConfigurations - }) - .pc-form-grid-col-60 - .ignite-form-field - .ignite-form-field__label Data region configurations - .ignite-form-field__control - list-editable(name='dataRegionConfigurations' ng-model=dataRegionConfigurations) - list-editable-item-edit.pc-form-grid-row - - form = '$parent.form' - +data-region-form({ - modelAt: '$item', - namePlaceholder: 'Data region name', - dataRegionsAt: dataRegionConfigurations - }) - - form = 'dataStorageConfiguration' - list-editable-no-items - list-editable-add-item-button( - add-item=`$ctrl.Clusters.addDataRegionConfiguration($ctrl.clonedCluster)` - label-single='data region configuration' - label-multiple='data region configurations' - ) + pc-form-field-size( + label='Max size:' + ng-model=`${model}.systemRegionMaxSize` + name='DataStorageSystemRegionMaxSize' + placeholder='{{ $ctrl.Clusters.dataStorageConfiguration.systemRegionMaxSize.default / systemRegionMaxSizeScale.value }}' + min='{{ $ctrl.Clusters.dataStorageConfiguration.systemRegionMaxSize.min($ctrl.clonedCluster) }}' + tip='Maximum data region size reserved for system cache' + on-scale-change='systemRegionMaxSizeScale = $event' + ) + .pc-form-grid-col-60.pc-form-group__text-title + span Default data region + .pc-form-group.pc-form-grid-row + +data-region-form({ + modelAt: dfltRegionModel, + namePlaceholder: '{{ ::$ctrl.Clusters.dataRegion.name.default }}', + dataRegionsAt: dataRegionConfigurations + }) + .pc-form-grid-col-60 + .ignite-form-field + .ignite-form-field__label Data region configurations + .ignite-form-field__control + list-editable(name='dataRegionConfigurations' ng-model=dataRegionConfigurations) + list-editable-item-edit.pc-form-grid-row + - form = '$parent.form' + +data-region-form({ + modelAt: '$item', + namePlaceholder: 'Data region name', + dataRegionsAt: dataRegionConfigurations + }) + - form = 'dataStorageConfiguration' + list-editable-no-items + list-editable-add-item-button( + add-item=`$ctrl.Clusters.addDataRegionConfiguration($ctrl.clonedCluster)` + label-single='data region configuration' + label-multiple='data region configurations' + ) - .pc-form-grid-col-60 - +text-enabled('Storage path:', `${model}.storagePath`, '"DataStoragePath"', 'true', 'false', 'db', - 'Directory where index and partition files are stored') - .pc-form-grid-col-60 - +number('Checkpoint frequency:', `${model}.checkpointFrequency`, '"DataStorageCheckpointFrequency"', 'true', '180000', '1', - 'Frequency which is a minimal interval when the dirty pages will be written to the Persistent Store') - .pc-form-grid-col-20 - +number('Checkpoint threads:', `${model}.checkpointThreads`, '"DataStorageCheckpointThreads"', 'true', '4', '1', 'A number of threads to use for the checkpoint purposes') - .pc-form-grid-col-20 - +dropdown('Checkpoint write order:', `${model}.checkpointWriteOrder`, '"DataStorageCheckpointWriteOrder"', 'true', 'SEQUENTIAL', - '[\ - {value: "RANDOM", label: "RANDOM"},\ - {value: "SEQUENTIAL", label: "SEQUENTIAL"}\ - ]', - 'Order of writing pages to disk storage during checkpoint.\ - <ul>\ - <li>RANDOM - Pages are written in order provided by checkpoint pages collection iterator</li>\ - <li>SEQUENTIAL - All checkpoint pages are collected into single list and sorted by page index</li>\ - </ul>') - .pc-form-grid-col-20 - +dropdown('WAL mode:', `${model}.walMode`, '"DataStorageWalMode"', 'true', 'DEFAULT', - '[\ - {value: "DEFAULT", label: "DEFAULT"},\ - {value: "LOG_ONLY", label: "LOG_ONLY"},\ - {value: "BACKGROUND", label: "BACKGROUND"},\ - {value: "NONE", label: "NONE"}\ - ]', - 'Type define behavior wal fsync.\ - <ul>\ - <li>DEFAULT - full-sync disk writes</li>\ - <li>LOG_ONLY - flushes application buffers</li>\ - <li>BACKGROUND - does not force application's buffer flush</li>\ - <li>NONE - WAL is disabled</li>\ - </ul>') - .pc-form-grid-col-60 - +text-enabled('WAL path:', `${model}.walPath`, '"DataStorageWalPath"', 'true', 'false', 'db/wal', 'A path to the directory where WAL is stored') - .pc-form-grid-col-60 - +text-enabled('WAL archive path:', `${model}.walArchivePath`, '"DataStorageWalArchivePath"', 'true', 'false', 'db/wal/archive', 'A path to the WAL archive directory') - .pc-form-grid-col-20 - +number('WAL segments:', `${model}.walSegments`, '"DataStorageWalSegments"', 'true', '10', '1', 'A number of WAL segments to work with') - .pc-form-grid-col-20 - +number('WAL segment size:', `${model}.walSegmentSize`, '"DataStorageWalSegmentSize"', 'true', '67108864', '0', 'Size of a WAL segment') - .pc-form-grid-col-20 - +number('WAL history size:', `${model}.walHistorySize`, '"DataStorageWalHistorySize"', 'true', '20', '1', 'A total number of checkpoints to keep in the WAL history') - .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")') - +number('WAL buffer size:', `${model}.walBufferSize`, '"DataStorageWalBufferSize"', 'true', 'WAL segment size / 4', '1', - 'Size of WAL buffer') - .pc-form-grid-col-30 - +number('WAL flush frequency:', `${model}.walFlushFrequency`, '"DataStorageWalFlushFrequency"', 'true', '2000', '1', - 'How often will be fsync, in milliseconds. In background mode, exist thread which do fsync by timeout') - .pc-form-grid-col-30 - +number('WAL fsync delay:', `${model}.walFsyncDelayNanos`, '"DataStorageWalFsyncDelay"', 'true', '1000', '1', 'WAL fsync delay, in nanoseconds') - .pc-form-grid-col-60 - +number('WAL record iterator buffer size:', `${model}.walRecordIteratorBufferSize`, '"DataStorageWalRecordIteratorBufferSize"', 'true', '67108864', '1', - 'How many bytes iterator read from disk(for one reading), during go ahead WAL') - .pc-form-grid-col-30 - +number('Lock wait time:', `${model}.lockWaitTime`, '"DataStorageLockWaitTime"', 'true', '10000', '1', - 'Time out in milliseconds, while wait and try get file lock for start persist manager') - .pc-form-grid-col-30 - +number('WAL thread local buffer size:', `${model}.walThreadLocalBufferSize`, '"DataStorageWalThreadLocalBufferSize"', 'true', '131072', '1', - 'Define size thread local buffer. Each thread which write to WAL have thread local buffer for serialize recode before write in WAL') - .pc-form-grid-col-30 - +number('Metrics sub interval count:', `${model}.metricsSubIntervalCount`, '"DataStorageMetricsSubIntervalCount"', 'true', '5', '1', - 'Number of sub - intervals the whole rate time interval will be split into to calculate rate - based metrics') - .pc-form-grid-col-30 - +number('Metrics rate time interval:', `${model}.metricsRateTimeInterval`, '"DataStorageMetricsRateTimeInterval"', 'true', '60000', '1000', - 'The length of the time interval for rate - based metrics. This interval defines a window over which hits will be tracked') - .pc-form-grid-col-30 - +dropdown('File IO factory:', `${model}.fileIOFactory`, '"DataStorageFileIOFactory"', 'true', 'Default', - '[\ - {value: "RANDOM", label: "RANDOM"},\ - {value: "ASYNC", label: "ASYNC"},\ - {value: null, label: "Default"},\ - ]', - 'Order of writing pages to disk storage during checkpoint.\ - <ul>\ - <li>RANDOM - Pages are written in order provided by checkpoint pages collection iterator</li>\ - <li>SEQUENTIAL - All checkpoint pages are collected into single list and sorted by page index</li>\ - </ul>') - .pc-form-grid-col-30 - +number('WAL auto archive after inactivity:', `${model}.walAutoArchiveAfterInactivity`, '"DataStorageWalAutoArchiveAfterInactivity"', 'true', '-1', '-1', - 'Time in millis to run auto archiving segment after last record logging') - .pc-form-grid-col-60 - +checkbox-enabled('Metrics enabled', `${model}.metricsEnabled`, '"DataStorageMetricsEnabled"', 'true', 'Flag indicating whether persistence metrics collection is enabled') - .pc-form-grid-col-60 - +checkbox-enabled('Always write full pages', `${model}.alwaysWriteFullPages`, '"DataStorageAlwaysWriteFullPages"', 'true', 'Flag indicating whether always write full pages') - .pc-form-grid-col-60 - +checkbox('Write throttling enabled', `${model}.writeThrottlingEnabled`, '"DataStorageWriteThrottlingEnabled"', - 'Throttle threads that generate dirty pages too fast during ongoing checkpoint') - .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")') - +checkbox('Enable WAL compaction', `${model}.walCompactionEnabled`, '"DataStorageWalCompactionEnabled"', - 'If true, system filters and compresses WAL archive in background') + .pc-form-grid-col-60 + +text-enabled('Storage path:', `${model}.storagePath`, '"DataStoragePath"', 'true', 'false', 'db', + 'Directory where index and partition files are stored') + .pc-form-grid-col-60 + +number('Checkpoint frequency:', `${model}.checkpointFrequency`, '"DataStorageCheckpointFrequency"', 'true', '180000', '1', + 'Frequency which is a minimal interval when the dirty pages will be written to the Persistent Store') + .pc-form-grid-col-20 + +number('Checkpoint threads:', `${model}.checkpointThreads`, '"DataStorageCheckpointThreads"', 'true', '4', '1', 'A number of threads to use for the checkpoint purposes') + .pc-form-grid-col-20 + +dropdown('Checkpoint write order:', `${model}.checkpointWriteOrder`, '"DataStorageCheckpointWriteOrder"', 'true', 'SEQUENTIAL', + '[\ + {value: "RANDOM", label: "RANDOM"},\ + {value: "SEQUENTIAL", label: "SEQUENTIAL"}\ + ]', + 'Order of writing pages to disk storage during checkpoint.\ + <ul>\ + <li>RANDOM - Pages are written in order provided by checkpoint pages collection iterator</li>\ + <li>SEQUENTIAL - All checkpoint pages are collected into single list and sorted by page index</li>\ + </ul>') + .pc-form-grid-col-20 + +dropdown('WAL mode:', `${model}.walMode`, '"DataStorageWalMode"', 'true', 'DEFAULT', + '[\ + {value: "DEFAULT", label: "DEFAULT"},\ + {value: "LOG_ONLY", label: "LOG_ONLY"},\ + {value: "BACKGROUND", label: "BACKGROUND"},\ + {value: "NONE", label: "NONE"}\ + ]', + 'Type define behavior wal fsync.\ + <ul>\ + <li>DEFAULT - full-sync disk writes</li>\ + <li>LOG_ONLY - flushes application buffers</li>\ + <li>BACKGROUND - does not force application's buffer flush</li>\ + <li>NONE - WAL is disabled</li>\ + </ul>') + .pc-form-grid-col-60 + +text-enabled('WAL path:', `${model}.walPath`, '"DataStorageWalPath"', 'true', 'false', 'db/wal', 'A path to the directory where WAL is stored') + .pc-form-grid-col-60 + +text-enabled('WAL archive path:', `${model}.walArchivePath`, '"DataStorageWalArchivePath"', 'true', 'false', 'db/wal/archive', 'A path to the WAL archive directory') + .pc-form-grid-col-20 + +number('WAL segments:', `${model}.walSegments`, '"DataStorageWalSegments"', 'true', '10', '1', 'A number of WAL segments to work with') + .pc-form-grid-col-20 + +number('WAL segment size:', `${model}.walSegmentSize`, '"DataStorageWalSegmentSize"', 'true', '67108864', '0', 'Size of a WAL segment') + .pc-form-grid-col-20 + +number('WAL history size:', `${model}.walHistorySize`, '"DataStorageWalHistorySize"', 'true', '20', '1', 'A total number of checkpoints to keep in the WAL history') + .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")') + +number('WAL buffer size:', `${model}.walBufferSize`, '"DataStorageWalBufferSize"', 'true', 'WAL segment size / 4', '1', + 'Size of WAL buffer') + .pc-form-grid-col-30 + +number('WAL flush frequency:', `${model}.walFlushFrequency`, '"DataStorageWalFlushFrequency"', 'true', '2000', '1', + 'How often will be fsync, in milliseconds. In background mode, exist thread which do fsync by timeout') + .pc-form-grid-col-30 + +number('WAL fsync delay:', `${model}.walFsyncDelayNanos`, '"DataStorageWalFsyncDelay"', 'true', '1000', '1', 'WAL fsync delay, in nanoseconds') + .pc-form-grid-col-60 + +number('WAL record iterator buffer size:', `${model}.walRecordIteratorBufferSize`, '"DataStorageWalRecordIteratorBufferSize"', 'true', '67108864', '1', + 'How many bytes iterator read from disk(for one reading), during go ahead WAL') + .pc-form-grid-col-30 + +number('Lock wait time:', `${model}.lockWaitTime`, '"DataStorageLockWaitTime"', 'true', '10000', '1', + 'Time out in milliseconds, while wait and try get file lock for start persist manager') + .pc-form-grid-col-30 + +number('WAL thread local buffer size:', `${model}.walThreadLocalBufferSize`, '"DataStorageWalThreadLocalBufferSize"', 'true', '131072', '1', + 'Define size thread local buffer. Each thread which write to WAL have thread local buffer for serialize recode before write in WAL') + .pc-form-grid-col-30 + +number('Metrics sub interval count:', `${model}.metricsSubIntervalCount`, '"DataStorageMetricsSubIntervalCount"', 'true', '5', '1', + 'Number of sub - intervals the whole rate time interval will be split into to calculate rate - based metrics') + .pc-form-grid-col-30 + +number('Metrics rate time interval:', `${model}.metricsRateTimeInterval`, '"DataStorageMetricsRateTimeInterval"', 'true', '60000', '1000', + 'The length of the time interval for rate - based metrics. This interval defines a window over which hits will be tracked') + .pc-form-grid-col-30 + +dropdown('File IO factory:', `${model}.fileIOFactory`, '"DataStorageFileIOFactory"', 'true', 'Default', + '[\ + {value: "RANDOM", label: "RANDOM"},\ + {value: "ASYNC", label: "ASYNC"},\ + {value: null, label: "Default"},\ + ]', + 'Order of writing pages to disk storage during checkpoint.\ + <ul>\ + <li>RANDOM - Pages are written in order provided by checkpoint pages collection iterator</li>\ + <li>SEQUENTIAL - All checkpoint pages are collected into single list and sorted by page index</li>\ + </ul>') + .pc-form-grid-col-30 + +number('WAL auto archive after inactivity:', `${model}.walAutoArchiveAfterInactivity`, '"DataStorageWalAutoArchiveAfterInactivity"', 'true', '-1', '-1', + 'Time in millis to run auto archiving segment after last record logging') + .pc-form-grid-col-60 + +checkbox-enabled('Metrics enabled', `${model}.metricsEnabled`, '"DataStorageMetricsEnabled"', 'true', 'Flag indicating whether persistence metrics collection is enabled') + .pc-form-grid-col-60 + +checkbox-enabled('Always write full pages', `${model}.alwaysWriteFullPages`, '"DataStorageAlwaysWriteFullPages"', 'true', 'Flag indicating whether always write full pages') + .pc-form-grid-col-60 + +checkbox('Write throttling enabled', `${model}.writeThrottlingEnabled`, '"DataStorageWriteThrottlingEnabled"', + 'Throttle threads that generate dirty pages too fast during ongoing checkpoint') + .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")') + +checkbox('Enable WAL compaction', `${model}.walCompactionEnabled`, '"DataStorageWalCompactionEnabled"', + 'If true, system filters and compresses WAL archive in background') - .pca-form-column-6 - +preview-xml-java(model, 'clusterDataStorageConfiguration') + .pca-form-column-6 + +preview-xml-java(model, 'clusterDataStorageConfiguration') http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/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 10244ac..1f0b615 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 @@ -27,169 +27,166 @@ include /app/helpers/jade/mixins -var localDeployment = modelDeployment + '.kind === "Local"' -var customDeployment = modelDeployment + '.kind === "Custom"' -.pca-panel.pca-panel-default(ng-form=form novalidate) - .pca-panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`) - ignite-form-panel-chevron - .pca-panel-heading-title Class deployment - .pca-panel-heading-description - | Task and resources deployment in cluster. - | #[a.link-success(href="https://apacheignite.readme.io/docs/deployment-modes" target="_blank") More info] - .pca-panel-collapse(role='tabpanel' bs-collapse-target id='deployment') - .pca-panel-body(ng-if=`ui.isPanelLoaded('${form}')`).pca-form-row - .pca-form-column-6.pc-form-grid-row - .pc-form-grid-col-60 - +dropdown('Deployment mode:', `${model}.deploymentMode`, '"deploymentMode"', 'true', 'SHARED', - '[\ - {value: "PRIVATE", label: "PRIVATE"},\ - {value: "ISOLATED", label: "ISOLATED"}, \ - {value: "SHARED", label: "SHARED"},\ - {value: "CONTINUOUS", label: "CONTINUOUS"}\ - ]', - 'Task classes and resources sharing mode<br/>\ - The following deployment modes are supported:\ - <ul>\ - <li>PRIVATE - in this mode deployed classes do not share resources</li>\ - <li>ISOLATED - in this mode tasks or classes deployed within the same class loader will share the same instances of resources</li>\ - <li>SHARED - same as ISOLATED, but now tasks from different master nodes with the same user version and same class loader will share the same class loader on remote nodes</li>\ - <li>CONTINUOUS - same as SHARED deployment mode, but resources will not be undeployed even after all master nodes left grid</li>\ - </ul>') - .pc-form-grid-col-60 - +checkbox('Enable peer class loading', `${model}.peerClassLoadingEnabled`, '"peerClassLoadingEnabled"', 'Enables/disables peer class loading') - .pc-form-grid-col-60 - +number('Missed resources cache size:', `${model}.peerClassLoadingMissedResourcesCacheSize`, '"peerClassLoadingMissedResourcesCacheSize"', enabled, '100', '0', - 'If size greater than 0, missed resources will be cached and next resource request ignored<br/>\ - If size is 0, then request for the resource will be sent to the remote node every time this resource is requested') - .pc-form-grid-col-60 - +number('Pool size:', `${model}.peerClassLoadingThreadPoolSize`, '"peerClassLoadingThreadPoolSize"', enabled, '2', '1', 'Thread pool size to use for peer class loading') +panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`) + panel-title Class deployment + panel-description + | Task and resources deployment in cluster. + | #[a.link-success(href="https://apacheignite.readme.io/docs/deployment-modes" 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('Deployment mode:', `${model}.deploymentMode`, '"deploymentMode"', 'true', 'SHARED', + '[\ + {value: "PRIVATE", label: "PRIVATE"},\ + {value: "ISOLATED", label: "ISOLATED"}, \ + {value: "SHARED", label: "SHARED"},\ + {value: "CONTINUOUS", label: "CONTINUOUS"}\ + ]', + 'Task classes and resources sharing mode<br/>\ + The following deployment modes are supported:\ + <ul>\ + <li>PRIVATE - in this mode deployed classes do not share resources</li>\ + <li>ISOLATED - in this mode tasks or classes deployed within the same class loader will share the same instances of resources</li>\ + <li>SHARED - same as ISOLATED, but now tasks from different master nodes with the same user version and same class loader will share the same class loader on remote nodes</li>\ + <li>CONTINUOUS - same as SHARED deployment mode, but resources will not be undeployed even after all master nodes left grid</li>\ + </ul>') + .pc-form-grid-col-60 + +checkbox('Enable peer class loading', `${model}.peerClassLoadingEnabled`, '"peerClassLoadingEnabled"', 'Enables/disables peer class loading') + .pc-form-grid-col-60 + +number('Missed resources cache size:', `${model}.peerClassLoadingMissedResourcesCacheSize`, '"peerClassLoadingMissedResourcesCacheSize"', enabled, '100', '0', + 'If size greater than 0, missed resources will be cached and next resource request ignored<br/>\ + If size is 0, then request for the resource will be sent to the remote node every time this resource is requested') + .pc-form-grid-col-60 + +number('Pool size:', `${model}.peerClassLoadingThreadPoolSize`, '"peerClassLoadingThreadPoolSize"', enabled, '2', '1', 'Thread pool size to use for peer class loading') + .pc-form-grid-col-60 + mixin clusters-deployment-packages + .ignite-form-field + -let items = exclude + -var uniqueTip = 'Such package already exists!' + + list-editable( + ng-model=items + name='localClassPathExclude' + list-editable-cols=`::[{ + name: "Local class path excludes:", + tip: "List of packages from the system classpath that need to be peer-to-peer loaded from task originating node<br/> + '*' is supported at the end of the package name which means that all sub-packages and their classes are included like in Java package import clause" + }]` + ng-disabled=enabledToDisabled(enabled) + ) + list-editable-item-view {{ $item }} + + list-editable-item-edit + +list-java-package-field('Package name', '$item', '"packageName"', items)( + ignite-auto-focus + ) + +unique-feedback('"packageName"', uniqueTip) + + list-editable-no-items + list-editable-add-item-button( + add-item=`$editLast($ctrl.Clusters.addPeerClassLoadingLocalClassPathExclude(${model}))` + label-single='package' + label-multiple='packages' + ) + + -var form = '$parent.form' + +clusters-deployment-packages + -var form = 'deployment' + + //- Since ignite 2.0 + .pc-form-grid-col-60(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') + + .pc-form-grid-col-60 + +dropdown('Deployment variant:', modelDeployment + '.kind', '"deploymentKind"', 'true', 'Default', + '[\ + {value: "URI", label: "URI"},\ + {value: "Local", label: "Local"}, \ + {value: "Custom", label: "Custom"},\ + {value: null, label: "Default"}\ + ]', + 'Grid deployment SPI is in charge of deploying tasks and classes from different sources:\ + <ul>\ + <li>URI - Deploy tasks from different sources like file system folders, email and HTTP</li>\ + <li>Local - Only within VM deployment on local node</li>\ + <li>Custom - Custom implementation of DeploymentSpi</li>\ + <li>Default - Default configuration of LocalDeploymentSpi will be used</li>\ + </ul>') + .pc-form-group(ng-show=uriDeployment).pc-form-grid-row .pc-form-grid-col-60 - mixin clusters-deployment-packages + mixin clusters-deployment-uri .ignite-form-field - -let items = exclude - -var uniqueTip = 'Such package already exists!' + -let items = uriListModel + -var uniqueTip = 'Such URI already configured!' list-editable( ng-model=items - name='localClassPathExclude' + name='uriList' list-editable-cols=`::[{ - name: "Local class path excludes:", - tip: "List of packages from the system classpath that need to be peer-to-peer loaded from task originating node<br/> - '*' is supported at the end of the package name which means that all sub-packages and their classes are included like in Java package import clause" + name: "URI list:", + tip: "List of URI which point to GAR file and which should be scanned by SPI for the new tasks" }]` - ng-disabled=enabledToDisabled(enabled) ) list-editable-item-view {{ $item }} list-editable-item-edit - +list-java-package-field('Package name', '$item', '"packageName"', items)( - ignite-auto-focus - ) - +unique-feedback('"packageName"', uniqueTip) + +list-url-field('URL', '$item', '"url"', items) + +unique-feedback('"url"', uniqueTip) list-editable-no-items list-editable-add-item-button( - add-item=`$editLast($ctrl.Clusters.addPeerClassLoadingLocalClassPathExclude(${model}))` - label-single='package' - label-multiple='packages' + add-item=`$editLast((${items} = ${items} || []).push(''))` + label-single='URI' + label-multiple='URIs' ) - -var form = '$parent.form' - +clusters-deployment-packages - -var form = 'deployment' + - var form = '$parent.form' + +clusters-deployment-uri + - var form = 'deployment' + + .pc-form-grid-col-60 + +text('Temporary directory path:', modelDeployment + '.URI.temporaryDirectoryPath', '"DeploymentURITemporaryDirectoryPath"', 'false', 'Temporary directory path', + 'Absolute path to temporary directory which will be used by deployment SPI to keep all deployed classes in') + .pc-form-grid-col-60 + mixin clusters-deployment-scanner + .ignite-form-field + -let items = scannerModel + -var uniqueTip = 'Such scanner already configured!' + + list-editable( + ng-model=items + name='scannerModel' + list-editable-cols=`::[{name: "URI deployment scanners:"}]` + ) + list-editable-item-view {{ $item }} + + list-editable-item-edit + +list-java-class-field('Scanner', '$item', '"scanner"', items) + +unique-feedback('"scanner"', uniqueTip) - //- Since ignite 2.0 - .pc-form-grid-col-60(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') + list-editable-no-items + list-editable-add-item-button( + add-item=`$editLast((${items} = ${items} || []).push(''))` + label-single='scanner' + label-multiple='scanners' + ) + + - var form = '$parent.form' + +clusters-deployment-scanner + - var form = 'deployment' .pc-form-grid-col-60 - +dropdown('Deployment variant:', modelDeployment + '.kind', '"deploymentKind"', 'true', 'Default', - '[\ - {value: "URI", label: "URI"},\ - {value: "Local", label: "Local"}, \ - {value: "Custom", label: "Custom"},\ - {value: null, label: "Default"}\ - ]', - 'Grid deployment SPI is in charge of deploying tasks and classes from different sources:\ - <ul>\ - <li>URI - Deploy tasks from different sources like file system folders, email and HTTP</li>\ - <li>Local - Only within VM deployment on local node</li>\ - <li>Custom - Custom implementation of DeploymentSpi</li>\ - <li>Default - Default configuration of LocalDeploymentSpi will be used</li>\ - </ul>') - .pc-form-group(ng-show=uriDeployment).pc-form-grid-row - .pc-form-grid-col-60 - mixin clusters-deployment-uri - .ignite-form-field - -let items = uriListModel - -var uniqueTip = 'Such URI already configured!' - - list-editable( - ng-model=items - name='uriList' - list-editable-cols=`::[{ - name: "URI list:", - tip: "List of URI which point to GAR file and which should be scanned by SPI for the new tasks" - }]` - ) - list-editable-item-view {{ $item }} - - list-editable-item-edit - +list-url-field('URL', '$item', '"url"', items) - +unique-feedback('"url"', uniqueTip) - - list-editable-no-items - list-editable-add-item-button( - add-item=`$editLast((${items} = ${items} || []).push(''))` - label-single='URI' - label-multiple='URIs' - ) - - - var form = '$parent.form' - +clusters-deployment-uri - - var form = 'deployment' - - .pc-form-grid-col-60 - +text('Temporary directory path:', modelDeployment + '.URI.temporaryDirectoryPath', '"DeploymentURITemporaryDirectoryPath"', 'false', 'Temporary directory path', - 'Absolute path to temporary directory which will be used by deployment SPI to keep all deployed classes in') - .pc-form-grid-col-60 - mixin clusters-deployment-scanner - .ignite-form-field - -let items = scannerModel - -var uniqueTip = 'Such scanner already configured!' - - list-editable( - ng-model=items - name='scannerModel' - list-editable-cols=`::[{name: "URI deployment scanners:"}]` - ) - list-editable-item-view {{ $item }} - - list-editable-item-edit - +list-java-class-field('Scanner', '$item', '"scanner"', items) - +unique-feedback('"scanner"', uniqueTip) - - list-editable-no-items - list-editable-add-item-button( - add-item=`$editLast((${items} = ${items} || []).push(''))` - label-single='scanner' - label-multiple='scanners' - ) - - - var form = '$parent.form' - +clusters-deployment-scanner - - var form = 'deployment' - - .pc-form-grid-col-60 - +java-class('Listener:', `${modelDeployment}.URI.listener`, '"DeploymentURIListener"', 'true', 'false', 'Deployment event listener', uriDeployment) - .pc-form-grid-col-60 - +checkbox('Check MD5', `${modelDeployment}.URI.checkMd5`, '"DeploymentURICheckMd5"', 'Exclude files with same md5s from deployment') - .pc-form-grid-col-60 - +checkbox('Encode URI', `${modelDeployment}.URI.encodeUri`, '"DeploymentURIEncodeUri"', 'URI must be encoded before usage') - .pc-form-group(ng-show=localDeployment).pc-form-grid-row - .pc-form-grid-col-60 - +java-class('Listener:', `${modelDeployment}.Local.listener`, '"DeploymentLocalListener"', 'true', 'false', 'Deployment event listener', localDeployment) - .pc-form-group(ng-show=customDeployment).pc-form-grid-row - .pc-form-grid-col-60 - +java-class('Class:', `${modelDeployment}.Custom.className`, '"DeploymentCustom"', 'true', customDeployment, 'DeploymentSpi implementation class', customDeployment) - .pca-form-column-6 - +preview-xml-java(model, 'clusterDeployment') + +java-class('Listener:', `${modelDeployment}.URI.listener`, '"DeploymentURIListener"', 'true', 'false', 'Deployment event listener', uriDeployment) + .pc-form-grid-col-60 + +checkbox('Check MD5', `${modelDeployment}.URI.checkMd5`, '"DeploymentURICheckMd5"', 'Exclude files with same md5s from deployment') + .pc-form-grid-col-60 + +checkbox('Encode URI', `${modelDeployment}.URI.encodeUri`, '"DeploymentURIEncodeUri"', 'URI must be encoded before usage') + .pc-form-group(ng-show=localDeployment).pc-form-grid-row + .pc-form-grid-col-60 + +java-class('Listener:', `${modelDeployment}.Local.listener`, '"DeploymentLocalListener"', 'true', 'false', 'Deployment event listener', localDeployment) + .pc-form-group(ng-show=customDeployment).pc-form-grid-row + .pc-form-grid-col-60 + +java-class('Class:', `${modelDeployment}.Custom.className`, '"DeploymentCustom"', 'true', customDeployment, 'DeploymentSpi implementation class', customDeployment) + .pca-form-column-6 + +preview-xml-java(model, 'clusterDeployment')