Move InstructionScheduler instantiation 82/98582/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 17 Nov 2021 11:22:41 +0000 (12:22 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 17 Nov 2021 11:23:41 +0000 (12:23 +0100)
There is fair amount of confusion about the relationship between
the scheduler and the singleton service. Move instantiation around
to make sure we match lifecycles.

JIRA: BGPCEP-983
Change-Id: Ibdefa44fabc7f8492d8df8f951674a5b87092bf2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/config/PCEPTopologyDeployerImpl.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/config/PCEPTopologyProviderBean.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/config/PCEPTopologyProviderSingleton.java

index bbc7d93596aac796c5c933ba760f4d0def991de2..c4a38c643243a7d5d6811ba404d7cbe505b72d8e 100644 (file)
@@ -21,7 +21,6 @@ import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.bgpcep.pcep.server.PceServerProvider;
 import org.opendaylight.bgpcep.pcep.topology.provider.TopologySessionListenerFactory;
 import org.opendaylight.bgpcep.pcep.topology.spi.stats.TopologySessionStatsRegistry;
-import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
 import org.opendaylight.bgpcep.programming.spi.InstructionSchedulerFactory;
 import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
@@ -128,15 +127,12 @@ public final class PCEPTopologyDeployerImpl implements ClusteredDataTreeChangeLi
         LOG.info("Creating Topology {}", topologyId);
         LOG.trace("Topology {}.", topology);
 
-        final InstructionScheduler instructionScheduler = instructionSchedulerFactory
-                .createInstructionScheduler(topologyId.getValue());
-
         final PCEPTopologyProviderBean pcepTopologyProviderBean = new PCEPTopologyProviderBean(
             dataBroker, pcepDispatcher, rpcProviderRegistry, sessionListenerFactory, stateRegistry, pceServerProvider);
         pcepTopologyServices.put(topologyId, pcepTopologyProviderBean);
 
-        pcepTopologyProviderBean.start(singletonService, new PCEPTopologyConfiguration(topology), instructionScheduler,
-            bundleContext);
+        pcepTopologyProviderBean.start(instructionSchedulerFactory, singletonService,
+            new PCEPTopologyConfiguration(topology), bundleContext);
     }
 
     @Holding("this")
index 9555c3bc31549d5388fab647fbc610fbb612adb9..c6b5013f80b1926b927c2ff984ce59cb3ef1d908 100644 (file)
@@ -16,7 +16,7 @@ import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.bgpcep.pcep.server.PceServerProvider;
 import org.opendaylight.bgpcep.pcep.topology.provider.TopologySessionListenerFactory;
 import org.opendaylight.bgpcep.pcep.topology.spi.stats.TopologySessionStatsRegistry;
-import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
+import org.opendaylight.bgpcep.programming.spi.InstructionSchedulerFactory;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.CommitInfo;
@@ -78,13 +78,13 @@ final class PCEPTopologyProviderBean implements PCEPTopologyProviderDependencies
     }
 
     @SuppressWarnings("checkstyle:IllegalCatch")
-    synchronized void start(final ClusterSingletonServiceProvider cssp,
-            final PCEPTopologyConfiguration configDependencies, final InstructionScheduler instructionScheduler,
+    synchronized void start(final InstructionSchedulerFactory instructionSchedulerFactory,
+            final ClusterSingletonServiceProvider cssp, final PCEPTopologyConfiguration configDependencies,
             final BundleContext bundleContext) {
         checkState(pcepTopoProviderCSS == null, "Previous instance %s was not closed.", this);
         try {
-            pcepTopoProviderCSS = new PCEPTopologyProviderSingleton(configDependencies, this, instructionScheduler,
-                cssp, bundleContext);
+            pcepTopoProviderCSS = new PCEPTopologyProviderSingleton(configDependencies, this,
+                instructionSchedulerFactory, cssp, bundleContext);
         } catch (final Exception e) {
             LOG.debug("Failed to create PCEPTopologyProvider {}", configDependencies.getTopologyId().getValue(), e);
         }
index 34c209dc35f6b56e6ea2a448e7fcc27afdea87a6..7acf380cfdcb9aad585e90bd45c47aada7036899 100644 (file)
@@ -14,6 +14,7 @@ import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.gaul.modernizer_maven_annotations.SuppressModernizer;
 import org.opendaylight.bgpcep.pcep.topology.provider.PCEPTopologyProvider;
 import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
+import org.opendaylight.bgpcep.programming.spi.InstructionSchedulerFactory;
 import org.opendaylight.bgpcep.topology.DefaultTopologyReference;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
@@ -28,7 +29,6 @@ import org.slf4j.LoggerFactory;
 final class PCEPTopologyProviderSingleton implements ClusterSingletonService, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(PCEPTopologyProviderSingleton.class);
 
-    private final ServiceGroupIdentifier sgi;
     private final PCEPTopologyProvider pcepTopoProvider;
     private final InstructionScheduler scheduler;
 
@@ -40,13 +40,16 @@ final class PCEPTopologyProviderSingleton implements ClusterSingletonService, Au
 
     PCEPTopologyProviderSingleton(final PCEPTopologyConfiguration configDependencies,
             final PCEPTopologyProviderDependencies dependenciesProvider,
-            final InstructionScheduler instructionScheduler, final ClusterSingletonServiceProvider cssp,
+            final InstructionSchedulerFactory instructionSchedulerFactory, final ClusterSingletonServiceProvider cssp,
             // FIXME: this should not be needed
             final BundleContext bundleContext) {
-        scheduler = instructionScheduler;
-        sgi = scheduler.getIdentifier();
+        scheduler = instructionSchedulerFactory.createInstructionScheduler(
+            configDependencies.getTopologyId().getValue());
+
+        // FIXME: this should only be created once we are up
         pcepTopoProvider = PCEPTopologyProvider.create(dependenciesProvider, scheduler, configDependencies);
 
+        // FIXME: this should only be registered once we are up
         serviceRegistration = bundleContext.registerService(DefaultTopologyReference.class.getName(),
             pcepTopoProvider, props(configDependencies));
         LOG.info("PCEP Topology Provider service {} registered", getIdentifier().getName());
@@ -77,7 +80,7 @@ final class PCEPTopologyProviderSingleton implements ClusterSingletonService, Au
 
     @Override
     public ServiceGroupIdentifier getIdentifier() {
-        return sgi;
+        return scheduler.getIdentifier();
     }
 
     @Override