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()

Reply via email to