From 62b37d2c48880f858e7b0503e9bb60d5e168c412 Mon Sep 17 00:00:00 2001 From: Matej Perina Date: Fri, 11 Jan 2019 10:05:01 +0100 Subject: [PATCH] Remove OSGi dependency from bgp modules This change makes modules reusable for projects that do not use OSGi framework. BgpPeer, AppPeer and RibImpl creation moved from blueprint to BgpDeployerImpl. Change-Id: I1d13ade6f5f8edeb9595ceb94017962401f44ed6 Signed-off-by: Matej Perina Signed-off-by: Robert Varga --- bgp/extensions/evpn/pom.xml | 4 - bgp/extensions/linkstate/pom.xml | 4 - bgp/parser-spi/pom.xml | 5 - bgp/rib-impl/pom.xml | 9 -- .../protocol/bgp/rib/impl/config/AppPeer.java | 11 -- .../config/BGPClusterSingletonService.java | 85 ++++++-------- .../bgp/rib/impl/config/BgpDeployerImpl.java | 48 ++++++-- .../protocol/bgp/rib/impl/config/BgpPeer.java | 14 +-- .../protocol/bgp/rib/impl/config/RibImpl.java | 14 --- .../resources/OSGI-INF/blueprint/bgp-rib.xml | 12 +- .../bgp/rib/impl/config/AbstractConfig.java | 3 - .../rib/impl/config/BgpDeployerImplTest.java | 111 ++++++++---------- .../bgp/rib/impl/config/BgpPeerTest.java | 3 - .../bgp/rib/impl/config/RibImplTest.java | 6 - bgp/rib-spi/pom.xml | 5 - bgp/topology-provider/pom.xml | 5 - .../config/BgpTopologyDeployerImpl.java | 12 +- .../blueprint/bgp-topology-provider.xml | 1 - 18 files changed, 126 insertions(+), 226 deletions(-) diff --git a/bgp/extensions/evpn/pom.xml b/bgp/extensions/evpn/pom.xml index 9f8f7005eb..39a7bb872c 100644 --- a/bgp/extensions/evpn/pom.xml +++ b/bgp/extensions/evpn/pom.xml @@ -43,10 +43,6 @@ org.opendaylight.mdsal.binding.model.ietf rfc6991-ietf-yang-types - - org.osgi - org.osgi.core - diff --git a/bgp/extensions/linkstate/pom.xml b/bgp/extensions/linkstate/pom.xml index 37896ae4f4..f621381b45 100644 --- a/bgp/extensions/linkstate/pom.xml +++ b/bgp/extensions/linkstate/pom.xml @@ -47,10 +47,6 @@ org.opendaylight.mdsal.model yang-ext - - org.osgi - org.osgi.core - diff --git a/bgp/parser-spi/pom.xml b/bgp/parser-spi/pom.xml index f2bc4adb57..a75901ba7d 100644 --- a/bgp/parser-spi/pom.xml +++ b/bgp/parser-spi/pom.xml @@ -75,11 +75,6 @@ rfc6991-ietf-inet-types - - org.osgi - org.osgi.core - provided - io.netty netty-buffer diff --git a/bgp/rib-impl/pom.xml b/bgp/rib-impl/pom.xml index 73fe9646d5..49823f7480 100644 --- a/bgp/rib-impl/pom.xml +++ b/bgp/rib-impl/pom.xml @@ -153,15 +153,6 @@ org.apache.commons commons-lang3 - - org.osgi - org.osgi.core - provided - - - org.osgi - org.osgi.compendium - com.google.guava guava diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/AppPeer.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/AppPeer.java index 1245f90d13..aa0c5c32a3 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/AppPeer.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/AppPeer.java @@ -32,7 +32,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.osgi.framework.ServiceRegistration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,8 +43,6 @@ public final class AppPeer implements PeerBean, BGPPeerStateConsumer { private Neighbor currentConfiguration; @GuardedBy("this") private BgpAppPeerSingletonService bgpAppPeerSingletonService; - @GuardedBy("this") - private ServiceRegistration serviceRegistration; private static ApplicationRibId createAppRibId(final Neighbor neighbor) { final Config config = neighbor.getConfig(); @@ -77,10 +74,6 @@ public final class AppPeer implements PeerBean, BGPPeerStateConsumer { if (this.bgpAppPeerSingletonService != null) { this.bgpAppPeerSingletonService = null; } - if (this.serviceRegistration != null) { - this.serviceRegistration.unregister(); - this.serviceRegistration = null; - } } @Override @@ -110,10 +103,6 @@ public final class AppPeer implements PeerBean, BGPPeerStateConsumer { return this.bgpAppPeerSingletonService.getPeerState(); } - synchronized void setServiceRegistration(final ServiceRegistration serviceRegistration) { - this.serviceRegistration = serviceRegistration; - } - private static final class BgpAppPeerSingletonService implements BGPPeerStateConsumer { private final ApplicationPeer applicationPeer; private final DOMDataTreeChangeService dataTreeChangeService; diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BGPClusterSingletonService.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BGPClusterSingletonService.java index 188aac0ed2..a2f8b1c405 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BGPClusterSingletonService.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BGPClusterSingletonService.java @@ -11,7 +11,6 @@ package org.opendaylight.protocol.bgp.rib.impl.config; import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.APPLICATION_PEER_GROUP_NAME; import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.APPLICATION_PEER_GROUP_NAME_OPT; import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.getNeighborInstanceIdentifier; -import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.getNeighborInstanceName; import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.getRibInstanceName; import com.google.common.util.concurrent.FutureCallback; @@ -20,9 +19,7 @@ import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; import java.util.ArrayList; -import java.util.Dictionary; import java.util.HashMap; -import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.Optional; @@ -32,13 +29,20 @@ import java.util.stream.Collectors; import javax.annotation.Nonnull; import javax.annotation.concurrent.GuardedBy; import org.apache.commons.lang3.StringUtils; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; +import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier; +import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.BGPRibRoutingPolicyFactory; import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer; -import org.opendaylight.protocol.bgp.rib.impl.spi.InstanceType; +import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher; +import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext; import org.opendaylight.protocol.bgp.rib.spi.util.ClusterSingletonServiceRegistrationHelper; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Config; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor; @@ -48,9 +52,6 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.t import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborPeerGroupConfig; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.blueprint.container.BlueprintContainer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,25 +66,43 @@ public final class BGPClusterSingletonService implements ClusterSingletonService @GuardedBy("this") private final Map> peersGroups = new HashMap<>(); private final BGPTableTypeRegistryConsumer tableTypeRegistry; - private final BlueprintContainer container; - private final BundleContext bundleContext; private final ServiceGroupIdentifier serviceGroupIdentifier; private final AtomicBoolean instantiated = new AtomicBoolean(false); private final PeerGroupConfigLoader peerGroupLoader; private RibImpl ribImpl; + private final RIBExtensionConsumerContext ribExtensionContext; + private final BGPDispatcher dispatcher; + private final BGPRibRoutingPolicyFactory policyFactory; + private final BindingCodecTreeFactory codecFactory; + private final DOMDataBroker domBroker; + private final DataBroker dataBroker; + private final DOMSchemaService schemaService; + private final RpcProviderRegistry rpcRegistry; BGPClusterSingletonService( @Nonnull final PeerGroupConfigLoader peerGroupLoader, @Nonnull final ClusterSingletonServiceProvider provider, @Nonnull final BGPTableTypeRegistryConsumer tableTypeRegistry, - @Nonnull final BlueprintContainer container, - @Nonnull final BundleContext bundleContext, - @Nonnull final InstanceIdentifier bgpIid) { + @Nonnull final InstanceIdentifier bgpIid, + @Nonnull final RIBExtensionConsumerContext ribExtensionContext, + @Nonnull final BGPDispatcher dispatcher, + @Nonnull final BGPRibRoutingPolicyFactory policyFactory, + @Nonnull final BindingCodecTreeFactory codecFactory, + @Nonnull final DOMDataBroker domBroker, + @Nonnull final DataBroker dataBroker, + @Nonnull final DOMSchemaService schemaService, + @Nonnull final RpcProviderRegistry rpcRegistry) { this.peerGroupLoader = peerGroupLoader; this.tableTypeRegistry = tableTypeRegistry; - this.container = container; - this.bundleContext = bundleContext; this.bgpIid = bgpIid; + this.ribExtensionContext = ribExtensionContext; + this.dispatcher = dispatcher; + this.policyFactory = policyFactory; + this.codecFactory = codecFactory; + this.domBroker = domBroker; + this.dataBroker = dataBroker; + this.schemaService = schemaService; + this.rpcRegistry = rpcRegistry; final String ribInstanceName = getRibInstanceName(bgpIid); this.serviceGroupIdentifier = ServiceGroupIdentifier.create(ribInstanceName + "-service-group"); LOG.info("BGPClusterSingletonService {} registered", this.serviceGroupIdentifier.getValue()); @@ -159,7 +178,8 @@ public final class BGPClusterSingletonService implements ClusterSingletonService private synchronized void onGlobalCreated(final Global global) { LOG.debug("Creating RIB instance with configuration: {}", global); - this.ribImpl = (RibImpl) this.container.getComponentInstance(InstanceType.RIB.getBeanName()); + this.ribImpl = new RibImpl(ribExtensionContext, dispatcher, policyFactory, codecFactory, domBroker, dataBroker, + schemaService); initiateRibInstance(global, this.ribImpl); LOG.debug("RIB instance created: {}", this.ribImpl); } @@ -190,7 +210,6 @@ public final class BGPClusterSingletonService implements ClusterSingletonService private synchronized void initiateRibInstance(final Global global, final RibImpl ribImpl) { final String ribInstanceName = getRibInstanceName(this.bgpIid); ribImpl.start(global, ribInstanceName, this.tableTypeRegistry); - registerRibInstance(ribImpl, ribInstanceName); if (this.instantiated.get()) { this.ribImpl.instantiateServiceInstance(); } @@ -210,14 +229,6 @@ public final class BGPClusterSingletonService implements ClusterSingletonService return filtered; } - private synchronized void registerRibInstance(final RibImpl ribImpl, final String ribInstanceName) { - final Dictionary properties = new Hashtable<>(); - properties.put(InstanceType.RIB.getBeanName(), ribInstanceName); - final ServiceRegistration serviceRegistration = this.bundleContext.registerService( - InstanceType.RIB.getServices(), ribImpl, properties); - ribImpl.setServiceRegistration(serviceRegistration); - } - @Override public void close() { LOG.info("BGPClusterSingletonService {} close", this.serviceGroupIdentifier.getValue()); @@ -258,9 +269,9 @@ public final class BGPClusterSingletonService implements ClusterSingletonService LOG.debug("Creating Peer instance with configuration: {}", neighbor); final PeerBean bgpPeer; if (OpenConfigMappingUtil.isApplicationPeer(neighbor)) { - bgpPeer = (PeerBean) this.container.getComponentInstance(InstanceType.APP_PEER.getBeanName()); + bgpPeer = new AppPeer(); } else { - bgpPeer = (PeerBean) this.container.getComponentInstance(InstanceType.PEER.getBeanName()); + bgpPeer = new BgpPeer(this.rpcRegistry); } final InstanceIdentifier neighborInstanceIdentifier = getNeighborInstanceIdentifier(this.bgpIid, neighbor.key()); @@ -321,32 +332,10 @@ public final class BGPClusterSingletonService implements ClusterSingletonService closePeer(bgpPeer); } - private synchronized void registerPeerInstance(final BgpPeer bgpPeer, final String peerInstanceName) { - final Dictionary properties = new Hashtable<>(); - properties.put(InstanceType.PEER.getBeanName(), peerInstanceName); - final ServiceRegistration serviceRegistration = this.bundleContext - .registerService(InstanceType.PEER.getServices(), bgpPeer, properties); - bgpPeer.setServiceRegistration(serviceRegistration); - } - - private synchronized void registerAppPeerInstance(final AppPeer appPeer, final String peerInstanceName) { - final Dictionary properties = new Hashtable<>(); - properties.put(InstanceType.PEER.getBeanName(), peerInstanceName); - final ServiceRegistration serviceRegistration = this.bundleContext - .registerService(InstanceType.APP_PEER.getServices(), appPeer, properties); - appPeer.setServiceRegistration(serviceRegistration); - } - private synchronized void initiatePeerInstance(final InstanceIdentifier neighborIdentifier, final Neighbor neighbor, final PeerBean bgpPeer) { - final String peerInstanceName = getNeighborInstanceName(neighborIdentifier); if (this.ribImpl != null) { bgpPeer.start(this.ribImpl, neighbor, this.bgpIid, this.peerGroupLoader, this.tableTypeRegistry); - if (bgpPeer instanceof BgpPeer) { - registerPeerInstance((BgpPeer) bgpPeer, peerInstanceName); - } else if (bgpPeer instanceof AppPeer) { - registerAppPeerInstance((AppPeer) bgpPeer, peerInstanceName); - } } if (this.instantiated.get()) { bgpPeer.instantiateServiceInstance(); diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImpl.java index 9817ce0f3b..9e23d684b1 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImpl.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImpl.java @@ -33,9 +33,16 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; +import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; +import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.BGPRibRoutingPolicyFactory; import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer; +import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher; +import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.peer.group.PeerGroup; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.peer.group.PeerGroupKey; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp; @@ -53,8 +60,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.open import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.osgi.framework.BundleContext; -import org.osgi.service.blueprint.container.BlueprintContainer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,8 +67,6 @@ public final class BgpDeployerImpl implements ClusteredDataTreeChangeListener networkInstanceIId; - private final BlueprintContainer container; - private final BundleContext bundleContext; private final BGPTableTypeRegistryConsumer tableTypeRegistry; private final ClusterSingletonServiceProvider provider; @GuardedBy("this") @@ -82,17 +85,36 @@ public final class BgpDeployerImpl implements ClusteredDataTreeChangeListener registration; @GuardedBy("this") private boolean closed; + private final RIBExtensionConsumerContext ribExtensionContext; + private final BGPDispatcher dispatcher; + private final BGPRibRoutingPolicyFactory policyFactory; + private final BindingCodecTreeFactory codecFactory; + private final DOMDataBroker domBroker; + private final DOMSchemaService schemaService; + private final RpcProviderRegistry rpcRegistry; - public BgpDeployerImpl(final String networkInstanceName, final ClusterSingletonServiceProvider provider, - final BlueprintContainer container, - final BundleContext bundleContext, final DataBroker dataBroker, - final BGPTableTypeRegistryConsumer mappingService) { + public BgpDeployerImpl(final String networkInstanceName, + final ClusterSingletonServiceProvider provider, + final DataBroker dataBroker, + final BGPTableTypeRegistryConsumer mappingService, + final RIBExtensionConsumerContext ribExtensionContext, + final BGPDispatcher dispatcher, + final BGPRibRoutingPolicyFactory policyFactory, + final BindingCodecTreeFactory codecFactory, + final DOMDataBroker domBroker, + final DOMSchemaService schemaService, + final RpcProviderRegistry rpcRegistry) { this.dataBroker = requireNonNull(dataBroker); this.provider = requireNonNull(provider); this.networkInstanceName = requireNonNull(networkInstanceName); - this.container = requireNonNull(container); - this.bundleContext = requireNonNull(bundleContext); this.tableTypeRegistry = requireNonNull(mappingService); + this.ribExtensionContext = requireNonNull(ribExtensionContext); + this.dispatcher = requireNonNull(dispatcher); + this.policyFactory = requireNonNull(policyFactory); + this.codecFactory = requireNonNull(codecFactory); + this.domBroker = requireNonNull(domBroker); + this.schemaService = requireNonNull(schemaService); + this.rpcRegistry = rpcRegistry; this.networkInstanceIId = InstanceIdentifier.create(NetworkInstances.class) .child(NetworkInstance.class, new NetworkInstanceKey(networkInstanceName)); initializeNetworkInstance(dataBroker, this.networkInstanceIId).addCallback(new FutureCallback() { @@ -244,7 +266,8 @@ public final class BgpDeployerImpl implements ClusteredDataTreeChangeListener serviceRegistration; - @GuardedBy("this") private Neighbor currentConfiguration; @GuardedBy("this") private BgpPeerSingletonService bgpPeerSingletonService; @@ -150,11 +147,8 @@ public class BgpPeer implements PeerBean, BGPPeerStateConsumer { } @Override - public synchronized void close() { - if (this.serviceRegistration != null) { - this.serviceRegistration.unregister(); - this.serviceRegistration = null; - } + public void close() { + // No-op } @Override @@ -207,10 +201,6 @@ public class BgpPeer implements PeerBean, BGPPeerStateConsumer { return this.bgpPeerSingletonService.getPeerState(); } - synchronized void setServiceRegistration(final ServiceRegistration serviceRegistration) { - this.serviceRegistration = serviceRegistration; - } - synchronized void removePeer(final BGPPeerRegistry bgpPeerRegistry) { if (BgpPeer.this.currentConfiguration != null) { bgpPeerRegistry.removePeer(BgpPeer.this.currentConfiguration.getNeighborAddress()); diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImpl.java index adecec0867..2d0ededb2c 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImpl.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImpl.java @@ -58,7 +58,6 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; -import org.osgi.framework.ServiceRegistration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,7 +72,6 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable { private final DOMSchemaService domSchemaService; private final BGPRibRoutingPolicyFactory policyProvider; private RIBImpl ribImpl; - private ServiceRegistration serviceRegistration; private ListenerRegistration schemaContextRegistration; private List afiSafi; private AsNumber asNumber; @@ -205,18 +203,6 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable { this.schemaContextRegistration.close(); this.schemaContextRegistration = null; } - if (this.serviceRegistration != null) { - try { - this.serviceRegistration.unregister(); - } catch (final IllegalStateException e) { - LOG.warn("Failed to unregister {} service instance", this, e); - } - this.serviceRegistration = null; - } - } - - void setServiceRegistration(final ServiceRegistration serviceRegistration) { - this.serviceRegistration = serviceRegistration; } @Override diff --git a/bgp/rib-impl/src/main/resources/OSGI-INF/blueprint/bgp-rib.xml b/bgp/rib-impl/src/main/resources/OSGI-INF/blueprint/bgp-rib.xml index a74d4b41f2..bd9d1866de 100644 --- a/bgp/rib-impl/src/main/resources/OSGI-INF/blueprint/bgp-rib.xml +++ b/bgp/rib-impl/src/main/resources/OSGI-INF/blueprint/bgp-rib.xml @@ -44,28 +44,18 @@ destroy-method="close"> - - - - - - - - - - - + diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/AbstractConfig.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/AbstractConfig.java index 39bd7989d0..4b54027661 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/AbstractConfig.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/AbstractConfig.java @@ -57,7 +57,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.osgi.framework.ServiceRegistration; class AbstractConfig extends DefaultRibPoliciesMockTest { protected static final AsNumber AS = new AsNumber(72L); @@ -73,8 +72,6 @@ class AbstractConfig extends DefaultRibPoliciesMockTest { @Mock protected BGPDispatcher dispatcher; @Mock - protected ServiceRegistration serviceRegistration; - @Mock protected BGPPeerRegistry bgpPeerRegistry; @Mock protected ListenerRegistration listener; diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImplTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImplTest.java index 88cac35e27..5bdfa9c8f6 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImplTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImplTest.java @@ -5,16 +5,15 @@ * 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.impl.config; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.opendaylight.protocol.bgp.rib.impl.config.AbstractConfig.TABLES_KEY; import static org.opendaylight.protocol.bgp.rib.impl.config.RIBTestsUtil.createGlobalIpv4; @@ -23,27 +22,34 @@ import static org.opendaylight.protocol.bgp.rib.impl.config.RIBTestsUtil.createN import static org.opendaylight.protocol.bgp.rib.impl.config.RIBTestsUtil.createNeighborsNoRR; import static org.opendaylight.protocol.util.CheckUtil.checkPresentConfiguration; -import java.util.Dictionary; +import io.netty.util.concurrent.Future; import java.util.Optional; import java.util.concurrent.ExecutionException; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; +import org.mockito.Mockito; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy; import org.opendaylight.mdsal.dom.api.DOMSchemaService; +import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration; +import org.opendaylight.protocol.bgp.openconfig.routing.policy.impl.BGPRibRoutingPolicyFactoryImpl; +import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.StatementRegistry; import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer; import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl; import org.opendaylight.protocol.bgp.rib.impl.DefaultRibPoliciesMockTest; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher; -import org.opendaylight.protocol.bgp.rib.impl.spi.InstanceType; +import org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry; import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext; +import org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContext; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Neighbors; @@ -61,9 +67,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.blueprint.container.BlueprintContainer; public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { private static final BgpTableType TABLE_TYPE = new BgpTableTypeImpl(Ipv4AddressFamily.class, @@ -80,10 +83,6 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { private static final InstanceIdentifier NEIGHBORS_II = BGP_II.child(Neighbors.class); private static final int VERIFY_TIMEOUT_MILIS = 5000; - @Mock - private BlueprintContainer blueprintContainer; - @Mock - private BundleContext bundleContext; @Mock private BGPTableTypeRegistryConsumer tableTypeRegistry; @Mock @@ -91,9 +90,17 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { @Mock private ListenerRegistration dataTreeRegistration; @Mock - private ServiceRegistration registration; - @Mock private ClusterSingletonServiceProvider singletonServiceProvider; + @Mock + private BGPDispatcher dispatcher; + @Mock + private BindingCodecTreeFactory codecFactory; + @Mock + private DOMSchemaService schemaService; + @Mock + private RpcProviderRegistry rpcRegistry; + @Mock + private BGPPeerRegistry peerRegistry; private BgpDeployerImpl deployer; @Override @@ -104,11 +111,6 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { doReturn("mapping").when(this.tableTypeRegistry).toString(); doReturn(Optional.of(TABLE_TYPE)).when(this.tableTypeRegistry).getTableType(any()); doReturn(Optional.of(TABLES_KEY)).when(this.tableTypeRegistry).getTableKey(any()); - doNothing().when(this.registration).unregister(); - doReturn(this.registration).when(this.bundleContext).registerService(eq(InstanceType.RIB.getServices()), - any(), any(Dictionary.class)); - doReturn(this.registration).when(this.bundleContext).registerService(eq(InstanceType.PEER.getServices()), - any(), any(Dictionary.class)); doNothing().when(this.dataTreeRegistration).close(); doReturn("bgpPeer").when(this.modification).toString(); @@ -116,23 +118,32 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { doReturn(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()).when(extension).getClassLoadingStrategy(); final ClusterSingletonServiceRegistration serviceRegistration = mock(ClusterSingletonServiceRegistration.class); - doReturn(serviceRegistration).when(this.singletonServiceProvider).registerClusterSingletonService(any()); + doAnswer(invocationOnMock -> { + final ClusterSingletonService service = invocationOnMock.getArgument(0); + service.instantiateServiceInstance(); + return serviceRegistration; + }).when(this.singletonServiceProvider).registerClusterSingletonService(any(ClusterSingletonService.class)); doNothing().when(serviceRegistration).close(); - final DOMSchemaService schemaService = mock(DOMSchemaService.class); + schemaService = mock(DOMSchemaService.class); doNothing().when(this.dataTreeRegistration).close(); doReturn(this.dataTreeRegistration).when(schemaService).registerSchemaContextListener(any()); - final RibImpl ribImpl = new RibImpl(extension, mock(BGPDispatcher.class), this.policyProvider, - mock(BindingCodecTreeFactory.class), getDomBroker(), getDataBroker(), schemaService); - doReturn(ribImpl).when(this.blueprintContainer).getComponentInstance(eq("ribImpl")); - - doReturn(new BgpPeer(mock(RpcProviderRegistry.class))) - .when(this.blueprintContainer).getComponentInstance(eq("bgpPeer")); - - this.deployer = new BgpDeployerImpl(NETWORK_INSTANCE_NAME, this.singletonServiceProvider, - this.blueprintContainer, this.bundleContext, getDataBroker(), this.tableTypeRegistry); + final DataBroker dataBroker = getDataBroker(); + final DOMDataBroker domBroker = getDomBroker(); + final SimpleRIBExtensionProviderContext ribExtensionContext = new SimpleRIBExtensionProviderContext(); + final BGPRibRoutingPolicyFactoryImpl policyFactory = new BGPRibRoutingPolicyFactoryImpl(dataBroker, + new StatementRegistry()); + doReturn(this.peerRegistry).when(this.dispatcher).getBGPPeerRegistry(); + final Future future = Mockito.mock(Future.class); + doReturn(true).when(future).cancel(true); + doReturn(future).when(this.dispatcher).createReconnectingClient(any(), any(), anyInt(), any()); + doNothing().when(this.peerRegistry).addPeer(any(), any(), any()); + doNothing().when(this.peerRegistry).removePeer(any()); + this.deployer = new BgpDeployerImpl(NETWORK_INSTANCE_NAME, this.singletonServiceProvider, dataBroker, + this.tableTypeRegistry, ribExtensionContext, dispatcher, policyFactory, codecFactory, domBroker, + schemaService, rpcRegistry); } @Test @@ -140,33 +151,20 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { deployer.init(); checkPresentConfiguration(getDataBroker(), NETWORK_II); createRib(createGlobalIpv4()); + verify(this.schemaService, timeout(VERIFY_TIMEOUT_MILIS)).registerSchemaContextListener(any()); - verify(this.blueprintContainer, timeout(VERIFY_TIMEOUT_MILIS)).getComponentInstance(eq("ribImpl")); - verify(this.bundleContext, timeout(VERIFY_TIMEOUT_MILIS)).registerService(eq(InstanceType.RIB.getServices()), - any(), any(Dictionary.class)); //change with same rib already existing createRib(createGlobalIpv4()); - verify(this.blueprintContainer).getComponentInstance(eq("ribImpl")); - verify(this.bundleContext).registerService(eq(InstanceType.RIB.getServices()), any(), any(Dictionary.class)); + verify(this.schemaService, timeout(VERIFY_TIMEOUT_MILIS)).registerSchemaContextListener(any()); //Update for existing rib createRib(createGlobalIpv6()); - - verify(this.blueprintContainer).getComponentInstance(eq("ribImpl")); - verify(this.bundleContext, timeout(VERIFY_TIMEOUT_MILIS).times(2)).registerService( - eq(InstanceType.RIB.getServices()), any(), any(Dictionary.class)); - verify(this.dataTreeRegistration).close(); - verify(this.registration).unregister(); + verify(this.dataTreeRegistration, timeout(VERIFY_TIMEOUT_MILIS)).close(); //Delete for existing rib deleteRib(); - - verify(this.blueprintContainer).getComponentInstance(eq("ribImpl")); - verify(this.bundleContext, timeout(VERIFY_TIMEOUT_MILIS).times(2)) - .registerService(eq(InstanceType.RIB.getServices()), any(), any(Dictionary.class)); verify(this.dataTreeRegistration, timeout(VERIFY_TIMEOUT_MILIS).times(2)).close(); - verify(this.registration, timeout(VERIFY_TIMEOUT_MILIS).times(2)).unregister(); deployer.close(); } @@ -178,29 +176,18 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { createRib(createGlobalIpv4()); createNeighbor(createNeighbors()); - verify(this.blueprintContainer, timeout(VERIFY_TIMEOUT_MILIS)).getComponentInstance(eq("bgpPeer")); - verify(this.bundleContext, timeout(VERIFY_TIMEOUT_MILIS)).registerService(eq(InstanceType.PEER.getServices()), - any(BgpPeer.class), any(Dictionary.class)); + verify(this.peerRegistry, timeout(VERIFY_TIMEOUT_MILIS).times(1)).addPeer(any(), any(), any()); //change with same peer already existing createNeighbor(createNeighbors()); - verify(this.blueprintContainer).getComponentInstance(eq("bgpPeer")); - verify(this.bundleContext).registerService(eq(InstanceType.PEER.getServices()), - any(BgpPeer.class), any(Dictionary.class)); - + verify(this.peerRegistry, timeout(VERIFY_TIMEOUT_MILIS).times(1)).addPeer(any(), any(), any()); //Update for peer createNeighbor(createNeighborsNoRR()); - - verify(this.blueprintContainer).getComponentInstance(eq("bgpPeer")); - verify(this.bundleContext, timeout(VERIFY_TIMEOUT_MILIS).times(2)) - .registerService(eq(InstanceType.PEER.getServices()), any(BgpPeer.class), any(Dictionary.class)); - verify(this.registration).unregister(); + verify(this.peerRegistry, timeout(VERIFY_TIMEOUT_MILIS).times(2)).addPeer(any(), any(), any()); + verify(this.peerRegistry, timeout(VERIFY_TIMEOUT_MILIS).times(1)).removePeer(any()); deleteNeighbors(); - //Delete existing Peer - verify(this.bundleContext, times(2)) - .registerService(eq(InstanceType.PEER.getServices()), any(BgpPeer.class), any(Dictionary.class)); - verify(this.registration, timeout(VERIFY_TIMEOUT_MILIS).times(2)).unregister(); + verify(this.peerRegistry, timeout(VERIFY_TIMEOUT_MILIS).times(2)).removePeer(any()); deployer.close(); } diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java index 1802a0079c..0739185af4 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java @@ -125,7 +125,6 @@ public class BgpPeerTest extends AbstractConfig { public void setUp() throws Exception { super.setUp(); this.bgpPeer = new BgpPeer(Mockito.mock(RpcProviderRegistry.class)); - Mockito.doNothing().when(this.serviceRegistration).unregister(); } @Test @@ -150,7 +149,6 @@ public class BgpPeerTest extends AbstractConfig { } catch (final IllegalStateException expected) { assertEquals("Previous peer instance was not closed.", expected.getMessage()); } - this.bgpPeer.setServiceRegistration(this.serviceRegistration); this.bgpPeer.closeServiceInstance(); this.bgpPeer.close(); verify(this.future).cancel(true); @@ -169,7 +167,6 @@ public class BgpPeerTest extends AbstractConfig { this.bgpPeer.closeServiceInstance(); this.bgpPeer.close(); - verify(this.serviceRegistration).unregister(); verify(this.future, times(2)).cancel(true); final Neighbor neighborDiffConfig = new NeighborBuilder().setNeighborAddress(NEIGHBOR_ADDRESS) diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImplTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImplTest.java index 305b8f8655..b3cb17301b 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImplTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImplTest.java @@ -54,7 +54,6 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.osgi.framework.ServiceRegistration; public class RibImplTest extends AbstractConfig { private static final List AFISAFIS = new ArrayList<>(); @@ -81,8 +80,6 @@ public class RibImplTest extends AbstractConfig { private ListenerRegistration dataTreeRegistration; @Mock private RIBSupport ribSupport; - @Mock - private ServiceRegistration serviceRegistration; @Override @Before @@ -108,7 +105,6 @@ public class RibImplTest extends AbstractConfig { doNothing().when(this.dataTreeRegistration).close(); doReturn(mock(ListenerRegistration.class)).when(dOMDataTreeChangeService) .registerDataTreeChangeListener(any(), any()); - doNothing().when(this.serviceRegistration).unregister(); } @Test @@ -121,7 +117,6 @@ public class RibImplTest extends AbstractConfig { this.domDataBroker, getDataBroker(), this.domSchemaService); - ribImpl.setServiceRegistration(this.serviceRegistration); ribImpl.start(createGlobal(), "rib-test", this.tableTypeRegistry); verify(this.extension).getClassLoadingStrategy(); verify(this.domDataBroker).getSupportedExtensions(); @@ -146,7 +141,6 @@ public class RibImplTest extends AbstractConfig { ribImpl.close(); verify(this.dataTreeRegistration).close(); verify(this.dataTreeRegistration).close(); - verify(this.serviceRegistration).unregister(); } private static Global createGlobal() { diff --git a/bgp/rib-spi/pom.xml b/bgp/rib-spi/pom.xml index e3c073e576..664644ae90 100644 --- a/bgp/rib-spi/pom.xml +++ b/bgp/rib-spi/pom.xml @@ -105,11 +105,6 @@ io.netty netty-common - - org.osgi - org.osgi.core - provided - org.opendaylight.mdsal mdsal-singleton-common-api diff --git a/bgp/topology-provider/pom.xml b/bgp/topology-provider/pom.xml index e75b3b6398..2f0c67ac54 100644 --- a/bgp/topology-provider/pom.xml +++ b/bgp/topology-provider/pom.xml @@ -125,11 +125,6 @@ io.netty netty-buffer - - org.osgi - org.osgi.core - provided - diff --git a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/config/BgpTopologyDeployerImpl.java b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/config/BgpTopologyDeployerImpl.java index 9267ecf388..fd3a7b60cd 100644 --- a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/config/BgpTopologyDeployerImpl.java +++ b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/config/BgpTopologyDeployerImpl.java @@ -20,7 +20,6 @@ import javax.annotation.concurrent.GuardedBy; import org.opendaylight.bgpcep.bgp.topology.provider.spi.BgpTopologyDeployer; import org.opendaylight.bgpcep.bgp.topology.provider.spi.BgpTopologyProvider; import org.opendaylight.bgpcep.bgp.topology.provider.spi.TopologyReferenceSingletonService; -import org.opendaylight.bgpcep.topology.TopologyReference; import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; @@ -36,8 +35,6 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. import org.opendaylight.yangtools.concepts.AbstractRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,15 +50,13 @@ public final class BgpTopologyDeployerImpl implements BgpTopologyDeployer, AutoC @GuardedBy("this") private final Set topologies = new HashSet<>(); private final DataBroker dataBroker; - private final BundleContext context; private final ClusterSingletonServiceProvider singletonProvider; private ListenerRegistration registration; @GuardedBy("this") private boolean closed; - public BgpTopologyDeployerImpl(final BundleContext context, final DataBroker dataBroker, + public BgpTopologyDeployerImpl(final DataBroker dataBroker, final ClusterSingletonServiceProvider singletonProvider) { - this.context = requireNonNull(context); this.dataBroker = requireNonNull(dataBroker); this.singletonProvider = requireNonNull(singletonProvider); } @@ -136,9 +131,6 @@ public final class BgpTopologyDeployerImpl implements BgpTopologyDeployer, AutoC final Dictionary properties = new Hashtable<>(); properties.put("topology-id", topologyProviderService.getInstanceIdentifier() .firstKeyOf(Topology.class).getTopologyId().getValue()); - final ServiceRegistration registerService = this.context - .registerService(new String[]{TopologyReference.class.getName()}, - topologyProviderService, properties); final ClusterSingletonServiceRegistration registerClusterSingletonService = registerSingletonService(topologyProviderService); return new AbstractRegistration() { @@ -149,8 +141,6 @@ public final class BgpTopologyDeployerImpl implements BgpTopologyDeployer, AutoC } catch (final Exception e) { LOG.warn("Failed to close ClusterSingletonServiceRegistration {} for TopologyBuilder {}", registerClusterSingletonService, topologyProviderService.getInstanceIdentifier(), e); - } finally { - registerService.unregister(); } } }; diff --git a/bgp/topology-provider/src/main/resources/OSGI-INF/blueprint/bgp-topology-provider.xml b/bgp/topology-provider/src/main/resources/OSGI-INF/blueprint/bgp-topology-provider.xml index 2a3e792e9a..83236c4eb4 100644 --- a/bgp/topology-provider/src/main/resources/OSGI-INF/blueprint/bgp-topology-provider.xml +++ b/bgp/topology-provider/src/main/resources/OSGI-INF/blueprint/bgp-topology-provider.xml @@ -15,7 +15,6 @@ - -- 2.36.6