[
https://issues.apache.org/jira/browse/HADOOP-7469?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Steve Loughran resolved HADOOP-7469.
------------------------------------
Resolution: Fixed
Fix Version/s: 0.23.0
Target Version/s: 0.23.0, 0.24.0 (was: 0.24.0, 0.23.0)
backported to 0.23
> add a standard handler for socket connection problems which improves
> diagnostics
> --------------------------------------------------------------------------------
>
> Key: HADOOP-7469
> URL: https://issues.apache.org/jira/browse/HADOOP-7469
> Project: Hadoop Common
> Issue Type: Sub-task
> Components: util
> Affects Versions: 0.20.203.0, 0.23.0
> Reporter: Steve Loughran
> Assignee: Steve Loughran
> Priority: Minor
> Labels: debugging
> Fix For: 0.23.0, 0.24.0
>
> Attachments: HADOOP-7466-connection-handler.patch,
> HADOOP-7469-3.patch, HADOOP-7469-b023.patch, HADOOP-7469.patch,
> HADOOP-7469.patch, HADOOP-7469.patch
>
> Original Estimate: 2h
> Remaining Estimate: 2h
>
> connection refused, connection timed out, no route to host, etc, are classic
> IOExceptions that can be raised in a lot of parts of the code. The standard
> JDK exceptions are useless for debugging as they
> # don't include the destination (host, port) that can be used in diagnosing
> service dead/blocked problems
> # don't include any source hostname that can be used to handle routing issues
> # assume the reader understands the TCP stack.
> It's obvious from the -user lists that a lot of people hit these problems and
> don't know how to fix them. Sometimes the source has been patched to insert
> the diagnostics, but it may be convenient to have a single method to
> translate some
> {code}
> SocketException processIOException(SocketException e, String destHost, int
> destPort) {
> String localhost = getLocalHostname();
> String details = "From "+ localhost +" to "+ desthost + ":"+destPort;
> if (e instanceof ConnectException) {
> return new ConnectException(details
> + " -- see http://wiki.apache.org/hadoop/ConnectionRefused --" +
> e, e);
> }
> if (e instanceof UnknownHostException) {
> return new UnknownHostException(details
> + " -- see http://wiki.apache.org/hadoop/UnknownHost --" + e, e);
> }
> // + handlers for other common socket exceptions
>
> //and a default that returns an unknown class unchanged
> return e;
> }
>
> {code}
> Testing: try to connect to an unknown host, a local port that isn't live,
> etc. It's hard to replicate all failures consistently. It may be simpler just
> to verify that if you pass in a specific exception, the string is expanded
> and the class is unchanged.
> This code could then be patched in to places where IO takes place. Note that
> Http Components and HttpClient libs already add some destination details on
> some operation failures, with their own HttpException tree: it's simplest to
> leave these alone.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira