You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2020/11/17 15:19:08 UTC
[ignite] branch master updated: IGNITE-13699 Register
ZookeeperDiscovery metrics to new metrics framework (#8458)
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 1b5d837 IGNITE-13699 Register ZookeeperDiscovery metrics to new metrics framework (#8458)
1b5d837 is described below
commit 1b5d837c9fb5ec4320aca3a7e15ea7b56e34fdfa
Author: Ivan Daschinskiy <iv...@gmail.com>
AuthorDate: Tue Nov 17 18:18:52 2020 +0300
IGNITE-13699 Register ZookeeperDiscovery metrics to new metrics framework (#8458)
---
.../managers/discovery/GridDiscoveryManager.java | 4 +++
.../ignite/spi/discovery/tcp/TcpDiscoverySpi.java | 5 +--
.../discovery/tcp/TcpDiscoverySpiMBeanTest.java | 2 +-
.../spi/discovery/zk/ZookeeperDiscoverySpi.java | 14 ++++++++
.../spi/discovery/zk/internal/ZkRuntimeState.java | 2 +-
.../zk/internal/ZookeeperDiscoveryImpl.java | 32 +++++++++++++-----
.../zk/internal/ZookeeperDiscoveryStatistics.java | 39 +++++++++++++++++-----
.../zk/internal/ZookeeperDiscoveryMiscTest.java | 29 ++++++++++++++--
8 files changed, 101 insertions(+), 26 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
index 0a8c857..65a331f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
@@ -169,6 +169,7 @@ import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_SHUTDOWN_POLI
import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_USER_NAME;
import static org.apache.ignite.internal.IgniteVersionUtils.VER;
import static org.apache.ignite.internal.events.DiscoveryCustomEvent.EVT_DISCOVERY_CUSTOM_EVT;
+import static org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
import static org.apache.ignite.internal.processors.security.SecurityUtils.isSecurityCompatibilityMode;
import static org.apache.ignite.plugin.segmentation.SegmentationPolicy.NOOP;
@@ -188,6 +189,9 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
/** @see IgniteSystemProperties#IGNITE_DISCOVERY_HISTORY_SIZE */
public static final int DFLT_DISCOVERY_HISTORY_SIZE = 500;
+ /** Name of the discovery metrics registry. */
+ public static final String DISCO_METRICS = metricName("io", "discovery");
+
/** Predicate filtering out daemon nodes. */
private static final IgnitePredicate<ClusterNode> FILTER_NOT_DAEMON = new P1<ClusterNode>() {
@Override public boolean apply(ClusterNode n) {
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index c18715e..8a2b4c6 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -120,7 +120,7 @@ import org.jetbrains.annotations.TestOnly;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_CONSISTENT_ID_BY_HOST_WITHOUT_PORT;
import static org.apache.ignite.IgniteSystemProperties.getBoolean;
import static org.apache.ignite.failure.FailureType.CRITICAL_ERROR;
-import static org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
+import static org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.DISCO_METRICS;
/**
* Discovery SPI implementation that uses TCP/IP for node discovery.
@@ -307,9 +307,6 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements IgniteDiscovery
/** @see IgniteSystemProperties#IGNITE_DISCOVERY_METRICS_QNT_WARN */
public static final int DFLT_DISCOVERY_METRICS_QNT_WARN = 500;
- /** Name of the discovery metrics registry. */
- public static final String DISCO_METRICS = metricName("io", "discovery");
-
/** Ssl message pattern for StreamCorruptedException. */
private static Pattern sslMsgPattern = Pattern.compile("invalid stream header: 150\\d0\\d00");
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiMBeanTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiMBeanTest.java
index dd935a9..be2f147 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiMBeanTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiMBeanTest.java
@@ -39,7 +39,7 @@ import org.junit.Test;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static org.apache.ignite.events.EventType.EVT_NODE_SEGMENTED;
-import static org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.DISCO_METRICS;
+import static org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.DISCO_METRICS;
import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
/**
diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpi.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpi.java
index 3de8df6..ec2dc80 100644
--- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpi.java
+++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/ZookeeperDiscoverySpi.java
@@ -31,6 +31,7 @@ import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.internal.IgniteFeatures;
import org.apache.ignite.internal.managers.discovery.IgniteDiscoverySpi;
import org.apache.ignite.internal.managers.discovery.IgniteDiscoverySpiInternalListener;
+import org.apache.ignite.internal.processors.metric.MetricRegistry;
import org.apache.ignite.internal.util.tostring.GridToStringExclude;
import org.apache.ignite.internal.util.tostring.GridToStringInclude;
import org.apache.ignite.internal.util.typedef.internal.A;
@@ -41,6 +42,7 @@ import org.apache.ignite.lang.IgniteProductVersion;
import org.apache.ignite.resources.LoggerResource;
import org.apache.ignite.spi.IgniteSpiAdapter;
import org.apache.ignite.spi.IgniteSpiConfiguration;
+import org.apache.ignite.spi.IgniteSpiContext;
import org.apache.ignite.spi.IgniteSpiException;
import org.apache.ignite.spi.IgniteSpiMBeanAdapter;
import org.apache.ignite.spi.IgniteSpiMultipleInstancesSupport;
@@ -62,6 +64,7 @@ import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_CONSISTENT_ID_BY_HOST_WITHOUT_PORT;
import static org.apache.ignite.IgniteSystemProperties.getBoolean;
+import static org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.DISCO_METRICS;
/**
* Zookeeper Discovery Spi.
@@ -490,6 +493,17 @@ public class ZookeeperDiscoverySpi extends IgniteSpiAdapter implements IgniteDis
}
/** {@inheritDoc} */
+ @Override protected void onContextInitialized0(IgniteSpiContext spiCtx) throws IgniteSpiException {
+ super.onContextInitialized0(spiCtx);
+
+ MetricRegistry discoReg = (MetricRegistry)getSpiContext().getOrCreateMetricRegistry(DISCO_METRICS);
+
+ stats.registerMetrics(discoReg);
+
+ discoReg.register("Coordinator", () -> impl.getCoordinator(), UUID.class, "Coordinator ID");
+ }
+
+ /** {@inheritDoc} */
@Override public void setInternalListener(IgniteDiscoverySpiInternalListener lsnr) {
if (impl != null)
impl.internalLsnr = lsnr;
diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZkRuntimeState.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZkRuntimeState.java
index 0aac6db..547c185 100644
--- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZkRuntimeState.java
+++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZkRuntimeState.java
@@ -39,7 +39,7 @@ class ZkRuntimeState {
final boolean reconnect;
/** */
- ZookeeperClient zkClient;
+ volatile ZookeeperClient zkClient;
/** */
long internalOrder;
diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java
index d9d56ae..bdd37d1 100644
--- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java
+++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java
@@ -192,7 +192,7 @@ public class ZookeeperDiscoveryImpl {
private IgniteThreadPoolExecutor utilityPool;
/** */
- private ZkRuntimeState rtState;
+ private volatile ZkRuntimeState rtState;
/** */
private volatile ConnectionState connState = ConnectionState.STARTED;
@@ -297,7 +297,9 @@ public class ZookeeperDiscoveryImpl {
@Nullable public ZookeeperClusterNode node(UUID nodeId) {
assert nodeId != null;
- return rtState.top.nodesById.get(nodeId);
+ ZkRuntimeState rtState0 = rtState;
+
+ return rtState0 != null ? rtState0.top.nodesById.get(nodeId) : null;
}
/**
@@ -307,7 +309,9 @@ public class ZookeeperDiscoveryImpl {
@Nullable public ZookeeperClusterNode node(long nodeOrder) {
assert nodeOrder > 0 : nodeOrder;
- return rtState.top.nodesByOrder.get(nodeOrder);
+ ZkRuntimeState rtState0 = rtState;
+
+ return rtState0 != null ? rtState.top.nodesByOrder.get(nodeOrder) : null;
}
/**
@@ -2298,8 +2302,6 @@ public class ZookeeperDiscoveryImpl {
joinCtx.addJoinedNode(nodeEvtData, commonData);
rtState.evtsData.onNodeJoin(joinedNode);
-
- stats.onNodeJoined();
}
/**
@@ -2817,9 +2819,12 @@ public class ZookeeperDiscoveryImpl {
throw e;
}
- if (rtState.joined)
+ if (rtState.joined) {
rtState.evtsData = evtsData;
+ stats.onTopologyChanged(rtState.evtsData.topVer);
+ }
+
if (rtState.crd)
handleProcessedEvents("procEvt");
else
@@ -3552,6 +3557,8 @@ public class ZookeeperDiscoveryImpl {
null
)
).get();
+
+ stats.onNodeJoined();
}
/**
@@ -4630,7 +4637,12 @@ public class ZookeeperDiscoveryImpl {
/** */
public UUID getCoordinator() {
- return rtState.top.nodesByOrder.values().stream()
+ ZkRuntimeState rtState0 = rtState;
+
+ if (rtState0 == null)
+ return null;
+
+ return rtState0.top.nodesByOrder.values().stream()
.filter(n -> !n.isClient() && !n.isDaemon())
.map(ZookeeperClusterNode::id)
.findFirst()
@@ -4639,12 +4651,14 @@ public class ZookeeperDiscoveryImpl {
/** */
public String getSpiState() {
- return rtState.zkClient.state();
+ return connState.toString();
}
/** */
public String getZkSessionId() {
- if (rtState.zkClient != null && rtState.zkClient.zk() != null)
+ ZkRuntimeState rtState0 = rtState;
+
+ if (rtState0 != null && rtState0.zkClient != null)
return Long.toHexString(rtState.zkClient.zk().getSessionId());
else
return null;
diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryStatistics.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryStatistics.java
index 21b62c4..faf00d6 100644
--- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryStatistics.java
+++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryStatistics.java
@@ -16,7 +16,9 @@
*/
package org.apache.ignite.spi.discovery.zk.internal;
-import java.util.concurrent.atomic.LongAdder;
+import org.apache.ignite.internal.processors.metric.MetricRegistry;
+import org.apache.ignite.internal.processors.metric.impl.AtomicLongMetric;
+import org.apache.ignite.internal.processors.metric.impl.LongAdderMetric;
import org.apache.ignite.internal.util.typedef.internal.S;
/**
@@ -24,35 +26,49 @@ import org.apache.ignite.internal.util.typedef.internal.S;
*/
public class ZookeeperDiscoveryStatistics {
/** */
- private final LongAdder joinedNodesCnt = new LongAdder();
+ private final LongAdderMetric joinedNodesCnt = new LongAdderMetric("JoinedNodes", "Joined nodes count");
/** */
- private final LongAdder failedNodesCnt = new LongAdder();
+ private final LongAdderMetric failedNodesCnt = new LongAdderMetric("FailedNodes", "Failed nodes count");
/** */
- private final LongAdder leftNodesCnt = new LongAdder();
+ private final LongAdderMetric leftNodesCnt = new LongAdderMetric("LeftNodes", "Left nodes count");
/** Communication error count. */
- private final LongAdder commErrCnt = new LongAdder();
+ private final LongAdderMetric commErrCnt = new LongAdderMetric("CommunicationErrors", "Communication errors count");
+
+ /** Current topology version */
+ private final AtomicLongMetric topVer = new AtomicLongMetric("CurrentTopologyVersion", "Current topology version");
+
+ /**
+ * @param discoReg Discovery metric registry.
+ */
+ public void registerMetrics(MetricRegistry discoReg) {
+ discoReg.register(joinedNodesCnt);
+ discoReg.register(failedNodesCnt);
+ discoReg.register(leftNodesCnt);
+ discoReg.register(commErrCnt);
+ discoReg.register(topVer);
+ }
/** */
public long joinedNodesCnt() {
- return joinedNodesCnt.longValue();
+ return joinedNodesCnt.value();
}
/** */
public long failedNodesCnt() {
- return failedNodesCnt.longValue();
+ return failedNodesCnt.value();
}
/** */
public long leftNodesCnt() {
- return leftNodesCnt.longValue();
+ return leftNodesCnt.value();
}
/** */
public long commErrorCount() {
- return commErrCnt.longValue();
+ return commErrCnt.value();
}
/** */
@@ -75,6 +91,11 @@ public class ZookeeperDiscoveryStatistics {
commErrCnt.increment();
}
+ /** */
+ public void onTopologyChanged(long topVer) {
+ this.topVer.value(topVer);
+ }
+
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(ZookeeperDiscoveryStatistics.class, this);
diff --git a/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryMiscTest.java b/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryMiscTest.java
index f271bad..57aae67 100644
--- a/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryMiscTest.java
+++ b/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryMiscTest.java
@@ -33,6 +33,7 @@ import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.SecurityCredentialsAttrFilterPredicate;
+import org.apache.ignite.internal.processors.metric.MetricRegistry;
import org.apache.ignite.internal.processors.security.SecurityContext;
import org.apache.ignite.internal.util.lang.gridfunc.PredicateMapView;
import org.apache.ignite.internal.util.typedef.G;
@@ -47,11 +48,14 @@ import org.apache.ignite.spi.IgniteSpiException;
import org.apache.ignite.spi.discovery.DiscoverySpiNodeAuthenticator;
import org.apache.ignite.spi.discovery.zk.ZookeeperDiscoverySpi;
import org.apache.ignite.spi.discovery.zk.ZookeeperDiscoverySpiMBean;
+import org.apache.ignite.spi.metric.LongMetric;
+import org.apache.ignite.spi.metric.ObjectMetric;
import org.apache.ignite.testframework.GridTestUtils;
import org.junit.Test;
import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_IGNITE_INSTANCE_NAME;
import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_SECURITY_SUBJECT_V2;
+import static org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.DISCO_METRICS;
/**
* Tests for Zookeeper SPI discovery.
@@ -217,23 +221,44 @@ public class ZookeeperDiscoveryMiscTest extends ZookeeperDiscoverySpiTestBase {
*/
@Test
public void testMbean() throws Exception {
- startGrids(3);
+ int cnt = 3;
+
+ startGrids(cnt);
UUID crdNodeId = grid(0).localNode().id();
try {
- for (int i = 0; i < 3; i++) {
+ for (int i = 0; i < cnt; i++) {
IgniteEx grid = grid(i);
ZookeeperDiscoverySpiMBean bean = getMxBean(grid.context().igniteInstanceName(), "SPIs",
ZookeeperDiscoverySpi.class, ZookeeperDiscoverySpiMBean.class);
+ MetricRegistry discoReg = grid.context().metric().registry(DISCO_METRICS);
+
assertNotNull(bean);
assertEquals(String.valueOf(grid.cluster().node(crdNodeId)), bean.getCoordinatorNodeFormatted());
assertEquals(String.valueOf(grid.cluster().localNode()), bean.getLocalNodeFormatted());
assertEquals(zkCluster.getConnectString(), bean.getZkConnectionString());
assertEquals((long)grid.configuration().getFailureDetectionTimeout(), bean.getZkSessionTimeout());
+
+ assertEquals(grid.cluster().topologyVersion(),
+ discoReg.<LongMetric>findMetric("CurrentTopologyVersion").value());
+
+ assertEquals(grid.cluster().node(crdNodeId).id(),
+ discoReg.<ObjectMetric<UUID>>findMetric("Coordinator").value());
+
+ assertEquals(cnt - i - 1, bean.getNodesJoined());
+ assertEquals(cnt - i - 1, discoReg.<LongMetric>findMetric("JoinedNodes").value());
+
+ Arrays.asList("LeftNodes", "FailedNodes", "CommunicationErrors").forEach(name -> {
+ assertEquals(0, discoReg.<LongMetric>findMetric(name).value());
+ });
+
+ assertEquals(0, bean.getNodesLeft());
+ assertEquals(0, bean.getNodesFailed());
+ assertEquals(0, bean.getCommErrorProcNum());
}
}
finally {