You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2018/01/23 11:24:45 UTC
ignite git commit: IGNITE-7493 .NET: WAL management API added
Repository: ignite
Updated Branches:
refs/heads/master 6bb6b3e51 -> 82554dd76
IGNITE-7493 .NET: WAL management API added
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/82554dd7
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/82554dd7
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/82554dd7
Branch: refs/heads/master
Commit: 82554dd766fc6de77331e533be6d0b7040d2c90a
Parents: 6bb6b3e
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Tue Jan 23 14:24:37 2018 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Tue Jan 23 14:24:37 2018 +0300
----------------------------------------------------------------------
.../platform/PlatformProcessorImpl.java | 27 +++++++++++++-
.../Cache/PersistenceTest.cs | 37 ++++++++++++++++++++
.../Apache.Ignite.Core/Cluster/ICluster.cs | 34 ++++++++++++++++++
.../dotnet/Apache.Ignite.Core/Impl/Ignite.cs | 29 ++++++++++++++-
4 files changed, 125 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/82554dd7/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
index de51b3d..87ec97c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
@@ -69,6 +69,9 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import static org.apache.ignite.internal.processors.platform.PlatformAbstractTarget.FALSE;
+import static org.apache.ignite.internal.processors.platform.PlatformAbstractTarget.TRUE;
+
/**
* GridGain platform processor.
*/
@@ -152,6 +155,15 @@ public class PlatformProcessorImpl extends GridProcessorAdapter implements Platf
/** */
private static final int OP_GET_BASELINE_TOPOLOGY = 26;
+ /** */
+ private static final int OP_DISABLE_WAL = 27;
+
+ /** */
+ private static final int OP_ENABLE_WAL = 28;
+
+ /** */
+ private static final int OP_IS_WAL_ENABLED = 29;
+
/** Start latch. */
private final CountDownLatch startLatch = new CountDownLatch(1);
@@ -412,7 +424,7 @@ public class PlatformProcessorImpl extends GridProcessorAdapter implements Platf
@Override public long processInLongOutLong(int type, long val) throws IgniteCheckedException {
switch (type) {
case OP_LOGGER_IS_LEVEL_ENABLED: {
- return loggerIsLevelEnabled((int) val) ? PlatformAbstractTarget.TRUE : PlatformAbstractTarget.FALSE;
+ return loggerIsLevelEnabled((int) val) ? TRUE : FALSE;
}
case OP_RELEASE_START: {
@@ -468,6 +480,19 @@ public class PlatformProcessorImpl extends GridProcessorAdapter implements Platf
ctx.grid().addCacheConfiguration(cfg);
return 0;
+
+ case OP_DISABLE_WAL:
+ ctx.grid().cluster().disableWal(reader.readString());
+
+ return 0;
+
+ case OP_ENABLE_WAL:
+ ctx.grid().cluster().enableWal(reader.readString());
+
+ return 0;
+
+ case OP_IS_WAL_ENABLED:
+ return ctx.grid().cluster().isWalEnabled(reader.readString()) ? TRUE : FALSE;
}
return PlatformAbstractTarget.throwUnsupported(type);
http://git-wip-us.apache.org/repos/asf/ignite/blob/82554dd7/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistenceTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistenceTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistenceTest.cs
index e3c0acf..1893a5a 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistenceTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/PersistenceTest.cs
@@ -275,6 +275,43 @@ namespace Apache.Ignite.Core.Tests.Cache
}
/// <summary>
+ /// Tests the wal disable/enable functionality.
+ /// </summary>
+ [Test]
+ public void TestWalDisableEnable()
+ {
+ using (var ignite = Ignition.Start(GetPersistentConfiguration()))
+ {
+ var cluster = ignite.GetCluster();
+ cluster.SetActive(true);
+
+ var cache = ignite.CreateCache<int, int>("foo");
+ Assert.IsTrue(cluster.IsWalEnabled(cache.Name));
+ cache[1] = 1;
+
+ cluster.DisableWal(cache.Name);
+ Assert.IsFalse(cluster.IsWalEnabled(cache.Name));
+ cache[2] = 2;
+
+ cluster.EnableWal(cache.Name);
+ Assert.IsTrue(cluster.IsWalEnabled(cache.Name));
+
+ Assert.AreEqual(1, cache[1]);
+ Assert.AreEqual(2, cache[2]);
+
+ // Check exceptions.
+ var ex = Assert.Throws<IgniteException>(() => cluster.IsWalEnabled("bar"));
+ Assert.AreEqual("Cache not found: bar", ex.Message);
+
+ ex = Assert.Throws<IgniteException>(() => cluster.DisableWal("bar"));
+ Assert.AreEqual("Cache doesn't exist: bar", ex.Message);
+
+ ex = Assert.Throws<IgniteException>(() => cluster.EnableWal("bar"));
+ Assert.AreEqual("Cache doesn't exist: bar", ex.Message);
+ }
+ }
+
+ /// <summary>
/// Checks active state.
/// </summary>
private static void CheckIsActive(IIgnite ignite, bool isActive)
http://git-wip-us.apache.org/repos/asf/ignite/blob/82554dd7/modules/platforms/dotnet/Apache.Ignite.Core/Cluster/ICluster.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cluster/ICluster.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cluster/ICluster.cs
index f9bbdf7..45e22e9 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cluster/ICluster.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cluster/ICluster.cs
@@ -121,5 +121,39 @@ namespace Apache.Ignite.Core.Cluster
/// Returns null if <see cref="SetBaselineTopology(long)"/> has not been called.
/// </summary>
ICollection<IBaselineNode> GetBaselineTopology();
+
+ /// <summary>
+ /// Disables write-ahead logging for specified cache. When WAL is disabled, changes are not logged to disk.
+ /// This significantly improves cache update speed.The drawback is absence of local crash-recovery guarantees.
+ /// If node is crashed, local content of WAL-disabled cache will be cleared on restart
+ /// to avoid data corruption.
+ /// <para />
+ /// Internally this method will wait for all current cache operations to finish and prevent new cache
+ /// operations from being executed.Then checkpoint is initiated to flush all data to disk.Control is returned
+ /// to the callee when all dirty pages are prepared for checkpoint, but not necessarily flushed to disk.
+ /// <para />
+ /// WAL state can be changed only for persistent caches.
+ /// </summary>
+ /// <param name="cacheName">Name of the cache.</param>
+ void DisableWal(string cacheName);
+
+ /// <summary>
+ /// Enables write-ahead logging for specified cache. Restoring crash-recovery guarantees of a previous call to
+ /// <see cref="DisableWal"/>.
+ /// <para />
+ /// Internally this method will wait for all current cache operations to finish and prevent new cache
+ /// operations from being executed. Then checkpoint is initiated to flush all data to disk.
+ /// Control is returned to the callee when all data is persisted to disk.
+ /// <para />
+ /// WAL state can be changed only for persistent caches.
+ /// </summary>
+ /// <param name="cacheName">Name of the cache.</param>
+ void EnableWal(string cacheName);
+
+ /// <summary>
+ /// Determines whether write-ahead logging is enabled for specified cache.
+ /// </summary>
+ /// <param name="cacheName">Name of the cache.</param>
+ bool IsWalEnabled(string cacheName);
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/82554dd7/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
index 10b083b..ffab09f 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
@@ -87,7 +87,10 @@ namespace Apache.Ignite.Core.Impl
AddCacheConfiguration = 23,
SetBaselineTopologyVersion = 24,
SetBaselineTopologyNodes = 25,
- GetBaselineTopology = 26
+ GetBaselineTopology = 26,
+ DisableWal = 27,
+ EnableWal = 28,
+ IsWalEnabled = 29
}
/** */
@@ -818,6 +821,30 @@ namespace Apache.Ignite.Core.Impl
}
/** <inheritdoc /> */
+ public void DisableWal(string cacheName)
+ {
+ IgniteArgumentCheck.NotNull(cacheName, "cacheName");
+
+ DoOutOp((int) Op.DisableWal, w => w.WriteString(cacheName));
+ }
+
+ /** <inheritdoc /> */
+ public void EnableWal(string cacheName)
+ {
+ IgniteArgumentCheck.NotNull(cacheName, "cacheName");
+
+ DoOutOp((int) Op.EnableWal, w => w.WriteString(cacheName));
+ }
+
+ /** <inheritdoc /> */
+ public bool IsWalEnabled(string cacheName)
+ {
+ IgniteArgumentCheck.NotNull(cacheName, "cacheName");
+
+ return DoOutOp((int) Op.IsWalEnabled, w => w.WriteString(cacheName)) == True;
+ }
+
+ /** <inheritdoc /> */
#pragma warning disable 618
public IPersistentStoreMetrics GetPersistentStoreMetrics()
{