From: Vladimir Lavor Date: Mon, 15 Aug 2016 08:50:48 +0000 (+0200) Subject: Bug 6396: Integrate neutron-ovsdb with clustering singleton service X-Git-Tag: release/carbon~113^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=f9f4b035751c73b9b8d8c6a155a28d109119306b;p=groupbasedpolicy.git Bug 6396: Integrate neutron-ovsdb with clustering singleton service Change-Id: Ib9f0852143b5e39e83f12467afd35146b87562ff Signed-off-by: Vladimir Lavor --- diff --git a/neutron-ovsdb/src/main/java/org/opendaylight/controller/config/yang/config/neutron_ovsdb/impl/NeutronOvsdbInstance.java b/neutron-ovsdb/src/main/java/org/opendaylight/controller/config/yang/config/neutron_ovsdb/impl/NeutronOvsdbInstance.java index ce1a28c03..66e299146 100644 --- a/neutron-ovsdb/src/main/java/org/opendaylight/controller/config/yang/config/neutron_ovsdb/impl/NeutronOvsdbInstance.java +++ b/neutron-ovsdb/src/main/java/org/opendaylight/controller/config/yang/config/neutron_ovsdb/impl/NeutronOvsdbInstance.java @@ -8,23 +8,81 @@ package org.opendaylight.controller.config.yang.config.neutron_ovsdb.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.neutron.ovsdb.NeutronOvsdb; +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.endpoint.rev140421.EndpointService; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.ovsdb.params.rev160812.IntegrationBridgeSetting; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -public class NeutronOvsdbInstance implements AutoCloseable{ +public class NeutronOvsdbInstance implements ClusterSingletonService, AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(NeutronOvsdbInstance.class); + + private static final ServiceGroupIdentifier IDENTIFIER = + ServiceGroupIdentifier.create(GroupbasedpolicyInstance.GBP_SERVICE_GROUP_IDENTIFIER); + private final DataBroker dataBroker; + private final EndpointService epService; + private final IntegrationBridgeSetting settings; + private final ClusterSingletonServiceProvider clusterSingletonService; + private ClusterSingletonServiceRegistration singletonServiceRegistration; private NeutronOvsdb neutronOvsdb; - public NeutronOvsdbInstance(DataBroker dataBroker, EndpointService epService, - IntegrationBridgeSetting settings) { + public NeutronOvsdbInstance(final DataBroker dataBroker, + final EndpointService epService, + final IntegrationBridgeSetting settings, + final ClusterSingletonServiceProvider clusterSingletonService) { + this.dataBroker = Preconditions.checkNotNull(dataBroker); + this.epService = Preconditions.checkNotNull(epService); + this.settings = Preconditions.checkNotNull(settings); + 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()); neutronOvsdb = new NeutronOvsdb(dataBroker, epService, settings); } + @Override + public ListenableFuture closeServiceInstance() { + LOG.info("Instance {} closed", this.getClass().getSimpleName()); + try { + neutronOvsdb.close(); + } catch (Exception e) { + LOG.warn("Instance close failed to ... ", e); + } + return Futures.immediateFuture(null); + } + @Override public void close() throws Exception { - neutronOvsdb.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); + } + singletonServiceRegistration = null; + } } + @Override + public ServiceGroupIdentifier getIdentifier() { + return IDENTIFIER; + } } diff --git a/neutron-ovsdb/src/main/resources/org/opendaylight/blueprint/neutron-ovsdb.xml b/neutron-ovsdb/src/main/resources/org/opendaylight/blueprint/neutron-ovsdb.xml index aa4fc4eb3..26e12bdb7 100644 --- a/neutron-ovsdb/src/main/resources/org/opendaylight/blueprint/neutron-ovsdb.xml +++ b/neutron-ovsdb/src/main/resources/org/opendaylight/blueprint/neutron-ovsdb.xml @@ -5,6 +5,7 @@ + @@ -19,9 +20,10 @@ + init-method="initialize" destroy-method="close"> + \ No newline at end of file