From: Vladimir Lavor Date: Fri, 12 Aug 2016 12:06:56 +0000 (+0200) Subject: Bug 6396: Integrate iovisor renderer with clustering singleton service X-Git-Tag: release/carbon~115^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=705b332e2fb1c2ae7f1d60a7c7da5ea9d4dc3be3;p=groupbasedpolicy.git Bug 6396: Integrate iovisor renderer with clustering singleton service Change-Id: Idf942e6a0963ba349b92faf6be47c75f0c9cc111 Signed-off-by: Vladimir Lavor --- diff --git a/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderInstance.java b/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderInstance.java index d6537b299..dec8474cb 100644 --- a/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderInstance.java +++ b/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderInstance.java @@ -8,23 +8,80 @@ package org.opendaylight.controller.config.yang.config.iovisor_provider.impl; +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.EpRendererAugmentationRegistry; import org.opendaylight.groupbasedpolicy.api.PolicyValidatorRegistry; import org.opendaylight.groupbasedpolicy.renderer.iovisor.IovisorRenderer; +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 IovisorProviderInstance implements AutoCloseable{ +public class IovisorProviderInstance implements ClusterSingletonService, AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(IovisorProviderInstance.class); + + private static final ServiceGroupIdentifier IDENTIFIER = + ServiceGroupIdentifier.create(GroupbasedpolicyInstance.GBP_SERVICE_GROUP_IDENTIFIER); + private final DataBroker dataBroker; + private final EpRendererAugmentationRegistry epRegistry; + private final PolicyValidatorRegistry policyValidator; + private final ClusterSingletonServiceProvider clusteringServiceProvider; + private ClusterSingletonServiceRegistration singletonServiceRegistration; private IovisorRenderer renderer; - public IovisorProviderInstance (DataBroker dataBroker, EpRendererAugmentationRegistry epRegistry, - PolicyValidatorRegistry policyValidator) { + public IovisorProviderInstance(final DataBroker dataBroker, + final EpRendererAugmentationRegistry epRegistry, + final PolicyValidatorRegistry policyValidator, + final ClusterSingletonServiceProvider clusteringServiceProvider) { + this.dataBroker = Preconditions.checkNotNull(dataBroker); + this.epRegistry = Preconditions.checkNotNull(epRegistry); + this.policyValidator = Preconditions.checkNotNull(policyValidator); + this.clusteringServiceProvider = Preconditions.checkNotNull(clusteringServiceProvider); + } + + public void initialize() { + LOG.info("Clustering session initiated for {}", this.getClass().getSimpleName()); + singletonServiceRegistration = clusteringServiceProvider.registerClusterSingletonService(this); + } + + @Override + public void instantiateServiceInstance() { + LOG.info("Instantiating {}", this.getClass().getSimpleName()); renderer = new IovisorRenderer(dataBroker, epRegistry, policyValidator); } @Override - public void close() throws Exception { - renderer.close(); + public ListenableFuture closeServiceInstance() { + try { + renderer.close(); + } catch (Exception e) { + LOG.warn("Exception while closing ... ", e); + } + return Futures.immediateFuture(null); } + @Override + public void 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/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderModule.java b/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderModule.java index 29780d5c0..179dd9305 100644 --- a/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderModule.java +++ b/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderModule.java @@ -9,7 +9,7 @@ package org.opendaylight.controller.config.yang.config.iovisor_provider.impl; import org.opendaylight.controller.sal.common.util.NoopAutoCloseable; - +@Deprecated public class IovisorProviderModule extends org.opendaylight.controller.config.yang.config.iovisor_provider.impl.AbstractIovisorProviderModule { diff --git a/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderModuleFactory.java b/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderModuleFactory.java index 5588de71f..6521c9360 100644 --- a/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderModuleFactory.java +++ b/renderers/iovisor/src/main/java/org/opendaylight/controller/config/yang/config/iovisor_provider/impl/IovisorProviderModuleFactory.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.iovisor_provider.impl; +@Deprecated public class IovisorProviderModuleFactory extends org.opendaylight.controller.config.yang.config.iovisor_provider.impl.AbstractIovisorProviderModuleFactory { } diff --git a/renderers/iovisor/src/main/resources/org/opendaylight/blueprint/iovisor-renderer.xml b/renderers/iovisor/src/main/resources/org/opendaylight/blueprint/iovisor-renderer.xml index cd195adcb..336310186 100644 --- a/renderers/iovisor/src/main/resources/org/opendaylight/blueprint/iovisor-renderer.xml +++ b/renderers/iovisor/src/main/resources/org/opendaylight/blueprint/iovisor-renderer.xml @@ -6,11 +6,13 @@ + + init-method="initialize" destroy-method="close"> + \ No newline at end of file