harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexei Fedotov" <alexei.fedo...@gmail.com>
Subject Re: [classlib][net] issue H-1879 HttpURLConnectionTest
Date Fri, 24 Nov 2006 00:38:23 GMT
It was mine request? Oh, guy, it seems I'm getting old... :-)

On 11/23/06, Alexey Petrenko <alexey.a.petrenko@gmail.com> wrote:
> 2006/11/23, Alexei Fedotov <alexei.fedotov@gmail.com>:
> > Gregory, this is a good question. Let me tell this long story.
> >
> > Jimmy tried to run the test using J9 VM and the test passed. I beleive
> > Alexey Petrenko considered that fact as a justification to move the
> > bug to [drlvm] category. Alexey, is my understanding correct?
> No. I've changed it by your request.
>
> SY, Alexey
>
> > Why the test passed on J9? Denis found out that the issue with test is
> > actually server synchronization issue. It is not a surprise that our
> > VMs implement threading differently.
> >
> > Then Denis proposed a fix which made a test less dependent from
> > synchronization.
> >
> >
> >
> > On 11/22/06, Gregory Shimansky <gshimansky@gmail.com> wrote:
> > > 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
> > >
> > >
> >
> >
> > --
> > Thank you,
> > Alexei
> >
>


-- 
Thank you,
Alexei

Mime
View raw message