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 2020/08/05 13:41:57 UTC

[cassandra] branch trunk updated: Improve logging for socket connection/disconnection

This is an automated email from the ASF dual-hosted git repository.

aleksey pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/trunk by this push:
     new c9b41c1  Improve logging for socket connection/disconnection
c9b41c1 is described below

commit c9b41c1f8ad03719918c4d3c29719056ae6b3995
Author: Jon Meredith <jm...@apple.com>
AuthorDate: Fri Jul 24 07:58:13 2020 -0600

    Improve logging for socket connection/disconnection
    
    Patch by Jon Meredith; reviewed by David Capwell and Aleksey Yeschenko
    for CASSANDRA-15980
---
 CHANGES.txt                                        |  1 +
 .../cassandra/net/InboundConnectionInitiator.java  | 19 +++++++++++----
 .../cassandra/net/InboundConnectionSettings.java   |  2 +-
 .../apache/cassandra/net/OutboundConnection.java   |  2 +-
 .../apache/cassandra/net/OutboundConnections.java  |  7 ++++++
 .../org/apache/cassandra/net/SocketFactory.java    | 28 +++++++++++++++++++++-
 .../cassandra/transport/ServerConnection.java      |  2 +-
 7 files changed, 53 insertions(+), 8 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index adc97dd..7287c0b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0-beta2
+ * Improve logging for socket connection/disconnection (CASSANDRA-15980)
  * Throw FSWriteError upon write failures in order to apply DiskFailurePolicy (CASSANDRA-15928)
  * Forbid altering UDTs used in partition keys (CASSANDRA-15933)
  * Fix version parsing logic when upgrading from 3.0 (CASSANDRA-15973)
diff --git a/src/java/org/apache/cassandra/net/InboundConnectionInitiator.java b/src/java/org/apache/cassandra/net/InboundConnectionInitiator.java
index 4ad3d8c..e02512b 100644
--- a/src/java/org/apache/cassandra/net/InboundConnectionInitiator.java
+++ b/src/java/org/apache/cassandra/net/InboundConnectionInitiator.java
@@ -237,8 +237,8 @@ public class InboundConnectionInitiator
             if (sslHandler != null)
             {
                 SSLSession session = sslHandler.engine().getSession();
-                logger.info("connection from peer {} to {}, protocol = {}, cipher suite = {}",
-                            ctx.channel().remoteAddress(), ctx.channel().localAddress(), session.getProtocol(), session.getCipherSuite());
+                logger.info("connection from peer {} to {}, protocol = {}",
+                            ctx.channel().remoteAddress(), ctx.channel().localAddress(), session.getProtocol());
             }
         }
 
@@ -391,6 +391,17 @@ public class InboundConnectionInitiator
 
             BufferPool.setRecycleWhenFreeForCurrentThread(false);
             pipeline.replace(this, "streamInbound", new StreamingInboundHandler(from, current_version, null));
+
+            logger.info("{} streaming connection established, version = {}, framing = {}, encryption = {}",
+                        SocketFactory.channelId(from,
+                                                (InetSocketAddress) channel.remoteAddress(),
+                                                settings.bindAddress,
+                                                (InetSocketAddress) channel.localAddress(),
+                                                ConnectionType.STREAMING,
+                                                channel.id().asShortText()),
+                        current_version,
+                        initiate.framing,
+                        pipeline.get("ssl") != null ? encryptionLogStatement(pipeline.channel(), settings.encryption) : "disabled");
         }
 
         @VisibleForTesting
@@ -445,11 +456,11 @@ public class InboundConnectionInitiator
             InboundMessageHandler handler =
                 settings.handlers.apply(from).createHandler(frameDecoder, initiate.type, pipeline.channel(), useMessagingVersion);
 
-            logger.info("{} connection established, version = {}, framing = {}, encryption = {}",
+            logger.info("{} messaging connection established, version = {}, framing = {}, encryption = {}",
                         handler.id(true),
                         useMessagingVersion,
                         initiate.framing,
-                        pipeline.get("ssl") != null ? encryptionLogStatement(settings.encryption) : "disabled");
+                        pipeline.get("ssl") != null ? encryptionLogStatement(pipeline.channel(), settings.encryption) : "disabled");
 
             pipeline.addLast("deserialize", handler);
 
diff --git a/src/java/org/apache/cassandra/net/InboundConnectionSettings.java b/src/java/org/apache/cassandra/net/InboundConnectionSettings.java
index a07395b..20f185a 100644
--- a/src/java/org/apache/cassandra/net/InboundConnectionSettings.java
+++ b/src/java/org/apache/cassandra/net/InboundConnectionSettings.java
@@ -84,7 +84,7 @@ public class InboundConnectionSettings
     public String toString()
     {
         return format("address: (%s), nic: %s, encryption: %s",
-                      bindAddress, FBUtilities.getNetworkInterface(bindAddress.address), SocketFactory.encryptionLogStatement(encryption));
+                      bindAddress, FBUtilities.getNetworkInterface(bindAddress.address), SocketFactory.encryptionLogStatement(null, encryption));
     }
 
     public InboundConnectionSettings withAuthenticator(IInternodeAuthenticator authenticator)
diff --git a/src/java/org/apache/cassandra/net/OutboundConnection.java b/src/java/org/apache/cassandra/net/OutboundConnection.java
index e7eca86..b0edc03 100644
--- a/src/java/org/apache/cassandra/net/OutboundConnection.java
+++ b/src/java/org/apache/cassandra/net/OutboundConnection.java
@@ -1151,7 +1151,7 @@ public class OutboundConnection
                                     id(true),
                                     success.messagingVersion,
                                     settings.framing,
-                                    encryptionLogStatement(settings.encryption));
+                                    encryptionLogStatement(channel, settings.encryption));
                         break;
 
                     case RETRY:
diff --git a/src/java/org/apache/cassandra/net/OutboundConnections.java b/src/java/org/apache/cassandra/net/OutboundConnections.java
index 029d5e1..f1e1276 100644
--- a/src/java/org/apache/cassandra/net/OutboundConnections.java
+++ b/src/java/org/apache/cassandra/net/OutboundConnections.java
@@ -27,6 +27,9 @@ import java.util.function.Function;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import com.carrotsearch.hppc.ObjectObjectHashMap;
 import io.netty.util.concurrent.Future;
 import org.apache.cassandra.config.Config;
@@ -47,6 +50,8 @@ import static org.apache.cassandra.net.ConnectionType.SMALL_MESSAGES;
  */
 public class OutboundConnections
 {
+    private static final Logger logger = LoggerFactory.getLogger(OutboundConnections.class);
+
     @VisibleForTesting
     public static final int LARGE_MESSAGE_THRESHOLD = Integer.getInteger(Config.PROPERTY_PREFIX + "otcp_large_message_threshold", 1024 * 64)
     - Math.max(Math.max(LegacyLZ4Constants.HEADER_LENGTH, FrameEncoderCrc.HEADER_AND_TRAILER_LENGTH), FrameEncoderLZ4.HEADER_AND_TRAILER_LENGTH);
@@ -281,6 +286,8 @@ public class OutboundConnections
                 if (cur.small == prev.small && cur.large == prev.large && cur.urgent == prev.urgent
                     && !Gossiper.instance.isKnownEndpoint(connections.template.to))
                 {
+                    logger.info("Closing outbound connections to {}, as inactive and not known by Gossiper",
+                                connections.template.to);
                     // close entirely if no traffic and the endpoint is unknown
                     messagingService.closeOutboundNow(connections);
                     continue;
diff --git a/src/java/org/apache/cassandra/net/SocketFactory.java b/src/java/org/apache/cassandra/net/SocketFactory.java
index da2d461..a8ee729 100644
--- a/src/java/org/apache/cassandra/net/SocketFactory.java
+++ b/src/java/org/apache/cassandra/net/SocketFactory.java
@@ -30,6 +30,7 @@ import java.util.concurrent.TimeoutException;
 import javax.annotation.Nullable;
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.SSLParameters;
+import javax.net.ssl.SSLSession;
 
 import com.google.common.collect.ImmutableList;
 import org.slf4j.Logger;
@@ -51,7 +52,6 @@ import io.netty.channel.nio.NioEventLoopGroup;
 import io.netty.channel.socket.nio.NioServerSocketChannel;
 import io.netty.channel.socket.nio.NioSocketChannel;
 import io.netty.channel.unix.Errors;
-import io.netty.handler.ssl.OpenSsl;
 import io.netty.handler.ssl.SslContext;
 import io.netty.handler.ssl.SslHandler;
 import io.netty.util.concurrent.DefaultEventExecutorChooserFactory;
@@ -237,6 +237,32 @@ public final class SocketFactory
         return "enabled (" + encryptionType + ')';
     }
 
+    static String encryptionLogStatement(Channel channel, EncryptionOptions options)
+    {
+        if (options == null || !options.isEnabled())
+            return "disabled";
+
+        StringBuilder sb = new StringBuilder(64);
+        if (options.optional)
+            sb.append("optional (factory=");
+        else
+            sb.append("enabled (factory=");
+        sb.append(SSLFactory.openSslIsAvailable() ? "openssl" : "jdk");
+
+        final SslHandler sslHandler = channel == null ? null : channel.pipeline().get(SslHandler.class);
+        if (sslHandler != null)
+        {
+            SSLSession session = sslHandler.engine().getSession();
+            sb.append(";protocol=")
+              .append(session.getProtocol())
+              .append(";cipher=")
+              .append(session.getCipherSuite());
+        }
+
+        sb.append(')');
+        return sb.toString();
+    }
+
     EventLoopGroup defaultGroup()
     {
         return defaultGroup;
diff --git a/src/java/org/apache/cassandra/transport/ServerConnection.java b/src/java/org/apache/cassandra/transport/ServerConnection.java
index de8a02a..06e7842 100644
--- a/src/java/org/apache/cassandra/transport/ServerConnection.java
+++ b/src/java/org/apache/cassandra/transport/ServerConnection.java
@@ -137,7 +137,7 @@ public class ServerConnection extends Connection
             }
             catch (SSLPeerUnverifiedException e)
             {
-                logger.error("Failed to get peer certificates for peer {}", channel().remoteAddress(), e);
+                logger.debug("Failed to get peer certificates for peer {}", channel().remoteAddress(), e);
             }
         }
         return certificates;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org