http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/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 4cfbbaf..32d966a 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 @@ -42,272 +42,269 @@ mixin hibernateField(name, model, items, valid, save, newItem) ignite-on-escape=onEscape ) -.pca-panel(ng-form=form novalidate) - .pca-panel-heading(bs-collapse-toggle='' ng-click=`ui.loadPanel('${form}')`) - ignite-form-panel-chevron - .pca-panel-heading-title Store - .pca-panel-heading-description - | Cache store settings. - | #[a.link-success(href="https://apacheignite.readme.io/docs/3rd-party-store" target="_blank") More info] - .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) - .pca-panel-body.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`) - .pca-form-column-6.pc-form-grid-row - -var storeFactory = `${model}.cacheStoreFactory`; - -var storeFactoryKind = `${storeFactory}.kind`; - .pc-form-grid-col-60 - +sane-ignite-form-field-dropdown({ - label: 'Store factory:', - model: storeFactoryKind, - name: '"cacheStoreFactory"', - placeholder: '{{ ::$ctrl.Caches.cacheStoreFactory.kind.default }}', - options: '::$ctrl.Caches.cacheStoreFactory.values', - tip: `Factory for persistent storage for cache data - <ul> - <li>JDBC POJO store factory - Objects are stored in underlying database by using java beans mapping description via reflection backed by JDBC</li> - <li>JDBC BLOB store factory - Objects are stored in underlying database in BLOB format backed by JDBC</li> - <li>Hibernate BLOB store factory - Objects are stored in underlying database in BLOB format backed by Hibernate</li> - </ul>` - })( - ui-validate=`{ - writeThroughOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.writeThrough)', - readThroughOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.readThrough)', - writeBehindOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.writeBehindEnabled)' - }` - ui-validate-watch-collection=`"[${model}.readThrough, ${model}.writeThrough, ${model}.writeBehindEnabled]"` - ng-model-options='{allowInvalid: true}' - ) - +form-field-feedback(null, 'writeThroughOn', 'Write through is enabled but store is not set') - +form-field-feedback(null, 'readThroughOn', 'Read through is enabled but store is not set') - +form-field-feedback(null, 'writeBehindOn', 'Write-behind is enabled but store is not set') - .pc-form-group(ng-if=storeFactoryKind) - .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheJdbcPojoStoreFactory'`) - -var pojoStoreFactory = `${storeFactory}.CacheJdbcPojoStoreFactory` - -var required = `${storeFactoryKind} === 'CacheJdbcPojoStoreFactory'` +panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`) + panel-title Store + panel-description + | Cache store settings. + | #[a.link-success(href="https://apacheignite.readme.io/docs/3rd-party-store" target="_blank") More info] + panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`) + .pca-form-column-6.pc-form-grid-row + -var storeFactory = `${model}.cacheStoreFactory`; + -var storeFactoryKind = `${storeFactory}.kind`; + .pc-form-grid-col-60 + +sane-ignite-form-field-dropdown({ + label: 'Store factory:', + model: storeFactoryKind, + name: '"cacheStoreFactory"', + placeholder: '{{ ::$ctrl.Caches.cacheStoreFactory.kind.default }}', + options: '::$ctrl.Caches.cacheStoreFactory.values', + tip: `Factory for persistent storage for cache data + <ul> + <li>JDBC POJO store factory - Objects are stored in underlying database by using java beans mapping description via reflection backed by JDBC</li> + <li>JDBC BLOB store factory - Objects are stored in underlying database in BLOB format backed by JDBC</li> + <li>Hibernate BLOB store factory - Objects are stored in underlying database in BLOB format backed by Hibernate</li> + </ul>` + })( + ui-validate=`{ + writeThroughOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.writeThrough)', + readThroughOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.readThrough)', + writeBehindOn: '$ctrl.Caches.cacheStoreFactory.storeDisabledValueOff(${model}, ${model}.writeBehindEnabled)' + }` + ui-validate-watch-collection=`"[${model}.readThrough, ${model}.writeThrough, ${model}.writeBehindEnabled]"` + ng-model-options='{allowInvalid: true}' + ) + +form-field-feedback(null, 'writeThroughOn', 'Write through is enabled but store is not set') + +form-field-feedback(null, 'readThroughOn', 'Read through is enabled but store is not set') + +form-field-feedback(null, 'writeBehindOn', 'Write-behind is enabled but store is not set') + .pc-form-group(ng-if=storeFactoryKind) + .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheJdbcPojoStoreFactory'`) + -var pojoStoreFactory = `${storeFactory}.CacheJdbcPojoStoreFactory` + -var required = `${storeFactoryKind} === 'CacheJdbcPojoStoreFactory'` - .pc-form-grid-col-60 - +sane-ignite-form-field-text({ - label: 'Data source bean name:', - model: `${pojoStoreFactory}.dataSourceBean`, - name: '"pojoDataSourceBean"', - required: required, - placeholder: 'Input bean name', - tip: 'Name of the data source bean in Spring context' - })( - is-valid-java-identifier - not-java-reserved-word - ) - +form-field-feedback(null, 'required', 'Data source bean name is required') - +form-field-feedback(null, 'isValidJavaIdentifier', 'Data source bean name is not a valid Java identifier') - +form-field-feedback(null, 'notJavaReservedWord', 'Data source bean name should not be a Java reserved word') - .pc-form-grid-col-60 - +dialect('Dialect:', `${pojoStoreFactory}.dialect`, '"pojoDialect"', required, - 'Dialect of SQL implemented by a particular RDBMS:', 'Generic JDBC dialect', - 'Choose JDBC dialect') - .pc-form-grid-col-30 - +number('Batch size:', `${pojoStoreFactory}.batchSize`, '"pojoBatchSize"', true, '512', '1', - 'Maximum batch size for writeAll and deleteAll operations') - .pc-form-grid-col-30 - +number('Thread count:', `${pojoStoreFactory}.maximumPoolSize`, '"pojoMaximumPoolSize"', true, 'availableProcessors', '1', - 'Maximum workers thread count.<br/>\ - These threads are responsible for load cache.') - .pc-form-grid-col-30 - +number('Maximum write attempts:', `${pojoStoreFactory}.maximumWriteAttempts`, '"pojoMaximumWriteAttempts"', true, '2', '0', - 'Maximum write attempts in case of database error') - .pc-form-grid-col-30 - +number('Parallel load threshold:', `${pojoStoreFactory}.parallelLoadCacheMinimumThreshold`, '"pojoParallelLoadCacheMinimumThreshold"', true, '512', '0', - 'Parallel load cache minimum threshold.<br/>\ - If <b>0</b> then load sequentially.') - .pc-form-grid-col-60 - +java-class('Hasher', `${pojoStoreFactory}.hasher`, '"pojoHasher"', 'true', 'false', 'Hash calculator', required) - .pc-form-grid-col-60 - +java-class('Transformer', `${pojoStoreFactory}.transformer`, '"pojoTransformer"', 'true', 'false', 'Types transformer', required) - .pc-form-grid-col-60 - +checkbox('Escape table and filed names', `${pojoStoreFactory}.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 CacheJdbcPojoStore internal SQL queries.') - .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheJdbcBlobStoreFactory'`) - -var blobStoreFactory = `${storeFactory}.CacheJdbcBlobStoreFactory` - -var blobStoreFactoryVia = `${blobStoreFactory}.connectVia` + .pc-form-grid-col-60 + +sane-ignite-form-field-text({ + label: 'Data source bean name:', + model: `${pojoStoreFactory}.dataSourceBean`, + name: '"pojoDataSourceBean"', + required: required, + placeholder: 'Input bean name', + tip: 'Name of the data source bean in Spring context' + })( + is-valid-java-identifier + not-java-reserved-word + ) + +form-field-feedback(null, 'required', 'Data source bean name is required') + +form-field-feedback(null, 'isValidJavaIdentifier', 'Data source bean name is not a valid Java identifier') + +form-field-feedback(null, 'notJavaReservedWord', 'Data source bean name should not be a Java reserved word') + .pc-form-grid-col-60 + +dialect('Dialect:', `${pojoStoreFactory}.dialect`, '"pojoDialect"', required, + 'Dialect of SQL implemented by a particular RDBMS:', 'Generic JDBC dialect', + 'Choose JDBC dialect') + .pc-form-grid-col-30 + +number('Batch size:', `${pojoStoreFactory}.batchSize`, '"pojoBatchSize"', true, '512', '1', + 'Maximum batch size for writeAll and deleteAll operations') + .pc-form-grid-col-30 + +number('Thread count:', `${pojoStoreFactory}.maximumPoolSize`, '"pojoMaximumPoolSize"', true, 'availableProcessors', '1', + 'Maximum workers thread count.<br/>\ + These threads are responsible for load cache.') + .pc-form-grid-col-30 + +number('Maximum write attempts:', `${pojoStoreFactory}.maximumWriteAttempts`, '"pojoMaximumWriteAttempts"', true, '2', '0', + 'Maximum write attempts in case of database error') + .pc-form-grid-col-30 + +number('Parallel load threshold:', `${pojoStoreFactory}.parallelLoadCacheMinimumThreshold`, '"pojoParallelLoadCacheMinimumThreshold"', true, '512', '0', + 'Parallel load cache minimum threshold.<br/>\ + If <b>0</b> then load sequentially.') + .pc-form-grid-col-60 + +java-class('Hasher', `${pojoStoreFactory}.hasher`, '"pojoHasher"', 'true', 'false', 'Hash calculator', required) + .pc-form-grid-col-60 + +java-class('Transformer', `${pojoStoreFactory}.transformer`, '"pojoTransformer"', 'true', 'false', 'Types transformer', required) + .pc-form-grid-col-60 + +checkbox('Escape table and filed names', `${pojoStoreFactory}.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 CacheJdbcPojoStore internal SQL queries.') + .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheJdbcBlobStoreFactory'`) + -var blobStoreFactory = `${storeFactory}.CacheJdbcBlobStoreFactory` + -var blobStoreFactoryVia = `${blobStoreFactory}.connectVia` - .pc-form-grid-col-60 - +dropdown('Connect via:', blobStoreFactoryVia, '"connectVia"', 'true', 'Choose connection method', - '[\ - {value: "URL", label: "URL"},\ - {value: "DataSource", label: "Data source"}\ - ]', - 'You can connect to database via:\ - <ul>\ - <li>JDBC URL, for example: jdbc:h2:mem:myDatabase</li>\ - <li>Configured data source</li>\ - </ul>') + .pc-form-grid-col-60 + +dropdown('Connect via:', blobStoreFactoryVia, '"connectVia"', 'true', 'Choose connection method', + '[\ + {value: "URL", label: "URL"},\ + {value: "DataSource", label: "Data source"}\ + ]', + 'You can connect to database via:\ + <ul>\ + <li>JDBC URL, for example: jdbc:h2:mem:myDatabase</li>\ + <li>Configured data source</li>\ + </ul>') - -var required = `${storeFactoryKind} === 'CacheJdbcBlobStoreFactory' && ${blobStoreFactoryVia} === 'URL'` + -var required = `${storeFactoryKind} === 'CacheJdbcBlobStoreFactory' && ${blobStoreFactoryVia} === 'URL'` - .pc-form-grid-col-60(ng-if-start=`${blobStoreFactoryVia} === 'URL'`) - +text('Connection URL:', `${blobStoreFactory}.connectionUrl`, '"connectionUrl"', required, 'Input URL', - 'URL for database access, for example: jdbc:h2:mem:myDatabase') - .pc-form-grid-col-30 - +text('User:', `${blobStoreFactory}.user`, '"user"', required, 'Input user name', 'User name for database access') - .pc-form-grid-col-30(ng-if-end) - .pc-form-grid__text-only-item Password will be generated as stub. + .pc-form-grid-col-60(ng-if-start=`${blobStoreFactoryVia} === 'URL'`) + +text('Connection URL:', `${blobStoreFactory}.connectionUrl`, '"connectionUrl"', required, 'Input URL', + 'URL for database access, for example: jdbc:h2:mem:myDatabase') + .pc-form-grid-col-30 + +text('User:', `${blobStoreFactory}.user`, '"user"', required, 'Input user name', 'User name for database access') + .pc-form-grid-col-30(ng-if-end) + .pc-form-grid__text-only-item Password will be generated as stub. - -var required = `${storeFactoryKind} === 'CacheJdbcBlobStoreFactory' && ${blobStoreFactoryVia} !== 'URL'` + -var required = `${storeFactoryKind} === 'CacheJdbcBlobStoreFactory' && ${blobStoreFactoryVia} !== 'URL'` - .pc-form-grid-col-60(ng-if-start=`${blobStoreFactoryVia} !== 'URL'`) - +sane-ignite-form-field-text({ - label: 'Data source bean name:', - model: `${blobStoreFactory}.dataSourceBean`, - name: '"blobDataSourceBean"', - required: required, - placeholder: 'Input bean name', - tip: 'Name of the data source bean in Spring context' - })( - is-valid-java-identifier - not-java-reserved-word - ) - +form-field-feedback(null, 'required', 'Data source bean name is required') - +form-field-feedback(null, 'isValidJavaIdentifier', 'Data source bean name is not a valid Java identifier') - +form-field-feedback(null, 'notJavaReservedWord', 'Data source bean name should not be a Java reserved word') - .pc-form-grid-col-60(ng-if-end) - +dialect('Database:', `${blobStoreFactory}.dialect`, '"blobDialect"', required, 'Supported databases:', 'Generic database', 'Choose database') + .pc-form-grid-col-60(ng-if-start=`${blobStoreFactoryVia} !== 'URL'`) + +sane-ignite-form-field-text({ + label: 'Data source bean name:', + model: `${blobStoreFactory}.dataSourceBean`, + name: '"blobDataSourceBean"', + required: required, + placeholder: 'Input bean name', + tip: 'Name of the data source bean in Spring context' + })( + is-valid-java-identifier + not-java-reserved-word + ) + +form-field-feedback(null, 'required', 'Data source bean name is required') + +form-field-feedback(null, 'isValidJavaIdentifier', 'Data source bean name is not a valid Java identifier') + +form-field-feedback(null, 'notJavaReservedWord', 'Data source bean name should not be a Java reserved word') + .pc-form-grid-col-60(ng-if-end) + +dialect('Database:', `${blobStoreFactory}.dialect`, '"blobDialect"', required, 'Supported databases:', 'Generic database', 'Choose database') - .pc-form-grid-col-60 - +checkbox('Init schema', `${blobStoreFactory}.initSchema`, '"initSchema"', - 'Flag indicating whether DB schema should be initialized by Ignite (default behaviour) or was explicitly created by user') - .pc-form-grid-col-60 - +text('Create query:', `${blobStoreFactory}.createTableQuery`, '"createTableQuery"', 'false', 'SQL for table creation', - 'Query for table creation in underlying database<br/>\ - Default value: create table if not exists ENTRIES (key binary primary key, val binary)') - .pc-form-grid-col-60 - +text('Load query:', `${blobStoreFactory}.loadQuery`, '"loadQuery"', 'false', 'SQL for load entry', - 'Query for entry load from underlying database<br/>\ - Default value: select * from ENTRIES where key=?') - .pc-form-grid-col-60 - +text('Insert query:', `${blobStoreFactory}.insertQuery`, '"insertQuery"', 'false', 'SQL for insert entry', - 'Query for insert entry into underlying database<br/>\ - Default value: insert into ENTRIES (key, val) values (?, ?)') - .pc-form-grid-col-60 - +text('Update query:', `${blobStoreFactory}.updateQuery`, '"updateQuery"', 'false', 'SQL for update entry', - 'Query for update entry in underlying database<br/>\ - Default value: update ENTRIES set val=? where key=?') - .pc-form-grid-col-60 - +text('Delete query:', `${blobStoreFactory}.deleteQuery`, '"deleteQuery"', 'false', 'SQL for delete entry', - 'Query for delete entry from underlying database<br/>\ - Default value: delete from ENTRIES where key=?') + .pc-form-grid-col-60 + +checkbox('Init schema', `${blobStoreFactory}.initSchema`, '"initSchema"', + 'Flag indicating whether DB schema should be initialized by Ignite (default behaviour) or was explicitly created by user') + .pc-form-grid-col-60 + +text('Create query:', `${blobStoreFactory}.createTableQuery`, '"createTableQuery"', 'false', 'SQL for table creation', + 'Query for table creation in underlying database<br/>\ + Default value: create table if not exists ENTRIES (key binary primary key, val binary)') + .pc-form-grid-col-60 + +text('Load query:', `${blobStoreFactory}.loadQuery`, '"loadQuery"', 'false', 'SQL for load entry', + 'Query for entry load from underlying database<br/>\ + Default value: select * from ENTRIES where key=?') + .pc-form-grid-col-60 + +text('Insert query:', `${blobStoreFactory}.insertQuery`, '"insertQuery"', 'false', 'SQL for insert entry', + 'Query for insert entry into underlying database<br/>\ + Default value: insert into ENTRIES (key, val) values (?, ?)') + .pc-form-grid-col-60 + +text('Update query:', `${blobStoreFactory}.updateQuery`, '"updateQuery"', 'false', 'SQL for update entry', + 'Query for update entry in underlying database<br/>\ + Default value: update ENTRIES set val=? where key=?') + .pc-form-grid-col-60 + +text('Delete query:', `${blobStoreFactory}.deleteQuery`, '"deleteQuery"', 'false', 'SQL for delete entry', + 'Query for delete entry from underlying database<br/>\ + Default value: delete from ENTRIES where key=?') - .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheHibernateBlobStoreFactory'`) - -var hibernateStoreFactory = `${storeFactory}.CacheHibernateBlobStoreFactory` + .pc-form-grid-row(ng-if=`${storeFactoryKind} === 'CacheHibernateBlobStoreFactory'`) + -var hibernateStoreFactory = `${storeFactory}.CacheHibernateBlobStoreFactory` - .pc-form-grid-col-60 - .ignite-form-field - +ignite-form-field__label('Hibernate properties:', '"hibernateProperties"') - +tooltip(`List of Hibernate properties<bt /> - For example: connection.url=jdbc:h2:mem:exampleDb`) - .ignite-form-field__control - +list-pair-edit({ - items: `${hibernateStoreFactory}.hibernateProperties`, - keyLbl: 'Property name', - valLbl: 'Property value', - itemName: 'property', - itemsName: 'properties' - }) + .pc-form-grid-col-60 + .ignite-form-field + +ignite-form-field__label('Hibernate properties:', '"hibernateProperties"') + +tooltip(`List of Hibernate properties<bt /> + For example: connection.url=jdbc:h2:mem:exampleDb`) + .ignite-form-field__control + +list-pair-edit({ + items: `${hibernateStoreFactory}.hibernateProperties`, + keyLbl: 'Property name', + valLbl: 'Property value', + itemName: 'property', + itemsName: 'properties' + }) - - form = 'store' - .pc-form-grid-col-60 - +checkbox('Keep binary in store', `${model}.storeKeepBinary`, '"storeKeepBinary"', - 'Flag indicating that CacheStore implementation is working with binary objects instead of Java objects') - .pc-form-grid-col-60 - +checkbox('Load previous value', `${model}.loadPreviousValue`, '"loadPreviousValue"', - 'Flag indicating whether value should be loaded from store if it is not in the cache for following cache operations: \ - <ul> \ - <li>IgniteCache.putIfAbsent()</li> \ - <li>IgniteCache.replace()</li> \ - <li>IgniteCache.remove()</li> \ - <li>IgniteCache.getAndPut()</li> \ - <li>IgniteCache.getAndRemove()</li> \ - <li>IgniteCache.getAndReplace()</li> \ - <li> IgniteCache.getAndPutIfAbsent()</li>\ - </ul>') - .pc-form-grid-col-60 - +sane-form-field-checkbox({ - label: 'Read-through', - model: `${model}.readThrough`, - name: '"readThrough"', - tip: 'Flag indicating whether read-through caching should be used' - })( - ng-model-options='{allowInvalid: true}' - ui-validate=`{ - storeEnabledReadOrWriteOn: '$ctrl.Caches.cacheStoreFactory.storeEnabledReadOrWriteOn(${model})' - }` - ui-validate-watch-collection=`"[${storeFactoryKind}, ${model}.writeThrough, ${model}.readThrough]"` - ) - +form-field-feedback(0, 'storeEnabledReadOrWriteOn', 'Read or write through should be turned on when store kind is set') - .pc-form-grid-col-60 - +sane-form-field-checkbox({ - label: 'Write-through', - model: `${model}.writeThrough`, - name: '"writeThrough"', - tip: 'Flag indicating whether write-through caching should be used' + - form = 'store' + .pc-form-grid-col-60 + +checkbox('Keep binary in store', `${model}.storeKeepBinary`, '"storeKeepBinary"', + 'Flag indicating that CacheStore implementation is working with binary objects instead of Java objects') + .pc-form-grid-col-60 + +checkbox('Load previous value', `${model}.loadPreviousValue`, '"loadPreviousValue"', + 'Flag indicating whether value should be loaded from store if it is not in the cache for following cache operations: \ + <ul> \ + <li>IgniteCache.putIfAbsent()</li> \ + <li>IgniteCache.replace()</li> \ + <li>IgniteCache.remove()</li> \ + <li>IgniteCache.getAndPut()</li> \ + <li>IgniteCache.getAndRemove()</li> \ + <li>IgniteCache.getAndReplace()</li> \ + <li> IgniteCache.getAndPutIfAbsent()</li>\ + </ul>') + .pc-form-grid-col-60 + +sane-form-field-checkbox({ + label: 'Read-through', + model: `${model}.readThrough`, + name: '"readThrough"', + tip: 'Flag indicating whether read-through caching should be used' + })( + ng-model-options='{allowInvalid: true}' + ui-validate=`{ + storeEnabledReadOrWriteOn: '$ctrl.Caches.cacheStoreFactory.storeEnabledReadOrWriteOn(${model})' + }` + ui-validate-watch-collection=`"[${storeFactoryKind}, ${model}.writeThrough, ${model}.readThrough]"` + ) + +form-field-feedback(0, 'storeEnabledReadOrWriteOn', 'Read or write through should be turned on when store kind is set') + .pc-form-grid-col-60 + +sane-form-field-checkbox({ + label: 'Write-through', + model: `${model}.writeThrough`, + name: '"writeThrough"', + tip: 'Flag indicating whether write-through caching should be used' + })( + ng-model-options='{allowInvalid: true}' + ui-validate=`{ + storeEnabledReadOrWriteOn: '$ctrl.Caches.cacheStoreFactory.storeEnabledReadOrWriteOn(${model})' + }` + ui-validate-watch-collection=`"[${storeFactoryKind}, ${model}.writeThrough, ${model}.readThrough]"` + ) + +form-field-feedback(0, 'storeEnabledReadOrWriteOn', 'Read or write through should be turned on when store kind is set') + + -var enabled = `${model}.writeBehindEnabled` + + .pc-form-grid-col-60.pc-form-group__text-title + +sane-form-field-checkbox({ + label: 'Write-behind', + model: enabled, + name: '"writeBehindEnabled"', + tip: ` + Cache write-behind settings.<br> + Write-behind is a special mode when updates to cache accumulated and then asynchronously flushed to persistent store as a bulk operation. + ` + })( + ng-model-options='{allowInvalid: true}' + ) + +form-field-feedback(0, 'storeDisabledValueOff', 'Write-behind is enabled but store kind is not set') + .pc-form-group.pc-form-grid-row(ng-if=enabled) + .pc-form-grid-col-30 + +number('Batch size:', `${model}.writeBehindBatchSize`, '"writeBehindBatchSize"', enabled, '512', '1', + 'Maximum batch size for write-behind cache store operations<br/>\ + Store operations(get or remove) are combined in a batch of this size to be passed to cache store') + .pc-form-grid-col-30 + +sane-ignite-form-field-number({ + label: 'Flush size:', + model: `${model}.writeBehindFlushSize`, + name: '"writeBehindFlushSize"', + placeholder: '10240', + min: `{{ $ctrl.Caches.writeBehindFlush.min(${model}) }}`, + tip: `Maximum size of the write-behind cache<br/> + If cache size exceeds this value, all cached items are flushed to the cache store and write cache is cleared` })( ng-model-options='{allowInvalid: true}' - ui-validate=`{ - storeEnabledReadOrWriteOn: '$ctrl.Caches.cacheStoreFactory.storeEnabledReadOrWriteOn(${model})' - }` - ui-validate-watch-collection=`"[${storeFactoryKind}, ${model}.writeThrough, ${model}.readThrough]"` ) - +form-field-feedback(0, 'storeEnabledReadOrWriteOn', 'Read or write through should be turned on when store kind is set') - - -var enabled = `${model}.writeBehindEnabled` - - .pc-form-grid-col-60.pc-form-group__text-title - +sane-form-field-checkbox({ - label: 'Write-behind', - model: enabled, - name: '"writeBehindEnabled"', - tip: ` - Cache write-behind settings.<br> - Write-behind is a special mode when updates to cache accumulated and then asynchronously flushed to persistent store as a bulk operation. - ` + .pc-form-grid-col-30 + +sane-ignite-form-field-number({ + label: 'Flush frequency:', + model: `${model}.writeBehindFlushFrequency`, + name: '"writeBehindFlushFrequency"', + placeholder: '5000', + min: `{{ $ctrl.Caches.writeBehindFlush.min(${model}) }}`, + tip: `Frequency with which write-behind cache is flushed to the cache store in milliseconds` })( ng-model-options='{allowInvalid: true}' ) - +form-field-feedback(0, 'storeDisabledValueOff', 'Write-behind is enabled but store kind is not set') - .pc-form-group.pc-form-grid-row(ng-if=enabled) - .pc-form-grid-col-30 - +number('Batch size:', `${model}.writeBehindBatchSize`, '"writeBehindBatchSize"', enabled, '512', '1', - 'Maximum batch size for write-behind cache store operations<br/>\ - Store operations(get or remove) are combined in a batch of this size to be passed to cache store') - .pc-form-grid-col-30 - +sane-ignite-form-field-number({ - label: 'Flush size:', - model: `${model}.writeBehindFlushSize`, - name: '"writeBehindFlushSize"', - placeholder: '10240', - min: `{{ $ctrl.Caches.writeBehindFlush.min(${model}) }}`, - tip: `Maximum size of the write-behind cache<br/> - If cache size exceeds this value, all cached items are flushed to the cache store and write cache is cleared` - })( - ng-model-options='{allowInvalid: true}' - ) - .pc-form-grid-col-30 - +sane-ignite-form-field-number({ - label: 'Flush frequency:', - model: `${model}.writeBehindFlushFrequency`, - name: '"writeBehindFlushFrequency"', - placeholder: '5000', - min: `{{ $ctrl.Caches.writeBehindFlush.min(${model}) }}`, - tip: `Frequency with which write-behind cache is flushed to the cache store in milliseconds` - })( - ng-model-options='{allowInvalid: true}' - ) - .pc-form-grid-col-30 - +number('Flush threads count:', `${model}.writeBehindFlushThreadCount`, '"writeBehindFlushThreadCount"', enabled, '1', '1', - 'Number of threads that will perform cache flushing') + .pc-form-grid-col-30 + +number('Flush threads count:', `${model}.writeBehindFlushThreadCount`, '"writeBehindFlushThreadCount"', enabled, '1', '1', + 'Number of threads that will perform cache flushing') - //- Since ignite 2.0 - .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")') - +checkbox-enabled('Write coalescing', model + '.writeBehindCoalescing', '"WriteBehindCoalescing"', enabled, 'Write coalescing flag for write-behind cache store') + //- Since ignite 2.0 + .pc-form-grid-col-60(ng-if='$ctrl.available("2.0.0")') + +checkbox-enabled('Write coalescing', model + '.writeBehindCoalescing', '"WriteBehindCoalescing"', enabled, 'Write coalescing flag for write-behind cache store') - .pca-form-column-6 - +preview-xml-java(model, 'cacheStore', 'domains') + .pca-form-column-6 + +preview-xml-java(model, 'cacheStore', 'domains')
http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug index 8994fa6..13424f8 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/atomic.pug @@ -22,57 +22,54 @@ include /app/helpers/jade/mixins -var rendezvousAff = affModel + '.kind === "Rendezvous"' -var customAff = affModel + '.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 Atomic configuration - .pca-panel-heading-description - | Configuration for atomic data structures. - | Atomics are distributed across the cluster, essentially enabling performing atomic operations (such as increment-and-get or compare-and-set) with the same globally-visible value. - | #[a.link-success(href="https://apacheignite.readme.io/docs/atomic-types" target="_blank") More info] - .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 - +dropdown('Cache mode:', `${model}.cacheMode`, '"cacheMode"', 'true', 'PARTITIONED', - '[\ - {value: "LOCAL", label: "LOCAL"},\ - {value: "REPLICATED", label: "REPLICATED"},\ - {value: "PARTITIONED", label: "PARTITIONED"}\ - ]', - 'Cache modes:\ - <ul>\ - <li>Partitioned - in this mode the overall key set will be divided into partitions and all partitions will be split equally between participating nodes</li>\ - <li>Replicated - in this mode all the keys are distributed to all participating nodes</li>\ - <li>Local - in this mode caches residing on different grid nodes will not know about each other</li>\ - </ul>') - .pc-form-grid-col-30 - +number('Sequence reserve:', `${model}.atomicSequenceReserveSize`, '"atomicSequenceReserveSize"', 'true', '1000', '0', - 'Default number of sequence values reserved for IgniteAtomicSequence instances<br/>\ - After a certain number has been reserved, consequent increments of sequence will happen locally, without communication with other nodes, until the next reservation has to be made') - .pc-form-grid-col-60(ng-show=`!(${model}.cacheMode && ${model}.cacheMode != "PARTITIONED")`) - +number('Backups:', model + '.backups', '"backups"', 'true', '0', '0', 'Number of backup nodes') +panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`) + panel-title Atomic configuration + panel-description + | Configuration for atomic data structures. + | Atomics are distributed across the cluster, essentially enabling performing atomic operations (such as increment-and-get or compare-and-set) with the same globally-visible value. + | #[a.link-success(href="https://apacheignite.readme.io/docs/atomic-types" target="_blank") More info] + panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`) + .pca-form-column-6.pc-form-grid-row + .pc-form-grid-col-30 + +dropdown('Cache mode:', `${model}.cacheMode`, '"cacheMode"', 'true', 'PARTITIONED', + '[\ + {value: "LOCAL", label: "LOCAL"},\ + {value: "REPLICATED", label: "REPLICATED"},\ + {value: "PARTITIONED", label: "PARTITIONED"}\ + ]', + 'Cache modes:\ + <ul>\ + <li>Partitioned - in this mode the overall key set will be divided into partitions and all partitions will be split equally between participating nodes</li>\ + <li>Replicated - in this mode all the keys are distributed to all participating nodes</li>\ + <li>Local - in this mode caches residing on different grid nodes will not know about each other</li>\ + </ul>') + .pc-form-grid-col-30 + +number('Sequence reserve:', `${model}.atomicSequenceReserveSize`, '"atomicSequenceReserveSize"', 'true', '1000', '0', + 'Default number of sequence values reserved for IgniteAtomicSequence instances<br/>\ + After a certain number has been reserved, consequent increments of sequence will happen locally, without communication with other nodes, until the next reservation has to be made') + .pc-form-grid-col-60(ng-show=`!(${model}.cacheMode && ${model}.cacheMode != "PARTITIONED")`) + +number('Backups:', model + '.backups', '"backups"', 'true', '0', '0', 'Number of backup nodes') - .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.1.0")') - +dropdown('Function:', `${affModel}.kind`, '"AffinityKind"', 'true', 'Default', '$ctrl.Clusters.affinityFunctions', - 'Key topology resolver to provide mapping from keys to nodes\ - <ul>\ - <li>Rendezvous - Based on Highest Random Weight algorithm<br/></li>\ - <li>Custom - Custom implementation of key affinity function<br/></li>\ - <li>Default - By default rendezvous affinity function with 1024 partitions is used<br/></li>\ - </ul>') - .pc-form-group(ng-if-end ng-if=rendezvousAff + ' || ' + customAff) - .pc-form-grid-row - .pc-form-grid-col-30(ng-if-start=rendezvousAff) - +number-required('Partitions', `${affModel}.Rendezvous.partitions`, '"RendPartitions"', 'true', rendPartitionsRequired, '1024', '1', 'Number of partitions') - .pc-form-grid-col-30 - +java-class('Backup filter', `${affModel}.Rendezvous.affinityBackupFilter`, '"RendAffinityBackupFilter"', 'true', 'false', - 'Backups will be selected from all nodes that pass this filter') - .pc-form-grid-col-60(ng-if-end) - +checkbox('Exclude neighbors', `${affModel}.Rendezvous.excludeNeighbors`, '"RendExcludeNeighbors"', - 'Exclude same - host - neighbors from being backups of each other and specified number of backups') - .pc-form-grid-col-60(ng-if=customAff) - +java-class('Class name:', `${affModel}.Custom.className`, '"AffCustomClassName"', 'true', customAff, - 'Custom key affinity function implementation class name') - .pca-form-column-6 - +preview-xml-java(model, 'clusterAtomics') + .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.1.0")') + +dropdown('Function:', `${affModel}.kind`, '"AffinityKind"', 'true', 'Default', '$ctrl.Clusters.affinityFunctions', + 'Key topology resolver to provide mapping from keys to nodes\ + <ul>\ + <li>Rendezvous - Based on Highest Random Weight algorithm<br/></li>\ + <li>Custom - Custom implementation of key affinity function<br/></li>\ + <li>Default - By default rendezvous affinity function with 1024 partitions is used<br/></li>\ + </ul>') + .pc-form-group(ng-if-end ng-if=rendezvousAff + ' || ' + customAff) + .pc-form-grid-row + .pc-form-grid-col-30(ng-if-start=rendezvousAff) + +number-required('Partitions', `${affModel}.Rendezvous.partitions`, '"RendPartitions"', 'true', rendPartitionsRequired, '1024', '1', 'Number of partitions') + .pc-form-grid-col-30 + +java-class('Backup filter', `${affModel}.Rendezvous.affinityBackupFilter`, '"RendAffinityBackupFilter"', 'true', 'false', + 'Backups will be selected from all nodes that pass this filter') + .pc-form-grid-col-60(ng-if-end) + +checkbox('Exclude neighbors', `${affModel}.Rendezvous.excludeNeighbors`, '"RendExcludeNeighbors"', + 'Exclude same - host - neighbors from being backups of each other and specified number of backups') + .pc-form-grid-col-60(ng-if=customAff) + +java-class('Class name:', `${affModel}.Custom.className`, '"AffCustomClassName"', 'true', customAff, + 'Custom key affinity function implementation class name') + .pca-form-column-6 + +preview-xml-java(model, 'clusterAtomics') http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug index edff038..b57f1da 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/attributes.pug @@ -19,26 +19,22 @@ include /app/helpers/jade/mixins -var form = 'attributes' -var model = '$ctrl.clonedCluster' -.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 User attributes - .pca-panel-heading-description - | Configuration for Ignite user attributes. - .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 - .ignite-form-field - +ignite-form-field__label('User attributes:', '"userAttributes"') - +tooltip(`User-defined attributes to add to node`) - .ignite-form-field__control - +list-pair-edit({ - items: `${model}.attributes`, - keyLbl: 'Attribute name', - valLbl: 'Attribute value', - itemName: 'attribute', - itemsName: 'attributes' - }) +panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`) + panel-title User attributes + panel-description Configuration for Ignite user attributes. + panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`) + .pca-form-column-6 + .ignite-form-field + +ignite-form-field__label('User attributes:', '"userAttributes"') + +tooltip(`User-defined attributes to add to node`) + .ignite-form-field__control + +list-pair-edit({ + items: `${model}.attributes`, + keyLbl: 'Attribute name', + valLbl: 'Attribute value', + itemName: 'attribute', + itemsName: 'attributes' + }) - .pca-form-column-6 - +preview-xml-java(model, 'clusterUserAttributes') + .pca-form-column-6 + +preview-xml-java(model, 'clusterUserAttributes') http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug index 9c3a48d..6c1b246 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/binary.pug @@ -19,65 +19,62 @@ include /app/helpers/jade/mixins -var form = 'binary' -var model = '$ctrl.clonedCluster.binaryConfiguration' -.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 Binary configuration - .pca-panel-heading-description - | Configuration of specific binary types. - | #[a.link-success(href="https://apacheignite.readme.io/docs/binary-marshaller" 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 - +java-class('ID mapper:', model + '.idMapper', '"idMapper"', 'true', 'false', - 'Maps given from BinaryNameMapper type and filed name to ID that will be used by Ignite in internals<br/>\ - Ignite never writes full strings for field or type names. Instead, for performance reasons, Ignite writes integer hash codes for type/class and field names. It has been tested that hash code conflicts for the type/class names or the field names within the same type are virtually non - existent and, to gain performance, it is safe to work with hash codes. For the cases when hash codes for different types or fields actually do collide <b>BinaryIdMapper</b> allows to override the automatically generated hash code IDs for the type and field names') - .pc-form-grid-col-60 - +java-class('Name mapper:', model + '.nameMapper', '"nameMapper"', 'true', 'false', 'Maps type/class and field names to different names') - .pc-form-grid-col-60 - +java-class('Serializer:', model + '.serializer', '"serializer"', 'true', 'false', 'Class with custom serialization logic for binary objects') - .pc-form-grid-col-60 - .ignite-form-field - +ignite-form-field__label('Type configurations:', '"typeСonfigurations"') - +tooltip(`Configuration properties for binary types`) - .ignite-form-field__control - -var items = model + '.typeConfigurations' - list-editable(ng-model=items name='typeСonfigurations') - list-editable-item-edit.pc-form-grid-row - - form = '$parent.form' - .pc-form-grid-col-60 - +java-class-autofocus('Type name:', '$item.typeName', '"typeName"', 'true', 'true', 'true', 'Type name')( - ignite-unique=items - ignite-unique-property='typeName' - ) - +unique-feedback(`$item.typeName`, 'Type name should be unique.') - .pc-form-grid-col-60 - +java-class('ID mapper:', '$item.idMapper', '"idMapper"', 'true', 'false', - 'Maps given from BinaryNameMapper type and filed name to ID that will be used by Ignite in internals<br/>\ - Ignite never writes full strings for field or type/class names.\ - Instead, for performance reasons, Ignite writes integer hash codes for type/class and field names.\ - It has been tested that hash code conflicts for the type/class names or the field names within the same type are virtually non - existent and,\ - to gain performance, it is safe to work with hash codes.\ - For the cases when hash codes for different types or fields actually do collide <b>BinaryIdMapper</b> allows to override the automatically generated hash code IDs for the type and field names') - .pc-form-grid-col-60 - +java-class('Name mapper:', '$item.nameMapper', '"nameMapper"', 'true', 'false', - 'Maps type/class and field names to different names') - .pc-form-grid-col-60 - +java-class('Serializer:', '$item.serializer', '"serializer"', 'true', 'false', - 'Class with custom serialization logic for binary object') - .pc-form-grid-col-60 - +checkbox('Enum', '$item.enum', 'enum', 'Flag indicating that this type is the enum') - - list-editable-no-items - list-editable-add-item-button( - add-item=`$ctrl.Clusters.addBinaryTypeConfiguration($ctrl.clonedCluster)` - label-single='configuration' - label-multiple='configurations' +panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`) + panel-title Binary configuration + panel-description + | Configuration of specific binary types. + | #[a.link-success(href="https://apacheignite.readme.io/docs/binary-marshaller" target="_blank") More info] + panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`) + .pca-form-column-6.pc-form-grid-row + .pc-form-grid-col-60 + +java-class('ID mapper:', model + '.idMapper', '"idMapper"', 'true', 'false', + 'Maps given from BinaryNameMapper type and filed name to ID that will be used by Ignite in internals<br/>\ + Ignite never writes full strings for field or type names. Instead, for performance reasons, Ignite writes integer hash codes for type/class and field names. It has been tested that hash code conflicts for the type/class names or the field names within the same type are virtually non - existent and, to gain performance, it is safe to work with hash codes. For the cases when hash codes for different types or fields actually do collide <b>BinaryIdMapper</b> allows to override the automatically generated hash code IDs for the type and field names') + .pc-form-grid-col-60 + +java-class('Name mapper:', model + '.nameMapper', '"nameMapper"', 'true', 'false', 'Maps type/class and field names to different names') + .pc-form-grid-col-60 + +java-class('Serializer:', model + '.serializer', '"serializer"', 'true', 'false', 'Class with custom serialization logic for binary objects') + .pc-form-grid-col-60 + .ignite-form-field + +ignite-form-field__label('Type configurations:', '"typeСonfigurations"') + +tooltip(`Configuration properties for binary types`) + .ignite-form-field__control + -var items = model + '.typeConfigurations' + list-editable(ng-model=items name='typeСonfigurations') + list-editable-item-edit.pc-form-grid-row + - form = '$parent.form' + .pc-form-grid-col-60 + +java-class-autofocus('Type name:', '$item.typeName', '"typeName"', 'true', 'true', 'true', 'Type name')( + ignite-unique=items + ignite-unique-property='typeName' ) + +unique-feedback(`$item.typeName`, 'Type name should be unique.') + .pc-form-grid-col-60 + +java-class('ID mapper:', '$item.idMapper', '"idMapper"', 'true', 'false', + 'Maps given from BinaryNameMapper type and filed name to ID that will be used by Ignite in internals<br/>\ + Ignite never writes full strings for field or type/class names.\ + Instead, for performance reasons, Ignite writes integer hash codes for type/class and field names.\ + It has been tested that hash code conflicts for the type/class names or the field names within the same type are virtually non - existent and,\ + to gain performance, it is safe to work with hash codes.\ + For the cases when hash codes for different types or fields actually do collide <b>BinaryIdMapper</b> allows to override the automatically generated hash code IDs for the type and field names') + .pc-form-grid-col-60 + +java-class('Name mapper:', '$item.nameMapper', '"nameMapper"', 'true', 'false', + 'Maps type/class and field names to different names') + .pc-form-grid-col-60 + +java-class('Serializer:', '$item.serializer', '"serializer"', 'true', 'false', + 'Class with custom serialization logic for binary object') + .pc-form-grid-col-60 + +checkbox('Enum', '$item.enum', 'enum', 'Flag indicating that this type is the enum') + + list-editable-no-items + list-editable-add-item-button( + add-item=`$ctrl.Clusters.addBinaryTypeConfiguration($ctrl.clonedCluster)` + label-single='configuration' + label-multiple='configurations' + ) - - form = 'binary' - .pc-form-grid-col-60 - +checkbox('Compact footer', model + '.compactFooter', '"compactFooter"', 'When enabled, Ignite will not write fields metadata when serializing objects (this will increase serialization performance), because internally <b>BinaryMarshaller</b> already distribute metadata inside cluster') - .pca-form-column-6 - +preview-xml-java(model, 'clusterBinary') + - form = 'binary' + .pc-form-grid-col-60 + +checkbox('Compact footer', model + '.compactFooter', '"compactFooter"', 'When enabled, Ignite will not write fields metadata when serializing objects (this will increase serialization performance), because internally <b>BinaryMarshaller</b> already distribute metadata inside cluster') + .pca-form-column-6 + +preview-xml-java(model, 'clusterBinary') http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug index 577d66c..abc8ff1 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/cache-key-cfg.pug @@ -19,48 +19,45 @@ include /app/helpers/jade/mixins -var form = 'cacheKeyCfg' -var model = '$ctrl.clonedCluster.cacheKeyConfiguration' -.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 Cache key configuration - .pca-panel-heading-description - | Cache key configuration allows to collocate objects in a partitioned cache based on field in cache key without explicit usage of annotations on user classes. - .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 - mixin clusters-cache-key-cfg - .ignite-form-field - +ignite-form-field__label('Cache key configuration:', '"cacheKeyConfiguration"') - .ignite-form-field__control - -let items = model - list-editable(ng-model=items name='cacheKeyConfiguration') - list-editable-item-edit.pc-form-grid-row - - form = '$parent.form' - .pc-form-grid-col-60 - +java-class-autofocus('Type name:', '$item.typeName', '"cacheKeyTypeName"', 'true', 'true', 'true', 'Type name')( - ignite-unique=items - ignite-unique-property='typeName' - ) - +unique-feedback(`cacheKeyTypeName`, 'Type name should be unique.') - .pc-form-grid-col-60 - +sane-ignite-form-field-text({ - label: 'Affinity key field name:', - model: '$item.affinityKeyFieldName', - name: '"affinityKeyFieldName"', - disabled: 'false', - placeholder: 'Enter field name', - tip: 'Affinity key field name', - required: true - }) - - list-editable-no-items - list-editable-add-item-button( - add-item=`(${items} = ${items} || []).push({})` - label-single='configuration' - label-multiple='configurations' +panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`) + panel-title Cache key configuration + panel-description + | Cache key configuration allows to collocate objects in a partitioned cache based on field in cache key without explicit usage of annotations on user classes. + panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`) + .pca-form-column-6 + mixin clusters-cache-key-cfg + .ignite-form-field + +ignite-form-field__label('Cache key configuration:', '"cacheKeyConfiguration"') + .ignite-form-field__control + -let items = model + list-editable(ng-model=items name='cacheKeyConfiguration') + list-editable-item-edit.pc-form-grid-row + - form = '$parent.form' + .pc-form-grid-col-60 + +java-class-autofocus('Type name:', '$item.typeName', '"cacheKeyTypeName"', 'true', 'true', 'true', 'Type name')( + ignite-unique=items + ignite-unique-property='typeName' ) - - +clusters-cache-key-cfg - - .pca-form-column-6 - +preview-xml-java(model, 'clusterCacheKeyConfiguration') + +unique-feedback(`cacheKeyTypeName`, 'Type name should be unique.') + .pc-form-grid-col-60 + +sane-ignite-form-field-text({ + label: 'Affinity key field name:', + model: '$item.affinityKeyFieldName', + name: '"affinityKeyFieldName"', + disabled: 'false', + placeholder: 'Enter field name', + tip: 'Affinity key field name', + required: true + }) + + list-editable-no-items + list-editable-add-item-button( + add-item=`(${items} = ${items} || []).push({})` + label-single='configuration' + label-multiple='configurations' + ) + + +clusters-cache-key-cfg + + .pca-form-column-6 + +preview-xml-java(model, 'clusterCacheKeyConfiguration') http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.pug index 5adb29c..b00c98c 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.pug @@ -21,65 +21,62 @@ include /app/helpers/jade/mixins -var CustomCheckpoint = '$checkpointSPI.kind === "Custom"' -var CacheCheckpoint = '$checkpointSPI.kind === "Cache"' -.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 Checkpointing - .pca-panel-heading-description - | Checkpointing provides an ability to save an intermediate job state. - | #[a.link-success(href="https://apacheignite.readme.io/docs/checkpointing" target="_blank") More info] - .pca-panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`) - .pca-panel-body(ng-i_f=`ui.isPanelLoaded('${form}')`).pca-form-row - .pca-form-column-6.pc-form-grid-row - .pc-form-grid-col-60 - .ignite-form-field - +ignite-form-field__label('Checkpoint SPI configurations:', '"checkpointSPIConfigurations"') - .ignite-form-field__control - list-editable(ng-model=model name='checkpointSPIConfigurations') - list-editable-item-edit(item-name='$checkpointSPI').pc-form-grid-row - .pc-form-grid-col-60 - +dropdown-required('Checkpoint SPI:', '$checkpointSPI.kind', '"checkpointKind"', 'true', 'true', 'Choose checkpoint configuration variant', '[\ - {value: "FS", label: "File System"},\ - {value: "Cache", label: "Cache"},\ - {value: "S3", label: "Amazon S3"},\ - {value: "JDBC", label: "Database"},\ - {value: "Custom", label: "Custom"}\ - ]', - 'Provides an ability to save an intermediate job state\ - <ul>\ - <li>File System - Uses a shared file system to store checkpoints</li>\ - <li>Cache - Uses a cache to store checkpoints</li>\ - <li>Amazon S3 - Uses Amazon S3 to store checkpoints</li>\ - <li>Database - Uses a database to store checkpoints</li>\ - <li>Custom - Custom checkpoint SPI implementation</li>\ - </ul>') +panel-collapsible(ng-form=form) + panel-title Checkpointing + panel-description + | Checkpointing provides an ability to save an intermediate job state. + | #[a.link-success(href="https://apacheignite.readme.io/docs/checkpointing" target="_blank") More info] + panel-content.pca-form-row + .pca-form-column-6.pc-form-grid-row + .pc-form-grid-col-60 + .ignite-form-field + +ignite-form-field__label('Checkpoint SPI configurations:', '"checkpointSPIConfigurations"') + .ignite-form-field__control + list-editable(ng-model=model name='checkpointSPIConfigurations') + list-editable-item-edit(item-name='$checkpointSPI').pc-form-grid-row + .pc-form-grid-col-60 + +dropdown-required('Checkpoint SPI:', '$checkpointSPI.kind', '"checkpointKind"', 'true', 'true', 'Choose checkpoint configuration variant', '[\ + {value: "FS", label: "File System"},\ + {value: "Cache", label: "Cache"},\ + {value: "S3", label: "Amazon S3"},\ + {value: "JDBC", label: "Database"},\ + {value: "Custom", label: "Custom"}\ + ]', + 'Provides an ability to save an intermediate job state\ + <ul>\ + <li>File System - Uses a shared file system to store checkpoints</li>\ + <li>Cache - Uses a cache to store checkpoints</li>\ + <li>Amazon S3 - Uses Amazon S3 to store checkpoints</li>\ + <li>Database - Uses a database to store checkpoints</li>\ + <li>Custom - Custom checkpoint SPI implementation</li>\ + </ul>') - include ./checkpoint/fs + include ./checkpoint/fs - .pc-form-grid-col-60(ng-if-start=CacheCheckpoint) - +dropdown-required-empty('Cache:', '$checkpointSPI.Cache.cache', '"checkpointCacheCache"', 'true', CacheCheckpoint, - 'Choose cache', 'No caches configured for current cluster', '$ctrl.cachesMenu', 'Cache to use for storing checkpoints')( - pc-is-in-collection='$ctrl.clonedCluster.caches' - ) - +form-field-feedback(form, 'isInCollection', `Cluster doesn't have such a cache`) - .pc-form-grid-col-60(ng-if-end) - +java-class('Listener:', '$checkpointSPI.Cache.checkpointListener', '"checkpointCacheListener"', 'true', 'false', - 'Checkpoint listener implementation class name', CacheCheckpoint) + .pc-form-grid-col-60(ng-if-start=CacheCheckpoint) + +dropdown-required-empty('Cache:', '$checkpointSPI.Cache.cache', '"checkpointCacheCache"', 'true', CacheCheckpoint, + 'Choose cache', 'No caches configured for current cluster', '$ctrl.cachesMenu', 'Cache to use for storing checkpoints')( + pc-is-in-collection='$ctrl.clonedCluster.caches' + ) + +form-field-feedback(form, 'isInCollection', `Cluster doesn't have such a cache`) + .pc-form-grid-col-60(ng-if-end) + +java-class('Listener:', '$checkpointSPI.Cache.checkpointListener', '"checkpointCacheListener"', 'true', 'false', + 'Checkpoint listener implementation class name', CacheCheckpoint) - include ./checkpoint/s3 + include ./checkpoint/s3 - include ./checkpoint/jdbc + include ./checkpoint/jdbc - .pc-form-grid-col-60(ng-if=CustomCheckpoint) - +java-class('Class name:', '$checkpointSPI.Custom.className', '"checkpointCustomClassName"', 'true', CustomCheckpoint, - 'Custom CheckpointSpi implementation class', CustomCheckpoint) + .pc-form-grid-col-60(ng-if=CustomCheckpoint) + +java-class('Class name:', '$checkpointSPI.Custom.className', '"checkpointCustomClassName"', 'true', CustomCheckpoint, + 'Custom CheckpointSpi implementation class', CustomCheckpoint) - list-editable-no-items - list-editable-add-item-button( - add-item=`$edit($ctrl.Clusters.addCheckpointSPI($ctrl.clonedCluster))` - label-single='checkpoint SPI configuration' - label-multiple='checkpoint SPI configurations' - ) - - .pca-form-column-6 - +preview-xml-java('$ctrl.clonedCluster', 'clusterCheckpoint', '$ctrl.caches') + list-editable-no-items + list-editable-add-item-button( + add-item=`$edit($ctrl.Clusters.addCheckpointSPI($ctrl.clonedCluster))` + label-single='checkpoint SPI configuration' + label-multiple='checkpoint SPI configurations' + ) + + .pca-form-column-6 + +preview-xml-java('$ctrl.clonedCluster', 'clusterCheckpoint', '$ctrl.caches') http://git-wip-us.apache.org/repos/asf/ignite/blob/d24dab81/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug index 5421255..d27fa14 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug @@ -23,57 +23,54 @@ include /app/helpers/jade/mixins -var sslEnabled = `${connectionEnabled} && ${connectionModel}.sslEnabled` -var sslFactoryEnabled = `${sslEnabled} && !${connectionModel}.useIgniteSslContextFactory` -.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 Client connector configuration - .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 - .pc-form-grid-col-60 - +checkbox('Enabled', connectionEnabled, '"ClientConnectorEnabled"', 'Flag indicating whether to configure client connector configuration') - .pc-form-grid-col-40 - +text-enabled('Host:', `${connectionModel}.host`, '"ClientConnectorHost"', connectionEnabled, 'false', 'localhost') - .pc-form-grid-col-20 - +number('Port:', `${connectionModel}.port`, '"ClientConnectorPort"', connectionEnabled, '10800', '1025') - .pc-form-grid-col-20 - +number('Port range:', `${connectionModel}.portRange`, '"ClientConnectorPortRange"', connectionEnabled, '100', '0') - .pc-form-grid-col-20 - +number('Socket send buffer size:', `${connectionModel}.socketSendBufferSize`, '"ClientConnectorSocketSendBufferSize"', connectionEnabled, '0', '0', - 'Socket send buffer size<br/>\ - When set to <b>0</b>, operation system default will be used') - .pc-form-grid-col-20 - +number('Socket receive buffer size:', `${connectionModel}.socketReceiveBufferSize`, '"ClientConnectorSocketReceiveBufferSize"', connectionEnabled, '0', '0', - 'Socket receive buffer size<br/>\ - When set to <b>0</b>, operation system default will be used') - .pc-form-grid-col-30 - +number('Max connection cursors:', `${connectionModel}.maxOpenCursorsPerConnection`, '"ClientConnectorMaxOpenCursorsPerConnection"', connectionEnabled, '128', '0', - 'Max number of opened cursors per connection') - .pc-form-grid-col-30 - +number('Pool size:', `${connectionModel}.threadPoolSize`, '"ClientConnectorThreadPoolSize"', connectionEnabled, 'max(8, availableProcessors)', '1', - 'Size of thread pool that is in charge of processing SQL requests') - .pc-form-grid-col-60 - +checkbox-enabled('TCP_NODELAY option', `${connectionModel}.tcpNoDelay`, '"ClientConnectorTcpNoDelay"', connectionEnabled) - .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")') - +number('Idle timeout:', `${connectionModel}.idleTimeout`, '"ClientConnectorIdleTimeout"', connectionEnabled, '0', '-1', - 'Idle timeout for client connections<br/>\ - Zero or negative means no timeout') - .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.5.0")') - +checkbox-enabled('Enable SSL', `${connectionModel}.sslEnabled`, '"ClientConnectorSslEnabled"', connectionEnabled, 'Enable secure socket layer on client connector') - .pc-form-grid-col-60 - +checkbox-enabled('Enable SSL client auth', `${connectionModel}.sslClientAuth`, '"ClientConnectorSslClientAuth"', sslEnabled, 'Flag indicating whether or not SSL client authentication is required') - .pc-form-grid-col-60 - +checkbox-enabled('Use Ignite SSL', `${connectionModel}.useIgniteSslContextFactory`, '"ClientConnectorUseIgniteSslContextFactory"', sslEnabled, 'Use SSL factory Ignite configuration') - .pc-form-grid-col-60(ng-if-end) - +java-class('SSL factory:', `${connectionModel}.sslContextFactory`, '"ClientConnectorSslContextFactory"', sslFactoryEnabled, sslFactoryEnabled, - 'If SSL factory specified then replication will be performed through secure SSL channel created with this factory<br/>\ - If not present <b>isUseIgniteSslContextFactory()</b> flag will be evaluated<br/>\ - If set to <b>true</b> and <b>IgniteConfiguration#getSslContextFactory()</b> exists, then Ignite SSL context factory will be used to establish secure connection') - .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.4.0")') - +checkbox-enabled('JDBC Enabled', `${connectionModel}.jdbcEnabled`, '"ClientConnectorJdbcEnabled"', connectionEnabled, 'Access through JDBC is enabled') - .pc-form-grid-col-60 - +checkbox-enabled('ODBC Enabled', `${connectionModel}.odbcEnabled`, '"ClientConnectorOdbcEnabled"', connectionEnabled, 'Access through ODBC is enabled') - .pc-form-grid-col-60(ng-if-end) - +checkbox-enabled('Thin client enabled', `${connectionModel}.thinClientEnabled`, '"ClientConnectorThinCliEnabled"', connectionEnabled, 'Access through thin client is enabled') - .pca-form-column-6 - +preview-xml-java(model, 'clusterClientConnector') +panel-collapsible(ng-show='$ctrl.available("2.3.0")' ng-form=form on-open=`ui.loadPanel('${form}')`) + panel-title Client connector configuration + panel-content.pca-form-row(ng-if=`$ctrl.available("2.3.0") && ui.isPanelLoaded('${form}')`) + .pca-form-column-6.pc-form-grid-row + .pc-form-grid-col-60 + +checkbox('Enabled', connectionEnabled, '"ClientConnectorEnabled"', 'Flag indicating whether to configure client connector configuration') + .pc-form-grid-col-40 + +text-enabled('Host:', `${connectionModel}.host`, '"ClientConnectorHost"', connectionEnabled, 'false', 'localhost') + .pc-form-grid-col-20 + +number('Port:', `${connectionModel}.port`, '"ClientConnectorPort"', connectionEnabled, '10800', '1025') + .pc-form-grid-col-20 + +number('Port range:', `${connectionModel}.portRange`, '"ClientConnectorPortRange"', connectionEnabled, '100', '0') + .pc-form-grid-col-20 + +number('Socket send buffer size:', `${connectionModel}.socketSendBufferSize`, '"ClientConnectorSocketSendBufferSize"', connectionEnabled, '0', '0', + 'Socket send buffer size<br/>\ + When set to <b>0</b>, operation system default will be used') + .pc-form-grid-col-20 + +number('Socket receive buffer size:', `${connectionModel}.socketReceiveBufferSize`, '"ClientConnectorSocketReceiveBufferSize"', connectionEnabled, '0', '0', + 'Socket receive buffer size<br/>\ + When set to <b>0</b>, operation system default will be used') + .pc-form-grid-col-30 + +number('Max connection cursors:', `${connectionModel}.maxOpenCursorsPerConnection`, '"ClientConnectorMaxOpenCursorsPerConnection"', connectionEnabled, '128', '0', + 'Max number of opened cursors per connection') + .pc-form-grid-col-30 + +number('Pool size:', `${connectionModel}.threadPoolSize`, '"ClientConnectorThreadPoolSize"', connectionEnabled, 'max(8, availableProcessors)', '1', + 'Size of thread pool that is in charge of processing SQL requests') + .pc-form-grid-col-60 + +checkbox-enabled('TCP_NODELAY option', `${connectionModel}.tcpNoDelay`, '"ClientConnectorTcpNoDelay"', connectionEnabled) + .pc-form-grid-col-60(ng-if='$ctrl.available("2.4.0")') + +number('Idle timeout:', `${connectionModel}.idleTimeout`, '"ClientConnectorIdleTimeout"', connectionEnabled, '0', '-1', + 'Idle timeout for client connections<br/>\ + Zero or negative means no timeout') + .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.5.0")') + +checkbox-enabled('Enable SSL', `${connectionModel}.sslEnabled`, '"ClientConnectorSslEnabled"', connectionEnabled, 'Enable secure socket layer on client connector') + .pc-form-grid-col-60 + +checkbox-enabled('Enable SSL client auth', `${connectionModel}.sslClientAuth`, '"ClientConnectorSslClientAuth"', sslEnabled, 'Flag indicating whether or not SSL client authentication is required') + .pc-form-grid-col-60 + +checkbox-enabled('Use Ignite SSL', `${connectionModel}.useIgniteSslContextFactory`, '"ClientConnectorUseIgniteSslContextFactory"', sslEnabled, 'Use SSL factory Ignite configuration') + .pc-form-grid-col-60(ng-if-end) + +java-class('SSL factory:', `${connectionModel}.sslContextFactory`, '"ClientConnectorSslContextFactory"', sslFactoryEnabled, sslFactoryEnabled, + 'If SSL factory specified then replication will be performed through secure SSL channel created with this factory<br/>\ + If not present <b>isUseIgniteSslContextFactory()</b> flag will be evaluated<br/>\ + If set to <b>true</b> and <b>IgniteConfiguration#getSslContextFactory()</b> exists, then Ignite SSL context factory will be used to establish secure connection') + .pc-form-grid-col-60(ng-if-start='$ctrl.available("2.4.0")') + +checkbox-enabled('JDBC Enabled', `${connectionModel}.jdbcEnabled`, '"ClientConnectorJdbcEnabled"', connectionEnabled, 'Access through JDBC is enabled') + .pc-form-grid-col-60 + +checkbox-enabled('ODBC Enabled', `${connectionModel}.odbcEnabled`, '"ClientConnectorOdbcEnabled"', connectionEnabled, 'Access through ODBC is enabled') + .pc-form-grid-col-60(ng-if-end) + +checkbox-enabled('Thin client enabled', `${connectionModel}.thinClientEnabled`, '"ClientConnectorThinCliEnabled"', connectionEnabled, 'Access through thin client is enabled') + .pca-form-column-6 + +preview-xml-java(model, 'clusterClientConnector')