BGPCEP-739: Improve logs under programming 50/67050/1
authorClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Thu, 11 Jan 2018 08:52:34 +0000 (09:52 +0100)
committerClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Thu, 11 Jan 2018 09:11:09 +0000 (10:11 +0100)
- make programming service closeable
- close service when pcep-topology provider
service is closed.

Change-Id: I87ad85b3b4a54c71b1020f12b962277b7595b182
Signed-off-by: Claudio D. Gasparini <claudio.gasparini@pantheon.tech>
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPTopologyProvider.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/config/PCEPTopologyConfiguration.java
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/test/java/org/opendaylight/bgpcep/pcep/topology/provider/AbstractPCEPSessionTest.java
programming/impl/src/main/java/org/opendaylight/bgpcep/programming/impl/InstructionSchedulerFactoryImpl.java
programming/impl/src/main/java/org/opendaylight/bgpcep/programming/impl/ProgrammingServiceImpl.java
programming/spi/src/main/java/org/opendaylight/bgpcep/programming/spi/InstructionScheduler.java

index c3baf6fbea6f7b095930b40ed52d438103b578b6..66c62ee8da3738034b11cfd9906253db92f11904 100755 (executable)
@@ -19,6 +19,7 @@ import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.bgpcep.pcep.topology.provider.config.PCEPTopologyConfiguration;
 import org.opendaylight.bgpcep.pcep.topology.provider.config.PCEPTopologyProviderDependencies;
+import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
 import org.opendaylight.bgpcep.topology.DefaultTopologyReference;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
@@ -33,6 +34,7 @@ public final class PCEPTopologyProvider extends DefaultTopologyReference {
     private final ServerSessionManager manager;
     private final PCEPTopologyProviderDependencies dependenciesProvider;
     private final PCEPTopologyConfiguration configDependencies;
+    private final InstructionScheduler scheduler;
     private RoutedRpcRegistration<NetworkTopologyPcepProgrammingService> network;
     private RoutedRpcRegistration<NetworkTopologyPcepService> element;
     private Channel channel;
@@ -40,15 +42,16 @@ public final class PCEPTopologyProvider extends DefaultTopologyReference {
     private PCEPTopologyProvider(
             final PCEPTopologyConfiguration configDependencies,
             final PCEPTopologyProviderDependencies dependenciesProvider,
-            final ServerSessionManager manager) {
+            final ServerSessionManager manager, final InstructionScheduler scheduler) {
         super(configDependencies.getTopology());
         this.dependenciesProvider = requireNonNull(dependenciesProvider);
         this.configDependencies = configDependencies;
         this.manager = requireNonNull(manager);
+        this.scheduler = requireNonNull(scheduler);
     }
 
     public static PCEPTopologyProvider create(final PCEPTopologyProviderDependencies dependenciesProvider,
-            final PCEPTopologyConfiguration configDependencies) {
+            final InstructionScheduler scheduler, final PCEPTopologyConfiguration configDependencies) {
         final List<PCEPCapability> capabilities = dependenciesProvider.getPCEPDispatcher()
                 .getPCEPSessionNegotiatorFactory().getPCEPSessionProposalFactory().getCapabilities();
         final Optional<PCEPCapability> statefulCapability = capabilities
@@ -64,7 +67,7 @@ public final class PCEPTopologyProvider extends DefaultTopologyReference {
         final ServerSessionManager manager = new ServerSessionManager(dependenciesProvider, listenerFactory,
                 configDependencies);
 
-        return new PCEPTopologyProvider(configDependencies, dependenciesProvider, manager);
+        return new PCEPTopologyProvider(configDependencies, dependenciesProvider, manager, scheduler);
     }
 
     public void instantiateServiceInstance() throws ExecutionException, InterruptedException {
@@ -76,7 +79,7 @@ public final class PCEPTopologyProvider extends DefaultTopologyReference {
 
         this.network = requireNonNull(rpcRegistry
                 .addRoutedRpcImplementation(NetworkTopologyPcepProgrammingService.class,
-                        new TopologyProgramming(configDependencies.getSchedulerDependency(), this.manager)));
+                        new TopologyProgramming(this.scheduler, this.manager)));
         this.network.registerPath(NetworkTopologyContext.class, this.configDependencies.getTopology());
 
         this.manager.instantiateServiceInstance().get();
index 24da2b33bb2a3c7e0f1d0522428023437d088f96..197fa0e5e87a95240f04214a110c43a55a4bb782 100644 (file)
@@ -11,7 +11,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
 
 import java.net.InetSocketAddress;
 import javax.annotation.Nonnull;
-import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
 import org.opendaylight.protocol.concepts.KeyMapping;
 import org.opendaylight.protocol.pcep.SpeakerIdMapping;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
@@ -23,7 +22,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 public final class PCEPTopologyConfiguration {
     private final InetSocketAddress address;
     private final KeyMapping keys;
-    private final InstructionScheduler scheduler;
     private final TopologyId topologyId;
     private final short rpcTimeout;
     private final SpeakerIdMapping speakerIds;
@@ -33,13 +31,11 @@ public final class PCEPTopologyConfiguration {
             @Nonnull final InetSocketAddress address,
             @Nonnull final KeyMapping keys,
             @Nonnull final SpeakerIdMapping speakerIds,
-            @Nonnull final InstructionScheduler scheduler,
             @Nonnull final TopologyId topologyId,
             final short rpcTimeout) {
         this.address = checkNotNull(address);
         this.keys = checkNotNull(keys);
         this.speakerIds = checkNotNull(speakerIds);
-        this.scheduler = checkNotNull(scheduler);
         this.topologyId = checkNotNull(topologyId);
         this.rpcTimeout = rpcTimeout;
         this.topology = InstanceIdentifier.builder(NetworkTopology.class)
@@ -56,11 +52,6 @@ public final class PCEPTopologyConfiguration {
         return this.topology;
     }
 
-    @Nonnull
-    public InstructionScheduler getSchedulerDependency() {
-        return this.scheduler;
-    }
-
     public short getRpcTimeout() {
         return this.rpcTimeout;
     }
index 8113a6033b60d95be555112d724741315f3a9db9..7f695c53a80d0d212c2685e5663d79c1f639df9e 100644 (file)
@@ -111,7 +111,7 @@ public class PCEPTopologyDeployerImpl implements ClusteredDataTreeChangeListener
         final SessionConfig config = pcepTopo.getSessionConfig();
 
         final InstructionScheduler instructionScheduler = this.instructionSchedulerFactory
-                .createInstructionScheduler(topologyId.getValue());
+            .createInstructionScheduler(topologyId.getValue());
 
         final InetSocketAddress inetAddress = PCEPTopologyProviderUtil
                 .getInetSocketAddress(config.getListenAddress(), config.getListenPort());
@@ -119,13 +119,13 @@ public class PCEPTopologyDeployerImpl implements ClusteredDataTreeChangeListener
         final KeyMapping keys = PCEPTopologyProviderUtil.contructKeys(topology);
         final SpeakerIdMapping speakerIds = PCEPTopologyProviderUtil.contructSpeakersId(topology);
         final PCEPTopologyConfiguration dependencies = new PCEPTopologyConfiguration(
-                inetAddress, keys, speakerIds, instructionScheduler, topology.getTopologyId(),
+                inetAddress, keys, speakerIds, topology.getTopologyId(),
                 config.getRpcTimeout());
 
         final PCEPTopologyProviderBean pcepTopologyProviderBean = (PCEPTopologyProviderBean) this.container
                 .getComponentInstance(PCEPTopologyProviderBean.class.getSimpleName());
         this.pcepTopologyServices.put(topologyId, pcepTopologyProviderBean);
-        pcepTopologyProviderBean.start(dependencies);
+        pcepTopologyProviderBean.start(dependencies, instructionScheduler);
     }
 
     private synchronized void removeTopologyProvider(final Topology topo) {
index bbc0eb95c1c5744e9650092b96afcfbd5a382bd7..ef4ddb24984228f89b06e4dc10372476413970e8 100644 (file)
@@ -20,6 +20,7 @@ import javax.annotation.concurrent.GuardedBy;
 import org.opendaylight.bgpcep.pcep.topology.provider.PCEPTopologyProvider;
 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.topology.DefaultTopologyReference;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
@@ -88,11 +89,13 @@ public final class PCEPTopologyProviderBean implements PCEPTopologyProviderDepen
     }
 
     @SuppressWarnings("checkstyle:IllegalCatch")
-    synchronized void start(final PCEPTopologyConfiguration configDependencies) {
+    synchronized void start(final PCEPTopologyConfiguration configDependencies,
+            final InstructionScheduler instructionScheduler) {
         Preconditions.checkState(this.pcepTopoProviderCSS == null,
                 "Previous instance %s was not closed.", this);
         try {
-            this.pcepTopoProviderCSS = new PCEPTopologyProviderBeanCSS(configDependencies, this);
+            this.pcepTopoProviderCSS = new PCEPTopologyProviderBeanCSS(configDependencies,
+                    instructionScheduler, this);
         } catch (final Exception e) {
             LOG.debug("Failed to create PCEPTopologyProvider {}", configDependencies.getTopologyId().getValue(), e);
         }
@@ -126,15 +129,17 @@ public final class PCEPTopologyProviderBean implements PCEPTopologyProviderDepen
     private static class PCEPTopologyProviderBeanCSS implements ClusterSingletonService, AutoCloseable {
         private final ServiceGroupIdentifier sgi;
         private final PCEPTopologyProvider pcepTopoProvider;
+        private final InstructionScheduler scheduler;
         private ServiceRegistration<?> serviceRegistration;
         private ClusterSingletonServiceRegistration cssRegistration;
         @GuardedBy("this")
         private boolean serviceInstantiated;
 
         PCEPTopologyProviderBeanCSS(final PCEPTopologyConfiguration configDependencies,
-                final PCEPTopologyProviderBean bean) {
-            this.sgi = configDependencies.getSchedulerDependency().getIdentifier();
-            this.pcepTopoProvider = PCEPTopologyProvider.create(bean, configDependencies);
+                final InstructionScheduler instructionScheduler, final PCEPTopologyProviderBean bean) {
+            this.scheduler = instructionScheduler;
+            this.sgi = this.scheduler.getIdentifier();
+            this.pcepTopoProvider = PCEPTopologyProvider.create(bean, this.scheduler, configDependencies);
 
             final Dictionary<String, String> properties = new Hashtable<>();
             properties.put(PCEPTopologyProvider.class.getName(), configDependencies.getTopologyId().getValue());
@@ -184,6 +189,7 @@ public final class PCEPTopologyProviderBean implements PCEPTopologyProviderDepen
                 this.serviceRegistration.unregister();
                 this.serviceRegistration = null;
             }
+            this.scheduler.close();
         }
     }
 }
index 84c58c130f9c9f428879e8e1c0ae2a2b931deac6..522f07d3b0e1bb200f53488e040c564a30924855 100644 (file)
@@ -144,7 +144,7 @@ public abstract class AbstractPCEPSessionTest<T extends TopologySessionListenerF
                 .getGenericSuperclass()).getActualTypeArguments()[0]).newInstance();
 
         final PCEPTopologyConfiguration configDep = new PCEPTopologyConfiguration(ra, KeyMapping.getKeyMapping(),
-                SpeakerIdMapping.getSpeakerIdMap(), this.scheduler, TEST_TOPOLOGY_ID, RPC_TIMEOUT);
+                SpeakerIdMapping.getSpeakerIdMap(), TEST_TOPOLOGY_ID, RPC_TIMEOUT);
         this.manager = new ServerSessionManager(this.topologyDependencies, listenerFactory, configDep);
         startSessionManager();
         this.neg = new DefaultPCEPSessionNegotiator(this.promise, this.clientListener,
index c7048a8471af842b24accda8b92046adbac05e8d..3b60584ca00e79d70cc587bd3dd9d2a0076a0379 100644 (file)
@@ -56,7 +56,7 @@ public final class InstructionSchedulerFactoryImpl implements InstructionSchedul
 
     @Override
     public InstructionScheduler createInstructionScheduler(final String instructionId) {
-        LOG.debug("Creating Instruction Scheduler {}.", instructionId);
+        LOG.info("Creating Instruction Scheduler {}.", instructionId);
 
         final ProgrammingServiceImpl programmingInst = new ProgrammingServiceImpl(this.dataProvider, this.notifs,
                 this.exec, this.rpcProviderRegistry, this.cssp, this.timer, instructionId);
index a8c096d891fbcf1e4f0a50ed56a9c1d1c3deeeee..86ae352a97ee584471d1a093bfd2e8b564eb1663 100644 (file)
@@ -72,7 +72,7 @@ import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class ProgrammingServiceImpl implements AutoCloseable, ClusterSingletonService, InstructionScheduler,
+public final class ProgrammingServiceImpl implements ClusterSingletonService, InstructionScheduler,
         ProgrammingService {
     private static final Logger LOG = LoggerFactory.getLogger(ProgrammingServiceImpl.class);
 
@@ -166,7 +166,7 @@ public final class ProgrammingServiceImpl implements AutoCloseable, ClusterSingl
         this.qid = KeyedInstanceIdentifier.builder(InstructionsQueue.class,
                 new InstructionsQueueKey(this.instructionId)).build();
         this.sgi = ServiceGroupIdentifier.create(this.instructionId + "-service-group");
-        LOG.debug("Creating Programming Service {}.", this.sgi.getValue());
+        LOG.info("Creating Programming Service {}.", this.sgi.getValue());
         this.csspReg = cssp.registerClusterSingletonService(this);
     }
 
index f9f3dba173c7d38844062db4532c60213bbd9f3e..21a23c472397901881470cea85228b26d96e9a6b 100644 (file)
@@ -13,7 +13,7 @@ import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev150720.SubmitInstructionInput;
 import org.opendaylight.yangtools.concepts.Identifiable;
 
-public interface InstructionScheduler extends Identifiable<ServiceGroupIdentifier> {
+public interface InstructionScheduler extends Identifiable<ServiceGroupIdentifier>, AutoCloseable {
     /**
      * Schedule a new instruction for execution. This method tries to enqueue an instruction. It will return a Future
      * which represents the scheduling progress. When the future becomes successful, the requestor is expected to start