hive-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "BELUGA BEHR (JIRA)" <j...@apache.org>
Subject [jira] [Created] (HIVE-16966) Remove String Checks For Error Handling
Date Tue, 27 Jun 2017 00:07:00 GMT
BELUGA BEHR created HIVE-16966:
----------------------------------

             Summary: Remove String Checks For Error Handling
                 Key: HIVE-16966
                 URL: https://issues.apache.org/jira/browse/HIVE-16966
             Project: Hive
          Issue Type: Improvement
          Components: Metastore
    Affects Versions: 3.0.0
            Reporter: BELUGA BEHR
            Priority: Minor


{code:title=org.apache.hadoop.hive.metastore.RetryingMetaStoreClient}
      } catch (UndeclaredThrowableException e) {
        throw e.getCause();
      } catch (InvocationTargetException e) {
        Throwable t = e.getCause();
        if (t instanceof TApplicationException) {
          TApplicationException tae = (TApplicationException)t;
          switch (tae.getType()) {
          case TApplicationException.UNSUPPORTED_CLIENT_TYPE:
          case TApplicationException.UNKNOWN_METHOD:
          case TApplicationException.WRONG_METHOD_NAME:
          case TApplicationException.INVALID_PROTOCOL:
            throw t;
          default:
            // TODO: most other options are probably unrecoverable... throw?
            caughtException = tae;
          }
        } else if ((t instanceof TProtocolException) || (t instanceof TTransportException))
{
          // TODO: most protocol exceptions are probably unrecoverable... throw?
          caughtException = (TException)t;
        } else if ((t instanceof MetaException) && t.getMessage().matches(
            "(?s).*(JDO[a-zA-Z]*|TProtocol|TTransport)Exception.*") &&
            !t.getMessage().contains("java.sql.SQLIntegrityConstraintViolationException"))
{
          caughtException = (MetaException)t;
        } else {
          throw t;
        }
      } catch (MetaException e) {
        if (e.getMessage().matches("(?s).*(IO|TTransport)Exception.*") &&
            !e.getMessage().contains("java.sql.SQLIntegrityConstraintViolationException"))
{
          caughtException = e;
        } else {
          throw e;
        }
{code}

Using these magic string checks is very fragile.  The Metastore should be throwing tailored
exceptions instead of relying on string checking in the client code that bubble up from third-party
libraries.  Metastore should control the underlying libraries and their specific exceptions.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message