IGNITE-10453 Web Console: Added new property "Disk compression" to "Configuration" screen.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f965bf5c Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f965bf5c Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f965bf5c Branch: refs/heads/ignite-10189 Commit: f965bf5c79e7b17d70962dba5908c31c0b610260 Parents: 4884dec Author: Vasiliy Sisko <[email protected]> Authored: Fri Dec 7 14:44:41 2018 +0700 Committer: Alexey Kuznetsov <[email protected]> Committed: Fri Dec 7 14:44:41 2018 +0700 ---------------------------------------------------------------------- .../configuration/DiskPageCompression.java | 17 ++++++++- .../visor/cache/VisorCacheConfiguration.java | 38 ++++++++++++++++++++ .../visor/node/VisorPersistenceMetrics.java | 34 +++++++++++++++++- modules/web-console/backend/app/schemas.js | 4 ++- .../cache-edit-form/templates/memory.pug | 37 +++++++++++++++++++ .../generator/ConfigurationGenerator.js | 9 +++++ .../configuration/generator/Maven.service.js | 3 ++ .../generator/defaults/Cache.service.js | 5 ++- .../web-console/frontend/app/services/Caches.js | 8 +++++ .../frontend/app/services/Version.service.js | 6 +++- 10 files changed, 156 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/f965bf5c/modules/core/src/main/java/org/apache/ignite/configuration/DiskPageCompression.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/DiskPageCompression.java b/modules/core/src/main/java/org/apache/ignite/configuration/DiskPageCompression.java index d628c6a..2aacbe9 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/DiskPageCompression.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/DiskPageCompression.java @@ -17,6 +17,8 @@ package org.apache.ignite.configuration; +import org.jetbrains.annotations.Nullable; + /** * Disk page compression options. * @@ -34,5 +36,18 @@ public enum DiskPageCompression { LZ4, /** Snappy compression. */ - SNAPPY + SNAPPY; + + /** Enumerated values. */ + private static final DiskPageCompression[] VALS = values(); + + /** + * Efficiently gets enumerated value from its ordinal. + * + * @param ord Ordinal value. + * @return Enumerated value or {@code null} if ordinal out of range. + */ + @Nullable public static DiskPageCompression fromOrdinal(int ord) { + return ord >= 0 && ord < VALS.length ? VALS[ord] : null; + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/f965bf5c/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java index 1e9faaa..3f22065 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java @@ -27,6 +27,7 @@ import org.apache.ignite.cache.CacheWriteSynchronizationMode; import org.apache.ignite.cache.PartitionLossPolicy; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.DataRegionConfiguration; +import org.apache.ignite.configuration.DiskPageCompression; import org.apache.ignite.internal.IgniteEx; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -167,6 +168,12 @@ public class VisorCacheConfiguration extends VisorDataTransferObject { /** Dynamic deployment ID. */ private IgniteUuid dynamicDeploymentId; + /** Disk page compression algorithm. */ + private DiskPageCompression diskPageCompression; + + /** Algorithm specific disk page compression level. */ + private Integer diskPageCompressionLevel; + /** * Default constructor. */ @@ -227,6 +234,9 @@ public class VisorCacheConfiguration extends VisorDataTransferObject { readFromBackup = ccfg.isReadFromBackup(); tmLookupClsName = ccfg.getTransactionManagerLookupClassName(); topValidator = compactClass(ccfg.getTopologyValidator()); + + diskPageCompression = ccfg.getDiskPageCompression(); + diskPageCompressionLevel = ccfg.getDiskPageCompressionLevel(); } /** @@ -519,6 +529,25 @@ public class VisorCacheConfiguration extends VisorDataTransferObject { return dynamicDeploymentId; } + /** + * @return Disk page compression algorithm. + */ + public DiskPageCompression getDiskPageCompression() { + return diskPageCompression; + } + + /** + * @return Algorithm specific disk page compression level. + */ + public Integer getDiskPageCompressionLevel() { + return diskPageCompressionLevel; + } + + /** {@inheritDoc} */ + @Override public byte getProtocolVersion() { + return V2; + } + /** {@inheritDoc} */ @Override protected void writeExternalData(ObjectOutput out) throws IOException { U.writeString(out, name); @@ -561,6 +590,10 @@ public class VisorCacheConfiguration extends VisorDataTransferObject { U.writeString(out, tmLookupClsName); U.writeString(out, topValidator); U.writeGridUuid(out, dynamicDeploymentId); + + // V2 + U.writeEnum(out, diskPageCompression); + out.writeObject(diskPageCompressionLevel); } /** {@inheritDoc} */ @@ -605,6 +638,11 @@ public class VisorCacheConfiguration extends VisorDataTransferObject { tmLookupClsName = U.readString(in); topValidator = U.readString(in); dynamicDeploymentId = U.readGridUuid(in); + + if (protoVer > V1) { + diskPageCompression = DiskPageCompression.fromOrdinal(in.readByte()); + diskPageCompressionLevel = (Integer) in.readObject(); + } } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/f965bf5c/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorPersistenceMetrics.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorPersistenceMetrics.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorPersistenceMetrics.java index ebc1c02..bcab318 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorPersistenceMetrics.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorPersistenceMetrics.java @@ -108,6 +108,12 @@ public class VisorPersistenceMetrics extends VisorDataTransferObject { /** */ private long totalSz; + /** */ + private long storageSize; + + /** */ + private long sparseStorageSize; + /** * Default constructor. */ @@ -151,6 +157,9 @@ public class VisorPersistenceMetrics extends VisorDataTransferObject { cpBufSz = m.getCheckpointBufferSize(); totalSz = m.getTotalAllocatedSize(); + + storageSize = m.getStorageSize(); + sparseStorageSize = m.getSparseStorageSize(); } /** @@ -335,9 +344,23 @@ public class VisorPersistenceMetrics extends VisorDataTransferObject { return totalSz; } + /** + * @return Storage space allocated in bytes. + */ + public long getStorageSize() { + return storageSize; + } + + /** + * @return Storage space allocated adjusted for possible sparsity in bytes. + */ + public long getSparseStorageSize() { + return sparseStorageSize; + } + /** {@inheritDoc} */ @Override public byte getProtocolVersion() { - return V2; + return V3; } /** {@inheritDoc} */ @@ -370,6 +393,10 @@ public class VisorPersistenceMetrics extends VisorDataTransferObject { out.writeLong(usedCpBufSz); out.writeLong(cpBufSz); out.writeLong(totalSz); + + // V3 + out.writeLong(storageSize); + out.writeLong(sparseStorageSize); } /** {@inheritDoc} */ @@ -403,6 +430,11 @@ public class VisorPersistenceMetrics extends VisorDataTransferObject { cpBufSz = in.readLong(); totalSz = in.readLong(); } + + if (protoVer > V2) { + storageSize = in.readLong(); + sparseStorageSize = in.readLong(); + } } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/f965bf5c/modules/web-console/backend/app/schemas.js ---------------------------------------------------------------------- diff --git a/modules/web-console/backend/app/schemas.js b/modules/web-console/backend/app/schemas.js index 69d4a4c..14ce111 100644 --- a/modules/web-console/backend/app/schemas.js +++ b/modules/web-console/backend/app/schemas.js @@ -326,7 +326,9 @@ module.exports.factory = function(mongoose) { memoryPolicyName: String, dataRegionName: String, sqlIndexMaxInlineSize: Number, - topologyValidator: String + topologyValidator: String, + diskPageCompression: {type: String, enum: ['SKIP_GARBAGE', 'ZSTD', 'LZ4', 'SNAPPY']}, + diskPageCompressionLevel: Number }); Cache.index({name: 1, space: 1, clusters: 1}, {unique: true}); http://git-wip-us.apache.org/repos/asf/ignite/blob/f965bf5c/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/memory.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/memory.pug b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/memory.pug index 571e8ec..64c008e 100644 --- a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/memory.pug +++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/memory.pug @@ -63,6 +63,43 @@ panel-collapsible(ng-form=form on-open=`ui.loadPanel('${form}')`) tip: 'Name of data region configuration for this cache' }) + //- Since ignite 2.8 + .pc-form-grid-col-60(ng-if='$ctrl.available("2.8.0")') + +form-field__dropdown({ + label: 'Disk page compression:', + model: `${model}.diskPageCompression`, + name: '"diskPageCompression"', + placeholder: 'IGNITE_DEFAULT_DISK_PAGE_COMPRESSION', + options: '::$ctrl.Caches.diskPageCompression', + tip: `Memory modes control whether value is stored in on-heap memory, off-heap memory, or swap space + <ul> + <li>SKIP_GARBAGE - retain only useful data from half-filled pages, but do not apply any compression</li> + <li>ZSTD - Zstd compression<br/></li> + <li>LZ4 - LZ4 compression<br/></li> + <li>SNAPPY - Snappy compression<br/></li> + </ul>` + }) + .pc-form-grid-col-60(ng-if=`$ctrl.available("2.8.0") && ${model}.diskPageCompression === "ZSTD"`) + +form-field__number({ + label: 'Disk page compression level:', + model: `${model}.diskPageCompressionLevel`, + name: '"diskPageCompressionLevel"', + placeholder: '3', + min: -131072, + max: 22, + tip: 'Disk page compression level from -131072 to 22 or empty to use default 3.<br/>' + }) + .pc-form-grid-col-60(ng-if=`$ctrl.available("2.8.0") && ${model}.diskPageCompression === "LZ4"`) + +form-field__number({ + label: 'Disk page compression level:', + model: `${model}.diskPageCompressionLevel`, + name: '"diskPageCompressionLevel"', + placeholder: '0', + min: 0, + max: 17, + tip: 'Disk page compression level from 0 to 17 or empty to use default 0.<br/>' + }) + //- Removed in ignite 2.0 .pc-form-grid-col-60(ng-if-start='$ctrl.available(["1.0.0", "2.0.0"])') +form-field__dropdown({ http://git-wip-us.apache.org/repos/asf/ignite/blob/f965bf5c/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js index 6fba32a..b330f6e 100644 --- a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js +++ b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js @@ -2087,6 +2087,15 @@ export default class IgniteConfigurationGenerator { if (available('2.3.0')) ccfg.stringProperty('dataRegionName'); + if (available('2.8.0')) { + ccfg.enumProperty('diskPageCompression'); + + const compression = ccfg.valueOf('diskPageCompression'); + + if (compression === 'ZSTD' || compression === 'LZ4') + ccfg.intProperty('diskPageCompressionLevel'); + } + // Removed in ignite 2.0 if (available(['1.0.0', '2.0.0'])) { ccfg.enumProperty('memoryMode'); http://git-wip-us.apache.org/repos/asf/ignite/blob/f965bf5c/modules/web-console/frontend/app/modules/configuration/generator/Maven.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/configuration/generator/Maven.service.js b/modules/web-console/frontend/app/modules/configuration/generator/Maven.service.js index a145f2e..449bc34 100644 --- a/modules/web-console/frontend/app/modules/configuration/generator/Maven.service.js +++ b/modules/web-console/frontend/app/modules/configuration/generator/Maven.service.js @@ -182,6 +182,9 @@ export default class IgniteMavenGenerator { if (_.get(cache, 'nodeFilter.kind') === 'Exclude') this.addDependency(deps, 'org.apache.ignite', 'ignite-extdata-p2p', igniteVer); + + if (cache.diskPageCompression) + this.addDependency(deps, 'org.apache.ignite', 'ignite-compress', igniteVer); }); if (cluster.discovery.kind === 'Jdbc') { http://git-wip-us.apache.org/repos/asf/ignite/blob/f965bf5c/modules/web-console/frontend/app/modules/configuration/generator/defaults/Cache.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/configuration/generator/defaults/Cache.service.js b/modules/web-console/frontend/app/modules/configuration/generator/defaults/Cache.service.js index 3f87b8a..e3c69b6 100644 --- a/modules/web-console/frontend/app/modules/configuration/generator/defaults/Cache.service.js +++ b/modules/web-console/frontend/app/modules/configuration/generator/defaults/Cache.service.js @@ -120,7 +120,10 @@ const DFLT_CACHE = { clsName: 'java.sql.Types' } }, - memoryPolicyName: 'default' + memoryPolicyName: 'default', + diskPageCompression: { + clsName: 'org.apache.ignite.configuration.DiskPageCompression' + } }; export default class IgniteCacheDefaults { http://git-wip-us.apache.org/repos/asf/ignite/blob/f965bf5c/modules/web-console/frontend/app/services/Caches.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/services/Caches.js b/modules/web-console/frontend/app/services/Caches.js index 626395d..db99a4b 100644 --- a/modules/web-console/frontend/app/services/Caches.js +++ b/modules/web-console/frontend/app/services/Caches.js @@ -111,6 +111,14 @@ export default class Caches { {value: 'OFFHEAP_VALUES', label: 'OFFHEAP_VALUES'} ]; + diskPageCompression = [ + {value: 'SKIP_GARBAGE', label: 'SKIP_GARBAGE'}, + {value: 'ZSTD', label: 'ZSTD'}, + {value: 'LZ4', label: 'LZ4'}, + {value: 'SNAPPY', label: 'SNAPPY'}, + {value: null, label: 'Disabled'} + ]; + offHeapMode = { _val(cache) { return (cache.offHeapMode === null || cache.offHeapMode === void 0) ? -1 : cache.offHeapMode; http://git-wip-us.apache.org/repos/asf/ignite/blob/f965bf5c/modules/web-console/frontend/app/services/Version.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/services/Version.service.js b/modules/web-console/frontend/app/services/Version.service.js index bbd03cb..8bbf6ef 100644 --- a/modules/web-console/frontend/app/services/Version.service.js +++ b/modules/web-console/frontend/app/services/Version.service.js @@ -74,10 +74,14 @@ const compare = (a, b) => { export default class IgniteVersion { constructor() { - this.webConsole = '2.7.0'; + this.webConsole = '2.8.0'; this.supportedVersions = [ { + label: 'Ignite 2.8', + ignite: '2.8.0' + }, + { label: 'Ignite 2.7', ignite: '2.7.0' },
