Split out BGPDispatcherImpl 99/96699/4
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 28 Jun 2021 15:51:52 +0000 (17:51 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 29 Jun 2021 10:36:40 +0000 (12:36 +0200)
BGPDispatcherImpl is a rather trivial component, split it out of
blueprint to make things a tad more clear.

JIRA: BGPCEP-958
Change-Id: I8d01ced1ce17ac5d52d78171d17bba39918c01c8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImpl.java
bgp/rib-impl/src/main/resources/OSGI-INF/blueprint/bgp-rib.xml
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractAddPathTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractBGPDispatcherTest.java
bgp/testtool/src/main/java/org/opendaylight/protocol/bgp/testtool/BGPTestTool.java

index dee8a88b1ab669ca5775a13e601359332a53c0a7..ad820776b246f65cb9486ba1e65c452698643266 100644 (file)
@@ -36,7 +36,10 @@ import io.netty.util.concurrent.GlobalEventExecutor;
 import io.netty.util.concurrent.Promise;
 import java.net.InetSocketAddress;
 import java.util.concurrent.TimeUnit;
-import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
 import org.opendaylight.protocol.bgp.rib.impl.protocol.BGPProtocolSessionPromise;
 import org.opendaylight.protocol.bgp.rib.impl.protocol.BGPReconnectPromise;
 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
@@ -45,13 +48,19 @@ 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.concepts.KeyMapping;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Implementation of BGPDispatcher.
  */
-public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable {
+@Singleton
+@Component(immediate = true, service = BGPDispatcher.class)
+public final class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(BGPDispatcherImpl.class);
     private static final int SOCKET_BACKLOG_SIZE = 128;
     private static final long TIMEOUT = 10;
@@ -69,8 +78,12 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable {
     private final EventLoopGroup workerGroup;
     private final BGPPeerRegistry bgpPeerRegistry;
 
-    public BGPDispatcherImpl(final MessageRegistry messageRegistry, final EventLoopGroup bossGroup,
-            final EventLoopGroup workerGroup, final BGPPeerRegistry bgpPeerRegistry) {
+    @Inject
+    @Activate
+    public BGPDispatcherImpl(@Reference final BGPExtensionConsumerContext extensions,
+            @Reference(target = "(type=global-boss-group)") final EventLoopGroup bossGroup,
+            @Reference(target = "(type=global-worker-group)") final EventLoopGroup workerGroup,
+            @Reference final BGPPeerRegistry bgpPeerRegistry) {
         if (Epoll.isAvailable()) {
             this.bossGroup = new EpollEventLoopGroup();
             this.workerGroup = new EpollEventLoopGroup();
@@ -79,7 +92,7 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable {
             this.workerGroup = requireNonNull(workerGroup);
         }
         this.bgpPeerRegistry = requireNonNull(bgpPeerRegistry);
-        this.handlerFactory = new BGPHandlerFactory(messageRegistry);
+        this.handlerFactory = new BGPHandlerFactory(extensions.getMessageRegistry());
     }
 
     @VisibleForTesting
@@ -129,6 +142,8 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable {
         return bootstrap;
     }
 
+    @Deactivate
+    @PreDestroy
     @Override
     public synchronized void close() {
         if (Epoll.isAvailable()) {
index 2f4b6247fdaab4e7eee775a0a645e673a9978329..200585fc436b9b651039ab3928cb50cbed7878c0 100644 (file)
@@ -9,22 +9,8 @@
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
            xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0">
 
-  <reference id="BGPExtensionContext" interface="org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext"/>
-  <reference id="globalBossGroup" interface="io.netty.channel.EventLoopGroup" odl:type="global-boss-group"/>
-  <reference id="globalWorkerGroup" interface="io.netty.channel.EventLoopGroup" odl:type="global-worker-group"/>
   <reference id="clusterSingletonServiceProvider" interface="org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"/>
-  <reference id="bgpPeerRegistry" interface="org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry"/>
-
-  <bean id="BGPDispatcher" class="org.opendaylight.protocol.bgp.rib.impl.BGPDispatcherImpl"  destroy-method="close">
-    <argument>
-      <bean factory-ref="BGPExtensionContext" factory-method="getMessageRegistry"/>
-    </argument>
-    <argument ref="globalBossGroup"/>
-    <argument ref="globalWorkerGroup"/>
-    <argument ref="bgpPeerRegistry"/>
-  </bean>
-
-  <service ref="BGPDispatcher" interface="org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher"/>
+  <reference id="bgpDispatcher" interface="org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher"/>
 
   <reference id="dataBroker" interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
   <reference id="globalBgpExtensions" interface="org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext"/>
@@ -48,7 +34,7 @@
 
   <bean id="ribImpl" class="org.opendaylight.protocol.bgp.rib.impl.config.RibImpl" scope="prototype">
     <argument ref="globalBgpExtensions"/>
-    <argument ref="BGPDispatcher"/>
+    <argument ref="bgpDispatcher"/>
     <argument ref="policiesProvider"/>
     <argument ref="codecRegistry"/>
     <argument ref="domDataBroker"/>
index 20732fa5f3bddf279d4378c71012aefbfe310e47..53a114b9c917f58c5c859ef1add5b2a8ccd137a1 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.protocol.bgp.rib.impl;
 
+import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.opendaylight.protocol.util.CheckUtil.readDataOperational;
@@ -26,7 +27,6 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import org.junit.After;
-import org.junit.Assert;
 import org.junit.Before;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -156,8 +156,7 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest {
             this.boss = new NioEventLoopGroup();
         }
         this.serverRegistry = new StrictBGPPeerRegistry();
-        this.serverDispatcher = new BGPDispatcherImpl(this.context.getMessageRegistry(), this.boss, this.worker,
-            this.serverRegistry);
+        this.serverDispatcher = new BGPDispatcherImpl(this.context, this.boss, this.worker, this.serverRegistry);
         doReturn(Mockito.mock(ClusterSingletonServiceRegistration.class)).when(this.clusterSingletonServiceProvider)
             .registerClusterSingletonService(any(ClusterSingletonService.class));
 
@@ -208,7 +207,7 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest {
         Thread.sleep(100);
         readDataOperational(getDataBroker(), BGP_IID, bgpRib -> {
             final Ipv4RoutesCase routes = (Ipv4RoutesCase) bgpRib.getRib().values().iterator().next().getLocRib()
-                    .getTables().values().iterator().next().getRoutes();
+                    .nonnullTables().values().iterator().next().getRoutes();
             final int size;
             if (routes != null) {
                 final Ipv4Routes routesCase = routes.getIpv4Routes();
@@ -222,14 +221,14 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest {
                 size = 0;
             }
 
-            Assert.assertEquals(expectedRoutesOnDS, size);
+            assertEquals(expectedRoutesOnDS, size);
             return bgpRib;
         });
     }
 
     void checkPeersPresentOnDataStore(final int numberOfPeers) throws Exception {
         readDataOperational(getDataBroker(), BGP_IID, bgpRib -> {
-            Assert.assertEquals(numberOfPeers, bgpRib.getRib().values().iterator().next().getPeer().size());
+            assertEquals(numberOfPeers, bgpRib.getRib().values().iterator().next().nonnullPeer().size());
             return bgpRib;
         });
     }
@@ -243,8 +242,8 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest {
                                      final SimpleSessionListener sessionListener,
                                      final AsNumber remoteAsNumber) throws InterruptedException {
         final StrictBGPPeerRegistry clientRegistry = new StrictBGPPeerRegistry();
-        final BGPDispatcherImpl clientDispatcher = new BGPDispatcherImpl(this.context.getMessageRegistry(), this.boss,
-                this.worker, clientRegistry);
+        final BGPDispatcherImpl clientDispatcher = new BGPDispatcherImpl(this.context, this.boss, this.worker,
+                clientRegistry);
 
         clientDispatchers.add(clientDispatcher);
         clientRegistry.addPeer(new IpAddressNoZone(new Ipv4AddressNoZone(RIB_ID)), sessionListener,
index 2fdaa2253479d95bc35ca41c385d21c057e46fe8..4ceb6a2cc55ce6946a53d5bb11bde72ff51044ee 100644 (file)
@@ -71,13 +71,13 @@ public class AbstractBGPDispatcherTest {
         this.clientListener = new SimpleSessionListener();
         this.serverListener = new SimpleSessionListener();
         final BGPExtensionProviderContext ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
-        this.serverDispatcher = new BGPDispatcherImpl(ctx.getMessageRegistry(), this.boss, this.worker, this.registry);
+        this.serverDispatcher = new BGPDispatcherImpl(ctx, this.boss, this.worker, this.registry);
 
         this.clientAddress = InetSocketAddressUtil.getRandomLoopbackInetSocketAddress();
         final IpAddressNoZone clientPeerIp = new IpAddressNoZone(new Ipv4AddressNoZone(
             this.clientAddress.getAddress().getHostAddress()));
         this.registry.addPeer(clientPeerIp, this.clientListener, createPreferences(this.clientAddress));
-        this.clientDispatcher = new BGPDispatcherImpl(ctx.getMessageRegistry(), this.boss, this.worker, this.registry);
+        this.clientDispatcher = new BGPDispatcherImpl(ctx, this.boss, this.worker, this.registry);
     }
 
     @After
index 4b7fdf8f159ca8668465496a10c492d6cc280fbc..7c0609ae7de51c9165eef6915553ef14279a3bfe 100644 (file)
@@ -115,7 +115,7 @@ final class BGPTestTool {
                 = new org.opendaylight.protocol.bgp.route.targetcontrain.impl.activators.BGPActivator();
         rtBGPActivator.start(ctx);
 
-        return new BGPDispatcherImpl(ctx.getMessageRegistry(), new NioEventLoopGroup(), new NioEventLoopGroup(),
+        return new BGPDispatcherImpl(ctx, new NioEventLoopGroup(), new NioEventLoopGroup(),
             new StrictBGPPeerRegistry());
     }