From 5c6dbe25df3a8be58a07247bb802d588e6977884 Mon Sep 17 00:00:00 2001 From: Vladimir Lavor Date: Tue, 9 Aug 2016 16:34:55 +0200 Subject: [PATCH] Bug 6396: Integrate ios-xe-renderer with clustering singleton service Change-Id: I3527e96355c1f15fec53b72a9ac5140e26eb1f4f Signed-off-by: Vladimir Lavor --- .../impl/config/IosXeProviderInstance.java | 60 +++++++++++++++++-- .../impl/config/IosXeProviderModule.java | 1 + .../config/IosXeProviderModuleFactory.java | 1 + .../blueprint/ios-xe-renderer.xml | 4 +- 4 files changed, 61 insertions(+), 5 deletions(-) diff --git a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderInstance.java b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderInstance.java index 6cacbf395..e261ece26 100644 --- a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderInstance.java +++ b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderInstance.java @@ -8,21 +8,73 @@ package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.config; +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import org.opendaylight.controller.config.yang.config.groupbasedpolicy.GroupbasedpolicyInstance; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.IosXeRendererProviderImpl; +import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService; +import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; +import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration; +import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -public class IosXeProviderInstance implements AutoCloseable{ +public class IosXeProviderInstance implements ClusterSingletonService, AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(IosXeProviderInstance.class); + + private static final ServiceGroupIdentifier IDENTIFIER = + ServiceGroupIdentifier.create(GroupbasedpolicyInstance.GBP_SERVICE_GROUP_IDENTIFIER); + private final DataBroker dataBroker; + private final BindingAwareBroker bindingAwareBroker; + private final ClusterSingletonServiceProvider clusterSingletonService; + private ClusterSingletonServiceRegistration singletonServiceRegistration; private IosXeRendererProviderImpl renderer; - public IosXeProviderInstance(DataBroker dataBroker, BindingAwareBroker broker) { - renderer = new IosXeRendererProviderImpl(dataBroker, broker); + public IosXeProviderInstance(final DataBroker dataBroker, + final BindingAwareBroker broker, + final ClusterSingletonServiceProvider clusterSingletonService) { + this.dataBroker = Preconditions.checkNotNull(dataBroker); + this.bindingAwareBroker = Preconditions.checkNotNull(broker); + this.clusterSingletonService = Preconditions.checkNotNull(clusterSingletonService); + } + + public void initialize() { + LOG.info("Clustering session initiated for {}", this.getClass().getSimpleName()); + singletonServiceRegistration = clusterSingletonService.registerClusterSingletonService(this); } @Override - public void close() throws Exception { + public void instantiateServiceInstance() { + LOG.info("Instantiating {}", this.getClass().getSimpleName()); + renderer = new IosXeRendererProviderImpl(dataBroker, bindingAwareBroker); + } + + @Override + public ListenableFuture closeServiceInstance() { + LOG.info("Instance {} closed", this.getClass().getSimpleName()); renderer.close(); + return Futures.immediateFuture(null); } + @Override + public void close() throws Exception { + LOG.info("Clustering provider closed for {}", this.getClass().getSimpleName()); + if (singletonServiceRegistration != null) { + try { + singletonServiceRegistration.close(); + } catch (Exception e) { + LOG.warn("{} closed unexpectedly. Cause: {}", e.getMessage()); + } + singletonServiceRegistration = null; + } + } + + @Override + public ServiceGroupIdentifier getIdentifier() { + return IDENTIFIER; + } } diff --git a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderModule.java b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderModule.java index b64968dfc..48f3a18fd 100644 --- a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderModule.java +++ b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderModule.java @@ -10,6 +10,7 @@ package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.config; import org.opendaylight.controller.sal.common.util.NoopAutoCloseable; +@Deprecated public class IosXeProviderModule extends org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.config.AbstractIosXeProviderModule { public IosXeProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); diff --git a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderModuleFactory.java b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderModuleFactory.java index e2215f7a7..7169f7226 100644 --- a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderModuleFactory.java +++ b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderModuleFactory.java @@ -7,6 +7,7 @@ */ package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.config; +@Deprecated public class IosXeProviderModuleFactory extends org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.config.AbstractIosXeProviderModuleFactory { } diff --git a/renderers/ios-xe/src/main/resources/org/opendaylight/blueprint/ios-xe-renderer.xml b/renderers/ios-xe/src/main/resources/org/opendaylight/blueprint/ios-xe-renderer.xml index 06db22ff7..9803c23c2 100644 --- a/renderers/ios-xe/src/main/resources/org/opendaylight/blueprint/ios-xe-renderer.xml +++ b/renderers/ios-xe/src/main/resources/org/opendaylight/blueprint/ios-xe-renderer.xml @@ -5,10 +5,12 @@ + + init-method="initialize" destroy-method="close"> + \ No newline at end of file -- 2.36.6