summaryrefslogtreecommitdiffstats
path: root/infra/impl
diff options
context:
space:
mode:
authorMarek Gradzki <mgradzki@cisco.com>2017-08-24 10:33:15 +0200
committerMarek Gradzki <mgradzki@cisco.com>2017-08-24 10:35:02 +0200
commit5f021b6d594ca0c4cf97621f5c893297e65f1879 (patch)
tree2745f47502c7712b8c28a123dd287ad38316853c /infra/impl
parentab25ddea2b1a153fa96dcf2faf5765310398db69 (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')
-rw-r--r--infra/impl/src/main/java/io/fd/honeycomb/impl/ShutdownHandlerImpl.java31
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);
+ }
+ });
+ }
}