private static final NodeIdentifier NLRI_ROUTES_LIST = NodeIdentifier.create(EvpnDestination.QNAME);
private static final EvpnRoutes EMPTY_CONTAINER = new EvpnRoutesBuilder().build();
- private static EvpnRibSupport SINGLETON;
- private EvpnRibSupport(final BindingNormalizedNodeSerializer mappingService) {
+ EvpnRibSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
EvpnRoutesCase.class,
EvpnRoutes.class,
DestinationEvpn.QNAME);
}
- static synchronized EvpnRibSupport getInstance(final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new EvpnRibSupport(mappingService);
- }
- return SINGLETON;
- }
-
@Override
protected DestinationType buildDestination(final Collection<MapEntryNode> routes) {
return new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.update
import javax.inject.Singleton;
import org.kohsuke.MetaInfServices;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.EvpnSubsequentAddressFamily;
import org.osgi.service.component.annotations.Component;
@Singleton
-@Component(immediate = true, service = RIBExtensionProviderActivator.class,
- property = "type=org.opendaylight.protocol.bgp.evpn.impl.RIBActivator")
-@MetaInfServices(value = RIBExtensionProviderActivator.class)
-public final class RIBActivator extends AbstractRIBExtensionProviderActivator {
+@Component(immediate = true, property = "type=org.opendaylight.protocol.bgp.evpn.impl.RIBActivator")
+@MetaInfServices
+public final class RIBActivator implements RIBExtensionProviderActivator {
@Inject
public RIBActivator() {
// Exposed for DI
}
@Override
- protected List<Registration> startRIBExtensionProviderImpl(
- final RIBExtensionProviderContext context,
+ public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
final BindingNormalizedNodeSerializer mappingService) {
return List.of(context.registerRIBSupport(L2vpnAddressFamily.class, EvpnSubsequentAddressFamily.class,
- EvpnRibSupport.getInstance(mappingService)));
+ new EvpnRibSupport(mappingService)));
}
}
\ No newline at end of file
@Override
public void setUp() throws Exception {
super.setUp();
- this.ribSupport = EvpnRibSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new EvpnRibSupport(this.adapter.currentSerializer());
setUpTestCustomizer(this.ribSupport);
}
assertNull(context.getRIBSupport(L2vpnAddressFamily.class, EvpnSubsequentAddressFamily.class));
ribAct.startRIBExtensionProvider(context, this.context.currentSerializer());
assertNotNull(context.getRIBSupport(L2vpnAddressFamily.class, EvpnSubsequentAddressFamily.class));
- ribAct.close();
}
}
\ No newline at end of file
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
import org.opendaylight.protocol.bgp.flowspec.l3vpn.ipv4.FlowspecL3vpnIpv4RIBSupport;
import org.opendaylight.protocol.bgp.flowspec.l3vpn.ipv6.FlowspecL3vpnIpv6RIBSupport;
-import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120.FlowspecL3vpnSubsequentAddressFamily;
import org.osgi.service.component.annotations.Component;
@Singleton
-@Component(immediate = true, service = RIBExtensionProviderActivator.class,
- property = "type=org.opendaylight.protocol.bgp.flowspec.RIBActivator")
-@MetaInfServices(value = RIBExtensionProviderActivator.class)
-public final class RIBActivator extends AbstractRIBExtensionProviderActivator {
+@Component(immediate = true, property = "type=org.opendaylight.protocol.bgp.flowspec.RIBActivator")
+@MetaInfServices
+public final class RIBActivator implements RIBExtensionProviderActivator {
@Inject
public RIBActivator() {
// Exposed for DI
}
@Override
- protected List<Registration> startRIBExtensionProviderImpl(final RIBExtensionProviderContext context,
+ public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
final BindingNormalizedNodeSerializer mappingService) {
return List.of(
context.registerRIBSupport(Ipv4AddressFamily.class, FlowspecSubsequentAddressFamily.class,
* Class supporting IPv4 unicast RIBs.
*/
final class IPv4RIBSupport extends AbstractIPRibSupport<Ipv4RoutesCase, Ipv4Routes, Ipv4Route, Ipv4RouteKey> {
-
private static final Ipv4Routes EMPTY_CONTAINER = new Ipv4RoutesBuilder().build();
- private static IPv4RIBSupport SINGLETON = null;
- private IPv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ IPv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(
mappingService,
Ipv4PrefixAndPathId.class,
Ipv4Prefixes.QNAME);
}
- static synchronized IPv4RIBSupport getInstance(final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new IPv4RIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
private List<Ipv4Prefixes> extractPrefixes(final Collection<MapEntryNode> routes) {
final List<Ipv4Prefixes> prefs = new ArrayList<>(routes.size());
for (final MapEntryNode route : routes) {
* Class supporting IPv6 unicast RIBs.
*/
final class IPv6RIBSupport extends AbstractIPRibSupport<Ipv6RoutesCase, Ipv6Routes, Ipv6Route, Ipv6RouteKey> {
-
private static final Ipv6Routes EMPTY_CONTAINER = new Ipv6RoutesBuilder().build();
- private static IPv6RIBSupport SINGLETON;
- private IPv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ IPv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.Ipv6Prefix.class,
Ipv6AddressFamily.class,
Ipv6Prefixes.QNAME);
}
- static synchronized IPv6RIBSupport getInstance(final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new IPv6RIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
@Override
protected DestinationType buildDestination(final Collection<MapEntryNode> routes) {
return new DestinationIpv6CaseBuilder().setDestinationIpv6(new DestinationIpv6Builder()
import javax.inject.Singleton;
import org.kohsuke.MetaInfServices;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
import org.osgi.service.component.annotations.Component;
@Singleton
-@Component(immediate = true, service = RIBExtensionProviderActivator.class,
- property = "type=org.opendaylight.protocol.bgp.inet.RIBActivator")
-@MetaInfServices(value = RIBExtensionProviderActivator.class)
-public final class RIBActivator extends AbstractRIBExtensionProviderActivator {
+@Component(immediate = true, property = "type=org.opendaylight.protocol.bgp.inet.RIBActivator")
+@MetaInfServices
+public final class RIBActivator implements RIBExtensionProviderActivator {
@Inject
public RIBActivator() {
// Exposed for DI
}
@Override
- protected List<Registration> startRIBExtensionProviderImpl(final RIBExtensionProviderContext context,
+ public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
final BindingNormalizedNodeSerializer mappingService) {
return List.of(
context.registerRIBSupport(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class,
- IPv4RIBSupport.getInstance(mappingService)),
+ new IPv4RIBSupport(mappingService)),
context.registerRIBSupport(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class,
- IPv6RIBSupport.getInstance(mappingService)));
+ new IPv6RIBSupport(mappingService)));
}
}
@Override
public void setUp() throws Exception {
super.setUp();
- this.ribSupport = IPv4RIBSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new IPv4RIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(this.ribSupport);
}
@Override
public void setUp() throws Exception {
super.setUp();
- this.ribSupport = IPv6RIBSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new IPv6RIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(this.ribSupport);
}
import org.opendaylight.protocol.bgp.l3vpn.mcast.L3VpnMcastIpv6RIBSupport;
import org.opendaylight.protocol.bgp.l3vpn.unicast.ipv4.VpnIpv4RIBSupport;
import org.opendaylight.protocol.bgp.l3vpn.unicast.ipv6.VpnIpv6RIBSupport;
-import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast.rev180417.McastMplsLabeledVpnSubsequentAddressFamily;
* @author Claudio D. Gasparini
*/
@Singleton
-@Component(immediate = true, service = RIBExtensionProviderActivator.class,
- property = "type=org.opendaylight.protocol.bgp.l3vpn.RIBActivator")
-@MetaInfServices(value = RIBExtensionProviderActivator.class)
-public final class RIBActivator extends AbstractRIBExtensionProviderActivator {
+@Component(immediate = true, property = "type=org.opendaylight.protocol.bgp.l3vpn.RIBActivator")
+@MetaInfServices
+public final class RIBActivator implements RIBExtensionProviderActivator {
@Inject
public RIBActivator() {
// Exposed for DI
}
@Override
- protected List<Registration> startRIBExtensionProviderImpl(final RIBExtensionProviderContext context,
+ public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
final BindingNormalizedNodeSerializer mappingService) {
return List.of(
context.registerRIBSupport(Ipv4AddressFamily.class, MplsLabeledVpnSubsequentAddressFamily.class,
- VpnIpv4RIBSupport.getInstance(mappingService)),
+ new VpnIpv4RIBSupport(mappingService)),
context.registerRIBSupport(Ipv6AddressFamily.class, MplsLabeledVpnSubsequentAddressFamily.class,
- VpnIpv6RIBSupport.getInstance(mappingService)),
+ new VpnIpv6RIBSupport(mappingService)),
context.registerRIBSupport(Ipv4AddressFamily.class, McastMplsLabeledVpnSubsequentAddressFamily.class,
- L3VpnMcastIpv4RIBSupport.getInstance(mappingService)),
+ new L3VpnMcastIpv4RIBSupport(mappingService)),
context.registerRIBSupport(Ipv6AddressFamily.class, McastMplsLabeledVpnSubsequentAddressFamily.class,
- L3VpnMcastIpv6RIBSupport.getInstance(mappingService)));
+ new L3VpnMcastIpv6RIBSupport(mappingService)));
}
}
public final class L3VpnMcastIpv4RIBSupport
extends AbstractL3vpnMcastIpRIBSupport<L3vpnMcastRoutesIpv4Case, L3vpnMcastRoutesIpv4> {
private static final L3vpnMcastRoutesIpv4 EMPTY_CONTAINER = new L3vpnMcastRoutesIpv4Builder().build();
- private static L3VpnMcastIpv4RIBSupport SINGLETON;
-
- private L3VpnMcastIpv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ public L3VpnMcastIpv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
L3vpnMcastRoutesIpv4Case.class, L3vpnMcastRoutesIpv4Case.QNAME,
L3vpnMcastRoutesIpv4.class,
L3vpnMcastDestination.QNAME);
}
- public static synchronized L3VpnMcastIpv4RIBSupport getInstance(
- final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new L3VpnMcastIpv4RIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
-
@Override
protected DestinationL3vpnMcastIpv4AdvertizedCase buildDestination(final Collection<MapEntryNode> routes) {
return new DestinationL3vpnMcastIpv4AdvertizedCaseBuilder().setDestinationIpv4L3vpnMcast(
public final class L3VpnMcastIpv6RIBSupport
extends AbstractL3vpnMcastIpRIBSupport<L3vpnMcastRoutesIpv6Case, L3vpnMcastRoutesIpv6> {
private static final L3vpnMcastRoutesIpv6 EMPTY_CONTAINER = new L3vpnMcastRoutesIpv6Builder().build();
- private static L3VpnMcastIpv6RIBSupport SINGLETON;
-
- private L3VpnMcastIpv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ public L3VpnMcastIpv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
L3vpnMcastRoutesIpv6Case.class, L3vpnMcastRoutesIpv6Case.QNAME,
L3vpnMcastRoutesIpv6.class,
L3vpnMcastDestination.QNAME);
}
- public static synchronized L3VpnMcastIpv6RIBSupport getInstance(
- final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new L3VpnMcastIpv6RIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
-
@Override
protected DestinationL3vpnMcastIpv6AdvertizedCase buildDestination(final Collection<MapEntryNode> routes) {
return new DestinationL3vpnMcastIpv6AdvertizedCaseBuilder().setDestinationIpv6L3vpnMcast(
public final class VpnIpv4RIBSupport extends AbstractVpnRIBSupport<VpnIpv4RoutesCase, VpnIpv4Routes> {
private static final VpnIpv4Routes EMPTY_CONTAINER = new VpnIpv4RoutesBuilder().build();
- private static VpnIpv4RIBSupport SINGLETON;
/**
* Default constructor. Requires the QName of the container augmented under the routes choice
* the same model which populates it with route grouping instantiation, and by extension with
* the route attributes container.
*/
- private VpnIpv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ public VpnIpv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
VpnIpv4RoutesCase.class,
VpnIpv4Routes.class, VpnIpv4Routes.QNAME,
VpnIpv4Destination.QNAME);
}
- public static synchronized VpnIpv4RIBSupport getInstance(final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new VpnIpv4RIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
@Override
protected IpPrefix createPrefix(final String prefix) {
return new IpPrefix(new Ipv4Prefix(prefix));
public final class VpnIpv6RIBSupport extends AbstractVpnRIBSupport<VpnIpv6RoutesCase, VpnIpv6Routes> {
private static final VpnIpv6Routes EMPTY_CONTAINER = new VpnIpv6RoutesBuilder().build();
- private static VpnIpv6RIBSupport SINGLETON;
/**
* Default constructor. Requires the QName of the container augmented under the routes choice
* the same model which populates it with route grouping instantiation, and by extension with
* the route attributes container.
*/
- private VpnIpv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ public VpnIpv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
VpnIpv6RoutesCase.class,
VpnIpv6Routes.class, VpnIpv6Routes.QNAME,
VpnIpv6Destination.QNAME);
}
- public static synchronized VpnIpv6RIBSupport getInstance(final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new VpnIpv6RIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
@Override
protected IpPrefix createPrefix(final String prefix) {
return new IpPrefix(new Ipv6Prefix(prefix));
ribAct.startRIBExtensionProvider(context, this.context.currentSerializer());
assertNotNull(context.getRIBSupport(Ipv4AddressFamily.class, McastMplsLabeledVpnSubsequentAddressFamily.class));
assertNotNull(context.getRIBSupport(Ipv6AddressFamily.class, McastMplsLabeledVpnSubsequentAddressFamily.class));
- ribAct.close();
}
}
\ No newline at end of file
@Override
public void setUp() throws Exception {
super.setUp();
- ribSupport = L3VpnMcastIpv4RIBSupport.getInstance(this.adapter.currentSerializer());
+ ribSupport = new L3VpnMcastIpv4RIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(ribSupport);
}
@Override
public void setUp() throws Exception {
super.setUp();
- ribSupport = L3VpnMcastIpv6RIBSupport.getInstance(this.adapter.currentSerializer());
+ ribSupport = new L3VpnMcastIpv6RIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(ribSupport);
}
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.protocol.bgp.l3vpn.unicast.ipv4;
import static org.junit.Assert.assertEquals;
@Override
public void setUp() throws Exception {
super.setUp();
- this.ribSupport = VpnIpv4RIBSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new VpnIpv4RIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(this.ribSupport);
}
@Override
public void setUp() throws Exception {
super.setUp();
- this.ribSupport = VpnIpv6RIBSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new VpnIpv6RIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(this.ribSupport);
}
public final class LabeledUnicastIpv4RIBSupport
extends AbstractLabeledUnicastRIBSupport<LabeledUnicastRoutesCase, LabeledUnicastRoutes> {
private static final LabeledUnicastRoutes EMPTY_CONTAINER = new LabeledUnicastRoutesBuilder().build();
- private static LabeledUnicastIpv4RIBSupport SINGLETON;
- private LabeledUnicastIpv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ public LabeledUnicastIpv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
LabeledUnicastRoutesCase.class,
LabeledUnicastRoutes.class,
DestinationLabeledUnicast.QNAME);
}
- static synchronized LabeledUnicastIpv4RIBSupport getInstance(final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new LabeledUnicastIpv4RIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
@Override
protected DestinationType buildDestination(final Collection<MapEntryNode> routes) {
return new DestinationLabeledUnicastCaseBuilder().setDestinationLabeledUnicast(
final class LabeledUnicastIpv6RIBSupport
extends AbstractLabeledUnicastRIBSupport<LabeledUnicastIpv6RoutesCase, LabeledUnicastIpv6Routes> {
private static final LabeledUnicastIpv6Routes EMPTY_CONTAINER = new LabeledUnicastIpv6RoutesBuilder().build();
- private static LabeledUnicastIpv6RIBSupport SINGLETON;
- private LabeledUnicastIpv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ LabeledUnicastIpv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
LabeledUnicastIpv6RoutesCase.class,
LabeledUnicastIpv6Routes.class,
DestinationIpv6LabeledUnicast.QNAME);
}
- static synchronized LabeledUnicastIpv6RIBSupport getInstance(final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new LabeledUnicastIpv6RIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
@Override
protected DestinationType buildDestination(final Collection<MapEntryNode> routes) {
return new DestinationIpv6LabeledUnicastCaseBuilder().setDestinationIpv6LabeledUnicast(
import javax.inject.Singleton;
import org.kohsuke.MetaInfServices;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.LabeledUnicastSubsequentAddressFamily;
import org.osgi.service.component.annotations.Component;
@Singleton
-@Component(immediate = true, service = RIBExtensionProviderActivator.class,
- property = "type=org.opendaylight.protocol.bgp.labeled.unicast.RIBActivator")
-@MetaInfServices(value = RIBExtensionProviderActivator.class)
-public class RIBActivator extends AbstractRIBExtensionProviderActivator {
+@Component(immediate = true, property = "type=org.opendaylight.protocol.bgp.labeled.unicast.RIBActivator")
+@MetaInfServices
+public class RIBActivator implements RIBExtensionProviderActivator {
@Inject
public RIBActivator() {
// Exposed for DI
}
@Override
- protected List<Registration> startRIBExtensionProviderImpl(final RIBExtensionProviderContext context,
+ public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
final BindingNormalizedNodeSerializer mappingService) {
return List.of(
context.registerRIBSupport(Ipv4AddressFamily.class, LabeledUnicastSubsequentAddressFamily.class,
- LabeledUnicastIpv4RIBSupport.getInstance(mappingService)),
+ new LabeledUnicastIpv4RIBSupport(mappingService)),
context.registerRIBSupport(Ipv6AddressFamily.class, LabeledUnicastSubsequentAddressFamily.class,
- LabeledUnicastIpv6RIBSupport.getInstance(mappingService)));
+ new LabeledUnicastIpv6RIBSupport(mappingService)));
}
}
@Override
public void setUp() throws Exception {
super.setUp();
- this.ribSupport = LabeledUnicastIpv4RIBSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new LabeledUnicastIpv4RIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(this.ribSupport);
}
@Override
public void setUp() throws Exception {
super.setUp();
- this.ribSupport = LabeledUnicastIpv6RIBSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new LabeledUnicastIpv6RIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(this.ribSupport);
}
private static final Logger LOG = LoggerFactory.getLogger(LinkstateRIBSupport.class);
private static final LinkstateRoutes EMPTY_CONTAINER = new LinkstateRoutesBuilder().build();
private static final NodeIdentifier NLRI_ROUTES_LIST = NodeIdentifier.create(CLinkstateDestination.QNAME);
- private static LinkstateRIBSupport SINGLETON;
- private LinkstateRIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ public LinkstateRIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(
mappingService,
LinkstateRoutesCase.class,
DestinationLinkstate.QNAME);
}
- public static synchronized LinkstateRIBSupport getInstance(final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new LinkstateRIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
private NodeIdentifierWithPredicates createRouteKey(final UnkeyedListEntryNode linkstate) {
final ByteBuf buffer = Unpooled.buffer();
final CLinkstateDestination cLinkstateDestination = LinkstateNlriParser.extractLinkstateDestination(linkstate);
import javax.inject.Singleton;
import org.kohsuke.MetaInfServices;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.LinkstateAddressFamily;
* Activator for registering Linkstate AFI/SAFI to RIB.
*/
@Singleton
-@Component(immediate = true, service = RIBExtensionProviderActivator.class,
- property = "type=org.opendaylight.protocol.bgp.linkstate.impl.RIBActivator")
-@MetaInfServices(value = RIBExtensionProviderActivator.class)
-public final class RIBActivator extends AbstractRIBExtensionProviderActivator {
+@Component(immediate = true, property = "type=org.opendaylight.protocol.bgp.linkstate.impl.RIBActivator")
+@MetaInfServices
+public final class RIBActivator implements RIBExtensionProviderActivator {
@Inject
public RIBActivator() {
// Exposed for DI
}
@Override
- protected List<Registration> startRIBExtensionProviderImpl(final RIBExtensionProviderContext context,
+ public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
final BindingNormalizedNodeSerializer mappingService) {
return List.of(context.registerRIBSupport(LinkstateAddressFamily.class,
- LinkstateSubsequentAddressFamily.class, LinkstateRIBSupport.getInstance(mappingService)));
+ LinkstateSubsequentAddressFamily.class, new LinkstateRIBSupport(mappingService)));
}
}
ribAct.startRIBExtensionProvider(context, this.context.currentSerializer());
assertNotNull(context.getRIBSupport(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class));
-
- ribAct.close();
}
}
@Override
public void setUp() throws Exception {
super.setUp();
- this.ribSupport = LinkstateRIBSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new LinkstateRIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(ribSupport);
}
*/
final class MvpnIpv4RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesIpv4Case, MvpnRoutesIpv4> {
private static final MvpnRoutesIpv4 EMPTY_CONTAINER = new MvpnRoutesIpv4Builder().build();
- private static MvpnIpv4RIBSupport SINGLETON;
- private MvpnIpv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ MvpnIpv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
MvpnRoutesIpv4Case.class,
MvpnRoutesIpv4.class,
MvpnDestination.QNAME);
}
- static synchronized MvpnIpv4RIBSupport getInstance(final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new MvpnIpv4RIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
private List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn
.destination.MvpnDestination> extractRoutes(final Collection<MapEntryNode> routes) {
return routes.stream().map(this::extractDestinations).collect(Collectors.toList());
*/
final class MvpnIpv6RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesIpv6Case, MvpnRoutesIpv6> {
private static final MvpnRoutesIpv6 EMPTY_CONTAINER = new MvpnRoutesIpv6Builder().build();
- private static MvpnIpv6RIBSupport SINGLETON;
- private MvpnIpv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ MvpnIpv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
MvpnRoutesIpv6Case.class,
MvpnRoutesIpv6.class,
MvpnDestination.QNAME);
}
- static synchronized MvpnIpv6RIBSupport getInstance(final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new MvpnIpv6RIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
private List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn
.destination.MvpnDestination> extractRoutes(final Collection<MapEntryNode> routes) {
return routes.stream().map(this::extractDestination).collect(Collectors.toList());
import javax.inject.Singleton;
import org.kohsuke.MetaInfServices;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev200120.McastVpnSubsequentAddressFamily;
* @author Claudio D. Gasparini
*/
@Singleton
-@Component(immediate = true, service = RIBExtensionProviderActivator.class,
- property = "type=org.opendaylight.protocol.bgp.mvpn.impl.RIBActivator")
-@MetaInfServices(value = RIBExtensionProviderActivator.class)
-public final class RIBActivator extends AbstractRIBExtensionProviderActivator {
+@Component(immediate = true, property = "type=org.opendaylight.protocol.bgp.mvpn.impl.RIBActivator")
+@MetaInfServices
+public final class RIBActivator implements RIBExtensionProviderActivator {
@Inject
public RIBActivator() {
// Exposed for DI
}
@Override
- protected List<Registration> startRIBExtensionProviderImpl(final RIBExtensionProviderContext context,
+ public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
final BindingNormalizedNodeSerializer mappingService) {
return List.of(
context.registerRIBSupport(Ipv4AddressFamily.class, McastVpnSubsequentAddressFamily.class,
- MvpnIpv4RIBSupport.getInstance(mappingService)),
+ new MvpnIpv4RIBSupport(mappingService)),
context.registerRIBSupport(Ipv6AddressFamily.class, McastVpnSubsequentAddressFamily.class,
- MvpnIpv6RIBSupport.getInstance(mappingService)));
+ new MvpnIpv6RIBSupport(mappingService)));
}
}
@Override
public void setUp() throws Exception {
super.setUp();
- this.ribSupport = MvpnIpv4RIBSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new MvpnIpv4RIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(this.ribSupport);
NlriActivator.registerNlriParsers(new ArrayList<>());
}
@Override
public void setUp() throws Exception {
super.setUp();
- this.ribSupport = MvpnIpv6RIBSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new MvpnIpv6RIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(this.ribSupport);
NlriActivator.registerNlriParsers(new ArrayList<>());
}
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.protocol.bgp.mvpn.impl;
import static org.junit.Assert.assertNotNull;
ribAct.startRIBExtensionProvider(context, this.context.currentSerializer());
assertNotNull(context.getRIBSupport(Ipv4AddressFamily.class, McastVpnSubsequentAddressFamily.class));
assertNotNull(context.getRIBSupport(Ipv6AddressFamily.class, McastVpnSubsequentAddressFamily.class));
- ribAct.close();
}
}
\ No newline at end of file
private static final RouteTargetConstrainRoutes EMPTY_CONTAINER
= new RouteTargetConstrainRoutesBuilder().setRouteTargetConstrainRoute(Collections.emptyList()).build();
private static final String ORIGIN_AS = "origin-as";
- private static RouteTargetConstrainRIBSupport SINGLETON;
private final ImmutableCollection<Class<? extends BindingObject>> cacheableNlriObjects
= ImmutableSet.of(RouteTargetConstrainRoutesCase.class);
private final NodeIdentifier originAsNid;
*
* @param mappingService Serialization service
*/
- private RouteTargetConstrainRIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+ public RouteTargetConstrainRIBSupport(final BindingNormalizedNodeSerializer mappingService) {
super(mappingService,
RouteTargetConstrainRoutesCase.class,
RouteTargetConstrainRoutes.class,
this.originAsNid = new NodeIdentifier(QName.create(routeQName(), ORIGIN_AS).intern());
}
- public static synchronized RouteTargetConstrainRIBSupport getInstance(
- final BindingNormalizedNodeSerializer mappingService) {
- if (SINGLETON == null) {
- SINGLETON = new RouteTargetConstrainRIBSupport(mappingService);
- }
- return SINGLETON;
- }
-
@Override
public ImmutableCollection<Class<? extends BindingObject>> cacheableNlriObjects() {
return this.cacheableNlriObjects;
import javax.inject.Singleton;
import org.kohsuke.MetaInfServices;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
import org.opendaylight.protocol.bgp.route.targetcontrain.impl.RouteTargetConstrainRIBSupport;
* @author Claudio D. Gasparini
*/
@Singleton
-@Component(immediate = true, service = RIBExtensionProviderActivator.class,
+@Component(immediate = true,
property = "type=org.opendaylight.protocol.bgp.route.targetcontrain.impl.activators.RIBActivator")
-@MetaInfServices(value = RIBExtensionProviderActivator.class)
-public final class RIBActivator extends AbstractRIBExtensionProviderActivator {
+@MetaInfServices
+public final class RIBActivator implements RIBExtensionProviderActivator {
@Inject
public RIBActivator() {
// Exposed for DI
}
@Override
- protected List<Registration> startRIBExtensionProviderImpl(final RIBExtensionProviderContext context,
+ public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
final BindingNormalizedNodeSerializer mappingService) {
return List.of(
context.registerRIBSupport(Ipv4AddressFamily.class, RouteTargetConstrainSubsequentAddressFamily.class,
- RouteTargetConstrainRIBSupport.getInstance(mappingService)));
+ new RouteTargetConstrainRIBSupport(mappingService)));
}
}
\ No newline at end of file
public void setUp() throws Exception {
super.setUp();
NlriActivator.registerNlriParsers(new ArrayList<>());
- this.ribSupport = RouteTargetConstrainRIBSupport.getInstance(this.adapter.currentSerializer());
+ this.ribSupport = new RouteTargetConstrainRIBSupport(this.adapter.currentSerializer());
setUpTestCustomizer(this.ribSupport);
}
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.protocol.bgp.route.targetcontrain.impl.activators;
import static org.junit.Assert.assertNotNull;
ribAct.startRIBExtensionProvider(context, this.context.currentSerializer());
assertNotNull(context.getRIBSupport(Ipv4AddressFamily.class,
RouteTargetConstrainSubsequentAddressFamily.class));
- ribAct.close();
}
}
\ No newline at end of file
@Mock
protected ClusterSingletonServiceProvider clusterSingletonServiceProvider;
BGPDispatcherImpl serverDispatcher;
- RIBExtensionProviderContext ribExtension;
- private RIBActivator ribActivator;
+ final RIBExtensionProviderContext ribExtension = new SimpleRIBExtensionProviderContext();
+ private final RIBActivator ribActivator = new RIBActivator();
private BGPActivator bgpActivator;
private NioEventLoopGroup worker;
private NioEventLoopGroup boss;
@Before
public void setUp() throws Exception {
super.setUp();
- this.ribActivator = new RIBActivator();
- this.ribExtension = new SimpleRIBExtensionProviderContext();
this.ribActivator.startRIBExtensionProvider(this.ribExtension, this.mappingService.currentSerializer());
this.worker.shutdownGracefully(0, 0, TimeUnit.SECONDS);
this.boss.shutdownGracefully(0, 0, TimeUnit.SECONDS);
}
- this.ribActivator.close();
- this.inetActivator.close();
this.bgpActivator.close();
this.clientDispatchers.forEach(BGPDispatcherImpl::close);
this.clientDispatchers = null;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.Executor;
-import org.junit.After;
import org.junit.Before;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
static final QName PREFIX_QNAME = QName.create(Ipv4Route.QNAME, "prefix").intern();
private static final BgpId RIB_ID = new BgpId("127.0.0.1");
private RIBImpl rib;
- private RIBActivator a1;
+ private final RIBActivator a1 = new RIBActivator();
@Mock
private BGPDispatcher dispatcher;
localTables.add(new BgpTableTypeImpl(IPV6_AFI, SAFI));
final CurrentAdapterSerializer serializer = mappingService.currentSerializer();
- this.a1 = new RIBActivator();
this.a1.startRIBExtensionProvider(context, serializer);
mockedMethods();
return this.domTransWrite;
}
- @After
- public void tearDown() {
- this.a1.close();
- }
-
private class TestListenerRegistration implements ListenerRegistration<EventListener> {
@Override
public EventListener getInstance() {
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doReturn;
import static org.opendaylight.protocol.bgp.rib.impl.AbstractAddPathTest.AS_NUMBER;
import static org.opendaylight.protocol.bgp.rib.impl.AbstractAddPathTest.BGP_ID;
import static org.opendaylight.protocol.util.CheckUtil.readDataOperational;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutionException;
-import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.mockito.Mock;
-import org.mockito.Mockito;
import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer;
import org.opendaylight.protocol.bgp.inet.RIBActivator;
import org.opendaylight.protocol.bgp.mode.impl.base.BasePathSelectionModeFactory;
import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext;
import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
import org.opendaylight.protocol.bgp.rib.mock.BGPMock;
-import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator;
+import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
import org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContext;
import org.opendaylight.protocol.bgp.util.HexDumpBGPFileParser;
private static final InstanceIdentifier<BgpRib> BGP_IID = InstanceIdentifier.create(BgpRib.class);
private final IpAddressNoZone localAddress = new IpAddressNoZone(new Ipv4AddressNoZone("127.0.0.1"));
private BGPMock mock;
- private AbstractRIBExtensionProviderActivator baseact;
- private AbstractRIBExtensionProviderActivator lsact;
- private RIBExtensionProviderContext ext1;
- private RIBExtensionProviderContext ext2;
+ private final RIBExtensionProviderActivator baseact = new RIBActivator();
+ private final RIBExtensionProviderActivator lsact = new org.opendaylight.protocol.bgp.linkstate.impl.RIBActivator();
+ private final RIBExtensionProviderContext ext1 = new SimpleRIBExtensionProviderContext();
+ private final RIBExtensionProviderContext ext2 = new SimpleRIBExtensionProviderContext();
@Mock
private BGPDispatcher dispatcher;
private ConstantCodecsRegistry codecsRegistry;
this.mock = new BGPMock(new EventBus("test"), ServiceLoaderBGPExtensionProviderContext
.getSingletonInstance().getMessageRegistry(), Lists.newArrayList(fixMessages(bgpMessages)));
- Mockito.doReturn(GlobalEventExecutor.INSTANCE.newSucceededFuture(null)).when(this.dispatcher)
+ doReturn(GlobalEventExecutor.INSTANCE.newSucceededFuture(null)).when(this.dispatcher)
.createReconnectingClient(any(InetSocketAddress.class), any(InetSocketAddress.class),
anyInt(), any(KeyMapping.class));
- this.ext1 = new SimpleRIBExtensionProviderContext();
- this.ext2 = new SimpleRIBExtensionProviderContext();
- this.baseact = new RIBActivator();
- this.lsact = new org.opendaylight.protocol.bgp.linkstate.impl.RIBActivator();
-
final CurrentAdapterSerializer serializer = mappingService.currentSerializer();
this.baseact.startRIBExtensionProvider(this.ext1, serializer);
this.lsact.startRIBExtensionProvider(this.ext2, serializer);
this.codecsRegistry = new ConstantCodecsRegistry(serializer);
}
- @After
- public void tearDown() {
- this.lsact.close();
- this.baseact.close();
- }
-
@Test
public void testWithLinkstate() throws InterruptedException, ExecutionException {
final List<BgpTableType> tables = ImmutableList.of(new BgpTableTypeImpl(LinkstateAddressFamily.class,
<artifactId>mdsal-binding-dom-codec-api</artifactId>
</dependency>
<dependency>
- <groupId>org.checkerframework</groupId>
- <artifactId>checker-qual</artifactId>
+ <groupId>org.kohsuke.metainf-services</groupId>
+ <artifactId>metainf-services</artifactId>
</dependency>
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.cmpn</artifactId>
+ </dependency>
+
<!-- Test dependencies -->
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.protocol.bgp.rib.spi;
-
-import static com.google.common.base.Preconditions.checkState;
-import static java.util.Objects.requireNonNull;
-
-import java.util.List;
-import org.checkerframework.checker.lock.qual.GuardedBy;
-import org.checkerframework.checker.lock.qual.Holding;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.opendaylight.yangtools.concepts.Registration;
-
-public abstract class AbstractRIBExtensionProviderActivator implements AutoCloseable, RIBExtensionProviderActivator {
- @GuardedBy("this")
- private List<? extends Registration> registrations;
-
- @Holding("this")
- protected abstract List<? extends Registration> startRIBExtensionProviderImpl(
- RIBExtensionProviderContext context, BindingNormalizedNodeSerializer mappingService);
-
- @Override
- public final synchronized void startRIBExtensionProvider(
- final RIBExtensionProviderContext context,
- final BindingNormalizedNodeSerializer mappingService) {
- checkState(this.registrations == null);
-
- this.registrations = requireNonNull(startRIBExtensionProviderImpl(context, mappingService));
- }
-
- @Override
- public final synchronized void stopRIBExtensionProvider() {
- if (this.registrations == null) {
- return;
- }
-
- this.registrations.forEach(Registration::close);
- this.registrations = null;
- }
-
- @Override
- public final void close() {
- stopRIBExtensionProvider();
- }
-}
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.protocol.bgp.rib.spi;
+
+import com.google.common.annotations.VisibleForTesting;
+import java.util.Arrays;
+import java.util.ServiceLoader;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.eclipse.jdt.annotation.NonNull;
+import org.kohsuke.MetaInfServices;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
+
+@Singleton
+@MetaInfServices(value = RIBExtensionConsumerContext.class)
+public final class DefaultRIBExtensionConsumerContext extends ForwardingRIBExtensionConsumerContext {
+ private final @NonNull SimpleRIBExtensionProviderContext delegate = new SimpleRIBExtensionProviderContext();
+
+ public DefaultRIBExtensionConsumerContext() {
+ this(ServiceLoader.load(BindingNormalizedNodeSerializer.class).findFirst().orElseThrow(
+ () -> new IllegalStateException("No BindingNormalizedNodeSerializer found")));
+ }
+
+ public DefaultRIBExtensionConsumerContext(final BindingNormalizedNodeSerializer mappingService) {
+ this(mappingService, ServiceLoader.load(RIBExtensionProviderActivator.class));
+ }
+
+ @VisibleForTesting
+ public DefaultRIBExtensionConsumerContext(final BindingNormalizedNodeSerializer mappingService,
+ final RIBExtensionProviderActivator... extensionActivators) {
+ this(mappingService, Arrays.asList(extensionActivators));
+ }
+
+ @Inject
+ public DefaultRIBExtensionConsumerContext(final BindingNormalizedNodeSerializer mappingService,
+ final Iterable<RIBExtensionProviderActivator> extensionActivators) {
+ extensionActivators.forEach(activator -> activator.startRIBExtensionProvider(delegate, mappingService));
+ }
+
+ @Override
+ RIBExtensionProviderContext delegate() {
+ return delegate;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.protocol.bgp.rib.spi;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.Route;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily;
+import org.opendaylight.yangtools.yang.binding.ChildOf;
+import org.opendaylight.yangtools.yang.binding.ChoiceIn;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.Identifiable;
+import org.opendaylight.yangtools.yang.binding.Identifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
+
+abstract class ForwardingRIBExtensionConsumerContext implements RIBExtensionConsumerContext {
+ @Override
+ public final <C extends Routes & DataObject & ChoiceIn<Tables>, S extends ChildOf<C>,
+ R extends Route & ChildOf<S> & Identifiable<I>, I extends Identifier<R>>
+ RIBSupport<C, S, R, I> getRIBSupport(final TablesKey key) {
+ return delegate().getRIBSupport(key);
+ }
+
+ @Override
+ public final <C extends Routes & DataObject & ChoiceIn<Tables>, S extends ChildOf<C>,
+ R extends Route & ChildOf<S> & Identifiable<I>, I extends Identifier<R>>
+ RIBSupport<C, S, R, I> getRIBSupport(final Class<? extends AddressFamily> afi,
+ final Class<? extends SubsequentAddressFamily> safi) {
+ return delegate().getRIBSupport(afi, safi);
+ }
+
+ @Override
+ public final <C extends Routes & DataObject & ChoiceIn<Tables>, S extends ChildOf<C>,
+ R extends Route & ChildOf<S> & Identifiable<I>, I extends Identifier<R>>
+ RIBSupport<C, S, R, I> getRIBSupport(final NodeIdentifierWithPredicates key) {
+ return delegate().getRIBSupport(key);
+ }
+
+ abstract @NonNull RIBExtensionProviderContext delegate();
+}
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.protocol.bgp.rib.spi;
+
+import static com.google.common.base.Verify.verifyNotNull;
+
+import java.util.List;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
+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.osgi.service.component.annotations.ReferencePolicyOption;
+
+@Component(immediate = true, service = RIBExtensionConsumerContext.class)
+public final class OSGiRIBExtensionConsumerContext extends ForwardingRIBExtensionConsumerContext {
+ @Reference(policyOption = ReferencePolicyOption.GREEDY)
+ List<RIBExtensionProviderActivator> extensionActivators;
+ @Reference
+ BindingNormalizedNodeSerializer mappingCodec;
+
+ private SimpleRIBExtensionProviderContext delegate = null;
+
+ @Activate
+ void activate() {
+ final SimpleRIBExtensionProviderContext local = new SimpleRIBExtensionProviderContext();
+ extensionActivators.forEach(activator -> activator.startRIBExtensionProvider(local, mappingCodec));
+ delegate = local;
+ }
+
+ @Deactivate
+ void deactivate() {
+ delegate = null;
+ }
+
+ @Override
+ RIBExtensionProviderContext delegate() {
+ return verifyNotNull(delegate);
+ }
+}
*/
package org.opendaylight.protocol.bgp.rib.spi;
+import java.util.List;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
+import org.opendaylight.yangtools.concepts.Registration;
@NonNullByDefault
public interface RIBExtensionProviderActivator {
- void startRIBExtensionProvider(RIBExtensionProviderContext context, BindingNormalizedNodeSerializer mappingService);
- void stopRIBExtensionProvider();
+ List<Registration> startRIBExtensionProvider(RIBExtensionProviderContext context,
+ BindingNormalizedNodeSerializer mappingService);
}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.protocol.bgp.rib.spi;
-
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.annotations.VisibleForTesting;
-import java.util.ServiceLoader;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public final class ServiceLoaderRIBExtensionConsumerContext extends SimpleRIBExtensionProviderContext
- implements AutoCloseable {
- private static final Logger LOG = LoggerFactory.getLogger(ServiceLoaderRIBExtensionConsumerContext.class);
- private final ServiceLoader<RIBExtensionProviderActivator> loader;
-
- private ServiceLoaderRIBExtensionConsumerContext(final ServiceLoader<RIBExtensionProviderActivator> loader,
- final BindingNormalizedNodeSerializer mappingService) {
- this.loader = requireNonNull(loader);
-
- for (RIBExtensionProviderActivator a : loader) {
- a.startRIBExtensionProvider(this, mappingService);
- }
- }
-
- @VisibleForTesting
- static ServiceLoaderRIBExtensionConsumerContext createConsumerContext(
- final BindingNormalizedNodeSerializer mappingService) {
- final ServiceLoader<RIBExtensionProviderActivator> loader =
- ServiceLoader.load(RIBExtensionProviderActivator.class);
-
- return new ServiceLoaderRIBExtensionConsumerContext(loader, mappingService);
- }
-
- @Override
- @SuppressWarnings("checkstyle:IllegalCatch")
- public void close() {
- for (RIBExtensionProviderActivator a : this.loader) {
- try {
- a.stopRIBExtensionProvider();
- } catch (RuntimeException e) {
- LOG.warn("Stopping activator {} failed", a, e);
- }
- }
- }
-}
*/
package org.opendaylight.protocol.bgp.rib.spi;
+import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
-import com.google.common.base.Preconditions;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.Route;
final T support) {
final TablesKey key = new TablesKey(afi, safi);
final RIBSupport<?, ?, ?, ?> prev = this.supports.putIfAbsent(key, support);
- Preconditions.checkArgument(prev == null, "AFI %s SAFI %s is already registered with %s",
- afi, safi, prev);
+ checkArgument(prev == null, "AFI %s SAFI %s is already registered with %s", afi, safi, prev);
this.domSupports.put(RibSupportUtils.toYangTablesKey(afi, safi), support);
return new AbstractRIBSupportRegistration<>(support) {
@Override
+++ /dev/null
-/*
- * Copyright (c) 2016 Brocade Communications Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.protocol.bgp.rib.spi;
-
-import static java.util.Objects.requireNonNull;
-
-import java.util.List;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Starts and stops RIBExtensionProviderActivator instances for a RIBExtensionProviderContext.
- */
-public final class SimpleRIBExtensionProviderContextActivator implements AutoCloseable {
- private static final Logger LOG = LoggerFactory.getLogger(SimpleRIBExtensionProviderContextActivator.class);
-
- private final RIBExtensionProviderContext providerContext;
- private final List<RIBExtensionProviderActivator> extensionActivators;
- private final BindingNormalizedNodeSerializer mappingService;
-
- public SimpleRIBExtensionProviderContextActivator(final RIBExtensionProviderContext providerContext,
- final List<RIBExtensionProviderActivator> extensionActivators,
- final BindingNormalizedNodeSerializer mappingService) {
- this.providerContext = requireNonNull(providerContext);
- this.extensionActivators = requireNonNull(extensionActivators);
- this.mappingService = requireNonNull(mappingService);
- }
-
- public void start() {
- LOG.info("Starting {} RIBExtensionProviderActivator instances", this.extensionActivators.size());
-
- for (final RIBExtensionProviderActivator e : this.extensionActivators) {
- e.startRIBExtensionProvider(this.providerContext, this.mappingService);
- }
- }
-
- @Override
- public void close() {
- LOG.info("Stopping {} RIBExtensionProviderActivator instances", this.extensionActivators.size());
-
- for (final RIBExtensionProviderActivator e : this.extensionActivators) {
- e.stopRIBExtensionProvider();
- }
- }
-}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2016 Brocade Communications Systems, Inc. and others. All rights reserved.
-
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
- xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0">
-
- <!-- Obtains the specific list of RIBExtensionProviderActivator OSGi services announced via
- META-INF/services/org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator resources.
- -->
- <odl:specific-reference-list id="extensionActivators" interface="org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator"/>
- <odl:static-reference id="mappingCodec" interface="org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer"/>
-
- <bean id="extensionProviderContext" class="org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContext"/>
-
- <bean id="extensionProviderContextActivator" class="org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContextActivator"
- init-method="start" destroy-method="close">
- <argument ref="extensionProviderContext"/>
- <argument ref="extensionActivators"/>
- <argument ref="mappingCodec"/>
- </bean>
-
- <service ref="extensionProviderContext">
- <interfaces>
- <value>org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext</value>
- <value>org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext</value>
- </interfaces>
- </service>
-</blueprint>
--- /dev/null
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.protocol.bgp.rib.spi;
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+import org.junit.Test;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
+import org.opendaylight.yangtools.concepts.Registration;
+
+public class DefaultRIBExtensionProviderContextTest extends AbstractRIBActivatorTest {
+ private volatile boolean ribActivated;
+
+ @Test
+ public void test() {
+ new DefaultRIBExtensionConsumerContext(context.currentSerializer(), new RibActivator());
+ assertTrue(ribActivated);
+ }
+
+ private class RibActivator implements RIBExtensionProviderActivator {
+ @Override
+ public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
+ final BindingNormalizedNodeSerializer mappingService) {
+ ribActivated = true;
+ return List.of(() -> ribActivated = false);
+ }
+ }
+}
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.protocol.bgp.rib.spi;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Collections;
-import java.util.List;
-import org.junit.Test;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.opendaylight.yangtools.concepts.Registration;
-
-public class SimpleRIBExtensionProviderContextActivatorTest extends AbstractRIBActivatorTest {
- private static boolean RIBACTIVATED;
-
- @Test
- public void test() {
- final List<RIBExtensionProviderActivator> extensionActivators = Collections.singletonList(new RibActivator());
- final SimpleRIBExtensionProviderContextActivator activator =
- new SimpleRIBExtensionProviderContextActivator(new SimpleRIBExtensionProviderContext(),
- extensionActivators, context.currentSerializer());
- activator.start();
- assertTrue(RIBACTIVATED);
- activator.close();
- assertFalse(RIBACTIVATED);
- }
-
- private static class RibActivator extends AbstractRIBExtensionProviderActivator {
- @Override
- protected List<Registration> startRIBExtensionProviderImpl(final RIBExtensionProviderContext context,
- final BindingNormalizedNodeSerializer mappingService) {
- RIBACTIVATED = true;
- return Collections.singletonList(() -> RIBACTIVATED = false);
- }
- }
-}
\ No newline at end of file
*/
package org.opendaylight.protocol.bgp.rib.spi;
-import java.util.Collections;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.doReturn;
+
import java.util.List;
-import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
@Test
public void testExtensionProvider() {
final BindingNormalizedNodeSerializer codec = adapter.currentSerializer();
- final ServiceLoaderRIBExtensionConsumerContext ctx =
- ServiceLoaderRIBExtensionConsumerContext.createConsumerContext(codec);
- Assert.assertNull(ctx.getRIBSupport(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
- final TestActivator act = new TestActivator();
- act.startRIBExtensionProvider(ctx, codec);
- Assert.assertNotNull(ctx.getRIBSupport(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
- act.close();
- Assert.assertNull(ctx.getRIBSupport(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
- ctx.close();
+ var ctx = new DefaultRIBExtensionConsumerContext(codec);
+ assertNull(ctx.getRIBSupport(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
+
+ ctx = new DefaultRIBExtensionConsumerContext(codec, new TestActivator());
+ assertNotNull(ctx.getRIBSupport(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
}
- private final class TestActivator extends AbstractRIBExtensionProviderActivator {
+ private static final class TestActivator implements RIBExtensionProviderActivator {
@Override
- protected List<Registration> startRIBExtensionProviderImpl(final RIBExtensionProviderContext context,
+ public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
final BindingNormalizedNodeSerializer mappingService) {
final RIBSupport<?, ?, ?, ?> support = Mockito.mock(RIBSupport.class);
- Mockito.doReturn(Route.class).when(support).routesListClass();
- Mockito.doReturn(DataObject.class).when(support).routesContainerClass();
- Mockito.doReturn(DataObject.class).when(support).routesCaseClass();
- return Collections.singletonList(context.registerRIBSupport(Ipv4AddressFamily.class,
+ doReturn(Route.class).when(support).routesListClass();
+ doReturn(DataObject.class).when(support).routesContainerClass();
+ doReturn(DataObject.class).when(support).routesCaseClass();
+ return List.of(context.registerRIBSupport(Ipv4AddressFamily.class,
UnicastSubsequentAddressFamily.class, support));
}
}
private static final PeerId PEER_ID = new PeerId(PEER1.getValue());
private static final InstanceIdentifier<BmpMonitor> BMP_II = InstanceIdentifier.create(BmpMonitor.class);
private AdapterContext mappingService;
- private RIBActivator ribActivator;
+ private final RIBActivator ribActivator = new RIBActivator();
private BGPActivator bgpActivator;
private BmpActivator bmpActivator;
private BmpDispatcher dispatcher;
private BmpMonitoringStation bmpApp;
private BmpMessageRegistry msgRegistry;
- private RIBExtensionProviderContext ribExtension;
+ private final RIBExtensionProviderContext ribExtension = new SimpleRIBExtensionProviderContext();
private ClusterSingletonService singletonService;
private ClusterSingletonService singletonService2;
@Mock
doAnswer(invocationOnMock -> BmpMonitorImplTest.this.singletonService2.closeServiceInstance())
.when(this.singletonServiceRegistration2).close();
- this.ribActivator = new RIBActivator();
- this.ribExtension = new SimpleRIBExtensionProviderContext();
this.ribActivator.startRIBExtensionProvider(this.ribExtension, this.mappingService.currentSerializer());
this.bgpActivator = new BGPActivator();
@After
public void tearDown() throws Exception {
- this.ribActivator.close();
this.bgpActivator.close();
this.bmpActivator.close();
this.dispatcher.close();