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;
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;
@GuardedBy("this")
private final Set<Topology> topologies = new HashSet<>();
private final DataBroker dataBroker;
+ private final BundleContext context;
private final ClusterSingletonServiceProvider singletonProvider;
private ListenerRegistration<BgpTopologyDeployerImpl> registration;
@GuardedBy("this")
private boolean closed;
- public BgpTopologyDeployerImpl(final DataBroker dataBroker,
+ public BgpTopologyDeployerImpl(final BundleContext context, final DataBroker dataBroker,
final ClusterSingletonServiceProvider singletonProvider) {
+ this.context = requireNonNull(context);
this.dataBroker = requireNonNull(dataBroker);
this.singletonProvider = requireNonNull(singletonProvider);
}
final Dictionary<String, String> 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() {
} catch (final Exception e) {
LOG.warn("Failed to close ClusterSingletonServiceRegistration {} for TopologyBuilder {}",
registerClusterSingletonService, topologyProviderService.getInstanceIdentifier(), e);
+ } finally {
+ registerService.unregister();
}
}
};