FAQ
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
Reporter: Steve Loughran
Priority: Minor


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.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Search Discussions

  • Steve Loughran (Resolved) (JIRA) at Sep 30, 2011 at 2:21 pm
    [ 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

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupcommon-dev @
categorieshadoop
postedJul 18, '11 at 2:32p
activeSep 30, '11 at 2:21p
posts2
users1
websitehadoop.apache.org...
irc#hadoop

People

Translate

site design / logo © 2022 Grokbase