diff options
author | Jon Bratseth <bratseth@gmail.com> | 2020-09-02 16:42:10 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2020-09-02 16:42:10 +0200 |
commit | 3c9de78274d5f7e5d7c7c19105e4925a91103e9e (patch) | |
tree | 1e0027dc08663b890ecdc9b68b6543fadb394691 /jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java | |
parent | 5a10a3cc2bbad52d783e75a92c1527e33e976fe9 (diff) |
Allow setting a request type explicitly
This lets handler authors control the requestType explicitly
by setting it on the HttpResponse, which is useful to avoid
misclassification of POST requests to reading handlers as writes.
Diffstat (limited to 'jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java')
-rw-r--r-- | jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java | 101 |
1 files changed, 46 insertions, 55 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java index 386704a5cc2..ba477f9d32f 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java @@ -128,17 +128,16 @@ public class JettyHttpServer extends AbstractServerProvider { private final List<Integer> listenedPorts = new ArrayList<>(); @Inject - public JettyHttpServer( - final CurrentContainer container, - final Metric metric, - final ServerConfig serverConfig, - final ServletPathsConfig servletPathsConfig, - final ThreadFactory threadFactory, - final FilterBindings filterBindings, - final ComponentRegistry<ConnectorFactory> connectorFactories, - final ComponentRegistry<ServletHolder> servletHolders, - final FilterInvoker filterInvoker, - final AccessLog accessLog) { + public JettyHttpServer(CurrentContainer container, + Metric metric, + ServerConfig serverConfig, + ServletPathsConfig servletPathsConfig, + ThreadFactory threadFactory, + FilterBindings filterBindings, + ComponentRegistry<ConnectorFactory> connectorFactories, + ComponentRegistry<ServletHolder> servletHolders, + FilterInvoker filterInvoker, + AccessLog accessLog) { super(container); if (connectorFactories.allComponents().isEmpty()) throw new IllegalArgumentException("No connectors configured."); @@ -160,44 +159,40 @@ public class JettyHttpServer extends AbstractServerProvider { janitor = newJanitor(threadFactory); - JDiscContext jDiscContext = new JDiscContext( - filterBindings.getRequestFilters().activate(), - filterBindings.getResponseFilters().activate(), - container, - janitor, - metric, - serverConfig); + JDiscContext jDiscContext = new JDiscContext(filterBindings.getRequestFilters().activate(), + filterBindings.getResponseFilters().activate(), + container, + janitor, + metric, + serverConfig); ServletHolder jdiscServlet = new ServletHolder(new JDiscHttpServlet(jDiscContext)); FilterHolder jDiscFilterInvokerFilter = new FilterHolder(new JDiscFilterInvokerFilter(jDiscContext, filterInvoker)); List<JDiscServerConnector> connectors = Arrays.stream(server.getConnectors()) - .map(JDiscServerConnector.class::cast) - .collect(toList()); - - server.setHandler( - getHandlerCollection( - serverConfig, - servletPathsConfig, - connectors, - jdiscServlet, - servletHolders, - jDiscFilterInvokerFilter)); + .map(JDiscServerConnector.class::cast) + .collect(toList()); + + server.setHandler(getHandlerCollection(serverConfig, + servletPathsConfig, + connectors, + jdiscServlet, + servletHolders, + jDiscFilterInvokerFilter)); int numMetricReporterThreads = 1; - metricReporterExecutor = Executors.newScheduledThreadPool( - numMetricReporterThreads, - new ThreadFactoryBuilder() - .setDaemon(true) - .setNameFormat(JettyHttpServer.class.getName() + "-MetricReporter-%d") - .setThreadFactory(threadFactory) - .build() - ); + metricReporterExecutor = + Executors.newScheduledThreadPool(numMetricReporterThreads, + new ThreadFactoryBuilder() + .setDaemon(true) + .setNameFormat(JettyHttpServer.class.getName() + "-MetricReporter-%d") + .setThreadFactory(threadFactory) + .build()); metricReporterExecutor.scheduleAtFixedRate(new MetricTask(), 0, 2, TimeUnit.SECONDS); } private static void initializeJettyLogging() { - // Note: Jetty is logging stderr if no logger is explicitly configured. + // Note: Jetty is logging stderr if no logger is explicitly configured try { Log.setLog(new JavaUtilLog()); } catch (Exception e) { @@ -208,32 +203,26 @@ public class JettyHttpServer extends AbstractServerProvider { private static void setupJmx(Server server, ServerConfig serverConfig) { if (serverConfig.jmx().enabled()) { System.setProperty("java.rmi.server.hostname", "localhost"); - server.addBean( - new MBeanContainer(ManagementFactory.getPlatformMBeanServer())); - server.addBean( - new ConnectorServer( - createJmxLoopbackOnlyServiceUrl(serverConfig.jmx().listenPort()), - "org.eclipse.jetty.jmx:name=rmiconnectorserver")); + server.addBean(new MBeanContainer(ManagementFactory.getPlatformMBeanServer())); + server.addBean(new ConnectorServer(createJmxLoopbackOnlyServiceUrl(serverConfig.jmx().listenPort()), + "org.eclipse.jetty.jmx:name=rmiconnectorserver")); } } private static JMXServiceURL createJmxLoopbackOnlyServiceUrl(int port) { try { - return new JMXServiceURL( - "rmi", "localhost", port, "/jndi/rmi://localhost:" + port + "/jmxrmi"); + return new JMXServiceURL("rmi", "localhost", port, "/jndi/rmi://localhost:" + port + "/jmxrmi"); } catch (MalformedURLException e) { throw new RuntimeException(e); } } - private HandlerCollection getHandlerCollection( - ServerConfig serverConfig, - ServletPathsConfig servletPathsConfig, - List<JDiscServerConnector> connectors, - ServletHolder jdiscServlet, - ComponentRegistry<ServletHolder> servletHolders, - FilterHolder jDiscFilterInvokerFilter) { - + private HandlerCollection getHandlerCollection(ServerConfig serverConfig, + ServletPathsConfig servletPathsConfig, + List<JDiscServerConnector> connectors, + ServletHolder jdiscServlet, + ComponentRegistry<ServletHolder> servletHolders, + FilterHolder jDiscFilterInvokerFilter) { ServletContextHandler servletContextHandler = createServletContextHandler(); servletHolders.allComponentsById().forEach((id, servlet) -> { @@ -257,7 +246,9 @@ public class JettyHttpServer extends AbstractServerProvider { GzipHandler gzipHandler = newGzipHandler(serverConfig); gzipHandler.setHandler(authEnforcer); - HttpResponseStatisticsCollector statisticsCollector = new HttpResponseStatisticsCollector(serverConfig.metric().monitoringHandlerPaths(), serverConfig.metric().searchHandlerPaths()); + HttpResponseStatisticsCollector statisticsCollector = + new HttpResponseStatisticsCollector(serverConfig.metric().monitoringHandlerPaths(), + serverConfig.metric().searchHandlerPaths()); statisticsCollector.setHandler(gzipHandler); StatisticsHandler statisticsHandler = newStatisticsHandler(); |