* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-package org.opendaylight.bgpcep.bgp.topology.provider;
+package org.opendaylight.bgpcep.bgp.topology.provider.config;
-import com.google.common.collect.Maps;
import java.util.HashMap;
import java.util.Map;
-import java.util.Map.Entry;
+import java.util.function.Function;
+import org.opendaylight.bgpcep.bgp.topology.provider.AbstractTopologyBuilder;
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.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.protocol.bgp.rib.DefaultRibReference;
import org.opendaylight.protocol.bgp.rib.RibReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public abstract class AbstractBgpTopologyProvider implements BgpTopologyProvider, AutoCloseable {
+abstract class AbstractBgpTopologyProvider implements BgpTopologyProvider, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(AbstractBgpTopologyProvider.class);
- private final Map<TopologyId, Entry<TopologyReferenceAutoCloseable, AbstractRegistration>> topologyBuilders = new HashMap<>();
+ private final Map<TopologyId, TopologyReferenceSingletonService> topologyBuilders = new HashMap<>();
private final AbstractRegistration registration;
private final DataBroker dataBroker;
private final BgpTopologyDeployer deployer;
}
@Override
- public final void onTopologyBuilderCreated(final Topology topology) {
+ public final void onTopologyBuilderCreated(final Topology topology, final Function<Topology, Void> writeFunction) {
LOG.debug("Cretaing topology builder instance {}", topology);
- final TopologyReferenceAutoCloseable topologyBuilder = createInstance(topology);
- final AbstractRegistration serviceRegistration = this.deployer.registerTopologyReference(topologyBuilder);
- this.topologyBuilders.put(getTopologyId(topologyBuilder), Maps.immutableEntry(topologyBuilder, serviceRegistration));
- LOG.debug("Topology builder instance created {}", topologyBuilder);
+ final TopologyReferenceSingletonService currentInstance = this.topologyBuilders.get(topology.getTopologyId());
+ if (currentInstance == null || !currentInstance.getConfiguration().equals(topology)) {
+ final TopologyReferenceSingletonService topologyBuilder = createInstance(topology, writeFunction);
+ this.topologyBuilders.put(topology.getTopologyId(), topologyBuilder);
+ LOG.debug("Topology builder instance created {}", topologyBuilder);
+ }
}
@Override
public final void onTopologyBuilderRemoved(final Topology topology) {
LOG.debug("Removing topology builder instance {}", topology);
- final Entry<TopologyReferenceAutoCloseable, AbstractRegistration> topologyBuilder = this.topologyBuilders.remove(topology.getTopologyId());
+ final TopologyReferenceSingletonService topologyBuilder = this.topologyBuilders.remove(topology.getTopologyId());
if (topologyBuilder != null) {
- topologyBuilder.getValue().close();
- topologyBuilder.getKey().close();
+ topologyBuilder.close();
LOG.debug("Topology builder instance removed {}", topologyBuilder);
}
}
return topologyTypeFilter(topologyTypes);
}
- TopologyReferenceAutoCloseable createInstance(final Topology topology) {
+ private TopologyReferenceSingletonService createInstance(final Topology topology, final Function<Topology, Void> writeFunction) {
final RibReference ribReference = new DefaultRibReference(InstanceIdentifier.create(BgpRib.class).child(Rib.class, new RibKey(topology.getAugmentation(Topology1.class).getRibId())));
- return initiate(this.dataBroker, ribReference, topology.getTopologyId());
+ final AbstractTopologyBuilder<?> topologyBuilder = createTopologyBuilder(this.dataBroker, ribReference, topology.getTopologyId());
+ return new TopologyReferenceSingletonServiceImpl(topologyBuilder, this.deployer, topology, writeFunction);
}
- abstract TopologyReferenceAutoCloseable initiate(final DataBroker dataProvider, final RibReference locRibReference,
+ abstract AbstractTopologyBuilder<?> createTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference,
final TopologyId topologyId);
abstract boolean topologyTypeFilter(TopologyTypes1 topology);
- private static TopologyId getTopologyId(final TopologyReferenceAutoCloseable topologyBuilder) {
- return topologyBuilder.getInstanceIdentifier().firstKeyOf(Topology.class).getTopologyId();
- }
-
}
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-package org.opendaylight.bgpcep.bgp.topology.provider;
+package org.opendaylight.bgpcep.bgp.topology.provider.config;
import com.google.common.reflect.AbstractInvocationHandler;
import com.google.common.reflect.Reflection;
import java.lang.reflect.Method;
+import java.util.function.Function;
+import org.opendaylight.bgpcep.bgp.topology.provider.spi.BgpTopologyDeployer;
+import org.opendaylight.bgpcep.bgp.topology.provider.spi.TopologyReferenceSingletonService;
import org.opendaylight.bgpcep.topology.TopologyReference;
import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
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.common.api.data.TransactionCommitFailedException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.RibId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.Rib;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.RibKey;
public final class BackwardsCssTopologyProvider {
- public static TopologyReferenceAutoCloseable createBackwardsCssInstance(final TopologyTypes topologyTypes, final TopologyId topologyId, final DataBroker dataBroker, final BundleContext bundleContext,
+ public static TopologyReferenceSingletonService createBackwardsCssInstance(final TopologyTypes topologyTypes, final TopologyId topologyId, final DataBroker dataBroker, final BundleContext bundleContext,
final KeyedInstanceIdentifier<Rib, RibKey> ribIId) {
//map configuration to topology
final Topology topology = createConfiguration(topologyTypes, topologyId, ribIId.getKey().getId());
- //write to configuration DS
- final KeyedInstanceIdentifier<Topology, TopologyKey> topologyIId = InstanceIdentifier.create(NetworkTopology.class).child(Topology.class, topology.getKey());
- writeConfiguration(dataBroker, topologyIId, topology);
+ //create instance
+ final WaitingServiceTracker<BgpTopologyDeployer> deployerTracker = WaitingServiceTracker.create(BgpTopologyDeployer.class, bundleContext);
+ final BgpTopologyDeployer topologyDeployer = deployerTracker.waitForService(WaitingServiceTracker.FIVE_MINUTES);
+ topologyDeployer.createInstance(topology, new Function<Topology, Void>() {
+ @Override
+ public Void apply(final Topology topology) {
+ writeConfiguration(dataBroker, topology);
+ return null;
+ }
+ });
//get topology service, use filter
final WaitingServiceTracker<TopologyReference> topologyTracker = WaitingServiceTracker.create(TopologyReference.class,
bundleContext, "(" + "topology-id" + "=" + topology.getTopologyId().getValue() + ")");
final TopologyReference topologyService = topologyTracker.waitForService(WaitingServiceTracker.FIVE_MINUTES);
- return Reflection.newProxy(TopologyReferenceAutoCloseable.class, new AbstractInvocationHandler() {
+ return Reflection.newProxy(TopologyReferenceSingletonService.class, new AbstractInvocationHandler() {
@Override
protected Object handleInvocation(final Object proxy, final Method method, final Object[] args) throws Throwable {
if (method.getName().equals("close")) {
- removeConfiguration(dataBroker, topologyIId);
+ topologyDeployer.removeInstance(topology);
+ deployerTracker.close();
topologyTracker.close();
return null;
} else {
});
}
+ private static void writeConfiguration(final DataBroker dataBroker, final Topology topology) {
+ final KeyedInstanceIdentifier<Topology, TopologyKey> topologyIId = InstanceIdentifier.create(NetworkTopology.class).child(Topology.class,
+ topology.getKey());
+ final WriteTransaction wTx = dataBroker.newWriteOnlyTransaction();
+ wTx.put(LogicalDatastoreType.CONFIGURATION, topologyIId, topology, true);
+ wTx.submit();
+ }
+
private static Topology createConfiguration(final TopologyTypes topologyTypes, final TopologyId topologyId, final RibId ribId) {
final TopologyBuilder topologyBuilder = new TopologyBuilder();
topologyBuilder.setTopologyId(topologyId);
return topologyBuilder.build();
}
- private static void writeConfiguration(final DataBroker dataBroker, final KeyedInstanceIdentifier<Topology, TopologyKey> topologyIId, final Topology topology) {
- final WriteTransaction wTx = dataBroker.newWriteOnlyTransaction();
- wTx.put(LogicalDatastoreType.CONFIGURATION, topologyIId, topology, true);
- wTx.submit();
- }
-
- private static void removeConfiguration(final DataBroker dataBroker, final KeyedInstanceIdentifier<Topology, TopologyKey> topologyIId) throws TransactionCommitFailedException {
- final WriteTransaction wTx = dataBroker.newWriteOnlyTransaction();
- wTx.delete(LogicalDatastoreType.CONFIGURATION, topologyIId);
- wTx.submit().checkedGet();
- }
-
}
\ No newline at end of file
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-package org.opendaylight.bgpcep.bgp.topology.provider;
+package org.opendaylight.bgpcep.bgp.topology.provider.config;
import com.google.common.base.Preconditions;
import com.google.common.collect.Iterables;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Set;
+import java.util.function.Function;
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.DataTreeIdentifier;
import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
import org.opendaylight.yangtools.concepts.AbstractRegistration;
private final DataBroker dataBroker;
private final ListenerRegistration<BgpTopologyDeployerImpl> registration;
private final BundleContext context;
+ private final ClusterSingletonServiceProvider singletonProvider;
@GuardedBy("this")
private boolean closed;
- public BgpTopologyDeployerImpl(final BundleContext context, final DataBroker dataBroker) {
+ public BgpTopologyDeployerImpl(final BundleContext context, final DataBroker dataBroker, final ClusterSingletonServiceProvider singletonProvider) {
this.context = Preconditions.checkNotNull(context);
this.dataBroker = Preconditions.checkNotNull(dataBroker);
+ this.singletonProvider = Preconditions.checkNotNull(singletonProvider);
this.registration =
this.dataBroker.registerDataTreeChangeListener(new DataTreeIdentifier<Topology>(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(NetworkTopology.class).child(Topology.class)), this);
LOG.info("BGP topology deployer started.");
break;
case SUBTREE_MODIFIED:
filterTopologyBuilders(dataBefore).forEach(provider -> provider.onTopologyBuilderRemoved(dataBefore));
- filterTopologyBuilders(dataAfter).forEach(provider -> provider.onTopologyBuilderCreated(dataAfter));
+ filterTopologyBuilders(dataAfter).forEach(provider -> provider.onTopologyBuilderCreated(dataAfter, null));
break;
case WRITE:
- filterTopologyBuilders(dataAfter).forEach(provider -> provider.onTopologyBuilderCreated(dataAfter));
+ filterTopologyBuilders(dataAfter).forEach(provider -> provider.onTopologyBuilderCreated(dataAfter, null));
break;
default:
break;
return this.dataBroker;
}
- private synchronized Iterable<BgpTopologyProvider> filterTopologyBuilders(final Topology topology) {
+ private Iterable<BgpTopologyProvider> filterTopologyBuilders(final Topology topology) {
return Iterables.filter(this.topologyProviders, input -> input.topologyTypeFilter(topology));
}
@Override
- public AbstractRegistration registerTopologyReference(final TopologyReference topologyReference) {
+ public AbstractRegistration registerService(final TopologyReferenceSingletonService topologyProviderService) {
final Dictionary<String, String> properties = new Hashtable<>();
- properties.put("topology-id", topologyReference.getInstanceIdentifier().firstKeyOf(Topology.class).getTopologyId().getValue());
- final ServiceRegistration<?> registerService = this.context.registerService(new String[] {TopologyReference.class.getName()}, topologyReference, properties);
+ 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 = this.singletonProvider.registerClusterSingletonService(topologyProviderService);
return new AbstractRegistration() {
@Override
protected void removeRegistration() {
+ try {
+ registerClusterSingletonService.close();
+ } catch (final Exception e) {
+ LOG.warn("Failed to close ClusterSingletonServiceRegistration {} for TopologyBuilder {}",
+ registerClusterSingletonService, topologyProviderService.getInstanceIdentifier(), e);
+ }
registerService.unregister();
}
};
}
+ @Override
+ public void createInstance(final Topology topology, final Function<Topology, Void> writeFunction) {
+ filterTopologyBuilders(topology).forEach(provider -> provider.onTopologyBuilderCreated(topology, writeFunction));
+ }
+
+ @Override
+ public void removeInstance(final Topology topology) {
+ filterTopologyBuilders(topology).forEach(provider -> provider.onTopologyBuilderRemoved(topology));
+ }
+
}
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-package org.opendaylight.bgpcep.bgp.topology.provider;
+package org.opendaylight.bgpcep.bgp.topology.provider.config;
+import org.opendaylight.bgpcep.bgp.topology.provider.AbstractTopologyBuilder;
+import org.opendaylight.bgpcep.bgp.topology.provider.Ipv4ReachabilityTopologyBuilder;
import org.opendaylight.bgpcep.bgp.topology.provider.spi.BgpTopologyDeployer;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.protocol.bgp.rib.RibReference;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.TopologyTypes1;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public final class Ipv4TopologyProvider extends AbstractBgpTopologyProvider {
}
@Override
- TopologyReferenceAutoCloseable initiate(final DataBroker dataProvider, final RibReference locRibReference,
- final TopologyId topologyId) {
- final Ipv4ReachabilityTopologyBuilder builder = new Ipv4ReachabilityTopologyBuilder(dataProvider, locRibReference, topologyId);
- builder.start();
- return new TopologyReferenceAutoCloseable() {
- @Override
- public void close() {
- builder.close();
- }
-
- @Override
- public InstanceIdentifier<Topology> getInstanceIdentifier() {
- return builder.getInstanceIdentifier();
- }
- };
+ boolean topologyTypeFilter(final TopologyTypes1 topology) {
+ return topology.getBgpIpv4ReachabilityTopology() != null;
}
@Override
- boolean topologyTypeFilter(final TopologyTypes1 topology) {
- return topology.getBgpIpv4ReachabilityTopology() != null;
+ AbstractTopologyBuilder<?> createTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference, final TopologyId topologyId) {
+ return new Ipv4ReachabilityTopologyBuilder(dataProvider, locRibReference, topologyId);
}
}
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-package org.opendaylight.bgpcep.bgp.topology.provider;
+package org.opendaylight.bgpcep.bgp.topology.provider.config;
+import org.opendaylight.bgpcep.bgp.topology.provider.AbstractTopologyBuilder;
+import org.opendaylight.bgpcep.bgp.topology.provider.Ipv6ReachabilityTopologyBuilder;
import org.opendaylight.bgpcep.bgp.topology.provider.spi.BgpTopologyDeployer;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.protocol.bgp.rib.RibReference;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.TopologyTypes1;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public final class Ipv6TopologyProvider extends AbstractBgpTopologyProvider {
}
@Override
- TopologyReferenceAutoCloseable initiate(final DataBroker dataProvider, final RibReference locRibReference,
- final TopologyId topologyId) {
- final Ipv6ReachabilityTopologyBuilder builder = new Ipv6ReachabilityTopologyBuilder(dataProvider, locRibReference, topologyId);
- builder.start();
- return new TopologyReferenceAutoCloseable() {
- @Override
- public void close() {
- builder.close();
- }
-
- @Override
- public InstanceIdentifier<Topology> getInstanceIdentifier() {
- return builder.getInstanceIdentifier();
- }
- };
+ AbstractTopologyBuilder<?> createTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference, final TopologyId topologyId) {
+ return new Ipv6ReachabilityTopologyBuilder(dataProvider, locRibReference, topologyId);
}
@Override
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-package org.opendaylight.bgpcep.bgp.topology.provider;
+package org.opendaylight.bgpcep.bgp.topology.provider.config;
+import org.opendaylight.bgpcep.bgp.topology.provider.AbstractTopologyBuilder;
+import org.opendaylight.bgpcep.bgp.topology.provider.LinkstateTopologyBuilder;
import org.opendaylight.bgpcep.bgp.topology.provider.spi.BgpTopologyDeployer;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.protocol.bgp.rib.RibReference;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.TopologyTypes1;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public final class LinkstateTopologyProvider extends AbstractBgpTopologyProvider {
}
@Override
- TopologyReferenceAutoCloseable initiate(final DataBroker dataProvider, final RibReference locRibReference,
- final TopologyId topologyId) {
- final LinkstateTopologyBuilder builder = new LinkstateTopologyBuilder(dataProvider, locRibReference, topologyId);
- builder.start();
- return new TopologyReferenceAutoCloseable() {
- @Override
- public void close() {
- builder.close();
- }
-
- @Override
- public InstanceIdentifier<Topology> getInstanceIdentifier() {
- return builder.getInstanceIdentifier();
- }
- };
+ AbstractTopologyBuilder<?> createTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference, final TopologyId topologyId) {
+ return new LinkstateTopologyBuilder(dataProvider, locRibReference, topologyId);
}
@Override
--- /dev/null
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.bgpcep.bgp.topology.provider.config;
+
+import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.function.Function;
+import org.opendaylight.bgpcep.bgp.topology.provider.AbstractTopologyBuilder;
+import org.opendaylight.bgpcep.bgp.topology.provider.spi.BgpTopologyDeployer;
+import org.opendaylight.bgpcep.bgp.topology.provider.spi.TopologyReferenceSingletonService;
+import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yangtools.concepts.AbstractRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public final class TopologyReferenceSingletonServiceImpl implements TopologyReferenceSingletonService {
+
+ private final AbstractTopologyBuilder<?> topologyBuilder;
+ private final AbstractRegistration serviceRegistration;
+ private final Topology configuration;
+ private final Function<Topology, Void> writeFunction;
+
+ TopologyReferenceSingletonServiceImpl(final AbstractTopologyBuilder<?> topologyBuilder, final BgpTopologyDeployer deployer,
+ final Topology configuration, final Function<Topology, Void> writeFunction) {
+ this.writeFunction = writeFunction;
+ this.configuration = Preconditions.checkNotNull(configuration);
+ this.topologyBuilder = Preconditions.checkNotNull(topologyBuilder);
+ this.serviceRegistration = deployer.registerService(this);
+ }
+
+ @Override
+ public InstanceIdentifier<Topology> getInstanceIdentifier() {
+ return this.topologyBuilder.getInstanceIdentifier();
+ }
+
+ @Override
+ public void close() {
+ this.serviceRegistration.close();
+ }
+
+ @Override
+ public void instantiateServiceInstance() {
+ this.topologyBuilder.start();
+ if (this.writeFunction != null) {
+ this.writeFunction.apply(this.configuration);
+ }
+ }
+
+ @Override
+ public ListenableFuture<Void> closeServiceInstance() {
+ this.topologyBuilder.close();
+ return Futures.immediateFuture(null);
+ }
+
+ @Override
+ public ServiceGroupIdentifier getIdentifier() {
+ return ServiceGroupIdentifier.create(getInstanceIdentifier().firstKeyOf(Topology.class).getTopologyId().getValue());
+ }
+
+ @Override
+ public Topology getConfiguration() {
+ return this.configuration;
+ }
+
+}
package org.opendaylight.bgpcep.bgp.topology.provider.spi;
-import org.opendaylight.bgpcep.topology.TopologyReference;
+import java.util.function.Function;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
import org.opendaylight.yangtools.concepts.AbstractRegistration;
public interface BgpTopologyDeployer {
DataBroker getDataBroker();
- AbstractRegistration registerTopologyReference(TopologyReference topologyReference);
+ AbstractRegistration registerService(TopologyReferenceSingletonService topologyProviderService);
+
+ void createInstance(Topology topology, Function<Topology, Void> writeFunction);
+
+ void removeInstance(Topology topology);
}
package org.opendaylight.bgpcep.bgp.topology.provider.spi;
+import java.util.function.Function;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
void onTopologyBuilderRemoved(Topology topology);
- void onTopologyBuilderCreated(Topology topology);
+ void onTopologyBuilderCreated(Topology topology, Function<Topology, Void> writeFunction);
}
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-package org.opendaylight.bgpcep.bgp.topology.provider;
+package org.opendaylight.bgpcep.bgp.topology.provider.spi;
import org.opendaylight.bgpcep.topology.TopologyReference;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
-public interface TopologyReferenceAutoCloseable extends AutoCloseable, TopologyReference {
+public interface TopologyReferenceSingletonService extends TopologyReference, AutoCloseable, ClusterSingletonService {
@Override
public void close();
+ Topology getConfiguration();
+
}
*/
package org.opendaylight.controller.config.yang.bgp.reachability.ipv4;
-import org.opendaylight.bgpcep.bgp.topology.provider.BackwardsCssTopologyProvider;
import org.opendaylight.bgpcep.bgp.topology.provider.Ipv4ReachabilityTopologyBuilder;
+import org.opendaylight.bgpcep.bgp.topology.provider.config.BackwardsCssTopologyProvider;
import org.opendaylight.controller.config.api.DependencyResolver;
import org.opendaylight.controller.config.api.JmxAttributeValidationException;
import org.opendaylight.controller.config.api.ModuleIdentifier;
/**
*
*/
+@Deprecated
public final class Ipv4ReachabilityTopologyBuilderModule extends AbstractIpv4ReachabilityTopologyBuilderModule {
private BundleContext bundleContext;
/**
*
*/
+@Deprecated
public class Ipv4ReachabilityTopologyBuilderModuleFactory extends AbstractIpv4ReachabilityTopologyBuilderModuleFactory {
@Override
*/
package org.opendaylight.controller.config.yang.bgp.reachability.ipv6;
-import org.opendaylight.bgpcep.bgp.topology.provider.BackwardsCssTopologyProvider;
import org.opendaylight.bgpcep.bgp.topology.provider.Ipv6ReachabilityTopologyBuilder;
+import org.opendaylight.bgpcep.bgp.topology.provider.config.BackwardsCssTopologyProvider;
import org.opendaylight.controller.config.api.DependencyResolver;
import org.opendaylight.controller.config.api.JmxAttributeValidationException;
import org.opendaylight.controller.config.api.ModuleIdentifier;
import org.osgi.framework.BundleContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
*
*/
+@Deprecated
public final class Ipv6ReachabilityTopologyBuilderModule extends AbstractIpv6ReachabilityTopologyBuilderModule {
- private static final Logger LOG = LoggerFactory.getLogger(Ipv6ReachabilityTopologyBuilderModule.class);
private BundleContext bundleContext;
/**
*
*/
+@Deprecated
public class Ipv6ReachabilityTopologyBuilderModuleFactory extends AbstractIpv6ReachabilityTopologyBuilderModuleFactory {
@Override
*/
package org.opendaylight.controller.config.yang.bgp.topology.provider;
-import org.opendaylight.bgpcep.bgp.topology.provider.BackwardsCssTopologyProvider;
import org.opendaylight.bgpcep.bgp.topology.provider.LinkstateTopologyBuilder;
+import org.opendaylight.bgpcep.bgp.topology.provider.config.BackwardsCssTopologyProvider;
import org.opendaylight.controller.config.api.DependencyResolver;
import org.opendaylight.controller.config.api.JmxAttributeValidationException;
import org.opendaylight.controller.config.api.ModuleIdentifier;
/**
*
*/
+@Deprecated
public final class LinkstateTopologyBuilderModule extends AbstractLinkstateTopologyBuilderModule {
private BundleContext bundleContext;
/**
*
*/
+@Deprecated
public class LinkstateTopologyBuilderModuleFactory extends AbstractLinkstateTopologyBuilderModuleFactory {
@Override
xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0">
<reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker" odl:type="pingpong"/>
+ <reference id="clusterSingletonServiceProvider" interface="org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"/>
- <bean id="bgpTopologyDeployer" class="org.opendaylight.bgpcep.bgp.topology.provider.BgpTopologyDeployerImpl" destroy-method="close">
+ <bean id="bgpTopologyDeployer" class="org.opendaylight.bgpcep.bgp.topology.provider.config.BgpTopologyDeployerImpl" destroy-method="close">
<argument ref="blueprintBundleContext"/>
<argument ref="dataBroker"/>
+ <argument ref="clusterSingletonServiceProvider"/>
</bean>
<service ref="bgpTopologyDeployer" interface="org.opendaylight.bgpcep.bgp.topology.provider.spi.BgpTopologyDeployer"/>
- <bean id="ipv4TopologyProvider" class="org.opendaylight.bgpcep.bgp.topology.provider.Ipv4TopologyProvider" destroy-method="close">
+ <bean id="ipv4TopologyProvider" class="org.opendaylight.bgpcep.bgp.topology.provider.config.Ipv4TopologyProvider" destroy-method="close">
<argument ref="bgpTopologyDeployer"/>
</bean>
- <bean id="ipv6TopologyProvider" class="org.opendaylight.bgpcep.bgp.topology.provider.Ipv6TopologyProvider" destroy-method="close">
+ <bean id="ipv6TopologyProvider" class="org.opendaylight.bgpcep.bgp.topology.provider.config.Ipv6TopologyProvider" destroy-method="close">
<argument ref="bgpTopologyDeployer"/>
</bean>
- <bean id="linkstateTopologyProvider" class="org.opendaylight.bgpcep.bgp.topology.provider.LinkstateTopologyProvider" destroy-method="close">
+ <bean id="linkstateTopologyProvider" class="org.opendaylight.bgpcep.bgp.topology.provider.config.LinkstateTopologyProvider" destroy-method="close">
<argument ref="bgpTopologyDeployer"/>
</bean>
import static org.junit.Assert.fail;
import java.util.List;
+import java.util.function.Function;
import javax.management.ObjectName;
import org.junit.Test;
+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.config.api.ValidationException;
import org.opendaylight.controller.config.api.jmx.CommitStatus;
import org.opendaylight.controller.config.yang.bgp.reachability.ipv4.Ipv4ReachabilityTopologyBuilderModuleFactory;
import org.opendaylight.controller.config.yang.bgp.reachability.ipv4.Ipv4ReachabilityTopologyBuilderModuleMXBean;
import org.opendaylight.controller.config.yang.bgp.rib.impl.AbstractRIBImplModuleTest;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yangtools.concepts.AbstractRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public class Ipv4ReachabilityTopologyBuilderModuleTest extends AbstractRIBImplModuleTest {
return null;
}
});
+ setupMockService(BgpTopologyDeployer.class, new BgpTopologyDeployer() {
+ @Override
+ public AbstractRegistration registerTopologyProvider(final BgpTopologyProvider topologyBuilder) {
+ return null;
+ }
+ @Override
+ public DataBroker getDataBroker() {
+ return null;
+ }
+ @Override
+ public AbstractRegistration registerService(final TopologyReferenceSingletonService topologyProviderService) {
+ return null;
+ }
+ @Override
+ public void createInstance(final Topology topology, final Function<Topology, Void> writeFunction) {
+ return;
+ }
+
+ @Override
+ public void removeInstance(final Topology topology) {
+ return;
+ }
+ });
}
@Override
import static org.junit.Assert.fail;
import java.util.List;
+import java.util.function.Function;
import javax.management.ObjectName;
import org.junit.Test;
+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.config.api.ValidationException;
import org.opendaylight.controller.config.api.jmx.CommitStatus;
import org.opendaylight.controller.config.yang.bgp.reachability.ipv6.Ipv6ReachabilityTopologyBuilderModuleFactory;
import org.opendaylight.controller.config.yang.bgp.reachability.ipv6.Ipv6ReachabilityTopologyBuilderModuleMXBean;
import org.opendaylight.controller.config.yang.bgp.rib.impl.AbstractRIBImplModuleTest;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yangtools.concepts.AbstractRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public class Ipv6ReachabilityTopologyBuilderModuleTest extends AbstractRIBImplModuleTest {
return null;
}
});
+ setupMockService(BgpTopologyDeployer.class, new BgpTopologyDeployer() {
+ @Override
+ public AbstractRegistration registerTopologyProvider(final BgpTopologyProvider topologyBuilder) {
+ return null;
+ }
+ @Override
+ public DataBroker getDataBroker() {
+ return null;
+ }
+ @Override
+ public AbstractRegistration registerService(final TopologyReferenceSingletonService topologyProviderService) {
+ return null;
+ }
+ @Override
+ public void createInstance(final Topology topology, final Function<Topology, Void> writeFunction) {
+ return;
+ }
+
+ @Override
+ public void removeInstance(final Topology topology) {
+ return;
+ }
+ });
}
@Override
import static org.junit.Assert.fail;
import java.util.List;
+import java.util.function.Function;
import javax.management.ObjectName;
import org.junit.Test;
+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.config.api.ValidationException;
import org.opendaylight.controller.config.api.jmx.CommitStatus;
import org.opendaylight.controller.config.spi.ModuleFactory;
import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
import org.opendaylight.controller.config.yang.bgp.rib.impl.AbstractRIBImplModuleTest;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yangtools.concepts.AbstractRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public class LinkstateTopologyBuilderModuleTest extends AbstractRIBImplModuleTest {
return null;
}
});
+ setupMockService(BgpTopologyDeployer.class, new BgpTopologyDeployer() {
+ @Override
+ public AbstractRegistration registerTopologyProvider(final BgpTopologyProvider topologyBuilder) {
+ return null;
+ }
+ @Override
+ public DataBroker getDataBroker() {
+ return null;
+ }
+ @Override
+ public AbstractRegistration registerService(final TopologyReferenceSingletonService topologyProviderService) {
+ return null;
+ }
+ @Override
+ public void createInstance(final Topology topology, final Function<Topology, Void> writeFunction) {
+ return;
+ }
+
+ @Override
+ public void removeInstance(final Topology topology) {
+ return;
+ }
+ });
}
@Override