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 2019/04/12 15:30:15 UTC
[ignite] branch master updated: IGNITE-11696 Add JMX metrics for
PME execution time - Fixes #6420.
This is an automated email from the ASF dual-hosted git repository.
agoncharuk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 7b0f6c1 IGNITE-11696 Add JMX metrics for PME execution time - Fixes #6420.
7b0f6c1 is described below
commit 7b0f6c1641131b71232f063e3c72d616cf1694f4
Author: ezhuravl <ez...@gridgain.com>
AuthorDate: Fri Apr 12 18:28:33 2019 +0300
IGNITE-11696 Add JMX metrics for PME execution time - Fixes #6420.
Signed-off-by: Alexey Goncharuk <al...@gmail.com>
---
.../org/apache/ignite/cluster/ClusterMetrics.java | 7 +++++
.../ClusterLocalNodeMetricsMXBeanImpl.java | 5 ++++
.../ignite/internal/ClusterMetricsMXBeanImpl.java | 5 ++++
.../ignite/internal/ClusterMetricsSnapshot.java | 30 +++++++++++++++++++++-
.../managers/discovery/ClusterMetricsImpl.java | 11 ++++++++
.../preloader/GridDhtPartitionsExchangeFuture.java | 7 +++++
.../apache/ignite/mxbean/ClusterMetricsMXBean.java | 4 +++
.../ClusterMetricsSnapshotSerializeSelfTest.java | 4 ++-
.../ApiParity/ClusterMetricsParityTest.cs | 3 ++-
9 files changed, 73 insertions(+), 3 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/cluster/ClusterMetrics.java b/modules/core/src/main/java/org/apache/ignite/cluster/ClusterMetrics.java
index 74e98b8..751e628 100644
--- a/modules/core/src/main/java/org/apache/ignite/cluster/ClusterMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/cluster/ClusterMetrics.java
@@ -694,4 +694,11 @@ public interface ClusterMetrics {
* @return Total number of nodes.
*/
public int getTotalNodes();
+
+ /**
+ * Gets execution duration for current partition map exchange in milliseconds.
+ *
+ * @return Gets execution duration for current partition map exchange in milliseconds. {@code 0} if there is no running PME.
+ */
+ public long getCurrentPmeDuration();
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/ClusterLocalNodeMetricsMXBeanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/ClusterLocalNodeMetricsMXBeanImpl.java
index eed501a..c3bcf80 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/ClusterLocalNodeMetricsMXBeanImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/ClusterLocalNodeMetricsMXBeanImpl.java
@@ -335,6 +335,11 @@ public class ClusterLocalNodeMetricsMXBeanImpl implements ClusterMetricsMXBean {
}
/** {@inheritDoc} */
+ @Override public long getCurrentPmeDuration() {
+ return node.metrics().getCurrentPmeDuration();
+ }
+
+ /** {@inheritDoc} */
@Override public int getTotalBaselineNodes() {
if (!node.isClient() && !node.isDaemon()) {
List<? extends BaselineNode> baselineNodes = discoMgr.baselineNodes(discoMgr.topologyVersionEx());
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/ClusterMetricsMXBeanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/ClusterMetricsMXBeanImpl.java
index 1efb590..316ea71 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/ClusterMetricsMXBeanImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/ClusterMetricsMXBeanImpl.java
@@ -362,6 +362,11 @@ public class ClusterMetricsMXBeanImpl implements ClusterMetricsMXBean {
}
/** {@inheritDoc} */
+ @Override public long getCurrentPmeDuration() {
+ return metrics().getCurrentPmeDuration();
+ }
+
+ /** {@inheritDoc} */
@Override public int getTotalBaselineNodes() {
Collection<BaselineNode> baselineNodes = cluster.ignite().cluster().currentBaselineTopology();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/ClusterMetricsSnapshot.java b/modules/core/src/main/java/org/apache/ignite/internal/ClusterMetricsSnapshot.java
index 60f26a3..47fea3a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/ClusterMetricsSnapshot.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/ClusterMetricsSnapshot.java
@@ -92,7 +92,8 @@ public class ClusterMetricsSnapshot implements ClusterMetrics {
8/*received bytes count*/ +
4/*outbound messages queue size*/ +
4/*total nodes*/ +
- 8/*total jobs execution time*/;
+ 8/*total jobs execution time*/ +
+ 8/*current PME time*/;
/** */
private long lastUpdateTime = -1;
@@ -256,6 +257,9 @@ public class ClusterMetricsSnapshot implements ClusterMetrics {
/** */
private long totalJobsExecTime = -1;
+ /** */
+ private long currentPmeDuration = -1;
+
/**
* Create empty snapshot.
*/
@@ -329,6 +333,7 @@ public class ClusterMetricsSnapshot implements ClusterMetrics {
outMesQueueSize = 0;
heapTotal = 0;
totalNodes = nodes.size();
+ currentPmeDuration = 0;
for (ClusterNode node : nodes) {
ClusterMetrics m = node.metrics();
@@ -405,6 +410,8 @@ public class ClusterMetricsSnapshot implements ClusterMetrics {
outMesQueueSize += m.getOutboundMessagesQueueSize();
avgLoad += m.getCurrentCpuLoad();
+
+ currentPmeDuration = max(currentPmeDuration, m.getCurrentPmeDuration());
}
curJobExecTime /= size;
@@ -960,6 +967,11 @@ public class ClusterMetricsSnapshot implements ClusterMetrics {
return totalNodes;
}
+ /** {@inheritDoc} */
+ @Override public long getCurrentPmeDuration() {
+ return currentPmeDuration;
+ }
+
/**
* Sets available processors.
*
@@ -1194,6 +1206,16 @@ public class ClusterMetricsSnapshot implements ClusterMetrics {
this.totalNodes = totalNodes;
}
+
+ /**
+ * Sets execution duration for current partition map exchange.
+ *
+ * @param currentPmeDuration Execution duration for current partition map exchange.
+ */
+ public void setCurrentPmeDuration(long currentPmeDuration) {
+ this.currentPmeDuration = currentPmeDuration;
+ }
+
/**
* @param neighborhood Cluster neighborhood.
* @return CPU count.
@@ -1346,6 +1368,7 @@ public class ClusterMetricsSnapshot implements ClusterMetrics {
buf.putInt(metrics.getOutboundMessagesQueueSize());
buf.putInt(metrics.getTotalNodes());
buf.putLong(metrics.getTotalJobsExecutionTime());
+ buf.putLong(metrics.getCurrentPmeDuration());
assert !buf.hasRemaining() : "Invalid metrics size [expected=" + METRICS_SIZE + ", actual="
+ (buf.position() - off) + ']';
@@ -1428,6 +1451,11 @@ public class ClusterMetricsSnapshot implements ClusterMetrics {
else
metrics.setTotalJobsExecutionTime(0);
+ if (buf.remaining() >= 8)
+ metrics.setCurrentPmeDuration(buf.getLong());
+ else
+ metrics.setCurrentPmeDuration(0);
+
return metrics;
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/ClusterMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/ClusterMetricsImpl.java
index 4138e641..5d8138a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/ClusterMetricsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/ClusterMetricsImpl.java
@@ -18,9 +18,12 @@
package org.apache.ignite.internal.managers.discovery;
import java.util.Collection;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
import org.apache.ignite.cluster.ClusterMetrics;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
+import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture;
import org.apache.ignite.internal.processors.jobmetrics.GridJobMetrics;
import org.apache.ignite.internal.util.typedef.internal.U;
@@ -351,6 +354,14 @@ public class ClusterMetricsImpl implements ClusterMetrics {
return 1;
}
+ /** {@inheritDoc} */
+ @Override public long getCurrentPmeDuration() {
+ GridDhtPartitionsExchangeFuture future = ctx.cache().context().exchange().lastTopologyFuture();
+
+ return (future == null || future.isDone()) ?
+ 0 : TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - future.getStartTime());
+ }
+
/**
* Job metrics
*/
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
index ab17e85..8837de2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
@@ -544,6 +544,13 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte
}
/**
+ * @return Start time in nanoseconds.
+ */
+ public long getStartTime() {
+ return startTime;
+ }
+
+ /**
* @return {@code True}
*/
public boolean onAdded() {
diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/ClusterMetricsMXBean.java b/modules/core/src/main/java/org/apache/ignite/mxbean/ClusterMetricsMXBean.java
index ffb4080..5dd5ebc 100644
--- a/modules/core/src/main/java/org/apache/ignite/mxbean/ClusterMetricsMXBean.java
+++ b/modules/core/src/main/java/org/apache/ignite/mxbean/ClusterMetricsMXBean.java
@@ -257,6 +257,10 @@ public interface ClusterMetricsMXBean extends ClusterMetrics {
@Override @MXBeanDescription("Total number of nodes.")
public int getTotalNodes();
+ /** {@inheritDoc} */
+ @Override @MXBeanDescription("Current PME duration in milliseconds.")
+ public long getCurrentPmeDuration();
+
/**
* Get count of total baseline nodes.
*
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeSelfTest.java
index 70379f1..6970f8e 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeSelfTest.java
@@ -149,6 +149,7 @@ public class ClusterMetricsSnapshotSerializeSelfTest extends GridCommonAbstractT
metrics.setHeapMemoryTotal(48);
metrics.setTotalNodes(49);
metrics.setTotalJobsExecutionTime(50);
+ metrics.setCurrentPmeDuration(51);
return metrics;
}
@@ -206,6 +207,7 @@ public class ClusterMetricsSnapshotSerializeSelfTest extends GridCommonAbstractT
obj.getNonHeapMemoryTotal() == obj1.getNonHeapMemoryTotal() &&
obj.getHeapMemoryTotal() == obj1.getHeapMemoryTotal() &&
obj.getTotalNodes() == obj1.getTotalNodes() &&
- obj.getTotalJobsExecutionTime() == obj1.getTotalJobsExecutionTime();
+ obj.getTotalJobsExecutionTime() == obj1.getTotalJobsExecutionTime() &&
+ obj.getCurrentPmeDuration() == obj1.getCurrentPmeDuration();
}
}
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ClusterMetricsParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ClusterMetricsParityTest.cs
index bb0b3cb..21160c1 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ClusterMetricsParityTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ClusterMetricsParityTest.cs
@@ -29,7 +29,8 @@ namespace Apache.Ignite.Core.Tests.ApiParity
private static readonly string[] MissingProperties =
{
// IGNITE-7127
- "TotalJobsExecutionTime"
+ "TotalJobsExecutionTime",
+ "CurrentPmeDuration"
};
/// <summary>