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] Updated: (HIVE-1760) Mismatched open/commit transaction calls in case of connection retry
Date Fri, 29 Oct 2010 22:57:20 GMT

     [ https://issues.apache.org/jira/browse/HIVE-1760?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Paul Yang updated HIVE-1760:
----------------------------

    Component/s: Metastore

> 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
>          Components: Metastore
>    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