From 2b87ad307da95b4ea4d39927e48b73bc9701f669 Mon Sep 17 00:00:00 2001 From: Charles Allen Date: Tue, 14 Jul 2015 14:26:27 -0700 Subject: [PATCH] Make CliPeon run shutdown hooks properly * Also make jetty threads daemon --- .../jetty/JettyServerModule.java | 1 + .../src/main/java/io/druid/cli/CliPeon.java | 29 ++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/server/src/main/java/io/druid/server/initialization/jetty/JettyServerModule.java b/server/src/main/java/io/druid/server/initialization/jetty/JettyServerModule.java index 1e071648b23a..08d1e01e03d2 100644 --- a/server/src/main/java/io/druid/server/initialization/jetty/JettyServerModule.java +++ b/server/src/main/java/io/druid/server/initialization/jetty/JettyServerModule.java @@ -157,6 +157,7 @@ private static Server makeJettyServer(@Self DruidNode node, ServerConfig config) final QueuedThreadPool threadPool = new QueuedThreadPool(); threadPool.setMinThreads(config.getNumThreads()); threadPool.setMaxThreads(config.getNumThreads()); + threadPool.setDaemon(true); final Server server = new Server(threadPool); diff --git a/services/src/main/java/io/druid/cli/CliPeon.java b/services/src/main/java/io/druid/cli/CliPeon.java index 76f994010f00..4b5728b4c75d 100644 --- a/services/src/main/java/io/druid/cli/CliPeon.java +++ b/services/src/main/java/io/druid/cli/CliPeon.java @@ -30,7 +30,6 @@ import io.airlift.command.Arguments; import io.airlift.command.Command; import io.airlift.command.Option; -import io.druid.metadata.IndexerSQLMetadataStorageCoordinator; import io.druid.guice.Binders; import io.druid.guice.IndexingServiceFirehoseModule; import io.druid.guice.Jerseys; @@ -56,6 +55,7 @@ import io.druid.indexing.overlord.ThreadPoolTaskRunner; import io.druid.indexing.worker.executor.ExecutorLifecycle; import io.druid.indexing.worker.executor.ExecutorLifecycleConfig; +import io.druid.metadata.IndexerSQLMetadataStorageCoordinator; import io.druid.query.QuerySegmentWalker; import io.druid.segment.loading.DataSegmentArchiver; import io.druid.segment.loading.DataSegmentKiller; @@ -71,7 +71,6 @@ import io.druid.segment.realtime.firehose.ServiceAnnouncingChatHandlerProvider; import io.druid.server.QueryResource; import io.druid.server.initialization.jetty.JettyServerInitializer; - import org.eclipse.jetty.server.Server; import java.io.File; @@ -125,7 +124,8 @@ public void configure(Binder binder) .to(ServiceAnnouncingChatHandlerProvider.class).in(LazySingleton.class); handlerProviderBinder.addBinding("noop") .to(NoopChatHandlerProvider.class).in(LazySingleton.class); - binder.bind(ServiceAnnouncingChatHandlerProvider.class).in(LazySingleton.class);; + binder.bind(ServiceAnnouncingChatHandlerProvider.class).in(LazySingleton.class); + binder.bind(NoopChatHandlerProvider.class).in(LazySingleton.class); binder.bind(TaskToolboxFactory.class).in(LazySingleton.class); @@ -190,7 +190,9 @@ private void configureTaskActionClient(Binder binder) JsonConfigProvider.bind(binder, "druid.indexer.storage", TaskStorageConfig.class); binder.bind(TaskStorage.class).to(HeapMemoryTaskStorage.class).in(LazySingleton.class); binder.bind(TaskActionToolbox.class).in(LazySingleton.class); - binder.bind(IndexerMetadataStorageCoordinator.class).to(IndexerSQLMetadataStorageCoordinator.class).in(LazySingleton.class); + binder.bind(IndexerMetadataStorageCoordinator.class).to(IndexerSQLMetadataStorageCoordinator.class).in( + LazySingleton.class + ); taskActionBinder.addBinding("remote") .to(RemoteTaskActionClientFactory.class).in(LazySingleton.class); @@ -205,17 +207,28 @@ public void run() { try { Injector injector = makeInjector(); - try { - Lifecycle lifecycle = initLifecycle(injector); - + final Lifecycle lifecycle = initLifecycle(injector); + Runtime.getRuntime().addShutdownHook( + new Thread( + new Runnable() + { + @Override + public void run() + { + log.info("Running shutdown hook"); + lifecycle.stop(); + } + } + ) + ); injector.getInstance(ExecutorLifecycle.class).join(); - lifecycle.stop(); } catch (Throwable t) { log.error(t, "Error when starting up. Failing."); System.exit(1); } + log.info("Finished peon task"); } catch (Exception e) { throw Throwables.propagate(e);