From 6b87a46cdde6aa5320dcefcc05ee6ea93cee2d4f Mon Sep 17 00:00:00 2001 From: Vladimir Lavor Date: Wed, 10 Aug 2016 11:14:44 +0200 Subject: [PATCH] Bug 6396: Integrate ne-location-provider with clustering singleton service Change-Id: I58f44266035a52f17aa8550344b7870d5ce4e01f Signed-off-by: Vladimir Lavor --- .../cfg/NeLocationProviderInstance.java | 56 ++++++++++++++++++- .../cfg/NeLocationProviderModule.java | 2 +- .../cfg/NeLocationProviderModuleFactory.java | 1 + .../blueprint/ne-location-provider.xml | 6 +- 4 files changed, 59 insertions(+), 6 deletions(-) diff --git a/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderInstance.java b/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderInstance.java index f894a91a9..c932b8654 100644 --- a/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderInstance.java +++ b/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderInstance.java @@ -8,19 +8,69 @@ package org.opendaylight.controller.config.yang.config.ne.location.provider.cfg; +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.groupbasedpolicy.ne.location.provider.NeLocationProvider; +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 NeLocationProviderInstance implements AutoCloseable { +public class NeLocationProviderInstance implements ClusterSingletonService, AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(NeLocationProviderInstance.class); + + private static final ServiceGroupIdentifier IDENTIFIER = + ServiceGroupIdentifier.create(GroupbasedpolicyInstance.GBP_SERVICE_GROUP_IDENTIFIER); + private final DataBroker dataBroker; + private final ClusterSingletonServiceProvider clusterSingletonService; + private ClusterSingletonServiceRegistration singletonServiceRegistration; private NeLocationProvider provider; - public NeLocationProviderInstance (DataBroker dataBroker) { + public NeLocationProviderInstance(final DataBroker dataBroker, + final ClusterSingletonServiceProvider clusterSingletonService) { + this.dataBroker = Preconditions.checkNotNull(dataBroker); + this.clusterSingletonService = Preconditions.checkNotNull(clusterSingletonService); + } + + public void initialize() { + LOG.info("Clustering session initiated for {}", this.getClass().getSimpleName()); + singletonServiceRegistration = clusterSingletonService.registerClusterSingletonService(this); + } + + @Override + public void instantiateServiceInstance() { + LOG.info("Instantiating {}", this.getClass().getSimpleName()); provider = new NeLocationProvider(dataBroker); } @Override - public void close() throws Exception { + public ListenableFuture closeServiceInstance() { + LOG.info("Instance {} closed", this.getClass().getSimpleName()); provider.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", this.getClass().getSimpleName(), e.getMessage()); + } + singletonServiceRegistration = null; + } + } + + @Override + public ServiceGroupIdentifier getIdentifier() { + return IDENTIFIER; } } diff --git a/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderModule.java b/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderModule.java index b0c7a9a2b..108a3a6d0 100644 --- a/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderModule.java +++ b/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderModule.java @@ -9,7 +9,7 @@ package org.opendaylight.controller.config.yang.config.ne.location.provider.cfg; import org.opendaylight.controller.sal.common.util.NoopAutoCloseable; - +@Deprecated public class NeLocationProviderModule extends org.opendaylight.controller.config.yang.config.ne.location.provider.cfg.AbstractNeLocationProviderModule { public NeLocationProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); diff --git a/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderModuleFactory.java b/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderModuleFactory.java index 89479de1d..9abd3b8b8 100644 --- a/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderModuleFactory.java +++ b/location-providers/ne-location-provider/src/main/java/org/opendaylight/controller/config/yang/config/ne/location/provider/cfg/NeLocationProviderModuleFactory.java @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.config.yang.config.ne.location.provider.cfg; +@Deprecated public class NeLocationProviderModuleFactory extends org.opendaylight.controller.config.yang.config.ne.location.provider.cfg.AbstractNeLocationProviderModuleFactory { } diff --git a/location-providers/ne-location-provider/src/main/resources/org/opendaylight/blueprint/ne-location-provider.xml b/location-providers/ne-location-provider/src/main/resources/org/opendaylight/blueprint/ne-location-provider.xml index d6598a30c..6111d7c18 100644 --- a/location-providers/ne-location-provider/src/main/resources/org/opendaylight/blueprint/ne-location-provider.xml +++ b/location-providers/ne-location-provider/src/main/resources/org/opendaylight/blueprint/ne-location-provider.xml @@ -4,9 +4,11 @@ odl:use-default-for-reference-types="true"> + - + + -- 2.36.6