You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2018/06/21 17:32:29 UTC
cassandra git commit: Add a virtual table to expose active client
connections
Repository: cassandra
Updated Branches:
refs/heads/trunk 53c71949d -> 46a5514c2
Add a virtual table to expose active client connections
patch by Chris Lohfink; reviewed by Aleksey Yeschenko for
CASSANDRA-14458
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/46a5514c
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/46a5514c
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/46a5514c
Branch: refs/heads/trunk
Commit: 46a5514c2aa7f377e8dc4cfd0d701b940f3137c7
Parents: 53c7194
Author: Chris Lohfink <cl...@apple.com>
Authored: Thu Jun 21 11:36:30 2018 -0500
Committer: Aleksey Yeshchenko <al...@apple.com>
Committed: Thu Jun 21 18:30:50 2018 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/db/virtual/ClientsTable.java | 86 ++++++++++++++++++++
.../db/virtual/SystemViewsKeyspace.java | 2 +-
.../apache/cassandra/metrics/ClientMetrics.java | 10 +++
.../cassandra/transport/ConnectedClient.java | 4 +-
5 files changed, 100 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/46a5514c/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 598eaff..ce945df 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
4.0
+ * Add a virtual table to expose active client connections (CASSANDRA-14458)
* Clean up and refactor client metrics (CASSANDRA-14524)
* Nodetool import row cache invalidation races with adding sstables to tracker (CASSANDRA-14529)
* Fix assertions in LWTs after TableMetadata was made immutable (CASSANDRA-14356)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/46a5514c/src/java/org/apache/cassandra/db/virtual/ClientsTable.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/virtual/ClientsTable.java b/src/java/org/apache/cassandra/db/virtual/ClientsTable.java
new file mode 100644
index 0000000..98d1a28
--- /dev/null
+++ b/src/java/org/apache/cassandra/db/virtual/ClientsTable.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cassandra.db.virtual;
+
+import java.net.InetSocketAddress;
+
+import org.apache.cassandra.db.marshal.*;
+import org.apache.cassandra.metrics.ClientMetrics;
+import org.apache.cassandra.schema.TableMetadata;
+import org.apache.cassandra.transport.ConnectedClient;
+
+final class ClientsTable extends AbstractVirtualTable
+{
+ private static final String ADDRESS = "address";
+ private static final String PORT = "port";
+ private static final String HOSTNAME = "hostname";
+ private static final String USERNAME = "username";
+ private static final String CONNECTION_STAGE = "connection_stage";
+ private static final String PROTOCOL_VERSION = "protocol_version";
+ private static final String DRIVER_NAME = "driver_name";
+ private static final String DRIVER_VERSION = "driver_version";
+ private static final String REQUEST_COUNT = "request_count";
+ private static final String SSL_ENABLED = "ssl_enabled";
+ private static final String SSL_PROTOCOL = "ssl_protocol";
+ private static final String SSL_CIPHER_SUITE = "ssl_cipher_suite";
+
+ ClientsTable(String keyspace)
+ {
+ super(TableMetadata.builder(keyspace, "clients")
+ .comment("currently connected clients")
+ .kind(TableMetadata.Kind.VIRTUAL)
+ .addPartitionKeyColumn(ADDRESS, InetAddressType.instance)
+ .addClusteringColumn(PORT, Int32Type.instance)
+ .addRegularColumn(HOSTNAME, UTF8Type.instance)
+ .addRegularColumn(USERNAME, UTF8Type.instance)
+ .addRegularColumn(CONNECTION_STAGE, UTF8Type.instance)
+ .addRegularColumn(PROTOCOL_VERSION, Int32Type.instance)
+ .addRegularColumn(DRIVER_NAME, UTF8Type.instance)
+ .addRegularColumn(DRIVER_VERSION, UTF8Type.instance)
+ .addRegularColumn(REQUEST_COUNT, LongType.instance)
+ .addRegularColumn(SSL_ENABLED, BooleanType.instance)
+ .addRegularColumn(SSL_PROTOCOL, UTF8Type.instance)
+ .addRegularColumn(SSL_CIPHER_SUITE, UTF8Type.instance)
+ .build());
+ }
+
+ @Override
+ public DataSet data()
+ {
+ SimpleDataSet result = new SimpleDataSet(metadata());
+
+ for (ConnectedClient client : ClientMetrics.instance.allConnectedClients())
+ {
+ InetSocketAddress remoteAddress = client.remoteAddress();
+
+ result.row(remoteAddress.getAddress(), remoteAddress.getPort())
+ .column(HOSTNAME, remoteAddress.getHostName())
+ .column(USERNAME, client.username().orElse(null))
+ .column(CONNECTION_STAGE, client.stage().toString().toLowerCase())
+ .column(PROTOCOL_VERSION, client.protocolVersion())
+ .column(DRIVER_NAME, client.driverName().orElse(null))
+ .column(DRIVER_VERSION, client.driverVersion().orElse(null))
+ .column(REQUEST_COUNT, client.requestCount())
+ .column(SSL_ENABLED, client.sslEnabled())
+ .column(SSL_PROTOCOL, client.sslProtocol().orElse(null))
+ .column(SSL_CIPHER_SUITE, client.sslCipherSuite().orElse(null));
+ }
+
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/46a5514c/src/java/org/apache/cassandra/db/virtual/SystemViewsKeyspace.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/virtual/SystemViewsKeyspace.java b/src/java/org/apache/cassandra/db/virtual/SystemViewsKeyspace.java
index 5d33a63..53c01a4 100644
--- a/src/java/org/apache/cassandra/db/virtual/SystemViewsKeyspace.java
+++ b/src/java/org/apache/cassandra/db/virtual/SystemViewsKeyspace.java
@@ -27,6 +27,6 @@ public final class SystemViewsKeyspace extends VirtualKeyspace
private SystemViewsKeyspace()
{
- super(NAME, ImmutableList.of(new SSTableTasksTable(NAME)));
+ super(NAME, ImmutableList.of(new SSTableTasksTable(NAME), new ClientsTable(NAME)));
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/46a5514c/src/java/org/apache/cassandra/metrics/ClientMetrics.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/metrics/ClientMetrics.java b/src/java/org/apache/cassandra/metrics/ClientMetrics.java
index 5e7720a..a80033a 100644
--- a/src/java/org/apache/cassandra/metrics/ClientMetrics.java
+++ b/src/java/org/apache/cassandra/metrics/ClientMetrics.java
@@ -54,6 +54,16 @@ public final class ClientMetrics
authFailure.mark();
}
+ public List<ConnectedClient> allConnectedClients()
+ {
+ List<ConnectedClient> clients = new ArrayList<>();
+
+ for (Server server : servers)
+ clients.addAll(server.getConnectedClients());
+
+ return clients;
+ }
+
public synchronized void init(Collection<Server> servers)
{
if (initialized)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/46a5514c/src/java/org/apache/cassandra/transport/ConnectedClient.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/transport/ConnectedClient.java b/src/java/org/apache/cassandra/transport/ConnectedClient.java
index 0776bf8..ca100f2 100644
--- a/src/java/org/apache/cassandra/transport/ConnectedClient.java
+++ b/src/java/org/apache/cassandra/transport/ConnectedClient.java
@@ -93,7 +93,7 @@ public final class ConnectedClient
return Optional.ofNullable(state().getRawKeyspace());
}
- public boolean isEncrypted()
+ public boolean sslEnabled()
{
return null != sslHandler();
}
@@ -136,7 +136,7 @@ public final class ConnectedClient
.put(DRIVER_VERSION, driverVersion().orElse(UNDEFINED))
.put(REQUESTS, String.valueOf(requestCount()))
.put(KEYSPACE, keyspace().orElse(""))
- .put(SSL, Boolean.toString(isEncrypted()))
+ .put(SSL, Boolean.toString(sslEnabled()))
.put(CIPHER, sslCipherSuite().orElse(UNDEFINED))
.put(PROTOCOL, sslProtocol().orElse(UNDEFINED))
.build();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org