Move shutdown hook registration to dedicated provider 11/11011/1
authorMarek Gradzki <mgradzki@cisco.com>
Wed, 7 Mar 2018 13:51:18 +0000 (14:51 +0100)
committerMarek Gradzki <mgradzki@cisco.com>
Wed, 7 Mar 2018 13:53:33 +0000 (14:53 +0100)
This change would allow using ShutdownHandlerImpl in integration tests.

Change-Id: I854f65d03b9e1a495fda7211fd1b7fd51b4e5ba3
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
infra/cfg-init/src/main/java/io/fd/honeycomb/data/init/ShutdownHandler.java
infra/impl/src/main/java/io/fd/honeycomb/impl/ShutdownHandlerImpl.java
infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/data/ConfigAndOperationalPipelineModule.java
infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/data/ShutdownHandlerProvider.java [new file with mode: 0644]

index fc350da..6a0096e 100644 (file)
@@ -19,15 +19,20 @@ package io.fd.honeycomb.data.init;
 import javax.annotation.Nonnull;
 
 /**
- * Handles closing of closeable components
+ * Handles closing of closeable components.
  */
 public interface ShutdownHandler {
 
     /**
-     * Register component to be properly closed on shutdown
+     * Registers component to be properly closed on shutdown.
      *
      * @param name      component name
      * @param component closeable component
      */
     void register(@Nonnull final String name, @Nonnull final AutoCloseable component);
+
+    /**
+     * Performs shutdown for all registered components.
+     */
+    void performShutdown();
 }
index 7114581..f622a60 100644 (file)
@@ -16,7 +16,6 @@
 
 package io.fd.honeycomb.impl;
 
-import com.google.common.annotations.VisibleForTesting;
 import io.fd.honeycomb.data.init.ShutdownHandler;
 import java.util.Deque;
 import java.util.LinkedList;
@@ -32,7 +31,6 @@ public final class ShutdownHandlerImpl implements ShutdownHandler {
 
     public ShutdownHandlerImpl() {
         components = new LinkedList<>();
-        Runtime.getRuntime().addShutdownHook(new Thread((this::performShutdown)));
     }
 
     @Override
@@ -60,8 +58,8 @@ public final class ShutdownHandlerImpl implements ShutdownHandler {
         }
     }
 
-    @VisibleForTesting
-    void performShutdown() {
+    @Override
+    public void performShutdown() {
         // close components in reverse order that they were registered
         components.descendingIterator().forEachRemaining(closeable -> {
             LOG.info("Closing component {}", closeable.getName());
index 080caaf..d0cbdc1 100644 (file)
@@ -47,7 +47,7 @@ public class ConfigAndOperationalPipelineModule extends PrivateModule {
 
     @Override
     protected void configure() {
-        bind(ShutdownHandler.class).to(ShutdownHandlerImpl.class).in(Singleton.class);
+        bind(ShutdownHandler.class).toProvider(ShutdownHandlerProvider.class).in(Singleton.class);
         expose(ShutdownHandler.class);
 
         // Mount point service is required by notification service and restconf
diff --git a/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/data/ShutdownHandlerProvider.java b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/data/ShutdownHandlerProvider.java
new file mode 100644 (file)
index 0000000..0c649b0
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.infra.distro.data;
+
+import io.fd.honeycomb.binding.init.ProviderTrait;
+import io.fd.honeycomb.data.init.ShutdownHandler;
+import io.fd.honeycomb.impl.ShutdownHandlerImpl;
+
+public class ShutdownHandlerProvider extends ProviderTrait<ShutdownHandler> {
+    @Override
+    protected ShutdownHandler create() {
+        final ShutdownHandler handler = new ShutdownHandlerImpl();
+        // Make sure ShutdownHandler is run on JVM shutdown
+        Runtime.getRuntime().addShutdownHook(new Thread((handler::performShutdown)));
+        return handler;
+    }
+}