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;
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;
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();
this.workerGroup = requireNonNull(workerGroup);
}
this.bgpPeerRegistry = requireNonNull(bgpPeerRegistry);
- this.handlerFactory = new BGPHandlerFactory(messageRegistry);
+ this.handlerFactory = new BGPHandlerFactory(extensions.getMessageRegistry());
}
@VisibleForTesting
return bootstrap;
}
+ @Deactivate
+ @PreDestroy
@Override
public synchronized void close() {
if (Epoll.isAvailable()) {
<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"/>
<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"/>
*/
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;
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;
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));
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();
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;
});
}
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,
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
= 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());
}