diff options
author | Marek Gradzki <mgradzki@cisco.com> | 2017-08-24 10:33:15 +0200 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-08-24 10:35:02 +0200 |
commit | 5f021b6d594ca0c4cf97621f5c893297e65f1879 (patch) | |
tree | 2745f47502c7712b8c28a123dd287ad38316853c /infra/impl/src | |
parent | ab25ddea2b1a153fa96dcf2faf5765310398db69 (diff) |
Do not fail if CloseableComponent's shutdown fails
Change-Id: I6875874f5b388a4d289c538f2d3dbfd4ff6feec3
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
Diffstat (limited to 'infra/impl/src')
-rw-r--r-- | infra/impl/src/main/java/io/fd/honeycomb/impl/ShutdownHandlerImpl.java | 31 |
1 files changed, 17 insertions, 14 deletions
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); + } + }); + } } |