Clean up RibSupport registration 33/106633/4
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 22 Jun 2023 18:12:18 +0000 (20:12 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 23 Jun 2023 08:33:08 +0000 (10:33 +0200)
The RIBSupport integration shows a number of cases of accidental
duplicity with the evolution over the years. At the end of the day, each
RIBSupport knows to what AFI/SAFI it is bound -- on both Binding and DOM
layers.

Use that information to simplify interactions, improving ergonomics
across the board, as well as ditching a source of Binding->DOM identity
translation.

JIRA: BGPCEP-1016
Change-Id: I19377f25cf6adb1a9ddc170913961f948c10938c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
20 files changed:
bgp/extensions/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/RIBActivator.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/RIBActivator.java
bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/RIBActivator.java
bgp/extensions/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/RIBActivator.java
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/RIBActivator.java
bgp/extensions/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/RIBActivator.java
bgp/extensions/route-target/src/main/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/activators/RIBActivator.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupport.java
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportRegistration.java [deleted file]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBExtensionProviderContext.java
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupport.java
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportRegistration.java [deleted file]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RibSupportUtils.java
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContext.java
bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportTest.java
bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportTest.java
bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/RibSupportUtilsTest.java
bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionTest.java

index 51cd90b80ebe1b6e41b0717ceab202774f2327ec..989b46ed9c43a2ad307616a6251208a684c11a21 100644 (file)
@@ -14,8 +14,6 @@ import org.kohsuke.MetaInfServices;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 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.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.L2vpnAddressFamily;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Component;
 
@@ -31,7 +29,6 @@ public final class RIBActivator implements RIBExtensionProviderActivator {
     @Override
     public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
             final BindingNormalizedNodeSerializer mappingService) {
-        return List.of(context.registerRIBSupport(L2vpnAddressFamily.VALUE, EvpnSubsequentAddressFamily.VALUE,
-                new EvpnRibSupport(mappingService)));
+        return List.of(context.registerRIBSupport(new EvpnRibSupport(mappingService)));
     }
 }
\ No newline at end of file
index a703111442a3b41cf477133e848700ea7da795c1..5781ff1af795c59bae92f572e5ef4475c59129e4 100644 (file)
@@ -16,10 +16,6 @@ import org.opendaylight.protocol.bgp.flowspec.l3vpn.ipv4.FlowspecL3vpnIpv4RIBSup
 import org.opendaylight.protocol.bgp.flowspec.l3vpn.ipv6.FlowspecL3vpnIpv6RIBSupport;
 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.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120.FlowspecSubsequentAddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Component;
 
@@ -36,13 +32,9 @@ public final class RIBActivator implements RIBExtensionProviderActivator {
     public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
             final BindingNormalizedNodeSerializer mappingService) {
         return List.of(
-            context.registerRIBSupport(Ipv4AddressFamily.VALUE, FlowspecSubsequentAddressFamily.VALUE,
-                new FlowspecIpv4RIBSupport(mappingService)),
-            context.registerRIBSupport(Ipv6AddressFamily.VALUE, FlowspecSubsequentAddressFamily.VALUE,
-                new FlowspecIpv6RIBSupport(mappingService)),
-            context.registerRIBSupport(Ipv4AddressFamily.VALUE, FlowspecL3vpnSubsequentAddressFamily.VALUE,
-                new FlowspecL3vpnIpv4RIBSupport(mappingService)),
-            context.registerRIBSupport(Ipv6AddressFamily.VALUE, FlowspecL3vpnSubsequentAddressFamily.VALUE,
-                new FlowspecL3vpnIpv6RIBSupport(mappingService)));
+            context.registerRIBSupport(new FlowspecIpv4RIBSupport(mappingService)),
+            context.registerRIBSupport(new FlowspecIpv6RIBSupport(mappingService)),
+            context.registerRIBSupport(new FlowspecL3vpnIpv4RIBSupport(mappingService)),
+            context.registerRIBSupport(new FlowspecL3vpnIpv6RIBSupport(mappingService)));
     }
 }
index 6b93a3d3abef87139b797499cb75e68f42b5ae4e..cf240de604737114acfb144928ee898f311e280d 100644 (file)
@@ -14,9 +14,6 @@ import org.kohsuke.MetaInfServices;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 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.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Component;
 
@@ -33,9 +30,7 @@ public final class RIBActivator implements RIBExtensionProviderActivator {
     public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
             final BindingNormalizedNodeSerializer mappingService) {
         return List.of(
-            context.registerRIBSupport(Ipv4AddressFamily.VALUE, UnicastSubsequentAddressFamily.VALUE,
-                new IPv4RIBSupport(mappingService)),
-            context.registerRIBSupport(Ipv6AddressFamily.VALUE, UnicastSubsequentAddressFamily.VALUE,
-                new IPv6RIBSupport(mappingService)));
+            context.registerRIBSupport(new IPv4RIBSupport(mappingService)),
+            context.registerRIBSupport(new IPv6RIBSupport(mappingService)));
     }
 }
index 939138c4ffa94c26f5ecb40956d91d347ac4e90b..2b1a04a3bac3b599e8e355174b30b207398b5bdb 100644 (file)
@@ -18,10 +18,6 @@ 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.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;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.MplsLabeledVpnSubsequentAddressFamily;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Component;
 
@@ -43,13 +39,9 @@ public final class RIBActivator implements RIBExtensionProviderActivator {
     public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
             final BindingNormalizedNodeSerializer mappingService) {
         return List.of(
-            context.registerRIBSupport(Ipv4AddressFamily.VALUE, MplsLabeledVpnSubsequentAddressFamily.VALUE,
-                new VpnIpv4RIBSupport(mappingService)),
-            context.registerRIBSupport(Ipv6AddressFamily.VALUE, MplsLabeledVpnSubsequentAddressFamily.VALUE,
-                new VpnIpv6RIBSupport(mappingService)),
-            context.registerRIBSupport(Ipv4AddressFamily.VALUE, McastMplsLabeledVpnSubsequentAddressFamily.VALUE,
-                new L3VpnMcastIpv4RIBSupport(mappingService)),
-            context.registerRIBSupport(Ipv6AddressFamily.VALUE, McastMplsLabeledVpnSubsequentAddressFamily.VALUE,
-                new L3VpnMcastIpv6RIBSupport(mappingService)));
+            context.registerRIBSupport(new VpnIpv4RIBSupport(mappingService)),
+            context.registerRIBSupport(new VpnIpv6RIBSupport(mappingService)),
+            context.registerRIBSupport(new L3VpnMcastIpv4RIBSupport(mappingService)),
+            context.registerRIBSupport(new L3VpnMcastIpv6RIBSupport(mappingService)));
     }
 }
index f4fec0aaf43127b614b6cb786e09a713708f655d..3ed58aceba770788fd198411674ed5e47d70b237 100644 (file)
@@ -14,9 +14,6 @@ import org.kohsuke.MetaInfServices;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 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.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Component;
 
@@ -33,9 +30,7 @@ public class RIBActivator implements RIBExtensionProviderActivator {
     public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
             final BindingNormalizedNodeSerializer mappingService) {
         return List.of(
-            context.registerRIBSupport(Ipv4AddressFamily.VALUE, LabeledUnicastSubsequentAddressFamily.VALUE,
-                new LabeledUnicastIpv4RIBSupport(mappingService)),
-            context.registerRIBSupport(Ipv6AddressFamily.VALUE, LabeledUnicastSubsequentAddressFamily.VALUE,
-                new LabeledUnicastIpv6RIBSupport(mappingService)));
+            context.registerRIBSupport(new LabeledUnicastIpv4RIBSupport(mappingService)),
+            context.registerRIBSupport(new LabeledUnicastIpv6RIBSupport(mappingService)));
     }
 }
index 1fec6496820249be97afe0e26f6ac001f0be2724..69d4469e8a0a988f302352a95a6c4a18ce178b4e 100644 (file)
@@ -14,8 +14,6 @@ import org.kohsuke.MetaInfServices;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 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;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.LinkstateSubsequentAddressFamily;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Component;
 
@@ -34,7 +32,6 @@ public final class RIBActivator implements RIBExtensionProviderActivator {
     @Override
     public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
             final BindingNormalizedNodeSerializer mappingService) {
-        return List.of(context.registerRIBSupport(LinkstateAddressFamily.VALUE,
-            LinkstateSubsequentAddressFamily.VALUE, new LinkstateRIBSupport(mappingService)));
+        return List.of(context.registerRIBSupport(new LinkstateRIBSupport(mappingService)));
     }
 }
index 27f61e93bb8639e46e82e06c655d624a9d3406e9..61af8c28014f43c8e245d7d2b30b9c5b06e03061 100644 (file)
@@ -14,9 +14,6 @@ import org.kohsuke.MetaInfServices;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 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;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Component;
 
@@ -38,9 +35,7 @@ public final class RIBActivator implements RIBExtensionProviderActivator {
     public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
             final BindingNormalizedNodeSerializer mappingService) {
         return List.of(
-            context.registerRIBSupport(Ipv4AddressFamily.VALUE, McastVpnSubsequentAddressFamily.VALUE,
-                new MvpnIpv4RIBSupport(mappingService)),
-            context.registerRIBSupport(Ipv6AddressFamily.VALUE, McastVpnSubsequentAddressFamily.VALUE,
-                new MvpnIpv6RIBSupport(mappingService)));
+            context.registerRIBSupport(new MvpnIpv4RIBSupport(mappingService)),
+            context.registerRIBSupport(new MvpnIpv6RIBSupport(mappingService)));
     }
 }
index 76efe486b91dcccc51186ac47b033ad2133ee1c7..47c543249ae529347150cbbefd340ad7788c5fc4 100644 (file)
@@ -15,8 +15,6 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSeriali
 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;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.route.target.constrain.rev180618.RouteTargetConstrainSubsequentAddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Component;
 
@@ -38,8 +36,6 @@ public final class RIBActivator implements RIBExtensionProviderActivator {
     @Override
     public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
             final BindingNormalizedNodeSerializer mappingService) {
-        return List.of(
-            context.registerRIBSupport(Ipv4AddressFamily.VALUE, RouteTargetConstrainSubsequentAddressFamily.VALUE,
-                new RouteTargetConstrainRIBSupport(mappingService)));
+        return List.of(context.registerRIBSupport(new RouteTargetConstrainRIBSupport(mappingService)));
     }
 }
\ No newline at end of file
index f2404152c327fe07ef95ebc2fa3aa4e6039e6903..3e89777836aaa35c9fbbde4c84768d406bf168aa 100644 (file)
@@ -436,7 +436,7 @@ final class EffectiveRibInWriter implements PrefixesReceivedCounters, PrefixesIn
 
     private void onRoutesDeleted(final RIBSupport<?, ?> ribSupport, final YangInstanceIdentifier effectiveTablePath,
             final Collection<MapEntryNode> deletedRoutes) {
-        if (RouteTargetConstrainSubsequentAddressFamily.VALUE.equals(ribSupport.getSafi())) {
+        if (RouteTargetConstrainSubsequentAddressFamily.VALUE.equals(ribSupport.getTablesKey().getSafi())) {
             final YangInstanceIdentifier routesPath = routeMapPath(ribSupport, effectiveTablePath);
             for (final MapEntryNode routeBefore : deletedRoutes) {
                 deleteRouteTarget(ribSupport, routesPath.node(routeBefore.getIdentifier()), routeBefore);
@@ -544,7 +544,7 @@ final class EffectiveRibInWriter implements PrefixesReceivedCounters, PrefixesIn
 
     private void handleRouteTarget(final ModificationType modificationType, final RIBSupport<?, ?> ribSupport,
             final YangInstanceIdentifier routeIdPath, final NormalizedNode route) {
-        if (RouteTargetConstrainSubsequentAddressFamily.VALUE.equals(ribSupport.getSafi())) {
+        if (RouteTargetConstrainSubsequentAddressFamily.VALUE.equals(ribSupport.getTablesKey().getSafi())) {
             final var rtc = (RouteTargetConstrainRoute) ribSupport.fromNormalizedNode(routeIdPath, route);
             if (ModificationType.DELETE == modificationType) {
                 deleteRouteTarget(rtc);
index da5459708051fc1a3c04704fd558d690135999d9..65a1fd2ce9acced8d29231b9c96ade828908d0b6 100644 (file)
@@ -227,16 +227,6 @@ public abstract class AbstractRIBSupport<
         return routesListIdentifier;
     }
 
-    @Override
-    public final AddressFamily getAfi() {
-        return tk.getAfi();
-    }
-
-    @Override
-    public final SubsequentAddressFamily getSafi() {
-        return tk.getSafi();
-    }
-
     /**
      * Build MpReachNlri object from DOM representation.
      *
@@ -246,8 +236,8 @@ public abstract class AbstractRIBSupport<
      */
     private MpReachNlri buildReach(final Collection<MapEntryNode> routes, final CNextHop hop) {
         return new MpReachNlriBuilder()
-            .setAfi(getAfi())
-            .setSafi(getSafi())
+            .setAfi(tk.getAfi())
+            .setSafi(tk.getSafi())
             .setCNextHop(hop)
             .setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType(buildDestination(routes)).build())
             .build();
@@ -261,8 +251,8 @@ public abstract class AbstractRIBSupport<
      */
     private MpUnreachNlri buildUnreach(final Collection<MapEntryNode> routes) {
         return new MpUnreachNlriBuilder()
-            .setAfi(getAfi())
-            .setSafi(getSafi())
+            .setAfi(tk.getAfi())
+            .setSafi(tk.getSafi())
             .setWithdrawnRoutes(new WithdrawnRoutesBuilder()
                 .setDestinationType(buildWithdrawnDestination(routes))
                 .build())
diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportRegistration.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportRegistration.java
deleted file mode 100644 (file)
index 6ce4f24..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright (c) 2015 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 org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
-
-public abstract class AbstractRIBSupportRegistration<T extends RIBSupport<?, ?>>
-        extends AbstractObjectRegistration<T> implements RIBSupportRegistration<T> {
-    protected AbstractRIBSupportRegistration(final T instance) {
-        super(instance);
-    }
-}
index 9e9101e84ce16792a1812a8495befc23d81b19c8..17750135be526db231899160c034d40fcd3ae1e4 100644 (file)
@@ -8,8 +8,7 @@
 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.types.rev200120.AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily;
+import org.opendaylight.yangtools.concepts.Registration;
 
 /**
  * Interface for registering AdjRIBsIn factories. In order for a model-driven RIB implementation to work correctly, it
@@ -20,12 +19,9 @@ public interface RIBExtensionProviderContext extends RIBExtensionConsumerContext
     /**
      * Register a RIBSupport instance for a particular AFI/SAFI combination.
      *
-     * @param afi     Address Family identifier
-     * @param safi    Subsequent Address Family identifier
-     * @param support T RIBSupport instance
-     * @return Registration handle. Call {@link RIBSupportRegistration#close()} method to remove it.
-     * @throws NullPointerException if any of the arguments is null
+     * @param support RIBSupport instance
+     * @return Registration handle. Call {@link Registration#close()} method to remove it.
+     * @throws NullPointerException if {@code support} is {@code null}
      */
-    <T extends RIBSupport<?, ?>> RIBSupportRegistration<T> registerRIBSupport(
-            @NonNull AddressFamily afi, @NonNull SubsequentAddressFamily safi, T support);
+    @NonNull Registration registerRIBSupport(RIBSupport<?, ?> support);
 }
index 30903497d371a9261b6d7867e51561c193ae3df0..b0dba681602a972fc4af3cf8fde958f4f6baf589 100644 (file)
@@ -22,8 +22,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 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.BindingObject;
 import org.opendaylight.yangtools.yang.binding.ChildOf;
 import org.opendaylight.yangtools.yang.binding.ChoiceIn;
@@ -201,10 +199,6 @@ public interface RIBSupport<C extends Routes & DataObject & ChoiceIn<Tables>, S
     @NonNull Update buildUpdate(@NonNull Collection<MapEntryNode> advertised,
             @NonNull Collection<MapEntryNode> withdrawn, @NonNull Attributes attr);
 
-    @NonNull AddressFamily getAfi();
-
-    @NonNull SubsequentAddressFamily getSafi();
-
     /**
      * Creates Route table Peer InstanceIdentifier.
      *
diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportRegistration.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportRegistration.java
deleted file mode 100644 (file)
index b3c9696..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (c) 2015 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 org.opendaylight.yangtools.concepts.ObjectRegistration;
-
-/**
- * A registration of a {@link RIBSupport} instance.
- *
- * @param <T> {@link RIBSupport} type
- */
-public interface RIBSupportRegistration<T extends RIBSupport<?, ?>> extends ObjectRegistration<T> {
-
-}
index 26a4bf44580968e121e88be896a1d760038f2fa0..db495c3b230734cd5a8a72e8328cd1ac6cd802c8 100644 (file)
@@ -33,15 +33,13 @@ public final class RibSupportUtils {
     }
 
     /**
-     * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
+     * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
      *
-     * @param afi  Class representing AFI
-     * @param safi Class representing SAFI
+     * @param tablesKey Tables key representing table.
      * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
      */
-    public static NodeIdentifierWithPredicates toYangTablesKey(final AddressFamily afi,
-            final SubsequentAddressFamily safi) {
-        return toYangKey(Tables.QNAME, afi, safi);
+    public static NodeIdentifierWithPredicates toYangTablesKey(final TablesKey tablesKey) {
+        return toYangKey(Tables.QNAME, tablesKey.getAfi(), tablesKey.getSafi());
     }
 
     /**
@@ -58,20 +56,6 @@ public final class RibSupportUtils {
             BindingReflections.getQName(afi), BindingReflections.getQName(safi)));
     }
 
-    /**
-     * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
-     *
-     * @param id   QNAME representing node
-     * @param afi  Class representing AFI
-     * @param safi Class representing SAFI
-     * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
-     */
-    public static NodeIdentifierWithPredicates toYangPathKey(final QName id, final AddressFamily afi,
-            final SubsequentAddressFamily safi) {
-        return NodeIdentifierWithPredicates.of(id, ADD_PATH_AFI_SAFI_TEMPLATE.instantiateWithValues(
-            BindingReflections.getQName(afi), BindingReflections.getQName(safi)));
-    }
-
     /**
      * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
      *
@@ -79,7 +63,6 @@ public final class RibSupportUtils {
      * @param tablesKey  Tables key representing table.
      * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
      */
-    @SuppressWarnings("checkstyle:OverloadMethodsDeclarationOrder")
     public static NodeIdentifierWithPredicates toYangKey(final QName id, final TablesKey tablesKey) {
         return toYangKey(id, tablesKey.getAfi(), tablesKey.getSafi());
     }
@@ -96,13 +79,16 @@ public final class RibSupportUtils {
     }
 
     /**
-     * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
+     * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
      *
-     * @param tablesKey Tables key representing table.
-     * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
+     * @param id   QNAME representing node
+     * @param afi  Class representing AFI
+     * @param safi Class representing SAFI
+     * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
      */
-    @SuppressWarnings("checkstyle:OverloadMethodsDeclarationOrder")
-    public static NodeIdentifierWithPredicates toYangTablesKey(final TablesKey tablesKey) {
-        return toYangTablesKey(tablesKey.getAfi(), tablesKey.getSafi());
+    public static NodeIdentifierWithPredicates toYangPathKey(final QName id, final AddressFamily afi,
+            final SubsequentAddressFamily safi) {
+        return NodeIdentifierWithPredicates.of(id, ADD_PATH_AFI_SAFI_TEMPLATE.instantiateWithValues(
+            BindingReflections.getQName(afi), BindingReflections.getQName(safi)));
     }
 }
index a47948862923eb0de35a84c37e7a7b8354ba3415..b755681dda5c1a20b70a1b659bc252acb3e6b0ec 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.protocol.bgp.rib.spi;
 
-import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
 import java.util.concurrent.ConcurrentHashMap;
@@ -17,31 +16,37 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 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.concepts.AbstractRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 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.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class SimpleRIBExtensionProviderContext implements RIBExtensionProviderContext {
-    private static final Logger LOG = LoggerFactory.getLogger(SimpleRIBExtensionProviderContext.class);
-
-    private final ConcurrentMap<TablesKey, RIBSupport<?, ?>> supports = new ConcurrentHashMap<>();
     private final ConcurrentMap<NodeIdentifierWithPredicates, RIBSupport<?, ?>> domSupports = new ConcurrentHashMap<>();
+    private final ConcurrentMap<TablesKey, RIBSupport<?, ?>> supports = new ConcurrentHashMap<>();
 
     @Override
-    public <T extends RIBSupport<?, ?>> RIBSupportRegistration<T> registerRIBSupport(
-            final AddressFamily afi, final SubsequentAddressFamily safi, final T support) {
-        final TablesKey key = new TablesKey(afi, safi);
-        final RIBSupport<?, ?> prev = supports.putIfAbsent(key, support);
-        checkArgument(prev == null, "AFI %s SAFI %s is already registered with %s", afi, safi, prev);
-        domSupports.put(RibSupportUtils.toYangTablesKey(afi, safi), support);
-        return new AbstractRIBSupportRegistration<>(support) {
+    public Registration registerRIBSupport(final RIBSupport<?, ?> support) {
+        final var bindingKey = support.getTablesKey();
+        final var prevBinding = supports.putIfAbsent(bindingKey, support);
+        if (prevBinding != null) {
+            throw new IllegalStateException(bindingKey + " is already registered with " + prevBinding);
+        }
+
+        final var domKey = support.tablesKey();
+        final var prevDom = domSupports.putIfAbsent(domKey, support);
+        if (prevDom != null) {
+            throw new IllegalStateException(domKey + " is already registered with " + prevDom);
+        }
+
+        return new AbstractRegistration() {
             @Override
             protected void removeRegistration() {
                 // FIXME: clean up registrations, too
-                supports.remove(key);
+                supports.remove(bindingKey, support);
+                domSupports.remove(domKey, support);
             }
         };
     }
index 635dede9c1bdd1bc25125a4a49073a61ceb12668..b07614618e97455ed76cb86f02321abab63caef2 100644 (file)
@@ -49,7 +49,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.rib.LocRib;
 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.TablesBuilder;
-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.yangtools.yang.binding.ChildOf;
 import org.opendaylight.yangtools.yang.binding.ChoiceIn;
@@ -140,14 +139,14 @@ public abstract class AbstractRIBSupportTest<C extends Routes & DataObject & Cho
     }
 
     protected final MapEntryNode createEmptyTable() {
-        final Tables tables = new TablesBuilder().withKey(getTablesKey())
+        final Tables tables = new TablesBuilder().withKey(abstractRIBSupport.getTablesKey())
             .setAttributes(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329
                 .rib.tables.AttributesBuilder().build()).build();
         return (MapEntryNode) adapter.currentSerializer().toNormalizedNode(tablesIId(), tables).getValue();
     }
 
     protected final ChoiceNode createRoutes(final Routes routes) {
-        final Tables tables = new TablesBuilder().withKey(getTablesKey()).setRoutes(routes).build();
+        final Tables tables = new TablesBuilder().withKey(abstractRIBSupport.getTablesKey()).setRoutes(routes).build();
         return (ChoiceNode) verifyNotNull(((MapEntryNode) adapter.currentSerializer()
             .toNormalizedNode(tablesIId(), tables).getValue())
             .childByArg(new NodeIdentifier(BindingReflections.findQName(Routes.class))));
@@ -164,12 +163,8 @@ public abstract class AbstractRIBSupportTest<C extends Routes & DataObject & Cho
         return ((MapNode) container.getChildByArg(routeNid)).body();
     }
 
-    private TablesKey getTablesKey() {
-        return new TablesKey(abstractRIBSupport.getAfi(), abstractRIBSupport.getSafi());
-    }
-
     private InstanceIdentifier<Tables> tablesIId() {
-        return RIB.child(Tables.class, getTablesKey());
+        return RIB.child(Tables.class, abstractRIBSupport.getTablesKey());
     }
 
     private InstanceIdentifier<S> routesIId() {
index 5ee77cc2a981268b6f780b64dadca73b0adbbd4f..f7c8cf33a1f5585884a7d650742a775a852c8ff5 100644 (file)
@@ -179,19 +179,14 @@ public class RIBSupportTest extends AbstractConcurrentDataBrokerTest {
     }
 
     @Test
-    public void getAfi() {
-        assertEquals(Ipv4AddressFamily.VALUE, ribSupportTestImp.getAfi());
-    }
-
-    @Test
-    public void getSafi() {
-        assertEquals(UnicastSubsequentAddressFamily.VALUE, ribSupportTestImp.getSafi());
+    public void getTablesKey() {
+        assertEquals(new TablesKey(Ipv4AddressFamily.VALUE, UnicastSubsequentAddressFamily.VALUE),
+            ribSupportTestImp.getTablesKey());
     }
 
     @Test
     public void routesContainerIdentifier() {
-        assertEquals(IPV4_ROUTES_IDENTIFIER,ribSupportTestImp.routesContainerIdentifier());
-
+        assertEquals(IPV4_ROUTES_IDENTIFIER, ribSupportTestImp.routesContainerIdentifier());
     }
 
     @Test
index 82d6496635808f311b5092a52691105e3d4dbaf6..3dad150b1685cfdc575460c8b62b7e33306c414a 100644 (file)
@@ -29,10 +29,8 @@ public class RibSupportUtilsTest {
             UnicastSubsequentAddressFamily.VALUE);
 
     static {
-        final QName afi = QName.create("urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2018-03-29",
-                "afi");
-        final QName safi = QName.create("urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2018-03-29",
-                "safi");
+        final QName afi = QName.create("urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2018-03-29", "afi");
+        final QName safi = QName.create("urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2018-03-29", "safi");
         NII = NodeIdentifierWithPredicates.of(SupportedTables.QNAME, ImmutableMap.of(afi, Ipv4AddressFamily.QNAME,
                 safi, UnicastSubsequentAddressFamily.QNAME));
         NII_PATH = NodeIdentifierWithPredicates.of(SupportedTables.QNAME, ImmutableMap.of(
index 2fedb8b204e094ec788e495994dd4210818bd342..1fa662ca278bea0c9e245fb3486cf96138577898 100644 (file)
@@ -10,19 +10,25 @@ package org.opendaylight.protocol.bgp.rib.spi;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.opendaylight.protocol.bgp.rib.spi.RIBQNames.AFI_QNAME;
+import static org.opendaylight.protocol.bgp.rib.spi.RIBQNames.SAFI_QNAME;
 
 import java.util.List;
+import java.util.Map;
 import org.junit.Test;
-import org.mockito.Mockito;
 import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest;
 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTestCustomizer;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 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.types.rev200120.Ipv4AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 
 public class SimpleRIBExtensionTest extends AbstractConcurrentDataBrokerTest {
     private AdapterContext adapter;
@@ -36,7 +42,7 @@ public class SimpleRIBExtensionTest extends AbstractConcurrentDataBrokerTest {
 
     @Test
     public void testExtensionProvider() {
-        final BindingNormalizedNodeSerializer codec = adapter.currentSerializer();
+        final var codec = adapter.currentSerializer();
         var ctx = new DefaultRIBExtensionConsumerContext(codec);
         assertNull(ctx.getRIBSupport(Ipv4AddressFamily.VALUE, UnicastSubsequentAddressFamily.VALUE));
 
@@ -48,12 +54,16 @@ public class SimpleRIBExtensionTest extends AbstractConcurrentDataBrokerTest {
         @Override
         public List<Registration> startRIBExtensionProvider(final RIBExtensionProviderContext context,
                 final BindingNormalizedNodeSerializer mappingService) {
-            final RIBSupport<?, ?> support = Mockito.mock(RIBSupport.class);
+            final var support = mock(RIBSupport.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.VALUE,
-                    UnicastSubsequentAddressFamily.VALUE, support));
+            doReturn(new TablesKey(Ipv4AddressFamily.VALUE, UnicastSubsequentAddressFamily.VALUE)).when(support)
+                .getTablesKey();
+            doReturn(NodeIdentifierWithPredicates.of(Tables.QNAME,
+                Map.of(AFI_QNAME, Ipv4AddressFamily.QNAME, SAFI_QNAME, UnicastSubsequentAddressFamily.QNAME)))
+                .when(support).tablesKey();
+            return List.of(context.registerRIBSupport(support));
         }
     }
 }