From 64aa535459b20948113389bc1d1540c9361d9dbe Mon Sep 17 00:00:00 2001 From: Vladimir Lavor Date: Wed, 10 Aug 2016 17:15:05 +0200 Subject: [PATCH] Bug 6396: Integrate sxp-mapper with clustering singleton service Change-Id: I702283695dc618cbeaf5dec7300312bb602cd853 Signed-off-by: Vladimir Lavor --- .../sxp_mapper/SxpMapperProviderInstance.java | 66 +++++++++++++++++-- .../sxp_mapper/SxpMapperProviderModule.java | 1 + .../SxpMapperProviderModuleFactory.java | 1 + .../org/opendaylight/blueprint/sxp-mapper.xml | 4 +- 4 files changed, 67 insertions(+), 5 deletions(-) diff --git a/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderInstance.java b/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderInstance.java index ec79a0e9c..6d1656eed 100644 --- a/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderInstance.java +++ b/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderInstance.java @@ -8,23 +8,81 @@ package org.opendaylight.controller.config.yang.config.groupbasedpolicy.sxp_mapper; +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.api.DomainSpecificRegistry; import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.SxpMapperProviderImpl; +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.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -public class SxpMapperProviderInstance implements AutoCloseable { +public class SxpMapperProviderInstance implements ClusterSingletonService, AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(SxpMapperProviderInstance.class); + + private static final ServiceGroupIdentifier IDENTIFIER = + ServiceGroupIdentifier.create(GroupbasedpolicyInstance.GBP_SERVICE_GROUP_IDENTIFIER); + private final DataBroker dataBroker; + private final BaseEndpointService endpointService; + private final DomainSpecificRegistry registry; + private final ClusterSingletonServiceProvider clusterSingletonService; + private ClusterSingletonServiceRegistration singletonServiceRegistration; private SxpMapperProviderImpl sxpMapperProviderImpl; - public SxpMapperProviderInstance(DataBroker dataBroker, BaseEndpointService endpointService, - DomainSpecificRegistry registry ) { + public SxpMapperProviderInstance(final DataBroker dataBroker, + final BaseEndpointService endpointService, + final DomainSpecificRegistry registry, + final ClusterSingletonServiceProvider clusterSingletonService) { + this.dataBroker = Preconditions.checkNotNull(dataBroker); + this.endpointService = Preconditions.checkNotNull(endpointService); + this.registry = Preconditions.checkNotNull(registry); + 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()); sxpMapperProviderImpl = new SxpMapperProviderImpl(dataBroker, endpointService, registry); } + @Override + public ListenableFuture closeServiceInstance() { + LOG.info("Instance {} closed", this.getClass().getSimpleName()); + try { + sxpMapperProviderImpl.close(); + } catch (Exception e) { + LOG.warn("Exception while closing ... {}", e.getMessage()); + } + return Futures.immediateFuture(null); + } + @Override public void close() throws Exception { - sxpMapperProviderImpl.close(); + 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/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderModule.java b/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderModule.java index c419606d2..43b395d39 100644 --- a/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderModule.java +++ b/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderModule.java @@ -14,6 +14,7 @@ import org.opendaylight.controller.sal.common.util.NoopAutoCloseable; /** * sxp-mapper impl module */ +@Deprecated public class SxpMapperProviderModule extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.sxp_mapper.AbstractSxpMapperProviderModule { public SxpMapperProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); diff --git a/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderModuleFactory.java b/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderModuleFactory.java index a4ce86cbb..60c85b998 100644 --- a/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderModuleFactory.java +++ b/sxp-mapper/src/main/java/org/opendaylight/controller/config/yang/config/groupbasedpolicy/sxp_mapper/SxpMapperProviderModuleFactory.java @@ -16,6 +16,7 @@ * Do not modify this file unless it is present under src/main directory */ package org.opendaylight.controller.config.yang.config.groupbasedpolicy.sxp_mapper; +@Deprecated public class SxpMapperProviderModuleFactory extends org.opendaylight.controller.config.yang.config.groupbasedpolicy.sxp_mapper.AbstractSxpMapperProviderModuleFactory { } diff --git a/sxp-mapper/src/main/resources/org/opendaylight/blueprint/sxp-mapper.xml b/sxp-mapper/src/main/resources/org/opendaylight/blueprint/sxp-mapper.xml index be8fb2cd6..96e28a810 100644 --- a/sxp-mapper/src/main/resources/org/opendaylight/blueprint/sxp-mapper.xml +++ b/sxp-mapper/src/main/resources/org/opendaylight/blueprint/sxp-mapper.xml @@ -5,12 +5,14 @@ + + init-method="initialize" destroy-method="close"> + \ No newline at end of file -- 2.36.6