You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2017/06/05 09:06:05 UTC
[29/34] ignite git commit: IGNITE-5388 Added support to configuration
of Ignite 2.x and Ignite 1.x.
IGNITE-5388 Added support to configuration of Ignite 2.x and Ignite 1.x.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e04df7d1
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e04df7d1
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e04df7d1
Branch: refs/heads/ignite-5267
Commit: e04df7d1fb6cf0ed1756cd7df9980cf4c509ab6f
Parents: 898781a
Author: Andrey Novikov <an...@gridgain.com>
Authored: Mon Jun 5 10:27:23 2017 +0700
Committer: Andrey Novikov <an...@gridgain.com>
Committed: Mon Jun 5 10:27:23 2017 +0700
----------------------------------------------------------------------
modules/web-console/backend/app/mongo.js | 79 ++-
modules/web-console/backend/services/caches.js | 2 +
modules/web-console/backend/services/igfss.js | 5 +
modules/web-console/frontend/app/app.config.js | 3 +-
modules/web-console/frontend/app/app.js | 12 +-
.../cluster-select/cluster-select.pug | 2 +-
.../list-of-registered-users.column-defs.js | 2 +-
.../app/components/version-picker/component.js | 52 ++
.../app/components/version-picker/index.js | 25 +
.../app/components/version-picker/style.scss | 41 ++
.../app/components/version-picker/template.pug | 33 ++
.../frontend/app/data/event-groups.json | 14 +
.../ui-ace-docker/ui-ace-docker.controller.js | 8 +-
.../ui-ace-java/ui-ace-java.controller.js | 29 +-
.../ui-ace-java/ui-ace-java.directive.js | 12 +-
.../ui-ace-pom/ui-ace-pom.controller.js | 8 +-
.../ui-ace-spring/ui-ace-spring.controller.js | 29 +-
.../ui-ace-spring/ui-ace-spring.directive.js | 12 +-
.../frontend/app/helpers/jade/mixins.pug | 4 +-
.../app/modules/agent/AgentManager.service.js | 15 +-
.../frontend/app/modules/cluster/Cache.js | 4 +
.../app/modules/cluster/CacheMetrics.js | 4 +
.../modules/configuration/Version.service.js | 180 +++---
.../generator/AbstractTransformer.js | 110 ++--
.../generator/ConfigurationGenerator.js | 570 +++++++++++++++----
.../configuration/generator/Docker.service.js | 12 +-
.../generator/JavaTransformer.service.js | 32 +-
.../configuration/generator/Maven.service.js | 38 +-
.../generator/PlatformGenerator.js | 19 +-
.../generator/SpringTransformer.service.js | 23 +-
.../defaults/Cache.platform.service.js | 9 +
.../generator/defaults/Cache.service.js | 23 +-
.../generator/defaults/Cluster.service.js | 46 +-
.../generator/defaults/IGFS.service.js | 9 +-
.../frontend/app/modules/sql/sql.controller.js | 6 +-
.../app/modules/states/configuration.state.js | 21 +-
.../states/configuration/caches/affinity.pug | 23 +-
.../states/configuration/caches/concurrency.pug | 14 +
.../states/configuration/caches/general.pug | 71 ++-
.../states/configuration/caches/memory.pug | 99 +++-
.../states/configuration/caches/node-filter.pug | 27 +-
.../states/configuration/caches/query.pug | 25 +-
.../states/configuration/caches/store.pug | 5 +
.../configuration/clusters/deployment.pug | 8 +-
.../states/configuration/clusters/discovery.pug | 14 +-
.../states/configuration/clusters/events.pug | 26 +-
.../states/configuration/clusters/failover.pug | 9 +
.../states/configuration/clusters/general.pug | 2 +-
.../states/configuration/clusters/hadoop.pug | 119 ++++
.../configuration/clusters/marshaller.pug | 37 +-
.../states/configuration/clusters/memory.pug | 114 ++++
.../states/configuration/clusters/metrics.pug | 2 +-
.../states/configuration/clusters/misc.pug | 60 ++
.../states/configuration/clusters/service.pug | 88 +++
.../states/configuration/clusters/swap.pug | 72 +++
.../states/configuration/clusters/thread.pug | 54 +-
.../states/configuration/clusters/time.pug | 13 +-
.../states/configuration/domains/query.pug | 2 +-
.../modules/states/configuration/igfs/dual.pug | 42 ++
.../modules/states/configuration/igfs/misc.pug | 25 +-
.../summary/summary-zipper.service.js | 4 +-
.../configuration/summary/summary.controller.js | 2 +-
.../configuration/summary/summary.worker.js | 13 +-
.../frontend/app/primitives/btn-group/index.pug | 12 +-
.../frontend/app/primitives/btn/index.scss | 6 +
.../frontend/app/primitives/dropdown/index.pug | 3 +-
.../frontend/app/primitives/dropdown/index.scss | 19 +-
.../frontend/controllers/caches-controller.js | 71 ++-
.../frontend/controllers/clusters-controller.js | 190 ++++++-
.../frontend/controllers/domains-controller.js | 7 +-
.../frontend/controllers/igfs-controller.js | 9 +-
.../frontend/public/stylesheets/style.scss | 19 +-
.../frontend/test/unit/Version.test.js | 95 ++--
.../frontend/views/configuration/caches.tpl.pug | 2 +-
.../views/configuration/clusters.tpl.pug | 13 +-
.../views/configuration/domains.tpl.pug | 2 +-
.../frontend/views/configuration/igfs.tpl.pug | 6 +-
.../views/configuration/sidebar.tpl.pug | 4 +-
.../frontend/views/includes/header-left.pug | 3 -
.../frontend/views/includes/header-right.pug | 1 -
.../frontend/views/settings/admin.tpl.pug | 2 +-
.../frontend/views/settings/profile.tpl.pug | 2 +-
.../web-console/frontend/views/signin.tpl.pug | 6 +-
.../web-console/frontend/views/sql/sql.tpl.pug | 8 +-
.../frontend/webpack/webpack.common.js | 8 +-
.../frontend/webpack/webpack.dev.babel.js | 5 +-
.../console/agent/handlers/ClusterListener.java | 12 +-
87 files changed, 2396 insertions(+), 572 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/backend/app/mongo.js
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/app/mongo.js b/modules/web-console/backend/app/mongo.js
index 077044c..d3bc4c0 100644
--- a/modules/web-console/backend/app/mongo.js
+++ b/modules/web-console/backend/app/mongo.js
@@ -101,7 +101,7 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
// Define Domain model schema.
const DomainModelSchema = new Schema({
- space: {type: ObjectId, ref: 'Space', index: true},
+ space: {type: ObjectId, ref: 'Space', index: true, required: true},
caches: [{type: ObjectId, ref: 'Cache'}],
queryMetadata: {type: String, enum: ['Annotations', 'Configuration']},
kind: {type: String, enum: ['query', 'store', 'both']},
@@ -139,7 +139,7 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
// Define Cache schema.
const CacheSchema = new Schema({
- space: {type: ObjectId, ref: 'Space', index: true},
+ space: {type: ObjectId, ref: 'Space', index: true, required: true},
name: {type: String},
clusters: [{type: ObjectId, ref: 'Cluster'}],
domains: [{type: ObjectId, ref: 'DomainModel'}],
@@ -180,6 +180,10 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
},
backups: Number,
+ memoryMode: {type: String, enum: ['ONHEAP_TIERED', 'OFFHEAP_TIERED', 'OFFHEAP_VALUES']},
+ offHeapMaxMemory: Number,
+ startSize: Number,
+ swapEnabled: Boolean,
onheapCacheEnabled: Boolean,
@@ -259,16 +263,19 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
writeBehindFlushSize: Number,
writeBehindFlushFrequency: Number,
writeBehindFlushThreadCount: Number,
- writeBehindCoalescing: Boolean,
+ writeBehindCoalescing: {type: Boolean, default: true},
invalidate: Boolean,
defaultLockTimeout: Number,
+ atomicWriteOrderMode: {type: String, enum: ['CLOCK', 'PRIMARY']},
writeSynchronizationMode: {type: String, enum: ['FULL_SYNC', 'FULL_ASYNC', 'PRIMARY_SYNC']},
sqlEscapeAll: Boolean,
sqlSchema: String,
+ sqlOnheapRowCacheSize: Number,
longQueryWarningTimeout: Number,
sqlFunctionClasses: [String],
+ snapshotableIndex: Boolean,
queryDetailMetricsSize: Number,
queryParallelism: Number,
statisticsEnabled: Boolean,
@@ -332,15 +339,18 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
result.Cache = mongoose.model('Cache', CacheSchema);
const IgfsSchema = new Schema({
- space: {type: ObjectId, ref: 'Space', index: true},
+ space: {type: ObjectId, ref: 'Space', index: true, required: true},
name: {type: String},
clusters: [{type: ObjectId, ref: 'Cluster'}],
affinnityGroupSize: Number,
blockSize: Number,
- bufferSize: Number,
+ streamBufferSize: Number,
dataCacheName: String,
metaCacheName: String,
defaultMode: {type: String, enum: ['PRIMARY', 'PROXY', 'DUAL_SYNC', 'DUAL_ASYNC']},
+ dualModeMaxPendingPutsSize: Number,
+ dualModePutExecutorService: String,
+ dualModePutExecutorServiceShutdown: Boolean,
fragmentizerConcurrentFiles: Number,
fragmentizerEnabled: Boolean,
fragmentizerThrottlingBlockLength: Number,
@@ -354,6 +364,7 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
threadCount: Number
},
ipcEndpointEnabled: Boolean,
+ maxSpaceSize: Number,
maximumTaskRangeLength: Number,
managementPort: Number,
pathModes: [{path: String, mode: {type: String, enum: ['PRIMARY', 'PROXY', 'DUAL_SYNC', 'DUAL_ASYNC']}}],
@@ -361,6 +372,7 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
perNodeParallelBatchCount: Number,
prefetchBlocks: Number,
sequentialReadsBeforePrefetch: Number,
+ trashPurgeTimeout: Number,
secondaryFileSystemEnabled: Boolean,
secondaryFileSystem: {
uri: String,
@@ -369,7 +381,7 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
},
colocateMetadata: Boolean,
relaxedConsistency: Boolean,
- updateFileLenOnFlush: Boolean
+ updateFileLengthOnFlush: Boolean
});
IgfsSchema.index({name: 1, space: 1}, {unique: true});
@@ -379,9 +391,9 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
// Define Cluster schema.
const ClusterSchema = new Schema({
- space: {type: ObjectId, ref: 'Space', index: true},
+ space: {type: ObjectId, ref: 'Space', index: true, required: true},
name: {type: String},
- activeOnStart: Boolean,
+ activeOnStart: {type: Boolean, default: true},
localHost: String,
discovery: {
localAddress: String,
@@ -394,7 +406,9 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
networkTimeout: Number,
joinTimeout: Number,
threadPriority: Number,
- metricsUpdateFrequency: Number,
+ heartbeatFrequency: Number,
+ maxMissedHeartbeats: Number,
+ maxMissedClientHeartbeats: Number,
topHistorySize: Number,
listener: String,
dataExchange: String,
@@ -553,6 +567,8 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
compactFooter: Boolean
},
caches: [{type: ObjectId, ref: 'Cache'}],
+ clockSyncSamples: Number,
+ clockSyncFrequency: Number,
deploymentMode: {type: String, enum: ['PRIVATE', 'ISOLATED', 'SHARED', 'CONTINUOUS']},
discoveryStartupDelay: Number,
igfsThreadPoolSize: Number,
@@ -578,6 +594,8 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
}
},
marshalLocalJobs: Boolean,
+ marshallerCacheKeepAliveTime: Number,
+ marshallerCacheThreadPoolSize: Number,
metricsExpireTime: Number,
metricsHistorySize: Number,
metricsLogFrequency: Number,
@@ -635,6 +653,16 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
peerClassLoadingMissedResourcesCacheSize: Number,
peerClassLoadingThreadPoolSize: Number,
publicThreadPoolSize: Number,
+ swapSpaceSpi: {
+ kind: {type: String, enum: ['FileSwapSpaceSpi']},
+ FileSwapSpaceSpi: {
+ baseDirectory: String,
+ readStripesNumber: Number,
+ maximumSparsity: Number,
+ maxWriteQueueSize: Number,
+ writeBufferSize: Number
+ }
+ },
systemThreadPoolSize: Number,
timeServerPortBase: Number,
timeServerPortRange: Number,
@@ -858,10 +886,22 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
},
warmupClosure: String,
hadoopConfiguration: {
+ mapReducePlanner: {
+ kind: {type: String, enum: ['Weighted', 'Custom']},
+ Weighted: {
+ localMapperWeight: Number,
+ remoteMapperWeight: Number,
+ localReducerWeight: Number,
+ remoteReducerWeight: Number,
+ preferLocalReducerThresholdWeight: Number
+ },
+ Custom: {
+ className: String
+ }
+ },
finishedJobInfoTtl: Number,
- mapReducePlanner: String,
maxParallelTasks: Number,
- naxTaskQueueSize: Number,
+ maxTaskQueueSize: Number,
nativeLibraryNames: [String]
},
serviceConfigurations: [{
@@ -884,10 +924,11 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
cache: {type: ObjectId, ref: 'Cache'},
affinityKey: String
}],
- cacheSanityCheckEnabled: Boolean,
+ cacheSanityCheckEnabled: {type: Boolean, default: true},
classLoader: String,
consistentId: String,
failureDetectionTimeout: Number,
+ clientFailureDetectionTimeout: Number,
workDirectory: String,
lateAffinityAssignment: Boolean,
utilityCacheKeepAliveTime: Number,
@@ -899,18 +940,24 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
utilityCacheThreadPoolSize: Number,
executorConfiguration: [{
name: String,
- poolSize: Number
+ size: Number
}],
memoryConfiguration: {
+ systemCacheInitialSize: Number,
+ systemCacheMaxSize: Number,
pageSize: Number,
- systemCacheMemorySize: Number,
concurrencyLevel: Number,
defaultMemoryPolicyName: String,
+ defaultMemoryPolicySize: Number,
memoryPolicies: [{
name: String,
+ initialSize: Number,
maxSize: Number,
swapFilePath: String,
- pageEvictionMode: {type: String, enum: ['DISABLED', 'RANDOM_LRU', 'RANDOM_2_LRU']}
+ pageEvictionMode: {type: String, enum: ['DISABLED', 'RANDOM_LRU', 'RANDOM_2_LRU']},
+ evictionThreshold: Number,
+ emptyPagesPoolSize: Number,
+ metricsEnabled: Boolean
}]
}
});
@@ -922,7 +969,7 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
// Define Notebook schema.
const NotebookSchema = new Schema({
- space: {type: ObjectId, ref: 'Space', index: true},
+ space: {type: ObjectId, ref: 'Space', index: true, required: true},
name: String,
expandedParagraphs: [Number],
paragraphs: [{
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/backend/services/caches.js
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/services/caches.js b/modules/web-console/backend/services/caches.js
index 646fbea..19aed82 100644
--- a/modules/web-console/backend/services/caches.js
+++ b/modules/web-console/backend/services/caches.js
@@ -131,6 +131,8 @@ module.exports.factory = (_, mongo, spaceService, errors) => {
return mongo.Cluster.update({caches: {$in: [cacheId]}}, {$pull: {caches: cacheId}}, {multi: true}).exec()
.then(() => mongo.Cluster.update({}, {$pull: {checkpointSpi: {kind: 'Cache', Cache: {cache: cacheId}}}}, {multi: true}).exec())
+ // TODO WC-201 fix clenup of cache on deletion for cluster service configuration.
+ // .then(() => mongo.Cluster.update({'serviceConfigurations.cache': cacheId}, {$unset: {'serviceConfigurations.$.cache': ''}}, {multi: true}).exec())
.then(() => mongo.DomainModel.update({caches: {$in: [cacheId]}}, {$pull: {caches: cacheId}}, {multi: true}).exec())
.then(() => mongo.Cache.remove({_id: cacheId}).exec())
.then(convertRemoveStatus);
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/backend/services/igfss.js
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/services/igfss.js b/modules/web-console/backend/services/igfss.js
index 578c642..acb565b 100644
--- a/modules/web-console/backend/services/igfss.js
+++ b/modules/web-console/backend/services/igfss.js
@@ -122,6 +122,11 @@ module.exports.factory = (_, mongo, spacesService, errors) => {
return Promise.reject(new errors.IllegalArgumentException('IGFS id can not be undefined or null'));
return mongo.Cluster.update({igfss: {$in: [igfsId]}}, {$pull: {igfss: igfsId}}, {multi: true}).exec()
+ // TODO WC-201 fix clenup on node filter on deletion for cluster serviceConfigurations and caches.
+ // .then(() => mongo.Cluster.update({ 'serviceConfigurations.$.nodeFilter.kind': { $ne: 'IGFS' }, 'serviceConfigurations.nodeFilter.IGFS.igfs': igfsId},
+ // {$unset: {'serviceConfigurations.$.nodeFilter.IGFS.igfs': ''}}, {multi: true}).exec())
+ // .then(() => mongo.Cluster.update({ 'serviceConfigurations.nodeFilter.kind': 'IGFS', 'serviceConfigurations.nodeFilter.IGFS.igfs': igfsId},
+ // {$unset: {'serviceConfigurations.$.nodeFilter': ''}}, {multi: true}).exec())
.then(() => mongo.Igfs.remove({_id: igfsId}).exec())
.then(convertRemoveStatus);
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/app.config.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/app.config.js b/modules/web-console/frontend/app/app.config.js
index 1772453..f93ee7e 100644
--- a/modules/web-console/frontend/app/app.config.js
+++ b/modules/web-console/frontend/app/app.config.js
@@ -98,7 +98,8 @@ igniteConsoleCfg.config(['$alertProvider', ($alertProvider) => {
// AngularStrap dropdowns () configuration.
igniteConsoleCfg.config(['$dropdownProvider', ($dropdownProvider) => {
angular.extend($dropdownProvider.defaults, {
- templateUrl: dropdownTemplateUrl
+ templateUrl: dropdownTemplateUrl,
+ animation: ''
});
}]);
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/app.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/app.js b/modules/web-console/frontend/app/app.js
index df58f0e..ff089bb 100644
--- a/modules/web-console/frontend/app/app.js
+++ b/modules/web-console/frontend/app/app.js
@@ -103,11 +103,7 @@ import hasPojo from './filters/hasPojo.filter';
import uiGridSubcategories from './filters/uiGridSubcategories.filter';
// Controllers
-import caches from '../controllers/caches-controller';
-import clusters from '../controllers/clusters-controller';
-import domains from '../controllers/domains-controller';
-import igfs from '../controllers/igfs-controller';
-import profile from '../controllers/profile-controller';
+import profile from 'Controllers/profile-controller';
import auth from './controllers/auth.controller';
import resetPassword from './controllers/reset-password.controller';
@@ -119,6 +115,7 @@ import './components/input-dialog';
import webConsoleHeader from './components/web-console-header';
import webConsoleFooter from './components/web-console-footer';
import igniteIcon from './components/ignite-icon';
+import versionPicker from './components/version-picker';
// Inject external modules.
import IgniteModules from 'IgniteModules/index';
@@ -179,6 +176,7 @@ angular
webConsoleHeader.name,
webConsoleFooter.name,
igniteIcon.name,
+ versionPicker.name,
// Ignite modules.
IgniteModules.name
])
@@ -227,10 +225,6 @@ angular
// Controllers.
.controller(...auth)
.controller(...resetPassword)
-.controller(...caches)
-.controller(...clusters)
-.controller(...domains)
-.controller(...igfs)
.controller(...profile)
// Filters.
.filter('byName', byName)
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/components/cluster-select/cluster-select.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/cluster-select/cluster-select.pug b/modules/web-console/frontend/app/components/cluster-select/cluster-select.pug
index 444e567..a5fd08c 100644
--- a/modules/web-console/frontend/app/components/cluster-select/cluster-select.pug
+++ b/modules/web-console/frontend/app/components/cluster-select/cluster-select.pug
@@ -26,7 +26,7 @@ ul.nav(ng-switch='ctrl.clusters.length')
label.padding-left-dflt {{ctrl.cluster.name}}
li(ng-switch-default)
- a.dropdown-toggle(bs-dropdown='' data-placement='bottom-left' data-trigger='hover focus' data-container='self' data-animation='' ng-click='$event.stopPropagation()' aria-haspopup='true' aria-expanded='expanded')
+ a.dropdown-toggle(bs-dropdown='' data-placement='bottom-left' data-trigger='hover focus' data-container='self' ng-click='$event.stopPropagation()' aria-haspopup='true' aria-expanded='expanded')
i.icon-cluster
label.padding-left-dflt {{ctrl.cluster.name}}
span.caret
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/components/list-of-registered-users/list-of-registered-users.column-defs.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/list-of-registered-users/list-of-registered-users.column-defs.js b/modules/web-console/frontend/app/components/list-of-registered-users/list-of-registered-users.column-defs.js
index cb95735..d50c44a 100644
--- a/modules/web-console/frontend/app/components/list-of-registered-users/list-of-registered-users.column-defs.js
+++ b/modules/web-console/frontend/app/components/list-of-registered-users/list-of-registered-users.column-defs.js
@@ -51,7 +51,7 @@ const EMAIL_TEMPLATE = '<div class="ui-grid-cell-contents"><a ng-href="mailto:{{
export default [
{name: 'actions', displayName: 'Actions', categoryDisplayName: 'Actions', cellTemplate: ACTIONS_TEMPLATE, field: 'actions', minWidth: 70, width: 70, enableFiltering: false, enableSorting: false, visible: false},
{name: 'user', displayName: 'User', categoryDisplayName: 'User', field: 'userName', cellTemplate: USER_TEMPLATE, minWidth: 160, enableFiltering: true, pinnedLeft: true, filter: { placeholder: 'Filter by name...' }},
- {name: 'email', displayName: 'Email', categoryDisplayName: 'Email', field: 'email', cellTemplate: EMAIL_TEMPLATE, minWidth: 160, enableFiltering: false, filter: { placeholder: 'Filter by email...' }},
+ {name: 'email', displayName: 'Email', categoryDisplayName: 'Email', field: 'email', cellTemplate: EMAIL_TEMPLATE, minWidth: 160, enableFiltering: true, filter: { placeholder: 'Filter by email...' }},
{name: 'company', displayName: 'Company', categoryDisplayName: 'Company', field: 'company', minWidth: 180, enableFiltering: true, filter: { placeholder: 'Filter by company...' }},
{name: 'country', displayName: 'Country', categoryDisplayName: 'Country', field: 'countryCode', minWidth: 160, enableFiltering: true, filter: { placeholder: 'Filter by country...' }},
{name: 'lastlogin', displayName: 'Last login', categoryDisplayName: 'Last login', field: 'lastLogin', cellFilter: 'date:"M/d/yy HH:mm"', minWidth: 120, width: 120, enableFiltering: false, visible: false},
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/components/version-picker/component.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/version-picker/component.js b/modules/web-console/frontend/app/components/version-picker/component.js
new file mode 100644
index 0000000..68382ee
--- /dev/null
+++ b/modules/web-console/frontend/app/components/version-picker/component.js
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './template.pug';
+import './style.scss';
+
+export default {
+ template,
+ controller: class {
+ static $inject = ['IgniteVersion', '$scope'];
+
+ constructor(Version, $scope) {
+ this.currentSbj = Version.currentSbj;
+ this.supportedVersions = Version.supportedVersions;
+
+ const dropdownToggle = (active) => {
+ this.isActive = active;
+
+ // bs-dropdown does not call apply on callbacks
+ $scope.$apply();
+ };
+
+ this.onDropdownShow = () => dropdownToggle(true);
+ this.onDropdownHide = () => dropdownToggle(false);
+ }
+
+ $onInit() {
+ this.dropdown = _.map(this.supportedVersions, (ver) => ({
+ text: ver.label,
+ click: () => this.currentSbj.next(ver)
+ }));
+
+ this.currentSbj.subscribe({
+ next: (ver) => this.currentVersion = ver.label
+ });
+ }
+ }
+};
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/components/version-picker/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/version-picker/index.js b/modules/web-console/frontend/app/components/version-picker/index.js
new file mode 100644
index 0000000..f58753e
--- /dev/null
+++ b/modules/web-console/frontend/app/components/version-picker/index.js
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import angular from 'angular';
+import component from './component';
+
+export default angular
+ .module('ignite-console.version-picker', [
+ 'ignite-console.configuration'
+ ])
+ .component('versionPicker', component);
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/components/version-picker/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/version-picker/style.scss b/modules/web-console/frontend/app/components/version-picker/style.scss
new file mode 100644
index 0000000..98a4e9d
--- /dev/null
+++ b/modules/web-console/frontend/app/components/version-picker/style.scss
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+version-picker {
+ display: inline-flex;
+ align-items: center;
+
+ .btn-ignite {
+ border-radius: 9px;
+ min-height: 0;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 17px;
+ padding-top: 0;
+ padding-bottom: 1px;
+ }
+
+ .icon-help {
+ margin-left: 5px;
+ font-size: 16px;
+ }
+
+ .dropdown-menu a {
+ // Fixes style leak from above
+ font-size: 14px !important;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/components/version-picker/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/version-picker/template.pug b/modules/web-console/frontend/app/components/version-picker/template.pug
new file mode 100644
index 0000000..1abe471
--- /dev/null
+++ b/modules/web-console/frontend/app/components/version-picker/template.pug
@@ -0,0 +1,33 @@
+//-
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+.btn-ignite.btn-ignite--primary(
+ bs-dropdown='$ctrl.dropdown'
+ data-trigger='hover focus'
+ bs-on-before-show='$ctrl.onDropdownShow'
+ bs-on-before-hide='$ctrl.onDropdownHide'
+ data-container='self'
+ ng-class='{"active": $ctrl.isActive }'
+)
+ | {{$ctrl.currentVersion}}
+ span.icon-right.fa.fa-caret-down
+
+i.icon-help(
+ bs-tooltip=''
+ data-title='Web Console supports multiple Ignite versions.<br /> \
+ Select version you need to configure cluster.'
+ data-placement='right'
+)
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/data/event-groups.json
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/data/event-groups.json b/modules/web-console/frontend/app/data/event-groups.json
index 094fd28..8d0c878 100644
--- a/modules/web-console/frontend/app/data/event-groups.json
+++ b/modules/web-console/frontend/app/data/event-groups.json
@@ -97,6 +97,8 @@
"EVT_CACHE_OBJECT_REMOVED",
"EVT_CACHE_OBJECT_LOCKED",
"EVT_CACHE_OBJECT_UNLOCKED",
+ "EVT_CACHE_OBJECT_SWAPPED",
+ "EVT_CACHE_OBJECT_UNSWAPPED",
"EVT_CACHE_OBJECT_EXPIRED"
]
},
@@ -134,6 +136,18 @@
]
},
{
+ "label": "EVTS_SWAPSPACE",
+ "value": "EVTS_SWAPSPACE",
+ "class": "org.apache.ignite.events.EventType",
+ "events": [
+ "EVT_SWAP_SPACE_CLEARED",
+ "EVT_SWAP_SPACE_DATA_REMOVED",
+ "EVT_SWAP_SPACE_DATA_READ",
+ "EVT_SWAP_SPACE_DATA_STORED",
+ "EVT_SWAP_SPACE_DATA_EVICTED"
+ ]
+ },
+ {
"label": "EVTS_IGFS",
"value": "EVTS_IGFS",
"class": "org.apache.ignite.events.EventType",
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/directives/ui-ace-docker/ui-ace-docker.controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/directives/ui-ace-docker/ui-ace-docker.controller.js b/modules/web-console/frontend/app/directives/ui-ace-docker/ui-ace-docker.controller.js
index de335ae..8ebaae4 100644
--- a/modules/web-console/frontend/app/directives/ui-ace-docker/ui-ace-docker.controller.js
+++ b/modules/web-console/frontend/app/directives/ui-ace-docker/ui-ace-docker.controller.js
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-export default ['$scope', 'IgniteDockerGenerator', function($scope, docker) {
+export default ['$scope', 'IgniteVersion', 'IgniteDockerGenerator', function($scope, Version, docker) {
const ctrl = this;
// Watchers definition.
@@ -25,9 +25,13 @@ export default ['$scope', 'IgniteDockerGenerator', function($scope, docker) {
if (!$scope.cluster)
return;
- ctrl.data = docker.generate($scope.cluster, 'latest');
+ ctrl.data = docker.generate($scope.cluster, Version.currentSbj.getValue());
};
// Setup watchers.
+ Version.currentSbj.subscribe({
+ next: clusterWatcher
+ });
+
$scope.$watch('cluster', clusterWatcher);
}];
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/directives/ui-ace-java/ui-ace-java.controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/directives/ui-ace-java/ui-ace-java.controller.js b/modules/web-console/frontend/app/directives/ui-ace-java/ui-ace-java.controller.js
index 7e7a0e4..66a10af 100644
--- a/modules/web-console/frontend/app/directives/ui-ace-java/ui-ace-java.controller.js
+++ b/modules/web-console/frontend/app/directives/ui-ace-java/ui-ace-java.controller.js
@@ -15,19 +15,21 @@
* limitations under the License.
*/
-export default ['$scope', 'JavaTransformer', function($scope, java) {
+export default ['IgniteVersion', 'JavaTransformer', function(Version, java) {
const ctrl = this;
delete ctrl.data;
const client = ctrl.client === 'true';
+ const available = Version.available.bind(Version);
+
// Setup generator.
switch (ctrl.generator) {
case 'igniteConfiguration':
const clsName = client ? 'ClientConfigurationFactory' : 'ServerConfigurationFactory';
- ctrl.generate = (cluster) => java.cluster(cluster, 'config', clsName, client);
+ ctrl.generate = (cluster) => java.cluster(cluster, Version.current, 'config', clsName, client);
break;
case 'clusterCaches':
@@ -39,9 +41,9 @@ export default ['$scope', 'JavaTransformer', function($scope, java) {
return acc;
}, []);
- const cfg = java.generator.clusterGeneral(cluster);
+ const cfg = java.generator.clusterGeneral(cluster, available);
- java.generator.clusterCaches(cluster, clusterCaches, null, false, cfg);
+ java.generator.clusterCaches(cluster, clusterCaches, null, available, false, cfg);
return java.toSection(cfg);
};
@@ -57,7 +59,7 @@ export default ['$scope', 'JavaTransformer', function($scope, java) {
return acc;
}, []);
- return java[ctrl.generator](cache, cacheDomains);
+ return java[ctrl.generator](cache, cacheDomains, available);
};
break;
@@ -73,6 +75,19 @@ export default ['$scope', 'JavaTransformer', function($scope, java) {
};
break;
+ case 'clusterServiceConfiguration':
+ ctrl.generate = (cluster, caches) => {
+ const clusterCaches = _.reduce(caches, (acc, cache) => {
+ if (_.includes(cluster.caches, cache.value))
+ acc.push(cache.cache);
+
+ return acc;
+ }, []);
+
+ return java.clusterServiceConfiguration(cluster.serviceConfigurations, clusterCaches);
+ };
+
+ break;
case 'igfss':
ctrl.generate = (cluster, igfss) => {
const clusterIgfss = _.reduce(igfss, (acc, igfs) => {
@@ -82,11 +97,11 @@ export default ['$scope', 'JavaTransformer', function($scope, java) {
return acc;
}, []);
- return java.clusterIgfss(clusterIgfss);
+ return java.clusterIgfss(clusterIgfss, available);
};
break;
default:
- ctrl.generate = (master, detail) => java[ctrl.generator](master, detail);
+ ctrl.generate = (master) => java[ctrl.generator](master, available);
}
}];
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/directives/ui-ace-java/ui-ace-java.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/directives/ui-ace-java/ui-ace-java.directive.js b/modules/web-console/frontend/app/directives/ui-ace-java/ui-ace-java.directive.js
index 5f43b23..5d1df42 100644
--- a/modules/web-console/frontend/app/directives/ui-ace-java/ui-ace-java.directive.js
+++ b/modules/web-console/frontend/app/directives/ui-ace-java/ui-ace-java.directive.js
@@ -18,7 +18,7 @@
import template from './ui-ace-java.pug';
import controller from './ui-ace-java.controller';
-export default ['igniteUiAceJava', [() => {
+export default ['igniteUiAceJava', ['IgniteVersion', (Version) => {
const link = (scope, $el, attrs, [ctrl, igniteUiAceTabs, formCtrl, ngModelCtrl]) => {
if (formCtrl && ngModelCtrl)
formCtrl.$removeControl(ngModelCtrl);
@@ -36,10 +36,14 @@ export default ['igniteUiAceJava', [() => {
const noDeepWatch = !(typeof attrs.noDeepWatch !== 'undefined');
- // Setup watchers.
- scope.$watch('master', () => {
+ const next = () => {
ctrl.data = _.isNil(scope.master) ? null : ctrl.generate(scope.master, scope.detail).asString();
- }, noDeepWatch);
+ };
+
+ // Setup watchers.
+ scope.$watch('master', next, noDeepWatch);
+
+ Version.currentSbj.subscribe({next});
};
return {
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/directives/ui-ace-pom/ui-ace-pom.controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/directives/ui-ace-pom/ui-ace-pom.controller.js b/modules/web-console/frontend/app/directives/ui-ace-pom/ui-ace-pom.controller.js
index 0ae1269..0135eb3 100644
--- a/modules/web-console/frontend/app/directives/ui-ace-pom/ui-ace-pom.controller.js
+++ b/modules/web-console/frontend/app/directives/ui-ace-pom/ui-ace-pom.controller.js
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-export default ['$scope', 'IgniteMavenGenerator', function($scope, maven) {
+export default ['$scope', 'IgniteVersion', 'IgniteMavenGenerator', function($scope, Version, maven) {
const ctrl = this;
// Watchers definition.
@@ -25,9 +25,13 @@ export default ['$scope', 'IgniteMavenGenerator', function($scope, maven) {
if (!value)
return;
- ctrl.data = maven.generate($scope.cluster);
+ ctrl.data = maven.generate($scope.cluster, Version.currentSbj.getValue());
};
// Setup watchers.
+ Version.currentSbj.subscribe({
+ next: clusterWatcher
+ });
+
$scope.$watch('cluster', clusterWatcher);
}];
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/directives/ui-ace-spring/ui-ace-spring.controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/directives/ui-ace-spring/ui-ace-spring.controller.js b/modules/web-console/frontend/app/directives/ui-ace-spring/ui-ace-spring.controller.js
index 50b71cb..92b0ae8 100644
--- a/modules/web-console/frontend/app/directives/ui-ace-spring/ui-ace-spring.controller.js
+++ b/modules/web-console/frontend/app/directives/ui-ace-spring/ui-ace-spring.controller.js
@@ -15,15 +15,17 @@
* limitations under the License.
*/
-export default ['$scope', 'SpringTransformer', function($scope, spring) {
+export default ['IgniteVersion', 'SpringTransformer', function(Version, spring) {
const ctrl = this;
delete ctrl.data;
+ const targetSince = Version.available.bind(Version);
+
// Setup generator.
switch (ctrl.generator) {
case 'igniteConfiguration':
- ctrl.generate = (cluster) => spring.cluster(cluster, ctrl.client === 'true');
+ ctrl.generate = (cluster) => spring.cluster(cluster, Version.current, ctrl.client === 'true');
break;
case 'clusterCaches':
@@ -35,9 +37,9 @@ export default ['$scope', 'SpringTransformer', function($scope, spring) {
return acc;
}, []);
- const cfg = spring.generator.clusterGeneral(cluster);
+ const cfg = spring.generator.clusterGeneral(cluster, targetSince);
- spring.generator.clusterCaches(cluster, clusterCaches, null, false, cfg);
+ spring.generator.clusterCaches(cluster, clusterCaches, null, targetSince, false, cfg);
return spring.toSection(cfg);
};
@@ -53,7 +55,7 @@ export default ['$scope', 'SpringTransformer', function($scope, spring) {
return acc;
}, []);
- return spring[ctrl.generator](cache, cacheDomains);
+ return spring[ctrl.generator](cache, cacheDomains, targetSince);
};
break;
@@ -69,6 +71,19 @@ export default ['$scope', 'SpringTransformer', function($scope, spring) {
};
break;
+ case 'clusterServiceConfiguration':
+ ctrl.generate = (cluster, caches) => {
+ const clusterCaches = _.reduce(caches, (acc, cache) => {
+ if (_.includes(cluster.caches, cache.value))
+ acc.push(cache.cache);
+
+ return acc;
+ }, []);
+
+ return spring.clusterServiceConfiguration(cluster.serviceConfigurations, clusterCaches);
+ };
+
+ break;
case 'igfss':
ctrl.generate = (cluster, igfss) => {
const clusterIgfss = _.reduce(igfss, (acc, igfs) => {
@@ -78,11 +93,11 @@ export default ['$scope', 'SpringTransformer', function($scope, spring) {
return acc;
}, []);
- return spring.clusterIgfss(clusterIgfss);
+ return spring.clusterIgfss(clusterIgfss, targetSince);
};
break;
default:
- ctrl.generate = (master, detail) => spring[ctrl.generator](master, detail);
+ ctrl.generate = (master) => spring[ctrl.generator](master, targetSince);
}
}];
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/directives/ui-ace-spring/ui-ace-spring.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/directives/ui-ace-spring/ui-ace-spring.directive.js b/modules/web-console/frontend/app/directives/ui-ace-spring/ui-ace-spring.directive.js
index de3f434..953d6cd 100644
--- a/modules/web-console/frontend/app/directives/ui-ace-spring/ui-ace-spring.directive.js
+++ b/modules/web-console/frontend/app/directives/ui-ace-spring/ui-ace-spring.directive.js
@@ -20,7 +20,7 @@ import _ from 'lodash';
import template from './ui-ace-spring.pug';
import controller from './ui-ace-spring.controller';
-export default ['igniteUiAceSpring', [() => {
+export default ['igniteUiAceSpring', ['IgniteVersion', (Version) => {
const link = (scope, $el, attrs, [ctrl, igniteUiAceTabs, formCtrl, ngModelCtrl]) => {
if (formCtrl && ngModelCtrl)
formCtrl.$removeControl(ngModelCtrl);
@@ -39,10 +39,14 @@ export default ['igniteUiAceSpring', [() => {
const noDeepWatch = !(typeof attrs.noDeepWatch !== 'undefined');
- // Setup watchers.
- scope.$watch('master', () => {
+ const next = () => {
ctrl.data = _.isNil(scope.master) ? null : ctrl.generate(scope.master, scope.detail).asString();
- }, noDeepWatch);
+ };
+
+ // Setup watchers.
+ scope.$watch('master', next, noDeepWatch);
+
+ Version.currentSbj.subscribe({next});
};
return {
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/helpers/jade/mixins.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/helpers/jade/mixins.pug b/modules/web-console/frontend/app/helpers/jade/mixins.pug
index 3176cb8..a357966 100644
--- a/modules/web-console/frontend/app/helpers/jade/mixins.pug
+++ b/modules/web-console/frontend/app/helpers/jade/mixins.pug
@@ -66,9 +66,9 @@ mixin save-remove-clone-undo-buttons(objectName)
.panel-tip-container(ng-show='backupItem._id')
a.btn.btn-primary(id='clone-item' ng-click='cloneItem()' bs-tooltip=cloneTip data-placement='bottom' data-trigger='hover') Clone
- -var actions = [{ text: "Remove", click: "removeItem()" }, { text: "Remove All", click: "removeAllItems()" }]
+ -var options = [{ text: "Remove", click: "removeItem()" }, { text: "Remove All", click: "removeAllItems()" }]
- +btn-group(actions, removeTip)(ng-show='backupItem._id')
+ +btn-group(false, options, removeTip)(ng-show='backupItem._id')
.panel-tip-container(ng-show='backupItem')
i.btn.btn-primary.fa.fa-undo(id='undo-item' ng-disabled='!ui.inputForm.$dirty' ng-click='ui.inputForm.$dirty && resetAll()' bs-tooltip=undoTip data-placement='bottom' data-trigger='hover')
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/agent/AgentManager.service.js b/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
index 3344ef2..58e071b 100644
--- a/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
+++ b/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
@@ -45,12 +45,14 @@ export default class IgniteAgentManager {
this.ignite2x = false;
- $root.$watch(() => _.get(this, 'cluster.clusterVersion'), (ver) => {
- if (_.isEmpty(ver))
- return;
+ if (!$root.IgniteDemoMode) {
+ $root.$watch(() => _.get(this, 'cluster.clusterVersion'), (ver) => {
+ if (_.isEmpty(ver))
+ return;
- this.ignite2x = ver.startsWith('2.');
- }, true);
+ this.ignite2x = ver.startsWith('2.');
+ }, true);
+ }
/**
* Connection to backend.
@@ -509,6 +511,9 @@ export default class IgniteAgentManager {
* @returns {Promise}
*/
queryNextPage(nid, queryId, pageSize) {
+ if (this.ignite2x)
+ return this.visorTask('queryFetchX2', nid, queryId, pageSize);
+
return this.visorTask('queryFetch', nid, queryId, pageSize);
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/cluster/Cache.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/cluster/Cache.js b/modules/web-console/frontend/app/modules/cluster/Cache.js
index f954ad2..4918a7c 100644
--- a/modules/web-console/frontend/app/modules/cluster/Cache.js
+++ b/modules/web-console/frontend/app/modules/cluster/Cache.js
@@ -40,6 +40,10 @@ export default class Cache {
this.offHeapPrimarySize = cache.offHeapPrimaryEntriesCount || 0;
this.offHeapBackupSize = cache.offHeapBackupEntriesCount || 0;
+ // Swap.
+ this.swapSize = cache.swapSize;
+ this.swapKeys = cache.swapKeys;
+
const m = cache.metrics;
// Read/write metrics.
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/cluster/CacheMetrics.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/cluster/CacheMetrics.js b/modules/web-console/frontend/app/modules/cluster/CacheMetrics.js
index 160b7d1..90d3a9b 100644
--- a/modules/web-console/frontend/app/modules/cluster/CacheMetrics.js
+++ b/modules/web-console/frontend/app/modules/cluster/CacheMetrics.js
@@ -40,6 +40,10 @@ export default class CacheMetrics {
this.offHeapPrimarySize = cache.offHeapPrimaryEntriesCount || 0;
this.offHeapBackupSize = cache.offHeapBackupEntriesCount || 0;
+ // Swap.
+ this.swapSize = cache.swapSize;
+ this.swapKeys = cache.swapKeys;
+
const m = cache.metrics;
// Read/write metrics.
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/configuration/Version.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/Version.service.js b/modules/web-console/frontend/app/modules/configuration/Version.service.js
index 1cbe635..cf2bfc5 100644
--- a/modules/web-console/frontend/app/modules/configuration/Version.service.js
+++ b/modules/web-console/frontend/app/modules/configuration/Version.service.js
@@ -15,96 +15,148 @@
* limitations under the License.
*/
+import { BehaviorSubject } from 'rxjs/BehaviorSubject';
+
/**
* Utility service for version parsing and comparing
*/
const VERSION_MATCHER = /(\d+)\.(\d+)\.(\d+)([-.]([^0123456789][^-]+)(-SNAPSHOT)?)?(-(\d+))?(-([\da-f]+))?/i;
-const numberComparator = (a, b) => a > b ? 1 : a < b ? -1 : 0;
+/**
+ * Tries to parse product version from it's string representation.
+ *
+ * @param {String} ver - String representation of version.
+ * @returns {{major: Number, minor: Number, maintenance: Number, stage: String, revTs: Number, revHash: String}} - Object that contains product version fields.
+ */
+const parse = (ver) => {
+ // Development or built from source ZIP.
+ ver = ver.replace(/(-DEV|-n\/a)$/i, '');
+
+ const [, major, minor, maintenance, stage, ...chunks] = ver.match(VERSION_MATCHER);
+
+ return {
+ major: parseInt(major, 10),
+ minor: parseInt(minor, 10),
+ maintenance: parseInt(maintenance, 10),
+ stage: (stage || '').substring(1),
+ revTs: chunks[2] ? parseInt(chunks[3], 10) : 0,
+ revHash: chunks[4] ? chunks[5] : null
+ };
+};
-export default class IgniteVersion {
- /** Current product version. */
- static ignite = '2.0.0';
+const numberComparator = (a, b) => a > b ? 1 : a < b ? -1 : 0;
- /**
- * Tries to parse product version from it's string representation.
- *
- * @param {String} ver - String representation of version.
- * @returns {{major: Number, minor: Number, maintenance: Number, stage: String, revTs: Number, revHash: String}} - Object that contains product version fields.
- */
- parse(ver) {
- // Development or built from source ZIP.
- ver = ver.replace(/(-DEV|-n\/a)$/i, '');
-
- const [, major, minor, maintenance, stage, ...chunks] = ver.match(VERSION_MATCHER);
-
- return {
- major: parseInt(major, 10),
- minor: parseInt(minor, 10),
- maintenance: parseInt(maintenance, 10),
- stage: (stage || '').substring(1),
- revTs: chunks[2] ? parseInt(chunks[3], 10) : 0,
- revHash: chunks[4] ? chunks[5] : null
- };
- }
+/**
+ * Compare to version.
+ * @param a {Object} first compared version.
+ * @param b {Object} second compared version.
+ * @returns {Number} 1 if a > b, 0 if versions equals, -1 if a < b
+ */
+const compare = (a, b) => {
+ let res = numberComparator(a.major, b.major);
- /**
- * Compare to version.
- * @param a {String} first compared version.
- * @param b {String} second compared version.
- * @returns {Number} 1 if a > b, 0 if versions equals, -1 if a < b
- */
- compare(a, b) {
- const pa = this.parse(a);
- const pb = this.parse(b);
+ if (res !== 0)
+ return res;
- let res = numberComparator(pa.major, pb.major);
+ res = numberComparator(a.minor, b.minor);
- if (res !== 0)
- return res;
+ if (res !== 0)
+ return res;
- res = numberComparator(pa.minor, pb.minor);
+ res = numberComparator(a.maintenance, b.maintenance);
- if (res !== 0)
- return res;
+ if (res !== 0)
+ return res;
- res = numberComparator(pa.maintenance, pb.maintenance);
+ return numberComparator(a.revTs, b.revTs);
+};
- if (res !== 0)
- return res;
+export default class IgniteVersion {
+ constructor() {
+ this.supportedVersions = [
+ {
+ label: 'Ignite 2.0',
+ ignite: '2.0.0'
+ },
+ {
+ label: 'Ignite 1.x',
+ ignite: '1.9.0'
+ }
+ ];
+
+ /** Current product version. */
+ let current = _.head(this.supportedVersions);
+
+ try {
+ const ignite = localStorage.configurationVersion;
+
+ const restored = _.find(this.supportedVersions, {ignite});
+
+ if (restored)
+ current = restored;
+ }
+ catch (ignored) {
+ // No-op.
+ }
+
+ this.currentSbj = new BehaviorSubject(current);
+
+ this.currentSbj.subscribe({
+ next: (ver) => {
+ try {
+ localStorage.setItem('configurationVersion', ver.ignite);
+ }
+ catch (ignored) {
+ // No-op.
+ }
+ }
+ });
+ }
- return numberComparator(pa.revTs, pb.revTs);
+ /**
+ * @return {String} Target Ignite version.
+ */
+ get current() {
+ return this.currentSbj.getValue().ignite;
}
/**
- * Check if node version in range
- * @param {String} nodeVer Node version.
- * @param {Array.<String>} ranges Version ranges to compare with.
- * @returns {Boolean} `True` if node version is equal or greater than specified range.
+ * Check if version in range
+ * @param {String} target Target version.
+ * @param {String | Array.<String>} ranges Version ranges to compare with.
+ * @returns {Boolean} `True` if version is equal or greater than specified range.
*/
- includes(nodeVer, ...ranges) {
- return !!_.find(ranges, ([after, before]) =>
- this.compare(nodeVer, after) >= 0 && (_.isNil(before) || this.compare(nodeVer, before) < 0)
- );
+ since(target, ...ranges) {
+ const targetVer = parse(target);
+
+ return !!_.find(ranges, (range) => {
+ if (_.isArray(range)) {
+ const [after, before] = range;
+
+ return compare(targetVer, parse(after)) >= 0 &&
+ (_.isNil(before) || compare(targetVer, parse(before)) < 0);
+ }
+
+ return compare(targetVer, parse(range)) >= 0;
+ });
}
/**
- * Check if node version is newer or same
- * @param {String} nodeVer Node version.
- * @param {String} sinceVer Version to compare with.
- * @returns {Boolean} `True` if node version is equal or greater than specified version.
+ * Check whether version before than specified version.
+ * @param {String} target Target version.
+ * @param {String} ranges Version ranges to compare with.
+ * @return {Boolean} `True` if version before than specified version.
*/
- since(nodeVer, sinceVer) {
- return this.includes(nodeVer, [sinceVer]);
+ before(target, ...ranges) {
+ return !this.since(target, ...ranges);
}
/**
- * Check whether node version before than specified version.
- * @param {String} nodeVer Node version.
- * @param {String} sinceVer Version to compare with.
- * @return {Boolean} `True` if node version before than specified version.
+ * Check if configuration version in range
+ * @param {String|Array.<String>} ranges Version ranges to compare with.
+ * @returns {Boolean} `True` if configuration version is equal or greater than specified range.
*/
- before(nodeVer, sinceVer) {
- return !this.since(nodeVer, sinceVer);
+ available(...ranges) {
+ return this.since(this.current, ...ranges);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e04df7d1/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js b/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js
index e008fc6..20393c5 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js
@@ -18,7 +18,6 @@
import StringBuilder from './StringBuilder';
import IgniteConfigurationGenerator from './ConfigurationGenerator';
-import IgniteEventGroups from './defaults/Event-groups.service';
import IgniteClusterDefaults from './defaults/Cluster.service';
import IgniteCacheDefaults from './defaults/Cache.service';
@@ -33,7 +32,6 @@ const igfsDflts = new IgniteIGFSDefaults();
export default class AbstractTransformer {
static generator = IgniteConfigurationGenerator;
static javaTypes = new JavaTypes(clusterDflts, cacheDflts, igfsDflts);
- static eventGroups = new IgniteEventGroups();
// Append comment with time stamp.
static mainComment(sb, ...lines) {
@@ -61,8 +59,8 @@ export default class AbstractTransformer {
}
// Generate general section.
- static clusterGeneral(cluster) {
- return this.toSection(this.generator.clusterGeneral(cluster));
+ static clusterGeneral(cluster, available) {
+ return this.toSection(this.generator.clusterGeneral(cluster, available));
}
// Generate atomics group.
@@ -96,28 +94,33 @@ export default class AbstractTransformer {
}
// Generate deployment group.
- static clusterDeployment(cluster) {
- return this.toSection(this.generator.clusterDeployment(cluster));
+ static clusterDeployment(cluster, available) {
+ return this.toSection(this.generator.clusterDeployment(cluster, available));
}
// Generate discovery group.
- static clusterDiscovery(disco) {
- return this.toSection(this.generator.clusterDiscovery(disco));
+ static clusterDiscovery(disco, available) {
+ return this.toSection(this.generator.clusterDiscovery(disco, available));
}
// Generate events group.
- static clusterEvents(cluster) {
- return this.toSection(this.generator.clusterEvents(cluster));
+ static clusterEvents(cluster, available) {
+ return this.toSection(this.generator.clusterEvents(cluster, available));
}
// Generate failover group.
- static clusterFailover(cluster) {
- return this.toSection(this.generator.clusterFailover(cluster));
+ static clusterFailover(cluster, available) {
+ return this.toSection(this.generator.clusterFailover(cluster, available));
+ }
+
+ // Generate hadoop group.
+ static clusterHadoop(hadoop) {
+ return this.toSection(this.generator.clusterHadoop(hadoop));
}
// Generate cluster IGFSs group.
- static clusterIgfss(igfss) {
- return this.toSection(this.generator.clusterIgfss(igfss));
+ static clusterIgfss(igfss, available) {
+ return this.toSection(this.generator.clusterIgfss(igfss, available));
}
// Generate load balancing SPI group.
@@ -130,14 +133,24 @@ export default class AbstractTransformer {
return this.toSection(this.generator.clusterLogger(cluster));
}
+ // Generate memory configuration group.
+ static clusterMemory(memoryConfiguration) {
+ return this.toSection(this.generator.clusterMemory(memoryConfiguration));
+ }
+
+ // Generate marshaller group.
+ static clusterMisc(cluster, available) {
+ return this.toSection(this.generator.clusterMisc(cluster, available));
+ }
+
// Generate marshaller group.
- static clusterMarshaller(cluster) {
- return this.toSection(this.generator.clusterMarshaller(cluster));
+ static clusterMarshaller(cluster, available) {
+ return this.toSection(this.generator.clusterMarshaller(cluster, available));
}
// Generate metrics group.
- static clusterMetrics(cluster) {
- return this.toSection(this.generator.clusterMetrics(cluster));
+ static clusterMetrics(cluster, available) {
+ return this.toSection(this.generator.clusterMetrics(cluster, available));
}
// Generate ODBC group.
@@ -145,19 +158,29 @@ export default class AbstractTransformer {
return this.toSection(this.generator.clusterODBC(odbc));
}
+ // Generate cache node filter group.
+ static clusterServiceConfiguration(srvs, caches) {
+ return this.toSection(this.generator.clusterServiceConfiguration(srvs, caches));
+ }
+
// Generate ssl group.
static clusterSsl(cluster) {
return this.toSection(this.generator.clusterSsl(cluster));
}
+ // Generate swap group.
+ static clusterSwap(cluster) {
+ return this.toSection(this.generator.clusterSwap(cluster));
+ }
+
// Generate time group.
- static clusterTime(cluster) {
- return this.toSection(this.generator.clusterTime(cluster));
+ static clusterTime(cluster, available) {
+ return this.toSection(this.generator.clusterTime(cluster, available));
}
// Generate thread pools group.
- static clusterPools(cluster) {
- return this.toSection(this.generator.clusterPools(cluster));
+ static clusterPools(cluster, available) {
+ return this.toSection(this.generator.clusterPools(cluster, available));
}
// Generate transactions group.
@@ -171,8 +194,8 @@ export default class AbstractTransformer {
}
// Generate IGFS general group.
- static igfsGeneral(igfs) {
- return this.toSection(this.generator.igfsGeneral(igfs));
+ static igfsGeneral(igfs, available) {
+ return this.toSection(this.generator.igfsGeneral(igfs, available));
}
// Generate IGFS secondary file system group.
@@ -190,39 +213,44 @@ export default class AbstractTransformer {
return this.toSection(this.generator.igfsFragmentizer(igfs));
}
+ // Generate IGFS Dual mode group.
+ static igfsDualMode(igfs) {
+ return this.toSection(this.generator.igfsDualMode(igfs));
+ }
+
// Generate IGFS miscellaneous group.
- static igfsMisc(igfs) {
- return this.toSection(this.generator.igfsMisc(igfs));
+ static igfsMisc(igfs, available) {
+ return this.toSection(this.generator.igfsMisc(igfs, available));
}
// Generate cache general group.
- static cacheGeneral(cache) {
- return this.toSection(this.generator.cacheGeneral(cache));
+ static cacheGeneral(cache, available) {
+ return this.toSection(this.generator.cacheGeneral(cache, available));
}
// Generate cache memory group.
- static cacheAffinity(cache) {
- return this.toSection(this.generator.cacheAffinity(cache));
+ static cacheAffinity(cache, available) {
+ return this.toSection(this.generator.cacheAffinity(cache, available));
}
// Generate cache memory group.
- static cacheMemory(cache) {
- return this.toSection(this.generator.cacheMemory(cache));
+ static cacheMemory(cache, available) {
+ return this.toSection(this.generator.cacheMemory(cache, available));
}
// Generate cache queries & Indexing group.
- static cacheQuery(cache, domains) {
- return this.toSection(this.generator.cacheQuery(cache, domains));
+ static cacheQuery(cache, domains, available) {
+ return this.toSection(this.generator.cacheQuery(cache, domains, available));
}
// Generate cache store group.
- static cacheStore(cache, domains) {
- return this.toSection(this.generator.cacheStore(cache, domains));
+ static cacheStore(cache, domains, available) {
+ return this.toSection(this.generator.cacheStore(cache, domains, available));
}
// Generate cache concurrency control group.
- static cacheConcurrency(cache) {
- return this.toSection(this.generator.cacheConcurrency(cache));
+ static cacheConcurrency(cache, available) {
+ return this.toSection(this.generator.cacheConcurrency(cache, available));
}
// Generate cache node filter group.
@@ -251,12 +279,12 @@ export default class AbstractTransformer {
}
// Generate caches configs.
- static clusterCaches(cluster, caches, igfss, client) {
- return this.toSection(this.generator.clusterCaches(cluster, caches, igfss, client));
+ static clusterCaches(cluster, available, caches, igfss, client) {
+ return this.toSection(this.generator.clusterCaches(cluster, caches, igfss, available, client));
}
// Generate caches configs.
- static clusterCheckpoint(cluster, caches) {
+ static clusterCheckpoint(cluster, available, caches) {
return this.toSection(this.generator.clusterCheckpoint(cluster, caches));
}