From 6923420946f05308af6a073d270df41d069dd532 Mon Sep 17 00:00:00 2001 From: Jan Srnicek Date: Thu, 10 Aug 2017 14:39:30 +0200 Subject: Shutdown closing of resources Change-Id: If57a5414153cb983138872c7a1ded7c7066b1b6d Signed-off-by: Jan Srnicek --- .../bgp/BGPExtensionConsumerContextProvider.java | 5 +++ .../io/fd/honeycomb/infra/bgp/BgpRIBProvider.java | 50 ++++++++++++---------- .../bgp/RIBExtensionConsumerContextProvider.java | 4 ++ .../netconf/NetconfNotificationMapperProvider.java | 8 +++- .../io/fd/honeycomb/translate/util/JsonUtils.java | 24 ++++++----- 5 files changed, 57 insertions(+), 34 deletions(-) diff --git a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BGPExtensionConsumerContextProvider.java b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BGPExtensionConsumerContextProvider.java index 106a882ec..1bb0c5a1b 100644 --- a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BGPExtensionConsumerContextProvider.java +++ b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BGPExtensionConsumerContextProvider.java @@ -18,6 +18,7 @@ package io.fd.honeycomb.infra.bgp; import com.google.inject.Inject; import io.fd.honeycomb.binding.init.ProviderTrait; +import io.fd.honeycomb.data.init.ShutdownHandler; import java.util.ArrayList; import java.util.Set; import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext; @@ -34,6 +35,9 @@ final class BGPExtensionConsumerContextProvider extends ProviderTrait activators; + @Inject + private ShutdownHandler shutdownHandler; + @Override protected BGPExtensionConsumerContext create() { final BGPExtensionProviderContext ctx = new SimpleBGPExtensionProviderContext(); @@ -41,6 +45,7 @@ final class BGPExtensionConsumerContextProvider extends ProviderTrait(activators)); LOG.debug("Starting BGPExtensionConsumerContext with activators: {}", activators); activator.start(); + shutdownHandler.register("bgp-extension-context-activator", activator); return ctx; } } diff --git a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java index a25808850..60d478325 100644 --- a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java +++ b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java @@ -21,6 +21,7 @@ import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUti import com.google.common.collect.ImmutableList; import com.google.inject.Inject; import io.fd.honeycomb.binding.init.ProviderTrait; +import io.fd.honeycomb.data.init.ShutdownHandler; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -70,6 +71,8 @@ final class BgpRIBProvider extends ProviderTrait { private BGPTableTypeRegistryConsumer tableTypeRegistry; @Inject private SchemaService schemaService; + @Inject + private ShutdownHandler shutdownHandler; @Override protected RIB create() { @@ -79,48 +82,49 @@ final class BgpRIBProvider extends ProviderTrait { LOG.debug("Creating BGP RIB: routerId={}, asNumber={}", routerId, asNumber); // TODO configure other BGP Multiprotocol extensions: final List afiSafi = ImmutableList.of( - new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class) - .addAugmentation(AfiSafi2.class, - new AfiSafi2Builder().setReceive(cfg.isBgpMultiplePathsEnabled()) - .setSendMax(cfg.bgpSendMaxMaths.get().shortValue()).build()) - .build(), - new AfiSafiBuilder().setAfiSafiName(IPV4LABELLEDUNICAST.class) - .addAugmentation(AfiSafi2.class, - new AfiSafi2Builder().setReceive(cfg.isBgpMultiplePathsEnabled()) - .setSendMax(cfg.bgpSendMaxMaths.get().shortValue()).build()) - .build() - ); + new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class) + .addAugmentation(AfiSafi2.class, + new AfiSafi2Builder().setReceive(cfg.isBgpMultiplePathsEnabled()) + .setSendMax(cfg.bgpSendMaxMaths.get().shortValue()).build()) + .build(), + new AfiSafiBuilder().setAfiSafiName(IPV4LABELLEDUNICAST.class) + .addAugmentation(AfiSafi2.class, + new AfiSafi2Builder().setReceive(cfg.isBgpMultiplePathsEnabled()) + .setSendMax(cfg.bgpSendMaxMaths.get().shortValue()).build()) + .build() + ); final Map pathSelectionModes = - OpenConfigMappingUtil.toPathSelectionMode(afiSafi, tableTypeRegistry) - .entrySet().stream().collect(Collectors.toMap(entry -> - new TablesKey(entry.getKey().getAfi(), entry.getKey().getSafi()), Map.Entry::getValue)); + OpenConfigMappingUtil.toPathSelectionMode(afiSafi, tableTypeRegistry) + .entrySet().stream().collect(Collectors.toMap(entry -> + new TablesKey(entry.getKey().getAfi(), entry.getKey().getSafi()), Map.Entry::getValue)); // based on org.opendaylight.protocol.bgp.rib.impl.config.RibImpl.createRib + final PingPongDataBroker pingPongDataBroker = new PingPongDataBroker(domBroker); final RIBImpl rib = - new RIBImpl(new NoopClusterSingletonServiceProvider(), new RibId(cfg.bgpProtocolInstanceName.get()), - asNumber, new BgpId(routerId), clusterId, extensions, dispatcher, codec, - new PingPongDataBroker(domBroker), toTableTypes(afiSafi, tableTypeRegistry), pathSelectionModes, - extensions.getClassLoadingStrategy(), null); + new RIBImpl(new NoopClusterSingletonServiceProvider(), new RibId(cfg.bgpProtocolInstanceName.get()), + asNumber, new BgpId(routerId), clusterId, extensions, dispatcher, codec, + pingPongDataBroker, toTableTypes(afiSafi, tableTypeRegistry), pathSelectionModes, + extensions.getClassLoadingStrategy(), null); // required for proper RIB's CodecRegistry initialization (based on RIBImpl.start) schemaService.registerSchemaContextListener(rib); - + shutdownHandler.register("ping-pong-data-broker", pingPongDataBroker); LOG.debug("BGP RIB created successfully: {}", rib); return rib; } /** - * HC does not support clustering, but BGP uses {@link ClusterSingletonServiceProvider} - * to initialize {@link RIBImpl}. Therefore we provide this dummy implementation. + * HC does not support clustering, but BGP uses {@link ClusterSingletonServiceProvider} to initialize {@link + * RIBImpl}. Therefore we provide this dummy implementation. */ private static final class NoopClusterSingletonServiceProvider implements ClusterSingletonServiceProvider { private static final Logger LOG = LoggerFactory.getLogger(NoopClusterSingletonServiceProvider.class); private static final ClusterSingletonServiceRegistration REGISTRATION = - () -> LOG.debug("Closing ClusterSingletonServiceRegistration"); + () -> LOG.debug("Closing ClusterSingletonServiceRegistration"); @Override public ClusterSingletonServiceRegistration registerClusterSingletonService( - final ClusterSingletonService clusterSingletonService) { + final ClusterSingletonService clusterSingletonService) { clusterSingletonService.instantiateServiceInstance(); return REGISTRATION; } diff --git a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/RIBExtensionConsumerContextProvider.java b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/RIBExtensionConsumerContextProvider.java index 696726ac4..07ab86992 100644 --- a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/RIBExtensionConsumerContextProvider.java +++ b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/RIBExtensionConsumerContextProvider.java @@ -18,6 +18,7 @@ package io.fd.honeycomb.infra.bgp; import com.google.inject.Inject; import io.fd.honeycomb.binding.init.ProviderTrait; +import io.fd.honeycomb.data.init.ShutdownHandler; import java.util.ArrayList; import java.util.Set; import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext; @@ -32,6 +33,8 @@ public class RIBExtensionConsumerContextProvider extends ProviderTrait activators; + @Inject + private ShutdownHandler shutdownHandler; @Override protected RIBExtensionConsumerContext create() { @@ -40,6 +43,7 @@ public class RIBExtensionConsumerContextProvider extends ProviderTrait(activators)); LOG.debug("Starting RIBExtensionConsumerContext with activators: {}", activators); activator.start(); + shutdownHandler.register("rib-extension-consumer-context-activator", activator); return ctx; } } diff --git a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationMapperProvider.java b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationMapperProvider.java index d097e3419..e402f046d 100644 --- a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationMapperProvider.java +++ b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationMapperProvider.java @@ -19,6 +19,7 @@ package io.fd.honeycomb.northbound.netconf; import com.google.inject.Inject; import com.google.inject.name.Named; import io.fd.honeycomb.binding.init.ProviderTrait; +import io.fd.honeycomb.data.init.ShutdownHandler; import org.opendaylight.controller.config.yang.netconf.mdsal.notification.CapabilityChangeNotificationProducer; import org.opendaylight.controller.config.yang.netconf.mdsal.notification.NotificationToMdsalWriter; import org.opendaylight.controller.md.sal.binding.api.DataBroker; @@ -54,6 +55,8 @@ public class NetconfNotificationMapperProvider extends ProviderTrait builder = Builders.containerBuilder().withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(schemaContext.getQName())); - final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(builder); - try (final JsonParserStream jsonParser = JsonParserStream.create(writer, schemaContext, parentSchema)) { + try (final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(builder); + final JsonParserStream jsonParser = JsonParserStream.create(writer, schemaContext, parentSchema)) { final JsonReader reader = new JsonReader(new InputStreamReader(stream, Charsets.UTF_8)); jsonParser.parse(reader); } catch (IOException e) { @@ -105,9 +110,9 @@ public final class JsonUtils { @Nonnull final YangInstanceIdentifier.NodeIdentifier nodeIdentifier) { final DataContainerNodeAttrBuilder builder = Builders.containerBuilder().withNodeIdentifier(nodeIdentifier); - final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(builder); - try (final JsonParserStream jsonParser = JsonParserStream.create(writer, schemaContext, parentSchema)) { + try (final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(builder); + final JsonParserStream jsonParser = JsonParserStream.create(writer, schemaContext, parentSchema)) { final JsonReader reader = new JsonReader(new InputStreamReader(stream, Charsets.UTF_8)); jsonParser.parse(reader); } catch (IOException e) { @@ -124,9 +129,8 @@ public final class JsonUtils { final DataContainerNodeAttrBuilder mapEntryBuilder = Builders.mapEntryBuilder() .withNodeIdentifier(nodeIdentifier); - - final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(mapEntryBuilder); - try (final JsonParserStream jsonParser = JsonParserStream.create(writer, schemaContext, parentSchema)) { + try (final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(mapEntryBuilder); + final JsonParserStream jsonParser = JsonParserStream.create(writer, schemaContext, parentSchema)) { final JsonReader reader = new JsonReader(new InputStreamReader(stream, Charsets.UTF_8)); jsonParser.parse(reader); } catch (IOException e) { -- cgit 1.2.3-korg