Remove blueprint from pcep-tunnel-provider 50/104050/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 16 Jan 2023 22:16:06 +0000 (23:16 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 16 Jan 2023 22:36:27 +0000 (23:36 +0100)
We still have a OSGi ServiceRegistry dependency, but now we do not use
Blueprint to get it.

JIRA: BGPCEP-965
Change-Id: I11c1fcb20763febe639f73e3e5ed3176869a5f00
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
pcep/tunnel/tunnel-provider/pom.xml
pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProviderDeployer.java
pcep/tunnel/tunnel-provider/src/main/resources/OSGI-INF/blueprint/pcep-tunnel-provider.xml [deleted file]

index 849fa5d407928b3dcfe8344873e5d661abe172a3..9500f9094636649b29a70517c9d497041e13e9fb 100644 (file)
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.util.tracker</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.component.annotations</artifactId>
+        </dependency>
 
         <!-- Testing dependencies -->
         <dependency>
index 0dcc6a3e1b6e25836cd1c1152f2ce1eb70008db8..11b17d3eff432defdc838a45428305b41a296da1 100644 (file)
@@ -32,35 +32,49 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.TopologyTypes;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.framework.BundleContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Component(service = { })
 public final class TunnelProviderDeployer implements ClusteredDataTreeChangeListener<Topology>, AutoCloseable {
-
     private static final Logger LOG = LoggerFactory.getLogger(TunnelProviderDeployer.class);
-
     private static final long TIMEOUT_NS = TimeUnit.SECONDS.toNanos(5);
+
     private final TunnelProviderDependencies dependencies;
-    private final InstanceIdentifier<Topology> networTopology;
+    private final InstanceIdentifier<Topology> networkTopology;
     @GuardedBy("this")
     private final Map<TopologyId, PCEPTunnelClusterSingletonService> pcepTunnelServices = new HashMap<>();
-    @GuardedBy("this")
-    private ListenerRegistration<TunnelProviderDeployer> listenerRegistration;
-
-    public TunnelProviderDeployer(
-            final DataBroker dataBroker,
-            final RpcProviderService rpcProviderRegistry,
-            final RpcConsumerRegistry rpcConsumerRegistry,
-            final BundleContext bundleContext,
-            final ClusterSingletonServiceProvider cssp
-    ) {
-        LOG.info("Creating Tunnel Provider Deployer");
-        this.dependencies = new TunnelProviderDependencies(dataBroker, cssp, rpcProviderRegistry, rpcConsumerRegistry,
+    private final Registration reg;
+
+    @Activate
+    public TunnelProviderDeployer(@Reference final DataBroker dataBroker,
+            @Reference final RpcProviderService rpcProviderRegistry,
+            @Reference final RpcConsumerRegistry rpcConsumerRegistry,
+            @Reference final ClusterSingletonServiceProvider cssp,
+            // FIXME: do not reference BundleContext in an alternative constructor
+            final BundleContext bundleContext) {
+        dependencies = new TunnelProviderDependencies(dataBroker, cssp, rpcProviderRegistry, rpcConsumerRegistry,
                 bundleContext);
-        this.networTopology = InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class).build();
+        networkTopology = InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class).build();
+        reg = dataBroker.registerDataTreeChangeListener(
+            DataTreeIdentifier.create(CONFIGURATION, networkTopology), this);
+        LOG.info("Tunnel Provider Deployer created");
+    }
+
+    @Deactivate
+    @Override
+    public synchronized void close() {
+        reg.close();
+        pcepTunnelServices.values().iterator().forEachRemaining(PCEPTunnelClusterSingletonService::close);
+        pcepTunnelServices.clear();
+        LOG.info("Tunnel Provider Deployer closed");
     }
 
     @SuppressWarnings("checkstyle:IllegalCatch")
@@ -75,12 +89,6 @@ public final class TunnelProviderDeployer implements ClusteredDataTreeChangeList
         }
     }
 
-    public synchronized void init() {
-        LOG.info("Instantiate tunnel topology deployer");
-        this.listenerRegistration = this.dependencies.getDataBroker().registerDataTreeChangeListener(
-                DataTreeIdentifier.create(CONFIGURATION, this.networTopology), this);
-    }
-
     @Override
     public synchronized void onDataTreeChanged(final Collection<DataTreeModification<Topology>> changes) {
         final List<DataObjectModification<Topology>> topoChanges = changes.stream()
@@ -118,7 +126,7 @@ public final class TunnelProviderDeployer implements ClusteredDataTreeChangeList
             return;
         }
         final TopologyId topologyId = topology.getTopologyId();
-        if (this.pcepTunnelServices.containsKey(topology.getTopologyId())) {
+        if (pcepTunnelServices.containsKey(topology.getTopologyId())) {
             LOG.warn("Tunnel Topology {} already exist. New instance won't be created", topologyId);
             return;
         }
@@ -132,8 +140,8 @@ public final class TunnelProviderDeployer implements ClusteredDataTreeChangeList
 
 
         final PCEPTunnelClusterSingletonService tunnelTopoCss =
-                new PCEPTunnelClusterSingletonService(this.dependencies, pcepTopoRef, topologyId);
-        this.pcepTunnelServices.put(topology.getTopologyId(), tunnelTopoCss);
+                new PCEPTunnelClusterSingletonService(dependencies, pcepTopoRef, topologyId);
+        pcepTunnelServices.put(topology.getTopologyId(), tunnelTopoCss);
     }
 
     private synchronized void updateTunnelTopologyProvider(final Topology topology) {
@@ -141,7 +149,7 @@ public final class TunnelProviderDeployer implements ClusteredDataTreeChangeList
             return;
         }
         final TopologyId topologyId = topology.getTopologyId();
-        final PCEPTunnelClusterSingletonService previous = this.pcepTunnelServices.remove(topology.getTopologyId());
+        final PCEPTunnelClusterSingletonService previous = pcepTunnelServices.remove(topology.getTopologyId());
         closeTopology(previous, topologyId);
         createTunnelTopologyProvider(topology);
     }
@@ -151,18 +159,7 @@ public final class TunnelProviderDeployer implements ClusteredDataTreeChangeList
             return;
         }
         final TopologyId topologyId = topo.getTopologyId();
-        final PCEPTunnelClusterSingletonService topology = this.pcepTunnelServices.remove(topologyId);
+        final PCEPTunnelClusterSingletonService topology = pcepTunnelServices.remove(topologyId);
         closeTopology(topology, topologyId);
     }
-
-    @Override
-    public synchronized void close() {
-        LOG.info("Closing tunnel topology deployer");
-        if (this.listenerRegistration != null) {
-            this.listenerRegistration.close();
-            this.listenerRegistration = null;
-        }
-        this.pcepTunnelServices.values().iterator().forEachRemaining(PCEPTunnelClusterSingletonService::close);
-        this.pcepTunnelServices.clear();
-    }
 }
diff --git a/pcep/tunnel/tunnel-provider/src/main/resources/OSGI-INF/blueprint/pcep-tunnel-provider.xml b/pcep/tunnel/tunnel-provider/src/main/resources/OSGI-INF/blueprint/pcep-tunnel-provider.xml
deleted file mode 100644 (file)
index 1272b8c..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2017 AT&T Intellectual Property. 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
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-    <reference id="dataBroker" interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
-    <reference id="rpcProviderService" interface="org.opendaylight.mdsal.binding.api.RpcProviderService"/>
-    <reference id="rpcConsumerRegistry" interface="org.opendaylight.mdsal.binding.api.RpcConsumerRegistry"/>
-    <reference id="clusterSingletonServiceProvider"
-               interface="org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"/>
-
-    <bean id="TunnelProviderDeployer" class="org.opendaylight.bgpcep.pcep.tunnel.provider.TunnelProviderDeployer"
-          init-method="init"
-          destroy-method="close">
-        <argument ref="dataBroker"/>
-        <argument ref="rpcProviderService"/>
-        <argument ref="rpcConsumerRegistry"/>
-        <argument ref="blueprintBundleContext"/>
-        <argument ref="clusterSingletonServiceProvider"/>
-    </bean>
-</blueprint>