On 12/08/16 20:56, Ramanand Patil wrote:
Hi Aleksey,

Thank you for your review.
In the exception handler block: when last proxy fails, it was using a DIRECT 
connection, but in the fixed version it was just a re-try once with the last 
proxy before failing the connection.

Considering your points I think the alternate approach of not re-trying and 
just failing after the last proxy is good. I have updated the code slightly 
which does the same as you suggested.
And also updated the test case to use one more dummy proxy in MyProxySelector 
class.

Here is the updated Webrev: 
http://cr.openjdk.java.net/~rpatil/8161016/webrev.01/

This looks good to me.

-Chris.



Regards,
Ramanand.

-----Original Message-----
From: Aleksey Shipilev [mailto:aleksey.shipi...@gmail.com]
Sent: Thursday, August 11, 2016 10:10 PM
To: Ramanand Patil; OpenJDK Network Dev list
Cc: core-libs-...@openjdk.java.net
Subject: Re: RFR: 8161016: Strange behavior of URLConnection with proxy

On 08/11/2016 05:17 PM, Ramanand Patil wrote:
Webrev: http://cr.openjdk.java.net/~rpatil/8161016/webrev.00/

Fix: Instead of falling back to direct connection when last proxy
fails to open connection, re-try once with the last proxy. An
alternate solution can also be- don't try to open any connection when
all set proxies fails to open a connection.

I wonder if the code should traverse the last proxy within the loop, not trying 
to special-case it in the exception handler -- otherwise we would miss logging, 
exceptions, and ProxySelector notifications coming from the last proxy?

E.g. instead of:

1116 } catch (IOException ioex) {
1117   if (p != Proxy.NO_PROXY) {
1118      sel.connectFailed(uri, p.address(), ioex);
1119      if (!it.hasNext()) {
1120         // re-try once with the last Proxy
1121         http = getNewHttpClient(url, p, connectTimeout, false);
1122         http.setReadTimeout(readTimeout);
1123         break;
1124      }
1125   } else {
1126      throw ioex;
1127   }
1128   continue;
1129 }

...do:

} catch (IOException ioex) {
  if (p == Proxy.NO_PROXY) {
    throw ioex;
  }
  sel.connectFailed(uri, p.address(), ioex);
  if (it.hasNext()) {
     continue;   // try the next Proxy
  } else {
     throw ioex; // that was the last Proxy, time to fail
  }
}

Thanks,
-Aleksey

Reply via email to