diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer2.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer2.java index 28b9bb0f034..a450f664b20 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer2.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer2.java @@ -128,6 +128,10 @@ public final class HttpServer2 implements FilterContainer { public static final String HTTP_MAX_RESPONSE_HEADER_SIZE_KEY = "hadoop.http.max.response.header.size"; public static final int HTTP_MAX_RESPONSE_HEADER_SIZE_DEFAULT = 65536; + + public static final String HTTP_SOCKET_BACKLOG_SIZE_KEY = + "hadoop.http.socket.backlog.size"; + public static final int HTTP_SOCKET_BACKLOG_SIZE_DEFAULT = 128; public static final String HTTP_MAX_THREADS_KEY = "hadoop.http.max.threads"; public static final String HTTP_TEMP_DIR_KEY = "hadoop.http.temp.dir"; @@ -433,6 +437,9 @@ public HttpServer2 build() throws IOException { httpConfig.setResponseHeaderSize(responseHeaderSize); httpConfig.setSendServerVersion(false); + int backlogSize = conf.getInt(HTTP_SOCKET_BACKLOG_SIZE_KEY, + HTTP_SOCKET_BACKLOG_SIZE_DEFAULT); + for (URI ep : endpoints) { final ServerConnector connector; String scheme = ep.getScheme(); @@ -448,6 +455,7 @@ public HttpServer2 build() throws IOException { } connector.setHost(ep.getHost()); connector.setPort(ep.getPort() == -1 ? 0 : ep.getPort()); + connector.setAcceptQueueSize(backlogSize); server.addListener(connector); } server.loadListeners(); @@ -640,7 +648,6 @@ private static void addNoCacheFilter(ServletContextHandler ctxt) { private static void configureChannelConnector(ServerConnector c) { c.setIdleTimeout(10000); - c.setAcceptQueueSize(128); if(Shell.WINDOWS) { // result of setting the SO_REUSEADDR flag is different on Windows // http://msdn.microsoft.com/en-us/library/ms740621(v=vs.85).aspx diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java index 6ec6e0f965e..ca7e466b79e 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java @@ -682,4 +682,17 @@ public void testPortRanges() throws Exception { stopHttpServer(myServer2); } } + + @Test + public void testBacklogSize() throws Exception + { + final int backlogSize = 2048; + Configuration conf = new Configuration(); + conf.setInt(HttpServer2.HTTP_SOCKET_BACKLOG_SIZE_KEY, backlogSize); + HttpServer2 srv = createServer("test", conf); + List listeners = (List) Whitebox.getInternalState(srv, + "listeners"); + ServerConnector listener = (ServerConnector)listeners.get(0); + assertEquals(backlogSize, listener.getAcceptQueueSize()); + } }