Repository: ignite Updated Branches: refs/heads/ignite-843-rc1 b3010bb6b -> cb42765e4
IGNITE-1200 WIP IGFS: added code generation + preview. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7ef27e54 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7ef27e54 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7ef27e54 Branch: refs/heads/ignite-843-rc1 Commit: 7ef27e54cc7c92898459d3a8305872c91bc1fd4d Parents: c1583b6 Author: vsisko <[email protected]> Authored: Mon Oct 26 10:13:09 2015 +0700 Committer: Alexey Kuznetsov <[email protected]> Committed: Mon Oct 26 10:13:09 2015 +0700 ---------------------------------------------------------------------- .../src/main/js/controllers/igfs-controller.js | 24 +++- .../src/main/js/controllers/models/igfs.json | 2 + .../main/js/controllers/summary-controller.js | 4 + .../js/routes/generator/generator-common.js | 16 ++- .../main/js/routes/generator/generator-java.js | 134 ++++++++++++++++++- .../main/js/routes/generator/generator-xml.js | 134 ++++++++++++++++++- 6 files changed, 303 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/7ef27e54/modules/control-center-web/src/main/js/controllers/igfs-controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/igfs-controller.js b/modules/control-center-web/src/main/js/controllers/igfs-controller.js index ecbf69b..c8855b7 100644 --- a/modules/control-center-web/src/main/js/controllers/igfs-controller.js +++ b/modules/control-center-web/src/main/js/controllers/igfs-controller.js @@ -89,6 +89,7 @@ consoleModule.controller('igfsController', [ general: {xml: '', java: '', allDefaults: true}, ipc: {xml: '', java: '', allDefaults: true}, fragmentizer: {xml: '', java: '', allDefaults: true}, + dualMode: {xml: '', java: '', allDefaults: true}, misc: {xml: '', java: '', allDefaults: true} }; @@ -159,9 +160,25 @@ consoleModule.controller('igfsController', [ var varName = $commonUtils.toJavaName('igfs', val.name); - $scope.preview.general.xml = $generatorXml.igfs(val).asString(); - $scope.preview.general.java = $generatorJava.igfs(val, varName).asString(); + $scope.preview.general.xml = $generatorXml.igfsGeneral(val).asString(); + $scope.preview.general.java = $generatorJava.igfsGeneral(val, varName).asString(); $scope.preview.general.allDefaults = $common.isEmptyString($scope.preview.general.xml); + + $scope.preview.ipc.xml = $generatorXml.igfsIPC(val).asString(); + $scope.preview.ipc.java = $generatorJava.igfsIPC(val, varName).asString(); + $scope.preview.ipc.allDefaults = $common.isEmptyString($scope.preview.ipc.xml); + + $scope.preview.fragmentizer.xml = $generatorXml.igfsFragmentizer(val).asString(); + $scope.preview.fragmentizer.java = $generatorJava.igfsFragmentizer(val, varName).asString(); + $scope.preview.fragmentizer.allDefaults = $common.isEmptyString($scope.preview.fragmentizer.xml); + + $scope.preview.dualMode.xml = $generatorXml.igfsDualMode(val).asString(); + $scope.preview.dualMode.java = $generatorJava.igfsDualMode(val, varName).asString(); + $scope.preview.dualMode.allDefaults = $common.isEmptyString($scope.preview.dualMode.xml); + + $scope.preview.misc.xml = $generatorXml.igfsMisc(val).asString(); + $scope.preview.misc.java = $generatorJava.igfsMisc(val, varName).asString(); + $scope.preview.misc.allDefaults = $common.isEmptyString($scope.preview.general.xml); } }, true); }) @@ -233,7 +250,8 @@ consoleModule.controller('igfsController', [ if ($common.isEmptyString(item.name)) return showPopoverMessage($scope.panels, 'general', 'igfsName', 'Name should not be empty'); - if (!$common.isEmptyString(item.dualModePutExecutorService) && !$common.isValidJavaClass('Put executor service', item.dualModePutExecutorService, false, 'dualModePutExecutorService', false, $scope.panels, 'dualMode')) + if (!$common.isEmptyString(item.dualModePutExecutorService) && + !$common.isValidJavaClass('Put executor service', item.dualModePutExecutorService, false, 'dualModePutExecutorService', false, $scope.panels, 'dualMode')) return false; return true; http://git-wip-us.apache.org/repos/asf/ignite/blob/7ef27e54/modules/control-center-web/src/main/js/controllers/models/igfs.json ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/models/igfs.json b/modules/control-center-web/src/main/js/controllers/models/igfs.json index 5f688b8..a22b720 100644 --- a/modules/control-center-web/src/main/js/controllers/models/igfs.json +++ b/modules/control-center-web/src/main/js/controllers/models/igfs.json @@ -99,6 +99,7 @@ "path": "ipcEndpointConfiguration", "model": "port", "placeholder": 10500, + "max": 65535, "hide": "!backupItem.ipcEndpointEnabled", "tip": [ "Port" @@ -278,6 +279,7 @@ "type": "number", "model": "managementPort", "placeholder": 11400, + "max": 65535, "tip": [ "Port number for management endpoint" ] http://git-wip-us.apache.org/repos/asf/ignite/blob/7ef27e54/modules/control-center-web/src/main/js/controllers/summary-controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/summary-controller.js b/modules/control-center-web/src/main/js/controllers/summary-controller.js index fb57065..6efe806 100644 --- a/modules/control-center-web/src/main/js/controllers/summary-controller.js +++ b/modules/control-center-web/src/main/js/controllers/summary-controller.js @@ -201,6 +201,10 @@ consoleModule.controller('summaryController', [ cluster.caches = _.filter(data.caches, function (cache) { return _.contains(cluster.caches, cache._id); }); + + cluster.igfss = _.filter(data.igfss, function (igfs) { + return _.contains(cluster.igfss, igfs._id); + }); }); var restoredId = sessionStorage.summarySelectedId; http://git-wip-us.apache.org/repos/asf/ignite/blob/7ef27e54/modules/control-center-web/src/main/js/routes/generator/generator-common.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/routes/generator/generator-common.js b/modules/control-center-web/src/main/js/routes/generator/generator-common.js index 8b88219..46213b8 100644 --- a/modules/control-center-web/src/main/js/routes/generator/generator-common.js +++ b/modules/control-center-web/src/main/js/routes/generator/generator-common.js @@ -69,10 +69,6 @@ $generatorCommon.builder = function () { res.safeDatasources = []; res.safePoint = -1; - function getLineStart() { - return this.lineStart ? _.repeat(' ', this.deep) : ''; - } - res.startSafeBlock = function () { res.safeDeep = this.deep; this.safeNeedEmptyLine = this.needEmptyLine; @@ -373,6 +369,18 @@ $generatorCommon.COMMUNICATION_CONFIGURATION = { } }; +// Communication configuration code generation descriptor. +$generatorCommon.IGFS_IPC_CONFIGURATION = { + className: 'org.apache.ignite.igfs.IgfsIpcEndpointConfiguration', + fields: { + type: {type: 'enum', enumClass: 'org.apache.ignite.igfs.IgfsIpcEndpointType'}, + host: {dflt: '127.0.0.1'}, + port: {dflt: 10500}, + memorySize: {dflt: 262144}, + tokenDirectoryPath: {dflt: 'ipc/shmem'} + } +}; + // For server side we should export Java code generation entry point. if (typeof window === 'undefined') { module.exports = $generatorCommon; http://git-wip-us.apache.org/repos/asf/ignite/blob/7ef27e54/modules/control-center-web/src/main/js/routes/generator/generator-java.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/routes/generator/generator-java.js b/modules/control-center-web/src/main/js/routes/generator/generator-java.js index d65f3e9..d9e0cc4 100644 --- a/modules/control-center-web/src/main/js/routes/generator/generator-java.js +++ b/modules/control-center-web/src/main/js/routes/generator/generator-java.js @@ -1512,16 +1512,144 @@ $generatorJava.clusterSsl = function(cluster, res) { $generatorJava.beanProperty(res, 'cfg', cluster.sslContextFactory, 'sslContextFactory', 'sslContextFactory', 'org.apache.ignite.ssl.SslContextFactory', propsDesc, false); + + res.needEmptyLine = true; + } + + return res; +}; + +$generatorJava.igfss = function(igfss, varName, res) { + if (!res) + res = $generatorCommon.builder(); + + if ($commonUtils.isDefinedAndNotEmpty(igfss)) { + res.emptyLineIfNeeded(); + + var arrayName = 'fileSystems'; + var igfsInst = 'igfs'; + + res.line(res.importClass('org.apache.ignite.configuration.FileSystemConfiguration') + '[] ' + arrayName + ' = new FileSystemConfiguration[' + igfss.length + '];'); + + _.forEach(igfss, function(igfs, ix) { + $generatorJava.declareVariable(res, $generatorJava.needNewVariable(res, igfsInst), igfsInst, 'org.apache.ignite.configuration.FileSystemConfiguration'); + + $generatorJava.igfsGeneral(igfs, igfsInst, res); + $generatorJava.igfsIPC(igfs, igfsInst, res); + $generatorJava.igfsFragmentizer(igfs, igfsInst, res); + $generatorJava.igfsDualMode(igfs, igfsInst, res); + $generatorJava.igfsMisc(igfs, igfsInst, res); + + res.line(arrayName + '[' + ix + '] = ' + igfsInst + ';'); + + res.needEmptyLine = true; + }); + + res.line(varName + '.' + 'setFileSystemConfiguration(' + arrayName + ');'); + + res.needEmptyLine = true; + } + + return res; +}; + +$generatorJava.igfsIPC = function(igfs, varName, res) { + if (!res) + res = $generatorCommon.builder(); + + if (igfs.ipcEndpointEnabled) { + var desc = $generatorCommon.IGFS_IPC_CONFIGURATION; + + $generatorJava.beanProperty(res, varName, igfs.ipcEndpointConfiguration, 'ipcEndpointConfiguration', 'ipcEndpointCfg', + desc.className, desc.fields, true); + + res.needEmptyLine = true; + } + + return res; +}; + +$generatorJava.igfsFragmentizer = function(igfs, varName, res) { + if (!res) + res = $generatorCommon.builder(); + + if (igfs.fragmentizerEnabled) { + $generatorJava.property(res, varName, igfs, 'fragmentizerConcurrentFiles', undefined, undefined, 0); + $generatorJava.property(res, varName, igfs, 'fragmentizerThrottlingBlockLength', undefined, undefined, 16777216); + $generatorJava.property(res, varName, igfs, 'fragmentizerThrottlingDelay', undefined, undefined, 200); + + res.needEmptyLine = true; } return res; }; -$generatorJava.igfs = function(igfs, varName, res) { +$generatorJava.igfsDualMode = function(igfs, varName, res) { + if (!res) + res = $generatorCommon.builder(); + + $generatorJava.property(res, varName, igfs, 'dualModeMaxPendingPutsSize', undefined, undefined, 0); + + if ($commonUtils.isDefinedAndNotEmpty(igfs.dualModePutExecutorService)) + res.line(varName + '.' + $generatorJava.setterName('dualModePutExecutorService') + '(new ' + res.importClass(igfs.dualModePutExecutorService) + '());'); + + $generatorJava.property(res, varName, igfs, 'dualModePutExecutorServiceShutdown', undefined, undefined, false); + + res.needEmptyLine = true; + + return res; +}; + +$generatorJava.igfsGeneral = function(igfs, varName, res) { if (!res) res = $generatorCommon.builder(); - res.line('TODO IGFS java code generation'); + if ($commonUtils.isDefinedAndNotEmpty(igfs.name)) { + igfs.dataCacheName = igfs.name + 'Data'; + igfs.metaCacheName = igfs.name + 'Meta'; + + $generatorJava.property(res, varName, igfs, 'name'); + $generatorJava.property(res, varName, igfs, 'dataCacheName'); + $generatorJava.property(res, varName, igfs, 'metaCacheName'); + + res.needEmptyLine = true; + } + + return res; +}; + +$generatorJava.igfsMisc = function(igfs, varName, res) { + if (!res) + res = $generatorCommon.builder(); + + $generatorJava.property(res, varName, igfs, 'blockSize', undefined, undefined, 65536); + $generatorJava.property(res, varName, igfs, 'streamBufferSize', undefined, undefined, 65536); + $generatorJava.property(res, varName, igfs, 'defaultMode', res.importClass('org.apache.ignite.igfs.IgfsMode'), undefined, "DUAL_ASYNC"); + $generatorJava.property(res, varName, igfs, 'maxSpaceSize'); + $generatorJava.property(res, varName, igfs, 'maximumTaskRangeLength'); + $generatorJava.property(res, varName, igfs, 'managementPort', undefined, undefined, 11400); + + if (igfs.pathModes && igfs.pathModes.length > 0) { + res.needEmptyLine = true; + + $generatorJava.declareVariable(res, true, 'pathModes', 'java.util.HashMap<String, ' + res.importClass('org.apache.ignite.igfs.IgfsMode') + '>'); + + _.forEach(igfs.pathModes, function (pair) { + res.line('pathModes.put("' + pair.path + '", IgfsMode.' + pair.mode +');'); + }); + + res.needEmptyLine = true; + + res.line(varName + '.setPathModes(pathModes);'); + } + + $generatorJava.property(res, varName, igfs, 'perNodeBatchSize', undefined, undefined, 100); + $generatorJava.property(res, varName, igfs, 'perNodeParallelBatchCount', undefined, undefined, 8); + $generatorJava.property(res, varName, igfs, 'prefetchBlocks', undefined, undefined, 0); + $generatorJava.property(res, varName, igfs, 'sequentialReadsBeforePrefetch', undefined, undefined, 0); + $generatorJava.property(res, varName, igfs, 'trashPurgeTimeout', undefined, undefined, 1000); + + res.needEmptyLine = true; return res; }; @@ -1577,6 +1705,8 @@ $generatorJava.cluster = function (cluster, javaClass, clientNearCfg) { $generatorJava.clusterSsl(cluster, res); + $generatorJava.igfss(cluster.igfss, 'cfg', res); + if (javaClass) { res.importClass('org.apache.ignite.Ignite'); res.importClass('org.apache.ignite.Ignition'); http://git-wip-us.apache.org/repos/asf/ignite/blob/7ef27e54/modules/control-center-web/src/main/js/routes/generator/generator-xml.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/routes/generator/generator-xml.js b/modules/control-center-web/src/main/js/routes/generator/generator-xml.js index 6dfd9cf..12e4d0f 100644 --- a/modules/control-center-web/src/main/js/routes/generator/generator-xml.js +++ b/modules/control-center-web/src/main/js/routes/generator/generator-xml.js @@ -637,6 +637,8 @@ $generatorXml.clusterSsl = function(cluster, res) { $generatorCommon.SSL_CONFIGURATION_TRUST_FILE_FACTORY; $generatorXml.beanProperty(res, cluster.sslContextFactory, 'sslContextFactory', propsDesc, false); + + res.needEmptyLine = true; } return res; @@ -1088,11 +1090,137 @@ $generatorXml.clusterCaches = function(caches, res) { return res; }; -$generatorXml.igfs = function(igfs, res) { +$generatorXml.igfss = function(igfss, res) { + if (!res) + res = $generatorCommon.builder(); + + if ($commonUtils.isDefinedAndNotEmpty(igfss)) { + res.emptyLineIfNeeded(); + + res.startBlock('<property name="fileSystemConfiguration">'); + res.startBlock('<list>'); + + _.forEach(igfss, function(igfs) { + res.startBlock('<bean class="org.apache.ignite.configuration.FileSystemConfiguration">'); + + $generatorXml.igfsGeneral(igfs, res); + $generatorXml.igfsIPC(igfs, res); + $generatorXml.igfsFragmentizer(igfs, res); + $generatorXml.igfsDualMode(igfs, res); + $generatorXml.igfsMisc(igfs, res); + + res.endBlock('</bean>'); + + }); + + res.endBlock('</list>'); + res.endBlock('</property>'); + + res.needEmptyLine = true; + } + + return res; +}; + +$generatorXml.igfsIPC = function(igfs, res) { if (!res) res = $generatorCommon.builder(); - res.line('TODO IGFS XML generation'); + if (igfs.ipcEndpointEnabled) { + $generatorXml.beanProperty(res, igfs.ipcEndpointConfiguration, 'ipcEndpointConfiguration', $generatorCommon.IGFS_IPC_CONFIGURATION, true); + + res.needEmptyLine = true; + } + + return res; +}; + +$generatorXml.igfsFragmentizer = function(igfs, res) { + if (!res) + res = $generatorCommon.builder(); + + if (igfs.fragmentizerEnabled) { + $generatorXml.property(res, igfs, 'fragmentizerConcurrentFiles', undefined, 0); + $generatorXml.property(res, igfs, 'fragmentizerThrottlingBlockLength', undefined, 16777216); + $generatorXml.property(res, igfs, 'fragmentizerThrottlingDelay', undefined, 200); + + res.needEmptyLine = true; + } + + return res; +}; + +$generatorXml.igfsDualMode = function(igfs, res) { + if (!res) + res = $generatorCommon.builder(); + + $generatorXml.property(res, igfs, 'dualModeMaxPendingPutsSize', undefined, 0); + + if ($commonUtils.isDefinedAndNotEmpty(igfs.dualModePutExecutorService)) { + res.startBlock('<property name="dualModePutExecutorService">'); + res.line('<bean class="' + igfs.dualModePutExecutorService + '"/>'); + res.endBlock('</property>'); + } + + $generatorXml.property(res, igfs, 'dualModePutExecutorServiceShutdown', undefined, false); + + res.needEmptyLine = true; + + return res; +}; + +$generatorXml.igfsGeneral = function(igfs, res) { + if (!res) + res = $generatorCommon.builder(); + + if ($commonUtils.isDefinedAndNotEmpty(igfs.name)) { + igfs.dataCacheName = igfs.name + 'Data'; + igfs.metaCacheName = igfs.name + 'Meta'; + + $generatorXml.property(res, igfs, 'name'); + $generatorXml.property(res, igfs, 'dataCacheName'); + $generatorXml.property(res, igfs, 'metaCacheName'); + + res.needEmptyLine = true; + } + + return res; +}; + +$generatorXml.igfsMisc = function(igfs, res) { + if (!res) + res = $generatorCommon.builder(); + + $generatorXml.property(res, igfs, 'blockSize', undefined, 65536); + $generatorXml.property(res, igfs, 'streamBufferSize', undefined, 65536); + $generatorXml.property(res, igfs, 'defaultMode', undefined, "DUAL_ASYNC"); + $generatorXml.property(res, igfs, 'maxSpaceSize'); + $generatorXml.property(res, igfs, 'maximumTaskRangeLength'); + $generatorXml.property(res, igfs, 'managementPort', undefined, 11400); + + res.needEmptyLine = true; + + if (igfs.pathModes && igfs.pathModes.length > 0) { + res.startBlock('<property name="pathModes">'); + res.startBlock('<map>'); + + for (var i = 0; i < igfs.pathModes.length; i++) { + var pair = igfs.pathModes[i]; + + res.line('<entry key="' + pair.path + '" value="' + pair.mode + '"/>'); + } + + res.endBlock('</map>'); + res.endBlock('</property>'); + + res.needEmptyLine = true; + } + + $generatorXml.property(res, igfs, 'perNodeBatchSize', undefined, 100); + $generatorXml.property(res, igfs, 'perNodeParallelBatchCount', undefined, 8); + $generatorXml.property(res, igfs, 'prefetchBlocks', undefined, 0); + $generatorXml.property(res, igfs, 'sequentialReadsBeforePrefetch', undefined, 0); + $generatorXml.property(res, igfs, 'trashPurgeTimeout', undefined, 1000); return res; }; @@ -1153,6 +1281,8 @@ $generatorXml.cluster = function (cluster, clientNearCfg) { $generatorXml.clusterSsl(cluster, res); + $generatorXml.igfss(cluster.igfss, res); + res.endBlock('</bean>'); // Build final XML:
