Return-Path: Delivered-To: apmail-harmony-dev-archive@www.apache.org Received: (qmail 53327 invoked from network); 23 Nov 2006 09:35:28 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 23 Nov 2006 09:35:28 -0000 Received: (qmail 98276 invoked by uid 500); 23 Nov 2006 09:35:34 -0000 Delivered-To: apmail-harmony-dev-archive@harmony.apache.org Received: (qmail 98241 invoked by uid 500); 23 Nov 2006 09:35:34 -0000 Mailing-List: contact dev-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list dev@harmony.apache.org Received: (qmail 98232 invoked by uid 99); 23 Nov 2006 09:35:34 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 23 Nov 2006 01:35:34 -0800 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: domain of alexey.a.petrenko@gmail.com designates 66.249.92.168 as permitted sender) Received: from [66.249.92.168] (HELO ug-out-1314.google.com) (66.249.92.168) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 23 Nov 2006 01:35:22 -0800 Received: by ug-out-1314.google.com with SMTP id z36so300492uge for ; Thu, 23 Nov 2006 01:35:01 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=fcva7A34DaEk1igGyVu5UBIUVULvBGhiLE67OOKT4RC0r9MZMdTuiEz+nDBlyh3q75R/9zZJuCrVNaLyTH6ybuXQmTwRQ1X7hWGiW8VkKM89cpQI4L0oxrhkpqXM043oABL8oP45CcurIHcHUQWP85Spu+5AaGoCEt7C8TI3Rz0= Received: by 10.78.157.8 with SMTP id f8mr8825984hue.1164274500759; Thu, 23 Nov 2006 01:35:00 -0800 (PST) Received: by 10.78.107.10 with HTTP; Thu, 23 Nov 2006 01:35:00 -0800 (PST) Message-ID: Date: Thu, 23 Nov 2006 12:35:00 +0300 From: "Alexey Petrenko" To: dev@harmony.apache.org Subject: Re: [classlib][net] issue H-1879 HttpURLConnectionTest In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <8E389A5F2FEABA4CB1DEC35A25CB39CE7831B2@mssmsx411> <834b3bd50611220704l5dbf587dk713638c5dc95cc48@mail.gmail.com> X-Virus-Checked: Checked by ClamAV on apache.org 2006/11/23, Alexei Fedotov : > 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 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 : > > >> +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 : > > >> >> 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 : > > >> >> >> 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 : > > >> >> >> > 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 wrote: > > >> >> >> > > Alexei, > > >> >> >> > > > > >> >> >> > > I attached fix to issue, could you try it, please? > > >> >> >> > > > > >> >> >> > > 2006/11/21, Alexei Fedotov : > > >> >> >> > > > 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 wrote: > > >> >> >> > > > > 2006/11/21, Jimmy, Jing Lv : > > >> >> >> > > > > > 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 >