You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2018/10/02 11:27:47 UTC
ignite git commit: IGNITE-9390: MVCC: added new properties to .NET
IgniteConfiguration and CacheAtomicityMode. This closes #4887.
Repository: ignite
Updated Branches:
refs/heads/master 96c271ba1 -> 457213713
IGNITE-9390: MVCC: added new properties to .NET IgniteConfiguration and CacheAtomicityMode. This closes #4887.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/45721371
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/45721371
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/45721371
Branch: refs/heads/master
Commit: 457213713a442b734cddb59c1c8310fc6d9cd340
Parents: 96c271b
Author: devozerov <vo...@gridgain.com>
Authored: Tue Oct 2 14:27:39 2018 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Tue Oct 2 14:27:39 2018 +0300
----------------------------------------------------------------------
.../apache/ignite/cache/CacheAtomicityMode.java | 10 +++--
.../configuration/IgniteConfiguration.java | 30 +++++++--------
.../utils/PlatformConfigurationUtils.java | 8 ++++
.../ApiParity/IgniteConfigurationParityTest.cs | 4 +-
.../Cache/CachePartitionedTest.cs | 37 ++++++++++++++++++
.../Config/full-config.xml | 2 +-
.../IgniteConfigurationSerializerTest.cs | 3 ++
.../IgniteConfigurationTest.cs | 7 ++++
.../Cache/Configuration/CacheAtomicityMode.cs | 30 ++++++++++++++-
.../Apache.Ignite.Core/IgniteConfiguration.cs | 40 ++++++++++++++++++++
.../IgniteConfigurationSection.xsd | 11 ++++++
.../Impl/Binary/BinaryReaderExtensions.cs | 8 ++++
.../Impl/Binary/BinaryWriterExtensions.cs | 16 +++++++-
13 files changed, 182 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/core/src/main/java/org/apache/ignite/cache/CacheAtomicityMode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheAtomicityMode.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheAtomicityMode.java
index 43c561c..5b101bf 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheAtomicityMode.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheAtomicityMode.java
@@ -38,6 +38,10 @@ public enum CacheAtomicityMode {
* <b>Note!</b> In this mode, transactional consistency is guaranteed for key-value API operations only.
* To enable ACID capabilities for SQL transactions, use the {@code TRANSACTIONAL_SNAPSHOT} mode.
* <p>
+ * <b>Note!</b> This atomicity mode is not compatible with the other modes within the same transaction.
+ * if a transaction is executed over multiple caches, all caches must have the same atomicity mode,
+ * either {@code TRANSACTIONAL_SNAPSHOT} or {@code TRANSACTIONAL}.
+ * <p>
* See {@link Transaction} for more information about transactions.
*/
TRANSACTIONAL,
@@ -109,9 +113,9 @@ public enum CacheAtomicityMode {
* by the coordinator. This snapshot ensures that the transaction works with a consistent database state
* during its execution period.
* <p>
- * Note! This atomicity mode is not compatible with the other modes within the same transaction.
- * If a transaction is executed over multiple caches, all caches must have the same mode,
- * either {@code TRANSACTIONAL_SNAPSHOT} or {@code TRANSACTIONAL}
+ * <b>Note!</b> This atomicity mode is not compatible with the other modes within the same transaction.
+ * If a transaction is executed over multiple caches, all caches must have the same atomicity mode,
+ * either {@code TRANSACTIONAL_SNAPSHOT} or {@code TRANSACTIONAL}.
* <p>
* See {@link Transaction} for more information about transactions.
*/
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
index 6a0c7cb..964c73b 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
@@ -214,11 +214,11 @@ public class IgniteConfiguration {
/** Default timeout after which long query warning will be printed. */
public static final long DFLT_LONG_QRY_WARN_TIMEOUT = 3000;
- /** Default size of MVCC vacuum thread pool. */
+ /** Default number of MVCC vacuum threads.. */
public static final int DFLT_MVCC_VACUUM_THREAD_CNT = 2;
- /** Default time interval between vacuum process runs (ms). */
- public static final int DFLT_MVCC_VACUUM_FREQUENCY = 5000;
+ /** Default time interval between MVCC vacuum runs in milliseconds. */
+ public static final long DFLT_MVCC_VACUUM_FREQUENCY = 5000;
/** Optional local Ignite instance name. */
private String igniteInstanceName;
@@ -496,8 +496,8 @@ public class IgniteConfiguration {
/** Size of MVCC vacuum thread pool. */
private int mvccVacuumThreadCnt = DFLT_MVCC_VACUUM_THREAD_CNT;
- /** Time interval between vacuum process runs (ms). */
- private int mvccVacuumFreq = DFLT_MVCC_VACUUM_FREQUENCY;
+ /** Time interval between vacuum runs (ms). */
+ private long mvccVacuumFreq = DFLT_MVCC_VACUUM_FREQUENCY;
/** User authentication enabled. */
private boolean authEnabled;
@@ -2998,18 +2998,18 @@ public class IgniteConfiguration {
}
/**
- * Returns number of MVCC vacuum cleanup threads.
+ * Returns number of MVCC vacuum threads.
*
- * @return Number of MVCC vacuum cleanup threads.
+ * @return Number of MVCC vacuum threads.
*/
public int getMvccVacuumThreadCount() {
return mvccVacuumThreadCnt;
}
/**
- * Sets number of MVCC vacuum cleanup threads.
+ * Sets number of MVCC vacuum threads.
*
- * @param mvccVacuumThreadCnt Number of MVCC vacuum cleanup threads.
+ * @param mvccVacuumThreadCnt Number of MVCC vacuum threads.
* @return {@code this} for chaining.
*/
public IgniteConfiguration setMvccVacuumThreadCount(int mvccVacuumThreadCnt) {
@@ -3019,21 +3019,21 @@ public class IgniteConfiguration {
}
/**
- * Returns time interval between vacuum runs.
+ * Returns time interval between MVCC vacuum runs in milliseconds.
*
- * @return Time interval between vacuum runs.
+ * @return Time interval between MVCC vacuum runs in milliseconds.
*/
- public int getMvccVacuumFrequency() {
+ public long getMvccVacuumFrequency() {
return mvccVacuumFreq;
}
/**
- * Sets time interval between vacuum runs.
+ * Sets time interval between MVCC vacuum runs in milliseconds.
*
- * @param mvccVacuumFreq Time interval between vacuum runs.
+ * @param mvccVacuumFreq Time interval between MVCC vacuum runs in milliseconds.
* @return {@code this} for chaining.
*/
- public IgniteConfiguration setMvccVacuumFrequency(int mvccVacuumFreq) {
+ public IgniteConfiguration setMvccVacuumFrequency(long mvccVacuumFreq) {
this.mvccVacuumFreq = mvccVacuumFreq;
return this;
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
index cd67f15..8e66102 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
@@ -654,6 +654,10 @@ public class PlatformConfigurationUtils {
cfg.setActiveOnStart(in.readBoolean());
if (in.readBoolean())
cfg.setAuthenticationEnabled(in.readBoolean());
+ if (in.readBoolean())
+ cfg.setMvccVacuumFrequency(in.readLong());
+ if (in.readBoolean())
+ cfg.setMvccVacuumThreadCount(in.readInt());
int sqlSchemasCnt = in.readInt();
@@ -1201,6 +1205,10 @@ public class PlatformConfigurationUtils {
w.writeBoolean(cfg.isActiveOnStart());
w.writeBoolean(true);
w.writeBoolean(cfg.isAuthenticationEnabled());
+ w.writeBoolean(true);
+ w.writeLong(cfg.getMvccVacuumFrequency());
+ w.writeBoolean(true);
+ w.writeInt(cfg.getMvccVacuumThreadCount());
if (cfg.getSqlSchemas() == null)
w.writeInt(-1);
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs
index 5b4106a..1fd8e72 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs
@@ -80,9 +80,7 @@ namespace Apache.Ignite.Core.Tests.ApiParity
"TimeServerPortBase",
"TimeServerPortRange",
"IncludeProperties",
- "isAutoActivationEnabled", // IGNITE-7301
- "MvccVacuumFrequency", //TODO: IGNITE-9390: Remove when Mvcc support will be added.
- "MvccVacuumThreadCount" //TODO: IGNITE-9390: Remove when Mvcc support will be added.
+ "isAutoActivationEnabled" // IGNITE-7301
};
/// <summary>
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CachePartitionedTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CachePartitionedTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CachePartitionedTest.cs
index 68546b9..c9100b2 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CachePartitionedTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CachePartitionedTest.cs
@@ -17,6 +17,9 @@
namespace Apache.Ignite.Core.Tests.Cache
{
+ using Apache.Ignite.Core.Cache;
+ using Apache.Ignite.Core.Cache.Configuration;
+ using Apache.Ignite.Core.Transactions;
using NUnit.Framework;
[Category(TestUtils.CategoryIntensive)]
@@ -41,5 +44,39 @@ namespace Apache.Ignite.Core.Tests.Cache
{
return 1;
}
+
+ /// <summary>
+ /// Test MVCC transaction.
+ /// </summary>
+ [Test]
+ public void TestMvccTransaction()
+ {
+ IIgnite ignite = GetIgnite(0);
+
+ ICache<int, int> cache = ignite.GetOrCreateCache<int, int>(new CacheConfiguration
+ {
+ Name = "mvcc",
+ AtomicityMode = CacheAtomicityMode.TransactionalSnapshot
+ });
+
+ ITransaction tx = ignite.GetTransactions().TxStart();
+
+ cache.Put(1, 1);
+ cache.Put(2, 2);
+
+ tx.Commit();
+
+ Assert.AreEqual(1, cache.Get(1));
+ Assert.AreEqual(2, cache.Get(2));
+
+ tx = ignite.GetTransactions().TxStart();
+
+ Assert.AreEqual(1, cache.Get(1));
+ Assert.AreEqual(2, cache.Get(2));
+
+ tx.Commit();
+
+ ignite.DestroyCache("mvcc");
+ }
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/full-config.xml
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/full-config.xml b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/full-config.xml
index b091a49..4aa5190 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/full-config.xml
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/full-config.xml
@@ -23,7 +23,7 @@
workDirectory='c:' JvmMaxMemoryMb='1024' MetricsLogFrequency='0:0:10' isDaemon='true'
isLateAffinityAssignment='false' springConfigUrl='c:\myconfig.xml' autoGenerateIgniteInstanceName='true'
peerAssemblyLoadingMode='CurrentAppDomain' longQueryWarningTimeout='1:2:3' isActiveOnStart='false'
- consistentId='someId012' redirectJavaConsoleOutput='false' authenticationEnabled='true'>
+ consistentId='someId012' redirectJavaConsoleOutput='false' authenticationEnabled='true' mvccVacuumFrequency='10000' mvccVacuumThreadCount='4'>
<localhost>127.1.1.1</localhost>
<binaryConfiguration compactFooter='false' keepDeserialized='true'>
<nameMapper type='Apache.Ignite.Core.Tests.IgniteConfigurationSerializerTest+NameMapper' bar='testBar' />
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
index e2ece20..ec9d4fd 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
@@ -100,6 +100,9 @@ namespace Apache.Ignite.Core.Tests
Assert.IsFalse(cfg.IsActiveOnStart);
Assert.IsTrue(cfg.AuthenticationEnabled);
+ Assert.AreEqual(10000, cfg.MvccVacuumFrequency);
+ Assert.AreEqual(4, cfg.MvccVacuumThreadCount);
+
Assert.IsNotNull(cfg.SqlSchemas);
Assert.AreEqual(2, cfg.SqlSchemas.Count);
Assert.IsTrue(cfg.SqlSchemas.Contains("SCHEMA_1"));
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs
index a03d09c..2861c30 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs
@@ -242,6 +242,9 @@ namespace Apache.Ignite.Core.Tests
AssertExtensions.ReflectionEqual(cfg.DataStorageConfiguration, resCfg.DataStorageConfiguration);
+ Assert.AreEqual(cfg.MvccVacuumFrequency, resCfg.MvccVacuumFrequency);
+ Assert.AreEqual(cfg.MvccVacuumThreadCount, resCfg.MvccVacuumThreadCount);
+
Assert.IsNotNull(resCfg.SqlSchemas);
Assert.AreEqual(2, resCfg.SqlSchemas.Count);
Assert.IsTrue(resCfg.SqlSchemas.Contains("SCHEMA_3"));
@@ -498,6 +501,8 @@ namespace Apache.Ignite.Core.Tests
cfg.ClientConnectorConfigurationEnabled);
Assert.AreEqual(IgniteConfiguration.DefaultRedirectJavaConsoleOutput, cfg.RedirectJavaConsoleOutput);
Assert.AreEqual(IgniteConfiguration.DefaultAuthenticationEnabled, cfg.AuthenticationEnabled);
+ Assert.AreEqual(IgniteConfiguration.DefaultMvccVacuumFrequency, cfg.MvccVacuumFrequency);
+ Assert.AreEqual(IgniteConfiguration.DefaultMvccVacuumThreadCount, cfg.MvccVacuumThreadCount);
// Thread pools.
Assert.AreEqual(IgniteConfiguration.DefaultManagementThreadPoolSize, cfg.ManagementThreadPoolSize);
@@ -836,6 +841,8 @@ namespace Apache.Ignite.Core.Tests
}
},
AuthenticationEnabled = false,
+ MvccVacuumFrequency = 20000,
+ MvccVacuumThreadCount = 8,
SqlSchemas = new List<string> { "SCHEMA_3", "schema_4" }
};
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheAtomicityMode.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheAtomicityMode.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheAtomicityMode.cs
index 8c36a77..49e5d12 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheAtomicityMode.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheAtomicityMode.cs
@@ -26,6 +26,13 @@ namespace Apache.Ignite.Core.Cache.Configuration
{
/// <summary>
/// Specifies fully ACID-compliant transactional cache behavior.
+ /// <para />
+ /// <b>Note!</b> In this mode, transactional consistency is guaranteed for key-value API operations only.
+ /// To enable ACID capabilities for SQL transactions, use TRANSACTIONAL_SNAPSHOT mode.
+ /// <para />
+ /// <b>Note!</b> This atomicity mode is not compatible with the other atomicity modes within the same transaction.
+ /// If a transaction is executed over multiple caches, all caches must have the same atomicity mode,
+ /// either TRANSACTIONAL_SNAPSHOT or TRANSACTIONAL.
/// </summary>
Transactional,
@@ -49,6 +56,27 @@ namespace Apache.Ignite.Core.Cache.Configuration
/// Also note that all data modifications in <see cref="Atomic"/> mode are guaranteed to be atomic
/// and consistent with writes to the underlying persistent store, if one is configured.
/// </summary>
- Atomic
+ Atomic,
+
+ /// <summary>
+ /// Specifies fully ACID-compliant transactional cache behavior for both key-value API and SQL transactions.
+ /// <para/>
+ /// This atomicity mode enables multiversion concurrency control (MVCC) for the cache. In MVCC-enabled caches,
+ /// when a transaction updates a row, it creates a new version of that row instead of overwriting it.
+ /// Other users continue to see the old version of the row until the transaction is committed.
+ /// In this way, readers and writers do not conflict with each other and always work with a consistent dataset.
+ /// The old version of data is cleaned up when it's no longer accessed by anyone.
+ /// <para />
+ /// With this mode enabled, one node is elected as an MVCC coordinator. This node tracks all in-flight transactions
+ /// and queries executed in the cluster. Each transaction or query executed over the cache with
+ /// TRANSACTIONAL_SNAPSHOT mode works with a current snapshot of data generated for this transaction or query
+ /// by the coordinator. This snapshot ensures that the transaction works with a consistent database state
+ /// during its execution period.
+ /// <para />
+ /// <b>Note!</b> This atomicity mode is not compatible with the other atomicity modes within the same transaction.
+ /// If a transaction is executed over multiple caches, all caches must have the same atomicity mode,
+ /// either TRANSACTIONAL_SNAPSHOT or TRANSACTIONAL.
+ /// </summary>
+ TransactionalSnapshot,
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
index bd53118..315b27d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
@@ -205,6 +205,12 @@ namespace Apache.Ignite.Core
/** Map from user-defined listener to it's id. */
private Dictionary<object, int> _localEventListenerIds;
+ /** MVCC vacuum frequency. */
+ private long? _mvccVacuumFreq;
+
+ /** MVCC vacuum thread count. */
+ private int? _mvccVacuumThreadCnt;
+
/// <summary>
/// Default network retry count.
/// </summary>
@@ -231,6 +237,16 @@ namespace Apache.Ignite.Core
public const bool DefaultAuthenticationEnabled = false;
/// <summary>
+ /// Default value for <see cref="MvccVacuumFrequency"/> property.
+ /// </summary>
+ public const long DefaultMvccVacuumFrequency = 5000;
+
+ /// <summary>
+ /// Default value for <see cref="MvccVacuumThreadCount"/> property.
+ /// </summary>
+ public const int DefaultMvccVacuumThreadCount = 2;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="IgniteConfiguration"/> class.
/// </summary>
public IgniteConfiguration()
@@ -309,6 +325,8 @@ namespace Apache.Ignite.Core
writer.WriteTimeSpanAsLongNullable(_longQueryWarningTimeout);
writer.WriteBooleanNullable(_isActiveOnStart);
writer.WriteBooleanNullable(_authenticationEnabled);
+ writer.WriteLongNullable(_mvccVacuumFreq);
+ writer.WriteIntNullable(_mvccVacuumThreadCnt);
if (SqlSchemas == null)
writer.WriteInt(-1);
@@ -675,6 +693,8 @@ namespace Apache.Ignite.Core
_longQueryWarningTimeout = r.ReadTimeSpanNullable();
_isActiveOnStart = r.ReadBooleanNullable();
_authenticationEnabled = r.ReadBooleanNullable();
+ _mvccVacuumFreq = r.ReadLongNullable();
+ _mvccVacuumThreadCnt = r.ReadIntNullable();
int sqlSchemasCnt = r.ReadInt();
@@ -1550,6 +1570,26 @@ namespace Apache.Ignite.Core
}
/// <summary>
+ /// Time interval between MVCC vacuum runs in milliseconds.
+ /// </summary>
+ [DefaultValue(DefaultMvccVacuumFrequency)]
+ public long MvccVacuumFrequency
+ {
+ get { return _mvccVacuumFreq ?? DefaultMvccVacuumFrequency; }
+ set { _mvccVacuumFreq = value; }
+ }
+
+ /// <summary>
+ /// Number of MVCC vacuum threads.
+ /// </summary>
+ [DefaultValue(DefaultMvccVacuumThreadCount)]
+ public int MvccVacuumThreadCount
+ {
+ get { return _mvccVacuumThreadCnt ?? DefaultMvccVacuumThreadCount; }
+ set { _mvccVacuumThreadCnt = value; }
+ }
+
+ /// <summary>
/// Gets or sets predefined failure handlers implementation.
/// A failure handler handles critical failures of Ignite instance accordingly:
/// <para><see cref="NoOpFailureHandler"/> -- do nothing.</para>
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
index ebbef67..4040610 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
@@ -2265,6 +2265,17 @@
<xs:documentation>Whether user authentication is enabled for the cluster.</xs:documentation>
</xs:annotation>
</xs:attribute>
+ <xs:attribute name="mvccVacuumFrequency" type="xs:long">
+ <xs:annotation>
+ <xs:documentation>Time interval between MVCC vacuum runs in milliseconds.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="mvccVacuumThreadCount" type="xs:int">
+ <xs:annotation>
+ <xs:documentation>Number of MVCC vacuum threads.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="clientConnectorConfigurationEnabled" type="xs:boolean">
<xs:annotation>
<xs:documentation>Whether client connector should be enabled (allow thin clients, ODBC and JDBC drivers to work with Ignite).</xs:documentation>
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReaderExtensions.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReaderExtensions.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReaderExtensions.cs
index b13318c..5fca62d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReaderExtensions.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryReaderExtensions.cs
@@ -79,6 +79,14 @@ namespace Apache.Ignite.Core.Impl.Binary
}
/// <summary>
+ /// Reads the nullable long.
+ /// </summary>
+ public static long? ReadLongNullable(this IBinaryRawReader reader)
+ {
+ return reader.ReadBoolean() ? reader.ReadLong() : (long?) null;
+ }
+
+ /// <summary>
/// Reads the nullable bool.
/// </summary>
public static bool? ReadBooleanNullable(this IBinaryRawReader reader)
http://git-wip-us.apache.org/repos/asf/ignite/blob/45721371/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs
index e504d75..b965bca 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs
@@ -44,7 +44,7 @@ namespace Apache.Ignite.Core.Impl.Binary
}
/// <summary>
- /// Writes the nullable boolean.
+ /// Writes the nullable int.
/// </summary>
public static void WriteIntNullable(this IBinaryRawWriter writer, int? value)
{
@@ -58,6 +58,20 @@ namespace Apache.Ignite.Core.Impl.Binary
}
/// <summary>
+ /// Writes the nullable long.
+ /// </summary>
+ public static void WriteLongNullable(this IBinaryRawWriter writer, long? value)
+ {
+ if (value != null)
+ {
+ writer.WriteBoolean(true);
+ writer.WriteLong(value.Value);
+ }
+ else
+ writer.WriteBoolean(false);
+ }
+
+ /// <summary>
/// Writes the timespan.
/// </summary>
public static void WriteTimeSpanAsLong(this IBinaryRawWriter writer, TimeSpan value)