From 5f021b6d594ca0c4cf97621f5c893297e65f1879 Mon Sep 17 00:00:00 2001 From: Marek Gradzki Date: Thu, 24 Aug 2017 10:33:15 +0200 Subject: Do not fail if CloseableComponent's shutdown fails Change-Id: I6875874f5b388a4d289c538f2d3dbfd4ff6feec3 Signed-off-by: Marek Gradzki --- .../io/fd/honeycomb/impl/ShutdownHandlerImpl.java | 31 ++++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'infra/impl') diff --git a/infra/impl/src/main/java/io/fd/honeycomb/impl/ShutdownHandlerImpl.java b/infra/impl/src/main/java/io/fd/honeycomb/impl/ShutdownHandlerImpl.java index c7cdb21bb..71145817f 100644 --- a/infra/impl/src/main/java/io/fd/honeycomb/impl/ShutdownHandlerImpl.java +++ b/infra/impl/src/main/java/io/fd/honeycomb/impl/ShutdownHandlerImpl.java @@ -16,8 +16,7 @@ package io.fd.honeycomb.impl; -import static java.lang.String.format; - +import com.google.common.annotations.VisibleForTesting; import io.fd.honeycomb.data.init.ShutdownHandler; import java.util.Deque; import java.util.LinkedList; @@ -25,7 +24,7 @@ import javax.annotation.Nonnull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ShutdownHandlerImpl implements ShutdownHandler { +public final class ShutdownHandlerImpl implements ShutdownHandler { private static final Logger LOG = LoggerFactory.getLogger(ShutdownHandlerImpl.class); @@ -33,17 +32,7 @@ public class ShutdownHandlerImpl implements ShutdownHandler { public ShutdownHandlerImpl() { components = new LinkedList<>(); - Runtime.getRuntime().addShutdownHook(new Thread(() -> { - // close components in reverse order that they were registered - components.descendingIterator().forEachRemaining(closeable -> { - LOG.info("Closing component {}", closeable.getName()); - try { - closeable.getComponent().close(); - } catch (Exception e) { - throw new IllegalStateException(format("Unable to close component %s", closeable.getName()), e); - } - }); - })); + Runtime.getRuntime().addShutdownHook(new Thread((this::performShutdown))); } @Override @@ -70,4 +59,18 @@ public class ShutdownHandlerImpl implements ShutdownHandler { return component; } } + + @VisibleForTesting + void performShutdown() { + // close components in reverse order that they were registered + components.descendingIterator().forEachRemaining(closeable -> { + LOG.info("Closing component {}", closeable.getName()); + try { + closeable.getComponent().close(); + } catch (Exception e) { + // We can't do much here, so logging exception and moving to the next closable component + LOG.warn("Unable to close component {}", closeable.getName(), e); + } + }); + } } -- cgit 1.2.3-korg