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;
 
 /**