Skip to content

Commit b67f2df

Browse files
authored
IGNITE-12211: Client connections system view (apache#6898)
1 parent b31c9dc commit b67f2df

File tree

19 files changed

+380
-12
lines changed

19 files changed

+380
-12
lines changed

modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,8 @@ public void testGetAllView() throws Exception {
333333
"SCHEMAS",
334334
"TABLES",
335335
"TASKS",
336-
"SERVICES"
336+
"SERVICES",
337+
"CLIENT_CONNECTIONS"
337338
));
338339

339340
Set<String> actViews = new HashSet<>();

modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,8 @@ public void testGetAllView() throws Exception {
342342
"SYS.LOCAL_CACHE_GROUPS_IO",
343343
"SYS.LOCAL_SQL_RUNNING_QUERIES",
344344
"SYS.NODE_ATTRIBUTES",
345-
"SYS.TABLES"
345+
"SYS.TABLES",
346+
"SYS.CLIENT_CONNECTIONS"
346347
))
347348
);
348349
}
@@ -754,7 +755,13 @@ public void testGetAllColumns() throws Exception {
754755
"SYS.TASKS.JOB_ID.null.2147483647",
755756
"SYS.TASKS.AFFINITY_PARTITION_ID.null.10",
756757
"SYS.TASKS.TASK_CLASS_NAME.null.2147483647",
757-
"SYS.TASKS.EXEC_NAME.null.2147483647"
758+
"SYS.TASKS.EXEC_NAME.null.2147483647",
759+
"SYS.CLIENT_CONNECTIONS.CONNECTION_ID.null.19",
760+
"SYS.CLIENT_CONNECTIONS.LOCAL_ADDRESS.null.2147483647",
761+
"SYS.CLIENT_CONNECTIONS.REMOTE_ADDRESS.null.2147483647",
762+
"SYS.CLIENT_CONNECTIONS.TYPE.null.2147483647",
763+
"SYS.CLIENT_CONNECTIONS.USER.null.2147483647",
764+
"SYS.CLIENT_CONNECTIONS.VERSION.null.2147483647"
758765
));
759766

760767
Assert.assertEquals(expectedCols, actualSystemCols);

modules/codegen/src/main/java/org/apache/ignite/codegen/SystemViewRowAttributeWalkerGenerator.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.util.function.ObjIntConsumer;
3535
import org.apache.ignite.internal.managers.systemview.walker.Order;
3636
import org.apache.ignite.spi.systemview.jmx.SystemViewMBean;
37+
import org.apache.ignite.spi.systemview.view.ClientConnectionView;
3738
import org.apache.ignite.spi.systemview.view.SystemView;
3839
import org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker;
3940
import org.apache.ignite.spi.systemview.view.CacheGroupView;
@@ -73,6 +74,7 @@ public static void main(String[] args) throws Exception {
7374
gen.generateAndWrite(CacheView.class, DFLT_SRC_DIR);
7475
gen.generateAndWrite(ServiceView.class, DFLT_SRC_DIR);
7576
gen.generateAndWrite(ComputeTaskView.class, DFLT_SRC_DIR);
77+
gen.generateAndWrite(ClientConnectionView.class, DFLT_SRC_DIR);
7678
}
7779

7880
/**
@@ -110,8 +112,8 @@ private <T> Collection<String> generate(Class<T> clazz) {
110112
final List<String> code = new ArrayList<>();
111113
final Set<String> imports = new TreeSet<>();
112114

113-
imports.add("import " + SystemViewRowAttributeWalker.class.getName() + ';');
114-
imports.add("import " + clazz.getName() + ';');
115+
addImport(imports, SystemViewRowAttributeWalker.class);
116+
addImport(imports, clazz);
115117

116118
String simpleName = clazz.getSimpleName();
117119

@@ -136,7 +138,7 @@ private <T> Collection<String> generate(Class<T> clazz) {
136138
String line = TAB + TAB;
137139

138140
if (!retClazz.isPrimitive() && !retClazz.getName().startsWith("java.lang"))
139-
imports.add("import " + retClazz.getName() + ';');
141+
addImport(imports, retClazz);
140142

141143
line += "v.accept(" + i + ", \"" + name + "\", " + retClazz.getSimpleName() + ".class);";
142144

@@ -197,6 +199,11 @@ else if (retClazz == double.class)
197199
return code;
198200
}
199201

202+
/** Adds import to set imports set. */
203+
private void addImport(Set<String> imports, Class<?> cls) {
204+
imports.add("import " + cls.getName().replaceAll("\\$", ".") + ';');
205+
}
206+
200207
/**
201208
* Adds Apache License Header to the source code.
202209
*

modules/core/src/main/java/org/apache/ignite/internal/client/thin/ProtocolVersion.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ public final class ProtocolVersion implements Comparable<ProtocolVersion> {
3434
/** Protocol version 1.0.0. */
3535
public static final ProtocolVersion V1_0_0 = new ProtocolVersion((short)1, (short)0, (short)0);
3636

37+
/** Current protocol version. */
38+
public static final ProtocolVersion CURRENT_VER = V1_5_0;
39+
3740
/** Major. */
3841
private final short major;
3942

modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientChannel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
import org.apache.ignite.internal.util.future.GridFutureAdapter;
7676
import org.jetbrains.annotations.Nullable;
7777

78+
import static org.apache.ignite.internal.client.thin.ProtocolVersion.CURRENT_VER;
7879
import static org.apache.ignite.internal.client.thin.ProtocolVersion.V1_0_0;
7980
import static org.apache.ignite.internal.client.thin.ProtocolVersion.V1_1_0;
8081
import static org.apache.ignite.internal.client.thin.ProtocolVersion.V1_2_0;
@@ -98,7 +99,7 @@ class TcpClientChannel implements ClientChannel {
9899
private static final long PAYLOAD_WAIT_TIMEOUT = 10L;
99100

100101
/** Protocol version agreed with the server. */
101-
private ProtocolVersion ver = V1_5_0;
102+
private ProtocolVersion ver = CURRENT_VER;
102103

103104
/** Channel. */
104105
private final Socket sock;

modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/GridSystemViewManager.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@
3131
import org.apache.ignite.internal.managers.GridManagerAdapter;
3232
import org.apache.ignite.internal.managers.systemview.walker.CacheGroupViewWalker;
3333
import org.apache.ignite.internal.managers.systemview.walker.CacheViewWalker;
34+
import org.apache.ignite.internal.managers.systemview.walker.ClientConnectionViewWalker;
3435
import org.apache.ignite.internal.managers.systemview.walker.ComputeTaskViewWalker;
3536
import org.apache.ignite.internal.managers.systemview.walker.ServiceViewWalker;
3637
import org.apache.ignite.spi.systemview.ReadOnlySystemViewRegistry;
3738
import org.apache.ignite.spi.systemview.SystemViewExporterSpi;
3839
import org.apache.ignite.spi.systemview.view.CacheGroupView;
3940
import org.apache.ignite.spi.systemview.view.CacheView;
41+
import org.apache.ignite.spi.systemview.view.ClientConnectionView;
4042
import org.apache.ignite.spi.systemview.view.ComputeTaskView;
4143
import org.apache.ignite.spi.systemview.view.ServiceView;
4244
import org.apache.ignite.spi.systemview.view.SystemView;
@@ -73,6 +75,7 @@ public GridSystemViewManager(GridKernalContext ctx) {
7375
registerWalker(CacheView.class, new CacheViewWalker());
7476
registerWalker(ServiceView.class, new ServiceViewWalker());
7577
registerWalker(ComputeTaskView.class, new ComputeTaskViewWalker());
78+
registerWalker(ClientConnectionView.class, new ClientConnectionViewWalker());
7679
}
7780

7881
/** {@inheritDoc} */
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.ignite.internal.managers.systemview.walker;
19+
20+
import java.net.InetSocketAddress;
21+
import org.apache.ignite.spi.systemview.view.ClientConnectionView;
22+
import org.apache.ignite.spi.systemview.view.SystemViewRowAttributeWalker;
23+
24+
/**
25+
* Generated by {@code org.apache.ignite.codegen.SystemViewRowAttributeWalkerGenerator}.
26+
* {@link ClientConnectionView} attributes walker.
27+
*
28+
* @see ClientConnectionView
29+
*/
30+
public class ClientConnectionViewWalker implements SystemViewRowAttributeWalker<ClientConnectionView> {
31+
/** {@inheritDoc} */
32+
@Override public void visitAll(AttributeVisitor v) {
33+
v.accept(0, "connectionId", long.class);
34+
v.accept(1, "localAddress", InetSocketAddress.class);
35+
v.accept(2, "remoteAddress", InetSocketAddress.class);
36+
v.accept(3, "type", String.class);
37+
v.accept(4, "user", String.class);
38+
v.accept(5, "version", String.class);
39+
}
40+
41+
/** {@inheritDoc} */
42+
@Override public void visitAll(ClientConnectionView row, AttributeWithValueVisitor v) {
43+
v.acceptLong(0, "connectionId", row.connectionId());
44+
v.accept(1, "localAddress", InetSocketAddress.class, row.localAddress());
45+
v.accept(2, "remoteAddress", InetSocketAddress.class, row.remoteAddress());
46+
v.accept(3, "type", String.class, row.type());
47+
v.accept(4, "user", String.class, row.user());
48+
v.accept(5, "version", String.class, row.version());
49+
}
50+
51+
/** {@inheritDoc} */
52+
@Override public int count() {
53+
return 6;
54+
}
55+
}

modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerAbstractConnectionContext.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public abstract class ClientListenerAbstractConnectionContext implements ClientL
5252
* Constructor.
5353
*
5454
* @param ctx Kernal context.
55+
* @param connId Connection id.
5556
*/
5657
protected ClientListenerAbstractConnectionContext(GridKernalContext ctx, long connId) {
5758
this.ctx = ctx;

modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,24 @@
5252
import org.apache.ignite.internal.util.typedef.internal.U;
5353
import org.apache.ignite.mxbean.ClientProcessorMXBean;
5454
import org.apache.ignite.spi.IgnitePortProtocol;
55+
import org.apache.ignite.spi.systemview.view.ClientConnectionView;
5556
import org.apache.ignite.thread.IgniteThreadPoolExecutor;
5657
import org.jetbrains.annotations.NotNull;
5758
import org.jetbrains.annotations.Nullable;
5859

60+
import static org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
5961
import static org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.CONN_CTX_META_KEY;
6062

6163
/**
6264
* Client connector processor.
6365
*/
6466
public class ClientListenerProcessor extends GridProcessorAdapter {
67+
/** */
68+
public static final String CLI_CONN_SYS_VIEW = metricName("client", "connections");
69+
70+
/** */
71+
public static final String CLI_CONN_SYS_VIEW_DESC = "Client connections";
72+
6573
/** Default client connector configuration. */
6674
public static final ClientConnectorConfiguration DFLT_CLI_CFG = new ClientConnectorConfigurationEx();
6775

@@ -191,6 +199,11 @@ public ClientListenerProcessor(GridKernalContext ctx) {
191199

192200
if (!U.IGNITE_MBEANS_DISABLED)
193201
registerMBean();
202+
203+
ctx.systemView().registerView(CLI_CONN_SYS_VIEW, CLI_CONN_SYS_VIEW_DESC,
204+
ClientConnectionView.class,
205+
srv.sessions(),
206+
ClientConnectionView::new);
194207
}
195208
catch (Exception e) {
196209
throw new IgniteCheckedException("Failed to start client connector processor.", e);

modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProtocolVersion.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ public short maintenance() {
8080
return maintenance;
8181
}
8282

83+
/**
84+
* @return String representation of version.
85+
*/
86+
public String asString() {
87+
return String.valueOf(major) + '.' + minor + '.' + maintenance;
88+
}
89+
8390
/** {@inheritDoc} */
8491
@Override public int compareTo(@NotNull ClientListenerProtocolVersion other) {
8592
int res = major - other.major;

0 commit comments

Comments
 (0)