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 <ezhurav...@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 <alexey.goncha...@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>