[ 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