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 2017/05/31 07:29:53 UTC
ignite git commit: IGNITE-5273 .NET: MemoryMetrics API improvements
Repository: ignite
Updated Branches:
refs/heads/master 10a0a84a1 -> 6f8577f34
IGNITE-5273 .NET: MemoryMetrics API improvements
This closes #2039
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/6f8577f3
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/6f8577f3
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/6f8577f3
Branch: refs/heads/master
Commit: 6f8577f34c6b9b9de21629bba30adbdac86d8126
Parents: 10a0a84
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Wed May 31 10:29:27 2017 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Wed May 31 10:29:48 2017 +0300
----------------------------------------------------------------------
.../platform/cluster/PlatformClusterGroup.java | 45 +++++++++++++++++---
.../utils/PlatformConfigurationUtils.java | 6 ++-
.../Cache/MemoryMetricsTest.cs | 20 +++++++++
.../IgniteConfigurationSerializerTest.cs | 8 +++-
.../IgniteConfigurationTest.cs | 6 ++-
.../Configuration/MemoryPolicyConfiguration.cs | 45 +++++++++++++++++++-
.../dotnet/Apache.Ignite.Core/IIgnite.cs | 9 ++++
.../IgniteConfigurationSection.xsd | 10 +++++
.../Impl/Cluster/ClusterGroupImpl.cs | 12 ++++++
.../dotnet/Apache.Ignite.Core/Impl/Ignite.cs | 8 ++++
10 files changed, 158 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/6f8577f3/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cluster/PlatformClusterGroup.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cluster/PlatformClusterGroup.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cluster/PlatformClusterGroup.java
index 5a5ebfd..cd8d9b8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cluster/PlatformClusterGroup.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cluster/PlatformClusterGroup.java
@@ -25,6 +25,7 @@ import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteCluster;
import org.apache.ignite.MemoryMetrics;
+import org.apache.ignite.binary.BinaryRawWriter;
import org.apache.ignite.cluster.ClusterMetrics;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.internal.cluster.ClusterGroupEx;
@@ -112,6 +113,9 @@ public class PlatformClusterGroup extends PlatformAbstractTarget {
/** */
private static final int OP_MEMORY_METRICS = 26;
+ /** */
+ private static final int OP_MEMORY_METRICS_BY_NAME = 27;
+
/** Projection. */
private final ClusterGroupEx prj;
@@ -142,12 +146,7 @@ public class PlatformClusterGroup extends PlatformAbstractTarget {
writer.writeInt(metrics.size());
for (MemoryMetrics m : metrics) {
- writer.writeString(m.getName());
- writer.writeLong(m.getTotalAllocatedPages());
- writer.writeFloat(m.getAllocationRate());
- writer.writeFloat(m.getEvictionRate());
- writer.writeFloat(m.getLargeEntriesPagesPercentage());
- writer.writeFloat(m.getPagesFillFactor());
+ writeMemoryMetrics(writer, m);
}
break;
@@ -236,6 +235,22 @@ public class PlatformClusterGroup extends PlatformAbstractTarget {
break;
}
+ case OP_MEMORY_METRICS_BY_NAME: {
+ String plcName = reader.readString();
+
+ MemoryMetrics metrics = platformCtx.kernalContext().grid().memoryMetrics(plcName);
+
+ if (metrics != null) {
+ writer.writeBoolean(true);
+ writeMemoryMetrics(writer, metrics);
+ }
+ else {
+ writer.writeBoolean(false);
+ }
+
+ break;
+ }
+
default:
super.processInStreamOutStream(type, reader, writer);
}
@@ -399,4 +414,22 @@ public class PlatformClusterGroup extends PlatformAbstractTarget {
return ((IgniteCluster)prj).topology(topVer);
}
+
+ /**
+ * Writes the memory metrics.
+ *
+ * @param writer Writer.
+ * @param metrics Metrics.
+ */
+ private static void writeMemoryMetrics(BinaryRawWriter writer, MemoryMetrics metrics) {
+ assert writer != null;
+ assert metrics != null;
+
+ writer.writeString(metrics.getName());
+ writer.writeLong(metrics.getTotalAllocatedPages());
+ writer.writeFloat(metrics.getAllocationRate());
+ writer.writeFloat(metrics.getEvictionRate());
+ writer.writeFloat(metrics.getLargeEntriesPagesPercentage());
+ writer.writeFloat(metrics.getPagesFillFactor());
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6f8577f3/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 6ba88d9..dca6960 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
@@ -1351,7 +1351,9 @@ public class PlatformConfigurationUtils {
.setPageEvictionMode(DataPageEvictionMode.values()[in.readInt()])
.setEvictionThreshold(in.readDouble())
.setEmptyPagesPoolSize(in.readInt())
- .setMetricsEnabled(in.readBoolean());
+ .setMetricsEnabled(in.readBoolean())
+ .setSubIntervals(in.readInt())
+ .setRateTimeInterval((int) (in.readLong() / 1000));
plcs[i] = cfg;
}
@@ -1396,6 +1398,8 @@ public class PlatformConfigurationUtils {
w.writeDouble(plc.getEvictionThreshold());
w.writeInt(plc.getEmptyPagesPoolSize());
w.writeBoolean(plc.isMetricsEnabled());
+ w.writeInt(plc.getSubIntervals());
+ w.writeLong(plc.getRateTimeInterval() * 1000);
}
}
else {
http://git-wip-us.apache.org/repos/asf/ignite/blob/6f8577f3/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/MemoryMetricsTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/MemoryMetricsTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/MemoryMetricsTest.cs
index 0aba377..1aad823 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/MemoryMetricsTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/MemoryMetricsTest.cs
@@ -60,6 +60,26 @@ namespace Apache.Ignite.Core.Tests.Cache
var sysMetrics = metrics[2];
Assert.AreEqual("sysMemPlc", sysMetrics.Name);
AssertMetricsAreEmpty(sysMetrics);
+
+ // Metrics by name.
+ emptyMetrics = ignite.GetMemoryMetrics(MemoryPolicyNoMetrics);
+ Assert.AreEqual(MemoryPolicyNoMetrics, emptyMetrics.Name);
+ AssertMetricsAreEmpty(emptyMetrics);
+
+ memMetrics = ignite.GetMemoryMetrics(MemoryPolicyWithMetrics);
+ Assert.AreEqual(MemoryPolicyWithMetrics, memMetrics.Name);
+ Assert.Greater(memMetrics.AllocationRate, 0);
+ Assert.AreEqual(0, memMetrics.EvictionRate);
+ Assert.AreEqual(0, memMetrics.LargeEntriesPagesPercentage);
+ Assert.Greater(memMetrics.PageFillFactor, 0);
+ Assert.Greater(memMetrics.TotalAllocatedPages, 1000);
+
+ sysMetrics = ignite.GetMemoryMetrics("sysMemPlc");
+ Assert.AreEqual("sysMemPlc", sysMetrics.Name);
+ AssertMetricsAreEmpty(sysMetrics);
+
+ // Invalid name.
+ Assert.IsNull(ignite.GetMemoryMetrics("boo"));
}
/// <summary>
http://git-wip-us.apache.org/repos/asf/ignite/blob/6f8577f3/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 a90eae5..c726f85 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
@@ -137,7 +137,7 @@ namespace Apache.Ignite.Core.Tests
<eventStorageSpi type='MemoryEventStorageSpi' expirationTimeout='00:00:23.45' maxEventCount='129' />
<memoryConfiguration concurrencyLevel='3' defaultMemoryPolicyName='dfPlc' pageSize='45' systemCacheInitialSize='67' systemCacheMaxSize='68'>
<memoryPolicies>
- <memoryPolicyConfiguration emptyPagesPoolSize='1' evictionThreshold='0.2' name='dfPlc' pageEvictionMode='RandomLru' initialSize='89' maxSize='98' swapFilePath='abc' metricsEnabled='true' />
+ <memoryPolicyConfiguration emptyPagesPoolSize='1' evictionThreshold='0.2' name='dfPlc' pageEvictionMode='RandomLru' initialSize='89' maxSize='98' swapFilePath='abc' metricsEnabled='true' rateTimeInterval='0:1:2' subIntervals='9' />
</memoryPolicies>
</memoryConfiguration>
</igniteConfig>";
@@ -274,6 +274,8 @@ namespace Apache.Ignite.Core.Tests
Assert.AreEqual(89, memPlc.InitialSize);
Assert.AreEqual(98, memPlc.MaxSize);
Assert.IsTrue(memPlc.MetricsEnabled);
+ Assert.AreEqual(9, memPlc.SubIntervals);
+ Assert.AreEqual(TimeSpan.FromSeconds(62), memPlc.RateTimeInterval);
Assert.AreEqual(PeerAssemblyLoadingMode.CurrentAppDomain, cfg.PeerAssemblyLoadingMode);
}
@@ -822,7 +824,9 @@ namespace Apache.Ignite.Core.Tests
MaxSize = 345 * 1024 * 1024,
EvictionThreshold = 0.88,
EmptyPagesPoolSize = 77,
- SwapFilePath = "myPath1"
+ SwapFilePath = "myPath1",
+ RateTimeInterval = TimeSpan.FromSeconds(22),
+ SubIntervals = 99
},
new MemoryPolicyConfiguration
{
http://git-wip-us.apache.org/repos/asf/ignite/blob/6f8577f3/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 ae82d8a..80b271d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs
@@ -262,6 +262,8 @@ namespace Apache.Ignite.Core.Tests
Assert.AreEqual(MemoryPolicyConfiguration.DefaultEvictionThreshold, plc.EvictionThreshold);
Assert.AreEqual(MemoryPolicyConfiguration.DefaultInitialSize, plc.InitialSize);
Assert.AreEqual(MemoryPolicyConfiguration.DefaultMaxSize, plc.MaxSize);
+ Assert.AreEqual(MemoryPolicyConfiguration.DefaultSubIntervals, plc.SubIntervals);
+ Assert.AreEqual(MemoryPolicyConfiguration.DefaultRateTimeInterval, plc.RateTimeInterval);
}
}
@@ -598,7 +600,9 @@ namespace Apache.Ignite.Core.Tests
MaxSize = 345 * 1024 * 1024,
EvictionThreshold = 0.88,
EmptyPagesPoolSize = 77,
- SwapFilePath = "myPath1"
+ SwapFilePath = "myPath1",
+ RateTimeInterval = TimeSpan.FromSeconds(35),
+ SubIntervals = 7
},
new MemoryPolicyConfiguration
{
http://git-wip-us.apache.org/repos/asf/ignite/blob/6f8577f3/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/MemoryPolicyConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/MemoryPolicyConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/MemoryPolicyConfiguration.cs
index 1db9ea9..c1fcaa2 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/MemoryPolicyConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/MemoryPolicyConfiguration.cs
@@ -17,9 +17,12 @@
namespace Apache.Ignite.Core.Cache.Configuration
{
+ using System;
using System.ComponentModel;
+ using System.Diagnostics.CodeAnalysis;
using Apache.Ignite.Core.Binary;
using Apache.Ignite.Core.Impl;
+ using Apache.Ignite.Core.Impl.Binary;
/// <summary>
/// Defines page memory policy configuration. See <see cref="MemoryConfiguration.MemoryPolicies"/>.
@@ -47,6 +50,18 @@ namespace Apache.Ignite.Core.Cache.Configuration
public static readonly long DefaultMaxSize = (long) ((long) NativeMethods.GetTotalPhysicalMemory() * 0.8);
/// <summary>
+ /// The default sub intervals.
+ /// </summary>
+ [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly",
+ Justification = "Consistency with Java config")]
+ public const int DefaultSubIntervals = 5;
+
+ /// <summary>
+ /// The default rate time interval.
+ /// </summary>
+ public static readonly TimeSpan DefaultRateTimeInterval = TimeSpan.FromSeconds(60);
+
+ /// <summary>
/// Initializes a new instance of the <see cref="MemoryPolicyConfiguration"/> class.
/// </summary>
public MemoryPolicyConfiguration()
@@ -56,6 +71,8 @@ namespace Apache.Ignite.Core.Cache.Configuration
Name = MemoryConfiguration.DefaultDefaultMemoryPolicyName;
InitialSize = DefaultInitialSize;
MaxSize = DefaultMaxSize;
+ SubIntervals = DefaultSubIntervals;
+ RateTimeInterval = DefaultRateTimeInterval;
}
/// <summary>
@@ -72,6 +89,8 @@ namespace Apache.Ignite.Core.Cache.Configuration
EvictionThreshold = reader.ReadDouble();
EmptyPagesPoolSize = reader.ReadInt();
MetricsEnabled = reader.ReadBoolean();
+ SubIntervals = reader.ReadInt();
+ RateTimeInterval = reader.ReadLongAsTimespan();
}
/// <summary>
@@ -87,6 +106,8 @@ namespace Apache.Ignite.Core.Cache.Configuration
writer.WriteDouble(EvictionThreshold);
writer.WriteInt(EmptyPagesPoolSize);
writer.WriteBoolean(MetricsEnabled);
+ writer.WriteInt(SubIntervals);
+ writer.WriteTimeSpanAsLong(RateTimeInterval);
}
/// <summary>
@@ -146,8 +167,30 @@ namespace Apache.Ignite.Core.Cache.Configuration
/// <summary>
/// Gets or sets a value indicating whether memory metrics should be enabled.
/// <para />
- /// Metrics can be retrieved with <see cref="IIgnite.GetMemoryMetrics"/> method.
+ /// Metrics can be retrieved with <see cref="IIgnite.GetMemoryMetrics()"/> method.
/// </summary>
public bool MetricsEnabled { get; set; }
+
+ /// <summary>
+ /// Gets or sets the rate time interval for <see cref="IMemoryMetrics.AllocationRate"/>
+ /// and <see cref="IMemoryMetrics.EvictionRate"/> monitoring purposes.
+ /// <para />
+ /// For instance, after setting the interval to 60 seconds, subsequent calls
+ /// to <see cref="IMemoryMetrics.AllocationRate"/> will return average allocation
+ /// rate (pages per second) for the last minute.
+ /// </summary>
+ [DefaultValue(typeof(TimeSpan), "00:01:00")]
+ public TimeSpan RateTimeInterval { get; set; }
+
+ /// <summary>
+ /// Gets or sets the number of sub intervals to split <see cref="RateTimeInterval"/> into to calculate
+ /// <see cref="IMemoryMetrics.AllocationRate"/> and <see cref="IMemoryMetrics.EvictionRate"/>.
+ /// <para />
+ /// Bigger value results in more accurate metrics.
+ /// </summary>
+ [DefaultValue(DefaultSubIntervals)]
+ [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly",
+ Justification = "Consistency with Java config")]
+ public int SubIntervals { get; set; }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6f8577f3/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
index 863952b..acf2064 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
@@ -337,5 +337,14 @@ namespace Apache.Ignite.Core
/// Memory metrics should be enabled with <see cref="MemoryPolicyConfiguration.MetricsEnabled"/>.
/// </summary>
ICollection<IMemoryMetrics> GetMemoryMetrics();
+
+ /// <summary>
+ /// Gets the memory metrics for the specified memory policy.
+ /// <para />
+ /// To get metrics for the default memory region,
+ /// use <see cref="MemoryConfiguration.DefaultMemoryPolicyName"/>.
+ /// </summary>
+ /// <param name="memoryPolicyName">Name of the memory policy.</param>
+ IMemoryMetrics GetMemoryMetrics(string memoryPolicyName);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6f8577f3/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 bdfa8db..fae4ebb 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
@@ -1205,6 +1205,16 @@
<xs:documentation>Enable memory metrics.</xs:documentation>
</xs:annotation>
</xs:attribute>
+ <xs:attribute name="subIntervals" type="xs:int">
+ <xs:annotation>
+ <xs:documentation>Number of sub intervals to split RateTimeInterval into.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="rateTimeInterval" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Rate time interval for AllocationRate and EvictionRate monitoring.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
http://git-wip-us.apache.org/repos/asf/ignite/blob/6f8577f3/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cluster/ClusterGroupImpl.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cluster/ClusterGroupImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cluster/ClusterGroupImpl.cs
index ad180ee..d6947b2 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cluster/ClusterGroupImpl.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cluster/ClusterGroupImpl.cs
@@ -121,6 +121,9 @@ namespace Apache.Ignite.Core.Impl.Cluster
/** */
private const int OpMemoryMetrics = 26;
+ /** */
+ private const int OpMemoryMetricsByName = 27;
+
/** Initial Ignite instance. */
private readonly Ignite _ignite;
@@ -578,6 +581,15 @@ namespace Apache.Ignite.Core.Impl.Cluster
}
/// <summary>
+ /// Gets the memory metrics.
+ /// </summary>
+ public IMemoryMetrics GetMemoryMetrics(string memoryPolicyName)
+ {
+ return DoOutInOp(OpMemoryMetricsByName, w => w.WriteString(memoryPolicyName),
+ stream => stream.ReadBool() ? new MemoryMetrics(Marshaller.StartUnmarshal(stream, false)) : null);
+ }
+
+ /// <summary>
/// Creates new Cluster Group from given native projection.
/// </summary>
/// <param name="prj">Native projection.</param>
http://git-wip-us.apache.org/repos/asf/ignite/blob/6f8577f3/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 b392f9c..000968c 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
@@ -737,6 +737,14 @@ namespace Apache.Ignite.Core.Impl
return _prj.GetMemoryMetrics();
}
+ /** <inheritdoc /> */
+ public IMemoryMetrics GetMemoryMetrics(string memoryPolicyName)
+ {
+ IgniteArgumentCheck.NotNullOrEmpty(memoryPolicyName, "memoryPolicyName");
+
+ return _prj.GetMemoryMetrics(memoryPolicyName);
+ }
+
/// <summary>
/// Gets or creates near cache.
/// </summary>