Convert bgp-rib-spi to OSGi DS 73/93773/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 10 Nov 2020 20:57:09 +0000 (21:57 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 10 Nov 2020 23:28:34 +0000 (00:28 +0100)
This again is a plain whiteboard pattern, make the minimal changes
required to work with OSGi DS and other frameworks. Also makes
RIBExtensionProviderActivator implementations properly stateless,
taking out a chunk of static wiring out of various supports.

JIRA: BGPCEP-944
Change-Id: I5dfaf8562a3fc79ea4a8328e6b9db8b7d5537f86
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
56 files changed:
bgp/extensions/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupport.java
bgp/extensions/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/RIBActivator.java
bgp/extensions/evpn/src/test/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupportTest.java
bgp/extensions/evpn/src/test/java/org/opendaylight/protocol/bgp/evpn/impl/RIBActivatorTest.java
bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/RIBActivator.java
bgp/extensions/inet/src/main/java/org/opendaylight/protocol/bgp/inet/IPv4RIBSupport.java
bgp/extensions/inet/src/main/java/org/opendaylight/protocol/bgp/inet/IPv6RIBSupport.java
bgp/extensions/inet/src/main/java/org/opendaylight/protocol/bgp/inet/RIBActivator.java
bgp/extensions/inet/src/test/java/org/opendaylight/protocol/bgp/inet/IPv4RIBSupportTest.java
bgp/extensions/inet/src/test/java/org/opendaylight/protocol/bgp/inet/IPv6RIBSupportTest.java
bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/RIBActivator.java
bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3VpnMcastIpv4RIBSupport.java
bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3VpnMcastIpv6RIBSupport.java
bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv4/VpnIpv4RIBSupport.java
bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv6/VpnIpv6RIBSupport.java
bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/RIBActivatorTest.java
bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3vpnMcastIpv4RIBSupportTest.java
bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3vpnMcastIpv6RIBSupportTest.java
bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv4/VpnIpv4RIBSupportTest.java
bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv6/VpnIpv6RIBSupportTest.java
bgp/extensions/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv4RIBSupport.java
bgp/extensions/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv6RIBSupport.java
bgp/extensions/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/RIBActivator.java
bgp/extensions/labeled-unicast/src/test/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv4RIBSupportTest.java
bgp/extensions/labeled-unicast/src/test/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv6RIBSupportTest.java
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/LinkstateRIBSupport.java
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/RIBActivator.java
bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/ActivatorTest.java
bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/LinkstateRIBSupportTest.java
bgp/extensions/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv4RIBSupport.java
bgp/extensions/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupport.java
bgp/extensions/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/RIBActivator.java
bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv4RIBSupportTest.java
bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupportTest.java
bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/RIBActivatorTest.java
bgp/extensions/route-target/src/main/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/RouteTargetConstrainRIBSupport.java
bgp/extensions/route-target/src/main/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/activators/RIBActivator.java
bgp/extensions/route-target/src/test/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/RouteTargetConstrainRIBSupportTest.java
bgp/extensions/route-target/src/test/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/activators/RIBActivatorTest.java
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/AbstractRIBTestSetup.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java
bgp/rib-spi/pom.xml
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBExtensionProviderActivator.java [deleted file]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/DefaultRIBExtensionConsumerContext.java [new file with mode: 0644]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/ForwardingRIBExtensionConsumerContext.java [new file with mode: 0644]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/OSGiRIBExtensionConsumerContext.java [new file with mode: 0644]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBExtensionProviderActivator.java
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/ServiceLoaderRIBExtensionConsumerContext.java [deleted file]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContext.java
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContextActivator.java [deleted file]
bgp/rib-spi/src/main/resources/OSGI-INF/blueprint/bgp-rib-spi.xml [deleted file]
bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/DefaultRIBExtensionProviderContextTest.java [new file with mode: 0644]
bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContextActivatorTest.java [deleted file]
bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionTest.java
bmp/bmp-impl/src/test/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitorImplTest.java

index 89dc2a38630bf405bc5af38608ea2396825799e0..42be44f30ada1a8a8316cc503933388d1f37d158 100644 (file)
@@ -57,9 +57,8 @@ final class EvpnRibSupport extends AbstractRIBSupport<EvpnRoutesCase, EvpnRoutes
 
     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,
@@ -69,13 +68,6 @@ final class EvpnRibSupport extends AbstractRIBSupport<EvpnRoutesCase, EvpnRoutes
                 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
index 666a117f10f47c1c5d2e01c31110fd92dc3fdcb8..8d225adf677f57099063a440002ae7ed8fbff4d9 100644 (file)
@@ -12,7 +12,6 @@ import javax.inject.Inject;
 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;
@@ -21,20 +20,18 @@ import org.opendaylight.yangtools.concepts.Registration;
 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
index ec842d859d7751c73c3682ddf9ef386bc8e6cbee..c64de592cf5e7cd770f50f33c043a18d510b75ca 100644 (file)
@@ -97,7 +97,7 @@ public final class EvpnRibSupportTest extends AbstractRIBSupportTest<EvpnRoutesC
     @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);
     }
 
index 64c788a33694645829a3394fc828cd7122c67c58..fdb67d21daa916f4fa565012fc9b26d3f814b927 100644 (file)
@@ -25,6 +25,5 @@ public class RIBActivatorTest extends AbstractRIBActivatorTest {
         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
index d3b2d86ea2f1cf778aec2d1097e498efffade353..d81fb3987e0829367c85f0bd1ae5643e85745ee4 100644 (file)
@@ -14,7 +14,6 @@ import org.kohsuke.MetaInfServices;
 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;
@@ -25,17 +24,16 @@ import org.opendaylight.yangtools.concepts.Registration;
 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,
index 32956f84355589121f9a0bed7c7b0b2922aeaaf6..9f35fab2a8fa9935b4c5ac88d769de69669549ce 100644 (file)
@@ -40,11 +40,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
  * 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,
@@ -56,13 +54,6 @@ final class IPv4RIBSupport extends AbstractIPRibSupport<Ipv4RoutesCase, Ipv4Rout
                 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) {
index 032986ab59678922f2b56a49ea21a1110de4feda..971c4d4e1d85a9129a6bba8b6cf5ce9c0399fd5b 100644 (file)
@@ -39,11 +39,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
  * 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,
@@ -54,13 +52,6 @@ final class IPv6RIBSupport extends AbstractIPRibSupport<Ipv6RoutesCase, Ipv6Rout
                 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()
index a58e704c8703e4311e973b930ff7b44e053adfbd..06fbb1010e8e8ddb8b57b2fc4c513054b90d9d94 100644 (file)
@@ -12,7 +12,6 @@ import javax.inject.Inject;
 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;
@@ -22,22 +21,21 @@ import org.opendaylight.yangtools.concepts.Registration;
 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)));
     }
 }
index e78d62285ce9c386923ba3acf7041be884fa381a..8c0bccc5a6ae9ee97b2881a9674cc31698b85d53 100644 (file)
@@ -78,7 +78,7 @@ public final class IPv4RIBSupportTest extends AbstractRIBSupportTest<Ipv4RoutesC
     @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);
     }
 
index 5947a242e003d0f11871a612d5b2a2e9b1324b31..943b9692c82f1d72eaa2485f648b8f915fef08d3 100644 (file)
@@ -74,7 +74,7 @@ public final class IPv6RIBSupportTest extends AbstractRIBSupportTest<Ipv6RoutesC
     @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);
     }
 
index 78c5bca579821d8d36ea2e0311b2077850b1836f..04540678d8c8bcdbc91eed027deb2047c467e675 100644 (file)
@@ -16,7 +16,6 @@ import org.opendaylight.protocol.bgp.l3vpn.mcast.L3VpnMcastIpv4RIBSupport;
 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;
@@ -32,26 +31,25 @@ import org.osgi.service.component.annotations.Component;
  * @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)));
     }
 }
index d767d99aaa3810c2f8d26d8bc27a56257f6c0a27..90632e60f049feda8ac5c498a8efdc5f6e9d4db8 100644 (file)
@@ -49,10 +49,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
 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,
@@ -61,15 +59,6 @@ public final class L3VpnMcastIpv4RIBSupport
                 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(
index 4cd8371245d62fa6b86adf98055c55bd605d0a92..bac1f1c0851635788dee8227293b169fb305acb0 100644 (file)
@@ -49,10 +49,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
 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,
@@ -61,15 +59,6 @@ public final class L3VpnMcastIpv6RIBSupport
                 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(
index 7d9755c10bbf4c995b4c792244f3d03a2966b875..12a2485fa099004dc139fc0f1b8ebf4900fb879f 100644 (file)
@@ -29,7 +29,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.
 
 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
@@ -37,7 +36,7 @@ public final class VpnIpv4RIBSupport extends AbstractVpnRIBSupport<VpnIpv4Routes
      * 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,
@@ -45,13 +44,6 @@ public final class VpnIpv4RIBSupport extends AbstractVpnRIBSupport<VpnIpv4Routes
                 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));
index 260801831147d3a8b6996aacd317637a84fb6029..976fce511533b86ffb982047e35d1d5075208ae7 100644 (file)
@@ -29,7 +29,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.
 
 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
@@ -37,7 +36,7 @@ public final class VpnIpv6RIBSupport extends AbstractVpnRIBSupport<VpnIpv6Routes
      * 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,
@@ -45,13 +44,6 @@ public final class VpnIpv6RIBSupport extends AbstractVpnRIBSupport<VpnIpv6Routes
                 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));
index 89341605a73e9e603d037914cee0106212d01d37..bd5935c2fea395835b37ecf20dba0d06b3f48fff 100644 (file)
@@ -28,6 +28,5 @@ public class RIBActivatorTest extends AbstractRIBActivatorTest {
         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
index 962b5bce48cb1b1fe77969cb33ef2a6e93dcc59d..a31583e39adc74b5060560a5aa16195b7288b1b0 100644 (file)
@@ -91,7 +91,7 @@ public class L3vpnMcastIpv4RIBSupportTest extends AbstractRIBSupportTest<L3vpnMc
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        ribSupport = L3VpnMcastIpv4RIBSupport.getInstance(this.adapter.currentSerializer());
+        ribSupport = new L3VpnMcastIpv4RIBSupport(this.adapter.currentSerializer());
         setUpTestCustomizer(ribSupport);
     }
 
index 066e761b94bae5070ac3e5cb59bc359ee976bf6b..060c4a9d8544b8386956a223dbe3bac811705557 100644 (file)
@@ -90,7 +90,7 @@ public class L3vpnMcastIpv6RIBSupportTest extends AbstractRIBSupportTest<L3vpnMc
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        ribSupport = L3VpnMcastIpv6RIBSupport.getInstance(this.adapter.currentSerializer());
+        ribSupport = new L3VpnMcastIpv6RIBSupport(this.adapter.currentSerializer());
         setUpTestCustomizer(ribSupport);
     }
 
index ccb5741a2a269f076b7555bb7813c2d2bd86ba03..8532a333cb1260b4516d13c3d5e5a38d6d574510 100644 (file)
@@ -5,7 +5,6 @@
  * 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;
@@ -72,7 +71,7 @@ public class VpnIpv4RIBSupportTest extends AbstractRIBSupportTest<VpnIpv4RoutesC
     @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);
     }
 
index d9c2eeba9d128d493f455dcda44279814ae4b891..f84b002dfed2a40ce151ce6f708c787739afac3f 100644 (file)
@@ -71,7 +71,7 @@ public class VpnIpv6RIBSupportTest extends AbstractRIBSupportTest<VpnIpv6RoutesC
     @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);
     }
 
index 3a76dfb14f2396384160dde2491bc623dac6b48a..74412031dfa01c402e4620bf233e0563c69dd587 100644 (file)
@@ -33,9 +33,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 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,
@@ -43,13 +42,6 @@ public final class LabeledUnicastIpv4RIBSupport
                 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(
index 52056246d115ee5048413263ddfb13f0a7d776ff..97b2fa44e7be280b1c2e17174eda95e0c1be5048 100644 (file)
@@ -32,9 +32,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 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,
@@ -42,13 +41,6 @@ final class LabeledUnicastIpv6RIBSupport
                 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(
index 5e1725614285f59f7984326e232f003f54f2084e..452f0b0534ce213c0ffabf423d764669bb9f4956 100644 (file)
@@ -12,7 +12,6 @@ import javax.inject.Inject;
 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;
@@ -22,22 +21,21 @@ import org.opendaylight.yangtools.concepts.Registration;
 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)));
     }
 }
index 0413dddd1e04dd8d6c2966e043ca8a8e8edc41f8..f5b2a53319a33006c207393fb3ac76d2a09ea1c5 100644 (file)
@@ -103,7 +103,7 @@ public class LabeledUnicastIpv4RIBSupportTest extends AbstractRIBSupportTest<Lab
     @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);
     }
 
index 3b4176e5ef708a11479629321b271fcc02219db7..30ffa0a15c7e9ab415d46e7ddfb3e1cf4548cfdf 100644 (file)
@@ -101,7 +101,7 @@ public class LabeledUnicastIpv6RIBSupportTest extends AbstractRIBSupportTest<Lab
     @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);
     }
 
index c3eac78545133a07f9d1d789e9ea9e893c619fdc..19791bb20a91db5b3445de792e5362016353cf36 100644 (file)
@@ -58,9 +58,8 @@ public final class LinkstateRIBSupport
     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,
@@ -71,13 +70,6 @@ public final class LinkstateRIBSupport
                 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);
index 81384f493adc5dab75c6834eb1e01eb3a80b866e..bebf560ee154f14051fdec0156929e1d2521c11b 100644 (file)
@@ -12,7 +12,6 @@ import javax.inject.Inject;
 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;
@@ -24,19 +23,18 @@ import org.osgi.service.component.annotations.Component;
  * 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)));
     }
 }
index 55d623e9e67db4a7b4e53060cc9982be900aefe2..ce9c606825d99b2a158cf15f92bb53952a9b28fe 100644 (file)
@@ -51,7 +51,5 @@ public class ActivatorTest extends AbstractRIBActivatorTest {
         ribAct.startRIBExtensionProvider(context, this.context.currentSerializer());
 
         assertNotNull(context.getRIBSupport(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class));
-
-        ribAct.close();
     }
 }
index 9bc4cdabcab9b21df562205c57010c5f8d223b63..34984162ec7349ea88cb206897d09834591ea34f 100644 (file)
@@ -126,7 +126,7 @@ public final class LinkstateRIBSupportTest extends AbstractRIBSupportTest<Linkst
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        this.ribSupport = LinkstateRIBSupport.getInstance(this.adapter.currentSerializer());
+        this.ribSupport = new LinkstateRIBSupport(this.adapter.currentSerializer());
         setUpTestCustomizer(ribSupport);
     }
 
index 0b3c1b665246eac836b9da653fe87e7be4ef5ea2..498af039d5d215e0eb76d7431410cc3060df4006 100644 (file)
@@ -49,9 +49,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
  */
 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,
@@ -60,13 +59,6 @@ final class MvpnIpv4RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesIpv4Case
                 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());
index 441d10edd0903687e7bd1c7184d99f5d64d12c5d..269f10dbb50def8eac6d98f467bb132aea941262 100644 (file)
@@ -49,9 +49,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
  */
 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,
@@ -60,13 +59,6 @@ final class MvpnIpv6RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesIpv6Case
                 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());
index a003cfc850f9c2fdc4799b441eac6ea622dea2fb..b28647fef5929f20ef46a5caedb7d9819c99e61b 100644 (file)
@@ -12,7 +12,6 @@ import javax.inject.Inject;
 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;
@@ -27,22 +26,21 @@ import org.osgi.service.component.annotations.Component;
  * @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)));
     }
 }
index 4638951e14ae805e16c2f2376a58601a80f2939a..8dd042151249d95013d2e05b072aac587a57ad93 100644 (file)
@@ -92,7 +92,7 @@ public class MvpnIpv4RIBSupportTest extends AbstractRIBSupportTest<MvpnRoutesIpv
     @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<>());
     }
index a3cd4bfef4c855f83393784e7d61fdce77770b88..a89962f7b3c5d10998e052bee0ce322165e9467c 100644 (file)
@@ -90,7 +90,7 @@ public final class MvpnIpv6RIBSupportTest extends AbstractRIBSupportTest<MvpnRou
     @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<>());
     }
index 65fdad1b7ccab5a1d6355cf3e95e9d202f31f1fe..d38c8de86c38b7cf3105c7b6c8e6eef5e008555b 100644 (file)
@@ -5,7 +5,6 @@
  * 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;
@@ -29,6 +28,5 @@ public class RIBActivatorTest extends AbstractRIBActivatorTest {
         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
index e2dfd67497ef09898675dbbd3ab4d838443426bc..5fcf680163678a92d227406fe04f3f3bda13c8e7 100644 (file)
@@ -79,7 +79,6 @@ public final class RouteTargetConstrainRIBSupport
     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;
@@ -92,7 +91,7 @@ public final class RouteTargetConstrainRIBSupport
      *
      * @param mappingService Serialization service
      */
-    private RouteTargetConstrainRIBSupport(final BindingNormalizedNodeSerializer mappingService) {
+    public RouteTargetConstrainRIBSupport(final BindingNormalizedNodeSerializer mappingService) {
         super(mappingService,
                 RouteTargetConstrainRoutesCase.class,
                 RouteTargetConstrainRoutes.class,
@@ -103,14 +102,6 @@ public final class RouteTargetConstrainRIBSupport
         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;
index 1e991a1e0f41396455673d89835cdd9122e75e54..dd9805b75ae3e33fc1cfd3082ea97604bd2af249 100644 (file)
@@ -12,7 +12,6 @@ import javax.inject.Inject;
 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;
@@ -27,20 +26,20 @@ import org.osgi.service.component.annotations.Component;
  * @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
index 91cfd64be073c02a9926ecf418bd2c071b937d4d..1872628b089662fd5aa7820a7f1fcbb4fbcca29e 100644 (file)
@@ -103,7 +103,7 @@ public class RouteTargetConstrainRIBSupportTest extends AbstractRIBSupportTest<R
     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);
     }
 
index eb4ec342ba4d726b9cf59bb6c81a5a1399cb834f..8796c8c302c6d1724e75ffa91a445c3f219e6918 100644 (file)
@@ -5,7 +5,6 @@
  * 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;
@@ -27,6 +26,5 @@ public class RIBActivatorTest extends AbstractRIBActivatorTest {
         ribAct.startRIBExtensionProvider(context, this.context.currentSerializer());
         assertNotNull(context.getRIBSupport(Ipv4AddressFamily.class,
                 RouteTargetConstrainSubsequentAddressFamily.class));
-        ribAct.close();
     }
 }
\ No newline at end of file
index d4a1fbf51ba1da94d0572ea77615810e72774a13..1978ec51c7ce2ce6fb170f33c3a06da2ff3123c9 100644 (file)
@@ -128,8 +128,8 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest {
     @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;
@@ -143,8 +143,6 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest {
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        this.ribActivator = new RIBActivator();
-        this.ribExtension = new SimpleRIBExtensionProviderContext();
 
         this.ribActivator.startRIBExtensionProvider(this.ribExtension, this.mappingService.currentSerializer());
 
@@ -174,8 +172,6 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest {
             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;
index a41dda02a5ca4665e410be66aacac11d616524b1..692e281f56395bf4e8a7e2865fa9457a29134d4b 100644 (file)
@@ -24,7 +24,6 @@ import java.util.HashSet;
 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;
@@ -90,7 +89,7 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest {
     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;
 
@@ -132,7 +131,6 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest {
         localTables.add(new BgpTableTypeImpl(IPV6_AFI, SAFI));
 
         final CurrentAdapterSerializer serializer = mappingService.currentSerializer();
-        this.a1 = new RIBActivator();
         this.a1.startRIBExtensionProvider(context, serializer);
 
         mockedMethods();
@@ -223,11 +221,6 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest {
         return this.domTransWrite;
     }
 
-    @After
-    public void tearDown() {
-        this.a1.close();
-    }
-
     private class TestListenerRegistration implements ListenerRegistration<EventListener> {
         @Override
         public EventListener getInstance() {
index ed9a0151444d0af778888b3da8631285c41f87f5..2cd0c5c975ad47675111d640585f14b54b25dde4 100644 (file)
@@ -12,6 +12,7 @@ import static org.junit.Assert.assertNotNull;
 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;
@@ -26,12 +27,10 @@ import java.util.Collection;
 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;
@@ -39,7 +38,7 @@ import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
 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;
@@ -68,10 +67,10 @@ public class ParserToSalTest extends DefaultRibPoliciesMockTest {
     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;
@@ -86,27 +85,16 @@ public class ParserToSalTest extends DefaultRibPoliciesMockTest {
         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,
index d460ab397fb84c0b1c4bcfb8854e752b1dbe4dbc..c1ffe0ea58d39c5b4af8e61ee43c527abb5c27fd 100644 (file)
             <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>
diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBExtensionProviderActivator.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBExtensionProviderActivator.java
deleted file mode 100644 (file)
index 4d4499d..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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();
-    }
-}
diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/DefaultRIBExtensionConsumerContext.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/DefaultRIBExtensionConsumerContext.java
new file mode 100644 (file)
index 0000000..411a128
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * 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;
+    }
+}
diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/ForwardingRIBExtensionConsumerContext.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/ForwardingRIBExtensionConsumerContext.java
new file mode 100644 (file)
index 0000000..1dfb0cc
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * 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();
+}
diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/OSGiRIBExtensionConsumerContext.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/OSGiRIBExtensionConsumerContext.java
new file mode 100644 (file)
index 0000000..0a8ba5d
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * 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);
+    }
+}
index c4b64cd66f28e1860e40f2f5c4af77642219db92..b1f4a7b992770629664b65b00ea13a9f8f1ac4de 100644 (file)
@@ -7,12 +7,14 @@
  */
 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);
 }
diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/ServiceLoaderRIBExtensionConsumerContext.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/ServiceLoaderRIBExtensionConsumerContext.java
deleted file mode 100644 (file)
index 3292877..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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);
-            }
-        }
-    }
-}
index 9fbc413c38f7f1747ec2840c1d8150832da6cbf3..648a49323739d2785a4415c4fe2e4cf6fbe19502 100644 (file)
@@ -7,9 +7,9 @@
  */
 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;
@@ -40,8 +40,7 @@ public class SimpleRIBExtensionProviderContext implements RIBExtensionProviderCo
             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
diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContextActivator.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContextActivator.java
deleted file mode 100644 (file)
index 87a28e1..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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();
-        }
-    }
-}
diff --git a/bgp/rib-spi/src/main/resources/OSGI-INF/blueprint/bgp-rib-spi.xml b/bgp/rib-spi/src/main/resources/OSGI-INF/blueprint/bgp-rib-spi.xml
deleted file mode 100644 (file)
index 7359224..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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>
diff --git a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/DefaultRIBExtensionProviderContextTest.java b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/DefaultRIBExtensionProviderContextTest.java
new file mode 100644 (file)
index 0000000..764a959
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * 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);
+        }
+    }
+}
diff --git a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContextActivatorTest.java b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContextActivatorTest.java
deleted file mode 100644 (file)
index cb57674..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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
index 3b9bb1271bd4a30c2245bcba76991076deb29a3b..d23118f298847de55dd079078fceac78ab3b02d2 100644 (file)
@@ -7,9 +7,11 @@
  */
 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;
@@ -35,26 +37,22 @@ public class SimpleRIBExtensionTest extends AbstractConcurrentDataBrokerTest {
     @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));
         }
     }
index 5b426e2dcdc5e9e31e844ada455a987c81533b32..46ae95479ad1cbe87e9d0238e7ad23826dc35445 100644 (file)
@@ -115,13 +115,13 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest {
     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
@@ -157,8 +157,6 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest {
         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();
@@ -205,7 +203,6 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest {
 
     @After
     public void tearDown() throws Exception {
-        this.ribActivator.close();
         this.bgpActivator.close();
         this.bmpActivator.close();
         this.dispatcher.close();