harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gregory Shimansky <gshiman...@gmail.com>
Subject Re: [classlib][net] issue H-1879 HttpURLConnectionTest
Date Wed, 22 Nov 2006 16:53:19 GMT
Denis Kishenko wrote:
> Dear committers, please take a look on H-1879

Is there a reason why this bug has drlvm category, and has [drlvm] 
prefix? I see from the history of this bug that it was transferred back 
and forth. The attached patches change only classlib test...

> 2006/11/22, Fedotov, Alexei A <alexei.a.fedotov@intel.com>:
>> +1
>>
>>
>> >-----Original Message-----
>> >From: Denis Kishenko [mailto:dkishenko@gmail.com]
>> >Sent: Wednesday, November 22, 2006 5:40 PM
>> >To: dev@harmony.apache.org
>> >Subject: Re: [classlib][net] issue H-1879 HttpURLConnectionTest
>> >
>> >Alexei,
>> >
>> >Synchronization of accept() looks like test improvement, so I will
>> >attach new patch to fix H-1879 and we will try to find solution for
>> >accept synchronization.
>> >
>> >2006/11/22, Fedotov, Alexei A <alexei.a.fedotov@intel.com>:
>> >> Ok, I see. Makes sense for me. I cannot imagine anything better at
>> this
>> >> moment, and if this works, that's great.
>> >>
>> >> There is still a problem with accept() call which is not
>> synchronized,
>> >> but I don't see how we can fix this correctly. accept() call is
>> >> synchronized using related ServerSocket object, but this doesn't help
>> us
>> >> - this blocking doesn't release an object lock.
>> >>
>> >> With best regards,
>> >> Alexei Fedotov,
>> >> Intel Java & XML Engineering
>> >>
>> >> >-----Original Message-----
>> >> >From: Denis Kishenko [mailto:dkishenko@gmail.com]
>> >> >Sent: Tuesday, November 21, 2006 8:06 PM
>> >> >To: dev@harmony.apache.org
>> >> >Subject: Re: [classlib][net] issue H-1879 HttpURLConnectionTest
>> >> >
>> >> >I can suggest add flag to avoid situation described above (see
>> attached
>> >> >fix).
>> >> >
>> >> >2006/11/21, Denis Kishenko <dkishenko@gmail.com>:
>> >> >> Alexei,
>> >> >>
>> >> >> Yep, syncronization is necessary but not such way.
>> >> >>
>> >> >> As you said, test try to control server/proxy starting using
>> >> >> bound.wait(5000). It looks like on linux server/proxy thread
>> started
>> >> >> eallier then on winxp.
>> >> >>
>> >> >> In other words, what we are waiting for
>> >> >> 1. start server thread
>> >> >> 2. bound.wait
>> >> >> 3. bound.notify
>> >> >> 4. start proxy thread
>> >> >> 5. bound.wait
>> >> >> 6. bound.notify
>> >> >> 7. connect
>> >> >> but we have on linux
>> >> >> 1. start server thread
>> >> >> 2. bound.notify
>> >> >> 3. bound.wait
>> >> >> ---- wait 5 seconds -----
>> >> >> 4. start proxy thread
>> >> >> 5. bound.notify
>> >> >> 6. bound.wait
>> >> >> ---- wait 5 seconds -----
>> >> >> 7. connect
>> >> >>
>> >> >> So we try to connect when proxy closed.
>> >> >>
>> >> >> 2006/11/21, Alexei Fedotov <alexei.fedotov@gmail.com>:
>> >> >> > Denis,
>> >> >> > Thank you for your fix!
>> >> >> >
>> >> >> > Here are few comments. I don't think we need to remove
>> >> >> > synchronization. Contrary, I believe we need to fix it somehow.
>> >> >> >
>> >> >> > For example, when wait(5000) expires without notification,
this
>> >> means
>> >> >> > that the test fail, and we better should report it right at
the
>> >> same
>> >> >> > place.
>> >> >> >
>> >> >> > Digging further we can see that actual accept() calls are
not
>> >> >> > synchronized at all. There should be someting like conditional
>> >> >> > variable to synchronize such events. I will write back when
I
>> get
>> >> an
>> >> >> > idea how to do it properly.
>> >> >> >
>> >> >> > A second option is to increase reading timeout set by
>> setSoTimeout
>> >> -
>> >> >> > probably servers do not start fast enough.
>> >> >> >
>> >> >> > Thanks again, Alexei
>> >> >> >
>> >> >> >
>> >> >> > On 11/21/06, Denis Kishenko <dkishenko@gmail.com> wrote:
>> >> >> > > Alexei,
>> >> >> > >
>> >> >> > > I attached fix to issue, could you try it, please?
>> >> >> > >
>> >> >> > > 2006/11/21, Alexei Fedotov <alexei.fedotov@gmail.com>:
>> >> >> > > > Denis wrote,
>> >> >> > > > > Yep, Harmony+DRLVM on SuSE
>> >> >> > > >
>> >> >> > > > A peculiar thing about this test is that it passes
on SuSE
>> 10,
>> >> but
>> >> >> > > > fails on SuSE 9 which is used for our regression
test runs.
>> >> >> > > >
>> >> >> > > > --
>> >> >> > > > Thank you,
>> >> >> > > > Alexei
>> >> >> > > >
>> >> >> > > > On 11/21/06, Denis Kishenko <dkishenko@gmail.com>
wrote:
>> >> >> > > > > 2006/11/21, Jimmy, Jing Lv <firepure@gmail.com>:
>> >> >> > > > > > Denis Kishenko wrote:
>> >> >> > > > > > > Hi all
>> >> >> > > > > > >
>> >> >> > > > > > > I'm investigating H-1879 and need
some help or
>> >> >recommendations from net
>> >> >> > > > > > > guru.
>> >> >> > > > > > > I have extracted failed test from
>> >> >> > > > > > >
>> >>
>> >org.apache.harmony.tests.internal.net.www.protocol.http.HttpURLConnecti
>> >> onTe
>> >> >st,
>> >> >> > > > > > >
>> >> >> > > > > > > please see below. It failed with
connection refused
>> >> >exception.
>> >> >> > > > > > >
>> >> >> > > > > > > Java code works well, it looks like
some problem with
>> >> native
>> >> >code. By
>> >> >> > > > > > > the way telnet can't connect to created
server too.
>> >> >> > > > > > >
>> >> >> > > > > > > If somebody can help with this issue
it would be
>> great.
>> >> >> > > > > > >
>> >> >> > > > > > > Thanks.
>> >> >> > > > > > >
>> >> >> > > > > > > =========== Test ==============
>> >> >> > > > > > >
>> >> >> > > > > > > package
>> >> >org.apache.harmony.tests.internal.net.www.protocol.http;
>> >> >> > > > > > >
>> >> >> > > > > > > import java.io.IOException;
>> >> >> > > > > > > import java.net.HttpURLConnection;
>> >> >> > > > > > > import java.net.InetSocketAddress;
>> >> >> > > > > > > import java.net.Proxy;
>> >> >> > > > > > > import java.net.ServerSocket;
>> >> >> > > > > > > import java.net.Socket;
>> >> >> > > > > > > import java.net.SocketTimeoutException;
>> >> >> > > > > > > import java.net.URL;
>> >> >> > > > > > >
>> >> >> > > > > > > import junit.framework.TestCase;
>> >> >> > > > > > >
>> >> >> > > > > > > public class SimpleTest extends TestCase
{
>> >> >> > > > > > >
>> >> >> > > > > > >    private final static Object bound
= new Object();
>> >> >> > > > > > >
>> >> >> > > > > > >    static class MockServer extends
Thread {
>> >> >> > > > > > >        ServerSocket serverSocket;
>> >> >> > > > > > >        boolean accepted = false;
>> >> >> > > > > > >
>> >> >> > > > > > >        public MockServer(String name)
throws
>> IOException
>> >> {
>> >> >> > > > > > >            super(name);
>> >> >> > > > > > >
>> >> >> > > > > > >            serverSocket = new ServerSocket(0);
>> >> >> > > > > > >            serverSocket.setSoTimeout(1000);
>> >> >> > > > > > >        }
>> >> >> > > > > > >
>> >> >> > > > > > >        public int port() {
>> >> >> > > > > > >            return serverSocket.getLocalPort();
>> >> >> > > > > > >        }
>> >> >> > > > > > >
>> >> >> > > > > > >        public void run() {
>> >> >> > > > > > >            try {
>> >> >> > > > > > >                synchronized (bound)
{
>> >> >> > > > > > >                    bound.notify();
>> >> >> > > > > > >                }
>> >> >> > > > > > >                try {
>> >> >> > > > > > >             serverSocket.accept().close();
>> >> >> > > > > > >                    accepted = true;
>> >> >> > > > > > >                } catch (SocketTimeoutException
ignore)
>> {
>> >> >> > > > > > >                }
>> >> >> > > > > > >                serverSocket.close();
>> >> >> > > > > > >            } catch (IOException e)
{
>> >> >> > > > > > >                throw new RuntimeException(e);
>> >> >> > > > > > >            }
>> >> >> > > > > > >        }
>> >> >> > > > > > >    }
>> >> >> > > > > > >
>> >> >> > > > > > >    public void testUsingProxy() throws
Exception {
>> >> >> > > > > > >        MockServer server = new MockServer("server");
>> >> >> > > > > > >        MockServer proxy = new MockServer("proxy");
>> >> >> > > > > > >
>> >> >> > > > > > >        URL url = new URL("http://localhost:"
+
>> >> >server.port());
>> >> >> > > > > > >
>> >> >> > > > > > >        HttpURLConnection connection
=
>> (HttpURLConnection)
>> >> url
>> >> >> > > > > > >                .openConnection(new
>> Proxy(Proxy.Type.HTTP,
>> >> >> > > > > > >                        new
>> InetSocketAddress("localhost",
>> >> >> > > > > > >                            proxy.port())));
>> >> >> > > > > > >
>> >> >> > > > > > > //    HttpURLConnection connection
=
>> >> >> > > > > > > (HttpURLConnection)url.openConnection();
>> >> >> > > > > > >
>> >> >> > > > > > >        connection.setConnectTimeout(2000);
>> >> >> > > > > > >        connection.setReadTimeout(2000);
>> >> >> > > > > > >
>> >> >> > > > > > >        server.start();
>> >> >> > > > > > >        synchronized(bound) {
>> >> >> > > > > > >            bound.wait(5000);
>> >> >> > > > > > >        }
>> >> >> > > > > > >        proxy.start();
>> >> >> > > > > > >        synchronized(bound) {
>> >> >> > > > > > >            bound.wait(5000);
>> >> >> > > > > > >        }
>> >> >> > > > > > >
>> >> >> > > > > > >     connection.connect();
>> >> >> > > > > > >
>> >> >> > > > > > >        server.join();
>> >> >> > > > > > >        proxy.join();
>> >> >> > > > > > >    }
>> >> >> > > > > > >
>> >> >> > > > > > > }
>> >> >> > > > > > >
>> >> >> > > > > > > ========= Harmony+drlvm output ============
>> >> >> > > > > > > There was 1 error:
>> >> >> > > > > > > 1)
>> >> >> > > > > > >
>> >>
>> >testUsingProxy(org.apache.harmony.tests.internal.net.www.protocol.http.
>> >> Simp
>> >> >leTest)java.net.ConnectException:
>> >> >> > > > > > >
>> >> >> > > > > > > localhost/127.0.0.1:57896 - Connection
refused
>> >> >> > > > > > >        at
>> >> >> > > > > > >
>> >>
>> >org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.jav
>> >> a:22
>> >> >4)
>> >> >> > > > > > >
>> >> >> > > > > > >        at
>> >> >> > > > > > >
>> >>
>> >org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.jav
>> >> a:49
>> >> >6)
>> >> >> > > > > > >
>> >> >> > > > > > >        at java.net.Socket.connect(Socket.java:980)
>> >> >> > > > > > >        at
>> >> >> > > > > > >
>> >>
>> >org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectio
>> >> n.ge
>> >> >tHTTPConnection(HttpURLConnection.java:627)
>> >> >> > > > > > >
>> >> >> > > > > > >        at
>> >> >> > > > > > >
>> >>
>> >org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectio
>> >> n.co
>> >> >nnect(HttpURLConnection.java:608)
>> >> >> > > > > > >
>> >> >> > > > > > >        at
>> >> >> > > > > > >
>> >>
>> >org.apache.harmony.tests.internal.net.www.protocol.http.SimpleTest.test
>> >> Usin
>> >> >gProxy(SimpleTest.java:78)
>> >> >> > > > > > >
>> >> >> > > > > > >        at
>> >> java.lang.reflect.VMReflection.invokeMethod(Native
>> >> >Method)
>> >> >> > > > > > >
>> >> >> > > > > > > FAILURES!!!
>> >> >> > > > > > > Tests run: 1,  Failures: 0,  Errors:
1
>> >> >> > > > > > >
>> >> >> > > > > >
>> >> >> > > > > > The test passes on Harmony+IBMVME on WindowsXP
on my
>> >> desktop,
>> >> >so you
>> >> >> > > > > > mean Harmony+DRLVM here?
>> >> >> > > > > Yep, Harmony+DRLVM on SuSE
>> >> >> > > > >
>> >> >> > > > > >
>> >> >> > > > > > But IMHO the VM does not matter in network
issues, the
>> >> native
>> >> >code call
>> >> >> > > > > > directly to the system APIs(of course,
through
>> Port-Lib),
>> >> so I
>> >> >wonder if
>> >> >> > > > > > there's something wrong in thread(handle
by VM)? Just a
>> >> >thought.
>> >> >> > > > > >
>> >> >> > > > > > And IMO, that telnet shall not connect
to the server is
>> due
>> >> to
>> >> >> > > > > > "serverSocket.setSoTimeout(1000);", which
make
>> >> >"serverSocket.accept()"
>> >> >> > > > > > wait for only one second.
>> >> >> > > > > Of course I had changed timeout to 10sec when
used telnet
>> :)
>> >> >> > > > >
>> >> >> > > > > >
>> >> >> > > > > > I have to download Harmony+DRLVM to debug
into, but the
>> >> speed
>> >> >of network
>> >> >> > > > > > is poor here :)
>> >> >> > > > > >
>> >> >> > > > > >
>> >> >> > > > > > --
>> >> >> > > > > >
>> >> >> > > > > > Best Regards!
>> >> >> > > > > >
>> >> >> > > > > > Jimmy, Jing Lv
>> >> >> > > > > > China Software Development Lab, IBM
>> >> >> > > > > >
>> >> >> > > > >
>> >> >> > > > >
>> >> >> > > > > --
>> >> >> > > > > Denis M. Kishenko
>> >> >> > > > > Intel Middleware Products Division
>> >> >> > > > >
>> >> >> > > >
>> >> >> > >
>> >> >> > >
>> >> >> > > --
>> >> >> > > Denis M. Kishenko
>> >> >> > > Intel Middleware Products Division
>> >> >> > >
>> >> >> >
>> >> >> >
>> >> >> > --
>> >> >> > Thank you,
>> >> >> > Alexei
>> >> >> >
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Denis M. Kishenko
>> >> >> Intel Middleware Products Division
>> >> >>
>> >> >
>> >> >
>> >> >--
>> >> >Denis M. Kishenko
>> >> >Intel Middleware Products Division
>> >>
>> >
>> >
>> >--
>> >Denis M. Kishenko
>> >Intel Middleware Products Division
>>
> 
> 


-- 
Gregory


Mime
View raw message