hive-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paul Yang (JIRA)" <j...@apache.org>
Subject [jira] Created: (HIVE-1760) Mismatched open/commit transaction calls in case of connection retry
Date Fri, 29 Oct 2010 22:57:19 GMT
Mismatched open/commit transaction calls in case of connection retry
--------------------------------------------------------------------

                 Key: HIVE-1760
                 URL: https://issues.apache.org/jira/browse/HIVE-1760
             Project: Hive
          Issue Type: Bug
    Affects Versions: 0.7.0
            Reporter: Paul Yang
            Assignee: Paul Yang


Consider the create table function (parts removed for simplicity):

{code}

    private void create_table_core(final RawStore ms, final Table tbl)
        throws AlreadyExistsException, MetaException, InvalidObjectException {

      Path tblPath = null;
      boolean success = false, madeDir = false;
      try {
        ms.openTransaction();

        // get_table checks whether database exists, it should be moved here
        if (is_table_exists(tbl.getDbName(), tbl.getTableName())) {
          throw new AlreadyExistsException("Table " + tbl.getTableName()
              + " already exists");
        }

        ms.createTable(tbl);
        success = ms.commitTransaction();

      } finally {
        if (!success) {
          ms.rollbackTransaction();
          if (madeDir) {
            wh.deleteDir(tblPath, true);
          }
        }
      }
    }

{code}

A potential openTransaction() / commitTransaction() mismatch can occur if the is_table_exits()
method call experiences a connection failure. 

Since get_table() in is_table_exists() uses executeWithRetry(),  the transaction will be rolled
back and get_table() will be called again if the is a connection problem. However, this rollback
and retry will reset the global openTransactionCalls counter back to 0, effectively canceling
out the openTransaction() call. 

Then later in the method when commitTransaction() is called, Hive will throw an error similar
to the following:

Caused by: java.lang.RuntimeException: commitTransaction was called but openTransactionCalls
= 0. This probably indicates that there are unbalanced calls to openTransaction/commitTransaction

A similar problem exists with create_type_core()

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message