BUG-633: allow overriding of channelFactory 37/6637/1
authorRobert Varga <rovarga@cisco.com>
Thu, 1 May 2014 15:55:00 +0000 (17:55 +0200)
committerRobert Varga <rovarga@cisco.com>
Thu, 1 May 2014 15:55:00 +0000 (17:55 +0200)
It turns out netty does not let us override an already-set
channelFactory. Reorder customization to detect when such an override is
necessary.

Change-Id: I99de69b98e4034d4701313942d9ed2a09923375d
Signed-off-by: Robert Varga <rovarga@cisco.com>
opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/protocol/framework/AbstractDispatcher.java

index 5e55cdd..916ef9a 100644 (file)
@@ -77,9 +77,6 @@ public abstract class AbstractDispatcher<S extends ProtocolSession<?>, L extends
      */
     protected ChannelFuture createServer(final InetSocketAddress address, final PipelineInitializer<S> initializer) {
         final ServerBootstrap b = new ServerBootstrap();
-        b.group(this.bossGroup, this.workerGroup);
-        b.channel(NioServerSocketChannel.class);
-        b.option(ChannelOption.SO_BACKLOG, 128);
         b.childHandler(new ChannelInitializer<SocketChannel>() {
 
             @Override
@@ -87,10 +84,20 @@ public abstract class AbstractDispatcher<S extends ProtocolSession<?>, L extends
                 initializer.initializeChannel(ch, new DefaultPromise<S>(executor));
             }
         });
-        b.childOption(ChannelOption.SO_KEEPALIVE, true);
 
+        b.option(ChannelOption.SO_BACKLOG, 128);
+        b.childOption(ChannelOption.SO_KEEPALIVE, true);
         customizeBootstrap(b);
 
+        if (b.group() == null) {
+            b.group(bossGroup, workerGroup);
+        }
+        try {
+            b.channel(NioServerSocketChannel.class);
+        } catch (IllegalStateException e) {
+            LOG.trace("Not overriding channelFactory on bootstrap {}", b, e);
+        }
+
         // Bind and start to accept incoming connections.
         final ChannelFuture f = b.bind(address);
         LOG.debug("Initiated server {} at {}.", f, address);