Uploaded image for project: 'Hadoop Common'
  1. Hadoop Common
  2. HADOOP-14385

HttpExceptionUtils#validateResponse swallows exceptions

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Trivial
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.3.0, 3.2.1, 3.1.3
    • Component/s: None
    • Labels:
      None

      Description

      In the following code

      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()));
            }
      

      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.

        Attachments

        1. HADOOP-14385.001.patch
          0.8 kB
          Wei-Chiu Chuang
        2. HADOOP-14385.002.patch
          2 kB
          Wei-Chiu Chuang

          Activity

            People

            • Assignee:
              weichiu Wei-Chiu Chuang
              Reporter:
              weichiu Wei-Chiu Chuang
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: