Integrate TopologyStatsRpcServiceImpl 53/101953/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 3 Aug 2022 10:32:22 +0000 (12:32 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 3 Aug 2022 10:33:07 +0000 (12:33 +0200)
This is a simple RPC service, just integrate it into
PCEPTopologyTracker.

JIRA: BGPCEP-960
Change-Id: Ie6330ca5c6229e4172c98931485279c4991ffabf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPTopologyTracker.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/TopologyStatsRpcServiceImpl.java
pcep/topology/topology-provider/src/main/resources/OSGI-INF/blueprint/pcep-topology.xml

index 5c65d5fd93bebe876a18d6b9bd3f93ecedbc6ee0..9dbabf549d5cba3fb4ea44d353a72d01b4583a9e 100644 (file)
@@ -33,6 +33,7 @@ import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.protocol.pcep.PCEPDispatcher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.PcepTopologyStatsRpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.TopologyTypes1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.topology.pcep.type.TopologyPcep;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
@@ -61,9 +62,6 @@ public final class PCEPTopologyTracker
     private final @NonNull PCEPDispatcher pcepDispatcher;
     private final @NonNull DataBroker dataBroker;
 
-    // Statistics provider
-    private final @NonNull TopologyStatsProvider statsProvider;
-
     // Timer used for RPC timeouts and session statistics scheduling
     private final @NonNull HashedWheelTimer privateTimer = new HashedWheelTimer();
     private final @NonNull Timer timer = new Timer() {
@@ -79,6 +77,11 @@ public final class PCEPTopologyTracker
         }
     };
 
+    // Statistics provider
+    private final @NonNull TopologyStatsProvider statsProvider;
+    // Statistics RPCs
+    private final @NonNull TopologyStatsRpcServiceImpl statsRpcs;
+
     // We are reusing our monitor as the universal lock. We have to account for three distinct threads competing for
     // our state:
     //   1) the typical DTCL callback thread invoking onDataTreeChanged()
@@ -99,6 +102,8 @@ public final class PCEPTopologyTracker
     private final ConcurrentMap<TopologyKey, PCEPTopologySingleton> instances = new ConcurrentHashMap<>();
     @GuardedBy("this")
     private Registration reg;
+    @GuardedBy("this")
+    private Registration statsReg;
 
     public PCEPTopologyTracker(final DataBroker dataBroker, final ClusterSingletonServiceProvider singletonService,
             final RpcProviderService rpcProviderRegistry, final PCEPDispatcher pcepDispatcher,
@@ -111,6 +116,8 @@ public final class PCEPTopologyTracker
         this.instructionSchedulerFactory = requireNonNull(instructionSchedulerFactory);
         this.pceServerProvider = requireNonNull(pceServerProvider);
         statsProvider = new TopologyStatsProvider(dataBroker, updateIntervalSeconds);
+        statsRpcs = new TopologyStatsRpcServiceImpl(dataBroker);
+        statsReg = rpcProviderRegistry.registerRpcImplementation(PcepTopologyStatsRpcService.class, statsRpcs);
 
         reg = dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
             InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class).child(TopologyTypes.class)
@@ -159,6 +166,10 @@ public final class PCEPTopologyTracker
         reg.close();
         reg = null;
 
+        statsReg.close();
+        statsReg = null;
+        statsRpcs.close();
+
         // First pass: destroy all tracked instances
         instances.values().forEach(PCEPTopologySingleton::destroy);
         // Second pass: wait for cleanup
index a6b1857c7f2afd9aefc9b1d2c44ba3e9203306d9..54b806feccedcd8abc8e55dd7602ccf0484258ac 100644 (file)
@@ -54,7 +54,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class TopologyStatsRpcServiceImpl
+final class TopologyStatsRpcServiceImpl
         implements PcepTopologyStatsRpcService, ClusteredDataTreeChangeListener<PcepSessionState>, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(TopologyStatsRpcServiceImpl.class);
 
@@ -62,7 +62,7 @@ public final class TopologyStatsRpcServiceImpl
             new ConcurrentHashMap<>();
     private ListenerRegistration<TopologyStatsRpcServiceImpl> listenerRegistration;
 
-    public TopologyStatsRpcServiceImpl(final DataBroker dataBroker) {
+    TopologyStatsRpcServiceImpl(final DataBroker dataBroker) {
         LOG.info("Initializing PCEP Topology Stats RPC service.");
         listenerRegistration = dataBroker.registerDataTreeChangeListener(
             DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL,
index 87a3493967214b1bca5798c0b71362a6e0d96c5a..91a525fd7d681e87b2b16b5b4aace3d347a9cc2e 100644 (file)
             <bean factory-ref="pcepStatsConfig" factory-method="getTimer"/>
         </argument>
     </bean>
-
-    <bean id="topologyStatsRpcService"
-          class="org.opendaylight.bgpcep.pcep.topology.provider.TopologyStatsRpcServiceImpl"
-          destroy-method="close">
-        <argument ref="dataBroker"/>
-    </bean>
-    <odl:rpc-implementation ref="topologyStatsRpcService"/>
 </blueprint>