X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Frib-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Frib%2Fimpl%2Fconfig%2FBGPClusterSingletonService.java;fp=bgp%2Frib-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Frib%2Fimpl%2Fconfig%2FBGPClusterSingletonService.java;h=46aab8d0c63dc98b7542ad07a721b67194287785;hb=69986c1d0f73bdbde96441e6709f98e3ad7f37a5;hp=450fc79ebd4d50b9105d7224279a126cd12a26c5;hpb=ccd8e7a1b5e8761c10627bd26e0fce3656ccb791;p=bgpcep.git 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 450fc79ebd..46aab8d0c6 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();