From fac0ca83194252e3ea231e927972c1d2c74aa459 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Tue, 17 Jan 2017 11:58:20 +0100 Subject: [PATCH] Warn about not-supported ChannelOption when bootstrap Channels. Motivation: We not warned about not-supported ChannelOptions when set the options for the ServerChannel. Modifications: - Share code for setting ChannelOptions during bootstrap Result: Warning is logged when a ChannelOption is used that is not supported during bootstrap a Channel. See also [#6192] --- .../io/netty/bootstrap/AbstractBootstrap.java | 28 +++++++++++++++++++ .../java/io/netty/bootstrap/Bootstrap.java | 10 +------ .../io/netty/bootstrap/ServerBootstrap.java | 16 ++++------- 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/transport/src/main/java/io/netty/bootstrap/AbstractBootstrap.java b/transport/src/main/java/io/netty/bootstrap/AbstractBootstrap.java index d6d0e3efde..8140ebf9d6 100644 --- a/transport/src/main/java/io/netty/bootstrap/AbstractBootstrap.java +++ b/transport/src/main/java/io/netty/bootstrap/AbstractBootstrap.java @@ -30,6 +30,7 @@ import io.netty.util.AttributeKey; import io.netty.util.concurrent.EventExecutor; import io.netty.util.concurrent.GlobalEventExecutor; import io.netty.util.internal.StringUtil; +import io.netty.util.internal.logging.InternalLogger; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -436,6 +437,33 @@ public abstract class AbstractBootstrap, C ext return copiedMap(attrs); } + static void setChannelOptions( + Channel channel, Map, Object> options, InternalLogger logger) { + for (Map.Entry, Object> e: options.entrySet()) { + setChannelOption(channel, e.getKey(), e.getValue(), logger); + } + } + + static void setChannelOptions( + Channel channel, Map.Entry, Object>[] options, InternalLogger logger) { + for (Map.Entry, Object> e: options) { + setChannelOption(channel, e.getKey(), e.getValue(), logger); + } + } + + @SuppressWarnings("unchecked") + private static void setChannelOption( + Channel channel, ChannelOption option, Object value, InternalLogger logger) { + try { + if (!channel.config().setOption((ChannelOption) option, value)) { + logger.warn("Unknown channel option '{}' for channel '{}'", option, channel); + } + } catch (Throwable t) { + logger.warn( + "Failed to set channel option '{}' with value '{}' for channel '{}'", option, channel, channel, t); + } + } + @Override public String toString() { StringBuilder buf = new StringBuilder() diff --git a/transport/src/main/java/io/netty/bootstrap/Bootstrap.java b/transport/src/main/java/io/netty/bootstrap/Bootstrap.java index 7e2716ec97..17a84d46d5 100644 --- a/transport/src/main/java/io/netty/bootstrap/Bootstrap.java +++ b/transport/src/main/java/io/netty/bootstrap/Bootstrap.java @@ -266,15 +266,7 @@ public class Bootstrap extends AbstractBootstrap { final Map, Object> options = options0(); synchronized (options) { - for (Entry, Object> e: options.entrySet()) { - try { - if (!channel.config().setOption((ChannelOption) e.getKey(), e.getValue())) { - logger.warn("Unknown channel option: " + e); - } - } catch (Throwable t) { - logger.warn("Failed to set a channel option: " + channel, t); - } - } + setChannelOptions(channel, options, logger); } final Map, Object> attrs = attrs0(); diff --git a/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java b/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java index c142a1144e..98730e9426 100644 --- a/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java +++ b/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java @@ -141,7 +141,7 @@ public class ServerBootstrap extends AbstractBootstrap, Object> options = options0(); synchronized (options) { - channel.config().setOptions(options); + setChannelOptions(channel, options, logger); } final Map, Object> attrs = attrs0(); @@ -204,13 +204,13 @@ public class ServerBootstrap extends AbstractBootstrap, Object>[] newOptionArray(int size) { + private static Entry, Object>[] newAttrArray(int size) { return new Entry[size]; } @SuppressWarnings("unchecked") - private static Entry, Object>[] newAttrArray(int size) { - return new Entry[size]; + private static Map.Entry, Object>[] newOptionArray(int size) { + return new Map.Entry[size]; } private static class ServerBootstrapAcceptor extends ChannelInboundHandlerAdapter { @@ -237,13 +237,7 @@ public class ServerBootstrap extends AbstractBootstrap, Object> e: childOptions) { - try { - if (!child.config().setOption((ChannelOption) e.getKey(), e.getValue())) { - logger.warn("Unknown channel option: " + e); - } - } catch (Throwable t) { - logger.warn("Failed to set a channel option: " + child, t); - } + setChannelOptions(child, childOptions, logger); } for (Entry, Object> e: childAttrs) {