Bug 6396: Integrate ios-xe-renderer with clustering singleton service 20/43520/5
authorVladimir Lavor <vlavor@cisco.com>
Tue, 9 Aug 2016 14:34:55 +0000 (16:34 +0200)
committerVladimir Lavor <vlavor@cisco.com>
Tue, 30 Aug 2016 14:40:07 +0000 (16:40 +0200)
Change-Id: I3527e96355c1f15fec53b72a9ac5140e26eb1f4f
Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderInstance.java
renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderModule.java
renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/config/IosXeProviderModuleFactory.java
renderers/ios-xe/src/main/resources/org/opendaylight/blueprint/ios-xe-renderer.xml

index 6cacbf3951a3176d5d1ddd6d5ebf7a448fcadb07..e261ece26f46528bf0198a2472a55888159073a4 100644 (file)
@@ -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<Void> 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;
+    }
 }
index b64968dfcd885114acbd50a98ddd923a339a5573..48f3a18fd1ba182cbec1f6c5292f0ba590ced975 100644 (file)
@@ -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);
index e2215f7a7c47d2a28831136ed5fb2f93e68ae654..7169f7226fbea30c312d4927d0bdd73d6443288b 100644 (file)
@@ -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 {
 
 }
index 06db22ff78f4a709dbaba500bb94e7047131e40c..9803c23c26dd70d717743a06e12c4f4035d654fc 100644 (file)
@@ -5,10 +5,12 @@
 
     <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"/>
     <reference id="broker" interface="org.opendaylight.controller.sal.binding.api.BindingAwareBroker"/>
+    <reference id="clusterSingletonService" interface="org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"/>
 
     <bean id="iosXeRenderer" class="org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.config.IosXeProviderInstance"
-        destroy-method="close">
+        init-method="initialize" destroy-method="close">
         <argument ref="dataBroker"/>
         <argument ref="broker"/>
+        <argument ref="clusterSingletonService" />
     </bean>
 </blueprint>
\ No newline at end of file