hadoop-common-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Steve Loughran (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HADOOP-14385) HttpExceptionUtils#validateResponse swallows exceptions
Date Thu, 11 May 2017 13:38:04 GMT

    [ https://issues.apache.org/jira/browse/HADOOP-14385?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16006433#comment-16006433
] 

Steve Loughran commented on HADOOP-14385:
-----------------------------------------

# could be a good place to add the URL to help with diagnostics too
# the original ex.toString value should go into the toplevel IOE message, so that even if
the entire stack trace is lost, the single summary string is sufficient to start working on
the problem

> HttpExceptionUtils#validateResponse swallows exceptions
> -------------------------------------------------------
>
>                 Key: HADOOP-14385
>                 URL: https://issues.apache.org/jira/browse/HADOOP-14385
>             Project: Hadoop Common
>          Issue Type: Improvement
>            Reporter: Wei-Chiu Chuang
>            Assignee: Wei-Chiu Chuang
>            Priority: Trivial
>         Attachments: HADOOP-14385.001.patch
>
>
> In the following code
> {code:title=HttpExceptionUtils#validateResponse}
> try {
>         es = conn.getErrorStream();
>         ObjectMapper mapper = new ObjectMapper();
>         Map json = mapper.readValue(es, Map.class);
>         json = (Map) json.get(ERROR_JSON);
>         String exClass = (String) json.get(ERROR_CLASSNAME_JSON);
>         String exMsg = (String) json.get(ERROR_MESSAGE_JSON);
>         if (exClass != null) {
>           try {
>             ClassLoader cl = HttpExceptionUtils.class.getClassLoader();
>             Class klass = cl.loadClass(exClass);
>             Constructor constr = klass.getConstructor(String.class);
>             toThrow = (Exception) constr.newInstance(exMsg);
>           } catch (Exception ex) {
>             toThrow = new IOException(String.format(
>                 "HTTP status [%d], exception [%s], message [%s] ",
>                 conn.getResponseCode(), exClass, exMsg));
>           }
>         } else {
>           String msg = (exMsg != null) ? exMsg : conn.getResponseMessage();
>           toThrow = new IOException(String.format(
>               "HTTP status [%d], message [%s]", conn.getResponseCode(), msg));
>         }
>       } catch (Exception ex) {
>         toThrow = new IOException(String.format( <-- here
>             "HTTP status [%d], message [%s]", conn.getResponseCode(),
>             conn.getResponseMessage()));
>       }
> {code}
> If the an exception is thrown within the try block, the initial exception is swallowed,
and it doesn't help debugging.
> We had to cross reference this exception with the KMS server side to guess what happened.
> IMHO the IOException thrown should also carry the initial exception. It should also print
exClass and exMsg. It probably failed to instantiate an exception class.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-issues-help@hadoop.apache.org


Mime
View raw message