[ 
https://issues.apache.org/jira/browse/HIVE-1760?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12926500#action_12926500
 ] 

Namit Jain commented on HIVE-1760:
----------------------------------

+1

running tests now

> 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
>         Attachments: HIVE-1760.1.patch
>
>
> 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.

Reply via email to