You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by Oliver Deakin <ol...@googlemail.com> on 2010/04/13 17:49:03 UTC

Re: svn commit: r931940 - in /harmony/enhanced/java/trunk/classlib/modules/luni/src: main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnectionImpl.java test/api/common/org/apache/harmony/luni/tests/java/net/HttpURLConnectionTest.java

Hi Regis/Deven,

This commit causes 
org.apache.harmony.luni.tests.java.net.URLConnectionTest to hang for me 
with the following output:

     [junit] Running 
org.apache.harmony.luni.tests.java.net.URLConnectionTest
     [junit] 2010-04-13 15:01:02.250::INFO:  Logging to STDERR via 
org.mortbay.log.StdErrLog
     [junit] 2010-04-13 15:01:02.281::INFO:  jetty-6.0.x
     [junit] 2010-04-13 15:01:02.343::INFO:  Started SocketConnector @ 
0.0.0.0:4456
     [junit] Wait timed out.  Test HTTP Server shut down.

Reverting to the previous revision of HttpURLConnectionImpl.java fixes 
the problem. Can you investigate what is causing this and either revert 
the change or apply a fix please? Thanks.

Regards,
Oliver

On 08/04/2010 14:42, regisxu@apache.org wrote:
> Author: regisxu
> Date: Thu Apr  8 13:42:28 2010
> New Revision: 931940
>
> URL: http://svn.apache.org/viewvc?rev=931940&view=rev
> Log:
> Apply patch for HARMONY-6494: [classlib][luni] OutputStream of HttpURLConnection should not throw IOExecption
>
> Modified:
>      harmony/enhanced/java/trunk/classlib/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnectionImpl.java
>      harmony/enhanced/java/trunk/classlib/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/HttpURLConnectionTest.java
>
> Modified: harmony/enhanced/java/trunk/classlib/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnectionImpl.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/classlib/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnectionImpl.java?rev=931940&r1=931939&r2=931940&view=diff
> ==============================================================================
> --- harmony/enhanced/java/trunk/classlib/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnectionImpl.java (original)
> +++ harmony/enhanced/java/trunk/classlib/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnectionImpl.java Thu Apr  8 13:42:28 2010
> @@ -359,6 +359,8 @@ public class HttpURLConnectionImpl exten
>           boolean closed;
>
>           int limit;
> +
> +        boolean fixedMod = false;
>
>           public HttpOutputStream() {
>               cacheLength = defaultCacheSize;
> @@ -366,9 +368,10 @@ public class HttpURLConnectionImpl exten
>               limit = -1;
>           }
>
> -        public HttpOutputStream(int limit) {
> +        public HttpOutputStream(int limit, boolean fixedMode) {
>               writeToSocket = true;
>               this.limit = limit;
> +            this.fixedMod = fixedMode;
>               if (limit>  0) {
>                   cacheLength = limit;
>               } else {
> @@ -445,7 +448,10 @@ public class HttpURLConnectionImpl exten
>                   return;
>               }
>               closed = true;
> -            if (writeToSocket) {
> +            //Only with such situation when the fixedContentLength field of HttpURLConnection
> +            //is set by HttpURLConnection.setFixedLengthStreamingMode and larger than 0, the
> +            //IOException will be throwed
> +            if (writeToSocket&&  fixedMod) {
>                   if (limit>  0) {
>                       throw new IOException(Messages.getString("luni.25")); //$NON-NLS-1$
>                   }
> @@ -952,11 +958,14 @@ public class HttpURLConnectionImpl exten
>               sendChunked = true;
>               limit = -1;
>           }
> +
> +        boolean fixedMode = false;
>           if (fixedContentLength>= 0) {
>               limit = fixedContentLength;
> +            fixedMode = true;
>           }
>           if ((httpVersion>  0&&  sendChunked) || limit>= 0) {
> -            os = new HttpOutputStream(limit);
> +            os = new HttpOutputStream(limit, fixedMode);
>               doRequest();
>               return os;
>           }
>
> Modified: harmony/enhanced/java/trunk/classlib/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/HttpURLConnectionTest.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/classlib/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/HttpURLConnectionTest.java?rev=931940&r1=931939&r2=931940&view=diff
> ==============================================================================
> --- harmony/enhanced/java/trunk/classlib/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/HttpURLConnectionTest.java (original)
> +++ harmony/enhanced/java/trunk/classlib/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/HttpURLConnectionTest.java Thu Apr  8 13:42:28 2010
> @@ -317,6 +317,34 @@ public class HttpURLConnectionTest exten
>               // correct, too many bytes written
>           }
>       }
> +
> +    /**
> +     * When an OutputStream of HtttpURLConnection is closed with below
> +     * situation: fixed-length mod is disable and the content-length of the
> +     * HtttpURLConnection is larger than 0, it should not throw IOExeption which
> +     * indicates there are more bytes need be written into the underlying
> +     * Socket.
> +     *
> +     * @throws IOException
> +     */
> +    public void test_closeWithFixedLengthDisableMod() throws IOException {
> +        String posted = "just a test";
> +        java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url
> +                .openConnection();
> +        conn.setDoOutput(true);
> +        conn.setRequestMethod("POST");
> +        conn.setRequestProperty("Content-Length", "" + (888));
> +
> +        OutputStream out = conn.getOutputStream();
> +        out.write(posted.getBytes());
> +
> +        try {
> +            out.close();
> +            // expected
> +        } catch (IOException e) {
> +            fail("should not throw IOException");
> +        }
> +    }
>
>       /**
>        * @tests java.net.HttpURLConnection#setChunkedStreamingMode_I()
>
>
>
>    

-- 
Oliver Deakin
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU


Re: svn commit: r931940 - in /harmony/enhanced/java/trunk/classlib/modules/luni/src: main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnectionImpl.java test/api/common/org/apache/harmony/luni/tests/java/net/HttpURLConnectionTest.java

Posted by Regis <xu...@gmail.com>.
On 2010-04-13 23:49, Oliver Deakin wrote:
> Hi Regis/Deven,
>
> This commit causes
> org.apache.harmony.luni.tests.java.net.URLConnectionTest to hang for me
> with the following output:
>
> [junit] Running org.apache.harmony.luni.tests.java.net.URLConnectionTest
> [junit] 2010-04-13 15:01:02.250::INFO: Logging to STDERR via
> org.mortbay.log.StdErrLog
> [junit] 2010-04-13 15:01:02.281::INFO: jetty-6.0.x
> [junit] 2010-04-13 15:01:02.343::INFO: Started SocketConnector @
> 0.0.0.0:4456
> [junit] Wait timed out. Test HTTP Server shut down.
>
> Reverting to the previous revision of HttpURLConnectionImpl.java fixes
> the problem. Can you investigate what is causing this and either revert
> the change or apply a fix please? Thanks.
>
> Regards,
> Oliver
>

Deven has raised HARMONY-6497 to address this. After applied the patch, the hang 
is not seen any more, so I just committed it at r934401.

-- 
Best Regards,
Regis.