Bug: Fix Cycles issues 82/24182/1
authorClaudio D. Gasparini <cgaspari@cisco.com>
Thu, 16 Jul 2015 08:02:00 +0000 (10:02 +0200)
committerClaudio D. Gasparini <cgaspari@cisco.com>
Thu, 16 Jul 2015 08:19:27 +0000 (10:19 +0200)
Change-Id: I18e58d635dbc7cbd33d1b57afd7269278e25567c
Signed-off-by: Claudio D. Gasparini <cgaspari@cisco.com>
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImpl.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/protocol/BGPReconnectPromise.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/ChannelPipelineInitializer.java

index ceb5702aed423a1bba57e68df2d1358375a33b9f..1ea1f62a1c02708e2bc2cd0de14327a0e37b0e0f 100644 (file)
@@ -32,6 +32,7 @@ import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry;
 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionValidator;
 import org.opendaylight.protocol.bgp.rib.impl.spi.ChannelPipelineInitializer;
+import org.opendaylight.protocol.bgp.rib.spi.BGPSession;
 import org.opendaylight.protocol.bgp.rib.spi.BGPSessionNegotiatorFactory;
 import org.opendaylight.protocol.framework.ReconnectStrategy;
 import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
@@ -106,7 +107,7 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable {
         this.keys = keys;
 
         final Bootstrap b = new Bootstrap();
-        final BGPReconnectPromise p = new BGPReconnectPromise(GlobalEventExecutor.INSTANCE, address,
+        final BGPReconnectPromise p = new BGPReconnectPromise<BGPSessionImpl>(GlobalEventExecutor.INSTANCE, address,
             connectStrategyFactory, b, BGPChannel.createChannelPipelineInitializer(BGPDispatcherImpl.this.hf.getDecoders(), snf, BGPDispatcherImpl.this.hf.getEncoders()));
         b.option(ChannelOption.SO_KEEPALIVE, Boolean.valueOf(true));
         this.customizeBootstrap(b);
@@ -181,19 +182,18 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable {
         }
     }
 
-    public final static class BGPChannel {
+    private static final class BGPChannel {
         private static final String NEGOTIATOR = "negotiator";
 
         private BGPChannel() {
 
         }
 
-        public static <T extends BGPSessionNegotiatorFactory> ChannelPipelineInitializer createChannelPipelineInitializer(final ChannelHandler[] channelDecoder,
-                                                                                                                          final T snf,
-                                                                                                                          final ChannelHandler[] channelEncoder) {
-            return new ChannelPipelineInitializer() {
+        public static <S extends BGPSession, T extends BGPSessionNegotiatorFactory> ChannelPipelineInitializer
+            createChannelPipelineInitializer(final ChannelHandler[] channelDecoder, final T snf, final ChannelHandler[] channelEncoder) {
+            return new ChannelPipelineInitializer<S>() {
                 @Override
-                public void initializeChannel(final SocketChannel ch, final Promise<BGPSessionImpl> promise) {
+                public void initializeChannel(final SocketChannel ch, final Promise<S> promise) {
                     ch.pipeline().addLast(channelDecoder);
                     ch.pipeline().addLast(NEGOTIATOR, snf.getSessionNegotiator(ch, promise));
                     ch.pipeline().addLast(channelEncoder);
@@ -201,7 +201,7 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable {
             };
         }
 
-        public static ChannelHandler createChannelInitializer(final ChannelPipelineInitializer initializer, final Promise<BGPSessionImpl> promise) {
+        public static <S extends BGPSession> ChannelHandler createChannelInitializer(final ChannelPipelineInitializer initializer, final Promise<S> promise) {
             return new ChannelInitializer<SocketChannel>() {
                 @Override
                 protected void initChannel(SocketChannel ch) {
@@ -210,6 +210,4 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable {
             };
         }
     }
-}
-
-
+}
\ No newline at end of file
index c467a6e9d6b246c576ec6df4979d5d8635ff2fd5..d2fa76e02a7de1bd06fcee63b9923d414558cd2f 100644 (file)
@@ -12,6 +12,7 @@ import io.netty.bootstrap.Bootstrap;
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.ChannelInitializer;
 import io.netty.channel.socket.SocketChannel;
 import io.netty.util.concurrent.DefaultPromise;
 import io.netty.util.concurrent.EventExecutor;
@@ -19,15 +20,14 @@ import io.netty.util.concurrent.Future;
 import io.netty.util.concurrent.GenericFutureListener;
 import io.netty.util.concurrent.Promise;
 import java.net.InetSocketAddress;
-import org.opendaylight.protocol.bgp.rib.impl.BGPDispatcherImpl;
-import org.opendaylight.protocol.bgp.rib.impl.BGPSessionImpl;
 import org.opendaylight.protocol.bgp.rib.impl.spi.ChannelPipelineInitializer;
+import org.opendaylight.protocol.bgp.rib.spi.BGPSession;
 import org.opendaylight.protocol.framework.ReconnectStrategy;
 import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class BGPReconnectPromise extends DefaultPromise<Void> {
+public class BGPReconnectPromise<S extends BGPSession> extends DefaultPromise<Void> {
     private static final Logger LOG = LoggerFactory.getLogger(BGPReconnectPromise.class);
 
     private final InetSocketAddress address;
@@ -35,7 +35,7 @@ public class BGPReconnectPromise extends DefaultPromise<Void> {
     private final Bootstrap b;
     private final ChannelPipelineInitializer initializer;
     private final EventExecutor executor;
-    private Future<BGPSessionImpl> pending;
+    private Future<S> pending;
 
     public BGPReconnectPromise(final EventExecutor executor, final InetSocketAddress address,
                                final ReconnectStrategyFactory connectStrategyFactory, final Bootstrap b,
@@ -52,9 +52,9 @@ public class BGPReconnectPromise extends DefaultPromise<Void> {
         final ReconnectStrategy cs = this.strategyFactory.createReconnectStrategy();
 
         // Set up a client with pre-configured bootstrap, but add a closed channel handler into the pipeline to support reconnect attempts
-        pending = createClient(this.address, cs, b, new ChannelPipelineInitializer() {
+        pending = createClient(this.address, cs, b, new ChannelPipelineInitializer<S>() {
             @Override
-            public void initializeChannel(final SocketChannel channel, final Promise<BGPSessionImpl> promise) {
+            public void initializeChannel(final SocketChannel channel, final Promise<S> promise) {
                 initializer.initializeChannel(channel, promise);
                 // add closed channel handler
                 // This handler has to be added as last channel handler and the channel inactive event has to be caught by it
@@ -74,10 +74,16 @@ public class BGPReconnectPromise extends DefaultPromise<Void> {
         });
     }
 
-    public Future<BGPSessionImpl> createClient(final InetSocketAddress address, final ReconnectStrategy strategy, final Bootstrap bootstrap,
-                                               final ChannelPipelineInitializer initializer) {
+    public Future<S> createClient(final InetSocketAddress address, final ReconnectStrategy strategy, final Bootstrap bootstrap,
+                                  final ChannelPipelineInitializer initializer) {
         final BGPProtocolSessionPromise p = new BGPProtocolSessionPromise(this.executor, address, strategy, bootstrap);
-        final ChannelHandler chInit = BGPDispatcherImpl.BGPChannel.createChannelInitializer(initializer, p);
+        final ChannelHandler chInit = new ChannelInitializer<SocketChannel>() {
+            @Override
+            protected void initChannel(SocketChannel ch) {
+                initializer.initializeChannel(ch, p);
+            }
+        };
+
         bootstrap.handler(chInit);
         p.connect();
         LOG.debug("Client created.");
@@ -129,4 +135,4 @@ public class BGPReconnectPromise extends DefaultPromise<Void> {
             promise.connect();
         }
     }
-}
+}
\ No newline at end of file
index 3dd09cfb25b27937a1d45036fba0e3c27a12c3d5..88b684334e12b73bb87718e03a62c3ae78566710 100644 (file)
@@ -9,8 +9,8 @@ package org.opendaylight.protocol.bgp.rib.impl.spi;
 
 import io.netty.channel.socket.SocketChannel;
 import io.netty.util.concurrent.Promise;
-import org.opendaylight.protocol.bgp.rib.impl.BGPSessionImpl;
+import org.opendaylight.protocol.bgp.rib.spi.BGPSession;
 
-public interface ChannelPipelineInitializer {
-    void initializeChannel(SocketChannel socketChannel, Promise<BGPSessionImpl> promise);
+public interface ChannelPipelineInitializer<S extends BGPSession> {
+    void initializeChannel(SocketChannel socketChannel, Promise<S> promise);
 }