use of org.eclipse.jetty.util.thread.ScheduledExecutorScheduler in project druid by druid-io.
the class JettyServerModule method makeJettyServer.
static Server makeJettyServer(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);
// Without this bean set, the default ScheduledExecutorScheduler runs as non-daemon, causing lifecycle hooks to fail
// to fire on main exit. Related bug: https://github.com/druid-io/druid/pull/1627
server.addBean(new ScheduledExecutorScheduler("JettyScheduler", true), true);
ServerConnector connector = new ServerConnector(server);
connector.setPort(node.getPort());
connector.setIdleTimeout(Ints.checkedCast(config.getMaxIdleTime().toStandardDuration().getMillis()));
// workaround suggested in -
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=435322#c66 for jetty half open connection issues during failovers
connector.setAcceptorPriorityDelta(-1);
List<ConnectionFactory> monitoredConnFactories = new ArrayList<>();
for (ConnectionFactory cf : connector.getConnectionFactories()) {
monitoredConnFactories.add(new JettyMonitoringConnectionFactory(cf, activeConnections));
}
connector.setConnectionFactories(monitoredConnFactories);
server.setConnectors(new Connector[] { connector });
return server;
}
use of org.eclipse.jetty.util.thread.ScheduledExecutorScheduler in project airlift by airlift.
the class JettyHttpClient method createScheduler.
private static Scheduler createScheduler(String name, int timeoutConcurrency, int timeoutThreads) {
Scheduler scheduler;
String threadName = "http-client-" + name + "-scheduler";
if ((timeoutConcurrency == 1) && (timeoutThreads == 1)) {
scheduler = new ScheduledExecutorScheduler(threadName, true);
} else {
checkArgument(timeoutConcurrency >= 1, "timeoutConcurrency must be at least one");
int threads = max(1, timeoutThreads / timeoutConcurrency);
scheduler = new ConcurrentScheduler(timeoutConcurrency, threads, threadName);
}
try {
scheduler.start();
} catch (Exception e) {
throwIfUnchecked(e);
throw new RuntimeException(e);
}
return scheduler;
}
use of org.eclipse.jetty.util.thread.ScheduledExecutorScheduler in project dropwizard by dropwizard.
the class Http2ConnectorFactory method build.
@Override
public Connector build(Server server, MetricRegistry metrics, String name, @Nullable ThreadPool threadPool) {
// HTTP/2 requires that a server MUST support TLSv1.2 or higher and TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 cipher
// See https://datatracker.ietf.org/doc/html/rfc7540#section-9.2
setSupportedProtocols(Arrays.asList("TLSv1.3", "TLSv1.2"));
checkSupportedCipherSuites();
// Setup connection factories
final HttpConfiguration httpConfig = buildHttpConfiguration();
final HttpConnectionFactory http1 = buildHttpConnectionFactory(httpConfig);
final HTTP2ServerConnectionFactory http2 = new HTTP2ServerConnectionFactory(httpConfig);
http2.setMaxConcurrentStreams(maxConcurrentStreams);
http2.setInitialStreamRecvWindow(initialStreamRecvWindow);
final NegotiatingServerConnectionFactory alpn = new ALPNServerConnectionFactory();
// Speak HTTP 1.1 over TLS if negotiation fails
alpn.setDefaultProtocol("http/1.1");
final SslContextFactory sslContextFactory = configureSslContextFactory(new SslContextFactory.Server());
sslContextFactory.addLifeCycleListener(logSslParameters(sslContextFactory));
server.addBean(sslContextFactory);
server.addBean(new SslReload(sslContextFactory, this::configureSslContextFactory));
// We should use ALPN as a negotiation protocol. Old clients that don't support it will be served
// via HTTPS. New clients, however, that want to use HTTP/2 will use TLS with ALPN extension.
// If negotiation succeeds, the client and server switch to HTTP/2 protocol.
final SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(sslContextFactory, "alpn");
return buildConnector(server, new ScheduledExecutorScheduler(), buildBufferPool(), name, threadPool, new InstrumentedConnectionFactory(sslConnectionFactory, metrics.timer(httpConnections())), alpn, http2, http1);
}
use of org.eclipse.jetty.util.thread.ScheduledExecutorScheduler in project dropwizard by dropwizard.
the class Http2CConnectorFactory method build.
@Override
public Connector build(Server server, MetricRegistry metrics, String name, @Nullable ThreadPool threadPool) {
// Prepare connection factories for HTTP/2c
final HttpConfiguration httpConfig = buildHttpConfiguration();
final HttpConnectionFactory http11 = buildHttpConnectionFactory(httpConfig);
final HTTP2ServerConnectionFactory http2c = new HTTP2CServerConnectionFactory(httpConfig);
http2c.setMaxConcurrentStreams(maxConcurrentStreams);
http2c.setInitialStreamRecvWindow(initialStreamRecvWindow);
// new protocol.
return buildConnector(server, new ScheduledExecutorScheduler(), buildBufferPool(), name, threadPool, new InstrumentedConnectionFactory(http11, metrics.timer(httpConnections())), http2c);
}
use of org.eclipse.jetty.util.thread.ScheduledExecutorScheduler in project dropwizard by dropwizard.
the class HttpsConnectorFactory method build.
@Override
public Connector build(Server server, MetricRegistry metrics, String name, @Nullable ThreadPool threadPool) {
final HttpConfiguration httpConfig = buildHttpConfiguration();
final HttpConnectionFactory httpConnectionFactory = buildHttpConnectionFactory(httpConfig);
final SslContextFactory sslContextFactory = configureSslContextFactory(new SslContextFactory.Server());
sslContextFactory.addLifeCycleListener(logSslParameters(sslContextFactory));
server.addBean(sslContextFactory);
server.addBean(new SslReload(sslContextFactory, this::configureSslContextFactory));
final SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.toString());
final Scheduler scheduler = new ScheduledExecutorScheduler();
final ByteBufferPool bufferPool = buildBufferPool();
return buildConnector(server, scheduler, bufferPool, name, threadPool, new InstrumentedConnectionFactory(sslConnectionFactory, metrics.timer(httpConnections())), httpConnectionFactory);
}
Aggregations