You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2018/10/16 04:27:14 UTC
ignite git commit: IGNITE-9748 Web Console: Added suport for MVCC on
"Configuration" screens.
Repository: ignite
Updated Branches:
refs/heads/master 0f432e3fe -> a800c36f1
IGNITE-9748 Web Console: Added suport for MVCC on "Configuration" screens.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a800c36f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a800c36f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a800c36f
Branch: refs/heads/master
Commit: a800c36f1603f1c206d3847a04e0f9eb22ae547f
Parents: 0f432e3
Author: Vasiliy Sisko <vs...@gridgain.com>
Authored: Tue Oct 16 11:27:00 2018 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Tue Oct 16 11:27:00 2018 +0700
----------------------------------------------------------------------
.../internal/visor/VisorDataTransferObject.java | 3 +
.../visor/node/VisorGridConfiguration.java | 22 ++++-
.../visor/node/VisorMvccConfiguration.java | 94 ++++++++++++++++++++
modules/web-console/backend/app/schemas.js | 6 +-
.../cache-edit-form/templates/general.pug | 18 ++--
.../cluster-edit-form/template.tpl.pug | 3 +
.../cluster-edit-form/templates/mvcc.pug | 46 ++++++++++
.../page-configure-basic/controller.js | 3 +-
.../app/components/page-configure/style.scss | 1 +
.../generator/AbstractTransformer.js | 5 ++
.../generator/ConfigurationGenerator.js | 12 ++-
.../web-console/frontend/app/services/Caches.js | 3 +-
12 files changed, 200 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/modules/core/src/main/java/org/apache/ignite/internal/visor/VisorDataTransferObject.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/VisorDataTransferObject.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/VisorDataTransferObject.java
index 6ba3aa7..6fd51cd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/VisorDataTransferObject.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/VisorDataTransferObject.java
@@ -50,6 +50,9 @@ public abstract class VisorDataTransferObject implements Externalizable {
/** Version 3. */
protected static final byte V3 = 3;
+ /** Version 4. */
+ protected static final byte V4 = 4;
+
/**
* @param col Source collection.
* @param <T> Collection type.
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
index 85849a5..a9144ab 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
@@ -126,6 +126,9 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
/** Client connector configuration */
private VisorClientConnectorConfiguration clnConnCfg;
+ /** MVCC configuration. */
+ private VisorMvccConfiguration mvccCfg;
+
/**
* Default constructor.
*/
@@ -192,6 +195,8 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
if (dsCfg != null)
dataStorage = new VisorDataStorageConfiguration(dsCfg);
+
+ mvccCfg = new VisorMvccConfiguration(c);
}
/**
@@ -383,9 +388,16 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
return dataStorage;
}
+ /**
+ * @return MVCC configuration.
+ */
+ public VisorMvccConfiguration getMvccConfiguration() {
+ return mvccCfg;
+ }
+
/** {@inheritDoc} */
@Override public byte getProtocolVersion() {
- return V3;
+ return V4;
}
/** {@inheritDoc} */
@@ -417,6 +429,7 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
U.writeCollection(out, srvcCfgs);
out.writeObject(dataStorage);
out.writeObject(clnConnCfg);
+ out.writeObject(mvccCfg);
}
/** {@inheritDoc} */
@@ -447,11 +460,14 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
sqlConnCfg = (VisorSqlConnectorConfiguration) in.readObject();
srvcCfgs = U.readList(in);
- if (protoVer >= V2)
+ if (protoVer > V1)
dataStorage = (VisorDataStorageConfiguration)in.readObject();
- if (protoVer >= V3)
+ if (protoVer > V2)
clnConnCfg = (VisorClientConnectorConfiguration)in.readObject();
+
+ if (protoVer > V3)
+ mvccCfg = (VisorMvccConfiguration)in.readObject();
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMvccConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMvccConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMvccConfiguration.java
new file mode 100644
index 0000000..1bcaa21
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMvccConfiguration.java
@@ -0,0 +1,94 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Data transfer object for data store configuration.
+ */
+public class VisorMvccConfiguration extends VisorDataTransferObject {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Number of MVCC vacuum cleanup threads. */
+ private int mvccVacuumThreadCnt;
+
+ /** Time interval between vacuum runs */
+ private long mvccVacuumFreq;
+
+ /**
+ * Default constructor.
+ */
+ public VisorMvccConfiguration() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param cfg Ignite configuration.
+ */
+ public VisorMvccConfiguration(IgniteConfiguration cfg) {
+ assert cfg != null;
+
+ mvccVacuumThreadCnt = cfg.getMvccVacuumThreadCount();
+ mvccVacuumFreq = cfg.getMvccVacuumFrequency();
+ }
+
+ /**
+ * @return Number of MVCC vacuum threads.
+ */
+ public int getMvccVacuumThreadCount() {
+ return mvccVacuumThreadCnt;
+ }
+
+ /**
+ * @return Time interval between MVCC vacuum runs in milliseconds.
+ */
+ public long getMvccVacuumFrequency() {
+ return mvccVacuumFreq;
+ }
+
+ /** {@inheritDoc} */
+ @Override public byte getProtocolVersion() {
+ return V1;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+ out.writeInt(mvccVacuumThreadCnt);
+ out.writeLong(mvccVacuumFreq);
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+ mvccVacuumThreadCnt = in.readInt();
+ mvccVacuumFreq = in.readLong();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(VisorMvccConfiguration.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/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 5898ed8..cf174f7 100644
--- a/modules/web-console/backend/app/schemas.js
+++ b/modules/web-console/backend/app/schemas.js
@@ -136,7 +136,7 @@ module.exports.factory = function(mongoose) {
clusters: [{type: ObjectId, ref: 'Cluster'}],
domains: [{type: ObjectId, ref: 'DomainModel'}],
cacheMode: {type: String, enum: ['PARTITIONED', 'REPLICATED', 'LOCAL']},
- atomicityMode: {type: String, enum: ['ATOMIC', 'TRANSACTIONAL']},
+ atomicityMode: {type: String, enum: ['ATOMIC', 'TRANSACTIONAL', 'TRANSACTIONAL_SNAPSHOT']},
partitionLossPolicy: {
type: String,
enum: ['READ_ONLY_SAFE', 'READ_ONLY_ALL', 'READ_WRITE_SAFE', 'READ_WRITE_ALL', 'IGNORE']
@@ -1109,7 +1109,9 @@ module.exports.factory = function(mongoose) {
rateTimeInterval: Number,
tlbSize: Number,
subIntervals: Number
- }
+ },
+ mvccVacuumThreadCount: Number,
+ mvccVacuumFrequency: Number
});
Cluster.index({name: 1, space: 1}, {unique: true});
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/general.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/general.pug b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/general.pug
index 9552396..ba5d5ad 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/general.pug
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/templates/general.pug
@@ -74,16 +74,18 @@ panel-collapsible(opened=`::true` ng-form=form)
name: '"atomicityMode"',
placeholder: 'ATOMIC',
options: '[\
- {value: "ATOMIC", label: "ATOMIC"},\
- {value: "TRANSACTIONAL", label: "TRANSACTIONAL"}\
- ]',
+ {value: "ATOMIC", label: "ATOMIC"},\
+ {value: "TRANSACTIONAL", label: "TRANSACTIONAL"},\
+ {value: "TRANSACTIONAL_SNAPSHOT", label: "TRANSACTIONAL_SNAPSHOT"}\
+ ]',
tip: 'Atomicity:\
- <ul>\
- <li>ATOMIC - in this mode distributed transactions and distributed locking are not supported</li>\
- <li>TRANSACTIONAL - in this mode specified fully ACID-compliant transactional cache behavior</li>\
- </ul>'
+ <ul>\
+ <li>ATOMIC - in this mode distributed transactions and distributed locking are not supported</li>\
+ <li>TRANSACTIONAL - in this mode specified fully ACID-compliant transactional cache behavior</li>\
+ <li>TRANSACTIONAL_SNAPSHOT - in this mode specified fully ACID-compliant transactional cache behavior for both key-value API and SQL transactions</li>\
+ </ul>'
})
- .pc-form-grid-col-30(ng-is=`${model}.cacheMode === 'PARTITIONED'`)
+ .pc-form-grid-col-30(ng-if=`${model}.cacheMode === 'PARTITIONED'`)
+form-field__number({
label: 'Backups:',
model: `${model}.backups`,
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/template.tpl.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/template.tpl.pug b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/template.tpl.pug
index d5cb909..e30cfdb 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/template.tpl.pug
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/template.tpl.pug
@@ -50,6 +50,9 @@ form(id='cluster' name='ui.inputForm' novalidate)
include ./templates/misc
include ./templates/metrics
+ //- Since ignite 2.7
+ include ./templates/mvcc
+
//- Deprecated in ignite 2.1
include ./templates/odbc
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/mvcc.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/mvcc.pug b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/mvcc.pug
new file mode 100644
index 0000000..2799520
--- /dev/null
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/templates/mvcc.pug
@@ -0,0 +1,46 @@
+//-
+ 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.
+
+include /app/helpers/jade/mixins
+
+-var form = 'mvcc'
+-var model = '$ctrl.clonedCluster'
+
+panel-collapsible(ng-show='$ctrl.available("2.7.0")' ng-form=form on-open=`ui.loadPanel('${form}')`)
+ panel-title Multiversion concurrency control (MVCC)
+ panel-description Multiversion concurrency control (MVCC) configuration.
+ panel-content.pca-form-row(ng-if=`ui.isPanelLoaded('${form}')`)
+ .pca-form-column-6.pc-form-grid-row
+ .pc-form-grid-col-30(ng-if='$ctrl.available("2.1.0")')
+ +form-field__number({
+ label: 'Vacuum thread pool size:',
+ model: `${model}.mvccVacuumThreadCount`,
+ name: '"MvccVacuumThreadCount"',
+ placeholder: '2',
+ min: '0',
+ tip: 'Number of MVCC vacuum cleanup threads'
+ })
+ .pc-form-grid-col-30(ng-if='$ctrl.available("2.1.0")')
+ +form-field__number({
+ label: 'Vacuum intervals:',
+ model: `${model}.mvccVacuumFrequency`,
+ name: '"MvccVacuumFrequency"',
+ placeholder: '5000',
+ min: '0',
+ tip: 'Time interval between vacuum runs in ms'
+ })
+ .pca-form-column-6
+ +preview-xml-java(model, 'clusterMvcc')
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/modules/web-console/frontend/app/components/page-configure-basic/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-basic/controller.js b/modules/web-console/frontend/app/components/page-configure-basic/controller.js
index 88c6163..f5515fb 100644
--- a/modules/web-console/frontend/app/components/page-configure-basic/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-basic/controller.js
@@ -155,11 +155,12 @@ export default class PageConfigureBasicController {
this.cachesColDefs = [
{name: 'Name:', cellClass: 'pc-form-grid-col-10'},
{name: 'Mode:', cellClass: 'pc-form-grid-col-10'},
- {name: 'Atomicity:', cellClass: 'pc-form-grid-col-10', tip: `
+ {name: 'Atomicity:', cellClass: 'pc-form-grid-col-20', tip: `
Atomicity:
<ul>
<li>ATOMIC - in this mode distributed transactions and distributed locking are not supported</li>
<li>TRANSACTIONAL - in this mode specified fully ACID-compliant transactional cache behavior</li>
+ <li>TRANSACTIONAL_SNAPSHOT - in this mode specified fully ACID-compliant transactional cache behavior for both key-value API and SQL transactions</li>
</ul>
`},
{name: 'Backups:', cellClass: 'pc-form-grid-col-10', tip: `
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/modules/web-console/frontend/app/components/page-configure/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/style.scss b/modules/web-console/frontend/app/components/page-configure/style.scss
index 365e058..9e9661c 100644
--- a/modules/web-console/frontend/app/components/page-configure/style.scss
+++ b/modules/web-console/frontend/app/components/page-configure/style.scss
@@ -222,6 +222,7 @@ list-editable .pc-form-group__text-title {
&>.pc-form-grid-col-10 {
flex-basis: calc(25%);
}
+
&>.pc-form-grid-col-20 {
flex-basis: calc(50%);
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/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 e0aece7..ab69bb8 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js
@@ -154,6 +154,11 @@ export default class AbstractTransformer {
}
// Generate marshaller group.
+ static clusterMvcc(cluster, available) {
+ return this.toSection(this.generator.clusterMvcc(cluster, available));
+ }
+
+ // Generate marshaller group.
static clusterMarshaller(cluster, available) {
return this.toSection(this.generator.clusterMarshaller(cluster, available));
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/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 2a1a506..d80967e 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
@@ -107,6 +107,7 @@ export default class IgniteConfigurationGenerator {
this.clusterMisc(cluster, available, cfg);
this.clusterMetrics(cluster, available, cfg);
+ this.clusterMvcc(cluster, available, cfg);
this.clusterODBC(cluster.odbc, available, cfg);
// Since ignite 2.1 deprecated in ignite 2.3
@@ -1516,7 +1517,6 @@ export default class IgniteConfigurationGenerator {
static clusterMisc(cluster, available, cfg = this.igniteConfigurationBean(cluster)) {
cfg.stringProperty('workDirectory');
- // Since Ignite 2.0
if (available('2.0.0')) {
cfg.stringProperty('consistentId')
.emptyBeanProperty('warmupClosure')
@@ -1530,6 +1530,16 @@ export default class IgniteConfigurationGenerator {
return cfg;
}
+ // Generate MVCC configuration.
+ static clusterMvcc(cluster, available, cfg = this.igniteConfigurationBean(cluster)) {
+ if (available('2.7.0')) {
+ cfg.intProperty('mvccVacuumThreadCount')
+ .intProperty('mvccVacuumFrequency');
+ }
+
+ return cfg;
+ }
+
// Generate IGFSs configs.
static clusterIgfss(igfss, available, cfg = this.igniteConfigurationBean()) {
const igfsCfgs = _.map(igfss, (igfs) => {
http://git-wip-us.apache.org/repos/asf/ignite/blob/a800c36f/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 7df4bb6..626395d 100644
--- a/modules/web-console/frontend/app/services/Caches.js
+++ b/modules/web-console/frontend/app/services/Caches.js
@@ -31,7 +31,8 @@ export default class Caches {
/** @type {ig.menu<ig.config.cache.AtomicityModes>} */
atomicityModes = [
{value: 'ATOMIC', label: 'ATOMIC'},
- {value: 'TRANSACTIONAL', label: 'TRANSACTIONAL'}
+ {value: 'TRANSACTIONAL', label: 'TRANSACTIONAL'},
+ {value: 'TRANSACTIONAL_SNAPSHOT', label: 'TRANSACTIONAL_SNAPSHOT'}
];
/**