mirror of https://github.com/apache/druid.git
1) Introduce airlift/airline for CLI stuff and add a Coordinator CLI verb to make it all happiness
This commit is contained in:
parent
4c9be81912
commit
2b587cba85
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
package com.metamx.druid.client.cache;
|
package com.metamx.druid.client.cache;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
import com.metamx.emitter.service.ServiceEmitter;
|
import com.metamx.emitter.service.ServiceEmitter;
|
||||||
import com.metamx.emitter.service.ServiceMetricEvent;
|
import com.metamx.emitter.service.ServiceMetricEvent;
|
||||||
import com.metamx.metrics.AbstractMonitor;
|
import com.metamx.metrics.AbstractMonitor;
|
||||||
|
@ -31,6 +32,7 @@ public class CacheMonitor extends AbstractMonitor
|
||||||
|
|
||||||
private volatile CacheStats prevCacheStats = null;
|
private volatile CacheStats prevCacheStats = null;
|
||||||
|
|
||||||
|
@Inject
|
||||||
public CacheMonitor(
|
public CacheMonitor(
|
||||||
Cache cache
|
Cache cache
|
||||||
)
|
)
|
||||||
|
|
5
pom.xml
5
pom.xml
|
@ -119,6 +119,11 @@
|
||||||
<artifactId>compress-lzf</artifactId>
|
<artifactId>compress-lzf</artifactId>
|
||||||
<version>0.8.4</version>
|
<version>0.8.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.airlift</groupId>
|
||||||
|
<artifactId>airline</artifactId>
|
||||||
|
<version>0.5</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.skife.config</groupId>
|
<groupId>org.skife.config</groupId>
|
||||||
<artifactId>config-magic</artifactId>
|
<artifactId>config-magic</artifactId>
|
||||||
|
|
|
@ -42,6 +42,10 @@
|
||||||
<artifactId>druid-server</artifactId>
|
<artifactId>druid-server</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.airlift</groupId>
|
||||||
|
<artifactId>airline</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
package io.druid.cli;
|
||||||
|
|
||||||
|
import com.google.common.base.Throwables;
|
||||||
|
import com.google.inject.Injector;
|
||||||
|
import com.google.inject.servlet.GuiceFilter;
|
||||||
|
import com.metamx.common.lifecycle.Lifecycle;
|
||||||
|
import com.metamx.common.logger.Logger;
|
||||||
|
import com.metamx.druid.curator.CuratorModule;
|
||||||
|
import com.metamx.druid.curator.discovery.DiscoveryModule;
|
||||||
|
import com.metamx.druid.guice.DbConnectorModule;
|
||||||
|
import com.metamx.druid.guice.HttpClientModule;
|
||||||
|
import com.metamx.druid.guice.JacksonConfigManagerModule;
|
||||||
|
import com.metamx.druid.guice.LifecycleModule;
|
||||||
|
import com.metamx.druid.guice.MasterModule;
|
||||||
|
import com.metamx.druid.guice.ServerModule;
|
||||||
|
import com.metamx.druid.guice.annotations.Self;
|
||||||
|
import com.metamx.druid.http.InfoResource;
|
||||||
|
import com.metamx.druid.http.MasterMain;
|
||||||
|
import com.metamx.druid.http.MasterResource;
|
||||||
|
import com.metamx.druid.http.RedirectFilter;
|
||||||
|
import com.metamx.druid.http.StatusResource;
|
||||||
|
import com.metamx.druid.initialization.EmitterModule;
|
||||||
|
import com.metamx.druid.initialization.Initialization;
|
||||||
|
import com.metamx.druid.initialization.JettyServerInitializer;
|
||||||
|
import com.metamx.druid.initialization.JettyServerModule;
|
||||||
|
import com.metamx.druid.log.LogLevelAdjuster;
|
||||||
|
import com.metamx.druid.master.DruidMaster;
|
||||||
|
import com.metamx.druid.metrics.MetricsModule;
|
||||||
|
import io.airlift.command.Command;
|
||||||
|
import org.eclipse.jetty.server.Handler;
|
||||||
|
import org.eclipse.jetty.server.Server;
|
||||||
|
import org.eclipse.jetty.server.handler.DefaultHandler;
|
||||||
|
import org.eclipse.jetty.server.handler.HandlerList;
|
||||||
|
import org.eclipse.jetty.server.handler.ResourceHandler;
|
||||||
|
import org.eclipse.jetty.servlet.DefaultServlet;
|
||||||
|
import org.eclipse.jetty.servlet.FilterHolder;
|
||||||
|
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||||
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
|
import org.eclipse.jetty.servlets.GzipFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
@Command(
|
||||||
|
name = "coordinator",
|
||||||
|
description = "Runs the Coordinator, see https://github.com/metamx/druid/wiki/Master for a description."
|
||||||
|
)
|
||||||
|
public class Coordinator implements Runnable
|
||||||
|
{
|
||||||
|
private static final Logger log = new Logger(Coordinator.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
LogLevelAdjuster.register();
|
||||||
|
|
||||||
|
Injector injector = Initialization.makeInjector(
|
||||||
|
new LifecycleModule().register(DruidMaster.class),
|
||||||
|
EmitterModule.class,
|
||||||
|
HttpClientModule.class,
|
||||||
|
DbConnectorModule.class,
|
||||||
|
JacksonConfigManagerModule.class,
|
||||||
|
CuratorModule.class,
|
||||||
|
new MetricsModule(),
|
||||||
|
new DiscoveryModule().register(Self.class),
|
||||||
|
ServerModule.class,
|
||||||
|
new JettyServerModule(new MasterJettyServerInitializer())
|
||||||
|
.addResource(InfoResource.class)
|
||||||
|
.addResource(MasterResource.class)
|
||||||
|
.addResource(StatusResource.class),
|
||||||
|
MasterModule.class
|
||||||
|
);
|
||||||
|
|
||||||
|
final Lifecycle lifecycle = injector.getInstance(Lifecycle.class);
|
||||||
|
|
||||||
|
try {
|
||||||
|
lifecycle.start();
|
||||||
|
}
|
||||||
|
catch (Throwable t) {
|
||||||
|
log.error(t, "Error when starting up. Failing.");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
lifecycle.join();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
throw Throwables.propagate(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class MasterJettyServerInitializer implements JettyServerInitializer
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void initialize(Server server, Injector injector)
|
||||||
|
{
|
||||||
|
ResourceHandler resourceHandler = new ResourceHandler();
|
||||||
|
resourceHandler.setResourceBase(MasterMain.class.getClassLoader().getResource("static").toExternalForm());
|
||||||
|
|
||||||
|
final ServletContextHandler root = new ServletContextHandler(ServletContextHandler.SESSIONS);
|
||||||
|
root.setContextPath("/");
|
||||||
|
|
||||||
|
HandlerList handlerList = new HandlerList();
|
||||||
|
handlerList.setHandlers(new Handler[]{resourceHandler, root, new DefaultHandler()});
|
||||||
|
server.setHandler(handlerList);
|
||||||
|
|
||||||
|
root.addServlet(new ServletHolder(new DefaultServlet()), "/*");
|
||||||
|
root.addFilter(GzipFilter.class, "/*", null);
|
||||||
|
root.addFilter(new FilterHolder(injector.getInstance(RedirectFilter.class)), "/*", null);
|
||||||
|
root.addFilter(GuiceFilter.class, "/*", null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package io.druid.cli;
|
||||||
|
|
||||||
|
import io.airlift.command.Cli;
|
||||||
|
import io.airlift.command.Help;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public class Main
|
||||||
|
{
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
final Cli.CliBuilder<Runnable> builder = Cli.builder("druid");
|
||||||
|
|
||||||
|
builder.withDescription("Druid command-line runner.")
|
||||||
|
.withDefaultCommand(Help.class)
|
||||||
|
.withCommands(Help.class);
|
||||||
|
|
||||||
|
builder.withGroup("server")
|
||||||
|
.withDescription("Run one of the Druid server types.")
|
||||||
|
.withDefaultCommand(Help.class)
|
||||||
|
.withCommands(Coordinator.class);
|
||||||
|
|
||||||
|
builder.build().parse(args).run();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue