The socket backlog of HttpServer is still low.

Andrew Hughes gnu.andrew at redhat.com
Mon Dec 15 13:17:49 UTC 2014


----- Original Message -----
> Hi Ivan,
> 
> Thank you for your reply. My apologies for the late reply.
> 
> Unfortunately, I try to search the commit of this fix, but I could not find
> it.
> 
> So I wrote the patch to solve this problem. If set less than 1 to the second
> parameter
> of HttpServer#create, HttpServer is created with the default socket backlog,
> i.e. 50([1]).
> 
> I think that JAX-WS should use the default socket backlog than specific low
> value like 5.
> If there is a better method for openjdk community, please advise me.
> 
> -----
> 
> diff -r 48972b9b6536
> drop_included/jaxws_src/src/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java
> ---
> a/drop_included/jaxws_src/src/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java
> Wed Oct 08 19:12:52 2014 +0100
> +++
> b/drop_included/jaxws_src/src/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java
> Fri Dec 05 15:02:18 2014 +0900
> @@ -79,7 +79,8 @@
>                   state = servers.get(inetAddress);
>                   if (state == null) {
>                       logger.fine("Creating new HTTP Server at
>                       "+inetAddress);
> -                    server = HttpServer.create(inetAddress, 5);
> +                    // Creates a new HTTP server with default socket
> backlog.
> +                    server = HttpServer.create(inetAddress, 0);
>                       server.setExecutor(Executors.newCachedThreadPool());
>                       String path = url.toURI().getPath();
>                       logger.fine("Creating HTTP Context at = "+path);
> -----
> 
> [1]
> http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/tip/src/share/classes/java/net/ServerSocket.java#l199
> 
> Thanks,
> Yuji
> 
> On 2014/11/24 21:15, Ivan Krylov wrote:
> > Not sure what link [1] should be demonstrating. Could you send a link to
> > the diff associated with the fix?
> >
> > Thanks,
> >
> > Ivan
> >
> > On 21/11/2014 07:03, KUBOTA Yuji wrote:
> >> Hi all,
> >>
> >> JDK7 and JAX-WS RI 2.2.6 solved the low socket backlog of HttpServer [1].
> >> However, JDK6 still provides the HttpServer which is created with socket
> >> backlog 5 [2].
> >>
> >> I could not find the reason why this change do not backport to JDK6.
> >> Please backport it or update JAX-WS of JDK6, if there is not a blocker of
> >> this issue.
> >>
> >> Thanks,
> >> Yuji.
> >>
> >> [1]:https://java.net/jira/browse/JAX_WS-945
> >> [2]:http://hg.openjdk.java.net/jdk6/jdk6/jaxws/file/48972b9b6536/drop_included/jaxws_src/src/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java#l82
> 
> 
> 

Yes, this is a problem with the way Sun/Oracle maintain JAXP and JAXWS; the sources
are bulk updated outside of security updates, so there's no log of changes. At least
now they do keep the sources in the OpenJDK tree rather than as external zip files...

To this end, the only log I get for this file in OpenJDK 7 is:

$ hg log -R ../../jdk7/jaxws ../../jdk7/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java
changeset:   321:913b9e4d8c51
user:        ohair
date:        Sun May 13 11:14:50 2012 -0700
summary:     7150322: Stop using drop source bundles in jaxws

which is pretty unhelpful. However, the diff between the 6 and 7 versions of the
file is pretty close to your patch:

$ diff -u ../jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java ../../jdk7/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java 
--- ../jaxws/drop_included/jaxws_src/src/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java	2013-09-10 18:09:25.743193221 +0100
+++ ../../jdk7/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/transport/http/server/ServerMgr.java	2012-05-14 05:03:15.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,6 +22,7 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 package com.sun.xml.internal.ws.transport.http.server;
 
 import com.sun.net.httpserver.HttpContext;
@@ -79,7 +80,8 @@
                 state = servers.get(inetAddress);
                 if (state == null) {
                     logger.fine("Creating new HTTP Server at "+inetAddress);
-                    server = HttpServer.create(inetAddress, 5);
+                    // Creates server with default socket backlog
+                    server = HttpServer.create(inetAddress, 0);
                     server.setExecutor(Executors.newCachedThreadPool());
                     String path = url.toURI().getPath();
                     logger.fine("Creating HTTP Context at = "+path);

I'm happy to file an OpenJDK 6 bug for this and apply that patch, unless
someone else has any objections.

Thanks,
-- 
Andrew :)

Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)

PGP Key: 248BDC07 (https://keys.indymedia.org/)
Fingerprint = EC5A 1F5E C0AD 1D15 8F1F  8F91 3B96 A578 248B DC07



More information about the jdk6-dev mailing list