From: Vladimir Lavor Date: Thu, 11 Aug 2016 07:51:47 +0000 (+0200) Subject: Bug 6396: Integrate openflow-overlay with clustering singleton service X-Git-Tag: release/carbon~116^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=9d279106bac75c56ac9379bdf49b08e9d3f10b97;p=groupbasedpolicy.git Bug 6396: Integrate openflow-overlay with clustering singleton service Change-Id: Ic3823d8eda021958e32133cc4d486d48d26f79d9 Signed-off-by: Vladimir Lavor --- diff --git a/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderInstance.java b/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderInstance.java index b19dafab9..c8ff5486e 100644 --- a/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderInstance.java +++ b/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderInstance.java @@ -8,42 +8,101 @@ package org.opendaylight.controller.config.yang.config.ofoverlay_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.controller.md.sal.binding.api.NotificationService; import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry; import org.opendaylight.groupbasedpolicy.api.PolicyValidatorRegistry; import org.opendaylight.groupbasedpolicy.api.StatisticsManager; import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OFOverlayRenderer; +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.flow.service.rev130819.SalFlowService; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -public class OFOverlayProviderInstance implements AutoCloseable { - - - public OFOverlayRenderer renderer; - - public OFOverlayProviderInstance(DataBroker dataBroker, - PacketProcessingService packetProcessingService, - SalFlowService flowService, - NotificationService notificationService, - EpRendererAugmentationRegistry epRendererAugmentationRegistry, - PolicyValidatorRegistry policyValidatorRegistry, - StatisticsManager statisticsManager, - short tableOffset - ) { - renderer = new OFOverlayRenderer(dataBroker, - packetProcessingService, - flowService, - notificationService, - epRendererAugmentationRegistry, - policyValidatorRegistry, - statisticsManager, - tableOffset); +public class OFOverlayProviderInstance implements ClusterSingletonService, AutoCloseable { + + private static final Logger LOG = LoggerFactory.getLogger(OFOverlayProviderInstance.class); + + private static final ServiceGroupIdentifier IDENTIFIER = + ServiceGroupIdentifier.create(GroupbasedpolicyInstance.GBP_SERVICE_GROUP_IDENTIFIER); + private final DataBroker dataBroker; + private final PacketProcessingService packetProcessingService; + private final SalFlowService flowService; + private final NotificationService notificationService; + private final EpRendererAugmentationRegistry epRendererAugmentationRegistry; + private final PolicyValidatorRegistry policyValidatorRegistry; + private final StatisticsManager statisticsManager; + private final short tableOffset; + private final ClusterSingletonServiceProvider clusterSingletonService; + private ClusterSingletonServiceRegistration singletonServiceRegistration; + private OFOverlayRenderer renderer; + + public OFOverlayProviderInstance(final DataBroker dataBroker, + final PacketProcessingService packetProcessingService, + final SalFlowService flowService, + final NotificationService notificationService, + final EpRendererAugmentationRegistry epRendererAugmentationRegistry, + final PolicyValidatorRegistry policyValidatorRegistry, + final StatisticsManager statisticsManager, + final short tableOffset, + final ClusterSingletonServiceProvider clusterSingletonService) { + this.dataBroker = Preconditions.checkNotNull(dataBroker); + this.packetProcessingService = Preconditions.checkNotNull(packetProcessingService); + this.flowService = Preconditions.checkNotNull(flowService); + this.notificationService = Preconditions.checkNotNull(notificationService); + this.epRendererAugmentationRegistry = Preconditions.checkNotNull(epRendererAugmentationRegistry); + this.policyValidatorRegistry = Preconditions.checkNotNull(policyValidatorRegistry); + this.statisticsManager = Preconditions.checkNotNull(statisticsManager); + this.tableOffset = Preconditions.checkNotNull(tableOffset); + 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 { - renderer.close(); + public void instantiateServiceInstance() { + LOG.info("Instantiating {}", this.getClass().getSimpleName()); + renderer = new OFOverlayRenderer(dataBroker, packetProcessingService, flowService, notificationService, + epRendererAugmentationRegistry, policyValidatorRegistry, statisticsManager, tableOffset); } + @Override + public ListenableFuture closeServiceInstance() { + LOG.info("Instance {} closed", this.getClass().getSimpleName()); + try { + renderer.close(); + } catch (Exception e) { + LOG.warn("Exception thrown when closing ... {}", e.getMessage()); + } + 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",this.getClass().getSimpleName(), e.getMessage()); + } + singletonServiceRegistration = null; + } + } + + @Override + public ServiceGroupIdentifier getIdentifier() { + return IDENTIFIER; + } } diff --git a/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModule.java b/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModule.java index 0bb61779f..9bd243891 100755 --- a/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModule.java +++ b/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModule.java @@ -12,7 +12,7 @@ package org.opendaylight.controller.config.yang.config.ofoverlay_provider.impl; import org.opendaylight.controller.sal.common.util.NoopAutoCloseable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - +@Deprecated public class OFOverlayProviderModule extends org.opendaylight.controller.config.yang.config.ofoverlay_provider.impl.AbstractOFOverlayProviderModule { private static final Logger LOG = LoggerFactory .getLogger(OFOverlayProviderModule.class); diff --git a/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModuleFactory.java b/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModuleFactory.java index d4683f760..af5620f1e 100644 --- a/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModuleFactory.java +++ b/renderers/ofoverlay/src/main/java/org/opendaylight/controller/config/yang/config/ofoverlay_provider/impl/OFOverlayProviderModuleFactory.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.ofoverlay_provider.impl; +@Deprecated public class OFOverlayProviderModuleFactory extends org.opendaylight.controller.config.yang.config.ofoverlay_provider.impl.AbstractOFOverlayProviderModuleFactory { } diff --git a/renderers/ofoverlay/src/main/resources/org/opendaylight/blueprint/of-overlay.xml b/renderers/ofoverlay/src/main/resources/org/opendaylight/blueprint/of-overlay.xml index 15d7e6fe0..7627faea0 100644 --- a/renderers/ofoverlay/src/main/resources/org/opendaylight/blueprint/of-overlay.xml +++ b/renderers/ofoverlay/src/main/resources/org/opendaylight/blueprint/of-overlay.xml @@ -8,11 +8,12 @@ + + init-method="initialize" destroy-method="close"> @@ -20,6 +21,7 @@ + \ No newline at end of file