You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by mp...@apache.org on 2023/02/03 08:17:05 UTC
[ignite] branch master updated: IGNITE-17554 Fixed the metric for the number of active client sessions. (#10503)
This is an automated email from the ASF dual-hosted git repository.
mpetrov 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 fc181de4915 IGNITE-17554 Fixed the metric for the number of active client sessions. (#10503)
fc181de4915 is described below
commit fc181de49157505acf13a2c7441a8681accfb631
Author: Mikhail Petrov <32...@users.noreply.github.com>
AuthorDate: Fri Feb 3 11:16:54 2023 +0300
IGNITE-17554 Fixed the metric for the number of active client sessions. (#10503)
---
.../processors/odbc/ClientListenerMetrics.java | 28 +++------------
.../processors/odbc/ClientListenerNioListener.java | 8 ++---
.../processors/odbc/ClientListenerProcessor.java | 40 ++++++++++++++++++++--
.../processors/odbc/ClientListenerMetricsTest.java | 2 +-
4 files changed, 47 insertions(+), 31 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerMetrics.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerMetrics.java
index ee9615628ab..d9c614cff58 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerMetrics.java
@@ -22,6 +22,7 @@ import org.apache.ignite.internal.processors.metric.impl.IntMetricImpl;
import org.apache.ignite.internal.processors.metric.impl.MetricUtils;
import static org.apache.ignite.internal.processors.metric.GridMetricManager.CLIENT_CONNECTOR_METRICS;
+import static org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.CLI_TYPES;
import static org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.JDBC_CLIENT;
import static org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.ODBC_CLIENT;
import static org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.THIN_CLIENT;
@@ -42,9 +43,6 @@ public class ClientListenerMetrics {
/** Number of successfully established sessions. */
public static final String METRIC_ACEPTED = "AcceptedSessions";
- /** Number of active sessions. */
- public static final String METRIC_ACTIVE = "ActiveSessions";
-
/** Rejected by timeout. */
private final IntMetricImpl rejectedTimeout;
@@ -57,9 +55,6 @@ public class ClientListenerMetrics {
/** Connections accepted. */
private final IntMetricImpl[] accepted;
- /** Number of active connections. */
- private final IntMetricImpl[] active;
-
/**
* @param ctx Kernal context.
*/
@@ -74,19 +69,14 @@ public class ClientListenerMetrics {
rejectedTotal = mreg.intMetric(METRIC_REJECTED_TOTAL, "Total number of rejected TCP connections.");
- final byte[] supportedClients = { ODBC_CLIENT, JDBC_CLIENT, THIN_CLIENT };
- accepted = new IntMetricImpl[supportedClients.length];
- active = new IntMetricImpl[supportedClients.length];
+ accepted = new IntMetricImpl[CLI_TYPES.length];
- for (byte clientType : supportedClients) {
+ for (byte clientType : CLI_TYPES) {
String clientLabel = clientTypeLabel(clientType);
String labelAccepted = MetricUtils.metricName(clientLabel, METRIC_ACEPTED);
accepted[clientType] = mreg.intMetric(labelAccepted,
"Number of successfully established sessions for the client type.");
-
- String labelActive = MetricUtils.metricName(clientLabel, METRIC_ACTIVE);
- active[clientType] = mreg.intMetric(labelActive, "Number of active sessions for the client type.");
}
}
@@ -120,16 +110,6 @@ public class ClientListenerMetrics {
*/
public void onHandshakeAccept(byte clientType) {
accepted[clientType].increment();
- active[clientType].increment();
- }
-
- /**
- * Callback invoked when client is disconnected.
- *
- * @param clientType Client type.
- */
- public void onDisconnect(byte clientType) {
- active[clientType].add(-1);
}
/**
@@ -137,7 +117,7 @@ public class ClientListenerMetrics {
* @param clientType Client type.
* @return Label for a client.
*/
- private String clientTypeLabel(byte clientType) {
+ public static String clientTypeLabel(byte clientType) {
switch (clientType) {
case ODBC_CLIENT:
return "odbc";
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerNioListener.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerNioListener.java
index ff575114d10..7ed6296dd07 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerNioListener.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerNioListener.java
@@ -62,6 +62,9 @@ public class ClientListenerNioListener extends GridNioServerListenerAdapter<Clie
/** Thin client handshake code. */
public static final byte THIN_CLIENT = 2;
+ /** Client types. */
+ public static final byte[] CLI_TYPES = {ODBC_CLIENT, JDBC_CLIENT, THIN_CLIENT};
+
/** Connection handshake timeout task. */
public static final int CONN_CTX_HANDSHAKE_TIMEOUT_TASK = GridNioSessionMetaKey.nextUniqueKey();
@@ -131,12 +134,9 @@ public class ClientListenerNioListener extends GridNioServerListenerAdapter<Clie
@Override public void onDisconnected(GridNioSession ses, @Nullable Exception e) {
ClientListenerConnectionContext connCtx = ses.meta(CONN_CTX_META_KEY);
- if (connCtx != null) {
+ if (connCtx != null)
connCtx.onDisconnected();
- metrics.onDisconnect(connCtx.clientType());
- }
-
if (log.isDebugEnabled()) {
if (e == null)
log.debug("Client disconnected: " + ses.remoteAddress());
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java
index 28b70f97cf2..0af5da807f3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java
@@ -39,6 +39,7 @@ import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.managers.systemview.walker.ClientConnectionViewWalker;
import org.apache.ignite.internal.processors.GridProcessorAdapter;
import org.apache.ignite.internal.processors.configuration.distributed.DistributedThinClientConfiguration;
+import org.apache.ignite.internal.processors.metric.MetricRegistry;
import org.apache.ignite.internal.processors.odbc.jdbc.JdbcConnectionContext;
import org.apache.ignite.internal.processors.odbc.odbc.OdbcConnectionContext;
import org.apache.ignite.internal.util.GridSpinBusyLock;
@@ -60,6 +61,8 @@ import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.internal.processors.metric.GridMetricManager.CLIENT_CONNECTOR_METRICS;
import static org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
+import static org.apache.ignite.internal.processors.odbc.ClientListenerMetrics.clientTypeLabel;
+import static org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.CLI_TYPES;
import static org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.CONN_CTX_META_KEY;
/**
@@ -72,6 +75,9 @@ public class ClientListenerProcessor extends GridProcessorAdapter {
/** */
public static final String CLI_CONN_VIEW_DESC = "Client connections";
+ /** */
+ public static final String METRIC_ACTIVE = "ActiveSessions";
+
/** Default client connector configuration. */
public static final ClientConnectorConfiguration DFLT_CLI_CFG = new ClientConnectorConfigurationEx();
@@ -143,6 +149,8 @@ public class ClientListenerProcessor extends GridProcessorAdapter {
int selectorCnt = cliConnCfg.getSelectorCount();
+ MetricRegistry mreg = ctx.metric().registry(CLIENT_CONNECTOR_METRICS);
+
for (int port = cliConnCfg.getPort(); port <= portTo && port <= 65535; port++) {
try {
srv = GridNioServer.<ClientMessage>builder()
@@ -161,7 +169,7 @@ public class ClientListenerProcessor extends GridProcessorAdapter {
.filters(filters)
.directMode(true)
.idleTimeout(idleTimeout > 0 ? idleTimeout : Long.MAX_VALUE)
- .metricRegistry(ctx.metric().registry(CLIENT_CONNECTOR_METRICS))
+ .metricRegistry(mreg)
.build();
ctx.ports().registerPort(port, IgnitePortProtocol.TCP, getClass());
@@ -190,6 +198,8 @@ public class ClientListenerProcessor extends GridProcessorAdapter {
if (!U.IGNITE_MBEANS_DISABLED)
registerMBean();
+ registerClientMetrics(mreg);
+
ctx.systemView().registerView(CLI_CONN_VIEW, CLI_CONN_VIEW_DESC,
new ClientConnectionViewWalker(),
srv.sessions(),
@@ -203,6 +213,32 @@ public class ClientListenerProcessor extends GridProcessorAdapter {
}
}
+ /** @param mreg Metric registry. */
+ private void registerClientMetrics(MetricRegistry mreg) {
+ for (int i = 0; i < CLI_TYPES.length; i++) {
+ byte cliType = CLI_TYPES[i];
+
+ String cliTypeName = clientTypeLabel(cliType);
+
+ mreg.register(
+ metricName(cliTypeName, METRIC_ACTIVE),
+ () -> {
+ int res = 0;
+
+ for (GridNioSession ses : srv.sessions()) {
+ ClientListenerConnectionContext ctx = ses.meta(CONN_CTX_META_KEY);
+
+ if (ctx != null && ctx.clientType() == cliType)
+ ++res;
+ }
+
+ return res;
+ },
+ "Number of active sessions for the " + cliTypeName + " client."
+ );
+ }
+ }
+
/** {@inheritDoc} */
@Override public void onKernalStart(boolean active) throws IgniteCheckedException {
super.onKernalStart(active);
@@ -270,7 +306,7 @@ public class ClientListenerProcessor extends GridProcessorAdapter {
}
@Override public void onMessageReceived(GridNioSession ses, Object msg) throws IgniteCheckedException {
- ClientListenerConnectionContext connCtx = ses.meta(ClientListenerNioListener.CONN_CTX_META_KEY);
+ ClientListenerConnectionContext connCtx = ses.meta(CONN_CTX_META_KEY);
if (connCtx != null && connCtx.parser() != null && connCtx.handler().isCancellationSupported()) {
ClientMessage inMsg;
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/odbc/ClientListenerMetricsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/odbc/ClientListenerMetricsTest.java
index 5a4335f63c6..fa3e93758d1 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/odbc/ClientListenerMetricsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/odbc/ClientListenerMetricsTest.java
@@ -41,10 +41,10 @@ import org.junit.Test;
import static org.apache.ignite.internal.processors.metric.GridMetricManager.CLIENT_CONNECTOR_METRICS;
import static org.apache.ignite.internal.processors.odbc.ClientListenerMetrics.METRIC_ACEPTED;
-import static org.apache.ignite.internal.processors.odbc.ClientListenerMetrics.METRIC_ACTIVE;
import static org.apache.ignite.internal.processors.odbc.ClientListenerMetrics.METRIC_REJECTED_AUTHENTICATION;
import static org.apache.ignite.internal.processors.odbc.ClientListenerMetrics.METRIC_REJECTED_TIMEOUT;
import static org.apache.ignite.internal.processors.odbc.ClientListenerMetrics.METRIC_REJECTED_TOTAL;
+import static org.apache.ignite.internal.processors.odbc.ClientListenerProcessor.METRIC_ACTIVE;
import static org.apache.ignite.ssl.SslContextFactory.DFLT_STORE_TYPE;
/**