This is an automated email from the ASF dual-hosted git repository.
nizhikov 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 054b791 IGNITE-13354 Add ClusterMetrics to the new framework (#8150)
054b791 is described below
commit 054b7916261d146f8c3a08fb5bcad012a9cede6e
Author: Nikita Amelchev <[email protected]>
AuthorDate: Mon Aug 17 18:23:15 2020 +0300
IGNITE-13354 Add ClusterMetrics to the new framework (#8150)
---
.../ignite/internal/ClusterMetricsMXBeanImpl.java | 60 ++++++++++++----------
.../org/apache/ignite/internal/IgniteKernal.java | 2 +
.../internal/managers/IgniteMBeansManager.java | 2 +-
.../processors/cluster/ClusterProcessor.java | 41 +++++++++++++++
.../ClusterBaselineNodesMetricsSelfTest.java | 22 ++++++++
5 files changed, 99 insertions(+), 28 deletions(-)
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 316ea71..3828570 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
@@ -18,18 +18,23 @@
package org.apache.ignite.internal;
import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;
-import org.apache.ignite.cluster.BaselineNode;
import org.apache.ignite.cluster.ClusterGroup;
import org.apache.ignite.cluster.ClusterMetrics;
import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.internal.processors.metric.MetricRegistry;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.mxbean.ClusterMetricsMXBean;
+import org.apache.ignite.spi.metric.IntMetric;
+
+import static
org.apache.ignite.internal.processors.cluster.ClusterProcessor.ACTIVE_BASELINE_NODES;
+import static
org.apache.ignite.internal.processors.cluster.ClusterProcessor.TOTAL_BASELINE_NODES;
+import static
org.apache.ignite.internal.processors.cluster.ClusterProcessor.TOTAL_CLIENT_NODES;
+import static
org.apache.ignite.internal.processors.cluster.ClusterProcessor.TOTAL_SERVER_NODES;
+import static
org.apache.ignite.internal.processors.metric.GridMetricManager.CLUSTER_METRICS;
/**
* Cluster metrics MBean.
@@ -47,13 +52,33 @@ public class ClusterMetricsMXBeanImpl implements
ClusterMetricsMXBean {
/** Cluster metrics update mutex. */
private final Object clusterMetricsMux = new Object();
+ /** Total server nodes count metric. */
+ private final IntMetric srvNodes;
+
+ /** Total client nodes count metric. */
+ private final IntMetric clientNodes;
+
+ /** Total baseline nodes count metric. */
+ private final IntMetric bltNodes;
+
+ /** Active baseline nodes count metric. */
+ private final IntMetric activeBltNodes;
+
/**
* @param cluster Cluster group to manage.
+ * @param ctx Kernal context.
*/
- public ClusterMetricsMXBeanImpl(ClusterGroup cluster) {
+ public ClusterMetricsMXBeanImpl(ClusterGroup cluster, GridKernalContext
ctx) {
assert cluster != null;
this.cluster = cluster;
+
+ MetricRegistry clusterReg = ctx.metric().registry(CLUSTER_METRICS);
+
+ srvNodes = clusterReg.findMetric(TOTAL_SERVER_NODES);
+ clientNodes = clusterReg.findMetric(TOTAL_CLIENT_NODES);
+ bltNodes = clusterReg.findMetric(TOTAL_BASELINE_NODES);
+ activeBltNodes = clusterReg.findMetric(ACTIVE_BASELINE_NODES);
}
/**
@@ -368,41 +393,22 @@ public class ClusterMetricsMXBeanImpl implements
ClusterMetricsMXBean {
/** {@inheritDoc} */
@Override public int getTotalBaselineNodes() {
- Collection<BaselineNode> baselineNodes =
cluster.ignite().cluster().currentBaselineTopology();
-
- return baselineNodes != null ? baselineNodes.size() : 0;
+ return bltNodes.value();
}
/** {@inheritDoc} */
@Override public int getActiveBaselineNodes() {
- Collection<BaselineNode> baselineNodes =
cluster.ignite().cluster().currentBaselineTopology();
-
- if (baselineNodes != null && !baselineNodes.isEmpty()) {
- Set<Object> bltIds = new HashSet<>(baselineNodes.size());
-
- for (BaselineNode baselineNode : baselineNodes)
- bltIds.add(baselineNode.consistentId());
-
- int count = 0;
-
- for (ClusterNode node : cluster.forServers().nodes())
- if (bltIds.contains(node.consistentId()))
- count++;
-
- return count;
- }
-
- return 0;
+ return activeBltNodes.value();
}
/** {@inheritDoc} */
@Override public int getTotalServerNodes() {
- return cluster.forServers().nodes().size();
+ return srvNodes.value();
}
/** {@inheritDoc} */
@Override public int getTotalClientNodes() {
- return cluster.forClients().nodes().size();
+ return clientNodes.value();
}
/** {@inheritDoc} */
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index 9af5735..3e0595a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -1352,6 +1352,8 @@ public class IgniteKernal implements IgniteEx,
IgniteMXBean, Externalizable {
registerMetrics();
+ ctx.cluster().registerMetrics();
+
// Register MBeans.
mBeansMgr.registerAllMBeans(utilityCachePool, execSvc, svcExecSvc,
sysExecSvc, stripedExecSvc, p2pExecSvc,
mgmtExecSvc, dataStreamExecSvc, restExecSvc, affExecSvc,
idxExecSvc, callbackExecSvc,
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/managers/IgniteMBeansManager.java
b/modules/core/src/main/java/org/apache/ignite/internal/managers/IgniteMBeansManager.java
index 618a4e2..43b5fef 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/managers/IgniteMBeansManager.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/managers/IgniteMBeansManager.java
@@ -142,7 +142,7 @@ public class IgniteMBeansManager {
// Metrics
ClusterMetricsMXBean locMetricsBean = new
ClusterLocalNodeMetricsMXBeanImpl(ctx.discovery());
registerMBean("Kernal", locMetricsBean.getClass().getSimpleName(),
locMetricsBean, ClusterMetricsMXBean.class);
- ClusterMetricsMXBean metricsBean = new
ClusterMetricsMXBeanImpl(kernal.cluster());
+ ClusterMetricsMXBean metricsBean = new
ClusterMetricsMXBeanImpl(kernal.cluster(), ctx);
registerMBean("Kernal", metricsBean.getClass().getSimpleName(),
metricsBean, ClusterMetricsMXBean.class);
// Transaction metrics
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
index 0b37613..a144971 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
@@ -56,6 +56,7 @@ import
org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import
org.apache.ignite.internal.processors.metastorage.DistributedMetaStorage;
import
org.apache.ignite.internal.processors.metastorage.DistributedMetastorageLifecycleListener;
import
org.apache.ignite.internal.processors.metastorage.ReadableDistributedMetaStorage;
+import org.apache.ignite.internal.processors.metric.MetricRegistry;
import
org.apache.ignite.internal.processors.subscription.GridInternalSubscriptionProcessor;
import org.apache.ignite.internal.processors.timeout.GridTimeoutObject;
import org.apache.ignite.internal.util.GridTimerTask;
@@ -64,6 +65,7 @@ import
org.apache.ignite.internal.util.future.GridFutureAdapter;
import org.apache.ignite.internal.util.future.IgniteFinishedFutureImpl;
import org.apache.ignite.internal.util.tostring.GridToStringExclude;
import org.apache.ignite.internal.util.typedef.CI1;
+import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.LT;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
@@ -89,6 +91,7 @@ import static
org.apache.ignite.internal.GridComponent.DiscoveryDataExchangeType
import static org.apache.ignite.internal.GridTopic.TOPIC_INTERNAL_DIAGNOSTIC;
import static org.apache.ignite.internal.GridTopic.TOPIC_METRICS;
import static org.apache.ignite.internal.IgniteVersionUtils.VER_STR;
+import static
org.apache.ignite.internal.processors.metric.GridMetricManager.CLUSTER_METRICS;
/**
*
@@ -110,6 +113,18 @@ public class ClusterProcessor extends GridProcessorAdapter
implements Distribute
/** Periodic version check delay. */
private static final long PERIODIC_VER_CHECK_CONN_TIMEOUT = 10 * 1000; //
10 seconds.
+ /** Total server nodes count metric name. */
+ public static final String TOTAL_SERVER_NODES = "TotalServerNodes";
+
+ /** Total client nodes count metric name. */
+ public static final String TOTAL_CLIENT_NODES = "TotalClientNodes";
+
+ /** Total baseline nodes count metric name. */
+ public static final String TOTAL_BASELINE_NODES = "TotalBaselineNodes";
+
+ /** Active baseline nodes count metric name. */
+ public static final String ACTIVE_BASELINE_NODES = "ActiveBaselineNodes";
+
/** */
private IgniteClusterImpl cluster;
@@ -653,6 +668,32 @@ public class ClusterProcessor extends GridProcessorAdapter
implements Distribute
ctx.io().removeMessageListener(TOPIC_INTERNAL_DIAGNOSTIC);
}
+ /** Registers cluster metrics. */
+ public void registerMetrics() {
+ MetricRegistry reg = ctx.metric().registry(CLUSTER_METRICS);
+
+ reg.register(TOTAL_SERVER_NODES,
+ () -> ctx.isStopping() || ctx.clientDisconnected() ? -1 :
cluster.forServers().nodes().size(),
+ "Server nodes count.");
+
+ reg.register(TOTAL_CLIENT_NODES,
+ () -> ctx.isStopping() || ctx.clientDisconnected() ? -1 :
cluster.forClients().nodes().size(),
+ "Client nodes count.");
+
+ reg.register(TOTAL_BASELINE_NODES,
+ () -> ctx.isStopping() || ctx.clientDisconnected() ? -1 :
F.size(cluster.currentBaselineTopology()),
+ "Total baseline nodes count.");
+
+ reg.register(ACTIVE_BASELINE_NODES, () -> {
+ if (ctx.isStopping() || ctx.clientDisconnected())
+ return -1;
+
+ Collection<Object> srvIds =
F.nodeConsistentIds(cluster.forServers().nodes());
+
+ return F.size(cluster.currentBaselineTopology(), node ->
srvIds.contains(node.consistentId()));
+ }, "Active baseline nodes count.");
+ }
+
/**
* @param sndNodeId Sender node ID.
* @param msg Message.
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/ClusterBaselineNodesMetricsSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/ClusterBaselineNodesMetricsSelfTest.java
index 9812472..37fa4fc 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/ClusterBaselineNodesMetricsSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/ClusterBaselineNodesMetricsSelfTest.java
@@ -23,11 +23,19 @@ import
org.apache.ignite.configuration.DataRegionConfiguration;
import org.apache.ignite.configuration.DataStorageConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.configuration.WALMode;
+import org.apache.ignite.internal.processors.metric.MetricRegistry;
import org.apache.ignite.mxbean.ClusterMetricsMXBean;
+import org.apache.ignite.spi.metric.IntMetric;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.testframework.junits.common.GridCommonTest;
import org.junit.Test;
+import static
org.apache.ignite.internal.processors.cluster.ClusterProcessor.ACTIVE_BASELINE_NODES;
+import static
org.apache.ignite.internal.processors.cluster.ClusterProcessor.TOTAL_BASELINE_NODES;
+import static
org.apache.ignite.internal.processors.cluster.ClusterProcessor.TOTAL_CLIENT_NODES;
+import static
org.apache.ignite.internal.processors.cluster.ClusterProcessor.TOTAL_SERVER_NODES;
+import static
org.apache.ignite.internal.processors.metric.GridMetricManager.CLUSTER_METRICS;
+
/**
* Baseline nodes metrics self test.
*/
@@ -52,6 +60,8 @@ public class ClusterBaselineNodesMetricsSelfTest extends
GridCommonAbstractTest
// Cluster metrics.
ClusterMetricsMXBean mxBeanCluster = mxBean(0,
ClusterMetricsMXBeanImpl.class);
+ MetricRegistry mreg =
ignite0.context().metric().registry(CLUSTER_METRICS);
+
ignite0.cluster().active(true);
// Added 2 server nodes to baseline.
@@ -69,9 +79,13 @@ public class ClusterBaselineNodesMetricsSelfTest extends
GridCommonAbstractTest
log.info(String.format(">>> State #0: topology version = %d",
ignite0.cluster().topologyVersion()));
assertEquals(3, mxBeanCluster.getTotalServerNodes());
+ assertEquals(3,
mreg.<IntMetric>findMetric(TOTAL_SERVER_NODES).value());
assertEquals(1, mxBeanCluster.getTotalClientNodes());
+ assertEquals(1,
mreg.<IntMetric>findMetric(TOTAL_CLIENT_NODES).value());
assertEquals(2, mxBeanCluster.getTotalBaselineNodes());
+ assertEquals(2,
mreg.<IntMetric>findMetric(TOTAL_BASELINE_NODES).value());
assertEquals(2, mxBeanCluster.getActiveBaselineNodes());
+ assertEquals(2,
mreg.<IntMetric>findMetric(ACTIVE_BASELINE_NODES).value());
assertEquals(2, (baselineNodes =
ignite0.cluster().currentBaselineTopology()) != null
? baselineNodes.size()
: 0);
@@ -82,9 +96,13 @@ public class ClusterBaselineNodesMetricsSelfTest extends
GridCommonAbstractTest
log.info(String.format(">>> State #1: topology version = %d",
ignite0.cluster().topologyVersion()));
assertEquals(2, mxBeanCluster.getTotalServerNodes());
+ assertEquals(2,
mreg.<IntMetric>findMetric(TOTAL_SERVER_NODES).value());
assertEquals(1, mxBeanCluster.getTotalClientNodes());
+ assertEquals(1,
mreg.<IntMetric>findMetric(TOTAL_CLIENT_NODES).value());
assertEquals(2, mxBeanCluster.getTotalBaselineNodes());
+ assertEquals(2,
mreg.<IntMetric>findMetric(TOTAL_BASELINE_NODES).value());
assertEquals(1, mxBeanCluster.getActiveBaselineNodes());
+ assertEquals(1,
mreg.<IntMetric>findMetric(ACTIVE_BASELINE_NODES).value());
assertEquals(2, (baselineNodes =
ignite0.cluster().currentBaselineTopology()) != null
? baselineNodes.size()
: 0);
@@ -97,9 +115,13 @@ public class ClusterBaselineNodesMetricsSelfTest extends
GridCommonAbstractTest
log.info(String.format(">>> State #2: topology version = %d",
ignite0.cluster().topologyVersion()));
assertEquals(3, mxBeanCluster.getTotalServerNodes());
+ assertEquals(3,
mreg.<IntMetric>findMetric(TOTAL_SERVER_NODES).value());
assertEquals(1, mxBeanCluster.getTotalClientNodes());
+ assertEquals(1,
mreg.<IntMetric>findMetric(TOTAL_CLIENT_NODES).value());
assertEquals(2, mxBeanCluster.getTotalBaselineNodes());
+ assertEquals(2,
mreg.<IntMetric>findMetric(TOTAL_BASELINE_NODES).value());
assertEquals(2, mxBeanCluster.getActiveBaselineNodes());
+ assertEquals(2,
mreg.<IntMetric>findMetric(ACTIVE_BASELINE_NODES).value());
assertEquals(1, mxBeanLocalNode1.getTotalBaselineNodes());
assertEquals(2, (baselineNodes =
ignite0.cluster().currentBaselineTopology()) != null
? baselineNodes.size()